From ae64f3eb0ab1b2ce5d1a8942f391d7eb6180b090 Mon Sep 17 00:00:00 2001 From: David Eisinger Date: Wed, 17 Jan 2024 12:04:56 -0500 Subject: [PATCH] Use w3m for archiving --- bin/archive | 2 +- static/archive/aaronmbushnell-com-x5e6nn.txt | 246 +- .../allaboutcoding-ghinda-com-jnjy0d.txt | 791 +-- static/archive/analogoffice-net-xmnih2.txt | 296 +- static/archive/baty-net-bplhdp.txt | 111 +- static/archive/benhoyt-com-vfdv1s.txt | 1188 ++-- static/archive/blog-testdouble-com-ft5qbw.txt | 879 ++- static/archive/blog-testdouble-com-g9g5id.txt | 585 +- static/archive/blog-testdouble-com-krzanb.txt | 1191 ++-- static/archive/brainbaking-com-wbhgjj.txt | 353 +- static/archive/calnewport-com-jtszvi.txt | 683 ++- static/archive/cerebralab-com-qy5zqs.txt | 557 +- static/archive/changelog-com-kqx1ni.txt | 785 ++- static/archive/chrisnotes-io-ijc95x.txt | 588 +- static/archive/cloud-google-com-windxx.txt | 586 +- static/archive/codefol-io-bskabg.txt | 554 +- static/archive/craigmod-com-xfi1ge.txt | 709 ++- static/archive/crawshaw-io-k5slfj.txt | 662 ++- static/archive/deadspin-com-cjpmjw.txt | 565 +- static/archive/dev-to-ptnb0b.txt | 4878 ++++++++--------- static/archive/edmtips-com-05su6g.txt | 1009 ++-- static/archive/funlandrehoboth-com-jrkd5r.txt | 561 +- static/archive/go-dev-vfin4x.txt | 3011 +++++----- static/archive/grugbrain-dev-dzqozx.txt | 1182 ++-- static/archive/inkdroid-org-belior.txt | 282 +- static/archive/inviqa-com-kztbkj.txt | 759 ++- static/archive/jeffhuang-com-njdbjn.txt | 482 +- static/archive/josem-co-8ssbyq.txt | 189 +- static/archive/leancrew-com-7l5uqs.txt | 256 +- static/archive/lukeplant-me-uk-ms1b6l.txt | 195 +- static/archive/macwright-com-o4dndf.txt | 527 +- static/archive/macwright-com-vvkegs.txt | 451 +- static/archive/maggieappleton-com-7am49k.txt | 195 +- static/archive/maggieappleton-com-fube9k.txt | 177 +- static/archive/maggieappleton-com-n6xsqa.txt | 1162 ++-- static/archive/mcfunley-com-5myzcq.txt | 427 +- static/archive/medium-com-efpmux.txt | 500 +- .../archive/mike-puddingtime-org-svf0ua.txt | 296 +- .../archive/samkriss-substack-com-5indyq.txt | 1294 +++-- static/archive/sive-rs-ssi9lg.txt | 1366 +++-- static/archive/softwarecrisis-dev-7c7z9g.txt | 1648 +++--- static/archive/stationery-pizza-93ey2p.txt | 118 +- static/archive/stationery-pizza-vxksey.txt | 142 +- static/archive/stephango-com-tiumoc.txt | 266 +- static/archive/stephenn-com-kbiijs.txt | 226 +- static/archive/taylor-town-5siv9a.txt | 275 +- static/archive/techxplore-com-8o7hmu.txt | 991 ++-- static/archive/thesweetsetup-com-99zpkj.txt | 391 +- static/archive/thesweetsetup-com-x9nbdv.txt | 575 +- static/archive/timharek-no-ah7ilz.txt | 186 +- static/archive/twonerds-net-pv4a04.txt | 189 +- static/archive/vladh-net-lmumqo.txt | 602 +- static/archive/warpspire-com-bhv7lv.txt | 488 +- static/archive/world-hey-com-ivvqlb.txt | 179 +- static/archive/www-annahavron-com-34fw9w.txt | 437 +- static/archive/www-annahavron-com-8hj07z.txt | 222 +- .../archive/www-artofmanliness-com-6lxmwc.txt | 925 ++-- .../archive/www-artofmanliness-com-rx8ary.txt | 1406 +++-- .../www-baldurbjarnason-com-uaaq9d.txt | 340 +- static/archive/www-chrbutler-com-294dnz.txt | 619 ++- static/archive/www-danstroot-com-wwjfi6.txt | 1130 ++-- static/archive/www-gearpatrol-com-6mp4nk.txt | 1063 ++-- static/archive/www-infoelba-com-beacbk.txt | 970 ++-- static/archive/www-infoelba-com-pmih4w.txt | 1046 ++-- static/archive/www-newyorker-com-41taro.txt | 1262 +++-- static/archive/www-nytimes-com-gvijqf.txt | 511 +- static/archive/www-nytimes-com-s2rtib.txt | 825 ++- static/archive/www-nytimes-com-yrjrte.txt | 1169 ++-- .../www-programmablemutter-com-8wp6z1.txt | 827 ++- static/archive/www-robinsloan-com-sbm0vr.txt | 426 +- static/archive/www-sitepoint-com-6vwmef.txt | 606 +- static/archive/www-theatlantic-com-biphm9.txt | 508 +- static/archive/www-theverge-com-mjsr9z.txt | 875 ++- static/archive/www-valetmag-com-b1tpcf.txt | 935 ++-- static/archive/www-viget-com-97ckk4.txt | 588 +- static/archive/www-viget-com-biybeb.txt | 543 +- static/archive/www-viget-com-yrczde.txt | 641 +-- static/archive/www-wired-com-ybjipw.txt | 1021 ++-- static/archive/www-wunc-org-fstofo.txt | 2175 ++++---- static/archive/xeiaso-net-ygnwtd.txt | 765 +-- 80 files changed, 28830 insertions(+), 29811 deletions(-) diff --git a/bin/archive b/bin/archive index 17cf116..a0b7a0b 100755 --- a/bin/archive +++ b/bin/archive @@ -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 diff --git a/static/archive/aaronmbushnell-com-x5e6nn.txt b/static/archive/aaronmbushnell-com-x5e6nn.txt index fd28cea..45b133a 100644 --- a/static/archive/aaronmbushnell-com-x5e6nn.txt +++ b/static/archive/aaronmbushnell-com-x5e6nn.txt @@ -1,170 +1,174 @@ - #[1]home [2]RSS +[1] Aaron Bushnell - [3]Aaron Bushnell - (BUTTON) +Hi, I'm Aaron! - Hi, I'm Aaron! +Born and raised in the midwest and notorious [3]golden retriever hoarder. - Born and raised in the midwest and notorious [4]golden retriever - hoarder. - * Featherhour - * Mastodon - * GitHub - * Twitch - * Spotify - * Twitter + • [4] + Featherhour + • [5] + Mastodon + • [6] + GitHub + • [7] + Twitch + • [8] + Spotify + • [9] + Twitter - You are beautiful. ❤️ +You are beautiful. ❤️ - [5]Aaron Bushnell +[10] Aaron Bushnell - Hi, I'm Aaron! +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. - You are beautiful. ❤️ + • [12] + Featherhour + • [13] + Mastodon + • [14] + GitHub + • [15] + Twitch + • [16] + Spotify + • [17] + Twitter - [7]← View all posts - August 28, 2023 +You are beautiful. ❤️ + +[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 +A year later you're more likely to be mired in: - 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:
- 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). + - 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 - 2. Detecting "leakage" can be easier because changes to structure, - functionality, and styling can occur in this single file +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 + 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. +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. - 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?" +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/ diff --git a/static/archive/allaboutcoding-ghinda-com-jnjy0d.txt b/static/archive/allaboutcoding-ghinda-com-jnjy0d.txt index 8b7b7e8..3d3374d 100644 --- a/static/archive/allaboutcoding-ghinda-com-jnjy0d.txt +++ b/static/archive/allaboutcoding-ghinda-com-jnjy0d.txt @@ -1,122 +1,158 @@ +[2] - (BUTTON) - - Lucian Ghinda - +[4] +[]Lucian Ghinda All about coding - (BUTTON) (BUTTON) - Follow +Follow -[1]All about coding +[7]All about coding - Follow - Ruby open source: feedbin Ruby open source: feedbin +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 +11 min read Table of contents - * The product - * Open source - - * License - - 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 - - Testing - * Custom assertions - - Conclusion + • [19] + The product + • [20] + Open source + □ [21] + License + • [22] + Technical review + □ [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 + □ [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 +They are currently using: + + • 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. +Code Architecture: - Database: - * The DB is PostgreSQL + • They are using the standard Rails organisation of MVC. - Jobs queue: - * Sidekiq +Database: - 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 + • The DB is PostgreSQL + +Jobs queue: + + • Sidekiq + +On the front-end side: + + • 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: +Running /bin/rails stats will output the following: - Running VSCodeCounter will give the following stats: +[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. +For Ruby: + + • They are using [54]standardrb as the Style Guide with no customisations. Storage, Persistence and in-memory storage - The DB is PostgreSQL. +The DB is PostgreSQL. + +They are not using the schema.rb but the [55]structure.sql format for DB schema +dump is configured via application.rb: - They are not using the schema.rb but the [17]structure.sql format for - DB schema dump is configured via application.rb: module Feedbin class Application < Rails::Application # other configs @@ -125,28 +161,29 @@ module Feedbin end 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)" +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)" 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. +Redis is configured to be used with Sidekiq. + +This is what the [56]redis initializer looks like: - This is what the [18]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 @@ -214,47 +252,57 @@ 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" +Here are some of the gems used: - 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 +# 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,44 +333,45 @@ 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: +This is used to configure: + # https://github.com/feedbin/feedbin/blob/main/config/application.rb#L47 config.assets.css_compressor = ConditionalSassCompressor.new Routes - There is a combination of RESTful routes and non-restful routes. +There is a combination of RESTful routes and non-restful routes. + +Here is an example from entries in the [75]routes.rb : - Here is an example from entries in the [37]routes.rb : # https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133 resources :entries, only: [:show, :index, :destroy] do @@ -358,20 +400,22 @@ Routes Controllers - The controllers are mostly what I would call vanilla Rails 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 +Three notes about them: - 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 +The repo contains mostly straight-forward controllers like this one: + +# https://github.com/feedbin/feedbin/blob/main/app/controllers/pages_internal_controller.rb#L1 class PagesInternalController < ApplicationController def create @@ -406,9 +449,9 @@ class PagesInternalController < ApplicationController end 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 +But also few controllers that include some logic: + +# 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: - 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 +This controller defines a private method called presents: + +# https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#L1 class BasePresenter def initialize(object, locals, template) @@ -516,9 +560,9 @@ class BasePresenter end end - and it is used like this for example: -# https://github.com/feedbin/feedbin/blob/main/app/presenters/user_presenter.rb# -L2 +and it is used like this for example: + +# 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 +It defines a method to add Stimulus controller in components like this: - 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: } +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 +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 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) +The part with binding does the following: - 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. - __________________________________________________________________ +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 [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. +Enjoyed this article? - 👐 Subscribe to my Ruby and Ruby on rails courses over email at - [45]learn.shortruby.com - effortless learning anytime, anywhere +👉 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. - 🤝 Let's connect on [46]Ruby.social or [47]Linkedin or [48]Twitter where - I post mainly about Ruby and Rails. +👐 Subscribe to my Ruby and Ruby on rails courses over email at [84] +learn.shortruby.com - effortless learning anytime, anywhere - 🎥 Follow me on [49]my YouTube channel for short videos about Ruby +🤝 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 [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 +Support Lucian Ghinda by becoming a sponsor. Any amount is appreciated! - [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 diff --git a/static/archive/analogoffice-net-xmnih2.txt b/static/archive/analogoffice-net-xmnih2.txt index ca66a52..5749825 100644 --- a/static/archive/analogoffice-net-xmnih2.txt +++ b/static/archive/analogoffice-net-xmnih2.txt @@ -1,209 +1,207 @@ - [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 +[1]Analog Office - The Life-Changing Magic of Keeping a File Index + • [2]Home + • [3]Subscribe + • [4]Archive + • [5]Photos + • [6]About + • [7]Bookshelf + • [8]Contact + • [9]Ask a Question + • [10]Office Holders + • [11]Search - Filing systems for personal, household files don’t get much love from - people who write about household organizing. Most books dealing with - household organization brush it off in a page or two, and it often - comes down to something like this: +The Life-Changing Magic of Keeping a File Index - “Throw out all your papers! Go electronic! With the six papers that are - left over, file them alphabetically!” +Filing systems for personal, household files don’t get much love from people +who write about household organizing. Most books dealing with household +organization brush it off in a page or two, and it often comes down to +something like this: - Marie Kondo, in her first book, advised people to dump most of their - papers. (GASP!) +“Throw out all your papers! Go electronic! With the six papers that are left +over, file them alphabetically!” - Certainly, if you don’t keep papers, you won’t need an excellent filing - system. +Marie Kondo, in her first book, advised people to dump most of their papers. +(GASP!) - But what if you do want to keep a lot of papers, AND find them quickly? +Certainly, if you don’t keep papers, you won’t need an excellent filing system. - 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. +But what if you do want to keep a lot of papers, AND find them quickly? - 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. +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. - And I like being able to do that QUICKLY: go to my file cabinet, pull - out the gift passes, done. No rummaging through piles or having to pay - entrance fees for our guests because I couldn’t find the passes. +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. - This is where decent filing systems come in. +And I like being able to do that QUICKLY: go to my file cabinet, pull out the +gift passes, done. No rummaging through piles or having to pay entrance fees +for our guests because I couldn’t find the passes. - I’ll be writing more about some ways to file paper reference materials - (this IS after all, the Analog Office) but today I want to focus on: - * the need - * the genius - * the beauty, and - * the brilliance of a digital document that most people at home don’t - keep: a file index. +This is where decent filing systems come in. - A file index is your [12]Where Is It? document for your files. +I’ll be writing more about some ways to file paper reference materials (this IS +after all, the Analog Office) but today I want to focus on: - It’s like a table of contents for your filing system. + • the need + • the genius + • the beauty, and + • the brilliance of a digital document that most people at home don’t keep: a + file index. + +A file index is your [12]Where Is It? document for your files. + +It’s like a table of contents for your filing system. Choose: Invest Predictable, Regular, Short Periods of Time? Or, Lose: Long, Stressful, Unpredictable Periods of Time (And Money)? - When you can’t find a paper, you lose an unpredictable amount of time - running around and looking through piles, and you also lose sometimes - significant amounts of money, because some papers are stand-ins for - money (guest passes at the museum); or cost you time and money to - replace (deeds, titles). +When you can’t find a paper, you lose an unpredictable amount of time running +around and looking through piles, and you also lose sometimes significant +amounts of money, because some papers are stand-ins for money (guest passes at +the museum); or cost you time and money to replace (deeds, titles). - A file index will take a little time to set up, and small amounts of - predictable time to maintain. So it is a trade-off. +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. +But maybe you think of it as car insurance. - How about “C” for Car insurance? +How about “C” for Car insurance? - If you file it under “I” for insurance, do you keep your health - insurance information in there too? Renter’s or homeowners insurance, - does that go there too? +If you file it under “I” for insurance, do you keep your health insurance +information in there too? Renter’s or homeowners insurance, does that go there +too? - You could; you could have a folder for, “Insurance, Car” and another - folder for “Insurance, Health,” and another for, “Insurance, Renters.” - Or, you could put health insurance under “H” or even “M” (medical!)… - and so on, and so on… aaaargh….! +You could; you could have a folder for, “Insurance, Car” and another folder for +“Insurance, Health,” and another for, “Insurance, Renters.” Or, you could put +health insurance under “H” or even “M” (medical!)… and so on, and so on… +aaaargh….! - Enter the file index. +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. ✨🎉 +✨ You want it to be searchable. ✨🎉 - It’s also a good idea to figure out how you will make your file index - accessible to others. +It’s also a good idea to figure out how you will make your file index +accessible to others. - Because I want my husband to be able to find important household files, - I print the file index out whenever I update it, so he can have a way - to find things in case he can’t get into my computer. You could also - share the document and keep it all online, or print out instructions - for how to access it in case someone else needs to. +Because I want my husband to be able to find important household files, I print +the file index out whenever I update it, so he can have a way to find things in +case he can’t get into my computer. You could also share the document and keep +it all online, or print out instructions for how to access it in case someone +else needs to. Make Your Own File Index - For your file index, you can use a spreadsheet, a notes program, a - single document – as long as it is searchable, and you have a way to - share access if these are household files that someone else may need. +For your file index, you can use a spreadsheet, a notes program, a single +document – as long as it is searchable, and you have a way to share access if +these are household files that someone else may need. - It doesn’t matter where the insurance paper goes. It could be under any - letter you want. +It doesn’t matter where the insurance paper goes. It could be under any letter +you want. - It matters that you record your decision on a document that maps out - where you put your files. +It matters that you record your decision on a document that maps out where you +put your files. - Let’s say you decide that your Zenith Auto Insurance Policy goes under - “C” for “Car Insurance.” +Let’s say you decide that your Zenith Auto Insurance Policy goes under “C” for +“Car Insurance.” - So you record on the file index: +So you record on the file index: Location; Topic or General Description; Keywords - * “Location” = the section of the physical file system you need to - look in. What is it filed under? That’s your location. For an - alphabetical file system, it will be a letter. - * “Topic or General Description” = what you call the document; the - first phrase that comes to mind when you are looking for the - document: if you think of it as your car insurance policy, write - “car insurance policy” here - * Keywords = MAGIC!! when combined with ✨ search functions 🎉 + • “Location” = the section of the physical file system you need to look in. + What is it filed under? That’s your location. For an alphabetical file + system, it will be a letter. - Filing can be frustrating because often we think of multiple terms for - our files. (This happens a lot in homes, less for businesses with - structured file naming conventions.) + • “Topic or General Description” = what you call the document; the first + phrase that comes to mind when you are looking for the document: if you + think of it as your car insurance policy, write “car insurance policy” here - I might think of it as the “car insurance policy,” my husband might - look for “Zenith.” + • Keywords = MAGIC!! when combined with ✨ search functions 🎉 - So with keywords, you list any words that you might think of when - looking for the document, that are not already named in your topic - section, above. For this one, you might list: “Zenith, auto, policy, - policies, automobile, registration, proof of insurance.” +Filing can be frustrating because often we think of multiple terms for our +files. (This happens a lot in homes, less for businesses with structured file +naming conventions.) - an example of a file index made from a spreadsheet, showing sample - entries using columns for location, topic, and keyword, and a fourth - column for digital file locations +I might think of it as the “car insurance policy,” my husband might look for +“Zenith.” - Next level: after keywords, if you have a digital file that corresponds - to the paper one, put in the location for the digital file. +So with keywords, you list any words that you might think of when looking for +the document, that are not already named in your topic section, above. For this +one, you might list: “Zenith, auto, policy, policies, automobile, registration, +proof of insurance.” - Find it all, with file indexes. - __________________________________________________________________ +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 - 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. +Next level: after keywords, if you have a digital file that corresponds to the +paper one, put in the location for the digital file. - Wondering how to manage your paper-based or hybrid paper-digital - systems? [15]Ask me a question. - __________________________________________________________________ +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. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NOTES - * I’m not a gamer, but my son recommended this split keyboard to me, - and it is AWESOME. Shifting rainbow color backlighting, Cherry MX - mechanical key switches (whatever that means, I’m reading from the - brochure that I quickly and easily pulled from my files), but the best - thing is that I no longer have wrist pain. Plus, the cat can hang out - in the middle. +* I’m not a gamer, but my son recommended this split keyboard to me, and it is +AWESOME. Shifting rainbow color backlighting, Cherry MX mechanical key switches +(whatever that means, I’m reading from the brochure that I quickly and easily +pulled from my files), but the best thing is that I no longer have wrist pain. +Plus, the cat can hang out in the middle. - cat stepping in the middle of a split keyboard - ***** - Written on 31 May 2023 +cat stepping in the middle of a split keyboard - © 2024 Anna Havron. All rights reserved. Website hosted by - [16]micro.blog +***** +Written on 31 May 2023 + © 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/ diff --git a/static/archive/baty-net-bplhdp.txt b/static/archive/baty-net-bplhdp.txt index c2897a7..aacea3f 100644 --- a/static/archive/baty-net-bplhdp.txt +++ b/static/archive/baty-net-bplhdp.txt @@ -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) +Ending my OpenBSD experiment (Almost) - January 4, 2024 · 197 words +January 4, 2024 · 197 words - I did [7]this fun thing from Derek Sivers because I wanted to play with - [8]OpenBSD and with [9]Vultr for hosting. +I did [8]this fun thing from Derek Sivers because I wanted to play with [9] +OpenBSD and with [10]Vultr for hosting. - Well, I played with it. It was fun. I got to see how [10]Dovecot works - and I learned how to configure Relayd and the OpenBSD httpd server. +Well, I played with it. It was fun. I got to see how [11]Dovecot works and I +learned how to configure Relayd and the OpenBSD httpd server. - I think I’d end up liking it. BSD feels lighter and simpler and - therefore probably more secure than the Ubuntu servers I’m running. +I think I’d end up liking it. BSD feels lighter and simpler and therefore +probably more secure than the Ubuntu servers I’m running. - However, I don’t need another server to manage. I don’t need to run my - own mail server or CalDAV server. My VPS at Digital Ocean has been - running (::knocks wood::) smoothly for years and I’ve got the - configuration down. +However, I don’t need another server to manage. I don’t need to run my own mail +server or CalDAV server. My VPS at Digital Ocean has been running (::knocks +wood::) smoothly for years and I’ve got the configuration down. - I’ll be deleting the OpenBSD server once I’ve moved the few sites I’d - migrated there back to Digital Ocean. +I’ll be deleting the OpenBSD server once I’ve moved the few sites I’d migrated +there back to Digital Ocean. - Remember, [11]Reduce and Simplify. +Remember, [12]Reduce and Simplify. - I may try again later with stock OpenBSD and Caddy, without all of the - Sivers’ stuff. +I may try again later with stock OpenBSD and Caddy, without all of the Sivers’ +stuff. - 2 hours later: I was right. I spun up a fresh OpenBSD server at Vultr - and configured it myself. No services running but relayd->httpd and so - far the only site it’s running is [12]jackbaty.com. I like the idea of - BSD so much that I couldn’t give up quite yet. +2 hours later: I was right. I spun up a fresh OpenBSD server at Vultr and +configured it myself. No services running but relayd->httpd and so far the only +site it’s running is [13]jackbaty.com. I like the idea of BSD so much that I +couldn’t give up quite yet. - * [13]OpenBSD + • [14]OpenBSD - [14]« Prev - Obsidian is not at all joyful to use [15]Next » - The care and feeding of my system +[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 diff --git a/static/archive/benhoyt-com-vfdv1s.txt b/static/archive/benhoyt-com-vfdv1s.txt index 539904b..ef60df3 100644 --- a/static/archive/benhoyt-com-vfdv1s.txt +++ b/static/archive/benhoyt-com-vfdv1s.txt @@ -1,369 +1,343 @@ - [1]Ben Hoyt - * [2]Home - * [3]Resume/CV - * [4]Projects - * [5]Tech Writing - * [6]Non-Tech - * [7]Email +[1]Ben Hoyt - * [8]benhoyt.com - * [9]benhoyt@gmail.com + • [2]Home + • [3]Resume/CV + • [4]Projects + • [5]Tech Writing + • [6]Non-Tech + • [7]Email + + • [8]benhoyt.com + • [9]benhoyt@gmail.com The small web is beautiful - March 2021 +March 2021 - Summary: I believe that small websites are compelling aesthetically, - but are also important to help us resist selling our souls to large - tech companies. In this essay I present a vision for the “small web” - as well as the small software and architectures that power it. Also, - a bonus rant about microservices. + Summary: I believe that small websites are compelling aesthetically, but + are also important to help us resist selling our souls to large tech + companies. In this essay I present a vision for the “small web” as well as + the small software and architectures that power it. Also, a bonus rant + about microservices. - Go to: [10]Software | [11]Web | [12]Server-side | [13]Static sites | - [14]Dependencies | [15]Analytics | [16]Microservices + Go to: [10]Software | [11]Web | [12]Server-side | [13]Static sites | [14] + Dependencies | [15]Analytics | [16]Microservices - About fifteen years ago, I read E. F. Schumacher’s Small is Beautiful - and, despite not being interested in economics, I was moved by its - message. Perhaps even more, I loved the terse poetry of the book’s - title – it resonated with my frugal upbringing and my own aesthetic. +About fifteen years ago, I read E. F. Schumacher’s Small is Beautiful and, +despite not being interested in economics, I was moved by its message. Perhaps +even more, I loved the terse poetry of the book’s title – it resonated with my +frugal upbringing and my own aesthetic. - I think it’s time for a version of that book about technology, with a - chapter on web development: The Small Web is Beautiful: A Study of Web - Development as if People Mattered. Until someone writes that, this - essay will have to do. +I think it’s time for a version of that book about technology, with a chapter +on web development: The Small Web is Beautiful: A Study of Web Development as +if People Mattered. Until someone writes that, this essay will have to do. - There are two aspects of this: first, small teams and companies. I’m - not going to talk much about that here, but [17]Basecamp and many - others have. What I’m going to focus on in this essay is small websites - and architectures. +There are two aspects of this: first, small teams and companies. I’m not going +to talk much about that here, but [17]Basecamp and many others have. What I’m +going to focus on in this essay is small websites and architectures. - I’m not the first to talk about the “small web”, but, somewhat - surprisingly, only a few people have discussed it using that term. Here - are the main web pages I can find that do: - * [18]Rediscovering the Small Web by Parimal Satyal: a fabulous - article about the joy of small, independent (and sometimes retro) - websites in contrast to the “commercial web”. - * [19]What is the Small Web?, by Aral Balkan of the Small Technology - Foundation: more of a manifesto against the surveillance of Big - Tech than something concrete, but still interesting. +I’m not the first to talk about the “small web”, but, somewhat surprisingly, +only a few people have discussed it using that term. Here are the main web +pages I can find that do: - Why aim small in this era of fast computers with plenty of RAM? A - number of reasons, but the ones that are most important to me are: - * Fewer moving parts. It’s easier to create more robust systems and - to fix things when they do go wrong. - * Small software is faster. Fewer bits to download and clog your - computer’s memory. - * Reduced power consumption. This is important on a “save the planet” - scale, but also on the very local scale of increasing the battery - life of your phone and laptop. - * The light, frugal aesthetic. That’s personal, I know, but as you’ll - see, I’m not alone. + • [18]Rediscovering the Small Web by Parimal Satyal: a fabulous article about + the joy of small, independent (and sometimes retro) websites in contrast to + the “commercial web”. + • [19]What is the Small Web?, by Aral Balkan of the Small Technology + Foundation: more of a manifesto against the surveillance of Big Tech than + something concrete, but still interesting. - So let’s dive in. I want to cover a bunch of different angles, each - with its own subheading. +Why aim small in this era of fast computers with plenty of RAM? A number of +reasons, but the ones that are most important to me are: + + • Fewer moving parts. It’s easier to create more robust systems and to fix + things when they do go wrong. + • Small software is faster. Fewer bits to download and clog your computer’s + memory. + • Reduced power consumption. This is important on a “save the planet” scale, + but also on the very local scale of increasing the battery life of your + phone and laptop. + • The light, frugal aesthetic. That’s personal, I know, but as you’ll see, + I’m not alone. + +So let’s dive in. I want to cover a bunch of different angles, each with its +own subheading. Small software - If we’re going to talk about a small web, we need to start with small - software. +If we’re going to talk about a small web, we need to start with small software. - As a teen, I learned to program using x86 assembly and [20]Forth – - perhaps odd choices, but my dad was heavily into Forth, and I loved how - the language was so simple I could write [21]my own bootstrapped - compiler. +As a teen, I learned to program using x86 assembly and [20]Forth – perhaps odd +choices, but my dad was heavily into Forth, and I loved how the language was so +simple I could write [21]my own bootstrapped compiler. - In terms of career, I started as an embedded programmer – not as in - “embedded Linux” but as in microcontrollers where 16KB of RAM was - generous. My current laptop has 16GB of RAM, and that’s not a lot by - today’s standards. We were building IP-networked products with one - millionth the amount of RAM. Those kinds of micros are as cheap as - chips (ahem), and still widely used for small electronic devices, - sensors, internet-of-things products, and so on. +In terms of career, I started as an embedded programmer – not as in “embedded +Linux” but as in microcontrollers where 16KB of RAM was generous. My current +laptop has 16GB of RAM, and that’s not a lot by today’s standards. We were +building IP-networked products with one millionth the amount of RAM. Those +kinds of micros are as cheap as chips (ahem), and still widely used for small +electronic devices, sensors, internet-of-things products, and so on. - You have to think about every byte, compile with size optimizations - enabled, and reuse buffers. It’s a very different thing from modern web - development, where a JavaScript app compiles “down” to a 1MB bundle, or - a single Python object header is 16 bytes before you’ve even got any - data, or a Go hello-world binary is 2MB even before you’ve added any - real code. +You have to think about every byte, compile with size optimizations enabled, +and reuse buffers. It’s a very different thing from modern web development, +where a JavaScript app compiles “down” to a 1MB bundle, or a single Python +object header is 16 bytes before you’ve even got any data, or a Go hello-world +binary is 2MB even before you’ve added any real code. - How do you create small programs? I think the main thing is that you - have to care about size, and most of us don’t think we have time for - that. Apart from embedded development, there’s an entire programming - subculture called the [22]demoscene that cares about this. They have - competitions for the smallest 4KB demos: who can pack the most - graphical punch into 4096 bytes of executable. That’s smaller than many - favicons! ([23]Elevated and [24]cdak are two of the highest-rated 4K - demos.) Many demosceners go on to become game developers. +How do you create small programs? I think the main thing is that you have to +care about size, and most of us don’t think we have time for that. Apart from +embedded development, there’s an entire programming subculture called the [22] +demoscene that cares about this. They have competitions for the smallest 4KB +demos: who can pack the most graphical punch into 4096 bytes of executable. +That’s smaller than many favicons! ([23]Elevated and [24]cdak are two of the +highest-rated 4K demos.) Many demosceners go on to become game developers. - It’s not just about executable size … when you’re developing your next - command line tool, if you use Go or Rust or even C, your program will - be much faster, smaller, and use less memory than a Python or Java - equivalent. And easier to install. If you don’t understand why, please - do learn. (It’s out of scope for this essay, but to summarize: Go, - Rust, and C compile to ready-to-execute machine code, don’t carry - around a virtual machine, and don’t have memory overhead for objects - like integers.) +It’s not just about executable size … when you’re developing your next command +line tool, if you use Go or Rust or even C, your program will be much faster, +smaller, and use less memory than a Python or Java equivalent. And easier to +install. If you don’t understand why, please do learn. (It’s out of scope for +this essay, but to summarize: Go, Rust, and C compile to ready-to-execute +machine code, don’t carry around a virtual machine, and don’t have memory +overhead for objects like integers.) - But why not apply some of the same principles to web development? In - the web world, I think the main trick is to be careful what - dependencies you include, and also what dependencies they pull in. In - short, know node_modules – or maybe better, no node_modules. More about - this [25]below. +But why not apply some of the same principles to web development? In the web +world, I think the main trick is to be careful what dependencies you include, +and also what dependencies they pull in. In short, know node_modules – or maybe +better, no node_modules. More about this [25]below. - Niklaus Wirth of Pascal fame wrote a famous paper in 1995 called [26]A - Plea for Lean Software [PDF]. His take is that “a primary cause for the - complexity is that software vendors uncritically adopt almost any - feature that users want”, and “when a system’s power is measured by the - number of its features, quantity becomes more important than quality”. - He goes on to describe Oberon, a computer language (which reminds me of - Go in several ways) and an operating system that he believes helps - solve the complexity problem. Definitely wirth a read! +Niklaus Wirth of Pascal fame wrote a famous paper in 1995 called [26]A Plea for +Lean Software [PDF]. His take is that “a primary cause for the complexity is +that software vendors uncritically adopt almost any feature that users want”, +and “when a system’s power is measured by the number of its features, quantity +becomes more important than quality”. He goes on to describe Oberon, a computer +language (which reminds me of Go in several ways) and an operating system that +he believes helps solve the complexity problem. Definitely wirth a read! - I’ve been mulling over this for a number of years – back in 2008 I - wrote a sarcastic dig at how bloated Adobe Reader had become: [27]Thank - you, Adobe Reader 9! It was a 33MB download and required 220MB of hard - drive space even in 2008 (it’s now a 150MB download, and I don’t know - how much hard drive space it requires, because I don’t install it these - days). +I’ve been mulling over this for a number of years – back in 2008 I wrote a +sarcastic dig at how bloated Adobe Reader had become: [27]Thank you, Adobe +Reader 9! It was a 33MB download and required 220MB of hard drive space even in +2008 (it’s now a 150MB download, and I don’t know how much hard drive space it +requires, because I don’t install it these days). - But instead of just complaining, how do we actually solve this problem? - Concretely, I think we need to start doing the following: - * Care about size: this sounds obvious, but things only change when - people think they’re important. - * Measure: both your executable’s size, and your program’s memory - usage. You may want to measure over time, and make it a blocking - issue if the measurements grow more than x% in a release. Or you - could hold a memory-reduction sprint every so often. - * Language: choose a backend language that has a chance, for example - Rust, C or C++, or for servers, Go. These languages aren’t right - for everything (like data transformation scripts), but they produce - small executables, and they’re good for CLIs and desktop apps. - * Remove: cut down your feature set. Aim for a small number of - high-quality features. My car can’t fly or float, and that’s okay – - it drives well. - * Say no to new features: unless they really fit your philosophy, or - add more than they cost over the lifetime of your project. - * Dependencies: understand the size and complexity of each dependency - you pull in. Use only built-in libraries if you can. +But instead of just complaining, how do we actually solve this problem? +Concretely, I think we need to start doing the following: + + • Care about size: this sounds obvious, but things only change when people + think they’re important. + • Measure: both your executable’s size, and your program’s memory usage. You + may want to measure over time, and make it a blocking issue if the + measurements grow more than x% in a release. Or you could hold a + memory-reduction sprint every so often. + • Language: choose a backend language that has a chance, for example Rust, C + or C++, or for servers, Go. These languages aren’t right for everything + (like data transformation scripts), but they produce small executables, and + they’re good for CLIs and desktop apps. + • Remove: cut down your feature set. Aim for a small number of high-quality + features. My car can’t fly or float, and that’s okay – it drives well. + • Say no to new features: unless they really fit your philosophy, or add more + than they cost over the lifetime of your project. + • Dependencies: understand the size and complexity of each dependency you + pull in. Use only built-in libraries if you can. Small websites - I’m glad there’s a growing number of people interested in small - websites. +I’m glad there’s a growing number of people interested in small websites. - A few months ago there was a sequence of posts to Hacker News about - various “clubs” you could post your small website on: the [28]1MB Club - ([29]comments), [30]512KB Club ([31]comments), [32]250KB Club - ([33]comments), and even the [34]10KB Club ([35]comments). I think - those are a fun indicator of renewed interested in minimalism, but I - will say that raw size isn’t enough – a 2KB site with no real content - isn’t much good, and a page with 512KB of very slow JavaScript is worse - than a snappy site with 4MB of well-chosen images. +A few months ago there was a sequence of posts to Hacker News about various +“clubs” you could post your small website on: the [28]1MB Club ([29]comments), +[30]512KB Club ([31]comments), [32]250KB Club ([33]comments), and even the [34] +10KB Club ([35]comments). I think those are a fun indicator of renewed +interested in minimalism, but I will say that raw size isn’t enough – a 2KB +site with no real content isn’t much good, and a page with 512KB of very slow +JavaScript is worse than a snappy site with 4MB of well-chosen images. - Some of my favourite small websites are: +Some of my favourite small websites are: - [36]Hacker News: I personally like the minimalist, almost brutalist - design, but I love its lightness even more. I just downloaded the home - page, and loading all resources transfers only 21KB (61KB - uncompressed). Even pages with huge comment threads only transfer about - 100KB of compressed data, and load quickly. Reddit has become such a - bloated mess in comparison. Hacker News, never change! +[36]Hacker News: I personally like the minimalist, almost brutalist design, but +I love its lightness even more. I just downloaded the home page, and loading +all resources transfers only 21KB (61KB uncompressed). Even pages with huge +comment threads only transfer about 100KB of compressed data, and load quickly. +Reddit has become such a bloated mess in comparison. Hacker News, never change! - [37]Lobsters: a similar news-and-voting site, with slightly more - “modern” styling. It uses some JavaScript and profile icons, but it’s - still clean and fast, and the total transfer size for the homepage is - only 102KB. You just don’t need megabytes to make a good website. +[37]Lobsters: a similar news-and-voting site, with slightly more “modern” +styling. It uses some JavaScript and profile icons, but it’s still clean and +fast, and the total transfer size for the homepage is only 102KB. You just +don’t need megabytes to make a good website. - [38]Sourcehut: I like the concept behind Drew DeVault’s business, but I - love how small and anti-fluff the website is. He has set up a mini-site - called the [39]Software Forge Performance Index that tracks size and - browser performance of the prominent source code websites – Sourcehut - is far and away the lightest and fastest. Even his homepage is only - 81KB, including several screenshot thumbnails. +[38]Sourcehut: I like the concept behind Drew DeVault’s business, but I love +how small and anti-fluff the website is. He has set up a mini-site called the +[39]Software Forge Performance Index that tracks size and browser performance +of the prominent source code websites – Sourcehut is far and away the lightest +and fastest. Even his homepage is only 81KB, including several screenshot +thumbnails. - [40]SQLite: not only is SQLite a small, powerful SQL database engine, - the website is fantastically small and content-rich. Even their - 7000-word [41]page about testing is only 70KB. How do they do this? - It’s not magic: focus on high-quality textual content, minimal CSS, no - JavaScript, and very few images (a small logo and some SVGs). +[40]SQLite: not only is SQLite a small, powerful SQL database engine, the +website is fantastically small and content-rich. Even their 7000-word [41]page +about testing is only 70KB. How do they do this? It’s not magic: focus on +high-quality textual content, minimal CSS, no JavaScript, and very few images +(a small logo and some SVGs). - [42]LWN: I’m a little biased, because I’ve written [43]articles for - them, but they’re an excellent website for Linux and programming news. - Extremely high-quality technical content (and a high bar for authors). - They’re definitely niche, and have a “we focus on quality content, not - updating our CSS every year” kind of look – they’ve been putting out - great content for 23 years! Their homepage only downloads 44KB (90KB - uncompressed). +[42]LWN: I’m a little biased, because I’ve written [43]articles for them, but +they’re an excellent website for Linux and programming news. Extremely +high-quality technical content (and a high bar for authors). They’re definitely +niche, and have a “we focus on quality content, not updating our CSS every +year” kind of look – they’ve been putting out great content for 23 years! Their +homepage only downloads 44KB (90KB uncompressed). - [44]Dan Luu’s blog: this is one of the more hardcore examples. His - inline CSS is only about 200 bytes (the pages are basically unstyled), - and his HTML source code doesn’t use any linefeed characters. Kind of a - fun point, although then he goes on to load 20KB of Google Analytics - JavaScript… +[44]Dan Luu’s blog: this is one of the more hardcore examples. His inline CSS +is only about 200 bytes (the pages are basically unstyled), and his HTML source +code doesn’t use any linefeed characters. Kind of a fun point, although then he +goes on to load 20KB of Google Analytics JavaScript… - As a friend pointed out, those websites have something of an - “anti-aesthetic aesthetic”. I confess to not minding that at all, but - on the other hand, small doesn’t have to mean ugly. More and more - personal blogs and websites have adopted a small web approach but are - more typographically appealing: - * [45]Armin Ronacher’s Thoughts and Writings - * [46]Chris Wellons’ “Null program” blog - * [47]Eric Radman’s BSD and SQL blog - * [48]Hugo Tunius’ programming blog - * [49]James Hague’s “Programming in the Twenty-First Century” - * [50]Julia Evans’ programming blog +As a friend pointed out, those websites have something of an “anti-aesthetic +aesthetic”. I confess to not minding that at all, but on the other hand, small +doesn’t have to mean ugly. More and more personal blogs and websites have +adopted a small web approach but are more typographically appealing: - There are many, many more. Programmer Sijmen Mulder created a nice list - of [51]text-only websites – not quite the same thing as small, but it - definitely overlaps! + • [45]Armin Ronacher’s Thoughts and Writings + • [46]Chris Wellons’ “Null program” blog + • [47]Eric Radman’s BSD and SQL blog + • [48]Hugo Tunius’ programming blog + • [49]James Hague’s “Programming in the Twenty-First Century” + • [50]Julia Evans’ programming blog - However, it’s not just about raw size, but about an “ethos of small”. - It’s caring about the users of your site: that your pages download - fast, are easy to read, have interesting content, and don’t load scads - of JavaScript for Google or Facebook’s trackers. Building a website - from scratch is not everyone’s cup of tea, but for those of us who do - it, maybe we can promote templates and tools that produce small sites - that encourage quality over quantity. +There are many, many more. Programmer Sijmen Mulder created a nice list of [51] +text-only websites – not quite the same thing as small, but it definitely +overlaps! - For this website, I lovingly crafted each byte of HTML and CSS by hand, - like a hipster creating a craft beer. Seriously though, if your focus - is good content, it’s not hard to create a simple template from scratch - with just a few lines of HTML and CSS. It will be small and fast, and - it’ll be yours. +However, it’s not just about raw size, but about an “ethos of small”. It’s +caring about the users of your site: that your pages download fast, are easy to +read, have interesting content, and don’t load scads of JavaScript for Google +or Facebook’s trackers. Building a website from scratch is not everyone’s cup +of tea, but for those of us who do it, maybe we can promote templates and tools +that produce small sites that encourage quality over quantity. - Loading this essay transfers about 23KB (56KB uncompressed), including - the favicon and analytics script. It’s small, fast, and readable on - desktop or mobile. I don’t think it’s too bad looking, but I’m - primarily aiming for a minimalist design focussed on the content. +For this website, I lovingly crafted each byte of HTML and CSS by hand, like a +hipster creating a craft beer. Seriously though, if your focus is good content, +it’s not hard to create a simple template from scratch with just a few lines of +HTML and CSS. It will be small and fast, and it’ll be yours. - In addition to making sure your HTML and CSS are small, be sure to - compress your images properly. Two basic things here: don’t upload - ultra-high resolution images straight from your camera, and use a - reasonable amount of JPEG compression for photos (and PNG for - screenshots or vector art). Even for large images, you can usually use - 75% or 80% compression and still have an image without JPEG noise. For - example, the large 1920x775 image on the top of my [52]side business’s - homepage is only 300KB. +Loading this essay transfers about 23KB (56KB uncompressed), including the +favicon and analytics script. It’s small, fast, and readable on desktop or +mobile. I don’t think it’s too bad looking, but I’m primarily aiming for a +minimalist design focussed on the content. - Speaking of hero images, you don’t need big irrelevant images at the - top of your blog posts. They just add hundreds of kilobytes (even - megabytes) to your page weight, and don’t provide value. And please - don’t scatter your article with animated GIFs: if there’s something - animated on the screen, I can hardly concentrate enough to read the - text – and I’m [53]not the [54]only one. Include relevant, non-stock - images that provide value equal to their weight in bytes. Bare text is - okay, too, like a magazine article. +In addition to making sure your HTML and CSS are small, be sure to compress +your images properly. Two basic things here: don’t upload ultra-high resolution +images straight from your camera, and use a reasonable amount of JPEG +compression for photos (and PNG for screenshots or vector art). Even for large +images, you can usually use 75% or 80% compression and still have an image +without JPEG noise. For example, the large 1920x775 image on the top of my [52] +side business’s homepage is only 300KB. - [55]IndieWeb.org is a great resource here, though they use the term - “indie” rather than “small”. This movement looks more organic than the - [56]Small Technology Foundation (which has even been [57]critiqued as - “digital green-washing”), and their wiki has a lot more real content. - IndieWeb also promotes local [58]Homebrew Website Clubs and - [59]IndieWebCamp meetups. +Speaking of hero images, you don’t need big irrelevant images at the top of +your blog posts. They just add hundreds of kilobytes (even megabytes) to your +page weight, and don’t provide value. And please don’t scatter your article +with animated GIFs: if there’s something animated on the screen, I can hardly +concentrate enough to read the text – and I’m [53]not the [54]only one. Include +relevant, non-stock images that provide value equal to their weight in bytes. +Bare text is okay, too, like a magazine article. + +[55]IndieWeb.org is a great resource here, though they use the term “indie” +rather than “small”. This movement looks more organic than the [56]Small +Technology Foundation (which has even been [57]critiqued as “digital +green-washing”), and their wiki has a lot more real content. IndieWeb also +promotes local [58]Homebrew Website Clubs and [59]IndieWebCamp meetups. Emphasize server-side, not JavaScript - JavaScript is a mixed blessing for the web, and more often than not a - bane for small websites: it adds to the download size and time, it can - be a performance killer, it’s bad for accessibility, and if you don’t - hold it right, it’s [60]bad for search engines. Plus, if your website - is content-heavy, it probably isn’t adding much. +JavaScript is a mixed blessing for the web, and more often than not a bane for +small websites: it adds to the download size and time, it can be a performance +killer, it’s bad for accessibility, and if you don’t hold it right, it’s [60] +bad for search engines. Plus, if your website is content-heavy, it probably +isn’t adding much. - Don’t get me wrong: JavaScript is sometimes unavoidable, and is great - where it’s great. If you’re developing a browser-based application like - Gmail or Google Maps, you should almost certainly be using JavaScript. - But for your next blog, brochure website, or project documentation - site, please consider plain HTML and CSS. +Don’t get me wrong: JavaScript is sometimes unavoidable, and is great where +it’s great. If you’re developing a browser-based application like Gmail or +Google Maps, you should almost certainly be using JavaScript. But for your next +blog, brochure website, or project documentation site, please consider plain +HTML and CSS. - If your site – like a lot of sites – is somewhere in between and - contains some light interaction, consider using JavaScript only for the - parts of the page that need it. There’s no need to overhaul your whole - site using React and Redux just to add a form. Letting your server - generate HTML is still an effective way to create fast websites. +If your site – like a lot of sites – is somewhere in between and contains some +light interaction, consider using JavaScript only for the parts of the page +that need it. There’s no need to overhaul your whole site using React and Redux +just to add a form. Letting your server generate HTML is still an effective way +to create fast websites. - [61]Stack Overflow is a case in point. From day one, they’ve made - [62]performance a feature by rendering their pages on the server, and - by measuring and reducing render time. I’m sure the Stack Overflow code - has changed quite a lot since the Jeff Atwood days – it now makes a ton - of extra requests for advertising purposes – but the content still - loads fast. +[61]Stack Overflow is a case in point. From day one, they’ve made [62] +performance a feature by rendering their pages on the server, and by measuring +and reducing render time. I’m sure the Stack Overflow code has changed quite a +lot since the Jeff Atwood days – it now makes a ton of extra requests for +advertising purposes – but the content still loads fast. - [63]Hacker News (there’s that site again) is a server-side classic. - With only [64]one tiny JavaScript file for voting, the HTML generated - on the server does the rest. And [65]apparently it still runs on a - single machine. +[63]Hacker News (there’s that site again) is a server-side classic. With only +[64]one tiny JavaScript file for voting, the HTML generated on the server does +the rest. And [65]apparently it still runs on a single machine. - Around fifteen years ago there was this great idea called - [66]progressive enhancement. The idea was to serve usable HTML content - to everyone, but users with JavaScript enabled or fast internet - connections would get an enhanced version with a more streamlined user - interface. In fact, Hacker News itself uses progressive enhancement: - even in 2021, you can still turn off JavaScript and use the voting - buttons. It’s a bit clunkier because voting now requires a page reload, - but it works fine. +Around fifteen years ago there was this great idea called [66]progressive +enhancement. The idea was to serve usable HTML content to everyone, but users +with JavaScript enabled or fast internet connections would get an enhanced +version with a more streamlined user interface. In fact, Hacker News itself +uses progressive enhancement: even in 2021, you can still turn off JavaScript +and use the voting buttons. It’s a bit clunkier because voting now requires a +page reload, but it works fine. - Is progressive enhancement still relevant in 2021? Arguably not, though - some die-hards still turn JavaScript off, or at least enable it only - for sites they trust. However, I think it’s the mentality that’s most - important: it shows the developer cares about performance, size, and - alternative users. If Hacker News voting didn’t work without - JavaScript, I don’t think that would be a big problem – but it shows a - certain kind of nerdish care that it does work. Plus, the JavaScript - they do have is only 2KB (5KB uncompressed). +Is progressive enhancement still relevant in 2021? Arguably not, though some +die-hards still turn JavaScript off, or at least enable it only for sites they +trust. However, I think it’s the mentality that’s most important: it shows the +developer cares about performance, size, and alternative users. If Hacker News +voting didn’t work without JavaScript, I don’t think that would be a big +problem – but it shows a certain kind of nerdish care that it does work. Plus, +the JavaScript they do have is only 2KB (5KB uncompressed). - Compare that to the 8MB (14MB uncompressed) that the [67]Reddit - homepage loads. And this across 201 requests – I kid you not! – most of - which is JavaScript to power all the ads and tracking. Lovely… +Compare that to the 8MB (14MB uncompressed) that the [67]Reddit homepage loads. +And this across 201 requests – I kid you not! – most of which is JavaScript to +power all the ads and tracking. Lovely… - You don’t need a “framework” to develop this way, of course, but there - are some tools that make this style of server-side development easier. - [68]Turbolinks from the Basecamp folks was an early one, and it’s now - been superseded by [69]Turbo, which is apparently used to power their - email service [70]Hey. I haven’t used these personally, but the ideas - are clever (and surprisingly old-skool): use standard links and form - submissions, [71]serve plain HTML, but speed it up with WebSockets and - JavaScript if available. Just today, in fact, someone posted a new - article on Hacker News which claims [72]“The Future of Web Software Is - HTML-over-WebSockets”. If Hey is anything to go by, this technique is - fast! +You don’t need a “framework” to develop this way, of course, but there are some +tools that make this style of server-side development easier. [68]Turbolinks +from the Basecamp folks was an early one, and it’s now been superseded by [69] +Turbo, which is apparently used to power their email service [70]Hey. I haven’t +used these personally, but the ideas are clever (and surprisingly old-skool): +use standard links and form submissions, [71]serve plain HTML, but speed it up +with WebSockets and JavaScript if available. Just today, in fact, someone +posted a new article on Hacker News which claims [72]“The Future of Web +Software Is HTML-over-WebSockets”. If Hey is anything to go by, this technique +is fast! - On the other hand, sometimes you can reduce overall complexity by using - JavaScript for the whole page if you’re going to need it anyway. For - example, the registry pages on my wedding registry website are rendered - on the client (they actually [73]use Elm, which compiles to - JavaScript). I do need the interactivity of JavaScript (it’s more - “single page application” than mere content), but I don’t need - server-side rendering or good SEO for these pages. The homepage is a - simple server-rendered template, but the registry pages are fully - client-rendered. +On the other hand, sometimes you can reduce overall complexity by using +JavaScript for the whole page if you’re going to need it anyway. For example, +the registry pages on my wedding registry website are rendered on the client +(they actually [73]use Elm, which compiles to JavaScript). I do need the +interactivity of JavaScript (it’s more “single page application” than mere +content), but I don’t need server-side rendering or good SEO for these pages. +The homepage is a simple server-rendered template, but the registry pages are +fully client-rendered. Static sites and site generators - Another thing there’s been renewed interest in recently is static - websites (these used to be called just “websites”). You upload some - static HTML (and CSS and JavaScript) to a static file server, and - that’s it. +Another thing there’s been renewed interest in recently is static websites +(these used to be called just “websites”). You upload some static HTML (and CSS +and JavaScript) to a static file server, and that’s it. - Improving on that, there are many “static site generators” available. - These are tools that generate a static site from simple templates, so - that you don’t have to copy your site’s header and footer into every - HTML file by hand. When you add an article or make a change, run the - script to re-generate. If you’re hosting a simple site or blog or even - a news site, this is a great way to go. It’s content, after all, not an - interactive application. +Improving on that, there are many “static site generators” available. These are +tools that generate a static site from simple templates, so that you don’t have +to copy your site’s header and footer into every HTML file by hand. When you +add an article or make a change, run the script to re-generate. If you’re +hosting a simple site or blog or even a news site, this is a great way to go. +It’s content, after all, not an interactive application. - I use [74]GitHub Pages on this site just because it’s a free host that - supports SSL, and automatically builds your site using the [75]Jekyll - static site generator whenever you push a change. I have a standard - header and include the same CSS across all pages easily, though you can - have multiple templates or “layouts” if you want. Because most people - only view one or two articles on my site, I include my CSS inline. With - HTTP/2, this doesn’t make much difference, but Lighthouse showed around - 200ms with inline CSS, 300ms with external CSS. +I use [74]GitHub Pages on this site just because it’s a free host that supports +SSL, and automatically builds your site using the [75]Jekyll static site +generator whenever you push a change. I have a standard header and include the +same CSS across all pages easily, though you can have multiple templates or +“layouts” if you want. Because most people only view one or two articles on my +site, I include my CSS inline. With HTTP/2, this doesn’t make much difference, +but Lighthouse showed around 200ms with inline CSS, 300ms with external CSS. + +Here’s an example of what a simple Jekyll page looks like (the start of this +essay, in fact): - Here’s an example of what a simple Jekyll page looks like (the start of - this essay, in fact): --- layout: default title: "The small web is beautiful" @@ -372,48 +346,46 @@ Static sites and site generators --- Markdown text here. - I’ve also used [76]Hugo, which is a really fast static site generator - written in Go – it generates even large sites with thousands of pages - in a few seconds. And there are [77]many other options available. +I’ve also used [76]Hugo, which is a really fast static site generator written +in Go – it generates even large sites with thousands of pages in a few seconds. +And there are [77]many other options available. Fewer dependencies - There’s nothing that blows up the size of your software (or JavaScript - bundle) like third party dependencies. I always find a web project’s - node_modules directory hard to look at – just the sheer volume of stuff - in there makes me sad. +There’s nothing that blows up the size of your software (or JavaScript bundle) +like third party dependencies. I always find a web project’s node_modules +directory hard to look at – just the sheer volume of stuff in there makes me +sad. - Different languages seem to have different “dependency cultures”. - JavaScript, of course, is notorious for an “if it can be a library, it - should be” attitude, resulting in the [78]left-pad disaster as well as - other minuscule libraries like the 3-line [79]isarray. There are also - big, heavy packages like [80]Moment.js, which takes [81]160KB even when - minified. There are ways to shrink it down if you don’t need all - locales, but it’s not the default, so most people don’t (you’re - probably better off choosing a more modular approach like - [82]date-fns). +Different languages seem to have different “dependency cultures”. JavaScript, +of course, is notorious for an “if it can be a library, it should be” attitude, +resulting in the [78]left-pad disaster as well as other minuscule libraries +like the 3-line [79]isarray. There are also big, heavy packages like [80] +Moment.js, which takes [81]160KB even when minified. There are ways to shrink +it down if you don’t need all locales, but it’s not the default, so most people +don’t (you’re probably better off choosing a more modular approach like [82] +date-fns). - Go now has good dependency management with the recent [83]modules - tooling, but it also has a culture of “use the standard library if you - can”. Russ Cox wrote an excellent essay about the downsides of not - being careful with your dependencies: [84]Our Software Dependency - Problem. Go co-creator Rob Pike even made this one of his [85]Go - proverbs: “A little copying is better than a little dependency.” You - can probably guess by now, but I like this minimalist approach: apart - from reducing the number of points of failure, it makes programs - smaller. +Go now has good dependency management with the recent [83]modules tooling, but +it also has a culture of “use the standard library if you can”. Russ Cox wrote +an excellent essay about the downsides of not being careful with your +dependencies: [84]Our Software Dependency Problem. Go co-creator Rob Pike even +made this one of his [85]Go proverbs: “A little copying is better than a little +dependency.” You can probably guess by now, but I like this minimalist +approach: apart from reducing the number of points of failure, it makes +programs smaller. - Python, Ruby, Java, and C# seem to be somewhere in between: people use - a fair number of dependencies, but from what I’ve seen there’s more - care taken and it doesn’t get as out of hand as node_modules. - Admittedly it is a little unfair, as Python (and those other languages) - have standard libraries that have more in them than JavaScript’s. +Python, Ruby, Java, and C# seem to be somewhere in between: people use a fair +number of dependencies, but from what I’ve seen there’s more care taken and it +doesn’t get as out of hand as node_modules. Admittedly it is a little unfair, +as Python (and those other languages) have standard libraries that have more in +them than JavaScript’s. + +The website [86]YouMightNotNeedjQuery.com shows how many of the tasks you think +you might need a library for are actually quite simple to do with plain +JavaScript. For example, in one of my projects I use a function like the +following to make an API request with plain old XMLHttpRequest: - The website [86]YouMightNotNeedjQuery.com shows how many of the tasks - you think you might need a library for are actually quite simple to do - with plain JavaScript. For example, in one of my projects I use a - function like the following to make an API request with plain old - XMLHttpRequest: function postJson(url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { @@ -426,303 +398,293 @@ function postJson(url, data, callback) { xhr.send(JSON.stringify(data)); } - The moral of the story: think twice before adding dependencies. You’ll - keep your websites and programs smaller and more reliable, and you’ll - thank Russ Cox later. +The moral of the story: think twice before adding dependencies. You’ll keep +your websites and programs smaller and more reliable, and you’ll thank Russ Cox +later. Small analytics - Most website owners want some form of analytics to see how many - visitors are coming to their site, and from where. The go-to tool is - Google Analytics: it’s easy to set up and the UI is pretty - comprehensive. But there’s a cost: it adds a significant amount of - weight to your page (19KB of JavaScript, 46KB uncompressed), and it - sends a lot of user data for Google to collect. +Most website owners want some form of analytics to see how many visitors are +coming to their site, and from where. The go-to tool is Google Analytics: it’s +easy to set up and the UI is pretty comprehensive. But there’s a cost: it adds +a significant amount of weight to your page (19KB of JavaScript, 46KB +uncompressed), and it sends a lot of user data for Google to collect. - Once again, there’s been renewed interest in smaller, more - privacy-friendly analytics systems in recent times. Just this morning I - read a provocative article that was highly-voted on Hacker News called - [87]“Google Analytics: Stop feeding the beast”. +Once again, there’s been renewed interest in smaller, more privacy-friendly +analytics systems in recent times. Just this morning I read a provocative +article that was highly-voted on Hacker News called [87]“Google Analytics: Stop +feeding the beast”. - Last year I wrote two articles for LWN on the subject, so I won’t say - too much more here: - * [88]Lightweight alternatives to Google Analytics: replacing it with - lightweight open source and privacy-conscious alternatives, - specifically [89]GoatCounter and [90]Plausible. - * [91]More alternatives to Google Analytics: some heavier - alternatives, and a brief look at log-based analytics tools. +Last year I wrote two articles for LWN on the subject, so I won’t say too much +more here: - For this website I use GoatCounter, which is available as a low-cost - hosted service (free for non-commercial use) or as a self-hosted tool. - I really like what Martin is doing here, and how small and simple the - tool is: no bells and whistles, just the basic traffic numbers that - most people want. + • [88]Lightweight alternatives to Google Analytics: replacing it with + lightweight open source and privacy-conscious alternatives, specifically + [89]GoatCounter and [90]Plausible. + • [91]More alternatives to Google Analytics: some heavier alternatives, and a + brief look at log-based analytics tools. + +For this website I use GoatCounter, which is available as a low-cost hosted +service (free for non-commercial use) or as a self-hosted tool. I really like +what Martin is doing here, and how small and simple the tool is: no bells and +whistles, just the basic traffic numbers that most people want. Small architectures (not microservices) - Small websites are great for users, but small architectures are great - for developers. A small, simple codebase is easy to maintain, and will - have fewer bugs than a large, sprawling system with lots of interaction - points. +Small websites are great for users, but small architectures are great for +developers. A small, simple codebase is easy to maintain, and will have fewer +bugs than a large, sprawling system with lots of interaction points. - I contend that the “microservices everywhere” buzz is a big problem. - Microservices may be used successfully at Google and Amazon, but most - companies don’t need to build that way. They introduce complexity in - the code, API definitions, networking, deployment, server - infrastructure, monitoring, database transactions – just about every - aspect of a system is made more complex. Why is that? - * Code: you have lots of little repositories, possibly in different - languages, and each has to have some way to talk to the other - services (JSON over HTTP, gRPC, etc). With a monolithic system, - it’s all in one language (much better for a small team), calling - other modules is just a function call, and system-wide refactoring - is comparatively easy (especially in a statically typed language - like Go or Java). - * API definitions: with many services talking to each other, suddenly - you need standardized interfaces for how they communicate. You - spend a lot of time setting up gRPC or JSON schema definitions. In - a single codebase, a function signature is the API definition. - * Networking: with microservices, a function call is a network call, - and you spend time setting up your network infrastructure, thinking - about timeouts and retries, and maybe even designing inter-service - authentication. In monolithic systems, you only worry about - networking when talking to your database, cloud provider, and - users. - * Deployment: at a previous company I worked at, once we started - building with microservices, suddenly we needed fancy deployment - tooling and a dedicated infrastructure team to manage it all. You - can get by with a lot less if you’re only deploying a few services. - * Server infrastructure: you’ll probably need to set up new - infrastructure – lots of small virtual machines, or a - Kubernetes-based system. Kubernetes in itself is a complex - distributed application (even [92]Google admits it’s too complex), - and it takes a lot of work – or a lot of money – to run properly. - * Monitoring: to debug issues, you’ll need costly - distributed-monitoring software like Datadog to see what’s going - on. When an outage occurs, you’ll scramble to determine which - service is responsible, which team to page, and so on. Compare that - with a simple stack trace or single-service issue. - * Database transactions: these are difficult to impossible in a - microservices architecture. You may be able to design your way out - of them, but that’s not easy either. With a monolith, just type - BEGIN ... COMMIT, or however your database library spells it. +I contend that the “microservices everywhere” buzz is a big problem. +Microservices may be used successfully at Google and Amazon, but most companies +don’t need to build that way. They introduce complexity in the code, API +definitions, networking, deployment, server infrastructure, monitoring, +database transactions – just about every aspect of a system is made more +complex. Why is that? - It’s been said before, but microservices solve a people problem, not a - technical one. But beware of [93]Conway’s Law: your architecture will - mimic your company structure. Or the reverse – you’ll have to hire and - reorg so that your company structure matches the architecture that - microservices require: lots of engineers on lots of small teams, with - each team managing a couple of microservices. + • Code: you have lots of little repositories, possibly in different + languages, and each has to have some way to talk to the other services + (JSON over HTTP, gRPC, etc). With a monolithic system, it’s all in one + language (much better for a small team), calling other modules is just a + function call, and system-wide refactoring is comparatively easy + (especially in a statically typed language like Go or Java). + • API definitions: with many services talking to each other, suddenly you + need standardized interfaces for how they communicate. You spend a lot of + time setting up gRPC or JSON schema definitions. In a single codebase, a + function signature is the API definition. + • Networking: with microservices, a function call is a network call, and you + spend time setting up your network infrastructure, thinking about timeouts + and retries, and maybe even designing inter-service authentication. In + monolithic systems, you only worry about networking when talking to your + database, cloud provider, and users. + • Deployment: at a previous company I worked at, once we started building + with microservices, suddenly we needed fancy deployment tooling and a + dedicated infrastructure team to manage it all. You can get by with a lot + less if you’re only deploying a few services. + • Server infrastructure: you’ll probably need to set up new infrastructure – + lots of small virtual machines, or a Kubernetes-based system. Kubernetes in + itself is a complex distributed application (even [92]Google admits it’s + too complex), and it takes a lot of work – or a lot of money – to run + properly. + • Monitoring: to debug issues, you’ll need costly distributed-monitoring + software like Datadog to see what’s going on. When an outage occurs, you’ll + scramble to determine which service is responsible, which team to page, and + so on. Compare that with a simple stack trace or single-service issue. + • Database transactions: these are difficult to impossible in a microservices + architecture. You may be able to design your way out of them, but that’s + not easy either. With a monolith, just type BEGIN ... COMMIT, or however + your database library spells it. - That doesn’t mean microservices are always the wrong choice: they may - be necessary in huge engineering organizations. However, if you’re - working at such a company, you’ve probably already been using - microservices for years. If you’re not “Google size”, you should think - twice before copying their development practices. +It’s been said before, but microservices solve a people problem, not a +technical one. But beware of [93]Conway’s Law: your architecture will mimic +your company structure. Or the reverse – you’ll have to hire and reorg so that +your company structure matches the architecture that microservices require: +lots of engineers on lots of small teams, with each team managing a couple of +microservices. - What’s the alternative? The term “monolith” has a bad rap, but I agree - with David at Basecamp that [94]monoliths can be majestic. Basecamp is - a large, monolithic application, and they run it with just a dozen - programmers. David is quick to point out that “the Majestic Monolith - doesn’t pretend to provide a failsafe architectural road to glory”. You - still have to think, design, and write good code. +That doesn’t mean microservices are always the wrong choice: they may be +necessary in huge engineering organizations. However, if you’re working at such +a company, you’ve probably already been using microservices for years. If +you’re not “Google size”, you should think twice before copying their +development practices. - Thankfully, people are bouncing back from the cargo culting. Just do a - search for [95]“why not microservices” and you’ll find lots of good - articles on the subject. One of the recent ones I’ve read is from - Tailscale: [96]Modules, monoliths, and microservices. +What’s the alternative? The term “monolith” has a bad rap, but I agree with +David at Basecamp that [94]monoliths can be majestic. Basecamp is a large, +monolithic application, and they run it with just a dozen programmers. David is +quick to point out that “the Majestic Monolith doesn’t pretend to provide a +failsafe architectural road to glory”. You still have to think, design, and +write good code. - So what’s my advice? - * Unless your company name is Google or Amazon, start with a - monolith. - * Once it starts having problems, optimize or refactor the pain - points. - * If it’s still having issues, buy a bigger server. - * If you have a specific technical reason to split it up, fix that - problem. - * If there are still problems, split off only the component that - needs splitting off. You’ll have two services to deploy and - monitor, but that’s far simpler than going all-in on microservices. +Thankfully, people are bouncing back from the cargo culting. Just do a search +for [95]“why not microservices” and you’ll find lots of good articles on the +subject. One of the recent ones I’ve read is from Tailscale: [96]Modules, +monoliths, and microservices. - Okay, so this became more of an anti-microservices rant than I was - planning, but so be it. +So what’s my advice? - In terms of counter-examples, Stack Overflow once again comes to mind. - They’re one of the web’s busiest sites, but they have a relatively - simple, two-tier [97]architecture that they’ve scaled vertically – in - other words, big servers with lots of RAM, rather than hundreds of - small servers. They have 9 web servers and 4 very chunky SQL servers, - with a few additional servers for their tag engine, Redis, - Elasticsearch, and HAProxy. This architecture helps them get great - performance and the ability to develop with a small team. + • Unless your company name is Google or Amazon, start with a monolith. + • Once it starts having problems, optimize or refactor the pain points. + • If it’s still having issues, buy a bigger server. + • If you have a specific technical reason to split it up, fix that problem. + • If there are still problems, split off only the component that needs + splitting off. You’ll have two services to deploy and monitor, but that’s + far simpler than going all-in on microservices. - My own side business, [98]GiftyWeddings.com, only gets a small amount - of traffic, so it’s nothing like Stack Overflow, but it uses a Go HTTP - server with SQLite on one of the smallest EC2 instances available, - [99]t2.micro. It costs about $8 per month, and I only have one tiny - piece of infrastructure to maintain. I deploy using [100]Ansible – a - tool that is another good example of simple architecture and boils down - to “just use ssh”. +Okay, so this became more of an anti-microservices rant than I was planning, +but so be it. - Speaking of SQLite, there’s a growing number of developers who advocate - using SQLite to run their websites. SQLite’s [101]“when to use SQLite” - page says “any site that gets fewer than 100K hits/day should work fine - with SQLite. The 100K hits/day figure is a conservative estimate, not a - hard upper bound. SQLite has been demonstrated to work with 10 times - that amount of traffic.” Here are some other SQLite success stories: - * [102]Litestream is an open source tool that provides streaming - replication for SQLite. Read author Ben Johnson’s article, [103]Why - I Built Litestream. - * Go developer David Crawshaw has an article about what he calls - [104]“one process programming” (with Go and SQLite), that can be - summed up with his phrase “don’t use N computers when 1 will do”. - He also created a [105]Go SQLite library that supports more - SQLite-specific features than the other drivers. - * Peewee ORM author Charles Leifer wrote an article [106]“Five - reasons you should use SQLite in 2016” that’s still very relevant - in 2021. It ends with “I hope you’ll give SQLite a try. Don’t - believe the FUD about it not being production-worthy, or not being - suitable for use in web-applications.” - * Sam Eaton of [107]Crave Cookie runs a $200,000 per month side - business (wow!) using a single server and SQLite. Read his - [108]Indie Hackers interview. +In terms of counter-examples, Stack Overflow once again comes to mind. They’re +one of the web’s busiest sites, but they have a relatively simple, two-tier +[97]architecture that they’ve scaled vertically – in other words, big servers +with lots of RAM, rather than hundreds of small servers. They have 9 web +servers and 4 very chunky SQL servers, with a few additional servers for their +tag engine, Redis, Elasticsearch, and HAProxy. This architecture helps them get +great performance and the ability to develop with a small team. + +My own side business, [98]GiftyWeddings.com, only gets a small amount of +traffic, so it’s nothing like Stack Overflow, but it uses a Go HTTP server with +SQLite on one of the smallest EC2 instances available, [99]t2.micro. It costs +about $8 per month, and I only have one tiny piece of infrastructure to +maintain. I deploy using [100]Ansible – a tool that is another good example of +simple architecture and boils down to “just use ssh”. + +Speaking of SQLite, there’s a growing number of developers who advocate using +SQLite to run their websites. SQLite’s [101]“when to use SQLite” page says “any +site that gets fewer than 100K hits/day should work fine with SQLite. The 100K +hits/day figure is a conservative estimate, not a hard upper bound. SQLite has +been demonstrated to work with 10 times that amount of traffic.” Here are some +other SQLite success stories: + + • [102]Litestream is an open source tool that provides streaming replication + for SQLite. Read author Ben Johnson’s article, [103]Why I Built Litestream. + • Go developer David Crawshaw has an article about what he calls [104]“one + process programming” (with Go and SQLite), that can be summed up with his + phrase “don’t use N computers when 1 will do”. He also created a [105]Go + SQLite library that supports more SQLite-specific features than the other + drivers. + • Peewee ORM author Charles Leifer wrote an article [106]“Five reasons you + should use SQLite in 2016” that’s still very relevant in 2021. It ends with + “I hope you’ll give SQLite a try. Don’t believe the FUD about it not being + production-worthy, or not being suitable for use in web-applications.” + • Sam Eaton of [107]Crave Cookie runs a $200,000 per month side business + (wow!) using a single server and SQLite. Read his [108]Indie Hackers + interview. Summing up - Companies will do what companies do, and continue to make - flashy-looking, bloated websites that “convert” well. Maybe you can - have an influence at work, and come home to your better half and say - “honey, I shrunk the web”. Or maybe you’ll just focus on the small web - for your personal projects. (Disclaimer: I mostly do the latter – as - part of my day job, I work on [109]Juju, which is not a small system by - most measures.) +Companies will do what companies do, and continue to make flashy-looking, +bloated websites that “convert” well. Maybe you can have an influence at work, +and come home to your better half and say “honey, I shrunk the web”. Or maybe +you’ll just focus on the small web for your personal projects. (Disclaimer: I +mostly do the latter – as part of my day job, I work on [109]Juju, which is not +a small system by most measures.) - Either way, I believe the “small web” is a compelling term and a - compelling aesthetic. Not necessarily in the visual sense, but in the - sense that you built it yourself, you understand all of it, and you run - it on a single server or static file host. +Either way, I believe the “small web” is a compelling term and a compelling +aesthetic. Not necessarily in the visual sense, but in the sense that you built +it yourself, you understand all of it, and you run it on a single server or +static file host. - There are thousands of excellent examples of small websites, and - hundreds of ways to create simple architectures – this essay touches on - only a few of the ones I’m passionate about. I’d love to hear your own - ideas and stories! Comment over at [110]Lobsters or [111]Hacker News or - [112]programming Reddit. +There are thousands of excellent examples of small websites, and hundreds of +ways to create simple architectures – this essay touches on only a few of the +ones I’m passionate about. I’d love to hear your own ideas and stories! Comment +over at [110]Lobsters or [111]Hacker News or [112]programming Reddit. - I’d love it if you [113]sponsored me on GitHub – it will motivate me to - work on my open source projects and write more good content. Thanks! +I’d love it if you [113]sponsored me on GitHub – it will motivate me to work on +my open source projects and write more good content. Thanks! -References - 1. https://benhoyt.com/ - 2. https://benhoyt.com/ - 3. https://benhoyt.com/cv/ - 4. https://benhoyt.com/projects/ - 5. https://benhoyt.com/writings/ - 6. https://benhoyt.com/writings/non-tech/ - 7. mailto:benhoyt@gmail.com - 8. https://benhoyt.com/ - 9. mailto:benhoyt@gmail.com - 10. https://benhoyt.com/writings/the-small-web-is-beautiful/#small-software - 11. https://benhoyt.com/writings/the-small-web-is-beautiful/#small-websites - 12. https://benhoyt.com/writings/the-small-web-is-beautiful/#emphasize-server-side-not-javascript - 13. https://benhoyt.com/writings/the-small-web-is-beautiful/#static-sites-and-site-generators - 14. https://benhoyt.com/writings/the-small-web-is-beautiful/#fewer-dependencies - 15. https://benhoyt.com/writings/the-small-web-is-beautiful/#small-analytics - 16. https://benhoyt.com/writings/the-small-web-is-beautiful/#small-architectures-not-microservices - 17. https://basecamp.com/books - 18. https://neustadt.fr/essays/the-small-web/ - 19. https://ar.al/2020/08/07/what-is-the-small-web/ - 20. https://en.wikipedia.org/wiki/Forth_(programming_language) - 21. https://github.com/benhoyt/third - 22. https://en.wikipedia.org/wiki/Demoscene - 23. https://www.youtube.com/watch?v=jB0vBmiTr6o - 24. https://www.youtube.com/watch?v=RCh3Q08HMfs - 25. https://benhoyt.com/writings/the-small-web-is-beautiful/#fewer-dependencies - 26. https://cr.yp.to/bib/1995/wirth.pdf - 27. https://blog.brush.co.nz/2008/07/adobe-reader-9/ - 28. https://1mb.club/ - 29. https://news.ycombinator.com/item?id=25151773 - 30. https://512kb.club/ - 31. https://news.ycombinator.com/item?id=25450451 - 32. https://250kb.club/ - 33. https://news.ycombinator.com/item?id=25176663 - 34. https://10kbclub.com/ - 35. https://news.ycombinator.com/item?id=25556860 - 36. https://news.ycombinator.com/news - 37. https://lobste.rs/ - 38. https://sourcehut.org/ - 39. https://forgeperf.org/ - 40. https://sqlite.org/ - 41. https://sqlite.org/testing.html - 42. https://lwn.net/ - 43. https://lwn.net/Archives/GuestIndex/#Hoyt_Ben - 44. https://danluu.com/ - 45. https://lucumr.pocoo.org/ - 46. https://nullprogram.com/ - 47. http://eradman.com/ - 48. https://hugotunius.se/ - 49. https://prog21.dadgum.com/ - 50. https://jvns.ca/ - 51. https://sjmulder.nl/en/textonly.html - 52. https://giftyweddings.com/ - 53. https://news.ycombinator.com/item?id=26057078 - 54. https://news.ycombinator.com/item?id=11210860 - 55. https://indieweb.org/ - 56. https://small-tech.org/ - 57. https://news.ycombinator.com/item?id=24269071 - 58. https://indieweb.org/Homebrew_Website_Club - 59. https://indieweb.org/IndieWebCamps - 60. https://benhoyt.com/writings/seo-for-software-engineers/ - 61. https://stackoverflow.com/ - 62. https://blog.codinghorror.com/performance-is-a-feature/ - 63. https://news.ycombinator.com/ - 64. https://news.ycombinator.com/hn.js - 65. https://news.ycombinator.com/item?id=23876281 - 66. https://alistapart.com/article/understandingprogressiveenhancement/ - 67. https://www.reddit.com/ - 68. https://github.com/turbolinks/turbolinks - 69. https://turbo.hotwire.dev/ - 70. https://hey.com/ - 71. https://m.signalvnoise.com/html-over-the-wire/ - 72. https://alistapart.com/article/the-future-of-web-software-is-html-over-websockets/ - 73. https://benhoyt.com/writings/learning-elm/ - 74. https://pages.github.com/ - 75. https://jekyllrb.com/ - 76. https://gohugo.io/ - 77. https://staticsitegenerators.net/ - 78. https://www.davidhaney.io/npm-left-pad-have-we-forgotten-how-to-program/ - 79. https://github.com/juliangruber/isarray/blob/c9b0c5b4f44d366c9f51c7e85e70339bdeaa97b0/index.js#L3-L5 - 80. https://momentjs.com/ - 81. https://momentjs.com/docs/#/use-it/webpack/ - 82. https://date-fns.org/ - 83. https://golang.org/doc/modules/managing-dependencies - 84. https://research.swtch.com/deps - 85. https://go-proverbs.github.io/ - 86. http://youmightnotneedjquery.com/ - 87. https://casparwre.de/blog/stop-using-google-analytics/ - 88. https://lwn.net/Articles/822568/ - 89. https://www.goatcounter.com/ - 90. https://plausible.io/ - 91. https://lwn.net/Articles/824294/ - 92. https://www.theregister.com/2021/02/25/google_kubernetes_autopilot/ - 93. https://en.wikipedia.org/wiki/Conway's_law - 94. https://m.signalvnoise.com/the-majestic-monolith/ - 95. https://duckduckgo.com/?t=canonical&q=why+not+microservices&ia=web - 96. https://tailscale.com/blog/modules-monoliths-and-microservices/ - 97. https://stackexchange.com/performance - 98. https://giftyweddings.com/ - 99. https://aws.amazon.com/ec2/instance-types/t2/ - 100. https://www.ansible.com/ - 101. https://sqlite.org/whentouse.html - 102. https://litestream.io/ - 103. https://litestream.io/blog/why-i-built-litestream/ - 104. https://crawshaw.io/blog/one-process-programming-notes - 105. https://github.com/crawshaw/sqlite - 106. https://charlesleifer.com/blog/five-reasons-you-should-use-sqlite-in-2016/ - 107. https://cravecookie.com/ - 108. https://www.indiehackers.com/podcast/166-sam-eaton-of-crave-cookie - 109. https://jaas.ai/ - 110. https://lobste.rs/s/d6qwff/small_web_is_beautiful - 111. https://news.ycombinator.com/item?id=26305585 - 112. https://www.reddit.com/r/programming/comments/lvfdq9/the_small_web_is_beautiful/ - 113. https://github.com/sponsors/benhoyt/ +References: + +[1] https://benhoyt.com/ +[2] https://benhoyt.com/ +[3] https://benhoyt.com/cv/ +[4] https://benhoyt.com/projects/ +[5] https://benhoyt.com/writings/ +[6] https://benhoyt.com/writings/non-tech/ +[7] mailto:benhoyt@gmail.com +[8] https://benhoyt.com/ +[9] mailto:benhoyt@gmail.com +[10] https://benhoyt.com/writings/the-small-web-is-beautiful/#small-software +[11] https://benhoyt.com/writings/the-small-web-is-beautiful/#small-websites +[12] https://benhoyt.com/writings/the-small-web-is-beautiful/#emphasize-server-side-not-javascript +[13] https://benhoyt.com/writings/the-small-web-is-beautiful/#static-sites-and-site-generators +[14] https://benhoyt.com/writings/the-small-web-is-beautiful/#fewer-dependencies +[15] https://benhoyt.com/writings/the-small-web-is-beautiful/#small-analytics +[16] https://benhoyt.com/writings/the-small-web-is-beautiful/#small-architectures-not-microservices +[17] https://basecamp.com/books +[18] https://neustadt.fr/essays/the-small-web/ +[19] https://ar.al/2020/08/07/what-is-the-small-web/ +[20] https://en.wikipedia.org/wiki/Forth_(programming_language) +[21] https://github.com/benhoyt/third +[22] https://en.wikipedia.org/wiki/Demoscene +[23] https://www.youtube.com/watch?v=jB0vBmiTr6o +[24] https://www.youtube.com/watch?v=RCh3Q08HMfs +[25] https://benhoyt.com/writings/the-small-web-is-beautiful/#fewer-dependencies +[26] https://cr.yp.to/bib/1995/wirth.pdf +[27] https://blog.brush.co.nz/2008/07/adobe-reader-9/ +[28] https://1mb.club/ +[29] https://news.ycombinator.com/item?id=25151773 +[30] https://512kb.club/ +[31] https://news.ycombinator.com/item?id=25450451 +[32] https://250kb.club/ +[33] https://news.ycombinator.com/item?id=25176663 +[34] https://10kbclub.com/ +[35] https://news.ycombinator.com/item?id=25556860 +[36] https://news.ycombinator.com/news +[37] https://lobste.rs/ +[38] https://sourcehut.org/ +[39] https://forgeperf.org/ +[40] https://sqlite.org/ +[41] https://sqlite.org/testing.html +[42] https://lwn.net/ +[43] https://lwn.net/Archives/GuestIndex/#Hoyt_Ben +[44] https://danluu.com/ +[45] https://lucumr.pocoo.org/ +[46] https://nullprogram.com/ +[47] http://eradman.com/ +[48] https://hugotunius.se/ +[49] https://prog21.dadgum.com/ +[50] https://jvns.ca/ +[51] https://sjmulder.nl/en/textonly.html +[52] https://giftyweddings.com/ +[53] https://news.ycombinator.com/item?id=26057078 +[54] https://news.ycombinator.com/item?id=11210860 +[55] https://indieweb.org/ +[56] https://small-tech.org/ +[57] https://news.ycombinator.com/item?id=24269071 +[58] https://indieweb.org/Homebrew_Website_Club +[59] https://indieweb.org/IndieWebCamps +[60] https://benhoyt.com/writings/seo-for-software-engineers/ +[61] https://stackoverflow.com/ +[62] https://blog.codinghorror.com/performance-is-a-feature/ +[63] https://news.ycombinator.com/ +[64] https://news.ycombinator.com/hn.js +[65] https://news.ycombinator.com/item?id=23876281 +[66] https://alistapart.com/article/understandingprogressiveenhancement/ +[67] https://www.reddit.com/ +[68] https://github.com/turbolinks/turbolinks +[69] https://turbo.hotwire.dev/ +[70] https://hey.com/ +[71] https://m.signalvnoise.com/html-over-the-wire/ +[72] https://alistapart.com/article/the-future-of-web-software-is-html-over-websockets/ +[73] https://benhoyt.com/writings/learning-elm/ +[74] https://pages.github.com/ +[75] https://jekyllrb.com/ +[76] https://gohugo.io/ +[77] https://staticsitegenerators.net/ +[78] https://www.davidhaney.io/npm-left-pad-have-we-forgotten-how-to-program/ +[79] https://github.com/juliangruber/isarray/blob/c9b0c5b4f44d366c9f51c7e85e70339bdeaa97b0/index.js#L3-L5 +[80] https://momentjs.com/ +[81] https://momentjs.com/docs/#/use-it/webpack/ +[82] https://date-fns.org/ +[83] https://golang.org/doc/modules/managing-dependencies +[84] https://research.swtch.com/deps +[85] https://go-proverbs.github.io/ +[86] http://youmightnotneedjquery.com/ +[87] https://casparwre.de/blog/stop-using-google-analytics/ +[88] https://lwn.net/Articles/822568/ +[89] https://www.goatcounter.com/ +[90] https://plausible.io/ +[91] https://lwn.net/Articles/824294/ +[92] https://www.theregister.com/2021/02/25/google_kubernetes_autopilot/ +[93] https://en.wikipedia.org/wiki/Conway%27s_law +[94] https://m.signalvnoise.com/the-majestic-monolith/ +[95] https://duckduckgo.com/?t=canonical&q=why+not+microservices&ia=web +[96] https://tailscale.com/blog/modules-monoliths-and-microservices/ +[97] https://stackexchange.com/performance +[98] https://giftyweddings.com/ +[99] https://aws.amazon.com/ec2/instance-types/t2/ +[100] https://www.ansible.com/ +[101] https://sqlite.org/whentouse.html +[102] https://litestream.io/ +[103] https://litestream.io/blog/why-i-built-litestream/ +[104] https://crawshaw.io/blog/one-process-programming-notes +[105] https://github.com/crawshaw/sqlite +[106] https://charlesleifer.com/blog/five-reasons-you-should-use-sqlite-in-2016/ +[107] https://cravecookie.com/ +[108] https://www.indiehackers.com/podcast/166-sam-eaton-of-crave-cookie +[109] https://jaas.ai/ +[110] https://lobste.rs/s/d6qwff/small_web_is_beautiful +[111] https://news.ycombinator.com/item?id=26305585 +[112] https://www.reddit.com/r/programming/comments/lvfdq9/the_small_web_is_beautiful/ +[113] https://github.com/sponsors/benhoyt/ diff --git a/static/archive/blog-testdouble-com-ft5qbw.txt b/static/archive/blog-testdouble-com-ft5qbw.txt index 07d7cf1..4fad256 100644 --- a/static/archive/blog-testdouble-com-ft5qbw.txt +++ b/static/archive/blog-testdouble-com-ft5qbw.txt @@ -1,533 +1,506 @@ - [1]Test Double The Test Double logo +[matomo] - Menu +[1] Test Double The Test Double logo - (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 - [8]Blog [9]Posts +Menu An icon that displays an illustration of a website menu + + • [3] Home + • [4] Agency + • [5] Services + • [6] Careers + • [7] Blog + • [8] Contact + +[9] Blog [10] Posts How to tell if AI threatens YOUR job 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 clock Publish Date + March 14, 2023 +An icon of a human figure Authors + [11]Justin Searls - An icon of a human figure Authors - [10]Justin Searls +As a young lad, I developed a habit of responding to the enthusiasm of others +with fear, skepticism, and judgment. - As a young lad, I developed a habit of responding to the enthusiasm of - others with fear, skepticism, and judgment. +While it never made me very fun at parties, my hypercritical reflex has been +rewarded with the sweet satisfaction of being able to say “I told you so” more +often than not. Everyone brings a default disposition to the table, and for me +that includes a deep suspicion of hope and optimism as irrational exuberance. - While it never made me very fun at parties, my hypercritical reflex has - been rewarded with the sweet satisfaction of being able to say “I told - you so” more often than not. Everyone brings a default disposition to - the table, and for me that includes a deep suspicion of hope and - optimism as irrational exuberance. +But there’s one trend people are excited about that—try as I might—I’m having a +hard time passing off as mere hype: generative AI. - But there’s one trend people are excited about that—try as I might—I’m - having a hard time passing off as mere hype: generative AI. +The more excited someone is by the prospect of AI making their job easier, the +more they should be worried. - The more excited someone is by the prospect of AI making their job - easier, the more they should be worried. +There’s little doubt at this point: the tools that succeed [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. - There’s little doubt at this point: the tools that succeed [11]DALL•E - and [12]ChatGPT will have a profound impact on society. If it feels - obvious that self-driving cars will put millions of truckers out of - work, it should be clear even more white collar jobs will be rendered - unnecessary by this new class of AI tools. +While [14]Level 4 autonomous vehicles may still be years away, production-ready +AI is here today. It’s already being used to do significant amounts of paid +work, often with employers being none the wiser. - While [13]Level 4 autonomous vehicles may still be years away, - production-ready AI is here today. It’s already being used to do - significant amounts of paid work, often with employers being none the - wiser. +If truckers deserve [15]years [16]of [17]warnings that their jobs are at risk, +we owe it to ourselves and others to think through the types of problems that +generative AI is best equipped to solve, which sorts of jobs are at greatest +risk, and what workers can start doing now to prepare for the profound +disruption that’s coming for the information economy. - If truckers deserve [14]years [15]of [16]warnings that their jobs are - at risk, we owe it to ourselves and others to think through the types - of problems that generative AI is best equipped to solve, which sorts - of jobs are at greatest risk, and what workers can start doing now to - prepare for the profound disruption that’s coming for the information - economy. +So let’s do that. - So let’s do that. +[18]Now it’s time to major bump Web 2.0 -[17]Now it’s time to major bump Web 2.0 +Computer-generated content wouldn’t pose the looming threat it does without the +last 20 years of user-generated content blanketing the Internet to fertilize +it. - Computer-generated content wouldn’t pose the looming threat it does - without the last 20 years of user-generated content blanketing the - Internet to fertilize it. +As user-generated content came to dominate the Internet with the advent of Web +2.0 in the 2000s, we heard a lot about the [19]Wisdom of the Crowd. The theory +was simple: if anyone could publish content to a platform, then users could +rank that content’s quality (whether via viewership metrics or explicit +upvotes), and eventually the efforts of the (unpaid!) general public would +outperform the productivity of (quite expensive!) professional authors and +publishers. The winners, under Web 2.0, would no longer be the best content +creators, but the platforms that successfully achieve [20]network effect and +come to mediate everyone’s experience with respect to a particular category of +content. - As user-generated content came to dominate the Internet with the advent - of Web 2.0 in the 2000s, we heard a lot about the [18]Wisdom of the - Crowd. The theory was simple: if anyone could publish content to a - platform, then users could rank that content’s quality (whether via - viewership metrics or explicit upvotes), and eventually the efforts of - the (unpaid!) general public would outperform the productivity of - (quite expensive!) professional authors and publishers. The winners, - under Web 2.0, would no longer be the best content creators, but the - platforms that successfully achieve [19]network effect and come to - mediate everyone’s experience with respect to a particular category of - content. +This theory quickly proved correct. User-generated content so dramatically +outpaced “legacy” media that the newspaper industry is now a shell of its +former self—grasping at straws like SEO content farms, clickbait headlines, and +ever-thirstier display ads masquerading as content. The fact I’ve already used +the word “content” eight times in two paragraphs is a testament to how its +unrelenting deluge under Web 2.0 has flattened our relationship with +information. “Content” has become a fungible resource to be consumed by our +eyeballs and earholes, which transforms it into a value-added product called +“engagement,” and which the platform owners in turn package and resell to +advertisers as a service called “impressions.” - This theory quickly proved correct. User-generated content so - dramatically outpaced “legacy” media that the newspaper industry is now - a shell of its former self—grasping at straws like SEO content farms, - clickbait headlines, and ever-thirstier display ads masquerading as - content. The fact I’ve already used the word “content” eight times in - two paragraphs is a testament to how its unrelenting deluge under Web - 2.0 has flattened our relationship with information. “Content” has - become a fungible resource to be consumed by our eyeballs and earholes, - which transforms it into a value-added product called “engagement,” and - which the platform owners in turn package and resell to advertisers as - a service called “impressions.” +And for a beautiful moment in time, this system created a lot of value for +shareholders. - And for a beautiful moment in time, this system created a lot of value - for shareholders. +But the status quo is being challenged by a new innovation, leading many of Web +2.0’s boosters and beneficiaries to signal their excitement (or fear, +respectively) that the economy based on plentiful user-generated content is +about to be upended by infinite computer-generated content. If we’re witnessing +the first act of Web 3.0, it’s got nothing to do with crypto and everything to +do with [21]generative AI. - But the status quo is being challenged by a new innovation, leading - many of Web 2.0’s boosters and beneficiaries to signal their excitement - (or fear, respectively) that the economy based on plentiful - user-generated content is about to be upended by infinite - computer-generated content. If we’re witnessing the first act of Web - 3.0, it’s got nothing to do with crypto and everything to do with - [20]generative AI. +If you’re reading this, you don’t need me to recap the cultural impact of [22] +ChatGPT and [23]Bing Chat for you. Suffice to say, if Google—the runaway winner +of the Web 2.0 economy—is [24]legit shook, there’s probably fire to go with all +this smoke. Moreover, when you consider that [25]the same incumbent is already +at the forefront of AI innovation but is nevertheless terrified by this sea +change, Google clearly believes we’re witnessing a major market disruption in +addition to a technological one. - If you’re reading this, you don’t need me to recap the cultural impact - of [21]ChatGPT and [22]Bing Chat for you. Suffice to say, if Google—the - runaway winner of the Web 2.0 economy—is [23]legit shook, there’s - probably fire to go with all this smoke. Moreover, when you consider - that [24]the same incumbent is already at the forefront of AI - innovation but is nevertheless terrified by this sea change, Google - clearly believes we’re witnessing a major market disruption in addition - to a technological one. +One reason I’ve been thinking so much about this is that I’ve started work on a +personal project to build an AI chatbot for practicing Japanese language and +I’m livecoding 100% of my work for an educational video series I call [26] +Searls After Dark. Might be why I’ve got AI on the mind lately! - One reason I’ve been thinking so much about this is that I’ve started - work on a personal project to build an AI chatbot for practicing - Japanese language and I’m livecoding 100% of my work for an educational - video series I call [25]Searls After Dark. Might be why I’ve got AI on - the mind lately! +But you’re not a tech giant. You’re wondering what this means for you and your +weekend. And I think we’re beginning to identify the contours of an answer to +that question. - But you’re not a tech giant. You’re wondering what this means for you - and your weekend. And I think we’re beginning to identify the contours - of an answer to that question. +[27]ChatGPT can do some people’s work, but not everyone’s -[26]ChatGPT can do some people’s work, but not everyone’s +A profound difference between the coming economic upheaval and those of the +past is that it will most severely impact white collar workers. Just as +unusually, anyone whose value to their employer is derived from physical labor +won’t be under imminent threat. Everyone else is left to ask: will generative +AI replace my job? Do I need to be worried? - A profound difference between the coming economic upheaval and those of - the past is that it will most severely impact white collar workers. - Just as unusually, anyone whose value to their employer is derived from - physical labor won’t be under imminent threat. Everyone else is left to - ask: will generative AI replace my job? Do I need to be worried? +Suppose we approached AI as a new form of outsourcing. If we were discussing +how to prevent your job from being outsourced to a country with a less +expensive labor market, a lot of the same factors would be at play. - Suppose we approached AI as a new form of outsourcing. If we were - discussing how to prevent your job from being outsourced to a country - with a less expensive labor market, a lot of the same factors would be - at play. +Having spent months programming with [28]GitHub Copilot, weeks talking to +ChatGPT, and days searching via Bing Chat as an alternative to Google, the best +description I’ve heard of AI’s capabilities is “[29]fluent bullshit.” And after +months of seeing friends “cheat” at their day jobs by having [30]ChatGPT do +their homework for them, I’ve come to a pretty grim, if obvious, realization: +the more excited someone is by the prospect of AI making their job easier, the +more they should be worried. - Having spent months programming with [27]GitHub Copilot, weeks talking - to ChatGPT, and days searching via Bing Chat as an alternative to - Google, the best description I’ve heard of AI’s capabilities is - “[28]fluent bullshit.” And after months of seeing friends “cheat” at - their day jobs by having [29]ChatGPT do their homework for them, I’ve - come to a pretty grim, if obvious, realization: the more excited - someone is by the prospect of AI making their job easier, the more they - should be worried. +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: - Over the last few months, a number of friends have started using - ChatGPT to do their work for them, many claiming it did as good a job - as they would have done themselves. Examples include: - * Summarizing content for social media previews - * Authoring weekly newsletters - * E-mailing follow-ups to sales prospects and clients - * Submitting feature specifications for their team’s issue tracker - * Optimizing the performance of SQL queries and algorithms - * Completing employees’ performance reviews + • Summarizing content for social media previews + • Authoring weekly newsletters + • E-mailing follow-ups to sales prospects and clients + • Submitting feature specifications for their team’s issue tracker + • Optimizing the performance of SQL queries and algorithms + • Completing employees’ performance reviews - Each time I’d hear something like this, I’d get jealous, open ChatGPT - for myself, and feed it whatever problem I was working on. It never - worked. Sometimes it’d give up and claim the thing I was trying to do - was too obscure. Sometimes it’d generate a superficially realistic - response, but always with just enough nonsense mixed in that it would - take [30]more [31]time to [32]edit than to rewrite from scratch. But - most often, I’d end up wasting time stuck in this never-ending loop: - 1. Ask ChatGPT to do something - 2. It responds with an obviously-wrong answer - 3. Explain to ChatGPT why its response is wrong - 4. It politely apologizes (“You are correct, X in fact does not equal - Y. I apologize.”) before immediately generating an - equally-incorrect answer - 5. GOTO 3 +Each time I’d hear something like this, I’d get jealous, open ChatGPT for +myself, and feed it whatever problem I was working on. It never worked. +Sometimes it’d give up and claim the thing I was trying to do was too obscure. +Sometimes it’d generate a superficially realistic response, but always with +just enough nonsense mixed in that it would take [31]more [32]time to [33]edit +than to rewrite from scratch. But most often, I’d end up wasting time stuck in +this never-ending loop: - 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. + 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 + 5. GOTO 3 - For many of my friends, ChatGPT isn’t some passing fad—it’s a - productivity revolution that’s already saving them hours of work each - week. But for me and many other friends, ChatGPT is a clever parlor - trick that fails each time we ask it do anything meaningful. What - gives? +I got so frustrated asking it to help me troubleshoot my VS Code task +configuration that [34]I recorded my screen and set it to a few lofi tracks +before [35]giving up. -[35]Three simple rules for keeping your job +For many of my friends, ChatGPT isn’t some passing fad—it’s a productivity +revolution that’s already saving them hours of work each week. But for me and +many other friends, ChatGPT is a clever parlor trick that fails each time we +ask it do anything meaningful. What gives? - I’ve spent the last few months puzzling over this. Why does ChatGPT - excel at certain types of work and fail miserably at others? Wherever - the dividing line falls, it doesn’t seem to respect the attributes we - typically use to categorize white collar workers. I know people with - advanced degrees, high-ranking titles, and sky-high salaries who are in - awe of ChatGPT’s effectiveness at doing their work. But I can identify - just as many roles that sit near the bottom of the org chart, don’t - require special credentials, and don’t pay particularly well for which - ChatGPT isn’t even remotely useful. +[36]Three simple rules for keeping your job - Here’s where I landed. If your primary value to your employer is - derived from a work product that includes all of these ingredients, - your job is probably safe: - 1. Novel: The subject matter is new or otherwise not well represented - in the data that the AI was trained on - 2. Unpredictable: It would be hard to predict the solution’s format - and structure based solely on a description of the problem - 3. Fragile: Minor errors and inaccuracies would dramatically reduce - the work’s value without time-intensive remediation from an expert +I’ve spent the last few months puzzling over this. Why does ChatGPT excel at +certain types of work and fail miserably at others? Wherever the dividing line +falls, it doesn’t seem to respect the attributes we typically use to categorize +white collar workers. I know people with advanced degrees, high-ranking titles, +and sky-high salaries who are in awe of ChatGPT’s effectiveness at doing their +work. But I can identify just as many roles that sit near the bottom of the org +chart, don’t require special credentials, and don’t pay particularly well for +which ChatGPT isn’t even remotely useful. - To illustrate, each of the following professions have survived previous - revolutions in information technology, but will find themselves under - tremendous pressure from generative AI: - * A lawyer that drafts, edits, and red-lines contracts for their - clients will be at risk because most legal agreements fall into one - of a few dozen categories. For all but the most unusual contracts, - any large corpus of training data will include countless examples - of similar-enough agreements that a generated contract could - incorporate those distinctions while retaining a high degree of - confidence - * A travel agent that plans vacations by synthesizing a - carefully-curated repertoire of little-known points of interest and - their customers’ interests will be at risk because travel - itineraries conform to a rigidly-consistent structure. With - training, a [36]stochastic AI could predictably fill in the blanks - of a traveler’s agenda with “hidden” gems while avoiding - recommending the same places to everyone - * An insurance broker responsible for translating known risks and - potential liabilities into a prescribed set of coverages will - themselves be at risk because most policy mistakes are relatively - inconsequential. Insurance covers low-probability events that may - not take place for years—if they occur at all—so there’s plenty of - room for error for human and AI brokers alike (and plenty of - boilerplate legalese to protect them) +Here’s where I landed. If your primary value to your employer is derived from a +work product that includes all of these ingredients, your job is probably safe: - This also explains why ChatGPT has proven worthless for every task I’ve - thrown at it. As an experienced application developer, let’s consider - whether that’s because my work meets the three criteria identified - above: - 1. Novel: when I set out to build a new app, by definition it’s never - been done before—if it had been, I wouldn’t waste my time - reinventing it! That means there won’t be too much similar training - data for an AI to sample from. Moreover, by preferring expressive, - terse languages like Ruby and frameworks like Rails that promote - [37]DRY, there just isn’t all that much for GitHub Copilot to - suggest to me (and when it does generate a large chunk of correct - code, I interpret it as a smell that I’m needlessly [38]reinventing - a wheel) - 2. Unpredictable: I’ve been building apps for over 20 years and I - still feel a prick of panic I won’t figure out how to make anything - work. Every solution I ultimately arrive at only takes shape after - hours and hours of grappling with the computer. Whether you call - programming trial-and-error or dress it up as “[39]emergent - design,” the upshot is that the best engineers tend to be resigned - to the fact that the architectural design of the solution to any - problem is unknowable at the outset and can only be discovered - through the act of solving - 3. Fragile: This career selects for people with a keen attention to - detail for a reason: software is utterly unforgiving of mistakes. - One errant character is enough to break a program millions of lines - long. Subtle bugs can have costly consequences if deployed, like - security breaches and data loss. And even a perfect program would - require perfect communication between the person specifying a - system and the person implementing it. While AI may one day create - apps, the precision and accuracy required makes probabilistic - language models poorly-suited for the task + 1. Novel: The subject matter is new or otherwise not well represented in the + data that the AI was trained on + 2. Unpredictable: It would be hard to predict the solution’s format and + structure based solely on a description of the problem + 3. Fragile: Minor errors and inaccuracies would dramatically reduce the work’s + value without time-intensive remediation from an expert - This isn’t to say my job is free of drudgery that generative AI could - take off my hands (like summarizing the tag - for this post), but—unlike someone who makes SEO tweaks for a - living—delegating ancillary, time-consuming work actually makes me more - valuable to my employer because it frees up more time for stuff AI - can’t do (yet). +To illustrate, each of the following professions have survived previous +revolutions in information technology, but will find themselves under +tremendous pressure from generative AI: - So if you’re a programmer like me, you’re probably safe! + • A lawyer that drafts, edits, and red-lines contracts for their clients will + be at risk because most legal agreements fall into one of a few dozen + categories. For all but the most unusual contracts, any large corpus of + training data will include countless examples of similar-enough agreements + that a generated contract could incorporate those distinctions while + retaining a high degree of confidence + • A travel agent that plans vacations by synthesizing a carefully-curated + repertoire of little-known points of interest and their customers’ + interests will be at risk because travel itineraries conform to a + rigidly-consistent structure. With training, a [37]stochastic AI could + predictably fill in the blanks of a traveler’s agenda with “hidden” gems + while avoiding recommending the same places to everyone + • An insurance broker responsible for translating known risks and potential + liabilities into a prescribed set of coverages will themselves be at risk + because most policy mistakes are relatively inconsequential. Insurance + covers low-probability events that may not take place for years—if they + occur at all—so there’s plenty of room for error for human and AI brokers + alike (and plenty of boilerplate legalese to protect them) - Job’s done. Post over. +This also explains why ChatGPT has proven worthless for every task I’ve thrown +at it. As an experienced application developer, let’s consider whether that’s +because my work meets the three criteria identified above: -[40]Post not over: How can I save my job? + 1. Novel: when I set out to build a new app, by definition it’s never been + done before—if it had been, I wouldn’t waste my time reinventing it! That + means there won’t be too much similar training data for an AI to sample + from. Moreover, by preferring expressive, terse languages like Ruby and + frameworks like Rails that promote [38]DRY, there just isn’t all that much + for GitHub Copilot to suggest to me (and when it does generate a large + chunk of correct code, I interpret it as a smell that I’m needlessly [39] + reinventing a wheel) + 2. Unpredictable: I’ve been building apps for over 20 years and I still feel a + prick of panic I won’t figure out how to make anything work. Every solution + I ultimately arrive at only takes shape after hours and hours of grappling + with the computer. Whether you call programming trial-and-error or dress it + up as “[40]emergent design,” the upshot is that the best engineers tend to + be resigned to the fact that the architectural design of the solution to + any problem is unknowable at the outset and can only be discovered through + the act of solving + 3. Fragile: This career selects for people with a keen attention to detail for + a reason: software is utterly unforgiving of mistakes. One errant character + is enough to break a program millions of lines long. Subtle bugs can have + costly consequences if deployed, like security breaches and data loss. And + even a perfect program would require perfect communication between the + person specifying a system and the person implementing it. While AI may one + day create apps, the precision and accuracy required makes probabilistic + language models poorly-suited for the task - So what can someone do if their primary role doesn’t produce work that - checks the three boxes of novelty, unpredictability, and fragility? +This isn’t to say my job is free of drudgery that generative AI could take off +my hands (like summarizing the tag for this post), +but—unlike someone who makes SEO tweaks for a living—delegating ancillary, +time-consuming work actually makes me more valuable to my employer because it +frees up more time for stuff AI can’t do (yet). - Here are a few ideas that probably won’t work: - * Ask major tech companies to kindly put this genie back into the - bottle - * Lobby for [41]humane policies to prepare for a world that doesn’t - need every human’s labor - * Embrace return-to-office mandates by doing stuff software can’t do, - like stocking the snack cabinet and proactively offering to play - foosball with your boss +So if you’re a programmer like me, you’re probably safe! - 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. +Job’s done. Post over. - Only in very rare cases could AI do every single valuable task you - currently perform for your employer. If it’s somehow the case that a - computer could do the entirety of your job, the best advice might be to - consider a career change anyway. +[41]Post not over: How can I save my job? - Suppose we approached AI as a new form of outsourcing. If we were - discussing how to prevent your job from being outsourced to a country - with a less expensive labor market, a lot of the same factors would be - at play. As a result, if you were my friend (just kidding! You are my - friend, I swear!) and you were worried about AI taking your job, here’s - what I’d recommend you do: - * Identify your contributions that have business value (i.e. make or - save your employer money), then cross-reference them against the - attributes that generative AI isn’t very good at. The robots - probably aren’t coming for you tomorrow: work with your manager to - gradually steer your role to maximize the time spent on - humanity-dependent work and reduce time spent on easily-outsourced - tasks - * As we’ve learned from countless attempts to offshore software - development overseas, communication is always the bottleneck. Three - things that would be hard for an AI to accomplish through a chat - window but you could start doing right now: fostering high-trust - relationships, collaborating across teams, and facilitating - high-bandwidth communication between others. By taking an - interdisciplinary approach to your work, it will not only make it - more difficult for someone to outsource you, it could have the - unintended consequence of also leading to a more meaningful, - enriching career - * The natural response to any threat is [42]fight, flight, or freeze; - but counter-intuitively one of the best ways to protect your job - from AI is to become an enthusiastic early adopter of AI tools. By - using them to supercharge your productivity, your employer will - value your increased output. Additionally, your newfound skills - will put you in a better position to lead your company’s future AI - efforts (just ask the [43]former editor-in-chief of CNET) +So what can someone do if their primary role doesn’t produce work that checks +the three boxes of novelty, unpredictability, and fragility? - Like all the best things in life, this advice is simple but hard. The - reason I wrote this post now (instead of waiting until GPT-9.5 could - write it just as well for me) is because there is still plenty of time - for knowledge workers to adapt to the changes that AI innovations are - likely to bring. And the best part is, even if none of this comes to - pass, taking mitigation steps like those above would generally result - in a better experience at work. It’s a win-win! +Here are a few ideas that probably won’t work: -[44]In conclusion + • Ask major tech companies to kindly put this genie back into the bottle - I got tired after writing 2400 words on this topic, so I asked ChatGPT - to write a conclusion after feeding it this post. + • Lobby for [42]humane policies to prepare for a world that doesn’t need + every human’s labor - Here’s what it spat out: - [45]The article discusses the potential impact of generative AI on - society, particularly on white-collar jobs in the information economy. - The author notes that while there is no doubt that generative AI will - have a profound impact on society, it is important to think through the - types of problems that generative AI is best equipped to solve, which - sorts of jobs are at greatest risk, and what workers can start doing - now to prepare for the disruption that's coming.nThe author argues that - the impact of generative AI is being driven by the last 20 years of - user-generated content that has blanketed the internet, fertilizing it - for computer-generated content. User-generated content dominated the - internet with the advent of Web 2.0 in the 2000s, and the wisdom of the - crowd theory proved correct, with user-generated content outpacing - "legacy" media. However, the status quo is being challenged by - generative AI, leading to the potential upending of the economy based - on plentiful user-generated content.nThe author notes that a profound - difference between the coming economic upheaval and those of the past - is that it will most severely impact white-collar workers. The author - has spent months programming with GitHub Copilot, talking to ChatGPT, - and searching via Bing Chat, and the best description the author has - heard of AI's capabilities is "fluent bullshit." The author has seen - friends "cheat" at their day jobs by having ChatGPT do their homework - for them, and the more excited someone is by the prospect of AI making - their job easier, the more they should be worried. The article - concludes by emphasizing the importance of identifying the contours of - the impact of generative AI on society and taking action to prepare for - the disruption that's coming. + • Embrace return-to-office mandates by doing stuff software can’t do, like + stocking the snack cabinet and proactively offering to play foosball with + your boss - Disappointed that ChatGPT can’t tell the difference between a - conclusion and a summary, I gave it a second try. The following - screenshot is not modified; this was its actual response: - [46]Justin: Try again but this time make it shorter, reuse fewer - phrases that appear in the post, and rather than summarize the content, - add your own conclusion that readers should take away from reading the - article\nChatGPT:New study suggests that the Mediterranean diet can - help reduce the risk of heart disease by 47%. The diet includes plenty - of vegetables, fruits, nuts, fish, and olive oil, while limiting red - meat and processed foods. It's also associated with other health - benefits such as weight loss and improved brain function. Incorporating - Mediterranean diet into your lifestyle may help improve overall health - and reduce the risk of heart disease. +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. - So, in conclusion: eat more olives. 🫒 +Only in very rare cases could AI do every single valuable task you currently +perform for your employer. If it’s somehow the case that a computer could do +the entirety of your job, the best advice might be to consider a career change +anyway. -[47]Justin Searls +Suppose we approached AI as a new form of outsourcing. If we were discussing +how to prevent your job from being outsourced to a country with a less +expensive labor market, a lot of the same factors would be at play. As a +result, if you were my friend (just kidding! You are my friend, I swear!) and +you were worried about AI taking your job, here’s what I’d recommend you do: - An icon of a human figure Status - Double Agent + • Identify your contributions that have business value (i.e. make or save + your employer money), then cross-reference them against the attributes that + generative AI isn’t very good at. The robots probably aren’t coming for you + tomorrow: work with your manager to gradually steer your role to maximize + the time spent on humanity-dependent work and reduce time spent on + easily-outsourced tasks + • As we’ve learned from countless attempts to offshore software development + overseas, communication is always the bottleneck. Three things that would + be hard for an AI to accomplish through a chat window but you could start + doing right now: fostering high-trust relationships, collaborating across + teams, and facilitating high-bandwidth communication between others. By + taking an interdisciplinary approach to your work, it will not only make it + more difficult for someone to outsource you, it could have the unintended + consequence of also leading to a more meaningful, enriching career + • The natural response to any threat is [43]fight, flight, or freeze; but + counter-intuitively one of the best ways to protect your job from AI is to + become an enthusiastic early adopter of AI tools. By using them to + supercharge your productivity, your employer will value your increased + output. Additionally, your newfound skills will put you in a better + position to lead your company’s future AI efforts (just ask the [44]former + editor-in-chief of CNET) - An icon of a hash sign Code Name - Agent 002 +Like all the best things in life, this advice is simple but hard. The reason I +wrote this post now (instead of waiting until GPT-9.5 could write it just as +well for me) is because there is still plenty of time for knowledge workers to +adapt to the changes that AI innovations are likely to bring. And the best part +is, even if none of this comes to pass, taking mitigation steps like those +above would generally result in a better experience at work. It’s a win-win! - An icon of a map marker Location - Orlando, FL +[45]In conclusion - [48]Twitter [49]Mastodon [50]Github [51]LinkedIn [52]Website +I got tired after writing 2400 words on this topic, so I asked ChatGPT to write +a conclusion after feeding it this post. + +Here’s what it spat out: + +[46] The article discusses the potential impact of generative AI on society, +particularly on white-collar jobs in the information economy. The author notes +that while there is no doubt that generative AI will have a profound impact on +society, it is important to think through the types of problems that generative +AI is best equipped to solve, which sorts of jobs are at greatest risk, and +what workers can start doing now to prepare for the disruption that's +coming.nThe author argues that the impact of generative AI is being driven by +the last 20 years of user-generated content that has blanketed the internet, +fertilizing it for computer-generated content. User-generated content dominated +the internet with the advent of Web 2.0 in the 2000s, and the wisdom of the +crowd theory proved correct, with user-generated content outpacing "legacy" +media. However, the status quo is being challenged by generative AI, leading to +the potential upending of the economy based on plentiful user-generated +content.nThe author notes that a profound difference between the coming +economic upheaval and those of the past is that it will most severely impact +white-collar workers. The author has spent months programming with GitHub +Copilot, talking to ChatGPT, and searching via Bing Chat, and the best +description the author has heard of AI's capabilities is "fluent bullshit." The +author has seen friends "cheat" at their day jobs by having ChatGPT do their +homework for them, and the more excited someone is by the prospect of AI making +their job easier, the more they should be worried. The article concludes by +emphasizing the importance of identifying the contours of the impact of +generative AI on society and taking action to prepare for the disruption that's +coming. + +Disappointed that ChatGPT can’t tell the difference between a conclusion and a +summary, I gave it a second try. The following screenshot is not modified; this +was its actual response: + +[47] Justin: Try again but this time make it shorter, reuse fewer phrases that +appear in the post, and rather than summarize the content, add your own +conclusion that readers should take away from reading the article\nChatGPT:New +study suggests that the Mediterranean diet can help reduce the risk of heart +disease by 47%. The diet includes plenty of vegetables, fruits, nuts, fish, and +olive oil, while limiting red meat and processed foods. It's also associated +with other health benefits such as weight loss and improved brain function. +Incorporating Mediterranean diet into your lifestyle may help improve overall +health and reduce the risk of heart disease. + +So, in conclusion: eat more olives. 🫒 + +[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 + +[49] Twitter [50] Mastodon [51] Github [52] LinkedIn [53] Website Related posts: -[53]Policy update: We’re still remote +[54] Policy update: We’re still remote - Don’t waste time commuting to an office. Test Double will continue to - be a 100% remote software development company that values autonomy and - flexibility. +Don’t waste time commuting to an office. Test Double will continue to be a 100% +remote software development company that values autonomy and flexibility. - An icon of a clock Publish Date - July 7, 2021 +An icon of a clock Publish Date + July 7, 2021 +An icon of a human figure Authors + [55]Todd Kaufman +An icon of a paper organzier Categories + [56]Our Company - An icon of a human figure Authors - [54]Todd Kaufman +[57] Celebrating Agent 00100 milestone - An icon of a paper organzier Categories - [55]Our Company +Test Double celebrates hiring Agent 00100—a big milestone and a reminder about +why we do this: to fix what's broken in software. -[56]Celebrating Agent 00100 milestone +An icon of a clock Publish Date + June 1, 2021 +An icon of a human figure Authors + [58]Todd Kaufman +An icon of a paper organzier Categories + [59]Our Company - Test Double celebrates hiring Agent 00100—a big milestone and a - reminder about why we do this: to fix what's broken in software. +[60] 5 for 5000: Find your leading indicators - An icon of a clock Publish Date - June 1, 2021 +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 human figure Authors - [57]Todd Kaufman - - An icon of a paper organzier Categories - [58]Our Company - -[59]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 - - An icon of a clock Publish Date - October 22, 2020 - - An icon of a human figure Authors - [60]Justin Searls - - An icon of a paper organzier Categories - [61]Our Company +An icon of a clock Publish Date + October 22, 2020 +An icon of a human figure Authors + [61]Justin Searls +An icon of a paper organzier Categories + [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 +[74] 614.349.4279 +[75] hello@testdouble.com +[76]Privacy Policy +Founded in Columbus, OH + +[77] Test Double - [69]Mastodon [70]GitHub [71]LinkedIn [72]Twitter - [73]614.349.4279 - [74]hello@testdouble.com - [75]Privacy Policy - Founded in Columbus, OH +References: -[76]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/ +[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/ diff --git a/static/archive/blog-testdouble-com-g9g5id.txt b/static/archive/blog-testdouble-com-g9g5id.txt index e33acd5..bfb2f5c 100644 --- a/static/archive/blog-testdouble-com-g9g5id.txt +++ b/static/archive/blog-testdouble-com-g9g5id.txt @@ -1,365 +1,346 @@ - [1]Test Double The Test Double logo +[matomo] - Menu +[1] Test Double The Test Double logo - (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 - [8]Blog [9]Posts +Menu An icon that displays an illustration of a website menu + + • [3] Home + • [4] Agency + • [5] Services + • [6] Careers + • [7] Blog + • [8] Contact + +[9] Blog [10] Posts Only you can give meaning to your career How to mark moments that matter by planting a flag - An icon of a clock Publish Date - January 2, 2024 +An icon of a clock Publish Date + January 2, 2024 +An icon of a human figure Authors + [11]Justin Searls - An icon of a human figure Authors - [10]Justin Searls +I have, for whatever reason, live-blogged my career. Posting technical tips +I’ve learned. Complaining about bugs I’ve uncovered. Elaborating on struggles +my teams have faced. Mixed in with the substantive stuff has been plenty of +vain ephemera that many would rightly describe as “over-sharing.” My brother +sent me [12]this last week and I felt personally attacked: - I have, for whatever reason, live-blogged my career. Posting technical - tips I’ve learned. Complaining about bugs I’ve uncovered. Elaborating - on struggles my teams have faced. Mixed in with the substantive stuff - has been plenty of vain ephemera that many would rightly describe as - “over-sharing.” My brother sent me [11]this last week and I felt - personally attacked: + Everyone is fighting a battle you don’t know about. Except for me. I am + complaining loudly about my battle. Everybody knows about it. - Everyone is fighting a battle you don’t know about. Except for me. I - am complaining loudly about my battle. Everybody knows about it. +So if you’ve borne witness to how much of my life I have spewed +indiscriminately onto the Internet: first, I’m sorry. And second, please know +that my vocation as a limelight enthusiast is emphatically not what I’m +encouraging when I say this: I really wish more people took the time to reflect +on the moments that mattered most in their careers and did more to memorialize +them. - So if you’ve borne witness to how much of my life I have spewed - indiscriminately onto the Internet: first, I’m sorry. And second, - please know that my vocation as a limelight enthusiast is emphatically - not what I’m encouraging when I say this: I really wish more people - took the time to reflect on the moments that mattered most in their - careers and did more to memorialize them. +Ask yourself: what experience in the Spring of 2019 had the greatest impact on +how you go about your work today? Or 2017… what was 2017 all about? Think about +the project you’re focused on right now. What will you remember about it a +decade from now? In what ways are you reaching (or being stretched) beyond your +comfort zone? If Walter Isaacson were writing a bullshit hagiography about your +life instead of some [13]other schmuck, what would he have to say about you in +your current chapter? - Ask yourself: what experience in the Spring of 2019 had the greatest - impact on how you go about your work today? Or 2017… what was 2017 all - about? Think about the project you’re focused on right now. What will - you remember about it a decade from now? In what ways are you reaching - (or being stretched) beyond your comfort zone? If Walter Isaacson were - writing a bullshit hagiography about your life instead of some - [12]other schmuck, what would he have to say about you in your current - chapter? +How does it feel to be asked these questions? - 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. - Not unrelatedly, I grew to hate answering “what do you do?” at parties. +People tend to spend about a third of their lifespan at work, and that’s +assuming they’re fortunate enough to retire at some point. That’s a big chunk +of life to be rendered meaningless! So I decided to be someone whose work +mattered—to myself, if no one else. - People tend to spend about a third of their lifespan at work, and - that’s assuming they’re fortunate enough to retire at some point. - That’s a big chunk of life to be rendered meaningless! So I decided to - be someone whose work mattered—to myself, if no one else. +Deciding to take ownership over the meaning of my work has unquestionably +changed my life for the better. This post is the first time I’ve shared my +process publicly, and my hope is that others will benefit from reading it. +Given how dissatisfied most people seem to be with their careers, maybe that’s +you. - Deciding to take ownership over the meaning of my work has - unquestionably changed my life for the better. This post is the first - time I’ve shared my process publicly, and my hope is that others will - benefit from reading it. Given how dissatisfied most people seem to be - with their careers, maybe that’s you. +[14]Periodically plant a flag -[13]Periodically plant a flag +Despite the fact that I live in Florida and I’m typing this sentence poolside +in shorts and a t-shirt in mid-December, I conceptualize time with the passage +of seasons. There are seasons when my life demands a lot from me and my career +is forced to take a back seat. There are seasons when my work is particularly +engaging and my life falls into a pleasant-but-unremarkable routine. There are, +of course, seasons when both are challenging simultaneously, but hopefully not +too many. Whatever the case, I find myself pausing every three or four months +and pondering, “what from the last season of my life is worth remembering?” - Despite the fact that I live in Florida and I’m typing this sentence - poolside in shorts and a t-shirt in mid-December, I conceptualize time - with the passage of seasons. There are seasons when my life demands a - lot from me and my career is forced to take a back seat. There are - seasons when my work is particularly engaging and my life falls into a - pleasant-but-unremarkable routine. There are, of course, seasons when - both are challenging simultaneously, but hopefully not too many. - Whatever the case, I find myself pausing every three or four months and - pondering, “what from the last season of my life is worth remembering?” +It’s not like I have a reminder scheduled or anything. I don’t gather my +colleagues and family for a standing meeting to review my achievements from the +prior quarter. It’s more like an itch I’ve trained my brain to scratch whenever +I go more than a few months without examining where my time has gone and what I +have to show for it. - It’s not like I have a reminder scheduled or anything. I don’t gather - my colleagues and family for a standing meeting to review my - achievements from the prior quarter. It’s more like an itch I’ve - trained my brain to scratch whenever I go more than a few months - without examining where my time has gone and what I have to show for - it. +I often refer to this regular act of reflection as “planting a flag” to +symbolize whatever I want to stand out when I look back on a period of my life. +In my case, these flags usually take the form of creative work like a blog +post, a conference talk, or an open source library, but however you choose to +imbue meaning into your experiences is entirely up to you. The most important +thing is that you sit with them long enough to associate your memories of those +experiences with why they mattered. When useful artifacts shake out of my +process that can help others along in their own journeys, that’s a happy +accident as far as I’m concerned. - I often refer to this regular act of reflection as “planting a flag” to - symbolize whatever I want to stand out when I look back on a period of - my life. In my case, these flags usually take the form of creative work - like a blog post, a conference talk, or an open source library, but - however you choose to imbue meaning into your experiences is entirely - up to you. The most important thing is that you sit with them long - enough to associate your memories of those experiences with why they - mattered. When useful artifacts shake out of my process that can help - others along in their own journeys, that’s a happy accident as far as - I’m concerned. +[15]How to plant a flag -[14]How to plant a flag +So, how does one actually assign meaning to a heretofore meaningless +experience? This is the process I’ve settled into over the years to identify +and commemorate my life’s watershed moments: - So, how does one actually assign meaning to a heretofore meaningless - experience? This is the process I’ve settled into over the years to - identify and commemorate my life’s watershed moments: - 1. Reflect: spend some unstructured time—maybe on a walk or with a - notebook—and let your mind wander through the previous season of - your life. A lesson you learned. Feedback that encouraged you. An - interaction that left an impact. A moment that inspired you. I’m - especially drawn to memories where emotions ran high—maybe I was - really worried before a hard conversation or relieved after a - colleague helped me solve a hard problem. If I draw a blank, I scan - my e-mail and calendar to jog my memory. If, nothing stands out - after all that, I don’t force it; I’ll give the exercise a rest and - come back to it a few days later - 2. Collect: considering the experiences that came to mind when - reflecting, which ones were distinct and new to you? Anything new - you learned is, by definition, novel, and would obviously qualify. - It’s naturally harder to identify familiar-seeming experiences as - novel, but perhaps there was something unique and interesting - hiding in the otherwise banal UI control you shipped last month. - Why do this? Because by filtering out everything you’ve seen and - done before, whatever flag you plant will stand taller, and you - won’t risk mistaking this moment and its meaning for another. If - this step filters everything out because nothing seems sufficiently - novel, widen the aperture a bit—surely something interesting - happened in the last few months. And, try as you might, if you go - long enough with nothing to show for it, the meaning you’re - searching for may be that it’s time to make a change - 3. Connect: for each of the experiences you’ve collected, try to - understand how they might connect to future situations. A new tool - or technique might empower you to do something you couldn’t - accomplish otherwise. A painful mistake might warn your future self - to avoid try a different approach next time. Since I can’t see the - future, I imagine what impact each such insight might have had if - applied to experiences from my past. “If I’d had learned this years - ago, how would it have changed other events in my life?” If I can - think of several moments in my life that would have played out - differently, that’s as good of evidence as any that it has the - potential to make an impact on you going forward - 4. Protect: memory is fleeting, and the work you do to identify - moments that matter will quickly fade away if you don’t do - something to mark the occasion. Memories thrive in novelty and - wither in predictability, so the only wrong answer would be to - enshrine every life lesson in the exact same way. Because creative - endeavors necessarily result in the creation of something new, - they’re a great way to clarify meaning and cement memories. My - go-to creative outlets are essays, videos, and code, but yours - might be songs, recipes, or [15]Etch A Sketch portraiture + 1. Reflect: spend some unstructured time—maybe on a walk or with a + notebook—and let your mind wander through the previous season of your life. + A lesson you learned. Feedback that encouraged you. An interaction that + left an impact. A moment that inspired you. I’m especially drawn to + memories where emotions ran high—maybe I was really worried before a hard + conversation or relieved after a colleague helped me solve a hard problem. + If I draw a blank, I scan my e-mail and calendar to jog my memory. If, + nothing stands out after all that, I don’t force it; I’ll give the exercise + a rest and come back to it a few days later + 2. Collect: considering the experiences that came to mind when reflecting, + which ones were distinct and new to you? Anything new you learned is, by + definition, novel, and would obviously qualify. It’s naturally harder to + identify familiar-seeming experiences as novel, but perhaps there was + something unique and interesting hiding in the otherwise banal UI control + you shipped last month. Why do this? Because by filtering out everything + you’ve seen and done before, whatever flag you plant will stand taller, and + you won’t risk mistaking this moment and its meaning for another. If this + step filters everything out because nothing seems sufficiently novel, widen + the aperture a bit—surely something interesting happened in the last few + months. And, try as you might, if you go long enough with nothing to show + for it, the meaning you’re searching for may be that it’s time to make a + change + 3. Connect: for each of the experiences you’ve collected, try to understand + how they might connect to future situations. A new tool or technique might + empower you to do something you couldn’t accomplish otherwise. A painful + mistake might warn your future self to avoid try a different approach next + time. Since I can’t see the future, I imagine what impact each such insight + might have had if applied to experiences from my past. “If I’d had learned + this years ago, how would it have changed other events in my life?” If I + can think of several moments in my life that would have played out + differently, that’s as good of evidence as any that it has the potential to + make an impact on you going forward + 4. Protect: memory is fleeting, and the work you do to identify moments that + matter will quickly fade away if you don’t do something to mark the + occasion. Memories thrive in novelty and wither in predictability, so the + only wrong answer would be to enshrine every life lesson in the exact same + way. Because creative endeavors necessarily result in the creation of + something new, they’re a great way to clarify meaning and cement memories. + My go-to creative outlets are essays, videos, and code, but yours might be + songs, recipes, or [16]Etch A Sketch portraiture - That’s it! Reflect, collect, connect, and protect. +That’s it! Reflect, collect, connect, and protect. - (See what I did there? How all the steps rhyme. That’s the kind of - thing you’ll be able to pull off with a decade of practice doing this.) +(See what I did there? How all the steps rhyme. That’s the kind of thing you’ll +be able to pull off with a decade of practice doing this.) -[16]This all happens in hindsight +[17]This all happens in hindsight - If you’ve ever had a job that encouraged you to make quarterly or - annual goals for yourself, you may have noticed that a lot of those - goals go unfinished. By the time performance reviews roll around, - people often feel forced to justify why they didn’t achieve this or - that goal. Regardless of the reason—maybe learning some skill was no - longer relevant or the business’s strategic priorities shifted—the - failure to meet a goal is often rooted in a failure to predict the - future. I’m sure managers hope people will feel inspired and - accountable to pursue their goals creatively, but in my experience they - more often instill procrastination and anxiety. If there’s any - creativity exhibited in annual goal rituals, it’s usually when people - feel forced to weave a narrative that kinda-sorta connects a stated - objective to whatever mostly-unrelated work they actually did. +If you’ve ever had a job that encouraged you to make quarterly or annual goals +for yourself, you may have noticed that a lot of those goals go unfinished. By +the time performance reviews roll around, people often feel forced to justify +why they didn’t achieve this or that goal. Regardless of the reason—maybe +learning some skill was no longer relevant or the business’s strategic +priorities shifted—the failure to meet a goal is often rooted in a failure to +predict the future. I’m sure managers hope people will feel inspired and +accountable to pursue their goals creatively, but in my experience they more +often instill procrastination and anxiety. If there’s any creativity exhibited +in annual goal rituals, it’s usually when people feel forced to weave a +narrative that kinda-sorta connects a stated objective to whatever +mostly-unrelated work they actually did. - To wit, I’ve never accomplished anything I felt proud of by setting a - goal. In fact, the surest way to ensure I don’t do something is to set - a goal. When asked to set goals for myself, I’ve found that expressing - the goal (as opposed to achieving it) becomes my overriding objective. - The moment a manager approved my list of goals, I felt that I had - completed the work asked of me and I would instantly lose all - motivation to pursue the goals themselves. +To wit, I’ve never accomplished anything I felt proud of by setting a goal. In +fact, the surest way to ensure I don’t do something is to set a goal. When +asked to set goals for myself, I’ve found that expressing the goal (as opposed +to achieving it) becomes my overriding objective. The moment a manager approved +my list of goals, I felt that I had completed the work asked of me and I would +instantly lose all motivation to pursue the goals themselves. - This explains why planting flags can succeed where goal-setting fails. - If what I’m searching for is meaning in my work, setting a goal creates - an expectation of where, when, and how my future self should find that - meaning. High pressure. Focusing on doing my job well and reflecting on - whatever I did in retrospect, however, has allowed me to sift through - my experiences, identify patterns, and give meaning to them. Low - pressure. +This explains why planting flags can succeed where goal-setting fails. If what +I’m searching for is meaning in my work, setting a goal creates an expectation +of where, when, and how my future self should find that meaning. High pressure. +Focusing on doing my job well and reflecting on whatever I did in retrospect, +however, has allowed me to sift through my experiences, identify patterns, and +give meaning to them. Low pressure. - Instead of studying something you think you might need in the future, - wait for the need to arise and then immerse yourself in learning it. - Instead of feeling stressed and distracted by the fear that you’ll run - out of time before hitting an annual goal, do your work diligently and - look forward to the next opportunity to reflect on the things you’ll - achieve. Instead of reducing your existence at work into a series of - boxes to check in a prescribed career plan, focus on being truly - present and intentional at work and open to wherever that might lead - you. +Instead of studying something you think you might need in the future, wait for +the need to arise and then immerse yourself in learning it. Instead of feeling +stressed and distracted by the fear that you’ll run out of time before hitting +an annual goal, do your work diligently and look forward to the next +opportunity to reflect on the things you’ll achieve. Instead of reducing your +existence at work into a series of boxes to check in a prescribed career plan, +focus on being truly present and intentional at work and open to wherever that +might lead you. -[17]Who, me? Yes, you! +[18]Who, me? Yes, you! - There’s just one last thing to talk about: you, and why you don’t - already do this. +There’s just one last thing to talk about: you, and why you don’t already do +this. - It’s not like this retrospective process of imbuing meaning into one’s - work is particularly clever or insightful. I don’t think I’m a genius - for arriving at the following three-step formula to having a deeply - meaningful career and leaving a memorable legacy: - 1. Work really damn hard - 2. Occasionally gather highlights - 3. Commemorate them somehow +It’s not like this retrospective process of imbuing meaning into one’s work is +particularly clever or insightful. I don’t think I’m a genius for arriving at +the following three-step formula to having a deeply meaningful career and +leaving a memorable legacy: - But if it’s so obvious, why don’t more people do this? + 1. Work really damn hard + 2. Occasionally gather highlights + 3. Commemorate them somehow - I wonder if it’s because everything above might seem like the exclusive - domain of the Thoughtleader™ class. “I don’t have (or necessarily want) - an audience to read my blog posts or watch me speak, so this ain’t for - me!” you might be thinking. +But if it’s so obvious, why don’t more people do this? - This line of thinking is reasonable, but it’s based on an assumption - that doesn’t always hold. +I wonder if it’s because everything above might seem like the exclusive domain +of the Thoughtleader™ class. “I don’t have (or necessarily want) an audience to +read my blog posts or watch me speak, so this ain’t for me!” you might be +thinking. - It’s true: if you believe the purpose of creating something borne out - of your career experience is for other people to see and appreciate it, - then maybe it makes no sense for you to bother. Not everyone craves - attention. Building a following inevitably attracts a certain number of - trolls. And if you build it, odds are people won’t come. I can’t - guarantee anyone will run your code, read your blog, or watch your - talk. +This line of thinking is reasonable, but it’s based on an assumption that +doesn’t always hold. - But here’s the thing: I create these things for me and me alone. When a - bunch of people read something I wrote or show up to one of my talks, - do I find it encouraging and validating? Sure. But it’s not what drives - me. I started creating things to punctuate my life’s sentences long - before anybody took an interest in me and I wouldn’t stop even if - everyone loses interest in me. +It’s true: if you believe the purpose of creating something borne out of your +career experience is for other people to see and appreciate it, then maybe it +makes no sense for you to bother. Not everyone craves attention. Building a +following inevitably attracts a certain number of trolls. And if you build it, +odds are people won’t come. I can’t guarantee anyone will run your code, read +your blog, or watch your talk. - What’s more, a lot of (ugh) content creators are the same way. In the - course of my travels, I’ve gotten to meet many of my heroes, and while - a few have disappointed me spectacularly (don’t meet your heroes!), - I’ve found that a surprising number of them got into the - thought-leading racket for the same selfish reason I did. They create - stuff to scratch their own intrinsic creative itches and to give - meaning to their careers. If other people’s attention factors in at - all, it’s usually to justify the time they spend making stuff. +But here’s the thing: I create these things for me and me alone. When a bunch +of people read something I wrote or show up to one of my talks, do I find it +encouraging and validating? Sure. But it’s not what drives me. I started +creating things to punctuate my life’s sentences long before anybody took an +interest in me and I wouldn’t stop even if everyone loses interest in me. -[18]Justin Searls +What’s more, a lot of (ugh) content creators are the same way. In the course of +my travels, I’ve gotten to meet many of my heroes, and while a few have +disappointed me spectacularly (don’t meet your heroes!), I’ve found that a +surprising number of them got into the thought-leading racket for the same +selfish reason I did. They create stuff to scratch their own intrinsic creative +itches and to give meaning to their careers. If other people’s attention +factors in at all, it’s usually to justify the time they spend making stuff. - An icon of a human figure Status - Double Agent +[002] - An icon of a hash sign Code Name - Agent 002 +[19] Justin Searls - An icon of a map marker Location - Orlando, FL +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 clock Publish Date + October 10, 2023 +An icon of a human figure Authors + [26]Justin Searls +An icon of a paper organzier Categories + [27]Community - An icon of a human figure Authors - [25]Justin Searls +[28] Shared values can make the difference for your engineering team - An icon of a paper organzier Categories - [26]Community +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. -[27]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. - - An icon of a clock Publish Date - February 20, 2023 - - An icon of a human figure Authors - [28]Cathy Colliver - - An icon of a paper organzier Categories - [29]Leadership - [30]Teams - [31]Our Company +An icon of a clock Publish Date + February 20, 2023 +An icon of a human figure Authors + [29]Cathy Colliver +An icon of a paper organzier Categories + [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 +[44] 614.349.4279 +[45] hello@testdouble.com +[46]Privacy Policy +Founded in Columbus, OH + +[47] Test Double - [39]Mastodon [40]GitHub [41]LinkedIn [42]Twitter - [43]614.349.4279 - [44]hello@testdouble.com - [45]Privacy Policy - Founded in Columbus, OH +References: -[46]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/ +[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/ diff --git a/static/archive/blog-testdouble-com-krzanb.txt b/static/archive/blog-testdouble-com-krzanb.txt index 7892a41..fed3bed 100644 --- a/static/archive/blog-testdouble-com-krzanb.txt +++ b/static/archive/blog-testdouble-com-krzanb.txt @@ -1,646 +1,603 @@ - [1]Test Double The Test Double logo +[matomo] - Menu +[1] Test Double The Test Double logo - (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 - [8]Blog [9]Posts +Menu An icon that displays an illustration of a website menu + + • [3] Home + • [4] Agency + • [5] Services + • [6] Careers + • [7] Blog + • [8] Contact + +[9] Blog [10] Posts The looming demise of the 10x developer Why an era of enthusiast programmers is coming to an end - An icon of a clock Publish Date - July 12, 2023 - - An icon of a human figure Authors - [10]Justin Searls - - I’ve recently been telling anyone who will listen that I am excited to - be on the precipice of using [11]Sorbet to write a type-checked edition - of [12]Mocktail that has the potential to unlock productivity workflows - never before possible in Ruby. - - I’m not there yet. - - I don’t want to say it’s been a “quagmire,” but I’m over [13]150 - commits in, and there’s a lot left to button up before release. It’s - been a real challenge. Learning Sorbet at all takes a good chunk of - time, to be sure. I’ve also hit a number of thorny edge cases and - elusive bugs along the way (both in the type system itself and that the - type system exposed in my code). And, like usual, I’m trying to do - something that’s never quite been done before, so I’m constantly - oscillating between feelings of nervous excitement and fear that I’m - attempting the impossible. (Though it’s been made far more possible - thanks to the generous assistance of [14]Ufuk Kayserilioglu, [15]Kevin - Newton, and [16]Jake Zimmerman!) - - Beyond this, any specifics I might share about my current quest are so - banal as to not be worth your time. (If you somehow find this - interesting, please [17]email me so I might feel less alone in this - world.) That said, there is something generally interesting here that - programmers don’t often talk about. And that’s the deeper question: why - do I keep doing this to myself? - -[18]What makes me “special” - - I am an enthusiast programmer. - - I stumble on a problem like this one and I stay up late every night - until I find the solution. I wake up early each morning with new ideas - of things to try. I don’t take enough breaks, but when I do, they’re - tactically-designed to exploit my brain’s asynchronous processor to - generate solutions for whatever I’m currently stuck on. I irresponsibly - defer responsibilities from other areas of my life. Eventually, I - realize I’m only at the 20% mark and that a pattern is repeating where - a month or more of my life is about to disappear from the calendar. - Towards the end, I find myself rushing to find the maze’s exit because - my desire to unlock the puzzle’s final secret starts to be overtaken by - the shame of all the other balls I’m dropping. It’s excruciating as I - approach that inflection point—as intense as an overbearing manager’s - “do or die” deadlines ever were, except in this case the pressure I - feel is entirely self-imposed. - - And then, at some uneventful moment at 4 pm on a Sunday, it’s done. - - Sometimes people care about what I made. Usually they don’t. Often, - even I don’t. - - I give myself enough time to clear my inbox, tidy the house, and shave. - Then I move onto the next Sisyphean task I’ve laid before myself. - - This describes how I’ve lived my life since I was 13 years old, with - few exceptions. And let me tell you, it’s very difficult to juggle a - healthy personal life and a sustainable work life when you’re - simultaneously engulfed in an endless series of side quests to will - every creative curiosity into existence. - - When I was a consultant at [19]Crowe, there was one year I billed - clients for nearly 2100 hours, which averages out to more than 40 hours - per week every week of the year with zero days off. And that’s not - counting travel time. Or the half-dozen hours of weekly administrative - work that wasn’t considered billable. Nevertheless, I found time in my - nights and weekends that year to build an app with Apple’s buggy, - mostly-undocumented initial iPhone SDK. The app was a native client to - [20]vBulletin web forums, allowing users to browse threads and compose - replies. Despite knowing nothing about any of the underlying - technologies, I obsessively polished the app to perfection. Did I make - time to sleep? I don’t remember. The whole year’s a blur. - - All so that Apple could reject my app because users might post swear - words or dirty pictures. Oh, well. Onto the next thing. - - I don’t know what word best describes my behavior above without - inflecting significant value judgment. Perfectionist? Obsessive? - Passionate? Whatever we call this compulsion, it’s hardly an unalloyed - good and it comes with its share of downsides. Nevertheless, it’s one - of a number of idiosyncrasies and character flaws I’ve decided to lean - into and find productive outlets for rather than attempting to repress - or rewire. - - Other examples: - * I ruminate endlessly under stress, so I wrest back some control by - manufacturing stress responses over things I’m building to trick my - brain into ruminating on work that’s useful to me. This both - overrides the unhelpful, irrational worries that surround me every - day and unlocks a “second shift” where I accomplish almost as much - away from the keyboard as in front of it - * I’m a terrible listener and struggle with auditory processing, - especially in groups and loud environments. (One reason I talk so - much is that it’s always felt safer to drive the conversation than - risk mishearing and offending someone.) Parsing others’ sentences - often feels like I’m filling in the blanks to make sense of them, - like playing a game of [21]Mad Libs. Over the years, I’ve - redirected this into a source of creativity and humor. Most of my - puns and wordplay are happy accidents as I fill in the gaps in my - own listening comprehension. Some of my most creative ideas are - things I swear I heard someone say when it turns out they were - actually talking about something else - * I’m a really bad learner—disinterested, distractible, and - disagreeable. I’ve never enjoyed learning and generally avoid it, - especially learning for its own sake. At the slightest discomfort - when struggling to understand something, I’ll grasp for any - distraction that might offer me a momentary escape. When I do - manage to get traction, I inevitably find myself disagreeing with - the premise or subversively trying to prove the authors wrong. The - upshot is that once I actually do learn something, I know it cold. - It means I will have scoured every nook and climbed out of every - pitfall. Professionally, this apparent weakness has turned out to - be a superpower. Learning everything the hard way has made me a - natural consultant and mentor. Because I’ve already explored all - the wrong paths, I often know someone is stuck before they do, - understand what threw them off course, and show them how to get - back on track - - The reason I landed on this topic today is not that any of the above - makes me special, it’s actually that contradictions like these—whatever - their origin—are so typical among programmers born before 1990 that - they’re entirely mundane. - -[22]An aberrant generation of programmers - - Squint and everything I just said about myself could have described a - character from [23]The Big Bang Theory or [24]Silicon Valley. I’m at - peace with the fact that on my best days, I’m an overplayed, abrasive - character trope come to life. For decades, we’ve associated a slew of - mostly-negative traits like these with programmers as if the linkage is - inherent and inevitable. I’ve always thought that stereotype was - arbitrary—anybody can learn programming and be great at it—but now I’m - starting to think it’s a product of our times as well. - - That is to say, I’ve come to believe the era typified by the enthusiast - programmer—autodidactic, obsessive, and antisocial—is drawing to a - close. - - Why do I think that? Because there was a specific, generational moment - that attracted a bunch of people like me into the software industry. It - occurred during the brief window between home computers becoming widely - available and their becoming sealed airtight by platform holders. For a - fleeting moment, computers were simultaneously accessible and scrutable - during a necessary but temporary stage in the maturation of information - technology. Before they were rendered irreducibly complex as consumer - devices, merely using a computer required figuring out a lot about how - it worked. And coming of age with an understanding how computers worked - made programming them far more approachable. And thanks to cosmic - coincidence and the marketing teams of companies like RadioShack, - society unwittingly handed a generation of social mobility to [25]the - boys of upper-middle-class families in the US who felt more comfortable - at home with their computer than outside engaging socially with their - peers. I was definitely one of those awkward, anxious kids and a whole - lot of the programmers I’ve met along the way were too. - - But one reason to believe that programmers don’t have to be like this - is that programmers weren’t always like this. I remember asking a - computer science professor in 2003 about our school’s gender disparity - (we only had a single woman in my class, and she later switched - majors). He recounted that before 1990 and the advent of hacker and - gamer subcultures, my college touted robust majorities of women in - computer science. (Nationally, women’s enrollment in CS doubled in a - decade, [26]peaking at 37.1% nationally in 1984 before dropping - precipitously.) - - And one reason to believe programmers won’t always be this way is that - there’s plenty of evidence that the next generation of professional - programmers is no longer dominated by enthusiasts. People becoming - software developers today look markedly different than those who came - before. (Sadly, I wish I could say I’m referring to the success of - movements to increase representation from traditionally marginalized - groups—tech is still dramatically over-indexed on white dudes who - enjoyed affluent upbringings.) I’m just pointing to all the money - sloshing around here: it catapulted programming from a firmly middle - class job that appealed to people who really loved computers into a - comfortably upper-middle class profession that attracts anyone who - wants to secure their financial future. Ask anyone who switched careers - in the last decade how many times someone suggested they “learn to - code.” Countless people are entering the industry simply because - programming is a relatively secure, well-paying profession. (And - there’s nothing wrong with that!) - -[27]Inter-generational conflict is brewing - - I’m not sure if anyone has ever said “OK boomer” to my parents, but I - can imagine it wouldn’t feel awesome to hear. - - Nor do I know whether anyone will coin a term to dismiss my generation, - but I have faith that there’s enough societal exasperation out there - for someone on TikTok to come up with something snappy. A lot of people - in my professional cohort still see themselves as social outcasts who - grew up in front of a CRT in their parents’ basements, but I suspect - the next generation sees a homogenous monolith of 40-somethings wearing - hoodies and sandals (with socks!) that lucked their way into capturing - control of the software industry just as it settled into a state of - economic maturity. - - Sit with this distinction for a while, and you might start to see these - old-hat programmers as belonging to an Enthusiast Generation, one - that—due to its unique initial circumstances—is unlikely to be - replicated. Once I introduced the word “generation” to my thinking, it - became easier to make sense of many contentious, unresolved issues in - tech that flared up over the past decade by looking at them through the - lens of intergenerational conflict. And just like any discussion of - generations, it’s important to caveat that there are no firm boundary - lines, that exceptions are plentiful, and that many observations will - be isolated to a single locale and culture (the U.S. in this case, - maybe Canada?). The only thing that bucketing people into generations - can do for us is provide a new way to look at how a population may be - changing, thanks to a big enough time-step to perceive the accumulation - of decades of gradual change. - - To illustrate, I’ll highlight three high-profile conflicts that make a - different kind of sense when viewed as a generational shift. - -[28]Passion - - I remember about 8 years ago, people [29]got [30]passionate [31]about - [32]the [33]word [34]passion. - - This rubbed me the wrong way at first. Then again, everything does. - - I remember thinking, “banning the word ‘passion’ will just lead people - to pick others like ‘self-driven’, ‘highly-motivated’, and - ‘ambitious’.” I remember asking, “are we supposed to screen out - candidates for whom programming is a hobby outside work?” What I don’t - remember was pondering whether this was an indication that the times - were changing. - - When I entered the industry, my salary was lower than it would’ve been - if I’d gone into accounting, or become an actuary, or majored in civil - engineering—myself and most of the people around me did get into - software because we were passionate about it. Reading tweets and - thinkpieces that suggested “passion” was a four-letter word felt like a - personal affront, so I responded defensively. - - What I wasn’t thinking about was what it must have felt like for - everyone who entered the industry expecting their job to be a job but - who found themselves managed by people from my generation who didn’t - leave them room to have a life outside work. Maybe everyone else on the - team worked overtime without being asked. Maybe taking “too much” - supposedly “unlimited” time off would foreclose any chance for a - promotion. Maybe building rapport at lunch required holding evolved - opinions on Emacs vs. Vim, or mechanical key switches, or whatever was - on the front page of Hacker News. That sounds like a pretty miserable - existence, especially if programming isn’t what gets you out of bed in - the morning. - - If you allow for the possibility we’re undergoing a generational - change, maybe this debate over “passion” is evidence that the - assumption that most programmers will always be passionate about - programming was mistaken and counter-productive. - -[35]Craftsmanship - - This brings another contentious word to mind: “craftsmanship.” Its - origin, as I witnessed it, was a reaction to the watering down of the - technical aspects of the agile software movement in the late 2000s in - favor of more lucrative soft-skills training and consulting services. - In case you missed it, most of the craftsmanship meme could be summed - up as a Slow Code movement. There was a lot of talk about measuring - twice and cutting once, establishing apprenticeship programs to train - new programmers, and a million ways to leverage automated tests for - purposes other than testing things. - - I was an active participant in this community, speaking at the - [36]conference several times, putting [37]my name on the manifesto, and - generally exhorting anyone who would listen to please make their - software less terrible. - - But looking back, the craftsmanship movement wasn’t only about - rekindling the tremendous engineering insights of agile methods like - [38]Extreme Programming, it was also a response to a rapid influx of a - generation of programmers who didn’t care about code quality the same - way we did. There was a sense that serious programmers were under - threat and hopelessly outnumbered by unserious ones. That if your team - didn’t get more disciplined about what you allow in your codebase, - you’d find yourself mired in a maze of complexity, beholden to epochal - build times, and left holding the bag with yet another legacy system. - - Thinking about this point of tension as another manifestation of the - generational shift we’re experiencing, it’s easy to spot the problem: - “what you allow in your codebase” is a wee bit too easy to conflate - with “who you allow in your codebase.” - - Shibboleths like “test-driven design” were so numerous that, to - outsiders, even perfunctory conversations were riddled with rhetorical - land mines. The emphasis on apprenticeship also carried assumptions - nobody seriously grappled with: that it implied “one true path” to - programming, that somebody (us) had uniquely figured it out, and that - the only way to learn it was to imitate the people who came before you. - I watched more than one conference talk advocating for - professionalizing software like any other trade by licensing - programmers just like we do plumbers, electricians, and [39]Canadian - engineers. Everyone’s intention was to prevent people from writing bad - software, but some of the movement’s prescriptions would have prevented - many people from writing software at all. - -[40]10x Developers - - Before you say anything, I know [41]you [42]probably [43]already - [44]have [45]an [46]opinion [47]on [48]the [49]idea of a “10x” - developer. If you aren’t familiar, the term refers to - debatably-mythical programmers whose output is worth that of ten other - programmers. What aspects of that output? Which ten other programmers? - Unclear. - - The concept behind the “10x” term predates either of the generations of - programmers being discussed here. It seems to have originated in - [50]this (flimsy) 1968 study that among experienced programmers, the - best were ten times more productive than the worst (as opposed to the - average). We remember it because it was referenced in the late Fred - Brooks’ seminal [51]Mythical Man-Month. - - That some people are better at their jobs than others is (usually) - uncontroversial. At least, it was, until it bubbled up in The Discourse - during the 2010s as a flashpoint over who the industry chooses to - valorize, often sparked by tweets from people affiliated with venture - capital and advocating that founders should strive to “only hire 10x - developers.” - - In response, many people who reasonably identified this framing as - unproductive chose to pick a weird fight by claiming that 10x - developers don’t exist instead. This invited a lot of - counter-criticism, as I think most of us can dream up examples of - people whose work is 1/10th as valuable as their own. From there, the - conversation shifted to counter-counter-critiques enumerating the - adverse knock-on effects of adding a toxic actor to a team, no matter - how much of a ninja/rockstar they are at coding. - - And it was here that the conversation settled into a stalemate, with - clear battle lines dividing the two camps. On one side were proponents - who believed a lot of well-compensated programmers aren’t very good, - but that a few programmers are so good that the value they generate far - exceeds the range of a typical payscale (which was why Google used to - brag that they “[52]pay unfairly”). On the other side were critics who - were more than happy to project every negative stereotype about - programmers onto these supposedly hyper-productive ones, suggesting a - 10x developer’s easy-to-measure output often came with hard-to-measure - organizational and technical costs. - - But now, looking back, this debate would have gone a lot differently if - we’d considered it through the valence of inter-generational conflict. - - I’ll come clean: do I believe some programmers are at least an order of - magnitude better at programming than others? In my experience … yes. - I’ve worked with programmers who routinely solve problems in minutes - after I’ve wasted days or weeks on them. I’ve witnessed a programmer - singlehandedly build something in a day that an entire team struggled - to deliver in two weeks—without any of the catastrophic antisocial, - unsustainable downsides one might imagine. I’ve honestly seen more - socially corrosive behavior from the other end of the productivity - spectrum, because programmers who spin their wheels and make zero - forward progress for days, weeks, or months will inevitably scramble - for a way to save face. - - It may be uncomfortable to admit, but it’s not altogether unreasonable - to speculate that enthusiast programmers may, in aggregate, outperform - professional programmers who hang up their keyboard at the end of each - shift. In my experience, these traits differentiate the former from the - latter: - * Tireless: spending more time practicing programming—not under - coercion to work long hours, but being intrinsically motivated to - do so—will generally make someone a better programmer - * Tenacious: chasing down answers with limitless curiosity and - relentless, no-holds-barred tenacity—whether or not it’s in their - job description to spelunk open source stack traces or debug other - teams’ code—will yield better information and faster progress - * Thorough: priding oneself on the quality of one’s work and pursuing - excellence in the (brace for it) craft—not falling victim to - perfectionism, but cutting the right corners when necessary—will - produce better-working software that’s easier to maintain - - In the context of this generational rift, all three of the above are - exemplified by (but by no means exclusively limited to) us last-gen - models: the individual that programs in their spare time, obsessively - refuses to let a hard problem go, and is personally invested in the - quality of their work product. - - I can’t imagine this dynamic feels awesome for members of the new - generation who don’t want to spend more than 40 hours a week at their - computer, or who have significant family commitments, or who aren’t - inclined to asynchronously ponder refactoring techniques as they run - errands. Will they be forever outpaced by more enthusiastic colleagues - for whom “programmer” is an all-encompassing identity as well a career? - I don’t know. - - It’s an uncomfortable conversation because it’s an uncomfortable - reality. - -[53]What do we do with this? - - The power of an analogy lies in what it empowers people to do. - Envisioning programmers as belonging to discrete generations who are - ushering in a dramatic transition in the industry can equip us to - identify the common threads between many of the challenges we’re - currently facing. It may even enable us to predict and plan for - inevitable difficulties in the future, as more members of the earlier - generation age out. - - Suppose you’ve read this far and you can buy both these arguments: - 1. The next generation of programmers are less likely to be motivated - by a love of programming than the previous generation and may - differ in profound ways as a result - 2. Software, as an industry, has structurally organized itself around - the assumption programmers will continue to resemble members of the - outgoing generation - - If so, then you can probably imagine there will be a lot of problems to - be solved here. The hot-button issues we revisited above are already - known, even if we failed to put our collective finger on a common cause - at the time. It’s likely that countless more challenges lie beneath the - surface, waiting for the spark that causes them to boil over. It’s up - to us whether we put in the work to uncover and address these problems - proactively. - - Here are a few examples of questions I find myself asking after sitting - with this for a few days: - * The new generation is more likely to expect structure and support - from human resources and management, whereas the previous - generation is more likely to find active management (e.g. career - pathing, coaching, goal-setting) actually saps their autonomy and - intrinsic motivation. Can organizations effectively cater to the - needs of both groups? - * It’s an open secret that the industry has no idea how to teach - people to program. Computer Science degrees famously don’t prepare - programmers for the job of programming, which has always been left - as an exercise to the student to figure out on their own time. If - the industry is going to outlive us enthusiast programmers, will it - adopt a sustainable approach to educating the next generation that - doesn’t require people to teach themselves everything? - * Betting your business on a limitless supply of self-starting, - self-sufficient, self-disciplined candidates seems a lot like - investing in the long-term prospects of fossil fuel extraction. How - will companies that built their cultures around enthusiast - programmers adjust to a generation needing more direction, more - support, and more accountability? - - All we know for sure is that time keeps marching forward and change is - a constant, so planning for a future that looks different than the past - is usually time well spent. - - What challenges do you see in this generational transition? [54]Join - the conversation on our N.E.A.T community - - Not a N.E.A.T. community member yet? [55]More info. - - If you enjoyed this piece and want to keep up with what myself and the - other agents are up to, you should check out our [56]monthly - newsletter. - -[57]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 - - [58]Twitter [59]Mastodon [60]Github [61]LinkedIn [62]Website +An icon of a clock Publish Date + July 12, 2023 +An icon of a human figure Authors + [11]Justin Searls + +I’ve recently been telling anyone who will listen that I am excited to be on +the precipice of using [12]Sorbet to write a type-checked edition of [13] +Mocktail that has the potential to unlock productivity workflows never before +possible in Ruby. + +I’m not there yet. + +I don’t want to say it’s been a “quagmire,” but I’m over [14]150 commits in, +and there’s a lot left to button up before release. It’s been a real challenge. +Learning Sorbet at all takes a good chunk of time, to be sure. I’ve also hit a +number of thorny edge cases and elusive bugs along the way (both in the type +system itself and that the type system exposed in my code). And, like usual, +I’m trying to do something that’s never quite been done before, so I’m +constantly oscillating between feelings of nervous excitement and fear that I’m +attempting the impossible. (Though it’s been made far more possible thanks to +the generous assistance of [15]Ufuk Kayserilioglu, [16]Kevin Newton, and [17] +Jake Zimmerman!) + +Beyond this, any specifics I might share about my current quest are so banal as +to not be worth your time. (If you somehow find this interesting, please [18] +email me so I might feel less alone in this world.) That said, there is +something generally interesting here that programmers don’t often talk about. +And that’s the deeper question: why do I keep doing this to myself? + +[19]What makes me “special” + +I am an enthusiast programmer. + +I stumble on a problem like this one and I stay up late every night until I +find the solution. I wake up early each morning with new ideas of things to +try. I don’t take enough breaks, but when I do, they’re tactically-designed to +exploit my brain’s asynchronous processor to generate solutions for whatever +I’m currently stuck on. I irresponsibly defer responsibilities from other areas +of my life. Eventually, I realize I’m only at the 20% mark and that a pattern +is repeating where a month or more of my life is about to disappear from the +calendar. Towards the end, I find myself rushing to find the maze’s exit +because my desire to unlock the puzzle’s final secret starts to be overtaken by +the shame of all the other balls I’m dropping. It’s excruciating as I approach +that inflection point—as intense as an overbearing manager’s “do or die” +deadlines ever were, except in this case the pressure I feel is entirely +self-imposed. + +And then, at some uneventful moment at 4 pm on a Sunday, it’s done. + +Sometimes people care about what I made. Usually they don’t. Often, even I +don’t. + +I give myself enough time to clear my inbox, tidy the house, and shave. Then I +move onto the next Sisyphean task I’ve laid before myself. + +This describes how I’ve lived my life since I was 13 years old, with few +exceptions. And let me tell you, it’s very difficult to juggle a healthy +personal life and a sustainable work life when you’re simultaneously engulfed +in an endless series of side quests to will every creative curiosity into +existence. + +When I was a consultant at [20]Crowe, there was one year I billed clients for +nearly 2100 hours, which averages out to more than 40 hours per week every week +of the year with zero days off. And that’s not counting travel time. Or the +half-dozen hours of weekly administrative work that wasn’t considered billable. +Nevertheless, I found time in my nights and weekends that year to build an app +with Apple’s buggy, mostly-undocumented initial iPhone SDK. The app was a +native client to [21]vBulletin web forums, allowing users to browse threads and +compose replies. Despite knowing nothing about any of the underlying +technologies, I obsessively polished the app to perfection. Did I make time to +sleep? I don’t remember. The whole year’s a blur. + +All so that Apple could reject my app because users might post swear words or +dirty pictures. Oh, well. Onto the next thing. + +I don’t know what word best describes my behavior above without inflecting +significant value judgment. Perfectionist? Obsessive? Passionate? Whatever we +call this compulsion, it’s hardly an unalloyed good and it comes with its share +of downsides. Nevertheless, it’s one of a number of idiosyncrasies and +character flaws I’ve decided to lean into and find productive outlets for +rather than attempting to repress or rewire. + +Other examples: + + • I ruminate endlessly under stress, so I wrest back some control by + manufacturing stress responses over things I’m building to trick my brain + into ruminating on work that’s useful to me. This both overrides the + unhelpful, irrational worries that surround me every day and unlocks a + “second shift” where I accomplish almost as much away from the keyboard as + in front of it + • I’m a terrible listener and struggle with auditory processing, especially + in groups and loud environments. (One reason I talk so much is that it’s + always felt safer to drive the conversation than risk mishearing and + offending someone.) Parsing others’ sentences often feels like I’m filling + in the blanks to make sense of them, like playing a game of [22]Mad Libs. + Over the years, I’ve redirected this into a source of creativity and humor. + Most of my puns and wordplay are happy accidents as I fill in the gaps in + my own listening comprehension. Some of my most creative ideas are things I + swear I heard someone say when it turns out they were actually talking + about something else + • I’m a really bad learner—disinterested, distractible, and disagreeable. + I’ve never enjoyed learning and generally avoid it, especially learning for + its own sake. At the slightest discomfort when struggling to understand + something, I’ll grasp for any distraction that might offer me a momentary + escape. When I do manage to get traction, I inevitably find myself + disagreeing with the premise or subversively trying to prove the authors + wrong. The upshot is that once I actually do learn something, I know it + cold. It means I will have scoured every nook and climbed out of every + pitfall. Professionally, this apparent weakness has turned out to be a + superpower. Learning everything the hard way has made me a natural + consultant and mentor. Because I’ve already explored all the wrong paths, I + often know someone is stuck before they do, understand what threw them off + course, and show them how to get back on track + +The reason I landed on this topic today is not that any of the above makes me +special, it’s actually that contradictions like these—whatever their origin—are +so typical among programmers born before 1990 that they’re entirely mundane. + +[23]An aberrant generation of programmers + +Squint and everything I just said about myself could have described a character +from [24]The Big Bang Theory or [25]Silicon Valley. I’m at peace with the fact +that on my best days, I’m an overplayed, abrasive character trope come to life. +For decades, we’ve associated a slew of mostly-negative traits like these with +programmers as if the linkage is inherent and inevitable. I’ve always thought +that stereotype was arbitrary—anybody can learn programming and be great at +it—but now I’m starting to think it’s a product of our times as well. + +That is to say, I’ve come to believe the era typified by the enthusiast +programmer—autodidactic, obsessive, and antisocial—is drawing to a close. + +Why do I think that? Because there was a specific, generational moment that +attracted a bunch of people like me into the software industry. It occurred +during the brief window between home computers becoming widely available and +their becoming sealed airtight by platform holders. For a fleeting moment, +computers were simultaneously accessible and scrutable during a necessary but +temporary stage in the maturation of information technology. Before they were +rendered irreducibly complex as consumer devices, merely using a computer +required figuring out a lot about how it worked. And coming of age with an +understanding how computers worked made programming them far more approachable. +And thanks to cosmic coincidence and the marketing teams of companies like +RadioShack, society unwittingly handed a generation of social mobility to [26] +the boys of upper-middle-class families in the US who felt more comfortable at +home with their computer than outside engaging socially with their peers. I was +definitely one of those awkward, anxious kids and a whole lot of the +programmers I’ve met along the way were too. + +But one reason to believe that programmers don’t have to be like this is that +programmers weren’t always like this. I remember asking a computer science +professor in 2003 about our school’s gender disparity (we only had a single +woman in my class, and she later switched majors). He recounted that before +1990 and the advent of hacker and gamer subcultures, my college touted robust +majorities of women in computer science. (Nationally, women’s enrollment in CS +doubled in a decade, [27]peaking at 37.1% nationally in 1984 before dropping +precipitously.) + +And one reason to believe programmers won’t always be this way is that there’s +plenty of evidence that the next generation of professional programmers is no +longer dominated by enthusiasts. People becoming software developers today look +markedly different than those who came before. (Sadly, I wish I could say I’m +referring to the success of movements to increase representation from +traditionally marginalized groups—tech is still dramatically over-indexed on +white dudes who enjoyed affluent upbringings.) I’m just pointing to all the +money sloshing around here: it catapulted programming from a firmly middle +class job that appealed to people who really loved computers into a comfortably +upper-middle class profession that attracts anyone who wants to secure their +financial future. Ask anyone who switched careers in the last decade how many +times someone suggested they “learn to code.” Countless people are entering the +industry simply because programming is a relatively secure, well-paying +profession. (And there’s nothing wrong with that!) + +[28]Inter-generational conflict is brewing + +I’m not sure if anyone has ever said “OK boomer” to my parents, but I can +imagine it wouldn’t feel awesome to hear. + +Nor do I know whether anyone will coin a term to dismiss my generation, but I +have faith that there’s enough societal exasperation out there for someone on +TikTok to come up with something snappy. A lot of people in my professional +cohort still see themselves as social outcasts who grew up in front of a CRT in +their parents’ basements, but I suspect the next generation sees a homogenous +monolith of 40-somethings wearing hoodies and sandals (with socks!) that lucked +their way into capturing control of the software industry just as it settled +into a state of economic maturity. + +Sit with this distinction for a while, and you might start to see these old-hat +programmers as belonging to an Enthusiast Generation, one that—due to its +unique initial circumstances—is unlikely to be replicated. Once I introduced +the word “generation” to my thinking, it became easier to make sense of many +contentious, unresolved issues in tech that flared up over the past decade by +looking at them through the lens of intergenerational conflict. And just like +any discussion of generations, it’s important to caveat that there are no firm +boundary lines, that exceptions are plentiful, and that many observations will +be isolated to a single locale and culture (the U.S. in this case, maybe +Canada?). The only thing that bucketing people into generations can do for us +is provide a new way to look at how a population may be changing, thanks to a +big enough time-step to perceive the accumulation of decades of gradual change. + +To illustrate, I’ll highlight three high-profile conflicts that make a +different kind of sense when viewed as a generational shift. + +[29]Passion + +I remember about 8 years ago, people [30]got [31]passionate [32]about [33]the +[34]word [35]passion. + +This rubbed me the wrong way at first. Then again, everything does. + +I remember thinking, “banning the word ‘passion’ will just lead people to pick +others like ‘self-driven’, ‘highly-motivated’, and ‘ambitious’.” I remember +asking, “are we supposed to screen out candidates for whom programming is a +hobby outside work?” What I don’t remember was pondering whether this was an +indication that the times were changing. + +When I entered the industry, my salary was lower than it would’ve been if I’d +gone into accounting, or become an actuary, or majored in civil +engineering—myself and most of the people around me did get into software +because we were passionate about it. Reading tweets and thinkpieces that +suggested “passion” was a four-letter word felt like a personal affront, so I +responded defensively. + +What I wasn’t thinking about was what it must have felt like for everyone who +entered the industry expecting their job to be a job but who found themselves +managed by people from my generation who didn’t leave them room to have a life +outside work. Maybe everyone else on the team worked overtime without being +asked. Maybe taking “too much” supposedly “unlimited” time off would foreclose +any chance for a promotion. Maybe building rapport at lunch required holding +evolved opinions on Emacs vs. Vim, or mechanical key switches, or whatever was +on the front page of Hacker News. That sounds like a pretty miserable +existence, especially if programming isn’t what gets you out of bed in the +morning. + +If you allow for the possibility we’re undergoing a generational change, maybe +this debate over “passion” is evidence that the assumption that most +programmers will always be passionate about programming was mistaken and +counter-productive. + +[36]Craftsmanship + +This brings another contentious word to mind: “craftsmanship.” Its origin, as I +witnessed it, was a reaction to the watering down of the technical aspects of +the agile software movement in the late 2000s in favor of more lucrative +soft-skills training and consulting services. In case you missed it, most of +the craftsmanship meme could be summed up as a Slow Code movement. There was a +lot of talk about measuring twice and cutting once, establishing apprenticeship +programs to train new programmers, and a million ways to leverage automated +tests for purposes other than testing things. + +I was an active participant in this community, speaking at the [37]conference +several times, putting [38]my name on the manifesto, and generally exhorting +anyone who would listen to please make their software less terrible. + +But looking back, the craftsmanship movement wasn’t only about rekindling the +tremendous engineering insights of agile methods like [39]Extreme Programming, +it was also a response to a rapid influx of a generation of programmers who +didn’t care about code quality the same way we did. There was a sense that +serious programmers were under threat and hopelessly outnumbered by unserious +ones. That if your team didn’t get more disciplined about what you allow in +your codebase, you’d find yourself mired in a maze of complexity, beholden to +epochal build times, and left holding the bag with yet another legacy system. + +Thinking about this point of tension as another manifestation of the +generational shift we’re experiencing, it’s easy to spot the problem: “what you +allow in your codebase” is a wee bit too easy to conflate with “who you allow +in your codebase.” + +Shibboleths like “test-driven design” were so numerous that, to outsiders, even +perfunctory conversations were riddled with rhetorical land mines. The emphasis +on apprenticeship also carried assumptions nobody seriously grappled with: that +it implied “one true path” to programming, that somebody (us) had uniquely +figured it out, and that the only way to learn it was to imitate the people who +came before you. I watched more than one conference talk advocating for +professionalizing software like any other trade by licensing programmers just +like we do plumbers, electricians, and [40]Canadian engineers. Everyone’s +intention was to prevent people from writing bad software, but some of the +movement’s prescriptions would have prevented many people from writing software +at all. + +[41]10x Developers + +Before you say anything, I know [42]you [43]probably [44]already [45]have [46] +an [47]opinion [48]on [49]the [50]idea of a “10x” developer. If you aren’t +familiar, the term refers to debatably-mythical programmers whose output is +worth that of ten other programmers. What aspects of that output? Which ten +other programmers? Unclear. + +The concept behind the “10x” term predates either of the generations of +programmers being discussed here. It seems to have originated in [51]this +(flimsy) 1968 study that among experienced programmers, the best were ten times +more productive than the worst (as opposed to the average). We remember it +because it was referenced in the late Fred Brooks’ seminal [52]Mythical +Man-Month. + +That some people are better at their jobs than others is (usually) +uncontroversial. At least, it was, until it bubbled up in The Discourse during +the 2010s as a flashpoint over who the industry chooses to valorize, often +sparked by tweets from people affiliated with venture capital and advocating +that founders should strive to “only hire 10x developers.” + +In response, many people who reasonably identified this framing as unproductive +chose to pick a weird fight by claiming that 10x developers don’t exist +instead. This invited a lot of counter-criticism, as I think most of us can +dream up examples of people whose work is 1/10th as valuable as their own. From +there, the conversation shifted to counter-counter-critiques enumerating the +adverse knock-on effects of adding a toxic actor to a team, no matter how much +of a ninja/rockstar they are at coding. + +And it was here that the conversation settled into a stalemate, with clear +battle lines dividing the two camps. On one side were proponents who believed a +lot of well-compensated programmers aren’t very good, but that a few +programmers are so good that the value they generate far exceeds the range of a +typical payscale (which was why Google used to brag that they “[53]pay unfairly +”). On the other side were critics who were more than happy to project every +negative stereotype about programmers onto these supposedly hyper-productive +ones, suggesting a 10x developer’s easy-to-measure output often came with +hard-to-measure organizational and technical costs. + +But now, looking back, this debate would have gone a lot differently if we’d +considered it through the valence of inter-generational conflict. + +I’ll come clean: do I believe some programmers are at least an order of +magnitude better at programming than others? In my experience … yes. I’ve +worked with programmers who routinely solve problems in minutes after I’ve +wasted days or weeks on them. I’ve witnessed a programmer singlehandedly build +something in a day that an entire team struggled to deliver in two +weeks—without any of the catastrophic antisocial, unsustainable downsides one +might imagine. I’ve honestly seen more socially corrosive behavior from the +other end of the productivity spectrum, because programmers who spin their +wheels and make zero forward progress for days, weeks, or months will +inevitably scramble for a way to save face. + +It may be uncomfortable to admit, but it’s not altogether unreasonable to +speculate that enthusiast programmers may, in aggregate, outperform +professional programmers who hang up their keyboard at the end of each shift. +In my experience, these traits differentiate the former from the latter: + + • Tireless: spending more time practicing programming—not under coercion to + work long hours, but being intrinsically motivated to do so—will generally + make someone a better programmer + • Tenacious: chasing down answers with limitless curiosity and relentless, + no-holds-barred tenacity—whether or not it’s in their job description to + spelunk open source stack traces or debug other teams’ code—will yield + better information and faster progress + • Thorough: priding oneself on the quality of one’s work and pursuing + excellence in the (brace for it) craft—not falling victim to perfectionism, + but cutting the right corners when necessary—will produce better-working + software that’s easier to maintain + +In the context of this generational rift, all three of the above are +exemplified by (but by no means exclusively limited to) us last-gen models: the +individual that programs in their spare time, obsessively refuses to let a hard +problem go, and is personally invested in the quality of their work product. + +I can’t imagine this dynamic feels awesome for members of the new generation +who don’t want to spend more than 40 hours a week at their computer, or who +have significant family commitments, or who aren’t inclined to asynchronously +ponder refactoring techniques as they run errands. Will they be forever +outpaced by more enthusiastic colleagues for whom “programmer” is an +all-encompassing identity as well a career? I don’t know. + +It’s an uncomfortable conversation because it’s an uncomfortable reality. + +[54]What do we do with this? + +The power of an analogy lies in what it empowers people to do. Envisioning +programmers as belonging to discrete generations who are ushering in a dramatic +transition in the industry can equip us to identify the common threads between +many of the challenges we’re currently facing. It may even enable us to predict +and plan for inevitable difficulties in the future, as more members of the +earlier generation age out. + +Suppose you’ve read this far and you can buy both these arguments: + + 1. The next generation of programmers are less likely to be motivated by a + love of programming than the previous generation and may differ in profound + ways as a result + 2. Software, as an industry, has structurally organized itself around the + assumption programmers will continue to resemble members of the outgoing + generation + +If so, then you can probably imagine there will be a lot of problems to be +solved here. The hot-button issues we revisited above are already known, even +if we failed to put our collective finger on a common cause at the time. It’s +likely that countless more challenges lie beneath the surface, waiting for the +spark that causes them to boil over. It’s up to us whether we put in the work +to uncover and address these problems proactively. + +Here are a few examples of questions I find myself asking after sitting with +this for a few days: + + • The new generation is more likely to expect structure and support from + human resources and management, whereas the previous generation is more + likely to find active management (e.g. career pathing, coaching, + goal-setting) actually saps their autonomy and intrinsic motivation. Can + organizations effectively cater to the needs of both groups? + • It’s an open secret that the industry has no idea how to teach people to + program. Computer Science degrees famously don’t prepare programmers for + the job of programming, which has always been left as an exercise to the + student to figure out on their own time. If the industry is going to + outlive us enthusiast programmers, will it adopt a sustainable approach to + educating the next generation that doesn’t require people to teach + themselves everything? + • Betting your business on a limitless supply of self-starting, + self-sufficient, self-disciplined candidates seems a lot like investing in + the long-term prospects of fossil fuel extraction. How will companies that + built their cultures around enthusiast programmers adjust to a generation + needing more direction, more support, and more accountability? + +All we know for sure is that time keeps marching forward and change is a +constant, so planning for a future that looks different than the past is +usually time well spent. + +What challenges do you see in this generational transition? [55]Join the +conversation on our N.E.A.T community + +Not a N.E.A.T. community member yet? [56]More info. + +If you enjoyed this piece and want to keep up with what myself and the other +agents are up to, you should check out our [57]monthly newsletter. + +[002] + +[58] 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 + +[59] Twitter [60] Mastodon [61] Github [62] LinkedIn [63] Website Related posts: -[63]How to tell if AI threatens YOUR job +[64] How to tell if AI threatens YOUR job - Can ChatGPT help do your job? If so, how can you be sure AI won't - eventually replace you? Spot whether your job is at risk and what you - can do about it. +Can ChatGPT help do your job? If so, how can you be sure AI won't eventually +replace you? Spot whether your job is at risk and what you can do about it. - An icon of a clock Publish Date - March 14, 2023 +An icon of a clock Publish Date + March 14, 2023 +An icon of a human figure Authors + [65]Justin Searls +An icon of a paper organzier Categories + [66]Industry + [67]Career - An icon of a human figure Authors - [64]Justin Searls +[68] Never Staff to the Peak - An icon of a paper organzier Categories - [65]Industry - [66]Career +For a decade, engineering leaders were taught to solve every problem with more +full-time hires. There was always a better solution. Are you ready for it? -[67]Never Staff to the Peak +An icon of a clock Publish Date + April 3, 2023 +An icon of a human figure Authors + [69]Justin Searls +An icon of a paper organzier Categories + [70]Industry + [71]Leadership - For a decade, engineering leaders were taught to solve every problem - with more full-time hires. There was always a better solution. Are you - ready for it? +[72] How my experience as an engineer made me a better recruiter - An icon of a clock Publish Date - April 3, 2023 +How similar are engineers and recruiters? Turns out a lot. A developer turned +recruiter adapted from writing code to recruit those who write code. - An icon of a human figure Authors - [68]Justin Searls - - An icon of a paper organzier Categories - [69]Industry - [70]Leadership - -[71]How my experience as an engineer made me a better recruiter - - How similar are engineers and recruiters? Turns out a lot. A developer - turned recruiter adapted from writing code to recruit those who write - code. - - An icon of a clock Publish Date - March 20, 2023 - - An icon of a human figure Authors - [72]Colleen Leonard - - An icon of a paper organzier Categories - [73]Recruitment - [74]Community +An icon of a clock Publish Date + March 20, 2023 +An icon of a human figure Authors + [73]Colleen Leonard +An icon of a paper organzier Categories + [74]Recruitment + [75]Community Looking for developers? Work with people who care about what you care about. We level up teams striving to ship great code. - [75]Let's talk +[76] Let's talk +[77]Home [78]Agency [79]Services [80]Careers [81]Blog [82]Contact +[83] Mastodon [84] GitHub [85] LinkedIn [86] Twitter - [76]Home [77]Agency [78]Services [79]Careers [80]Blog [81]Contact +[87] 614.349.4279 +[88] hello@testdouble.com +[89]Privacy Policy +Founded in Columbus, OH + +[90] Test Double - [82]Mastodon [83]GitHub [84]LinkedIn [85]Twitter - [86]614.349.4279 - [87]hello@testdouble.com - [88]Privacy Policy - Founded in Columbus, OH +References: -[89]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://sorbet.org/ - 12. https://github.com/testdouble/mocktail - 13. https://github.com/testdouble/mocktail/pull/22 - 14. https://github.com/paracycle - 15. https://github.com/kddnewton - 16. https://github.com/jez - 17. mailto:justin@testdouble.com - 18. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#what-makes-me-special - 19. https://www.crowe.com/ - 20. https://www.vbulletin.com/ - 21. https://en.wikipedia.org/wiki/Mad_Libs - 22. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#an-aberrant-generation-of-programmers - 23. https://en.wikipedia.org/wiki/The_Big_Bang_Theory - 24. https://en.wikipedia.org/wiki/Silicon_Valley_(TV_series) - 25. https://www.npr.org/transcripts/356944145 - 26. https://nces.ed.gov/programs/digest/d12/tables/dt12_349.asp - 27. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#inter-generational-conflict-is-brewing - 28. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#passion - 29. https://starbreaker.org/blog/programmer-passion-considered-harmful/index.html - 30. https://www.hotjar.com/blog/the-passion-fallacy/ - 31. https://web.archive.org/web/20160304021738/http://www.gamasutra.com/view/feature/6523/the_designers_notebook_passion_.php?print=1 - 32. https://avdi.codes/the-moderately-enthusiastic-programmer/ - 33. https://philippe.bourgau.net/is-there-any-room-for-the-not-passionate-developer/ - 34. https://exceptionnotfound.net/passion-not-required-its-ok-to-only-program-for-a-paycheck/ - 35. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#craftsmanship - 36. https://scna.softwarecraftsmanship.org/ - 37. http://manifesto.softwarecraftsmanship.org/ - 38. https://en.wikipedia.org/wiki/Extreme_programming - 39. https://engineerscanada.ca/become-an-engineer/overview-of-licensing-process - 40. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#10x-developers - 41. https://jasoncrawford.org/10x-engineers - 42. https://web.archive.org/web/20131205042721/https://medium.com/about-work/6aedba30ecfe - 43. https://networkingnerd.net/2019/07/18/i-was-a-10x-engineer-and-im-sorry/ - 44. https://www.swarmia.com/blog/busting-the-10x-software-engineer-myth/ - 45. https://erikbern.com/2016/01/08/i-believe-in-the-10x-engineer-but - 46. https://a16z.com/2014/07/30/the-happy-demise-of-the-10x-engineer/ - 47. https://blog.kenforthewin.com/state-of-the-10x-programmer-in-2018/ - 48. https://web.archive.org/web/20230326131816/https://payne.org/blog/the-myth-of-the-myth-of-the-10x-programmer/ - 49. https://avichal.com/2011/12/16/focus-on-building-10x-teams-not-on-hiring-10x-developers/ - 50. https://dl.acm.org/doi/10.1145/362851.362858 - 51. https://en.wikipedia.org/wiki/The_Mythical_Man-Month - 52. https://www.inc.com/jeff-haden/why-google-quietly-uses-power-law-rule-to-pay-its-superstar-employees-unfairly.html - 53. https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#what-do-we-do-with-this - 54. https://forum.neat.town/t/the-looming-demise-of-the-10x-developer/91 - 55. https://testdouble.com/neat - 56. https://testdouble.com/newsletter - 57. https://blog.testdouble.com/authors/justin-searls/ - 58. https://twitter.com/searls - 59. https://mastodon.social/@searls - 60. https://github.com/searls - 61. https://linkedin.com/in/searls - 62. https://justin.searls.co/ - 63. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/ - 64. https://blog.testdouble.com/authors/justin-searls/ - 65. https://blog.testdouble.com/categories/industry - 66. https://blog.testdouble.com/categories/career - 67. https://blog.testdouble.com/posts/2023-04-03-never-staff-to-the-peak/ - 68. https://blog.testdouble.com/authors/justin-searls/ - 69. https://blog.testdouble.com/categories/industry - 70. https://blog.testdouble.com/categories/leadership - 71. https://blog.testdouble.com/posts/2023-03-20-how-my-experience-as-an-engineer-made-me-a-better-recruiter/ - 72. https://blog.testdouble.com/authors/colleen-leonard/ - 73. https://blog.testdouble.com/categories/recruitment - 74. https://blog.testdouble.com/categories/community - 75. https://link.testdouble.com/blog-cta-sales - 76. https://testdouble.com/ - 77. https://testdouble.com/agency - 78. https://testdouble.com/services - 79. https://testdouble.com/careers - 80. https://blog.testdouble.com/ - 81. https://testdouble.com/contact - 82. https://mastodon.social/@testdouble - 83. https://github.com/testdouble - 84. https://www.linkedin.com/company/testdouble - 85. https://twitter.com/testdouble - 86. tel:+16143494279 - 87. mailto:hello@testdouble.com - 88. https://testdouble.com/privacy-policy - 89. https://testdouble.com/ +[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://sorbet.org/ +[13] https://github.com/testdouble/mocktail +[14] https://github.com/testdouble/mocktail/pull/22 +[15] https://github.com/paracycle +[16] https://github.com/kddnewton +[17] https://github.com/jez +[18] mailto:justin@testdouble.com +[19] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#what-makes-me-special +[20] https://www.crowe.com/ +[21] https://www.vbulletin.com/ +[22] https://en.wikipedia.org/wiki/Mad_Libs +[23] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#an-aberrant-generation-of-programmers +[24] https://en.wikipedia.org/wiki/The_Big_Bang_Theory +[25] https://en.wikipedia.org/wiki/Silicon_Valley_(TV_series) +[26] https://www.npr.org/transcripts/356944145 +[27] https://nces.ed.gov/programs/digest/d12/tables/dt12_349.asp +[28] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#inter-generational-conflict-is-brewing +[29] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#passion +[30] https://starbreaker.org/blog/programmer-passion-considered-harmful/index.html +[31] https://www.hotjar.com/blog/the-passion-fallacy/ +[32] https://web.archive.org/web/20160304021738/http://www.gamasutra.com/view/feature/6523/the_designers_notebook_passion_.php?print=1 +[33] https://avdi.codes/the-moderately-enthusiastic-programmer/ +[34] https://philippe.bourgau.net/is-there-any-room-for-the-not-passionate-developer/ +[35] https://exceptionnotfound.net/passion-not-required-its-ok-to-only-program-for-a-paycheck/ +[36] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#craftsmanship +[37] https://scna.softwarecraftsmanship.org/ +[38] http://manifesto.softwarecraftsmanship.org/ +[39] https://en.wikipedia.org/wiki/Extreme_programming +[40] https://engineerscanada.ca/become-an-engineer/overview-of-licensing-process +[41] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#10x-developers +[42] https://jasoncrawford.org/10x-engineers +[43] https://web.archive.org/web/20131205042721/https://medium.com/about-work/6aedba30ecfe +[44] https://networkingnerd.net/2019/07/18/i-was-a-10x-engineer-and-im-sorry/ +[45] https://www.swarmia.com/blog/busting-the-10x-software-engineer-myth/ +[46] https://erikbern.com/2016/01/08/i-believe-in-the-10x-engineer-but +[47] https://a16z.com/2014/07/30/the-happy-demise-of-the-10x-engineer/ +[48] https://blog.kenforthewin.com/state-of-the-10x-programmer-in-2018/ +[49] https://web.archive.org/web/20230326131816/https://payne.org/blog/the-myth-of-the-myth-of-the-10x-programmer/ +[50] https://avichal.com/2011/12/16/focus-on-building-10x-teams-not-on-hiring-10x-developers/ +[51] https://dl.acm.org/doi/10.1145/362851.362858 +[52] https://en.wikipedia.org/wiki/The_Mythical_Man-Month +[53] https://www.inc.com/jeff-haden/why-google-quietly-uses-power-law-rule-to-pay-its-superstar-employees-unfairly.html +[54] https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer/#what-do-we-do-with-this +[55] https://forum.neat.town/t/the-looming-demise-of-the-10x-developer/91 +[56] https://testdouble.com/neat +[57] https://testdouble.com/newsletter +[58] https://blog.testdouble.com/authors/justin-searls/ +[59] https://twitter.com/searls +[60] https://mastodon.social/@searls +[61] https://github.com/searls +[62] https://linkedin.com/in/searls +[63] https://justin.searls.co/ +[64] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/ +[65] https://blog.testdouble.com/authors/justin-searls/ +[66] https://blog.testdouble.com/categories/industry +[67] https://blog.testdouble.com/categories/career +[68] https://blog.testdouble.com/posts/2023-04-03-never-staff-to-the-peak/ +[69] https://blog.testdouble.com/authors/justin-searls/ +[70] https://blog.testdouble.com/categories/industry +[71] https://blog.testdouble.com/categories/leadership +[72] https://blog.testdouble.com/posts/2023-03-20-how-my-experience-as-an-engineer-made-me-a-better-recruiter/ +[73] https://blog.testdouble.com/authors/colleen-leonard/ +[74] https://blog.testdouble.com/categories/recruitment +[75] https://blog.testdouble.com/categories/community +[76] https://link.testdouble.com/blog-cta-sales +[77] https://testdouble.com/ +[78] https://testdouble.com/agency +[79] https://testdouble.com/services +[80] https://testdouble.com/careers +[81] https://blog.testdouble.com/ +[82] https://testdouble.com/contact +[83] https://mastodon.social/@testdouble +[84] https://github.com/testdouble +[85] https://www.linkedin.com/company/testdouble +[86] https://twitter.com/testdouble +[87] tel:+16143494279 +[88] mailto:hello@testdouble.com +[89] https://testdouble.com/privacy-policy +[90] https://testdouble.com/ diff --git a/static/archive/brainbaking-com-wbhgjj.txt b/static/archive/brainbaking-com-wbhgjj.txt index ed7d9a9..5b2031f 100644 --- a/static/archive/brainbaking-com-wbhgjj.txt +++ b/static/archive/brainbaking-com-wbhgjj.txt @@ -1,217 +1,208 @@ - GoatCounter stats +[test-img] +[1]skip to main content +[2]Brain Baking navigation toggle - [1]skip to main content + • [4] Brain Baking + • [5] Archives + • [6] Subscribe - [2]Brain Baking (BUTTON) navigation toggle - * [3] Brain Baking - * [4] Archives - * [5] Subscribe + • [7] Works + • [8] About + • [9] Links - * [6] Works - * [7] About - * [8] Links +[10] - Favorites of December 2023 +Favorites of December 2023 - [9]1 January 2024 +[11] 1 January 2024 - Happy New Year! Hopefully 2024 will bring the needed peace and solace - to everyone. 2023 was a very difficult year for us, with lots of what - you might call “low lows” and a few “high highs”. We usually make fun - of that saying, but this seems like the first time it’s appropriate to - use it. +Happy New Year! Hopefully 2024 will bring the needed peace and solace to +everyone. 2023 was a very difficult year for us, with lots of what you might +call “low lows” and a few “high highs”. We usually make fun of that saying, but +this seems like the first time it’s appropriate to use it. - As far as blogging goes, 2023 was a great year. See the Brain Baking - [10]blog post archive for 2023: with 90 posts last year, that’s on - average 7.5 a month or 1.875 a week. The best part about 2023 in - blogging was the feedback I got, and the new friends and e-mail pen - pals I made. As frequently mentioned before, [11]blogging keeps on - giving. If there’s one thing I never ever intend to give up, it’s - blogging. +As far as blogging goes, 2023 was a great year. See the Brain Baking [12]blog +post archive for 2023: with 90 posts last year, that’s on average 7.5 a month +or 1.875 a week. The best part about 2023 in blogging was the feedback I got, +and the new friends and e-mail pen pals I made. As frequently mentioned before, +[13]blogging keeps on giving. If there’s one thing I never ever intend to give +up, it’s blogging. - The following posts turned out to be the most popular of 2023: - 1. [12]FPGAs And The Renaissance of Retro Hardware - 2. [13]Overlooked Reasons To Still Buy Physical Media - 3. [14]Goodbye, ProtonMail - 4. [15]Phomemo Thermal Printing On MacOS - 5. [16]DOOM Turned Thirty +The following posts turned out to be the most popular of 2023: - As for Jefklak’s Codex, the most popular article was the one on - [17]Freaky Trip, a bizarre (and very buggy) single-screen - adventure/puzzle game. That one got a few hits simply because I - couldn’t find any reviews online myself! As far as visitor counts go, - the Codex gets almost none, but I still have a lot of fun filling it. - It’s my own thing, and I’ve pondered on that subject recently in [18]On - Writing For Yourself In Public. + 1. [14]FPGAs And The Renaissance of Retro Hardware + 2. [15]Overlooked Reasons To Still Buy Physical Media + 3. [16]Goodbye, ProtonMail + 4. [17]Phomemo Thermal Printing On MacOS + 5. [18]DOOM Turned Thirty - Previous month: [19]October 2023. +As for Jefklak’s Codex, the most popular article was the one on [19]Freaky Trip +, a bizarre (and very buggy) single-screen adventure/puzzle game. That one got +a few hits simply because I couldn’t find any reviews online myself! As far as +visitor counts go, the Codex gets almost none, but I still have a lot of fun +filling it. It’s my own thing, and I’ve pondered on that subject recently in +[20]On Writing For Yourself In Public. + +Previous month: [21]October 2023. Books I’ve read - Not much this month. Read my [20]2023 in books overview post to find - out about the 22 books I managed to finish last year. +Not much this month. Read my [22]2023 in books overview post to find out about +the 22 books I managed to finish last year. - The Malloreon chronicles by [21]David Eddings continues to be my go-to - bed-time material. Books 1 and 2 are done and although the tension - doesn’t exactly build up, I don’t mind to keep on reading as it’s a - light read and entertaining enough. +The Malloreon chronicles by [23]David Eddings continues to be my go-to bed-time +material. Books 1 and 2 are done and although the tension doesn’t exactly build +up, I don’t mind to keep on reading as it’s a light read and entertaining +enough. Games I’ve played - After finishing Super Mario Bros. Wonder, I continued with the 2D Mario - strike with the Mario Land Game Boy series that evolved into Wario Land - and Wario Land II. The best is yet to come, though, as Wario Land 3 is - on my [22]25 Best Games of All Time list! I know them all by heart but - still breeze through these platformers once every few years. +After finishing Super Mario Bros. Wonder, I continued with the 2D Mario strike +with the Mario Land Game Boy series that evolved into Wario Land and Wario Land +II. The best is yet to come, though, as Wario Land 3 is on my [24]25 Best Games +of All Time list! I know them all by heart but still breeze through these +platformers once every few years. - My wife discovered a cheap Switch eShop code for Mario + Rabbids: - Kingdom Battle and since I love tactical turn-based games, I eagerly - dove in. It’s okay so far: the core gameplay is very solid, but - everything slathered on top is not my cup of tea. I’m nearing the end - and will have a review up shortly. Meanwhile, Kristien insists on - playing [23]Railbound, a cosy railway puzzle game with sometimes - devilishly difficult levels! Most of the time, I just don’t “see it”, - but we’re having fun together nonetheless. +My wife discovered a cheap Switch eShop code for Mario + Rabbids: Kingdom +Battle and since I love tactical turn-based games, I eagerly dove in. It’s okay +so far: the core gameplay is very solid, but everything slathered on top is not +my cup of tea. I’m nearing the end and will have a review up shortly. +Meanwhile, Kristien insists on playing [25]Railbound, a cosy railway puzzle +game with sometimes devilishly difficult levels! Most of the time, I just don’t +“see it”, but we’re having fun together nonetheless. Selected (blog) posts - * Gibru writes several interesting articles on AI and LLM generation, - including [24]Contextualizing the Artistic Process. - * Jonas Downey is convinced that having [25]side projects is - essential for creatives, and I agree. This could grow into a - powerful manifesto. - * Cory Zue provides an overview on his side projects and why - [26]building publicly in private works for him. - * Keith McNulty explains why [27]the MBTI tests are corporate - astrology (Medum link). - * Michael Klamerus explains his process on [28]finding small indie - games. - * This sobering article at Eurogamer reminds us that in the video - game industry, 2023 was also the year of low lows and high highs: - [29]You Can’t Talk About Games Without Talking About The Layoffs. - * Glyph explains how to set up the best possible [30]Phython - development environment for MacOS. Don’t use brew install like I - did. - * Speaking of Python, [31]why is Python so slow? Jake VanderPlas - deciphers the Python internals to figure out why. - * Vlad-Stefan Harbuz’s blog is great: it’s a combination between - computing and philosophical work. Here’s his [32]overview on - resources on the philosophy of work I still have to dig into. - * Here’s an interesting piece on [33]Mickey Mouse and the Public - Domain. As of today, one of the earliest versions of Mickey hits - public domain in USA. - * [34]You Don’t Need Statistics On Your Blog says William Woodruff. - Perhaps I should take on the challenge and ditch GoatCounter in - favor of a few grep scripts in access logs, if that? + • Gibru writes several interesting articles on AI and LLM generation, + including [26]Contextualizing the Artistic Process. + • Jonas Downey is convinced that having [27]side projects is essential for + creatives, and I agree. This could grow into a powerful manifesto. + • Cory Zue provides an overview on his side projects and why [28]building + publicly in private works for him. + • Keith McNulty explains why [29]the MBTI tests are corporate astrology + (Medum link). + • Michael Klamerus explains his process on [30]finding small indie games. + • This sobering article at Eurogamer reminds us that in the video game + industry, 2023 was also the year of low lows and high highs: [31]You Can’t + Talk About Games Without Talking About The Layoffs. + • Glyph explains how to set up the best possible [32]Phython development + environment for MacOS. Don’t use brew install like I did. + • Speaking of Python, [33]why is Python so slow? Jake VanderPlas deciphers + the Python internals to figure out why. + • Vlad-Stefan Harbuz’s blog is great: it’s a combination between computing + and philosophical work. Here’s his [34]overview on resources on the + philosophy of work I still have to dig into. + • Here’s an interesting piece on [35]Mickey Mouse and the Public Domain. As + of today, one of the earliest versions of Mickey hits public domain in USA. + • [36]You Don’t Need Statistics On Your Blog says William Woodruff. Perhaps I + should take on the challenge and ditch GoatCounter in favor of a few grep + scripts in access logs, if that? Other random links - * [35]Déjà Dup Backups is a Gnome-powered UI-friendly backup tool for - Unix. - * Did you know you can [36]Scheme in Scheme on WASM in the browser? - wait what now? The Spritely Institute also has cool info on Lisp - hackatons if that’s your jam. - * If you want to follow physical video game releases, look no further - than [37]https://www.physicalreleases.com/ - * The [38]Into The Aether Podcast released a six-hour long episode on - the 2023 Game of the Year. It’s great, but I have been slogging - through it on and off all week and I’m still just over 03:21:00 - hours/minutes in! Who decided that three-plus hours of jabbering - about video games is a good thing? Because it totally is! + • [37]Déjà Dup Backups is a Gnome-powered UI-friendly backup tool for Unix. + • Did you know you can [38]Scheme in Scheme on WASM in the browser? wait what + now? The Spritely Institute also has cool info on Lisp hackatons if that’s + your jam. + • If you want to follow physical video game releases, look no further than + [39]https://www.physicalreleases.com/ + • The [40]Into The Aether Podcast released a six-hour long episode on the + 2023 Game of the Year. It’s great, but I have been slogging through it on + and off all week and I’m still just over 03:21:00 hours/minutes in! Who + decided that three-plus hours of jabbering about video games is a good + thing? Because it totally is! - I hope to keep up the blogging rhythm in 2024. That’s everything I wish - for in 2024 besides the obvious ones. +I hope to keep up the blogging rhythm in 2024. That’s everything I wish for in +2024 besides the obvious ones. - [39]metapost +[41]metapost -You Might Also Like... +[42] You Might Also Like... - * [40]2023 In Books 28 Dec 2023 - * [41]DOOM Turned Thirty 11 Dec 2023 - * [42]FPGAs And The Renaissance Of Retro Hardware 27 Nov 2023 - * [43]On Writing For Yourself In Public 06 Nov 2023 - * [44]Favorites of October 2023 02 Nov 2023 - * [45]Top 25 Best Games Of All Time (GOAT) 08 Oct 2023 - * [46]Overlooked Reasons To Still Buy Physical Media 25 Sep 2023 + • [43]2023 In Books 28 Dec 2023 + • [44]DOOM Turned Thirty 11 Dec 2023 + • [45]FPGAs And The Renaissance Of Retro Hardware 27 Nov 2023 + • [46]On Writing For Yourself In Public 06 Nov 2023 + • [47]Favorites of October 2023 02 Nov 2023 + • [48]Top 25 Best Games Of All Time (GOAT) 08 Oct 2023 + • [49]Overlooked Reasons To Still Buy Physical Media 25 Sep 2023 -Bio and Support +[50] Bio and Support - [47]A photo of Me! +[51] A photo of Me! - I'm [48]Wouter Groeneveld, a Brain Baker, and I love the smell of - freshly baked thoughts (and bread) in the morning. I sometimes convince - others to bake their brain (and bread) too. +I'm [52]Wouter Groeneveld, a Brain Baker, and I love the smell of freshly baked +thoughts (and bread) in the morning. I sometimes convince others to bake their +brain (and bread) too. - If you found this article amusing and/or helpful, you can support me - via [49]PayPal or [50]Ko-Fi. I also like to hear your feedback via - [51]Mastodon or email. Thanks! - JavaScript is disabled. I use it to obfuscate my e-mail, keeping - spambots at bay. - Reach me using: [firstname] at [this domain]. +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! - ↑ [52]Top - [53]Brain Baking | [54]Archives | [55]© CC BY 4.0 License. +JavaScript is disabled. I use it to obfuscate my e-mail, keeping spambots at +bay. +Reach me using: [firstname] at [this domain]. -References +↑ [56]Top [57]Brain Baking | [58]Archives | [59]© CC BY 4.0 License. - 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 - 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 +References: + +[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 diff --git a/static/archive/calnewport-com-jtszvi.txt b/static/archive/calnewport-com-jtszvi.txt index cce1291..16d163c 100644 --- a/static/archive/calnewport-com-jtszvi.txt +++ b/static/archive/calnewport-com-jtszvi.txt @@ -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 +September 4, 2023 +[mythic-640px] - In the summer of 2022, an engineer named Keegan McNamara, who was at - the time working for a fundraising technology startup, found his way to - the [19]Arms and Armor exhibit at the Met. He was struck by the - unapologetic mixture of extreme beauty and focused function captured in - the antique firearms on display. As reported in [20]a recent profile of - McNamara published in The Verge, this encounter with the past sparked a - realization about the present: +In the summer of 2022, an engineer named Keegan McNamara, who was at the time +working for a fundraising technology startup, found his way to the [14]Arms and +Armor exhibit at the Met. He was struck by the unapologetic mixture of extreme +beauty and focused function captured in the antique firearms on display. As +reported in [15]a recent profile of McNamara published in The Verge, this +encounter with the past sparked a realization about the present: - “That combination of craftsmanship and utility, objects that are - both thoroughly practical and needlessly outrageously beautiful, - doesn’t really exist anymore. ‘And it especially doesn’t exist for - computers.'” + “That combination of craftsmanship and utility, objects that are both + thoroughly practical and needlessly outrageously beautiful, doesn’t really + exist anymore. ‘And it especially doesn’t exist for computers.'” - Aesthetically, contemporary digitals devices have become industrial and - impersonal: grey and black rectangles carved into generically-modern - clean lines . Functionally, they offer the hapless user a cluttered - explosion of potential activity, windows piling on top of windows, - command bars thick with applications. Standing in the Arms and Armor - exhibit McNamara began to wonder if there was a way to rethink the PC; - to save it from a predictable maximalism. +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. - The result was [21]The Mythic I, a custom computer that McNamara - handcrafted over the year or so that followed that momentous afternoon - at the Met. The machine is housed in a swooping hardwood frame carved - using manual tools. An eight-inch screen is mounted above a 1980’s - IBM-style keyboard with big clacking keys that McNamara carefully - lubricated to achieve exactly the right sound on each strike: “if you - have dry rubbing of plastic, it doesn’t sound thock-y. It just sounds - cheap.” Below the keyboard is an Italian leather hand rest. To turn it - on you insert and turn a key and then flip a toggle switch. +The result was [16]The Mythic I, a custom computer that McNamara handcrafted +over the year or so that followed that momentous afternoon at the Met. The +machine is housed in a swooping hardwood frame carved using manual tools. An +eight-inch screen is mounted above a 1980’s IBM-style keyboard with big +clacking keys that McNamara carefully lubricated to achieve exactly the right +sound on each strike: “if you have dry rubbing of plastic, it doesn’t sound +thock-y. It just sounds cheap.” Below the keyboard is an Italian leather hand +rest. To turn it on you insert and turn a key and then flip a toggle switch. - Equally notable is what happens once the machine is activated. McNamara - designed the Mythic for three specific purposes: writing a novel, - writing occasional computer code, and writing his daily journal. - Accordingly, it runs a highly-modular version of Linux called NixOS - that he’s customized to only offer emacs, a text-based editor popular - among hacker types, that’s launched from a basic green command line. - You can’t go online, or create a PowerPoint presentation, or edit a - video. It’s a writing a machine, and like the antique arms that - inspired it, the Mythic implements this functionality with a focused, - beautiful utilitarianism. +Equally notable is what happens once the machine is activated. McNamara +designed the Mythic for three specific purposes: writing a novel, writing +occasional computer code, and writing his daily journal. Accordingly, it runs a +highly-modular version of Linux called NixOS that he’s customized to only offer +emacs, a text-based editor popular among hacker types, that’s launched from a +basic green command line. You can’t go online, or create a PowerPoint +presentation, or edit a video. It’s a writing a machine, and like the antique +arms that inspired it, the Mythic implements this functionality with a focused, +beautiful utilitarianism. - In his critical classic, [22]Amusing Ourselves to Death, Neil Postman - argued that the form taken by the technologies we use impacts the - fundamental nature of our cognition. When we switched media consumption - from long newspaper articles to television soundbites, for example, our - understanding of news lost its heft and became more superficial and - emotionally-charged. +In his critical classic, [17]Amusing Ourselves to Death, Neil Postman argued +that the form taken by the technologies we use impacts the fundamental nature +of our cognition. When we switched media consumption from long newspaper +articles to television soundbites, for example, our understanding of news lost +its heft and became more superficial and emotionally-charged. - When pondering Keegan McNamara and the Mythic, I can’t help but apply - Postman’s framework to the machines that organize our professional - activities. The modern computer, with its generic styling and - overloaded activity, creates a cognitive environment defined by urgent, - bland, Sisyphean widget cranking — work as endless Slack and email and - Zoom and “jumping on” calls, in which there is always too much to do, - but no real sense of much of importance actually being accomplished. +When pondering Keegan McNamara and the Mythic, I can’t help but apply Postman’s +framework to the machines that organize our professional activities. The modern +computer, with its generic styling and overloaded activity, creates a cognitive +environment defined by urgent, bland, Sisyphean widget cranking — work as +endless Slack and email and Zoom and “jumping on” calls, in which there is +always too much to do, but no real sense of much of importance actually being +accomplished. - In Keegan’s construction we find an alternative understanding of work, - built now on beauty, craftsmanship, and focus. Replacing everyone’s - MacBook with custom-carved hardwood, of course, is not enough on its - own to transform how we think about out jobs, [23]as these issues have - deeper roots. But the Mythic is a useful reminder that the rhythms of - our professional lives are not pre-ordained. We craft the world in - which we work, even if we don’t realize it. +In Keegan’s construction we find an alternative understanding of work, built +now on beauty, craftsmanship, and focus. Replacing everyone’s MacBook with +custom-carved hardwood, of course, is not enough on its own to transform how we +think about out jobs, [18]as these issues have deeper roots. But the Mythic is +a useful reminder that the rhythms of our professional lives are not +pre-ordained. We craft the world in which we work, even if we don’t realize it. - ##### +##### - In other news: My longtime friend Brad Stulberg has a great new book - out this week. It’s called, [24]Master of Change: How to Excel When - Everything is Changing — Including You. In my cover blurb, I noted that - this “immensely wise and timely book provides a roadmap for a - tumultuous world.” I really mean it! The idea of preparing yourself to - thrive, and not crumble, when faced with inevitable change is - self-evidently important, and Brad does a great job of delivering the - goods on this timely theme. +In other news: My longtime friend Brad Stulberg has a great new book out this +week. It’s called, [19]Master of Change: How to Excel When Everything is +Changing — Including You. In my cover blurb, I noted that this “immensely wise +and timely book provides a roadmap for a tumultuous world.” I really mean it! +The idea of preparing yourself to thrive, and not crumble, when faced with +inevitable change is self-evidently important, and Brad does a great job of +delivering the goods on this timely theme. - Pro-tip: if you do buy the book this week, [25]go to Brad’s website to - claim a bunch of cool pre-order bonuses that he’s offering through the - first full week of publication. +Pro-tip: if you do buy the book this week, [20]go to Brad’s website to claim a +bunch of cool pre-order bonuses that he’s offering through the first full week +of publication. - [26]We Don’t Need a New Twitter - [27]On Tire Pressure and Productivity +[21]We Don’t Need a New Twitter +[22]On Tire Pressure and Productivity 11 thoughts on “On Tools and the Aesthetics of Work” - 1. - Galia - [28]September 4, 2023 at 9:27 am - Too much information when few things matter: that reminds me of the - book Essentialism. Acting like those everyday stimuli don’t exist - is the first recipe for success. - [29]Reply - 2. - Alexander Lewis - [30]September 4, 2023 at 11:57 am - I love the idea here. People still use old typewriters as art - pieces and coffee table decor in their homes. It’s hard to imagine - something similar occuring with modern computers. Laptops are used - until they’re dead, and then they’re recycled or thrown into the - junk drawer. - I think this craftsman/engineer might be onto something. - [31]Reply - 3. - Rafa Font - [32]September 4, 2023 at 3:22 pm - They have become Swiss knives, tools for all. Especially mobile - phones, they’re maps, navigators, radio, compass, torch, voice - recorder, word processor… all in one. - I gave my kids a voice recorder the other day. So that they can - have a one-action device to play with and understand what it is, on - its own. - [33]Reply - + + 1. [aac40] + Galia + [23] September 4, 2023 at 9:27 am + + Too much information when few things matter: that reminds me of the book + Essentialism. Acting like those everyday stimuli don’t exist is the first + recipe for success. + + [24]Reply + 2. [8b32b] + Alexander Lewis + [25] September 4, 2023 at 11:57 am + + I love the idea here. People still use old typewriters as art pieces and + coffee table decor in their homes. It’s hard to imagine something similar + occuring with modern computers. Laptops are used until they’re dead, and + then they’re recycled or thrown into the junk drawer. + + I think this craftsman/engineer might be onto something. + + [26]Reply + 3. [d7ec0] + Rafa Font + [27] September 4, 2023 at 3:22 pm + + They have become Swiss knives, tools for all. Especially mobile phones, + they’re maps, navigators, radio, compass, torch, voice recorder, word + processor… all in one. + + I gave my kids a voice recorder the other day. So that they can have a + one-action device to play with and understand what it is, on its own. + + [28]Reply + □ [92093] Tim Koerner - [34]September 11, 2023 at 3:27 pm - Love the voice recorder idea for kids, well done. - [35]Reply - 4. - Alex Francisco - [36]September 4, 2023 at 8:04 pm - What a find! - 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.” - Timeless, humbling AND empowering at once. - [37]Reply - + + [29] September 11, 2023 at 3:27 pm + + Love the voice recorder idea for kids, well done. + + [30]Reply + 4. [2e0eb] + Alex Francisco + [31] September 4, 2023 at 8:04 pm + + What a find! + + 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.” + + Timeless, humbling AND empowering at once. + + [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. - 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. - Garrett - [42]September 6, 2023 at 1:46 pm - In my opinion, another huge value of this is that it has a distinct - physical location. There’s a lot of power (at least for me) in - having a physical place to do things. When I’m in my woodshop for - instance, I am not engaging with distractions. I’m there to create - things and I’m limited (or, empowered) by the tools around me. - [43]Reply - 7. - 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. - 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. - Paper and pen are used for one thing. - Creation. - When writing with a pen on paper, there is no distraction, only - you, Your mind, and the physical act of putting words on paper. - Thats not to say that paper and pen can’t be works of art in - themselves. - They definitely can. - 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. - And going back to read it later is more enjoyable. - ‘ - [47]Reply - 9. - Kenwood - [48]September 22, 2023 at 11:32 am - Nice. Your essay emphasizes the profound influence of tool - aesthetics on our work and cognition. The Mythic I, handcrafted by - Keegan McNamara, epitomizes the fusion of craftsmanship and - practicality, offering a stark contrast to today’s industrial and - impersonal digital devices. McNamara’s computer is designed for - specific tasks like writing, coding, and journaling, redirecting - our focus from multitasking chaos to singular productivity. It - reminds us that we shape our work environment and challenges - conventional notions of productivity. I would like to share - [49]https://writinguniverse.com/essay-writing-service/ free tools - for writers. While we can’t all have custom-made computers, - McNamara’s creation encourages us to rethink the balance between - aesthetics and function in our daily tools. - [50]Reply + [33] November 11, 2023 at 6:47 pm -Leave a Comment [51]Cancel reply + 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. - Comment - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ + [34]Reply + 5. [8e65d] + rb + [35] September 4, 2023 at 9:47 pm - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - Name ______________________________ Email - ______________________________ ______________________________ + 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. - [ ] Save my name, email, and website in this browser for the next time - I comment. + [36]Reply + 6. [5d6ca] + Garrett + [37] September 6, 2023 at 1:46 pm - Post Comment + In my opinion, another huge value of this is that it has a distinct + physical location. There’s a lot of power (at least for me) in having a + physical place to do things. When I’m in my woodshop for instance, I am not + engaging with distractions. I’m there to create things and I’m limited (or, + empowered) by the tools around me. - Cal Newport headshot + [38]Reply + 7. [90c00] + Judy + [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 + [41] September 11, 2023 at 11:43 am + + This goes back to the idea of writing things in a book, on real paper. + + Paper and pen are used for one thing. + Creation. + When writing with a pen on paper, there is no distraction, only you, Your + mind, and the physical act of putting words on paper. + + Thats not to say that paper and pen can’t be works of art in themselves. + They definitely can. + 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. + And going back to read it later is more enjoyable. + ‘ + + [42]Reply + 9. [97f77] + Kenwood + [43] September 22, 2023 at 11:32 am + + Nice. Your essay emphasizes the profound influence of tool aesthetics on + our work and cognition. The Mythic I, handcrafted by Keegan McNamara, + epitomizes the fusion of craftsmanship and practicality, offering a stark + contrast to today’s industrial and impersonal digital devices. McNamara’s + computer is designed for specific tasks like writing, coding, and + journaling, redirecting our focus from multitasking chaos to singular + productivity. It reminds us that we shape our work environment and + challenges conventional notions of productivity. I would like to share [44] + https://writinguniverse.com/essay-writing-service/ free tools for writers. + While we can’t all have custom-made computers, McNamara’s creation + encourages us to rethink the balance between aesthetics and function in our + daily tools. + + [45]Reply + +Leave a Comment [46]Cancel reply + + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] +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 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +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] +Academic Communication +[60][email protected] - Media Inquires - [56][email protected] +Media Inquires +[61][email protected] - All Other Requests - [57]See Contact Page +All Other Requests +[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. +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/# diff --git a/static/archive/cerebralab-com-qy5zqs.txt b/static/archive/cerebralab-com-qy5zqs.txt index 37d1662..8d74db9 100644 --- a/static/archive/cerebralab-com-qy5zqs.txt +++ b/static/archive/cerebralab-com-qy5zqs.txt @@ -1,331 +1,342 @@ - [book_front.svg] [book_back.svg] - night mode - ____________________ (BUTTON) Subscribe +[book_front] [book_back] +night mode +[1][ ] Subscribe + +[3] RSS +Add this blog to your rss feed +[4] github logo +Pollute your mind with some of my other missguided creations on Github +[5] email icon +Contact me at: george@cerebralab.com +[6] twitter logo +Publicly berate me on Twitter - [1]RSS - Add this blog to your rss feed - [2]github logo - Pollute your mind with some of my other missguided creations on Github - [3]email icon - Contact me at: george@cerebralab.com - [4]twitter logo - Publicly berate me on Twitter +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 - 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 - [9]Audio version (read by a tts bot) + +[11]Audio version (read by a tts bot) Imaginary Problems Are the Root of Bad Software - https://upload.wikimedia.org/wikipedia/commons/c/c0/De_Rebus_Bellicis%2 - C_XVth_Century_Miniature.JPG There are many factors which can be a - catalyst for bad software: from the tools being used, to team - communication, to the personal stake developers have in its success, to - the testing methodology. +https://upload.wikimedia.org/wikipedia/commons/c/c0/ +De_Rebus_Bellicis%2C_XVth_Century_Miniature.JPG There are many factors which +can be a catalyst for bad software: from the tools being used, to team +communication, to the personal stake developers have in its success, to the +testing methodology. - I propose that there is one problem chief among them, an impetus for - bad software from which almost all others take root: imaginary - problems. +I propose that there is one problem chief among them, an impetus for bad +software from which almost all others take root: imaginary problems. - Most complicated or broken software is not designed to be overly - complex or dysfunctional. It’s just designed to do something other than - its intended purpose. +Most complicated or broken software is not designed to be overly complex or +dysfunctional. It’s just designed to do something other than its intended +purpose. - Let’s say you’re a podcast host who wants a custom website where you - can sell your promotional products, make advertising money without a - third party cutting in, and, most importantly, deliver podcasts, - videos, and blogs to your audience. +Let’s say you’re a podcast host who wants a custom website where you can sell +your promotional products, make advertising money without a third party cutting +in, and, most importantly, deliver podcasts, videos, and blogs to your +audience. - The requirements for your little web-app might look something like - this: - * Fast load time in North America, with real-time podcast streaming - and downloads - * Doesn’t crash or freeze in the first 15 minutes for 99.99 percent - of users, preferably never crashes or freezes - * Integrates well with Google Adwords and maybe some other - third-party ad providers as well, if there’s time - * Dynamically links to the latest products in my Zazzle shop and, if - possible, gives recommendations to users based on the content - they’ve consumed - * Integrates with Facebook live player. If it’s easy to create an - alternative solution for streaming that doesn’t require Facebook, - even better +The requirements for your little web-app might look something like this: - You give these specs to a team of contractors, and you chat about them - a bit. It seems that everyone is on the same page. Yet, when they - return with the Minimum Viable Product two months later, your face - turns red. You’ve just wasted $15,000 on a piece of garbage; you want - your money back. + • Fast load time in North America, with real-time podcast streaming and + downloads + • Doesn’t crash or freeze in the first 15 minutes for 99.99 percent of users, + preferably never crashes or freezes + • Integrates well with Google Adwords and maybe some other third-party ad + providers as well, if there’s time + • Dynamically links to the latest products in my Zazzle shop and, if + possible, gives recommendations to users based on the content they’ve + consumed + • Integrates with Facebook live player. If it’s easy to create an alternative + solution for streaming that doesn’t require Facebook, even better - The first time you open the app, the screen freezes. You ask how to - select what kind of ads should be allowed to run on the site and are - pointed to an ugly, hard-to-understand custom user interface (UI). Half - the links to your merchandise on Zazzle are broken or missing images, - and the Facebook livestream is laggy! +You give these specs to a team of contractors, and you chat about them a bit. +It seems that everyone is on the same page. Yet, when they return with the +Minimum Viable Product two months later, your face turns red. You’ve just +wasted $15,000 on a piece of garbage; you want your money back. - But the development team is confused at your anger — rightfully so, - from their point of view — because they’ve gone to hell and back for - you. +The first time you open the app, the screen freezes. You ask how to select what +kind of ads should be allowed to run on the site and are pointed to an ugly, +hard-to-understand custom user interface (UI). Half the links to your +merchandise on Zazzle are broken or missing images, and the Facebook livestream +is laggy! - They’ve put their heart and soul into creating this app, and it has - some amazing features: - * A state of the art recommendation system - * An algorithm generating the transcript of all your streams, in real - time - * Your front page loads in sub 200ms times all over the world - * A streaming protocol and client build almost from scratch, in case - you don’t want to rely on Facebook live - * A service that allows you to easily integrate over 20 ad exchanges +But the development team is confused at your anger — rightfully so, from their +point of view — because they’ve gone to hell and back for you. - The problem is that you thought you requested a core product with a - couple of extra features, if they were easy enough to implement. - Meanwhile, the dev team heard something else. They heard about some - exciting challenges they could tackle… and a slew of boring, basic - features they couldn’t be bothered to test properly or care about. +They’ve put their heart and soul into creating this app, and it has some +amazing features: - Even worse, you didn’t communicate directly with the devs — you - communicated through a game of Telephone. You spoke to a sales guy, who - held a meeting with some middle management chap, who wrote some - business specs and gave those to a PM, who wrote some technical specs - and gave those to a team lead or architect, who then, at last, began to - design the product with his team — each one of them putting a bit of - his own twist on it along the way. - __________________________________________________________________ + • A state of the art recommendation system + • An algorithm generating the transcript of all your streams, in real time + • Your front page loads in sub 200ms times all over the world + • A streaming protocol and client build almost from scratch, in case you + don’t want to rely on Facebook live + • A service that allows you to easily integrate over 20 ad exchanges - Imaginary problems are often more fun to solve than real ones. - Extremely intelligent people play competitive games, construct and - solve math problems, and write books that aim to answer abstract - questions about the human condition, all of them for free. A mediocre - programmer, however, will probably charge you a fair amount to build a - simple Android app. That’s not because mediocre programmers are harder - to find than geniuses, but because the former activities are all fun, - while the latter can be quite boring. +The problem is that you thought you requested a core product with a couple of +extra features, if they were easy enough to implement. Meanwhile, the dev team +heard something else. They heard about some exciting challenges they could +tackle… and a slew of boring, basic features they couldn’t be bothered to test +properly or care about. - Most programmers want to get paid and have fun at the same time. Of - course, the definition of “fun” is different for everyone, but for many - engineers, it boils down to tackling interesting and challenging - problems that are within the realm of solvability. +Even worse, you didn’t communicate directly with the devs — you communicated +through a game of Telephone. You spoke to a sales guy, who held a meeting with +some middle management chap, who wrote some business specs and gave those to a +PM, who wrote some technical specs and gave those to a team lead or architect, +who then, at last, began to design the product with his team — each one of them +putting a bit of his own twist on it along the way. - Give a somewhat intelligent person too many boring tasks that are - impossible to automate and you will eventually drive him mad. The human - brain however, after billions of years of evolution, is quite talented - at keeping its sanity. Much like victims of childhood hardship or abuse - can find escape in fantasy books, victims of enterprise programming or - freelance web development can find their escape in solving imaginary - problems. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - The amount of imaginary problems a software engineer can create for - themselves is a function of their imagination and of the difficulty of - the real problems they’re supposed to solve. +Imaginary problems are often more fun to solve than real ones. Extremely +intelligent people play competitive games, construct and solve math problems, +and write books that aim to answer abstract questions about the human +condition, all of them for free. A mediocre programmer, however, will probably +charge you a fair amount to build a simple Android app. That’s not because +mediocre programmers are harder to find than geniuses, but because the former +activities are all fun, while the latter can be quite boring. - It should be noted that this issue isn’t unique to developers. - Management, sales, HR, support, legal, and even accounting departments - have their own unique ways of creating imaginary problems. They try to - involve themselves too much in a decision, when their presence at a - meeting is just a formality or wasn’t requested at all. They - overemphasize a minute problem that is related to their role, or hire - teams much larger than necessary to illustrate their importance. +Most programmers want to get paid and have fun at the same time. Of course, the +definition of “fun” is different for everyone, but for many engineers, it boils +down to tackling interesting and challenging problems that are within the realm +of solvability. - When problems are dumb, intelligent individuals will find a way of - coping. - __________________________________________________________________ +Give a somewhat intelligent person too many boring tasks that are impossible to +automate and you will eventually drive him mad. The human brain however, after +billions of years of evolution, is quite talented at keeping its sanity. Much +like victims of childhood hardship or abuse can find escape in fantasy books, +victims of enterprise programming or freelance web development can find their +escape in solving imaginary problems. - But imaginary problems aren’t just the result of bored developers. - They’re also the result of long chains of communication. +[1] - When I first began taking on freelance clients, I couldn’t afford to be - particular. This means I’ve had email chains lasting for over a 100 - exchanges, discussing insignificant details about internal MVPs. I’ve - had people change every single requirement on a project within the span - of a week. I’ve had clients ask questions such as “Could this be - ICO-ed?” or “Can we add some A.I. in here?” +The amount of imaginary problems a software engineer can create for themselves +is a function of their imagination and of the difficulty of the real problems +they’re supposed to solve. - Granted, most clients are savvier than that, but, even still, they - often lack a bit of the knowledge necessary to articulate or construct - some of their requirements. That is fine, as part of my job as “the - computer guy” is to help people figure out what they do and don’t need - based on their use cases. But it can become much harder to determine - what’s needed when there are a few layers between you and the client. +It should be noted that this issue isn’t unique to developers. Management, +sales, HR, support, legal, and even accounting departments have their own +unique ways of creating imaginary problems. They try to involve themselves too +much in a decision, when their presence at a meeting is just a formality or +wasn’t requested at all. They overemphasize a minute problem that is related to +their role, or hire teams much larger than necessary to illustrate their +importance. - Requirements get changed because someone either misunderstood an - intention or because someone was trying to cope with that - aforementioned boredom +When problems are dumb, intelligent individuals will find a way of coping. - Most companies like having a sales guy who pitches potential customers, - negotiates prices, and outlines possible features. They also have a - [10]people person to discuss more in-depth requirements and details - with the customer, usually another sales guy, but with a slightly - different title. Then there’s the internal chain of command, various - levels of management, and possibly some hierarchy, within the technical - team. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 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.” +But imaginary problems aren’t just the result of bored developers. They’re also +the result of long chains of communication. - 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. +When I first began taking on freelance clients, I couldn’t afford to be +particular. This means I’ve had email chains lasting for over a 100 exchanges, +discussing insignificant details about internal MVPs. I’ve had people change +every single requirement on a project within the span of a week. I’ve had +clients ask questions such as “Could this be ICO-ed?” or “Can we add some A.I. +in here?” - Through all of this, the original requirements — the real problems that - have to be solved — get lost. They are replaced with imaginary problems - and with voids, and you’ve got plenty of people ready and willing to - fill those voids with their own imaginary problems, because the - problems they have to solve are boring, and filling the voids gives - them a way of coping. +Granted, most clients are savvier than that, but, even still, they often lack a +bit of the knowledge necessary to articulate or construct some of their +requirements. That is fine, as part of my job as “the computer guy” is to help +people figure out what they do and don’t need based on their use cases. But it +can become much harder to determine what’s needed when there are a few layers +between you and the client. + + Requirements get changed because someone either misunderstood an intention + or because someone was trying to cope with that aforementioned boredom + +Most companies like having a sales guy who pitches potential customers, +negotiates prices, and outlines possible features. They also have a [12]people +person to discuss more in-depth requirements and details with the customer, +usually another sales guy, but with a slightly different title. Then there’s +the internal chain of command, various levels of management, and possibly some +hierarchy, within the technical team. + +When a list of client requirements goes through so many people, even if those +people have the best of intentions, some things will inevitably get lost in +translation. Sometimes that change happens because the original requirement +made no sense, or sometimes requirements need to be redefined. The sales guy +might have told the client, “for only 39,999 extra we can do this on the +Blockchain.” But that leaves everyone who encounters the requirements down the +line wondering what the definition is of “doing it on the Blockchain.” + +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. + +Through all of this, the original requirements — the real problems that have to +be solved — get lost. They are replaced with imaginary problems and with voids, +and you’ve got plenty of people ready and willing to fill those voids with +their own imaginary problems, because the problems they have to solve are +boring, and filling the voids gives them a way of coping. Overcomplexity and natural selection - There can often be an even darker reason for the existence of imaginary - problems: problems can help a team or a company grow, and can even - become an integral part of its function. +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. - “People who are bred, selected, and compensated to find complicated - solutions do not have an incentive to implement simplified ones.” + “People who are bred, selected, and compensated to find complicated + solutions do not have an incentive to implement simplified ones.” - — Nassim Nicholas Taleb + — Nassim Nicholas Taleb - Have you ever heard about those three web engineers who figured out - that secure online banking is actually quite an easy problem to solve? - They developed some flawless banking software from scratch, using a - functional design methodology and memory safe languages, then started - migrating major banks to their amazing infrastructure. +Have you ever heard about those three web engineers who figured out that secure +online banking is actually quite an easy problem to solve? They developed some +flawless banking software from scratch, using a functional design methodology +and memory safe languages, then started migrating major banks to their amazing +infrastructure. - Probably you haven’t heard of them, because they don’t exist. There - are, however, plenty of teams of [11]thousands of developers, who are - unable to grasp simple concepts such “rollbacks,” perpetually creating - banking software. +Probably you haven’t heard of them, because they don’t exist. There are, +however, plenty of teams of [13]thousands of developers, who are unable to +grasp simple concepts such “rollbacks,” perpetually creating banking software. - The storage and transfer of numbers is not a particularly hard problem. - Indexing the whole content of the internet and providing relevant - results to natural language queries, in sub second times, is a hard - problem. [12]But just a few smart guys managed to solve that problem. +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. [14]But just +a few smart guys managed to solve that problem. - The persistent problem for online banking is that the banking ecosystem - has become really good at preserving its own money-grabbing hierarchy. - Its leaders are [13]corrupt leeches who prey on society — but the - leaders in an organization are just a symptom of its members. +The persistent problem for online banking is that the banking ecosystem has +become really good at preserving its own money-grabbing hierarchy. Its leaders +are [15]corrupt leeches who prey on society — but the leaders in an +organization are just a symptom of its members. - I wouldn’t suggest that most underling workers for banks are evil or - malicious in any way. Far from it. They are usually friendly lads, - working to provide food, shelter, and an education for their families. - But their chief incentive is not to fix the banking software, it is to - stay employed. Losing your job in today’s economy is no joking matter - for some; in the banking industry, a big mouth or too much initiative - is an easy way find yourself in front of a disciplinary committee. +I wouldn’t suggest that most underling workers for banks are evil or malicious +in any way. Far from it. They are usually friendly lads, working to provide +food, shelter, and an education for their families. But their chief incentive +is not to fix the banking software, it is to stay employed. Losing your job in +today’s economy is no joking matter for some; in the banking industry, a big +mouth or too much initiative is an easy way find yourself in front of a +disciplinary committee. - So banking systems remain the same — not because the systems are - efficient, but because of inertia. This inertia comes in the form of - working on imaginary problems in order to avoid fixing real - problems — real problems which, once pointed out, would threaten the - jobs of other people. To focus on these real problems could lead to - getting fired, or, in the case of some particularly nasty - “institutions” like Goldman Sachs, [14]getting a few life-ruining brown - envelopes sent to a few FBI officers and prompting a strange suicide. +So banking systems remain the same — not because the systems are efficient, but +because of inertia. This inertia comes in the form of working on imaginary +problems in order to avoid fixing real problems — real problems which, once +pointed out, would threaten the jobs of other people. To focus on these real +problems could lead to getting fired, or, in the case of some particularly +nasty “institutions” like Goldman Sachs, [16]getting a few life-ruining brown +envelopes sent to a few FBI officers and prompting a strange suicide. - “It is difficult to get a man to understand something, when his - salary depends upon his not understanding it!” + “It is difficult to get a man to understand something, when his salary + depends upon his not understanding it!” - — Upton Sinclair + — Upton Sinclair - The [15]C-suite ignores the fact that their upper management workers - spend 90 percent of their time on “client meetings” that involve - tropical islands and million-dollar budgets for “other expenses.” Upper - management, in return, turns a blind eye to corruption in C-suite. +The [17]C-suite ignores the fact that their upper management workers spend 90 +percent of their time on “client meetings” that involve tropical islands and +million-dollar budgets for “other expenses.” Upper management, in return, turns +a blind eye to corruption in C-suite. - Because middle management encourages them to live in their Wolf of Wall - Street fantasies, upper management ignores middle managers who buy - eccentric offices and hire themselves three secretaries and a dozen - interns. +Because middle management encourages them to live in their Wolf of Wall Street +fantasies, upper management ignores middle managers who buy eccentric offices +and hire themselves three secretaries and a dozen interns. - Because line management doesn’t complain about their dictatorial power - fantasies, middle management ignores the fact that line managers, - instead of cutting costs, spend their time working on PowerPoint - presentations about “Improving our Agile Methodology.” +Because line management doesn’t complain about their dictatorial power +fantasies, middle management ignores the fact that line managers, instead of +cutting costs, spend their time working on PowerPoint presentations about +“Improving our Agile Methodology.” - Because the team leaders don’t seem to notice the fact that their - superiors can’t even use Excel properly and only hit the office every - few weeks, line managers ignore the team leaders and architects talking - about “next generation interfacing between our systems using JRPC and - microserviceization using Hibernate and Spring” when they should be - getting those bloody Mysql queries to take less than a day. +Because the team leaders don’t seem to notice the fact that their superiors +can’t even use Excel properly and only hit the office every few weeks, line +managers ignore the team leaders and architects talking about “next generation +interfacing between our systems using JRPC and microserviceization using +Hibernate and Spring” when they should be getting those bloody Mysql queries to +take less than a day. - Because the developers don’t seem to notice that their leaders don’t - really write any code except DOT diagrams, team leaders don’t complain - about their developers, instead of looking at an EXPLAIN for the - aforementioned slow query, re-designing the UI for the tenth time that - year using a new JavaScript framework. +Because the developers don’t seem to notice that their leaders don’t really +write any code except DOT diagrams, team leaders don’t complain about their +developers, instead of looking at an EXPLAIN for the aforementioned slow query, +re-designing the UI for the tenth time that year using a new JavaScript +framework. - It’s a vicious cycle of solving imaginary problems, from the CEO who - doesn’t realize that stealing another 30 million won’t make his dad - love him to the user-experience intern who doesn’t realize that - redesigning the “submit” button using Angular-Material-Bootstrap - 19.13.5 won’t make the fact that they store passwords in plain text - (and use them as part of the auth cookie) go away. +It’s a vicious cycle of solving imaginary problems, from the CEO who doesn’t +realize that stealing another 30 million won’t make his dad love him to the +user-experience intern who doesn’t realize that redesigning the “submit” button +using Angular-Material-Bootstrap 19.13.5 won’t make the fact that they store +passwords in plain text (and use them as part of the auth cookie) go away. - But everyone needs to keep solving the imaginary problems, because if - they stop creating and solving these problems, if they start focusing - on the real problems, they might realize the whole system is broken. - They might realize Debra has been sitting in that corner, staring at - uptime graphs of the internal server farm for 10 years, despite the - fact that the company moved to AWS five years ago. They might realize - 99 percent of their job is to perpetuate the existence of someone - else’s job. And that’s a hard realization to digest—impossible for - most, I dare say. So, instead, most find a way of coping. - __________________________________________________________________ +But everyone needs to keep solving the imaginary problems, because if they stop +creating and solving these problems, if they start focusing on the real +problems, they might realize the whole system is broken. They might realize +Debra has been sitting in that corner, staring at uptime graphs of the internal +server farm for 10 years, despite the fact that the company moved to AWS five +years ago. They might realize 99 percent of their job is to perpetuate the +existence of someone else’s job. And that’s a hard realization to +digest—impossible for most, I dare say. So, instead, most find a way of coping. - If you enjoyed this article you may also like: - * [16]The Red Queen - * [17]Stop future proofing software +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Published on: 2019-04-29 - __________________________________________________________________ +If you enjoyed this article you may also like: - ____________________ (BUTTON) Subscribe + • [18]The Red Queen + • [19]Stop future proofing software - Reactions: +Published on: 2019-04-29 - angry - loony - pls - sexy - straigt-face - __________________________________________________________________ - [18]twitter logo - Share this article on twitter - [19]linkedin logo - Share this article on linkedin - [20]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 + +[20][ ] Subscribe + + + + +Reactions: + +angry +loony +pls +sexy +straigt-face +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[22] twitter logo +Share this article on twitter +[23] linkedin logo +Share this article on linkedin +[24] Fb logo +Share this article on facebook + + + + + + + + + + + + + + + + +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 diff --git a/static/archive/changelog-com-kqx1ni.txt b/static/archive/changelog-com-kqx1ni.txt index 0381081..d10003f 100644 --- a/static/archive/changelog-com-kqx1ni.txt +++ b/static/archive/changelog-com-kqx1ni.txt @@ -1,512 +1,495 @@ - #[1]News Feed (The Proverbial Fire Hose) [2]Master Feed (All Shows) - [3]Posts Feed [4]JSON News Feed +[1]Changelog - [5]Changelog + • [2]Podcasts + • [3]Beats + • [4]Posts + • [5]Community + • [6]Subscribe + • [7]Changelog++ - * [6]Podcasts - * [7]Beats - * [8]Posts - * [9]Community - * [10]Subscribe - * [11]Changelog++ + • [8]Live + • [9]Submit News - * [12]Live - * [13]Submit News + • [10]Sign In - * [14]Sign In +[11][ ] +[13]Changelog - ____________________ - (BUTTON) + • [14]Podcasts + • [15]Beats + • [16]Posts + • [17]Community + • [18]Subscribe + • [19]Changelog++ + • [20]Submit News - [15]Changelog - * [16]Podcasts - * [17]Beats - * [18]Posts - * [19]Community - * [20]Subscribe - * [21]Changelog++ - * [22]Submit News - - ____________________ - - [23]Jerod Santo [24]changelog.com/posts +[21][ ] +[22] Jerod Santo [23]changelog.com/posts There's still no silver bullet a friendly reminder that you haven't found the panacea - logged by [25]jerodsanto [26]2023-05-24T16:25:22Z [27]#practices +2 - * [28]#history - * [29]#react +logged by [24]jerodsanto [25]2023-05-24T16:25:22Z [26]#practices +2 - The late, great [30]Fred Brooks wrote many words about software - engineering. You may have heard of [31]Brooks’s Law or read his seminal - book, [32]The Mythical Man-Month. Even if you haven’t, you’ve probably - heard at least one colleague proclaim: + • [27]#history + • [28]#react - Nine women can’t make a baby in one month! +The late, great [29]Fred Brooks wrote many words about software engineering. +You may have heard of [30]Brooks’s Law or read his seminal book, [31]The +Mythical Man-Month. Even if you haven’t, you’ve probably heard at least one +colleague proclaim: - This is a powerful metaphor for two reasons. First: it’s so vivid that - it’s hard to forget (and easy to recall in a time of need). Second: it - makes obvious a not-so-obvious conclusion. Which is: + Nine women can’t make a baby in one month! - Adding manpower to a late software project makes it later. +This is a powerful metaphor for two reasons. First: it’s so vivid that it’s +hard to forget (and easy to recall in a time of need). Second: it makes obvious +a not-so-obvious conclusion. Which is: - That’s a hard pill to swallow, especially when your project is late. - But it’s a truth pill, which makes it worth choking down. Here’s - another truth pill that Brooks wrote in his paper [33]No Silver - Bullet–Essence and Accident in Software Engineering: + Adding manpower to a late software project makes it later. - 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. - __________________________________________________________________ +That’s a hard pill to swallow, especially when your project is late. But it’s a +truth pill, which makes it worth choking down. Here’s another truth pill that +Brooks wrote in his paper [32]No Silver Bullet–Essence and Accident in Software +Engineering: - For those who don’t understand the silver bullet reference… it’s - [34]pulled from folklore where a bullet cast from silver is the only - weapon that can kill a werewolf. Over time a silver bullet has come to - represent “a simple, seemingly magical, solution to a difficult - problem.” Brooks could have easily reached for [35]panacea instead, but - I think the shiny characteristic of silver makes it the perfect analog - to software solutions. - __________________________________________________________________ + 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. - I’ve found myself referencing this a [36]couple [37]times recently. - Both of those conversations were in the context of [38]React, but the - principle applies to every over-adopted technology. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - So, this post is a gentle reminder to my fellow software engineers: - * Does a new tool promise to solve all your problems? It won’t - * Do you think you’ve found the “one true tech”? You haven’t - * Have a shiny hammer that looks great for hitting screws? It isn’t +For those who don’t understand the silver bullet reference… it’s [33]pulled +from folklore where a bullet cast from silver is the only weapon that can kill +a werewolf. Over time a silver bullet has come to represent “a simple, +seemingly magical, solution to a difficult problem.” Brooks could have easily +reached for [34]panacea instead, but I think the shiny characteristic of silver +makes it the perfect analog to software solutions. - Please humor me while I [39]quote myself for a moment: (Hey, it’s - easier than writing) +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - IFRAME: [40]https://www.youtube.com/embed/btIc-_dGz9k +I’ve found myself referencing this a [35]couple [36]times recently. Both of +those conversations were in the context of [37]React, but the principle applies +to every over-adopted technology. - Subscribe to [41]our YouTube channel for more clips like this, live - show recordings, and more ✌️ +So, this post is a gentle reminder to my fellow software engineers: - We tend to be kind of lazy and just take the big hammer and hit all - the nails with it. Like, “Oh, I’ve found the panacea. This is gonna - solve all my problems”, because it does solve some of your problems - big-time. + • Does a new tool promise to solve all your problems? It won’t + • Do you think you’ve found the “one true tech”? You haven’t + • Have a shiny hammer that looks great for hitting screws? It isn’t - But it’s also is gonna create other problems, and it’s also not - gonna fit in every place that you can shove it. I mean, I know - there’s React-based command line builders… And it’s like, okay, if - you like components, cool. That makes sense. But why is React - building your command-line app? I just don’t understand. +Please humor me while I [38]quote myself for a moment: (Hey, it’s easier than +writing) - When I extemporaneously said “I just don’t understand”, I meant that - the choice confounds me. But I do understand why people might make it. +Subscribe to [39]our YouTube channel for more clips like this, live show +recordings, and more ✌️ - Saying “use the right tool for the job” is easy, but actually selecting - the right tool for the job is anything but. Good tools are hard to - find, hard to evaluate, hard to learn. We have constraints, we have - biases, we have shortcomings. - But that’s all part of the work. + We tend to be kind of lazy and just take the big hammer and hit all the + nails with it. Like, “Oh, I’ve found the panacea. This is gonna solve all + my problems”, because it does solve some of your problems big-time. - And if you “just use Go” or “just use React” or “just use Postgres” for - every problem that crosses your keyboard, you’re just not putting in - the work. + But it’s also is gonna create other problems, and it’s also not gonna fit + in every place that you can shove it. I mean, I know there’s React-based + command line builders… And it’s like, okay, if you like components, cool. + That makes sense. But why is React building your command-line app? I just + don’t understand. - (And I say this as a guy who uses Postgres for most things! 😆) - __________________________________________________________________ +When I extemporaneously said “I just don’t understand”, I meant that the choice +confounds me. But I do understand why people might make it. - If you enjoyed reading this, you’ll probably enjoy [42]Changelog News, - my free weekly podcast + newsletter covering developer news worth your - attention. I keep it brief (~8 min), entertaining & always on-point. - Not so sure? Check out a [43]recent issue! +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. - Software moves fast. We help you keep up. Our weekly newsletter is - brief, entertaining & always on-point. - ____________________ - Get Changelog News - (BUTTON) - __________________________________________________________________ +But that’s all part of the work. + +And if you “just use Go” or “just use React” or “just use Postgres” for every +problem that crosses your keyboard, you’re just not putting in the work. + +(And I say this as a guy who uses Postgres for most things! 😆) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +If you enjoyed reading this, you’ll probably enjoy [40]Changelog News, my free +weekly podcast + newsletter covering developer news worth your attention. I +keep it brief (~8 min), entertaining & always on-point. Not so sure? Check out +a [41]recent issue! + +Software moves fast. We help you keep up. Our weekly newsletter is brief, +entertaining & always on-point. + +[42][ ] +[43][Get Changelog News] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Discussion - [44]Sign in or [45]Join to comment or subscribe +[45]Sign in or [46]Join to comment or subscribe - (BUTTON) +Solomon Ucko - (BUTTON) Solomon Ucko +sollyucko - sollyucko - [46]Solomon Ucko +[49] Solomon Ucko - Solomon Ucko +Solomon Ucko - * [47]Twitter - * [48]GitHub - * [49]LinkedIn + • [50]Twitter + • [51]GitHub + • [52]LinkedIn - [50]2023-05-25T03:42:39Z ago +[53] 2023-05-25T03:42:39Z ago - just use Rust, except possibly when you’re working with a platform - designed for another language (e.g. web => HTML/CSS/JS, Android => Java - or Kotlin, macOS/iOS => Objective-C or Swift, Microsoft Office macros - => Visual Basic), though Rust does have FFI crates for all of these. +just use Rust, except possibly when you’re working with a platform designed for +another language (e.g. web => HTML/CSS/JS, Android => Java or Kotlin, macOS/iOS +=> Objective-C or Swift, Microsoft Office macros => Visual Basic), though Rust +does have FFI crates for all of these. - [51]reply +[54]reply - (BUTTON) +James Harr - (BUTTON) James Harr +jamesharr - jamesharr - [52]James Harr +[57] James Harr - James Harr +James Harr - * [53]GitHub + • [58]GitHub - [54]2023-05-27T12:55:20Z ago +[59] 2023-05-27T12:55:20Z ago - Nine women can’t make a baby in one month! + Nine women can’t make a baby in one month! - I quoted this to my wife once while trying to explain the concept from - the book. She knew what I meant, but said (paraphrasing) it’s a micro - aggression to pick out women and I might want to pick another example. +I quoted this to my wife once while trying to explain the concept from the +book. She knew what I meant, but said (paraphrasing) it’s a micro aggression to +pick out women and I might want to pick another example. - After some reflection and an initial knee jerk internal reaction of - “no, it’s a fine example”, I agree with her. There’s no reason to - change the book – it is what it is, it was written at a point in time, - and it did it’s job of getting the readers to think. All that said, we - can come up with a better example for the present and future. I don’t - know what that example is, but I know we can do better. +After some reflection and an initial knee jerk internal reaction of “no, it’s a +fine example”, I agree with her. There’s no reason to change the book – it is +what it is, it was written at a point in time, and it did it’s job of getting +the readers to think. All that said, we can come up with a better example for +the present and future. I don’t know what that example is, but I know we can do +better. - [55]reply +[60]reply - (BUTTON) +Jerod Santo - (BUTTON) Jerod Santo +jerodsanto - jerodsanto - [56]Jerod Santo +[63] Jerod Santo - Jerod Santo +Jerod Santo - Omaha, Nebraska +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 - How is it a micro aggression? I do not understand. +[69] 2023-05-27T13:36:23Z ago - [63]reply +How is it a micro aggression? I do not understand. - (BUTTON) +[70]reply - (BUTTON) James Harr +James Harr - jamesharr - [64]James Harr +jamesharr - James Harr +[73] James Harr - * [65]GitHub +James Harr - [66]2023-05-27T16:02:25Z ago + • [74]GitHub - Well, maybe micro aggression isn’t the right term, but it’s something - that left a bad taste in her mouth and I’m trying to remember exactly - how she described it. I think you almost have to put your self in the - shoes of someone who 1) has had to work upstream in an industry because - of their gender 2) has had to deal with people in a society that see a - women’s “job” is to bear children and careers come second at best 3) - has had to deal with a lot of people having opinions over your body and - what you do with it, most of which do not share your anatomy. After - putting yourself in that position, the comparison starts to feel more - icky. +[75] 2023-05-27T16:02:25Z ago - I’ll be honest, I’m defending a view I don’t entirely “get” and may not - be capable of understanding. However, after seeing her reaction when I - said that quote, this is one of those times where I’m going to say “I - believe you”. I’ve been incredibly privileged in this world as a white - male, and that’s a pretty big blindspot, so I’m putting trust in - someone else to see what’s there. +Well, maybe micro aggression isn’t the right term, but it’s something that left +a bad taste in her mouth and I’m trying to remember exactly how she described +it. I think you almost have to put your self in the shoes of someone who 1) has +had to work upstream in an industry because of their gender 2) has had to deal +with people in a society that see a women’s “job” is to bear children and +careers come second at best 3) has had to deal with a lot of people having +opinions over your body and what you do with it, most of which do not share +your anatomy. After putting yourself in that position, the comparison starts to +feel more icky. - I’m not going to fault anyone for quoting it and you have nothing to - apologize for; Part of the reason that quote works so effectively is - how ridiculous it is. I’m just going to challenge people to do better, - and it’s going to be hard. +I’ll be honest, I’m defending a view I don’t entirely “get” and may not be +capable of understanding. However, after seeing her reaction when I said that +quote, this is one of those times where I’m going to say “I believe you”. I’ve +been incredibly privileged in this world as a white male, and that’s a pretty +big blindspot, so I’m putting trust in someone else to see what’s there. - [67]reply +I’m not going to fault anyone for quoting it and you have nothing to apologize +for; Part of the reason that quote works so effectively is how ridiculous it +is. I’m just going to challenge people to do better, and it’s going to be hard. - (BUTTON) +[76]reply - (BUTTON) Jerod Santo +Jerod Santo - jerodsanto - [68]Jerod Santo +jerodsanto - Jerod Santo +[79] Jerod Santo - Omaha, Nebraska +Jerod Santo - 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 +Omaha, Nebraska - [74]2023-05-28T12:43:12Z ago +Jerod co-hosts [80]The Changelog, crashes [81]JS Party, and takes out the trash +(his old code) once in awhile. - I’ll be honest, I’m defending a view I don’t entirely “get” and may - not be capable of understanding. However, after seeing her reaction - when I said that quote, this is one of those times where I’m going - to say “I believe you” + • [82]Twitter + • [83]GitHub + • [84]LinkedIn - That’s a fair stance to take, but it doesn’t produce much of a - convincing argument that will drive people to change. If you want - people to starting using a better metaphor, I challenge you to come up - with one. +[85] 2023-05-28T12:43:12Z ago - [75]reply + I’ll be honest, I’m defending a view I don’t entirely “get” and may not be + capable of understanding. However, after seeing her reaction when I said + that quote, this is one of those times where I’m going to say “I believe + you” - (BUTTON) +That’s a fair stance to take, but it doesn’t produce much of a convincing +argument that will drive people to change. If you want people to starting using +a better metaphor, I challenge you to come up with one. - (BUTTON) Bryan Betts +[86]reply - bryan-ffd - [76]Bryan Betts +Bryan Betts - Bryan Betts +bryan-ffd - * [77]GitHub +[89] Bryan Betts - [78]2023-06-28T12:58:27Z ago +Bryan Betts - “Over time a silver bullet has come to represent “a simple, seemingly - magical, solution to a difficult problem.” - Well, maybe - but what you’re actually referring to here is a magic - bullet, or Zauberkugel. Over time, some people - yes, including - award-winning engineers and scientists - have come to confuse the two. + • [90]GitHub - [79]reply +[91] 2023-06-28T12:58:27Z ago - (BUTTON) Hide Overlay +“Over time a silver bullet has come to represent “a simple, seemingly magical, +solution to a difficult problem.” +Well, maybe - but what you’re actually referring to here is a magic bullet, or +Zauberkugel. Over time, some people - yes, including award-winning engineers +and scientists - have come to confuse the two. - * [80]About - * [81]Contact - * [82]888-974-CHLG (2454) +[92]reply - * [83]Twitter Icon - * [84]Mastodon Icon - * [85]LinkedIn Icon - * [86]GitHub Icon - * [87]YouTube Icon - * [88]Instagram Icon - * [89]TikTok Icon +Hide Overlay -[90]Podcasts + • [94]About + • [95]Contact + • [96]888-974-CHLG (2454) - * [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 + • [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] +Bandwidth - Hosting - Fly - [128] +Fastly +[141] - Search - Typesense +Hosting - (BUTTON) (BUTTON) (BUTTON) - Player art - (BUTTON) Previous Chapter (BUTTON) (BUTTON) (BUTTON) (BUTTON) Next - Chapter - (BUTTON) [1X] 0:00 ____________________ / 0:00 +Fly +[142] -References +Search - 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 +Typesense +Player art +Previous Chapter Next Chapter +[152][0 ] + [153][] [1X] 0:00[155][ ] / 0:00 + +References: + +[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 diff --git a/static/archive/chrisnotes-io-ijc95x.txt b/static/archive/chrisnotes-io-ijc95x.txt index b0c6e5b..129d5b5 100644 --- a/static/archive/chrisnotes-io-ijc95x.txt +++ b/static/archive/chrisnotes-io-ijc95x.txt @@ -1,442 +1,422 @@ - #[1]Notes from your friend Chris - - [2]Notes from your friend Chris - [3]Home [4]Archives [5]Search [6]Feed +[1] Notes from your friend Chris +[2]Home [3]Archives [4]Search [5]Feed Digital Notetaking Stack - So I use a paper notebook. To be more specific, I use a notebook binder - with three separate notebooks in it. Each notebook serves a specific - purpose. The first one is for tasks and to-dos. The second one is just - a scratch pad for absolutely anything under the sun: drawings, - thoughts, somebody’s phone number, anything. The last one is a very - regimented journal where I reflect on personal experiences. +So I use a paper notebook. To be more specific, I use a notebook binder with +three separate notebooks in it. Each notebook serves a specific purpose. The +first one is for tasks and to-dos. The second one is just a scratch pad for +absolutely anything under the sun: drawings, thoughts, somebody’s phone number, +anything. The last one is a very regimented journal where I reflect on personal +experiences. - Sure, I could just use a single notebook for all of these purposes. - Hell, I could use a stack of printer paper for all these purposes; but - it would be clunky, it would be difficult, and I wouldn’t really want - to use it because it wouldn’t be very satisfying. +Sure, I could just use a single notebook for all of these purposes. Hell, I +could use a stack of printer paper for all these purposes; but it would be +clunky, it would be difficult, and I wouldn’t really want to use it because it +wouldn’t be very satisfying. - So, I’ve developed a system that works for taking paper notes. It’s - custom tailored to my goals and how my brain works. And as a cherry on - top, I picked a notebook binder and pen that I really enjoy touching - and looking at, which makes the whole system just that much better. +So, I’ve developed a system that works for taking paper notes. It’s custom +tailored to my goals and how my brain works. And as a cherry on top, I picked a +notebook binder and pen that I really enjoy touching and looking at, which +makes the whole system just that much better. - Similarly, I use a set of different apps for different purposes when - I’m taking notes in my digital world. +Similarly, I use a set of different apps for different purposes when I’m taking +notes in my digital world. - Yes, I could probably stick to just using the default notes app on my - phone, but it would be clunky, there would be friction, it would not - adapt to the way my brain works, and I would end up using it less. Plus - it isn’t really that satisfying to look at… but that’s just my opinion. +Yes, I could probably stick to just using the default notes app on my phone, +but it would be clunky, there would be friction, it would not adapt to the way +my brain works, and I would end up using it less. Plus it isn’t really that +satisfying to look at… but that’s just my opinion. - So instead, after nearly a decade of trial and error, I’ve developed a - system and way of working with my notes in my digital world that brings - me immense satisfaction and works well with the way my brain works and - the way my lifestyle is currently set up. +So instead, after nearly a decade of trial and error, I’ve developed a system +and way of working with my notes in my digital world that brings me immense +satisfaction and works well with the way my brain works and the way my +lifestyle is currently set up. - DISCLAIMERS: - * This is not me trying to convince you to use the apps that I use. - This is what works for me, and is very tailored to my brain and - life. I’m not here to tell you what to use. But if hearing about my - setup gives you ideas, that’s great! - * This is something I will continue to change and improve. It’s been - a long evolution to land on this setup. Trial and error was - involved, and will continue to be. I think there’s an ebb and flow - to changing your setup. If you do it too often, you lose - productivity. If you don’t do it enough, your setup may stagnate - and fail to match your lifestyle. - * This is a values-based notetaking setup. I believe in owning my own - data, having an easily exportable format (markdown), and using - tools that are extensible & hackable. For someone who doesn’t share - these values, this may seem overbuilt or convoluted or not native - enough or something. - * This is not written for the PKM enthusiast community. It’s a basic, - balanced setup using tools that are widely known. If you’re a - longtime Personal Knowledge Management guru, there won’t be - anything new for you here. This is written for the layman who is - dissatisfied with their current setup and looking for inspiration. +DISCLAIMERS: - Anyway, if digital notetaking is something that never really clicked - for you, or if you currently have a workflow that you’re not pleased - with, this might be a blog article for you. Let me know on [7]Mastodon! + • This is not me trying to convince you to use the apps that I use. This is + what works for me, and is very tailored to my brain and life. I’m not here + to tell you what to use. But if hearing about my setup gives you ideas, + that’s great! + • This is something I will continue to change and improve. It’s been a long + evolution to land on this setup. Trial and error was involved, and will + continue to be. I think there’s an ebb and flow to changing your setup. If + you do it too often, you lose productivity. If you don’t do it enough, your + setup may stagnate and fail to match your lifestyle. + • This is a values-based notetaking setup. I believe in owning my own data, + having an easily exportable format (markdown), and using tools that are + extensible & hackable. For someone who doesn’t share these values, this may + seem overbuilt or convoluted or not native enough or something. + • This is not written for the PKM enthusiast community. It’s a basic, + balanced setup using tools that are widely known. If you’re a longtime + Personal Knowledge Management guru, there won’t be anything new for you + here. This is written for the layman who is dissatisfied with their current + setup and looking for inspiration. + +Anyway, if digital notetaking is something that never really clicked for you, +or if you currently have a workflow that you’re not pleased with, this might be +a blog article for you. Let me know on [6]Mastodon! Overview - i. Intake / Short-term notes - ii. Long-term notes - iii. Shared / Published notes - iv. Collaborative notes - v. Closing thoughts + i. Intake / Short-term notes +ii. Long-term notes +iii. Shared / Published notes +iv. Collaborative notes + v. Closing thoughts Intake / Short-term notes - One of the most important parts of my setup is my intake app. I hope - you’ve never had to experience this feeling: +One of the most important parts of my setup is my intake app. I hope you’ve +never had to experience this feeling: - Your friend names a cool restaurant or book for you to look up - later. You hastily pull up your notes app to write it down. But - wait. Where should you make the note? Does restaurant fall under - your travel folder? Or your food folder? What should you title it? - Do you need to make a new folder? While you’re fiddling with your - app your friend has already started talking about that other boba - place you should explore. Should that go in a whole other note? Oh - god. + Your friend names a cool restaurant or book for you to look up later. You + hastily pull up your notes app to write it down. But wait. Where should you + make the note? Does restaurant fall under your travel folder? Or your food + folder? What should you title it? Do you need to make a new folder? While + you’re fiddling with your app your friend has already started talking about + that other boba place you should explore. Should that go in a whole other + note? Oh god. - I feel like a lot of people give up after going through this a couple - times and their notes app just ends up being a hodge-podge of - unorganized, random shit that they dread looking back at later. +I feel like a lot of people give up after going through this a couple times and +their notes app just ends up being a hodge-podge of unorganized, random shit +that they dread looking back at later. - This is exactly why I use an intake app, and my app of choice for this - incredibly important role is, of course, Drafts. +This is exactly why I use an intake app, and my app of choice for this +incredibly important role is, of course, Drafts. - [8]✨Drafts✨ +[7]✨Drafts✨ - Drafts is made for this exact purpose. By default, it opens to a blank - new note. Whatever you type as the first line is considered the title. - And it has this insane concept called Actions that lets you quickly - process your notes by moving them elsewhere through deep interactions - with your other existing apps. +Drafts is made for this exact purpose. By default, it opens to a blank new +note. Whatever you type as the first line is considered the title. And it has +this insane concept called Actions that lets you quickly process your notes by +moving them elsewhere through deep interactions with your other existing apps. - Let’s look at some pictures: +Let’s look at some pictures: - [723b4f53-202a-41b6-981c-d1e2710d6e47.png] +[723b4f53-202a-41b6-981c-d1e2710d6e47] - [896a49c3-ec20-4dff-89ac-33f9cf1e6120.png] +[896a49c3-ec20-4dff-89ac-33f9cf1e6120] - [78912a4e-95cc-463f-af64-5e55f4ddb395.png] +[78912a4e-95cc-463f-af64-5e55f4ddb395] - In the leftmost image, you can see where I keep Drafts. Front and - center, only app in my bottom drawer. +In the leftmost image, you can see where I keep Drafts. Front and center, only +app in my bottom drawer. - Middle image, you have the first thing you see when the app opens: a - blank note to write that restaurant / song / boba place. +Middle image, you have the first thing you see when the app opens: a blank note +to write that restaurant / song / boba place. - Rightmost image, you have the actions pane. +Rightmost image, you have the actions pane. - The actions in this pane are customized to my workflow. You are able to - configure multiple pages, but I’m content with just one for now. +The actions in this pane are customized to my workflow. You are able to +configure multiple pages, but I’m content with just one for now. - Drafting a text to your mom? Send it as a text message after you’ve - perfected it. Shopping list? Export straight into wherever you keep - that (for me it’s Things). Deep thought that’s perhaps a little too - deep? File it away in Day One where it will never see the light of day. +Drafting a text to your mom? Send it as a text message after you’ve perfected +it. Shopping list? Export straight into wherever you keep that (for me it’s +Things). Deep thought that’s perhaps a little too deep? File it away in Day One +where it will never see the light of day. - Basic tagging, shortcuts integration, and an archive folder really tie - everything together. Process a ton of drafts at once by selecting them - in the app and then doing a batch operation. +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. - 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. +Every app you could imagine is in this directory. - And the best part: if your app isn’t in there you can write your own - action! +And the best part: if your app isn’t in there you can write your own action! - Drafts could honestly take up a whole series of blog posts so I’ll stop - there for now. I haven’t even scratched the surface of what it can do, - but you really don’t need to dive very deep to reap the benefits. +Drafts could honestly take up a whole series of blog posts so I’ll stop there +for now. I haven’t even scratched the surface of what it can do, but you really +don’t need to dive very deep to reap the benefits. - Let’s table Drafts for now. It’ll come up later with how it pipes into - my other systems. +Let’s table Drafts for now. It’ll come up later with how it pipes into my other +systems. Long-term notes - So you may have picked up on the fact that notes don’t stay in Drafts - long. They either get exported or archived. +So you may have picked up on the fact that notes don’t stay in Drafts long. +They either get exported or archived. - Not every note is worthy of a permanent place in your note-taking - kingdom. Embracing this concept was a huge step in cleaning up my - digital world and starting to build a meaningful notes database for my - life. +Not every note is worthy of a permanent place in your note-taking kingdom. +Embracing this concept was a huge step in cleaning up my digital world and +starting to build a meaningful notes database for my life. - As I continued to acclimate to digital notes, I noticed that certain - note categories began to make themselves known. +As I continued to acclimate to digital notes, I noticed that certain note +categories began to make themselves known. - [11b85744-48ac-4c2d-a817-6e813929b837.png] +[11b85744-48ac-4c2d-a817-6e813929b837] - The middle 3 folders are the important ones to note here. +The middle 3 folders are the important ones to note here. Core - My core folder is where deeply personal stuff goes. Longterm goals, - journal entries, guiding principles and personal mantras. I wouldn’t - expect you to understand mine, but I’d encourage anyone to explore this - category of notes for themselves. +My core folder is where deeply personal stuff goes. Longterm goals, journal +entries, guiding principles and personal mantras. I wouldn’t expect you to +understand mine, but I’d encourage anyone to explore this category of notes for +themselves. - The notes in this folder don’t change much. But I recently started - recording a daily voice note diary of my day that I then transcribe and - summarize with AI. +The notes in this folder don’t change much. But I recently started recording a +daily voice note diary of my day that I then transcribe and summarize with AI. - I also do yearly, quarterly, monthly, and weekly planning sessions, and - the artifacts from these sessions often end up in here. +I also do yearly, quarterly, monthly, and weekly planning sessions, and the +artifacts from these sessions often end up in here. Projects - Projects is my favorite folder in my long-term notes. +Projects is my favorite folder in my long-term notes. - For me, this is a place for all kinds of things. Packing lists + - itineraries + other details for an upcoming trip, startup ideas, - potential blog posts, plans and details for my numerous hobbies. +For me, this is a place for all kinds of things. Packing lists + itineraries + +other details for an upcoming trip, startup ideas, potential blog posts, plans +and details for my numerous hobbies. - Notes in here often originate in Drafts and get quickly exported to my - projects folder via Drafts actions. +Notes in here often originate in Drafts and get quickly exported to my projects +folder via Drafts actions. - Projects are usually temporary, and get moved to my archive folder when - they’re completed (or when I get bored and move onto the next hobby). +Projects are usually temporary, and get moved to my archive folder when they’re +completed (or when I get bored and move onto the next hobby). Reference - This is for lists and information that I will want to keep as - reference. Quotes, wishlists, movie bucket list, books to read, etc. +This is for lists and information that I will want to keep as reference. +Quotes, wishlists, movie bucket list, books to read, etc. - I used to maintain a personal wiki of information on different topics. - Zettelkasten-esque, my knowledge wiki is currently in need of cleanup - and will likely be featured in its own blog post if I continue to work - on it. +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. Other folders - Archive is self-explanatory. Old notes go in here. +Archive is self-explanatory. Old notes go in here. - Templates is for fill-in-the-blank templates for notes that I take - often. Like those yearly/quarterly/etc check-ins and certain types of - projects. There’s an Obsidian plugin that has some functionality to - take advantage of these, but right now I just duplicate and move - markdown files manually as-needed. Nothing fancy. - __________________________________________________________________ +Templates is for fill-in-the-blank templates for notes that I take often. Like +those yearly/quarterly/etc check-ins and certain types of projects. There’s an +Obsidian plugin that has some functionality to take advantage of these, but +right now I just duplicate and move markdown files manually as-needed. Nothing +fancy. - I find this setup to be just enough. My main folders allow plenty of - flexibility within them for me to develop all kinds of systems to match - how my brain works. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +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. Apps and stuff - Yes, yes, we’ll talk about the app I use, but that’s much less - important than the underlying foundation. +Yes, yes, we’ll talk about the app I use, but that’s much less important than +the underlying foundation. - My long-term note-taking system is really just two things: - * A collection of markdown files - * A syncing service that circulates these files between my devices +My long-term note-taking system is really just two things: - If you commit to using the first, you can choose whatever you want for - the second and migrate between syncing providers at-will with minimal - headache. I’m not going to say much more on that, since others have - covered it very well ([10]File over App from one of the people - responsible for Obsidian). + • A collection of markdown files + • A syncing service that circulates these files between my devices - And as long as you have these two, you can access all of your notes on - all of your devices with whatever Markdown tools you’d like. Ultimate - freedom, extensibility, and hackability. +If you commit to using the first, you can choose whatever you want for the +second and migrate between syncing providers at-will with minimal headache. I’m +not going to say much more on that, since others have covered it very well ([9] +File over App from one of the people responsible for Obsidian). - That said, I use Obsidian. +And as long as you have these two, you can access all of your notes on all of +your devices with whatever Markdown tools you’d like. Ultimate freedom, +extensibility, and hackability. - [11]✨Obsidian✨ +That said, I use Obsidian. - My go-to sync tool was Dropbox for a long time, but after committing - fully to Obsidian as my default app across Mac / iPad / iPhone I’ve - switched over to Obsidian Sync for the E2E encryption, longer note - history, and seamless integration with Obsidian. +[10]✨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. +My go-to sync tool was Dropbox for a long time, but after committing fully to +Obsidian as my default app across Mac / iPad / iPhone I’ve switched over to +Obsidian Sync for the E2E encryption, longer note history, and seamless +integration with Obsidian. - Drafts can export to my longterm notes via both the OS filesystem and - Obsidian app urls. Same for Shortcuts, which I’ll get to later. +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. - Obsidian also plays nicely with iCloud, and supports Dropbox / Google - Drive / S3 through its community plugins. I have it connected to my - Dropbox for publishing / sharing notes, which I’ll get into in a bit. +Drafts can export to my longterm notes via both the OS filesystem and Obsidian +app urls. Same for Shortcuts, which I’ll get to later. - My main reasons for using Obsidian are: - * It has command palette - * It has quick open - * It’s hackable & has community plugins +Obsidian also plays nicely with iCloud, and supports Dropbox / Google Drive /  +S3 through its community plugins. I have it connected to my Dropbox for +publishing / sharing notes, which I’ll get into in a bit. - Honestly, the specific app here doesn’t really matter as much as the - underlying system. I could switch to using Ulysses or 1Writer or Byword - or nvAlt or something else entirely if I wanted. +My main reasons for using Obsidian are: - I will say, like Drafts, Obsidian is a product of thoughtful design. - You don’t need to dive to deep to reap the benefits. But if you want to - be a power user, there’s a LOT it can do. For me, the important thing - is that I can open files and do stuff with them easily, and I can hack - it to accommodate to pretty much any use case my weird brain comes up - with. + • It has command palette + • It has quick open + • It’s hackable & has community plugins - Obsidian really knocks it out of the park for me, so I use it almost - exclusively right now (for long-term notes). +Honestly, the specific app here doesn’t really matter as much as the underlying +system. I could switch to using Ulysses or 1Writer or Byword or nvAlt or +something else entirely if I wanted. + +I will say, like Drafts, Obsidian is a product of thoughtful design. You don’t +need to dive to deep to reap the benefits. But if you want to be a power user, +there’s a LOT it can do. For me, the important thing is that I can open files +and do stuff with them easily, and I can hack it to accommodate to pretty much +any use case my weird brain comes up with. + +Obsidian really knocks it out of the park for me, so I use it almost +exclusively right now (for long-term notes). Published / shared notes - I’m not going to shit on Notion in this post (not much, at least), but - one thing I really missed from migrating from it was the - ease-of-sharing. +I’m not going to shit on Notion in this post (not much, at least), but one +thing I really missed from migrating from it was the ease-of-sharing. - I would put together an itinerary, packing list, cost breakdown, and - car-pooling plan for group camping trips in minutes, hit the share - button, and fire it off to my group chat of friends with no hiccups. +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. - I had been craving that functionality in my new note-taking system, so - I built it. Kind of. +I had been craving that functionality in my new note-taking system, so I built +it. Kind of. - Before we get to that, let’s talk about my workflow for posting blog - articles. +Before we get to that, let’s talk about my workflow for posting blog articles. Publishing blog posts - Remember how I said I use Dropbox still for sharing / publishing? +Remember how I said I use Dropbox still for sharing / publishing? - I do that with help from a service called Blot. +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. +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. - I wouldn’t say this is anything groundbreaking, but I find it immensely - satisfying. +I wouldn’t say this is anything groundbreaking, but I find it immensely +satisfying. Sharing notes - Okay, back to Notion-esque sharing. +Okay, back to Notion-esque sharing. - Let’s say I put together a travel itinerary for a camping trip in my - Projects folder. It has a list of everyone attending, cost breakdown, - directions, packing list, and pictures of the campsite to drum up hype. +Let’s say I put together a travel itinerary for a camping trip in my Projects +folder. It has a list of everyone attending, cost breakdown, directions, +packing list, and pictures of the campsite to drum up hype. - It’s all ready to go, but I need to share it out to my friends. +It’s all ready to go, but I need to share it out to my friends. - Enter Blot. Same service, different folder. This time, instead of - having Blot publish to chrisnotes.io, I have a separate domain I use - only for this purpose. I move the note to the shared folder and shoot - my friends the link. +Enter Blot. Same service, different folder. This time, instead of having Blot +publish to chrisnotes.io, I have a separate domain I use only for this purpose. +I move the note to the shared folder and shoot my friends the link. - The end. No fuss, no need for them to have an account, it’s just - published to a non-indexed domain that I use as an external - file/note-share. +The end. No fuss, no need for them to have an account, it’s just published to a +non-indexed domain that I use as an external file/note-share. - ”But it’s not collaborative!” Yeah, and it’s not meant to be. +”But it’s not collaborative!” Yeah, and it’s not meant to be. Collaborative notes - Okay, so once in a blue moon I have a valid reason to collaborate on a - note with someone. It’s incredibly rare, and usually a very niche - use-case. +Okay, so once in a blue moon I have a valid reason to collaborate on a note +with someone. It’s incredibly rare, and usually a very niche use-case. - If it’s like a Resume or something, I use Google Drive, because the - output artifact is a document. +If it’s like a Resume or something, I use Google Drive, because the output +artifact is a document. - If it’s for brainstorming or something, Figma. +If it’s for brainstorming or something, Figma. - If it’s project tracking, Notion. +If it’s project tracking, Notion. - These aren’t really notes anymore. This is a one-off collaboration with - a specific outcome in mind, so it doesn’t really fall into the purview - of this post. +These aren’t really notes anymore. This is a one-off collaboration with a +specific outcome in mind, so it doesn’t really fall into the purview of this +post. - To be honest, I don’t think my personal notes database is something - that would ever require collaboration. My notes are deeply personal, - and I like it that way. I can publish if I need to, and there are - plenty of collaborative tools that work for other tasks. But I have yet - to need real-time collaboration on my actual notes. +To be honest, I don’t think my personal notes database is something that would +ever require collaboration. My notes are deeply personal, and I like it that +way. I can publish if I need to, and there are plenty of collaborative tools +that work for other tasks. But I have yet to need real-time collaboration on my +actual notes. My gripe with Notion - Okay fine, quick note on Notion. While it’s a powerful tool that sparks - creativity in a very attractive interface, it goes against my core - values. You don’t own your data, it’s on their servers the entire time. - Offline mode barely works. Exporting is a mess because while they - present themselves as Markdown-esque, their stuff is so custom it’s a - mess to port to other apps. +Okay fine, quick note on Notion. While it’s a powerful tool that sparks +creativity in a very attractive interface, it goes against my core values. You +don’t own your data, it’s on their servers the entire time. Offline mode barely +works. Exporting is a mess because while they present themselves as +Markdown-esque, their stuff is so custom it’s a mess to port to other apps. - You get punished as soon as you try to leave. +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! +You made it to the end! - Personally, after having tried a lot of tools with varying levels of - depth and complexity, I find this setup very balanced. +Personally, after having tried a lot of tools with varying levels of depth and +complexity, I find this setup very balanced. - It does just enough. I haven’t gone too deep into any of the tools. - It’s still portable. I could still switch stuff around with very little - overhead if I wanted to. +It does just enough. I haven’t gone too deep into any of the tools. It’s still +portable. I could still switch stuff around with very little overhead if I +wanted to. - Being candid, my sync system is the one thing I am considering - changing. I don’t like that Obsidian Sync has no way to run headless, - and has no API access for other apps to tap into. If I wanted to change - editor, I’d need to switch back to Dropbox. It wouldn’t take much to - make the switch: maybe 5 minutes to update the config across all my - devices. +Being candid, my sync system is the one thing I am considering changing. I +don’t like that Obsidian Sync has no way to run headless, and has no API access +for other apps to tap into. If I wanted to change editor, I’d need to switch +back to Dropbox. It wouldn’t take much to make the switch: maybe 5 minutes to +update the config across all my devices. - But that’s the only thing I’m really not happy with right now. I find - this system pretty seamless to work with. It has structure and - organization, without being so confined that it limits creativity. +But that’s the only thing I’m really not happy with right now. I find this +system pretty seamless to work with. It has structure and organization, without +being so confined that it limits creativity. Bonus goodies - If you made it this far, you’re either really into notetaking systems - or you’re friends with me. Either way, you might get a kick out of some - of the cool functionality that comes from a system like this. +If you made it this far, you’re either really into notetaking systems or you’re +friends with me. Either way, you might get a kick out of some of the cool +functionality that comes from a system like this. Custom share sheet actions - Any time I’m browsing the web and come across something I want to buy - later, I can instantly append it to my Wishlist note using a share - sheet action that uses Obsidian’s deep-linking. +Any time I’m browsing the web and come across something I want to buy later, I +can instantly append it to my Wishlist note using a share sheet action that +uses Obsidian’s deep-linking. - I could easily replicate this functionality using the OS filesystem in - shortcuts. +I could easily replicate this functionality using the OS filesystem in +shortcuts. - Or, if I was using Dropbox, I could do it with Dropbox’s shortcut - integrations. +Or, if I was using Dropbox, I could do it with Dropbox’s shortcut integrations. - I have a similar shortcut action for prepending selected text to my - Quotes note. +I have a similar shortcut action for prepending selected text to my Quotes +note. - If I wanted, I could have an automation that downloads the current - weather and top news stories to a daily note for me to review when I - start my morning. +If I wanted, I could have an automation that downloads the current weather and +top news stories to a daily note for me to review when I start my morning. - With a little scripting, you can really bend any of these tools / files - to do whatever you want because of the format. +With a little scripting, you can really bend any of these tools / files to do +whatever you want because of the format. - Anyway, thanks so much for reading this far. I hope you got something - from it. And if you have any input, please let me know. I’m not going - to pretend I’m any kind of guru, and I love learning new things. If you - have suggestions or ideas or feedback, please send them my way on - [13]Mastodon! - __________________________________________________________________ +Anyway, thanks so much for reading this far. I hope you got something from it. +And if you have any input, please let me know. I’m not going to pretend I’m any +kind of guru, and I love learning new things. If you have suggestions or ideas +or feedback, please send them my way on [12]Mastodon! + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Date - September 4, 2023 +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 diff --git a/static/archive/cloud-google-com-windxx.txt b/static/archive/cloud-google-com-windxx.txt index c5be667..9946a02 100644 --- a/static/archive/cloud-google-com-windxx.txt +++ b/static/archive/cloud-google-com-windxx.txt @@ -1,367 +1,359 @@ - #[1]home +[1]Jump to Content +[2] +Cloud +[4]Blog +[5]Contact sales [6]Get started for free +[7][ ] +[13] +Cloud +[14]Blog - [2]Jump to Content + • 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 - Cloud - (BUTTON) - [3]Blog - [4]Contact sales [5]Get started for free - ____________________ +[52]Contact sales [53]Get started for free +[54][ ] +Application Modernization - Cloud - [6]Blog +Why I love Go - * 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 +September 12, 2022 - [44]Contact sales [45]Get started for free - ____________________ - - Application Modernization - - Why I love Go - September 12, 2022 - * - * - * - * + • [60] + • [61] + • [62] + • [63] David Yach - Director of Engineering at Google Cloud +Director of Engineering at Google Cloud - I’ve been building software over the last four decades, as a developer, - manager and executive in both small and large software companies. I - started my career working on commercial compilers, first BASIC and then - C. I have written a lot of code in many different languages, and - managed teams with even broader language usage. +I’ve been building software over the last four decades, as a developer, manager +and executive in both small and large software companies. I started my career +working on commercial compilers, first BASIC and then C. I have written a lot +of code in many different languages, and managed teams with even broader +language usage. - I learned Go about 5 years ago when I was CTO at a startup/scaleup. At - the time, we were looking to move to a microservice architecture, and - that shift gave us the opportunity to consider moving away from the - incumbent language (Scala). As I read through the Go tutorials, my - compiler-writing background came back to me and I found myself - repeatedly thinking “That’s cool – I know why the Go team did that!” So - I got hooked on the language design. +I learned Go about 5 years ago when I was CTO at a startup/scaleup. At the +time, we were looking to move to a microservice architecture, and that shift +gave us the opportunity to consider moving away from the incumbent language +(Scala). As I read through the Go tutorials, my compiler-writing background +came back to me and I found myself repeatedly thinking “That’s cool – I know +why the Go team did that!” So I got hooked on the language design. Learning - I have worked with many different computer languages over the years, so - I was not surprised I could quickly get started writing Go programs - after reading through the online documents and tutorials. But then when - I saw a new co-op student (a.k.a. intern) learn Go and write a - substantial prototype in their first two weeks on the job, it became - clear that Go was much easier to learn than many other languages. +I have worked with many different computer languages over the years, so I was +not surprised I could quickly get started writing Go programs after reading +through the online documents and tutorials. But then when I saw a new co-op +student (a.k.a. intern) learn Go and write a substantial prototype in their +first two weeks on the job, it became clear that Go was much easier to learn +than many other languages. Writing code - As I started writing my first Go programs, the first thing that struck - me was the blazing compiler speed. It was as fast or faster starting my - application than many interpreted languages, yet it was a compiled - program with a strongly typed language. (I have an affinity for - strongly typed languages – I have spent way too much time tracking down - obscure issues in my own code in dynamic typed languages, where the - same issue would have been a compile error in a strongly typed - language.) Even better, in Go I often don’t need to declare the type – - the compiler figures it out. +As I started writing my first Go programs, the first thing that struck me was +the blazing compiler speed. It was as fast or faster starting my application +than many interpreted languages, yet it was a compiled program with a strongly +typed language. (I have an affinity for strongly typed languages – I have spent +way too much time tracking down obscure issues in my own code in dynamic typed +languages, where the same issue would have been a compile error in a strongly +typed language.) Even better, in Go I often don’t need to declare the type – +the compiler figures it out. - I was impressed with the standard Go library – it included many of the - capabilities required by modern applications – things like HTTP - support, JSON handling and encryption. Many other languages required - you to use a third-party library for these features, and often there - were multiple competing libraries to choose from, adding another - decision point for the developer. With Go, I could go to the standard - library GoDoc and get started right away. +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. - There were a few other language decisions that I found helpful. One is - that the compiler figures out if you are returning a pointer to a - local, and behind the scenes allocates the memory rather than using the - stack. This prevents bugs, and I find the code more readable. +There were a few other language decisions that I found helpful. One is that the +compiler figures out if you are returning a pointer to a local, and behind the +scenes allocates the memory rather than using the stack. This prevents bugs, +and I find the code more readable.  - I also like that you don’t declare that you support an interface. I - wasn’t sure I would like this at first because it isn’t obvious if a - type implements a particular interface, but I found greater value in - the fact that I wasn’t dependent on the code author (even if it was - me!) to declare that the interface is implemented. This first hit home - when I used fmt.Println() and it automatically used the String() method - I had implemented even though it hadn’t occurred to me that I was - implementing the Stringer interface. +I also like that you don’t declare that you support an interface. I wasn’t sure +I would like this at first because it isn’t obvious if a type implements a +particular interface, but I found greater value in the fact that I wasn’t +dependent on the code author (even if it was me!) to declare that the interface +is implemented. This first hit home when I used fmt.Println() and it +automatically used the String() method I had implemented even though it hadn’t +occurred to me that I was implementing the Stringer interface. - The last feature I’ll note is the ability to do concurrent programming - through channels and goroutines. The model is simple to understand yet - powerful. +The last feature I’ll note is the ability to do concurrent programming through +channels and goroutines. The model is simple to understand yet powerful. Reading code - After writing more Go code and starting to incorporate third party - libraries, I had a realization that had never occurred to me before – - as a developer, I spend a lot of time reading code. In fact, I probably - spend more time reading code than writing it, once you start counting - code reviews, debugging, and evaluating third-party libraries. +After writing more Go code and starting to incorporate third party libraries, I +had a realization that had never occurred to me before – as a developer, I +spend a lot of time reading code. In fact, I probably spend more time reading +code than writing it, once you start counting code reviews, debugging, and +evaluating third-party libraries. - What was different about reading Go code? I would summarize it by “it - all looks the same.” What do I mean by that? Go format ensures all the - braces are in the same spot; capitalized identifiers are exported; - there are no implicit conversions, even of internal types; and there is - no overloading of operators, functions or methods. That means that with - Go code, “what you see is what you get” with no hidden meaning. Of - course, it doesn’t help me to understand a complicated algorithm, but - it does mean that I can concentrate more on that algorithm because I - don’t have to understand whether ‘+’ is overloaded, for example. +What was different about reading Go code? I would summarize it by “it all looks +the same.” What do I mean by that? Go format ensures all the braces are in the +same spot; capitalized identifiers are exported; there are no implicit +conversions, even of internal types; and there is no overloading of operators, +functions or methods. That means that with Go code, “what you see is what you +get” with no hidden meaning. Of course, it doesn’t help me to understand a +complicated algorithm, but it does mean that I can concentrate more on that +algorithm because I don’t have to understand whether ‘+’ is overloaded, for +example. - I was also pleasantly surprised when I used GoDoc on one of my - projects, and discovered that I had semi-reasonable documentation - without doing anything while writing the code other than adding - comments on my functions and methods based on nagging from the IDE I - was using. I did spend some time cleaning up the comments after that, - but I’m not sure I would have even started that work if Go hadn’t given - me a great starting point. +I was also pleasantly surprised when I used GoDoc on one of my projects, and +discovered that I had semi-reasonable documentation without doing anything +while writing the code other than adding comments on my functions and methods +based on nagging from the IDE I was using. I did spend some time cleaning up +the comments after that, but I’m not sure I would have even started that work +if Go hadn’t given me a great starting point. Testing code - Go test is part of the standard Go tools and supported by IDEs, making - it easy to get started creating unit tests for my code. And like the - standard Go library, having a standard way to do tests means I don’t - have to evaluate external testing frameworks and select one. I can also - understand the tests when I’m evaluating a third party library. +Go test is part of the standard Go tools and supported by IDEs, making it easy +to get started creating unit tests for my code. And like the standard Go +library, having a standard way to do tests means I don’t have to evaluate +external testing frameworks and select one. I can also understand the tests +when I’m evaluating a third party library. - Even better, the default behavior running package tests in VSCode is to - enable Go’s built-in code coverage. I had never taken code coverage - seriously working in other languages, partly because it was often - difficult to set up. But the immediate feedback (helped by the blazing - compile speed) gamified this for me, and I found myself adding tests to - increase code coverage (and finding new bugs along the way). +Even better, the default behavior running package tests in VSCode is to enable +Go’s built-in code coverage. I had never taken code coverage seriously working +in other languages, partly because it was often difficult to set up. But the +immediate feedback (helped by the blazing compile speed) gamified this for me, +and I found myself adding tests to increase code coverage (and finding new bugs +along the way). - Go doesn’t allow circular dependencies between packages. While this has - caused me some rethinking while writing code, I find it makes my - testing regimen easier to think about – if I depend on a package, I can - rely on that package to have its own tests covering its capabilities. +Go doesn’t allow circular dependencies between packages. While this has caused +me some rethinking while writing code, I find it makes my testing regimen +easier to think about – if I depend on a package, I can rely on that package to +have its own tests covering its capabilities. Deploying code - I learned Go at the same time we were migrating towards container-based - microservices. In that environment, the fact that Go produces a single, - self-contained executable makes it much easier and more efficient to - build and manage containers. I can build a container layer with one - single file, which is often a single-digit number of MB in size, - compared to our prior JVM-based containers which started with hundreds - of MB for the Java runtime then another layer for our application. (It - is easy to forget how much this overhead ends up costing in production, - particularly if you have hundreds or thousands of containers running). +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). - 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. +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. - Finally, Go has established a well defined set of principles for - versioning and compatibility. While not all pieces of this are - enforced, having the principles from an authoritative source helps - manage the real life challenges of keeping your software supply chain - up to date. For example, it is strongly recommended that breaking - changes require a new major version number. While not enforced, it - leads the community to call out any open source package that violates - this principle. +Finally, Go has established a well defined set of principles for versioning and +compatibility. While not all pieces of this are enforced, having the principles +from an authoritative source helps manage the real life challenges of keeping +your software supply chain up to date. For example, it is strongly recommended +that breaking changes require a new major version number. While not enforced, +it leads the community to call out any open source package that violates this +principle. What do I miss? - I did miss generics; thankfully Go 1.18 added support. And I do wish - the standard library offered immutable collections (like Scala and - other functional languages). Embedding instead of inheritance works - pretty much the same in many cases, but requires some deep thinking - sometimes. +I did miss generics; thankfully Go 1.18 added support. And I do wish the +standard library offered immutable collections (like Scala and other functional +languages). Embedding instead of inheritance works pretty much the same in many +cases, but requires some deep thinking sometimes. - My most frequent coding mistake is when I should have used a pointer - receiver for a method and didn’t, then modify the receiver expecting - the changes to be visible when the method returns. The code looks - correct, the right values get assigned if I use a debugger to step - through or issue prints, but the changes disappear after the method - returns. I think I would have preferred if receivers were immutable, it - would have caught these errors at compile time, and in the few - remaining cases where I wanted to modify the receiver I would have - copied it to a local variable. +My most frequent coding mistake is when I should have used a pointer receiver +for a method and didn’t, then modify the receiver expecting the changes to be +visible when the method returns. The code looks correct, the right values get +assigned if I use a debugger to step through or issue prints, but the changes +disappear after the method returns. I think I would have preferred if receivers +were immutable, it would have caught these errors at compile time, and in the +few remaining cases where I wanted to modify the receiver I would have copied +it to a local variable. In conclusion - As you can tell, I am a huge fan of Go, from even before I joined - Google. I am impressed by the language and ecosystem design, and by the - implementation. For me, Go makes me a more productive developer and I’m - more confident in the quality of the code I produce. +As you can tell, I am a huge fan of Go, from even before I joined Google. I am +impressed by the language and ecosystem design, and by the implementation. For +me, Go makes me a more productive developer and I’m more confident in the +quality of the code I produce. - Go, give it a [46]try! +Go, give it a [64]try! - Posted in - * [47]Application Modernization - * [48]Application Development - * [49]Open Source +Posted in + + • [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 - DevOps & SRE +[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 +By Rishi Mukhopadhyay • 2-minute read - https://storage.googleapis.com/gweb-cloudblog-publish/images/General-GC - _Blog_header_2436x1200-v1.max-700x700.jpg - Google Cloud +[69] +https://storage.googleapis.com/gweb-cloudblog-publish/images/ +General-GC_Blog_header_2436x1200-v1.max-700x700.jpg +Google Cloud The overwhelmed person’s guide to Google Cloud: week of Dec 18 - By Forrest Brazeal • 2-minute read +By Forrest Brazeal • 2-minute read - https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Clo - ud_AIML_thumbnail.max-700x700.jpg - AI & Machine Learning +[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 +By Max Saltonstall • 2-minute read - https://storage.googleapis.com/gweb-cloudblog-publish/images/DO_NOT_USE - _Wfx45fA.max-700x700.jpg - Application Modernization +[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 +By Nishu Saxena • 4-minute read - Footer Links +Footer Links 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/ diff --git a/static/archive/codefol-io-bskabg.txt b/static/archive/codefol-io-bskabg.txt index 9162397..db4da47 100644 --- a/static/archive/codefol-io-bskabg.txt +++ b/static/archive/codefol-io-bskabg.txt @@ -1,374 +1,360 @@ - [1]Codefol.io book logo +[1]Codefol.io book logo [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? +A chimpanzee in a white coat types at a keyboard lit by glowing LEDs. +He's gorgeous, yes. But is his talent natural… or is it Ruby on Rails? - I was [8]recently on Jason Swett’s podcast again. He’s a great - interviewer and I always have fun with him. +I was [8]recently on Jason Swett’s podcast again. He’s a great interviewer and +I always have fun with him. - By Twitter request we talked about… When would you not use Rails? It’s - a great question. +By Twitter request we talked about… When would you not use Rails? It’s a great +question. - For the entertaining version, [9]listen to the podcast. For the - just-the-facts extra-complete version, I’m writing this post. +For the entertaining version, [9]listen to the podcast. For the just-the-facts +extra-complete version, I’m writing this post. When Is Rails the Wrong Choice? - I’ll start with a few simple, obvious times you wouldn’t use Rails, and - then I’ll talk about some technically interesting times. +I’ll start with a few simple, obvious times you wouldn’t use Rails, and then +I’ll talk about some technically interesting times. - First, and most important, is team familiarity. If your team doesn’t - already know Rails and isn’t especially interested in learning it then - Rails is the wrong choice. This should be obvious, but it still - deserves first billing. +First, and most important, is team familiarity. If your team doesn’t already +know Rails and isn’t especially interested in learning it then Rails is the +wrong choice. This should be obvious, but it still deserves first billing. - Second, when you know some other framework fits better. I’ll talk more - below about when that is. But sometimes you have a specific concern - that trumps everything else. If you need to use a Java-language machine - learning library and you don’t want to use JRuby for some reason, Rails - isn’t your framework. If you’re writing a WordPress plugin, you’ll be - doing it in PHP. Often there’s one specific compatibility concern that - overrides everything else. +Second, when you know some other framework fits better. I’ll talk more below +about when that is. But sometimes you have a specific concern that trumps +everything else. If you need to use a Java-language machine learning library +and you don’t want to use JRuby for some reason, Rails isn’t your framework. If +you’re writing a WordPress plugin, you’ll be doing it in PHP. Often there’s one +specific compatibility concern that overrides everything else. - You can also think of it as: use it where Rails’ good points hold and - its bad points don’t. So we’ll also talk about the good and bad points. +You can also think of it as: use it where Rails’ good points hold and its bad +points don’t. So we’ll also talk about the good and bad points. - Separately: you’d normally only use Rails as an HTTP server, so some - tasks just aren’t Rails-shaped. +Separately: you’d normally only use Rails as an HTTP server, so some tasks just +aren’t Rails-shaped. When is Rails Too Much? - [10]A pirate puppet with an eyepatch, safety goggles and a huge - scraggly mustache watches over a purple crystal ball at his feet.' He’s - too much lab assistant for your lab. +[10] A pirate puppet with an eyepatch, safety goggles and a huge scraggly +mustache watches over a purple crystal ball at his feet.' He’s too much lab +assistant for your lab. - Some places not to use Rails can include: +Some places not to use Rails can include: - Really Small Tasks that Won’t Grow: if a server does very little, Rails - is often too much. Not going to touch a database? Then the DB setup - isn’t helping you, is it? Just a tiny low-traffic intermediate server - with no caching? A lot of Rails is more trouble than it’s worth. +Really Small Tasks that Won’t Grow: if a server does very little, Rails is +often too much. Not going to touch a database? Then the DB setup isn’t helping +you, is it? Just a tiny low-traffic intermediate server with no caching? A lot +of Rails is more trouble than it’s worth. - Be careful with tasks that grow, though — making a tiny server scale up - to do a lot more can be ugly. If you’re already serving HTTP pages to a - human with a web browser, consider that you may have to add features to - it later. Something like that is already fairly large from the word - “go”. +Be careful with tasks that grow, though — making a tiny server scale up to do a +lot more can be ugly. If you’re already serving HTTP pages to a human with a +web browser, consider that you may have to add features to it later. Something +like that is already fairly large from the word “go”. - When It’s ‘Just’ an API Server: Rails has less to offer an API server - that speaks JSON over the wire. A lot of its HTTP security doesn’t - matter for that case: CSRF protection is entirely about dealing with - HTML and Javascript. Many kinds of XSS attacks are dependent on a - browser as the weak link, or on putting unescaped user input into HTML. - Redirection vulnerabilities assume automatic redirection, which APIs - usually don’t do. You can prevent SQL injection attacks with just an - ORM, a simpler ORM, or even the raw Ruby MySQL and Postgres gems, which - support question-mark arguments. +When It’s ‘Just’ an API Server: Rails has less to offer an API server that +speaks JSON over the wire. A lot of its HTTP security doesn’t matter for that +case: CSRF protection is entirely about dealing with HTML and Javascript. Many +kinds of XSS attacks are dependent on a browser as the weak link, or on putting +unescaped user input into HTML. Redirection vulnerabilities assume automatic +redirection, which APIs usually don’t do. You can prevent SQL injection attacks +with just an ORM, a simpler ORM, or even the raw Ruby MySQL and Postgres gems, +which support question-mark arguments. - Rails security really shines when you’re navigating the bewildering - world of HTML and browser security. Small projects that mostly speak a - structured format read by machines will get less from Rails. Securing - something like an integer ID or a hash of strings is just easier than - ensuring your HTML contains no script tags or anything exploitable. +Rails security really shines when you’re navigating the bewildering world of +HTML and browser security. Small projects that mostly speak a structured format +read by machines will get less from Rails. Securing something like an integer +ID or a hash of strings is just easier than ensuring your HTML contains no +script tags or anything exploitable. - Related to that is when you’re doing in-browser rendering and Rails is - ‘just’ serving JSON. It’s a weird kind of in-between case. A lot of - Rails security and convenience functions no longer help you, but you’re - still doing things where internal libraries (ActiveRecord, ActiveJob, - ActionMailer) can be highly useful. But if you’re never rendering HTML - on the server and you’re very sure you never will, Rails will probably - help you less. +Related to that is when you’re doing in-browser rendering and Rails is ‘just’ +serving JSON. It’s a weird kind of in-between case. A lot of Rails security and +convenience functions no longer help you, but you’re still doing things where +internal libraries (ActiveRecord, ActiveJob, ActionMailer) can be highly +useful. But if you’re never rendering HTML on the server and you’re very sure +you never will, Rails will probably help you less. When Is Rails Not Enough? - Rails is also designed for a small team and a medium-sized codebase. A - huge team (lots of programmers) or a huge codebase (lots of - controllers, models and/or lines of code) will tend to drag down the - standard Rails-app structure. +Rails is also designed for a small team and a medium-sized codebase. A huge +team (lots of programmers) or a huge codebase (lots of controllers, models and/ +or lines of code) will tend to drag down the standard Rails-app structure. - Ruby allows for a lot of [11]non-local effects. Whether that’s - monkeypatching, writing to a database or creating new types at runtime, - Ruby isn’t designed for a team of 200 programmers where you don’t trust - some of them. There are too many ways for them to cause you trouble. - You can use [12]good tooling to scale Ruby to larger teams, but even - that will [13]tend to have exceptions and difficulties. That’s not - really Ruby’s sweet spot. +Ruby allows for a lot of [11]non-local effects. Whether that’s monkeypatching, +writing to a database or creating new types at runtime, Ruby isn’t designed for +a team of 200 programmers where you don’t trust some of them. There are too +many ways for them to cause you trouble. You can use [12]good tooling to scale +Ruby to larger teams, but even that will [13]tend to have exceptions and +difficulties. That’s not really Ruby’s sweet spot. - In most cases you can cut up a large project into smaller projects. If - one Rails app is too big, you can often separate it into multiple apps, - or a thinner app with more back-end services, or an app and a separate - microservice, or… One way or another there is usually a way to separate - out smaller pieces. Ruby strongly encourages that, as do I. +In most cases you can cut up a large project into smaller projects. If one +Rails app is too big, you can often separate it into multiple apps, or a +thinner app with more back-end services, or an app and a separate microservice, +or… One way or another there is usually a way to separate out smaller pieces. +Ruby strongly encourages that, as do I. - There are also not-quite-Rails structures that can scale better. Avdi - Grimm’s (now retired) [14]Objects on Rails was an attempt in that - direction, as is [15]the Hexagonal architecture for Rails, which in - turn has a lot in common with the older and more general [16]N-tier - architecture. +There are also not-quite-Rails structures that can scale better. Avdi Grimm’s +(now retired) [14]Objects on Rails was an attempt in that direction, as is [15] +the Hexagonal architecture for Rails, which in turn has a lot in common with +the older and more general [16]N-tier architecture. - But at some point you might want to consider a different framework. - [17]Hanami is an obvious choice, designed to be less quick and nimble - than Rails for getting a tiny app off the ground, but more scalable if - you want to use the same code with a lot more contributors. +But at some point you might want to consider a different framework. [17]Hanami +is an obvious choice, designed to be less quick and nimble than Rails for +getting a tiny app off the ground, but more scalable if you want to use the +same code with a lot more contributors. - I’d still start out in Rails, personally. If you’re building something - quickly to see if anybody cares, I know of no framework that comes - close to its productivity. Wait to rewrite (in a more rigid framework) - until you’re successful and you can afford the drag on your development - speed. +I’d still start out in Rails, personally. If you’re building something quickly +to see if anybody cares, I know of no framework that comes close to its +productivity. Wait to rewrite (in a more rigid framework) until you’re +successful and you can afford the drag on your development speed. - The other worry here can be performance. If you’re rewriting a project - that is already as large as the current Basecamp… then you’re - [18]actually fine for performance. Rails still scales great for them. - But if you’re looking at something a hundred times larger (which by - definition means B2C, not B2B) then you might have a situation where - your server costs are substantially greater than your engineering - payroll. In that case it can make sense to slow down your engineers to - pay lower server costs. To check this, see what your EC2-or-equivalent - costs are just for your application servers, which are what run Rails. - And check your payroll just for web engineers, which is who writes in - Rails. Normally the engineering payroll is much larger and you should - stick with trading cheap machine time for expensive engineering time. - But at some point the balance may tip and you should consider raising - your engineering payroll to cut your server costs. +The other worry here can be performance. If you’re rewriting a project that is +already as large as the current Basecamp… then you’re [18]actually fine for +performance. Rails still scales great for them. But if you’re looking at +something a hundred times larger (which by definition means B2C, not B2B) then +you might have a situation where your server costs are substantially greater +than your engineering payroll. In that case it can make sense to slow down your +engineers to pay lower server costs. To check this, see what your +EC2-or-equivalent costs are just for your application servers, which are what +run Rails. And check your payroll just for web engineers, which is who writes +in Rails. Normally the engineering payroll is much larger and you should stick +with trading cheap machine time for expensive engineering time. But at some +point the balance may tip and you should consider raising your engineering +payroll to cut your server costs. When Does Rails Have the Wrong Assumptions? - [19]A pirate, a bear and a chimp sit at a wicker table. The bear looks - into a very old-fashioned microscope as the other two look on. They’re - checking the microscope for real-world use cases where Rails might be - wrong. +[19] A pirate, a bear and a chimp sit at a wicker table. The bear looks into a +very old-fashioned microscope as the other two look on. They’re checking the +microscope for real-world use cases where Rails might be wrong. - Before checking if Rails’ assumptions are right for you, we should see - what those assumptions actually are. +Before checking if Rails’ assumptions are right for you, we should see what +those assumptions actually are. - Before you take my word for it, I recommend taking [20]David Heinemeier - Hansson’s word for it in the form of The Rails Doctrine. It’s a great - document and it covers a lot of ground. +Before you take my word for it, I recommend taking [20]David Heinemeier +Hansson’s word for it in the form of The Rails Doctrine. It’s a great document +and it covers a lot of ground. - Indeed, if you want to better understand why Rails isn’t amazing for - large, low-trust teams, you should read [21]“Provide Sharp Knives” in - the Rails Doctrine several times. A lot of Rails’ tradeoffs are - entirely by design. +Indeed, if you want to better understand why Rails isn’t amazing for large, +low-trust teams, you should read [21]“Provide Sharp Knives” in the Rails +Doctrine several times. A lot of Rails’ tradeoffs are entirely by design. - Rails also has some simpler assumptions: it assumes you’re writing an - interactive app with server-rendered HTML. It assumes that security is - vital (Rails trades a lot for security) but that you don’t want to - build your own custom security system in most cases. And it assumes - that you either have a small, excellent team doing prototyping work - (“Provide Sharp Knives”) or that you have a possibly-mediocre team that - needs powerful built-in guidelines ([22]“The Menu is Omakase.”) +Rails also has some simpler assumptions: it assumes you’re writing an +interactive app with server-rendered HTML. It assumes that security is vital +(Rails trades a lot for security) but that you don’t want to build your own +custom security system in most cases. And it assumes that you either have a +small, excellent team doing prototyping work (“Provide Sharp Knives”) or that +you have a possibly-mediocre team that needs powerful built-in guidelines ([22] +“The Menu is Omakase.”) - Rails also assumes you want high developer velocity at a cost of - technical debt. In other words, it’s designed for building very - quickly. That makes sense when technical execution is not your biggest - risk. For instance: if you’re building a small startup, and you’re - pretty sure you can build the site but people may not buy your product, - you are dominated by market risk. That’s when Rails is perfect. You - want to build very quickly. And even if you build perfectly, you’re - probably going to have to throw away the result for nontechnical - reasons, like “people don’t want to buy it.” +Rails also assumes you want high developer velocity at a cost of technical +debt. In other words, it’s designed for building very quickly. That makes sense +when technical execution is not your biggest risk. For instance: if you’re +building a small startup, and you’re pretty sure you can build the site but +people may not buy your product, you are dominated by market risk. That’s when +Rails is perfect. You want to build very quickly. And even if you build +perfectly, you’re probably going to have to throw away the result for +nontechnical reasons, like “people don’t want to buy it.” - As part of “high dev velocity, technical debt is okay” Rails assumes - things like, “you’ll want to use a lot of gems” and “dependencies that - work are fine if they speed you up.” +As part of “high dev velocity, technical debt is okay” Rails assumes things +like, “you’ll want to use a lot of gems” and “dependencies that work are fine +if they speed you up.” - Rails assumes you don’t mind scaling out application servers - horizontally (by bringing more of them online.) It’s designed to scale - well if you can do that. Rails assumes CPU is fairly cheap and it’s - usually right about that. Relatedly, Rails assumes that the database is - usually your most serious performance bottleneck, which is how web - applications usually work. +Rails assumes you don’t mind scaling out application servers horizontally (by +bringing more of them online.) It’s designed to scale well if you can do that. +Rails assumes CPU is fairly cheap and it’s usually right about that. Relatedly, +Rails assumes that the database is usually your most serious performance +bottleneck, which is how web applications usually work. - Rails also assumes you’ll have some calculation or data transformation - in your application. It assumes that it’s okay to use some CPU because - you’ll be doing that anyway. +Rails also assumes you’ll have some calculation or data transformation in your +application. It assumes that it’s okay to use some CPU because you’ll be doing +that anyway. - (When does that last assumption matter? Let’s talk about Evented - Servers and see.) +(When does that last assumption matter? Let’s talk about Evented Servers and +see.) What Isn’t Rails Good At? - [23]The Node.js logo. Sometimes you need it, or something like it. +[23] The Node.js logo. Sometimes you need it, or something like it. - While Rails is great at a lot of things, there’s one particular task - that it’s not amazing for: shim servers. +While Rails is great at a lot of things, there’s one particular task that it’s +not amazing for: shim servers. - By “shim servers” I mean servers that do very little calculation but - integrate answers from a few other back-end services and relay the - result. Imagine a server that queries two JSON services and combines - the result with simple string-manipulation, for instance. It does very - little calculation, but it juggles a lot of events. +By “shim servers” I mean servers that do very little calculation but integrate +answers from a few other back-end services and relay the result. Imagine a +server that queries two JSON services and combines the result with simple +string-manipulation, for instance. It does very little calculation, but it +juggles a lot of events. - And that’s the relevant word: “events.” +And that’s the relevant word: “events.” - There is a specific kind of app architecture embodied by Node.js and - its relatives called “Evented” programming. It can support many - thousands, or even millions, of simultaneous connections with a tiny - amount of server resources. It can be both high-throughput and - low-latency. Its benchmark numbers are matchless… for the cases where - it works. +There is a specific kind of app architecture embodied by Node.js and its +relatives called “Evented” programming. It can support many thousands, or even +millions, of simultaneous connections with a tiny amount of server resources. +It can be both high-throughput and low-latency. Its benchmark numbers are +matchless… for the cases where it works. - Rails can’t match Evented programming at what Evented programming is - good at. Basically no framework can. There are Evented frameworks for - Ruby (e.g. [24]EventMachine, [25]Async.) Rails is built differently. +Rails can’t match Evented programming at what Evented programming is good at. +Basically no framework can. There are Evented frameworks for Ruby (e.g. [24] +EventMachine, [25]Async.) Rails is built differently. - If Evented is so much better, why don’t we use it for everything? - Because it doesn’t work for everything. I emphasise calculation - per-request because an Evented server will fall down and die if you try - to make it do very much calculation per-request. Having one server - handle a million connections is no good if each connection winds up - using a hundred milliseconds of CPU time — that’s simply too many - connections and the latency will be terrible. +If Evented is so much better, why don’t we use it for everything? Because it +doesn’t work for everything. I emphasise calculation per-request because an +Evented server will fall down and die if you try to make it do very much +calculation per-request. Having one server handle a million connections is no +good if each connection winds up using a hundred milliseconds of CPU time — +that’s simply too many connections and the latency will be terrible. - In other words, Rails and Node.js are different tools for different - projects. If you’re thinking, “I should either use Rails or Node for - this” I would recommend looking deeper into your project (and/or your - framework) until it’s obvious which one is the right answer. They do - different things. +In other words, Rails and Node.js are different tools for different projects. +If you’re thinking, “I should either use Rails or Node for this” I would +recommend looking deeper into your project (and/or your framework) until it’s +obvious which one is the right answer. They do different things. Look, I Just Scroll to the Bottom for the Summary and Criticise It On Reddit - [26]A chimpanzee in a lab coat stares down at his lap, containing - sections of wooden train track, and his hand holding a toy train. I’m - sure this is the right answer, but I have forgotten the question. +[26] A chimpanzee in a lab coat stares down at his lap, containing sections of +wooden train track, and his hand holding a toy train. I’m sure this is the +right answer, but I have forgotten the question. - Rails is the wrong choice if your team doesn’t want to use it or - doesn’t know how. +Rails is the wrong choice if your team doesn’t want to use it or doesn’t know +how. - Rails is the wrong choice in cases where a different framework is - specifically better, or you have a specific library you need to be - compatible with that isn’t Rails-friendly. +Rails is the wrong choice in cases where a different framework is specifically +better, or you have a specific library you need to be compatible with that +isn’t Rails-friendly. - Rails might be the wrong choice if you’re not rendering HTML on the - server, especially if your project is very small and/or doesn’t use a - database. +Rails might be the wrong choice if you’re not rendering HTML on the server, +especially if your project is very small and/or doesn’t use a database. - Rails is the wrong choice is you’re not doing prototyping-flavoured - work, preferably with a small, highly-competent team. +Rails is the wrong choice is you’re not doing prototyping-flavoured work, +preferably with a small, highly-competent team. - Rails is the wrong choice if your dev team or your app code is too big - and you can’t subdivide the project. +Rails is the wrong choice if your dev team or your app code is too big and you +can’t subdivide the project. - Rails is the wrong choice if your project wants an Evented server like - Node.js or EventMachine. +Rails is the wrong choice if your project wants an Evented server like Node.js +or EventMachine. - This article is the wrong choice if you’d rather [27]listen to an - entertaining podcast on the same topic. +This article is the wrong choice if you’d rather [27]listen to an entertaining +podcast on the same topic. - If you’re wondering when Rails is the right choice, [28]the Rails - Doctrine is a great first step. - Aug 6 2020 - [29]ruby [30]rails +If you’re wondering when Rails is the right choice, [28]the Rails Doctrine is a +great first step. + +Aug 6 2020 +[29]ruby [30]rails You Hunger to Get Better - Subscribe to get free ebook chapters and an emailed coding class now, - plus videos and articles a few times a month. +Subscribe to get free ebook chapters and an emailed coding class now, plus +videos and articles a few times a month. - Why this specific newsletter? You want to be an expert. Expertise comes - from learning the fundamentals, deeply. And that comes from the best - kind of practice. I write with that in mind. I won't waste your time. +Why this specific newsletter? You want to be an expert. Expertise comes from +learning the fundamentals, deeply. And that comes from the best kind of +practice. I write with that in mind. I won't waste your time. - (Yes, I also sell things. They're good, but I'm fine if you don't buy - them.) - ____________________ ____________________ (BUTTON) Sign-up +(Yes, I also sell things. They're good, but I'm fine if you don't buy them.) +[32][ ][33][ ] Sign-up Comments - Please enable JavaScript to view the [31]comments powered by Disqus. - [32]comments powered by Disqus +Please enable JavaScript to view the [35]comments powered by Disqus. [36] +comments powered by Disqus Read Next -[33]Computer Science: Just the Useful Bits +[37]Computer Science: Just the Useful Bits - [34]ruby [35]rails - [36]Computer Science: Just the Useful Bits +[38]ruby [39]rails -[37]Let's Build Course Software: Email Reminders +[40] Computer Science: Just the Useful Bits - [38]ruby [39]rails [40]letsbuild [41]rubymadscience - [42]Let's Build Course Software: Email Reminders +[41]Let's Build Course Software: Email Reminders -[43]Free Rebuilding Rails Video Chapters +[42]ruby [43]rails [44]letsbuild [45]rubymadscience - [44]career +[46] Let's Build Course Software: Email Reminders -[45]The Urban Legend of the 10X Developer +[47]Free Rebuilding Rails Video Chapters - [46]career - [47]The Urban Legend of the 10X Developer +[48]career - [48]Mastodon [49]GitHub [50]Linkedin [51]Mastodon +[49]The Urban Legend of the 10X Developer - [52]Codefol.io © 2020 . Horace theme by [53]JustGoodThemes.. +[50]career - [54]Back to top +[51] The Urban Legend of the 10X Developer -References +[52] Mastodon [53] GitHub [54] Linkedin [55]Mastodon - 1. https://codefol.io/ - 2. https://codefol.io/ - 3. https://codefol.io/posts - 4. https://codefol.io/topics - 5. https://codefol.io/tags/favourite - 6. https://codefol.io/feed.xml - 7. https://codefol.io/about - 8. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ - 9. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ - 10. https://rubymadscience.com/img/assistant_pirate_with_sphere_bigthumb.png - 11. https://en.wikipedia.org/wiki/Side_effect_(computer_science) - 12. https://sorbet.org/ - 13. https://sorbet.org/docs/troubleshooting#escape-hatches - 14. https://www.goodreads.com/book/show/13481927-objects-on-rails - 15. https://medium.com/@vsavkin/hexagonal-architecture-for-rails-developers-8b1fee64a613 - 16. https://en.wikipedia.org/wiki/Multitier_architecture - 17. https://hanamirb.org/ - 18. https://m.signalvnoise.com/only-15-of-the-basecamp-operations-budget-is-spent-on-ruby/ - 19. https://rubymadscience.com/img/dr_bear_microscope_bigthumb.png - 20. https://rubyonrails.org/doctrine/ - 21. https://rubyonrails.org/doctrine/#provide-sharp-knives - 22. https://rubyonrails.org/doctrine/#omakase - 23. https://codefol.io/posts/when-should-you-not-use-rails/node_js_logo.png - 24. https://github.com/eventmachine/eventmachine - 25. https://github.com/socketry/async - 26. http://rubymadscience.com/img/rails_internals_bigthumb.png - 27. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ - 28. https://rubyonrails.org/doctrine/ - 29. https://codefol.io/tags/ruby/ - 30. https://codefol.io/tags/rails/ - 31. http://disqus.com/?ref_noscript - 32. http://disqus.com/ - 33. https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/ - 34. https://codefol.io/tags/ruby/ - 35. https://codefol.io/tags/rails/ - 36. https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/ - 37. https://codefol.io/posts/series-build-coding-course-email-reminders/ - 38. https://codefol.io/tags/ruby/ - 39. https://codefol.io/tags/rails/ - 40. https://codefol.io/tags/letsbuild/ - 41. https://codefol.io/tags/rubymadscience/ - 42. https://codefol.io/posts/series-build-coding-course-email-reminders/ - 43. https://codefol.io/posts/free-rr-video-chapters/ - 44. https://codefol.io/tags/career/ - 45. https://codefol.io/posts/urban-legend-of-the-10x-developer/ - 46. https://codefol.io/tags/career/ - 47. https://codefol.io/posts/urban-legend-of-the-10x-developer/ - 48. https://ruby.social/@codefolio - 49. https://github.com/noahgibbs - 50. https://www.linkedin.com/in/noahgibbs - 51. https://ruby.social/@codefolio - 52. https://codefol.io/posts/when-should-you-not-use-rails/ - 53. https://justgoodthemes.com/ - 54. https://codefol.io/posts/when-should-you-not-use-rails/#page +[56]Codefol.io © 2020 . Horace theme by [57]JustGoodThemes.. + +[58] Back to top + + +References: + +[1] https://codefol.io/ +[2] https://codefol.io/ +[3] https://codefol.io/posts +[4] https://codefol.io/topics +[5] https://codefol.io/tags/favourite +[6] https://codefol.io/feed.xml +[7] https://codefol.io/about +[8] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ +[9] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ +[10] https://rubymadscience.com/img/assistant_pirate_with_sphere_bigthumb.png +[11] https://en.wikipedia.org/wiki/Side_effect_(computer_science) +[12] https://sorbet.org/ +[13] https://sorbet.org/docs/troubleshooting#escape-hatches +[14] https://www.goodreads.com/book/show/13481927-objects-on-rails +[15] https://medium.com/@vsavkin/hexagonal-architecture-for-rails-developers-8b1fee64a613 +[16] https://en.wikipedia.org/wiki/Multitier_architecture +[17] https://hanamirb.org/ +[18] https://m.signalvnoise.com/only-15-of-the-basecamp-operations-budget-is-spent-on-ruby/ +[19] https://rubymadscience.com/img/dr_bear_microscope_bigthumb.png +[20] https://rubyonrails.org/doctrine/ +[21] https://rubyonrails.org/doctrine/#provide-sharp-knives +[22] https://rubyonrails.org/doctrine/#omakase +[23] https://codefol.io/posts/when-should-you-not-use-rails/node_js_logo.png +[24] https://github.com/eventmachine/eventmachine +[25] https://github.com/socketry/async +[26] http://rubymadscience.com/img/rails_internals_bigthumb.png +[27] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/ +[28] https://rubyonrails.org/doctrine/ +[29] https://codefol.io/tags/ruby/ +[30] https://codefol.io/tags/rails/ +[35] http://disqus.com/?ref_noscript +[36] http://disqus.com/ +[37] https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/ +[38] https://codefol.io/tags/ruby/ +[39] https://codefol.io/tags/rails/ +[40] https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/ +[41] https://codefol.io/posts/series-build-coding-course-email-reminders/ +[42] https://codefol.io/tags/ruby/ +[43] https://codefol.io/tags/rails/ +[44] https://codefol.io/tags/letsbuild/ +[45] https://codefol.io/tags/rubymadscience/ +[46] https://codefol.io/posts/series-build-coding-course-email-reminders/ +[47] https://codefol.io/posts/free-rr-video-chapters/ +[48] https://codefol.io/tags/career/ +[49] https://codefol.io/posts/urban-legend-of-the-10x-developer/ +[50] https://codefol.io/tags/career/ +[51] https://codefol.io/posts/urban-legend-of-the-10x-developer/ +[52] https://ruby.social/@codefolio +[53] https://github.com/noahgibbs +[54] https://www.linkedin.com/in/noahgibbs +[55] https://ruby.social/@codefolio +[56] https://codefol.io/posts/when-should-you-not-use-rails/# +[57] https://justgoodthemes.com/ +[58] https://codefol.io/posts/when-should-you-not-use-rails/#page diff --git a/static/archive/craigmod-com-xfi1ge.txt b/static/archive/craigmod-com-xfi1ge.txt index fd56bdf..2fca1a2 100644 --- a/static/archive/craigmod-com-xfi1ge.txt +++ b/static/archive/craigmod-com-xfi1ge.txt @@ -1,406 +1,403 @@ - #[1]Craig Mod — Writer + Photographer - - [2]About Craig - [3]Books & [4]Essays - [5]Membership - [6]Shop! - [7]“Special Projects” Membership - Podcasts:🎧 [8]On Margins & [9]SW945 - [10]Newsletters:📩 [11]Roden & [12]Ridgeline - - Header image for Electric Bike, Stupid Love of My Life - +[1] +[2]About Craig +[3]Books & [4]Essays +[5]Membership +[6]Shop! +[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 + 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? +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. +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. - 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. - __________________________________________________________________ +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. - Indulge me — a summer afternoon: Soaring down the coast, the ocean to - one side and a strand of old pines to the other. The afternoon sun - beats down but it feels cool and there’s something irrationally - stirring — downright emotional — about the efficiency of this dumb - machine beneath my body. The motor looks too small — just a black - cylinder on the hub of the wheel. And yet it moves. It sings that song. - A subtle hum. A beautiful hum. It makes me want to ride and ride, - ridiculous distances, nonsensical distances. I don’t want to get to - where I’m going because I want the ride to last longer. I want to - linger in this space as long as possible, this space of smooth and - efficient movement through the world, gliding in near total mechanical - silence, just the sound of rubber on the pavement, wind in my ears, - breaking waves, salt, the smell of pine. This is what electric bikes - do: They drive you insane with the poetry of the world. - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - A strange trio A few of my old bikes: A mamachari, carbon fiber road - bike, and Kalavinka +Indulge me — a summer afternoon: Soaring down the coast, the ocean to one side +and a strand of old pines to the other. The afternoon sun beats down but it +feels cool and there’s something irrationally stirring — downright emotional — +about the efficiency of this dumb machine beneath my body. The motor looks too +small — just a black cylinder on the hub of the wheel. And yet it moves. It +sings that song. A subtle hum. A beautiful hum. It makes me want to ride and +ride, ridiculous distances, nonsensical distances. I don’t want to get to where +I’m going because I want the ride to last longer. I want to linger in this +space as long as possible, this space of smooth and efficient movement through +the world, gliding in near total mechanical silence, just the sound of rubber +on the pavement, wind in my ears, breaking waves, salt, the smell of pine. This +is what electric bikes do: They drive you insane with the poetry of the world. -[13]#So Many Bikes +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +A strange trio A few of my old bikes: A mamachari, carbon fiber road bike, and +Kalavinka - All my standing life, I’ve biked. As a kid I rode a K-Mart Huffy to a - rusted nub and then managed to nab a Haro Group 1. As an adult, bikes - have been one of my few material indulgences (unwittingly, - organically). In the past twenty years alone I’ve owned some fifteen - bikes. I’ve had aluminum and carbon Bianchi road bikes. I’ve had steel - Kalavinka keirin bikes with gorgeous head badges. I’ve had folding - Dahon and Birdy BD-1s. I’ve had a handful of beloved brandless - throwaway mamacharis — shopping bikes — that have proven hearty and fun - in their own ways, and have each died uniquely. I’ve gone out of my way - to get a handmade Arrow cruiser from a builder in Ogikubo. I still have - a custom orange Moulton that I’ve modified into a single-speed city - bomber that goes remarkably fast while floating atop its simple - suspension. +[16]#So Many Bikes - And on and on — bikes. Why? Because as any bike lover will tell you, to - be ensorcelled by the bike is to crave one and only one thing: More - bike. Each new bike is like riding once again for the first time. - Exploring a city on a mamachari is different than a BD-1 is different - than a Moulton. All thrilling. The bikes change, and so, too does your - relationship to the pavement. My love for bikes has no categorical - allegiances; if it has two wheels, and pedals, I’m interested. I want - to ride them all. - A Moulton Tiny, but fast, nearly flawless as a city machine — a Moulton - with converted stem, Sugino cranks, coaster brake - __________________________________________________________________ +All my standing life, I’ve biked. As a kid I rode a K-Mart Huffy to a rusted +nub and then managed to nab a Haro Group 1. As an adult, bikes have been one of +my few material indulgences (unwittingly, organically). In the past twenty +years alone I’ve owned some fifteen bikes. I’ve had aluminum and carbon Bianchi +road bikes. I’ve had steel Kalavinka keirin bikes with gorgeous head badges. +I’ve had folding Dahon and Birdy BD-1s. I’ve had a handful of beloved brandless +throwaway mamacharis — shopping bikes — that have proven hearty and fun in +their own ways, and have each died uniquely. I’ve gone out of my way to get a +handmade Arrow cruiser from a builder in Ogikubo. I still have a custom orange +Moulton that I’ve modified into a single-speed city bomber that goes remarkably +fast while floating atop its simple suspension. - Summers in most of Japan have never been easy. The temperatures England - flirted with in 2022 are temperatures Tokyoites have contended with for - centuries (and now contend with ones even higher). Crushing heat - coupled with suffocating humidity. A three-shower-a-day kinda summer. - Watch an Ozu film and observe the languid and supine impulse of its - inhabitants during summertime scenes — that’s not affect, it’s - survival. In Japan’s August, you simply can’t walk a block without - losing most of your moisture. +And on and on — bikes. Why? Because as any bike lover will tell you, to be +ensorcelled by the bike is to crave one and only one thing: More bike. Each new +bike is like riding once again for the first time. Exploring a city on a +mamachari is different than a BD-1 is different than a Moulton. All thrilling. +The bikes change, and so, too does your relationship to the pavement. My love +for bikes has no categorical allegiances; if it has two wheels, and pedals, I’m +interested. I want to ride them all. - 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. +A Moulton Tiny, but fast, nearly flawless as a city machine — a Moulton with +converted stem, Sugino cranks, coaster brake +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - When I was a child I dreamt of having a personal helicopter. Powered by - my feet and a bit of magic (certainly not gasoline, oddly, thinking - back on it now). I imagined quietly gliding over the city in this tiny - contraption, floating from home to video rental shop to diner, stopping - by a friend’s house along the way. An electric bike gets me most of the - way to this feeling. +Summers in most of Japan have never been easy. The temperatures England flirted +with in 2022 are temperatures Tokyoites have contended with for centuries (and +now contend with ones even higher). Crushing heat coupled with suffocating +humidity. A three-shower-a-day kinda summer. Watch an Ozu film and observe the +languid and supine impulse of its inhabitants during summertime scenes — that’s +not affect, it’s survival. In Japan’s August, you simply can’t walk a block +without losing most of your moisture. - In the past eighteen months I’ve put several thousand kilometers on my - electric bikes. It feels like cheating in every best possible way. I - live in a seaside town south of Tokyo and traffic can get ridiculous, - its ancient roads sized for horses, not cars. The electric bike swoops - between and alongside these stale processions of heat and burning fuel. - Drifting behind a gas-powered scooter or moped feels like observing - some Victorian contraption — inefficient and loud and clunky and - burdensome and pollutant. And not much faster (often much slower) or - more useful than an electric bike. - __________________________________________________________________ +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. - A Vanmoof and a BESV My friend's S3 and my BESV (the X3 looks like a - slightly smaller version of the S3) +When I was a child I dreamt of having a personal helicopter. Powered by my feet +and a bit of magic (certainly not gasoline, oddly, thinking back on it now). I +imagined quietly gliding over the city in this tiny contraption, floating from +home to video rental shop to diner, stopping by a friend’s house along the way. +An electric bike gets me most of the way to this feeling. -[14]#Electrics +In the past eighteen months I’ve put several thousand kilometers on my electric +bikes. It feels like cheating in every best possible way. I live in a seaside +town south of Tokyo and traffic can get ridiculous, its ancient roads sized for +horses, not cars. The electric bike swoops between and alongside these stale +processions of heat and burning fuel. Drifting behind a gas-powered scooter or +moped feels like observing some Victorian contraption — inefficient and loud +and clunky and burdensome and pollutant. And not much faster (often much +slower) or more useful than an electric bike. - I own two electric bikes. My first purchase was the strangely named - BESV PSA1 — which is a smaller wheeled (20"), rear-wheel drive machine, - with mostly off-the-shelf components allowing you to customize it to - your liking. ^[15]1 And then, because I was so enamored by the BESV — - so seduced by its small motor of umph, so wanting more and different - electric bike experiences — I went and picked up a front-wheel drive - Vanmoof X3 — the smaller-wheeled brother (24") to Vanmoof’s (quite - frankly) giant S3 — just a few months later. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +A Vanmoof and a BESV My friend's S3 and my BESV (the X3 looks like a slightly +smaller version of the S3) - I love them both like damaged brothers, because both of these bikes are - flawed in frustrating ways. +[17]#Electrics - The electronic brain on the BESV is as dumb as they come.^[16]2 The - settings reset each time you turn the bike on. The acceleration curves - feel unrefined — herky-jerky, you might say. Its app is the worst app I - have on my phone — badly designed, nearly functionally useless, clearly - engineered without love. And yet. Despite these flaws I put hundreds of - kilometers on this thing in the first month. The front and rear - suspension turn every road to glass, and are even fine for dirt trails; - I find myself hunting down paths through parks I’d never otherwise - think about. Suddenly every hilly road is a thing demanding to be - explored. Up up up the little machine yells, and you follow its - command. +I own two electric bikes. My first purchase was the strangely named BESV PSA1 — +which is a smaller wheeled (20"), rear-wheel drive machine, with mostly +off-the-shelf components allowing you to customize it to your liking. ^[18]1 +And then, because I was so enamored by the BESV — so seduced by its small motor +of umph, so wanting more and different electric bike experiences — I went and +picked up a front-wheel drive Vanmoof X3 — the smaller-wheeled brother (24") to +Vanmoof’s (quite frankly) giant S3 — just a few months later. - 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 love them both like damaged brothers, because both of these bikes are flawed +in frustrating ways. - The Vanmoof is much smarter — the brain and software within it are - refined, the app good, the acceleration curves smooth — but the bike is - all custom components, and they aren’t the highest quality at that. The - automatic shifting mechanism on mine failed twice in the first two - months, requiring shipping the bike to the Vanmoof store.^[17]3 The - seat post bolt broke off in the post. The original plastic pedals felt - cheap and flimsy (pedals are one of the few things you can swap for - your own). The aluminum frame is too stiff for the speed the bike - generates — it can feel like you’ve been rattled to death after a bumpy - 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. +The electronic brain on the BESV is as dumb as they come.^[19]2 The settings +reset each time you turn the bike on. The acceleration curves feel unrefined — +herky-jerky, you might say. Its app is the worst app I have on my phone — badly +designed, nearly functionally useless, clearly engineered without love. And +yet. Despite these flaws I put hundreds of kilometers on this thing in the +first month. The front and rear suspension turn every road to glass, and are +even fine for dirt trails; I find myself hunting down paths through parks I’d +never otherwise think about. Suddenly every hilly road is a thing demanding to +be explored. Up up up the little machine yells, and you follow its command. - Of all my many, many bikes, I’ve never had a pedal bottom out. On this - Vanmoof X3? Dozens of times. Most critically during a turn at speed — - the pedal hit the pavement, jumped the bike sideways, and sent me - flying. It’s the only bad crash I’ve had in decades. So I’ve had to - modify the way I ride — no pedaling into or out of turns, hyper - awareness of deviations in lateral road slope — because, despite all - this, I can’t stop riding this stupid thing. It sings — that hum. It is - joy. I reach for it daily and it takes me around the peninsula and - makes me happy to be alive. - __________________________________________________________________ +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. - BESV @ Lee's Bread, Oiso I've written about three electric bike rides - for Papersky Magazine: Misaki, Oiso, and Yokosuka. +The Vanmoof is much smarter — the brain and software within it are refined, the +app good, the acceleration curves smooth — but the bike is all custom +components, and they aren’t the highest quality at that. The automatic shifting +mechanism on mine failed twice in the first two months, requiring shipping the +bike to the Vanmoof store.^[20]3 The seat post bolt broke off in the post. The +original plastic pedals felt cheap and flimsy (pedals are one of the few things +you can swap for your own). The aluminum frame is too stiff for the speed the +bike generates — it can feel like you’ve been rattled to death after a bumpy +road. (And stiffness mitigation by lowering tire pressure seems to only +increase possibility of puncture.) But, more than all that, the design of the +bike has a dangerous fundamental flaw: The bottom bracket is simply too low. - Allow me to share a dirty secret: More often than not, at midnight I - can’t repress the impulse — I have to take a bike out. Out the bike - comes and together we head into the empty streets of my town and hum - our way all over, visiting temples in total silence. There are no cars. - Often no people. It feels illicit — this slipping around town, this - sliding into temple parking lots in the shroud of the night, looking at - their old beams, feeling ten years old and grateful for both the - ability and awareness to be doing just this very thing at this very - moment. - __________________________________________________________________ +Of all my many, many bikes, I’ve never had a pedal bottom out. On this Vanmoof +X3? Dozens of times. Most critically during a turn at speed — the pedal hit the +pavement, jumped the bike sideways, and sent me flying. It’s the only bad crash +I’ve had in decades. So I’ve had to modify the way I ride — no pedaling into or +out of turns, hyper awareness of deviations in lateral road slope — because, +despite all this, I can’t stop riding this stupid thing. It sings — that hum. +It is joy. I reach for it daily and it takes me around the peninsula and makes +me happy to be alive. - I’ve long since posited world peace could be achieved if you bought - everyone in the world a bike, but now I want those bikes to be - electric. I want everyone to feel this silliness, this punch-drunk - stupidity of pure love, this sense of cheating the rules, the norms, - this sense of ever-present delight. At our worst, humans mindlessly - consume, sear the earth and each other, fill our bodies with poisons. - At our best we invent electric bikes. Batteries have gotten more - efficient, motors smaller and more powerful. The last decade has - brought great efficiency to these machines, and the next ten years will - only double down on these gains. Electric bike numbers are up, year - over year over year. Tremendously so. Those who know, proselytize. We - can’t help it. The charm is too great. The game non- zero sum. The more - people who know, the better the world. It’s a wild notion, this sense - of goodness to be had if you just reach out for it. Goodness with no - real downside. Like solar panels or wind turbines, electric bikes are - machines that buoy the spirit and the earth. - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +BESV @ Lee's Bread, Oiso I've written about three electric bike rides for +Papersky Magazine: Misaki, Oiso, and Yokosuka. - Buy the best electric bike you can within your budget. Stretch if - possible. Usually, the more you spend the lighter the machine, the more - powerful the motor, the longer-lasting the battery. Depending on which - country you live in top speeds will differ. In Japan the bike’s are - capped at 24km/h. In America, 32km/h. Some places only allow for - pedal-assist — meaning the motor only works when pedaling. Others allow - throttles, blurring the line between bike and scooter. Laws will change - in the coming years as more people adopt the machines and cities - themselves adapt. This is just the start. Ten years ago it was fairly - rare to see an electric bike around Tokyo. Today, it seems as if every - parent hauling their kids is doing so electrically. +Allow me to share a dirty secret: More often than not, at midnight I can’t +repress the impulse — I have to take a bike out. Out the bike comes and +together we head into the empty streets of my town and hum our way all over, +visiting temples in total silence. There are no cars. Often no people. It feels +illicit — this slipping around town, this sliding into temple parking lots in +the shroud of the night, looking at their old beams, feeling ten years old and +grateful for both the ability and awareness to be doing just this very thing at +this very moment. - A good strategy: Find a local bike shop that will let you try out - several electric bikes. Some have front-hub motors, others rear-hub - motors. Others, the motor sits in the center, between the cranks. Each - has a subtly different feel. Going up a hill, a front-motor’d machine - may skip or slip as you pull back on the handlebars, but on flat land - will feel more like being tugged through the world. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Sure, electric bikes aren’t cheap. But I believe they’re a rare object - to be well worth the cost. This in spite of their annoying flaws, their - often bad software, their defective geometries. Because they open the - world. Whatever world may have been nearby, an electric bike brings it - nearer. This is worth more than you might estimate. These bikes sing - their little songs and the smile on your face makes you look like a - village idiot, but what a wonderful idiot to be. - __________________________________________________________________ +I’ve long since posited world peace could be achieved if you bought everyone in +the world a bike, but now I want those bikes to be electric. I want everyone to +feel this silliness, this punch-drunk stupidity of pure love, this sense of +cheating the rules, the norms, this sense of ever-present delight. At our +worst, humans mindlessly consume, sear the earth and each other, fill our +bodies with poisons. At our best we invent electric bikes. Batteries have +gotten more efficient, motors smaller and more powerful. The last decade has +brought great efficiency to these machines, and the next ten years will only +double down on these gains. Electric bike numbers are up, year over year over +year. Tremendously so. Those who know, proselytize. We can’t help it. The charm +is too great. The game non- zero sum. The more people who know, the better the +world. It’s a wild notion, this sense of goodness to be had if you just reach +out for it. Goodness with no real downside. Like solar panels or wind turbines, +electric bikes are machines that buoy the spirit and the earth. - 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: - __________________________________________________________________ +Buy the best electric bike you can within your budget. Stretch if possible. +Usually, the more you spend the lighter the machine, the more powerful the +motor, the longer-lasting the battery. Depending on which country you live in +top speeds will differ. In Japan the bike’s are capped at 24km/h. In America, +32km/h. Some places only allow for pedal-assist — meaning the motor only works +when pedaling. Others allow throttles, blurring the line between bike and +scooter. Laws will change in the coming years as more people adopt the machines +and cities themselves adapt. This is just the start. Ten years ago it was +fairly rare to see an electric bike around Tokyo. Today, it seems as if every +parent hauling their kids is doing so electrically. - 1. I upgraded my BESV to an SRAM drivetrain and Paul brake levers and - Klamper disc calipers, some MKS pedals, and a set of Brooks grips - and saddle and it feels wonderful through and through. These Paul - Klampers are mechanical. The Vanmoof uses (generic?) hydraulic - brakes. After thousands of kilometers, my conclusion is: hydraulics - feel nice, but they are fussy (and perhaps Vanmoof’s chosen - components are sub-optimal) and difficult (?) to tune on your own. - In the end, I just don’t think they’re worth it. Too “delicate.” - The Pauls feel as fresh today as the day I put them on, whereas the - hydraulics have required much bikeshop tuning over the course of - the last eighteen months. Were the Vanmoof more flexible, I’d - happily swap out for mechanicals. This lack of flexibility is a - bummer because, unlike an Apple iPhone, for example, where the - components tend to be best of class (think: modem, CPU, camera - unit, etc), the physical components on a Vanmoof most definitely - aren’t — nor do they offer the option to pay more to get better - components. [19]↩︎ - 2. Oh, how I wish this thing was open source, hackable — because it’s - so close to great. Sadly — and I don’t know how else to frame this - — it feels like the engineers behind the software don’t ride bikes. - At least not this one. The software flaws are so fundamentally - obvious, that anyone who had a) access to the code, and b) rode the - bike, couldn’t NOT fix these obvious issues. What I really wish, - though, is that I could slap the Vanmoof brain onto the BESV body - and, well, then we’d be in Electric Bike Elysium. [20]↩︎ - 3. I’ve since learned — the drive train of the Vanmoof is not to be - “ridden” like a “bike” but rather, “feathered” like a delicate sand - castle — assume the gears could explode at any moment and apply the - least amount of pressure you can; the motor is strong enough to - take care of most of the rest. In this way, the Vanmoof feels more - like a moped that uses “pedal assist” as a suggestion than a pure - electric-assist bike — a smart way to get around motorcycle laws in - most countries, which I assume is the main point. Not to say you - don’t get a workout on the Vanmoof, you do, but not nearly as much - as the more classically committed BESV — which really does require - you to pedal. - Maybe this is a good place to bring up the question: Why not just - get an electric scooter? I think it mainly comes down to - flexibility and philosophy. With a pedal assist bike (even if the - pedaling required is minimal) you simply have more flexibility in - parking, in riding, in “lightness” of transportation, than with an - electric scooter. Also: Insurance costs, maintenance, and higher - base cost. And philosophically, being able to still use the bike as - a “bike” without power feels like an aspect of these machines we - shouldn’t be so quick to toss aside. [21]↩︎ +A good strategy: Find a local bike shop that will let you try out several +electric bikes. Some have front-hub motors, others rear-hub motors. Others, the +motor sits in the center, between the cranks. Each has a subtly different feel. +Going up a hill, a front-motor’d machine may skip or slip as you pull back on +the handlebars, but on flat land will feel more like being tugged through the +world. - This essay, published September 2022. Thoughts? Email - [22]me@craigmod.com. - [23]Craig Mod, his head, floating at the bottom of the article +Sure, electric bikes aren’t cheap. But I believe they’re a rare object to be +well worth the cost. This in spite of their annoying flaws, their often bad +software, their defective geometries. Because they open the world. Whatever +world may have been nearby, an electric bike brings it nearer. This is worth +more than you might estimate. These bikes sing their little songs and the smile +on your face makes you look like a village idiot, but what a wonderful idiot to +be. - [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. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - He writes newsletters, oh yes, [27]newsletters: [28]Roden & - [29]Ridgeline. +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. - The work on this site is supported in part by [30]paid memberships. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Whatever you do, don't follow @craigmod on [31]Threads or - [32]Instagram. +[21]#Noted: + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 1. I upgraded my BESV to an SRAM drivetrain and Paul brake levers and Klamper + disc calipers, some MKS pedals, and a set of Brooks grips and saddle and it + feels wonderful through and through. These Paul Klampers are mechanical. + The Vanmoof uses (generic?) hydraulic brakes. After thousands of + kilometers, my conclusion is: hydraulics feel nice, but they are fussy (and + perhaps Vanmoof’s chosen components are sub-optimal) and difficult (?) to + tune on your own. In the end, I just don’t think they’re worth it. Too + “delicate.” The Pauls feel as fresh today as the day I put them on, whereas + the hydraulics have required much bikeshop tuning over the course of the + last eighteen months. Were the Vanmoof more flexible, I’d happily swap out + for mechanicals. This lack of flexibility is a bummer because, unlike an + Apple iPhone, for example, where the components tend to be best of class + (think: modem, CPU, camera unit, etc), the physical components on a Vanmoof + most definitely aren’t — nor do they offer the option to pay more to get + better components. [22]↩︎ + + 2. Oh, how I wish this thing was open source, hackable — because it’s so close + to great. Sadly — and I don’t know how else to frame this — it feels like + the engineers behind the software don’t ride bikes. At least not this one. + The software flaws are so fundamentally obvious, that anyone who had a) + access to the code, and b) rode the bike, couldn’t NOT fix these obvious + issues. What I really wish, though, is that I could slap the Vanmoof brain + onto the BESV body and, well, then we’d be in Electric Bike Elysium. [23]↩︎ + + 3. I’ve since learned — the drive train of the Vanmoof is not to be “ridden” + like a “bike” but rather, “feathered” like a delicate sand castle — assume + the gears could explode at any moment and apply the least amount of + pressure you can; the motor is strong enough to take care of most of the + rest. In this way, the Vanmoof feels more like a moped that uses “pedal + assist” as a suggestion than a pure electric-assist bike — a smart way to + get around motorcycle laws in most countries, which I assume is the main + point. Not to say you don’t get a workout on the Vanmoof, you do, but not + nearly as much as the more classically committed BESV — which really does + require you to pedal. + + Maybe this is a good place to bring up the question: Why not just get an + electric scooter? I think it mainly comes down to flexibility and + philosophy. With a pedal assist bike (even if the pedaling required is + minimal) you simply have more flexibility in parking, in riding, in + “lightness” of transportation, than with an electric scooter. Also: + Insurance costs, maintenance, and higher base cost. And philosophically, + being able to still use the bike as a “bike” without power feels like an + aspect of these machines we shouldn’t be so quick to toss aside. [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 +Join some ~30,000 other subscribers. +[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 +[44] + -An endless, gritty, very spitty walk +The Buzz Cut -Good walks benefit from context. +You'd think a buzz would be a buzz would be a buzz + +[45] + + +Walking Around Kan Yasuda's Sculptures + +Exploring Arte Piazza in Hokkaido + +[46] + + +Pop-Up Walk + +What does a pop-up walk look like? + +[47] + + +Stab a Book, the Book Won't Die + +On the resilience of books in the face of apps, attention monsters, and an +ad-driven online economy + +[48][ ] + +Produced / written / maintained by [49]Craig Mod since 2002 + +[50] [51] [52] [53] + +[piwik] -How I Got My Attention Back +References: -Technology is commanding our attention in infinite, insurmountable loops. A -country trip off-grid helped me escape. - - -Annapurna Moonrise - -A night on Annapurna basecamp - - -The Leica Q - -A six month field test — by Craig Mod - - ____________________ - - Produced / written / maintained by [35]Craig Mod since 2002 - -References - - 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/ - - 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 +[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 diff --git a/static/archive/crawshaw-io-k5slfj.txt b/static/archive/crawshaw-io-k5slfj.txt index bb3ffe2..42b413a 100644 --- a/static/archive/crawshaw-io-k5slfj.txt +++ b/static/archive/crawshaw-io-k5slfj.txt @@ -1,103 +1,89 @@ - #[1]crawshaw.io atom feed - One process programming notes (with Go and SQLite) - 2018 July 30 +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. +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. +Rather than talk through SQLite in the abstract, let me show it to you. + +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. - 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. $ 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. +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,83 +95,82 @@ 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: - 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: - 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" -; +Now we can search for our soliloquy: + +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? +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. +That should give you a feel for the i-t-e of SQLite. - And scene. +And scene. 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,69 +197,67 @@ 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) } fmt.Printf("%s %d:%d: %q\n", play, act, scene, text) } - Executing it yields: +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. +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. - In practice, this means if you develop on macOS you need to install a - cross-compiler for linux. +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. +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 - I claim typical services do not hit this scaling limit. +That is a huge potential downside of of one process programming. However, I +claim that is a livable 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. +I claim typical services do not hit this scaling limit. - 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. +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. - 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. +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. - The principle at work here is: +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. - Donʼt use N computers when 1 will do. +The principle at work here is: - To go into a bit more technical detail, +Don't use N computers when 1 will do. - 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. +To go into a bit more technical detail, - 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. +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 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 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 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 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 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 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.) - 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. +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. - 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. +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. - Now to talk a little more about the particulars of the stack: +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? +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. +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. - 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. +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. 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 - david@zentus.com +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[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 diff --git a/static/archive/deadspin-com-cjpmjw.txt b/static/archive/deadspin-com-cjpmjw.txt index 1104d08..c380dc0 100644 --- a/static/archive/deadspin-com-cjpmjw.txt +++ b/static/archive/deadspin-com-cjpmjw.txt @@ -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 - We may earn a commission from links on this page +[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 - Locker +[53] +Locker Spend Exactly None Of Your Time Killing Time - By - [52]Chris Thompson - PublishedJanuary 25, 2019 - We may earn a commission from links on this page. - Image for article titled Spend Exactly None Of Your Time Killing Time - Illustration: Chelsea Beck (GMG) +By +[54]Chris Thompson +PublishedJanuary 25, 2019 +We may earn a commission from links on this page. +[55][56][57][58][59] +Image for article titled Spend Exactly None Of Your Time Killing Time +Illustration: Chelsea Beck (GMG) - Here’s a good resolution, if you’re the sort of person who resolves to - do good and healthy things and then maintains any hope of actually - doing them: Resolve to divide your waking hours exactly and only - between doing things you should be doing, and doing things you want to - be doing. - Watch - What Jason Kelce’s retirement says about the Eagles future - (BUTTON) CC - Share - Subtitles - * Off - * English +Here’s a good resolution, if you’re the sort of person who resolves to do good +and healthy things and then maintains any hope of actually doing them: Resolve +to divide your waking hours exactly and only between doing things you should be +doing, and doing things you want to be doing. - Share this Video - [53]Facebook[54]Twitter[55]Email - [56]Reddit[57]Link - [58]view video - [59]What Jason Kelce’s retirement says about the Eagles future - 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? - January 8, 2024 +Watch +What Jason Kelce’s retirement says about the Eagles future +CC +Share +Subtitles - When you are not doing something you should be doing—straightening up - around the house, taking out the garbage, walking the dog, your job—you - should always and only be doing something you actively want to be - doing, like reading a book, or playing video games, or pursuing a - hobby. Conversely, when you are not doing something you want to be - doing, you should always and only be doing something you should be - doing. This is a good resolution because it’s not aimed at some - specific result that deviates a whole lot from who you are already, - like overhauling your diet or your sleep regimen or whatever. No - overhaul required, here. You already do plenty of what you’re supposed - to do, and plenty of what you want to do. Resolve to stop doing - anything else. - Advertisement + • Off + • English - But I already do this, you are saying, as you sit at your desk, not - working, procrastinating, avoiding work by dicking around on the - internet and winding up on a dumb-ass late-January blog about, of all - things, self-improvement. No! Right now, you are not following this - very good advice. You are not doing what you should be doing—unless - what you should be doing is reading blogs—nor are you doing what you - really want to be doing, which is parasailing or skiing or hunting - moose in [60]ye olde cowboy game. You are killing time, waiting for - either the energy for work or the consequences of not doing work to - give your life some feeble structure. Stop it! Killing time is the very - habit we are trying to address, here. There’s barely enough time as it - is. - Advertisement +Share this Video +[61]Facebook[62]Twitter[63]Email +[64]Reddit[65]Link +[66]view video +[67]What Jason Kelce’s retirement says about the Eagles future +[68] +Which NFL team lands Jim Harbaugh as their next head coach? +January 10, 2024 +[69] +Josh Allen, Trevor Lawrence, or the Eagles: Who are the biggest frauds of the +season? +January 8, 2024 - Along the way you will need to hone your sense of what things you - should be doing. You know the most obvious ones—they’re occupying the - margins of your consciousness all the time, bearing down on you and - poisoning the time you spend not doing them. Chores, assignments, - projects, bills, phone calls, repairs, and so forth. The list is a - little bit longer than that, which is both good news and bad news. It’s - bad news because it includes things like talking to your folks on the - telephone, or listening patiently while your spouse rants about their - day, or brushing your teeth—things you put off doing nearly as much as - work but which, I’m afraid, must be done. But it’s also good news, - because by acknowledging that those are responsibilities, you have also - earned the right to take some satisfaction from having fulfilled them. - Advertisement +When you are not doing something you should be doing—straightening up around +the house, taking out the garbage, walking the dog, your job—you should always +and only be doing something you actively want to be doing, like reading a book, +or playing video games, or pursuing a hobby. Conversely, when you are not doing +something you want to be doing, you should always and only be doing something +you should be doing. This is a good resolution because it’s not aimed at some +specific result that deviates a whole lot from who you are already, like +overhauling your diet or your sleep regimen or whatever. No overhaul required, +here. You already do plenty of what you’re supposed to do, and plenty of what +you want to do. Resolve to stop doing anything else. - Sometimes you have the bandwidth and energy to address your attention - to the things you should be doing, and other times the thought of - getting your car inspected or working out or washing a sinkful of - dishes fills you with a sudden urge to throw yourself down a well. When - you have the energy to do the things you should do, do them, or keep - doing them. When you don’t—and this is crucial—go ahead and give - yourself permission to set them aside for another time. But—and this is - also crucial, because it is the lesson of this damn blog—when you give - yourself permission not to do the things you should be doing, please - spend the resulting block of free time doing something good and cool, - something you genuinely want to do. +Advertisement - You will also need to hone your sense of what it is you want to be - doing. Today, the thing I most want to be doing in all the universe is - riding Splash Mountain. That activity, I am afraid to say, is - completely out of the question, in no small part because I am supposed - to be doing the thing I least want to do in all the universe, which is - working. Since I would certainly rather die than actually work, I’m - going to do something else. But what? It helps to start all the way out - at riding Splash Mountain, because understanding want in terms of - genuine desire keeps you from slipping into the shitty headspace of - just measuring activities against the dread and misery of work. In - almost all cases I would rather be watching Law & Order reruns than - doing chores, but that doesn’t mean I really want to be watching Law & - Order reruns. In the endless list of things I could conceivably do with - a day, watching Law & Order reruns is probably closer to doing chores - than it is to riding Splash Mountain. In fact, I often default to - watching Law & Order reruns because some part of my brain recognizes - that it keeps me anchored in place near the chores, and isn’t so joyful - that I can be said to be really enjoying myself, which is clearly - something I don’t deserve. - Advertisement +But I already do this, you are saying, as you sit at your desk, not working, +procrastinating, avoiding work by dicking around on the internet and winding up +on a dumb-ass late-January blog about, of all things, self-improvement. No! +Right now, you are not following this very good advice. You are not doing what +you should be doing—unless what you should be doing is reading blogs—nor are +you doing what you really want to be doing, which is parasailing or skiing or +hunting moose in [70]ye olde cowboy game. You are killing time, waiting for +either the energy for work or the consequences of not doing work to give your +life some feeble structure. Stop it! Killing time is the very habit we are +trying to address, here. There’s barely enough time as it is. - So it is with scanning headlines or surfing Instagram or refreshing - Twitter, the grey shit you do compulsively when you are - procrastinating. Yes, you would rather be doing those things than - painting your living room—anything, including bleeding from the - eyeballs, is better than painting—but that doesn’t necessarily mean - they’re worth a shit. If you’re not going to paint the living room, - that’s fine! But now use the time on something good! In my case, if I - start all the way out at riding Splash Mountain and work backward from - there, long before I get to watching Law & Order reruns, I will arrive - at things like bowling or going to the movies or hunting moose in ye - olde cowboy game. Those are things I find myself wanting to do, but - rarely give myself permission to do. Ask yourself, “What are some - activities that would be genuinely fun?” Make a list! Cross off the - stuff you know you can’t do, and then pick and do one of the ones you - can. Go to the zoo. Watch a horror flick. Try out a new bar. Read a few - chapters of a good book. +Advertisement - It can feel reckless and irresponsible to spend your day bowling or - baking or hunting moose in ye olde cowboy game, but a big chunk of the - guilt associated with these activities stems from not really giving - yourself permission to do them, at least in part because too much of - your average day is already given over to tweeting at Jonathan Chait. - But it’s healthy and productive to do cool and fun things that enrich - your life! The solution, here, is to buy yourself the time to do the - really interesting things by first being honest with yourself about all - the sweaty hours you waste tweeting at Jonathan Chait. You are a - successful and prolific time-killer because you’ve got a selection of - ways of doing it that are marginally less dreary and more stimulating - than folding laundry or managing spreadsheets, and some inherited - puritanical impulse that tells you you’re still close to upright so - long as you’re not actually enjoying yourself. Bullshit! When you are - not doing what you are supposed to do, do something you genuinely want - to do. That’s the rule. - Advertisement +Along the way you will need to hone your sense of what things you should be +doing. You know the most obvious ones—they’re occupying the margins of your +consciousness all the time, bearing down on you and poisoning the time you +spend not doing them. Chores, assignments, projects, bills, phone calls, +repairs, and so forth. The list is a little bit longer than that, which is both +good news and bad news. It’s bad news because it includes things like talking +to your folks on the telephone, or listening patiently while your spouse rants +about their day, or brushing your teeth—things you put off doing nearly as much +as work but which, I’m afraid, must be done. But it’s also good news, because +by acknowledging that those are responsibilities, you have also earned the +right to take some satisfaction from having fulfilled them. - Of course, there will be any number of times when you are prevented - from doing any of the things you want to be doing. The rule is also - this: When you cannot do what you genuinely want to do, do what you are - supposed to do. Here is a good life hack: when you lack the bandwidth - to take on an important chore or duty, you probably still have the - bandwidth to make a list of all your important chores and duties. Do - that! This counts as a thing you should be doing, because often enough - in making the list you will hit on something that requires little - enough of you that you can take it on right away, without too much - suffering. And even if you don’t, the making of the list will bring you - a little closer to addressing yourself to the items on it, and that’s - enough of a positive step that when the time comes for you to do - something you want to do, you will feel the satisfaction of having - earned it, through work. That’s what’s missing from the shame-soaked - hours spent avoiding and procrastinating: the feeling that you deserve - to have a good time, and the permission to have one. +Advertisement - Of course, you will probably fall short of dividing your time exactly - equally between responsibilities and pursuits. Don’t think of that as - failure. When you remember this wise practice, when it occurs to you, - treat it as a rule and follow it. Ah, right, I said I wasn’t gonna sit - here stewing in my anxiety all afternoon, so instead I’m going to go - see [61]Into the Spider-Verse. Good plan! You are going to end the day - with something to show for it, and that’s the whole idea. - (BUTTON) - Continue reading +Sometimes you have the bandwidth and energy to address your attention to the +things you should be doing, and other times the thought of getting your car +inspected or working out or washing a sinkful of dishes fills you with a sudden +urge to throw yourself down a well. When you have the energy to do the things +you should do, do them, or keep doing them. When you don’t—and this is +crucial—go ahead and give yourself permission to set them aside for another +time. But—and this is also crucial, because it is the lesson of this damn +blog—when you give yourself permission not to do the things you should be +doing, please spend the resulting block of free time doing something good and +cool, something you genuinely want to do. - IFRAME: [62]https://www.googletagmanager.com/ns.html?id=GTM-T73GPNQ +You will also need to hone your sense of what it is you want to be doing. +Today, the thing I most want to be doing in all the universe is riding Splash +Mountain. That activity, I am afraid to say, is completely out of the question, +in no small part because I am supposed to be doing the thing I least want to do +in all the universe, which is working. Since I would certainly rather die than +actually work, I’m going to do something else. But what? It helps to start all +the way out at riding Splash Mountain, because understanding want in terms of +genuine desire keeps you from slipping into the shitty headspace of just +measuring activities against the dread and misery of work. In almost all cases +I would rather be watching Law & Order reruns than doing chores, but that +doesn’t mean I really want to be watching Law & Order reruns. In the endless +list of things I could conceivably do with a day, watching Law & Order reruns +is probably closer to doing chores than it is to riding Splash Mountain. In +fact, I often default to watching Law & Order reruns because some part of my +brain recognizes that it keeps me anchored in place near the chores, and isn’t +so joyful that I can be said to be really enjoying myself, which is clearly +something I don’t deserve. -References +Advertisement - Visible links: - 1. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904 - 2. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904 - 3. https://deadspin.com/rss - 4. https://avclub.com/ - 5. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904 - 6. https://gizmodo.com/ - 7. https://jalopnik.com/ - 8. https://kotaku.com/ - 9. https://qz.com/ - 10. https://theroot.com/ - 11. https://thetakeout.com/ - 12. https://theonion.com/ - 13. https://theinventory.com/ - 14. https://deadspin.com/ - 15. https://deadspin.com/latest - 16. https://deadspin.com/baseball - 17. https://deadspin.com/football - 18. https://deadspin.com/basketball - 19. https://deadspin.com/hockey - 20. https://deadspin.com/golf - 21. https://deadspin.com/soccer - 22. https://deadspin.com/locker/the-mourning-after - 23. https://deadspin.com/wrestling - 24. https://deadspin.com/lists - 25. https://deadspin.com/tennis - 26. https://deadspin.com/the-fights - 27. https://deadspin.com/olympics - 28. https://deadspin.com/racing - 29. https://deadspin.com/poker - 30. https://deadspin.com/media - 31. https://deadspin.com/locker - 32. https://es.deadspin.com/ - 33. https://deadspin.com/ - 34. https://deadspin.com/latest - 35. https://deadspin.com/baseball - 36. https://deadspin.com/football - 37. https://deadspin.com/basketball - 38. https://deadspin.com/hockey - 39. https://deadspin.com/golf - 40. https://deadspin.com/soccer - 41. https://deadspin.com/locker/the-mourning-after - 42. https://deadspin.com/wrestling - 43. https://deadspin.com/lists - 44. https://deadspin.com/tennis - 45. https://deadspin.com/the-fights - 46. https://deadspin.com/olympics - 47. https://deadspin.com/racing - 48. https://deadspin.com/poker - 49. https://deadspin.com/media - 50. https://deadspin.com/locker - 51. https://es.deadspin.com/ - 52. https://deadspin.com/author/miserableshitehawk - 53. https://facebook.com/sharer.php?u=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=facebook - 54. https://twitter.com/intent/tweet?url=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=twitter&text=What Jason Kelce’s retirement says about the Eagles future - 55. mailto:?subject=What Jason Kelce’s retirement says about the Eagles future&body=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=email - 56. https://www.reddit.com/submit?url=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=reddit&title=What Jason Kelce’s retirement says about the Eagles future - 57. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895 - 58. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895 - 59. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895 - 60. https://theconcourse.deadspin.com/i-like-chopping-firewood-in-red-dead-redemption-2-1830178593#_ga=2.215259543.149258240.1547482638-1486199056.1525795056 - 61. https://film.avclub.com/superhero-dimensions-collide-in-a-funny-gorgeously-psy-1830700647 - 62. https://www.googletagmanager.com/ns.html?id=GTM-T73GPNQ +So it is with scanning headlines or surfing Instagram or refreshing Twitter, +the grey shit you do compulsively when you are procrastinating. Yes, you would +rather be doing those things than painting your living room—anything, including +bleeding from the eyeballs, is better than painting—but that doesn’t +necessarily mean they’re worth a shit. If you’re not going to paint the living +room, that’s fine! But now use the time on something good! In my case, if I +start all the way out at riding Splash Mountain and work backward from there, +long before I get to watching Law & Order reruns, I will arrive at things like +bowling or going to the movies or hunting moose in ye olde cowboy game. Those +are things I find myself wanting to do, but rarely give myself permission to +do. Ask yourself, “What are some activities that would be genuinely fun?” Make +a list! Cross off the stuff you know you can’t do, and then pick and do one of +the ones you can. Go to the zoo. Watch a horror flick. Try out a new bar. Read +a few chapters of a good book. - 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 +It can feel reckless and irresponsible to spend your day bowling or baking or +hunting moose in ye olde cowboy game, but a big chunk of the guilt associated +with these activities stems from not really giving yourself permission to do +them, at least in part because too much of your average day is already given +over to tweeting at Jonathan Chait. But it’s healthy and productive to do cool +and fun things that enrich your life! The solution, here, is to buy yourself +the time to do the really interesting things by first being honest with +yourself about all the sweaty hours you waste tweeting at Jonathan Chait. You +are a successful and prolific time-killer because you’ve got a selection of +ways of doing it that are marginally less dreary and more stimulating than +folding laundry or managing spreadsheets, and some inherited puritanical +impulse that tells you you’re still close to upright so long as you’re not +actually enjoying yourself. Bullshit! When you are not doing what you are +supposed to do, do something you genuinely want to do. That’s the rule. + +Advertisement + +Of course, there will be any number of times when you are prevented from doing +any of the things you want to be doing. The rule is also this: When you cannot +do what you genuinely want to do, do what you are supposed to do. Here is a +good life hack: when you lack the bandwidth to take on an important chore or +duty, you probably still have the bandwidth to make a list of all your +important chores and duties. Do that! This counts as a thing you should be +doing, because often enough in making the list you will hit on something that +requires little enough of you that you can take it on right away, without too +much suffering. And even if you don’t, the making of the list will bring you a +little closer to addressing yourself to the items on it, and that’s enough of a +positive step that when the time comes for you to do something you want to do, +you will feel the satisfaction of having earned it, through work. That’s what’s +missing from the shame-soaked hours spent avoiding and procrastinating: the +feeling that you deserve to have a good time, and the permission to have one. + +Of course, you will probably fall short of dividing your time exactly equally +between responsibilities and pursuits. Don’t think of that as failure. When you +remember this wise practice, when it occurs to you, treat it as a rule and +follow it. Ah, right, I said I wasn’t gonna sit here stewing in my anxiety all +afternoon, so instead I’m going to go see [71]Into the Spider-Verse. Good plan! +You are going to end the day with something to show for it, and that’s the +whole idea. + +Continue reading + +References: + +[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 diff --git a/static/archive/dev-to-ptnb0b.txt b/static/archive/dev-to-ptnb0b.txt index 7aed9d8..6db84ba 100644 --- a/static/archive/dev-to-ptnb0b.txt +++ b/static/archive/dev-to-ptnb0b.txt @@ -1,2595 +1,2447 @@ - #[1]DEV Community - - [2]Skip to content - - (BUTTON) [3]DEV Community - ____________________ (BUTTON) - [4]Log in [5]Create account +[1]Skip to content +[3] DEV Community +[4][ ] +[6] +[7] Log in [8] Create account DEV Community - (BUTTON) +● Add reaction +[sp] Like [mu] Unicorn [ex] Exploding Head [ra] Raised Hands [fi] Fire +Jump to Comments Save +Copy link +Copied to Clipboard +[20] Share to Twitter [21] Share to LinkedIn [22] Share to Reddit [23] Share to +Hacker News [24] Share to Facebook [25] Share to Mastodon +[26]Share Post via... [27]Report Abuse +[28]Rich Harris +[29]Rich Harris - (BUTTON) - [heart-plus-active-9ea3b22f2bc311281db911d416166c5f430636e76b15cd5df6b3 - b841d830eefa.svg] Add reaction - (BUTTON) - [sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382 - d02920cf.svg] Like (BUTTON) - [multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f - 1f4f3e97.svg] Unicorn (BUTTON) - [exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068 - ad3e2c4b5.svg] Exploding Head (BUTTON) - [raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b49997 - 3048fe5.svg] Raised Hands (BUTTON) - [fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e. - svg] Fire - (BUTTON) Jump to Comments (BUTTON) Save - (BUTTON) - (BUTTON) Copy link - Copied to Clipboard - [6]Share to Twitter [7]Share to LinkedIn [8]Share to Reddit [9]Share to - Hacker News [10]Share to Facebook [11]Share to Mastodon - [12]Share Post via... [13]Report Abuse +Posted on May 15, 2020 - [14]Rich Harris - [15]Rich Harris - - Posted on May 15, 2020 - [sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382 - d02920cf.svg] - [multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f - 1f4f3e97.svg] - [exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068 - ad3e2c4b5.svg] - [raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b49997 - 3048fe5.svg] - [fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e. - svg] +● ● ● ● ● In defense of the modern web - [16]#javascript [17]#react [18]#svelte [19]#webdev +[30]#javascript [31]#react [32]#svelte [33]#webdev - I expect I'll annoy everyone with this post: the anti-JavaScript - crusaders, justly aghast at how much of the stuff we slather onto - modern websites; the people arguing the web is a broken platform for - interactive applications anyway and we should start over; React users; - the old guard with their artisanal JS and hand authored HTML; and - [20]Tom MacWright, someone I've admired from afar since I first became - aware of his work on Mapbox many years ago. But I guess that's the - price of having opinions. +I expect I'll annoy everyone with this post: the anti-JavaScript crusaders, +justly aghast at how much of the stuff we slather onto modern websites; the +people arguing the web is a broken platform for interactive applications anyway +and we should start over; React users; the old guard with their artisanal JS +and hand authored HTML; and [34]Tom MacWright, someone I've admired from afar +since I first became aware of his work on Mapbox many years ago. But I guess +that's the price of having opinions. - Tom recently posted [21]Second-guessing the modern web, and it took the - front end world by storm. You should read it, or at the very least the - [22]CliffsNotes. There's a lot of stuff I agree with to varying - degrees: +Tom recently posted [35]Second-guessing the modern web, and it took the front +end world by storm. You should read it, or at the very least the [36] +CliffsNotes. There's a lot of stuff I agree with to varying degrees: - There is a sweet spot of React: in moderately interactive interfaces - ... But there’s a lot on either side of that sweet spot. + There is a sweet spot of React: in moderately interactive interfaces ... + But there’s a lot on either side of that sweet spot. - It's absolutely the case that running React in the client for a largely - static site is overkill. It's also true that you have to avoid React if - your app is very heavily interactive — it's widely understood that if - you want 60fps animation, you will likely have to bypass the React - update cycle and do things in a more imperative fashion (indeed, this - is what libraries like [23]react-spring do). But while all this is true - of React, it's much less true of component frameworks in general. +It's absolutely the case that running React in the client for a largely static +site is overkill. It's also true that you have to avoid React if your app is +very heavily interactive — it's widely understood that if you want 60fps +animation, you will likely have to bypass the React update cycle and do things +in a more imperative fashion (indeed, this is what libraries like [37] +react-spring do). But while all this is true of React, it's much less true of +component frameworks in general. - 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. + 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. - It's an excellent point that isn't really being addressed, though (as - Tom acknowledges) it's really just exacerbating a problem that was - always there. I think there are solutions to it — we can iterate on the - 'index bundle' approach, we could include the site version in a cookie - and use that to show actionable feedback if there's a mismatch — but we - do need to spend time on it. +It's an excellent point that isn't really being addressed, though (as Tom +acknowledges) it's really just exacerbating a problem that was always there. I +think there are solutions to it — we can iterate on the 'index bundle' +approach, we could include the site version in a cookie and use that to show +actionable feedback if there's a mismatch — but we do need to spend time on it. - It’s your startup’s homepage, and it has a “Sign up” button, but - until the JavaScript loads, that button doesn’t do anything. So you - need to compensate. + It’s your startup’s homepage, and it has a “Sign up” button, but until the + JavaScript loads, that button doesn’t do anything. So you need to + compensate. + +This is indeed very annoying, though it's easy enough to do this sort of thing +— we just need to care enough: - This is indeed very annoying, though it's easy enough to do this sort - of thing — we just need to care enough: - But I'm not sure what this has to do with React-style frameworks — this - issue exists whatever form your front end takes, unless you make it - work without JS (which you should!). +But I'm not sure what this has to do with React-style frameworks — this issue +exists whatever form your front end takes, unless you make it work without JS +(which you should!). - 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. + 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. - Again, this is true but more React-specific than anything. React's - approach to server-side rendering — constructing a component tree, then - serialising it — involves overhead that isn't shared by frameworks - that, for example, compile your components ([24]hi!) to functions that - just concatenate strings for SSR, which is faster by a dramatic amount. - And those API requests were going to have to get made anyway, so it - makes sense to do them as early as possible, especially if your app - server and API server are close to each other (or even the same thing). +Again, this is true but more React-specific than anything. React's approach to +server-side rendering — constructing a component tree, then serialising it — +involves overhead that isn't shared by frameworks that, for example, compile +your components ([38]hi!) to functions that just concatenate strings for SSR, +which is faster by a dramatic amount. And those API requests were going to have +to get made anyway, so it makes sense to do them as early as possible, +especially if your app server and API server are close to each other (or even +the same thing). - 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. - Amen. [25]Just go and read the whole 'APIs' section several times. - __________________________________________________________________ +Amen. [39]Just go and read the whole 'APIs' section several times. - Minor quibbles aside, Tom identifies some real problems with the state - of the art in web development. But I think the article reaches a - dangerous conclusion. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Let's start by dissecting this statement: +Minor quibbles aside, Tom identifies some real problems with the state of the +art in web development. But I think the article reaches a dangerous conclusion. - 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. +Let's start by dissecting this statement: - With all due respect to those involved, I don't think Gatsby is a - particularly relevant benchmark. The gatsby new my-site starter app - executes 266kB of minified JavaScript for a completely static page in - production mode; for [26]gatsbyjs.org it's 808kB. Honestly, these are - not impressive numbers. + 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. - [27]The Lighthouse performance score for gatsbyjs.org - The [28]Lighthouse score for Gatsby's homepage, obtained via - [29]webpagetest.org/easy. +With all due respect to those involved, I don't think Gatsby is a particularly +relevant benchmark. The gatsby new my-site starter app executes 266kB of +minified JavaScript for a completely static page in production mode; for [40] +gatsbyjs.org it's 808kB. Honestly, these are not impressive numbers. - Leaving that aside, I disagree with the premise. When I tap on a link - on Tom's JS-free website, the browser first waits to confirm that it - was a tap and not a brush/swipe, then makes a request, and then we have - to wait for the response. With a framework-authored site with - client-side routing, we can start to do more interesting things. We can - make informed guesses based on analytics about which things the user is - likely to interact with and preload the logic and data for them. We can - kick off requests as soon as the user first touches (or hovers) the - link instead of waiting for confirmation of a tap — worst case - scenario, we've loaded some stuff that will be useful later if they do - tap on it. We can provide better visual feedback that loading is taking - place and a transition is about to occur. And we don't need to load the - entire contents of the page — often, we can make do with a small bit of - JSON because we already have the JavaScript for the page. This stuff - gets fiendishly difficult to do by hand. +[41]The Lighthouse performance score for gatsbyjs.org - Beyond that, vanilla static sites are not an ambitious enough goal. - Take transitions for example. Web developers are currently trapped in a - mindset of discrete pages with jarring transitions — click a link, see - the entire page get replaced whether through client-side routing or a - page reload — while native app developers are thinking on another - level: +The [42]Lighthouse score for Gatsby's homepage, obtained via [43] +webpagetest.org/easy. - unknown tweet media content Play butt +Leaving that aside, I disagree with the premise. When I tap on a link on Tom's +JS-free website, the browser first waits to confirm that it was a tap and not a +brush/swipe, then makes a request, and then we have to wait for the response. +With a framework-authored site with client-side routing, we can start to do +more interesting things. We can make informed guesses based on analytics about +which things the user is likely to interact with and preload the logic and data +for them. We can kick off requests as soon as the user first touches (or +hovers) the link instead of waiting for confirmation of a tap — worst case +scenario, we've loaded some stuff that will be useful later if they do tap on +it. We can provide better visual feedback that loading is taking place and a +transition is about to occur. And we don't need to load the entire contents of +the page — often, we can make do with a small bit of JSON because we already +have the JavaScript for the page. This stuff gets fiendishly difficult to do by +hand. - Ryan Florence profile image - Ryan Florence - [30]@ryanflorence - twitter logo - This is what I've had in mind for the web with React Router. We say - these kinds of animations are "good for phones but not desktop". - My iPad pro is as big as my laptop and these apps are shopping/content - (most of the web). - These transitions are such a great UX. - 16:06 PM - 22 Oct 2019 - [31]Twitter reply action [32]Twitter retweet action 20 [33]Twitter like - action 197 +Beyond that, vanilla static sites are not an ambitious enough goal. Take +transitions for example. Web developers are currently trapped in a mindset of +discrete pages with jarring transitions — click a link, see the entire page get +replaced whether through client-side routing or a page reload — while native +app developers are thinking on another level: - It will take more than technological advancement to get the web there; - it will take a cultural shift as well. But we certainly can't get there - if we abandon our current trajectory. Which is exactly what Tom seems - to be suggesting. - __________________________________________________________________ + unknown tweet media content Play butt + Ryan Florence profile image + Ryan Florence + [44]@ryanflorence + twitter logo + This is what I've had in mind for the web with React Router. We say these + kinds of animations are "good for phones but not desktop". - I'm not aware of any other platform where you're expected to write the - logic for your initial render using a different set of technologies - than the logic for subsequent interactions. The very idea sounds daft. - But on the web, with its unique history, that was the norm for many - years — we'd generate some HTML with PHP or Rails or whatever, and then - 'sprinkle some jQuery' on it. + My iPad pro is as big as my laptop and these apps are shopping/content + (most of the web). - With the advent of Node, that changed. The fact that we can do - server-side rendering and communicate with databases and what-have-you - using a language native to the web is a wonderful development. + These transitions are such a great UX. + 16:06 PM - 22 Oct 2019 + [45] Twitter reply action [46] Twitter retweet action 20 [47] Twitter like + action 197 - There are problems with this model. Tom identifies some of them. - Another major issue he doesn't discuss is that the server-rendered SPA - model typically 'hydrates' the entire initial page in a way that - requires you to duplicate a ton of data — once in the HTML, once in the - JSON blob that's passed to the client version of the app to produce the - exact same result — and can block the main thread during the period the - user is starting to interact with the app. +It will take more than technological advancement to get the web there; it will +take a cultural shift as well. But we certainly can't get there if we abandon +our current trajectory. Which is exactly what Tom seems to be suggesting. - But we can fix those problems. [34]Next is doing amazing innovation - around (for example) mixing static and dynamic pages within a single - app, so you get the benefits of the purely static model without ending - up finding yourself constrained by it. [35]Marko does intelligent - component-level hydration, something I expect other frameworks to - adopt. [36]Sapper, the companion framework to [37]Svelte, has a stated - goal of eventually not sending any JS other than the (tiny) router - itself for pages that don't require it. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - The future I want — the future I see — is one with tooling that's - accessible to the greatest number of people (including designers), that - can intelligently move work between server and client as appropriate, - that lets us build experiences that compete with native on UX (yes, - even for blogs!), and where upgrading part of a site to 'interactive' - or from 'static' to 'dynamic' doesn't involve communication across - disparate teams using different technologies. We can only get there by - committing to the paradigm Tom critiques — the JavaScript-ish component - framework server-rendered SPA. (Better names welcomed.) +I'm not aware of any other platform where you're expected to write the logic +for your initial render using a different set of technologies than the logic +for subsequent interactions. The very idea sounds daft. But on the web, with +its unique history, that was the norm for many years — we'd generate some HTML +with PHP or Rails or whatever, and then 'sprinkle some jQuery' on it. - The modern web has flaws, and we should talk about them. But let's not - give up on it. +With the advent of Node, that changed. The fact that we can do server-side +rendering and communicate with databases and what-have-you using a language +native to the web is a wonderful development. + +There are problems with this model. Tom identifies some of them. Another major +issue he doesn't discuss is that the server-rendered SPA model typically +'hydrates' the entire initial page in a way that requires you to duplicate a +ton of data — once in the HTML, once in the JSON blob that's passed to the +client version of the app to produce the exact same result — and can block the +main thread during the period the user is starting to interact with the app. + +But we can fix those problems. [48]Next is doing amazing innovation around (for +example) mixing static and dynamic pages within a single app, so you get the +benefits of the purely static model without ending up finding yourself +constrained by it. [49]Marko does intelligent component-level hydration, +something I expect other frameworks to adopt. [50]Sapper, the companion +framework to [51]Svelte, has a stated goal of eventually not sending any JS +other than the (tiny) router itself for pages that don't require it. + +The future I want — the future I see — is one with tooling that's accessible to +the greatest number of people (including designers), that can intelligently +move work between server and client as appropriate, that lets us build +experiences that compete with native on UX (yes, even for blogs!), and where +upgrading part of a site to 'interactive' or from 'static' to 'dynamic' doesn't +involve communication across disparate teams using different technologies. We +can only get there by committing to the paradigm Tom critiques — the +JavaScript-ish component framework server-rendered SPA. (Better names +welcomed.) + +The modern web has flaws, and we should talk about them. But let's not give up +on it. Top comments (98) - (BUTTON) Crown - -Sort discussion: - - * Top - Most upvoted and relevant comments will be first - * Latest - Most recent comments will be first - * Oldest - The oldest comments will be first - - Subscribe - pic - - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - - (BUTTON) Personal (BUTTON) Trusted User - [38]Create template - - Templates let you quickly answer FAQs or store snippets for re-use. - (BUTTON) Submit (BUTTON) Preview [39]Dismiss - - [40]twigman08 profile image - [41]Chad Smith - (BUTTON) Chad Smith - [42]Chad Smith - (button) Follow - Work with C# all day everyday creating web applications. Huge baseball - buff. - * Location - Texas - * Education - B.S in Computer Science - * Joined - Dec 17, 2017 - - • [43]May 15 '20 - (BUTTON) - * [44]Copy link - * - * (BUTTON) Hide - * - * - * - - Honestly my biggest issue with the current state of the web is the - current state of how complex the tools or build process is. - - I miss the days of some html, add a bit of JavaScript to the page and - you were done. You didn't worry about going and making sure you had a - complete build or bundling process to get everything good. You spent - your time worrying about how to develop your app. Which in my opinion - was better for the users. There was less bugs. We actually spent more - time making sure the application worked rock solid. - - Nowadays to get anything cool to be be ready for production you have - spend needless time on the configuration. Did you do this? Did you - configure it to do that? Oh you can't do that unless you eject it that - build tool and use this build tool. That's where the current state of - the web is failing. - - Sure we have taken steps forward in some areas. But we have to be - honest with ourselves. We took major steps back in other areas of the - web. Sometimes I wonder if we took too many steps back. - - (BUTTON) 61 likes Like Reply - - [45]gotofritz profile image - [46]fritz - (BUTTON) fritz - [47]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [48]May 18 '20 - (BUTTON) - * [49]Copy link - * - * (BUTTON) Hide - * - * - * - - I don't get it. Nobody's stopping you from firing up an HTML doc in - Notepad and FTPing the result to a web server, if that's all you need. - But other people have more complex needs (in the "good ole days" there - were no smart phones, to mention just one thing) and therefore we need - more complex tools. Why do you want to force me to party like it's - 1999? - - (BUTTON) 23 likes Like Reply - - [50]twigman08 profile image - [51]Chad Smith - (BUTTON) Chad Smith - [52]Chad Smith - (button) Follow - Work with C# all day everyday creating web applications. Huge baseball - buff. - * Location - Texas - * Education - B.S in Computer Science - * Joined - Dec 17, 2017 - - • [53]May 19 '20 - (BUTTON) - * [54]Copy link - * - * (BUTTON) Hide - * - * - * - - My issue isn't with applications are too complex really. I develop - complex applications too at work. - - My issue is with all the moving parts with a modern web application. - Fighting if I can use certain language features. Oh I can't, now I have - to bother with setting up and making sure I can use Babel or something - to do it properly, or even loading in polyfills (cool just added - another dependency the browser has to load before the application can - be used). - - That still hasn't covered bundling everything. What's the correct way - bundle this? Well crap I now have to go and correctly configure - WebPack. Unless you're one of the VERY FEW experts on that ,that will - take time to figure out to get right. Ok so I think it bundles right, - well now how should I lazy load this code for the user? What should be - lazy loaded? What should i use to set it up? - - That's just the beginning. I could go on and on about the other complex - moving parts with a modern web application. - - I am not asking anyone to make applications like it is 1999. All I'm - asking for is a more modern and simpler process that is a STANDARD. - - Maybe it is because I come from compiled language background. Where I - have to worry about that one single binary. I only have to worry if the - compiler supports the language version I'm using. Where I can just pass - in a single flag to the compiler for the optimization level I want. - - Yes I will be the first to say that in some areas of modern web - application development we have taken steps forward. I just wonder if - we have taken steps back in some areas to take those steps forward. - - (BUTTON) 13 likes Like Thread - - [55]gotofritz profile image - [56]fritz - (BUTTON) fritz - [57]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [58]May 22 '20 • Edited on May 22 • Edited - (BUTTON) - * [59]Copy link - * - * (BUTTON) Hide - * - * - * - - All I'm asking for is a more modern and simpler process that is a - STANDARD ... - Maybe it is because I come from compiled language background ... - - Well I am sorry, but web development is a complete different kettle of - fish. We download all the parts that make up an application - asynchronously, on a wide variety of devices, with different specs and - rendering capabilities - all things which the app, once downloaded, - need to adapt to. We have progressive rendering and respond to all sort - of sensors. All while ensuring boot up time for the app is in the - microseconds range and security for both you who download the code and - the server. - - Your expectations are simply unrealistic, sorry. - - Also, we always had polyfills, even "back in the day". Except that back - then everyone had to bake their own. In fact, we had browser wars and - appalling browser (IE5 for the Mac, anyone??!?) and it was a real pain - in the neck. - - (BUTTON) 10 likes Like Reply - - [60]adrianus profile image - [61]Adrianus - (BUTTON) Adrianus - [62]Adrianus - (button) Follow - Running a small company based in Kent. - * Location - Chatham, Kent - * Education - autodidactic - * Work - Entrepreneur at AVANDERGRINTEN Ltd. - * Joined - Jan 21, 2020 - - • [63]May 19 '20 • Edited on May 20 • Edited - (BUTTON) - * [64]Copy link - * - * (BUTTON) Hide - * - * - * - - Bingo, the complexity today is a must, at least because of the growing - smartphone usage. The simple reason why "Native Apps didn't kill the - web even with all their superior capabilities" (Ryan) is simply UX. As - internet usage often starts with searching for something having in - mind, that all-app-thinking interrupts exactly this flow, leaving at - least 30% of all traffic untouched. For what? For 5-minutes-crafts - skyrocketing their YouTube traffic? Although not everything needs - server side complexity plus having API's and webhooks easily integrated - using browser capabilities not existing in the god old days, the - architecture underneath is not the real issue. - - (BUTTON) 3 likes Like Reply - - [65]techbelle profile image - [66]rachelle palmer - (BUTTON) rachelle palmer - [67]rachelle palmer - (button) Follow - I decided I would try to build an app in every programming language. - That didn't happen, but what I learned along the way was really - valuable. - * Location - Raleigh, NC - * Joined - Sep 23, 2020 - - • [68]Feb 25 '21 - (BUTTON) - * [69]Copy link - * - * (BUTTON) Hide - * - * - * - - re: sessions --> I keep tabs open for months at a time, not sure about - anyone else - - (BUTTON) 1 like Like Reply - - [70]ojrask profile image - [71]Otto Rask - (BUTTON) Otto Rask - [72]Otto Rask - (button) Follow - A software engineer, mainly PHP, Rust, and related things. - * Location - Finland - * Joined - Mar 12, 2019 - - • [73]May 28 '21 - (BUTTON) - * [74]Copy link - * - * (BUTTON) Hide - * - * - * - - You fight complexity with ... more complexity? - - (BUTTON) 1 like Like Thread - - [75]gotofritz profile image - [76]fritz - (BUTTON) fritz - [77]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [78]May 28 '21 - (BUTTON) - * [79]Copy link - * - * (BUTTON) Hide - * - * - * - - You are getting it wrong. The aim is not "to fight complexity". The aim - is to fulfil complex needs. I am saying for that you often need more - complex tools. - - (BUTTON) 1 like Like Thread - - [80]ojrask profile image - [81]Otto Rask - (BUTTON) Otto Rask - [82]Otto Rask - (button) Follow - A software engineer, mainly PHP, Rust, and related things. - * Location - Finland - * Joined - Mar 12, 2019 - - • [83]May 28 '21 - (BUTTON) - * [84]Copy link - * - * (BUTTON) Hide - * - * - * - - What percentage of modern web is a "complex needs" target that requires - a complex solution such as React or Vue or perhaps something custom - written in WASM? 50% 25%? 5% 1%? - - (BUTTON) 2 likes Like Thread - - [85]gotofritz profile image - [86]fritz - (BUTTON) fritz - [87]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [88]May 28 '21 - (BUTTON) - * [89]Copy link - * - * (BUTTON) Hide - * - * - * - - All of it. Unless you have actual data that proves otherwise... - - (BUTTON) 2 likes Like Thread - - [90]jacobmakestheweb profile image - [91]Jacob Ybarra - (BUTTON) Jacob Ybarra - [92]Jacob Ybarra - (button) Follow - dank web dev - * Education - school - * Work - nada - * Joined - Sep 21, 2021 - - • [93]Sep 21 '21 - (BUTTON) - * [94]Copy link - * - * (BUTTON) Hide - * - * - * - - uh what? the web is about content and media. not a software - environment. - - (BUTTON) 1 like Like Reply - - [95]mark_saward profile image - [96]Mark Saward - (BUTTON) Mark Saward - [97]Mark Saward - (button) Follow - CEO and Developer | PhD in Philosophy | Some things I like: Linux, Go, - Rust, SQL, Devops - * Location - Victoria, Australia - * Education - BA/Bsc in Philosophy and Physics. PhD in Philosophy. - * Work - CEO/Software Developer at Episub - * Joined - May 13, 2020 - - • [98]May 15 '20 - (BUTTON) - * [99]Copy link - * - * (BUTTON) Hide - * - * - * - - Some interesting thoughts, in the original article and your response. - Certainly good for generating discussion :) - - It will take more than technological advancement to get the web - there; it will take a cultural shift as well. But we certainly can't - get there if we abandon our current trajectory. - - The problem as I see it is that the web -- in terms of client-side - executed markup and code (HTML/CSS/JavaScript) just wasn't designed - with these kinds of interactions in mind (the interactions that Ryan - Florence highlighted). It's the wrong foundation for it. - - I don't think that "getting there" should be through bending original - web technologies, but rather with something else entirely -- perhaps - WebAssembly, or a return to actual native applications much like we've - come to depend on on our tablets and phones. We already can do nice - animations like that iPad demo with native desktop applications. - There's many advantages to websites over native desktop apps, with the - standout one being that they don't require someone to install an - application on their machine. Maybe WebAssembly can give us a - compromise -- desktop apps built with technology designed for that job, - but available in a way that doesn't require any local installation. - Then we can use tools that were purpose built for those kinds of tasks, - instead of trying to wrangle the foundations of the web to fit - something they were never built for. - - When I think back to how we used to build websites back in the day, and - how we build sites with technologies in tools like React now, I'm - honestly not sure that we've gained anything of great enough value - relative to the simplicity we've lost. In short, I'd be happy to - abandon our current trajectory and put our hope in alternative - solutions for those situations where what we really need is a native - application. Leave the web for what it's good at. - - (BUTTON) 23 likes Like Reply - - [100]ryansolid profile image - [101]Ryan Carniato - (BUTTON) Ryan Carniato - [102]Ryan Carniato - (button) Follow - Frontend performance enthusiast and Fine-Grained Reactivity super fan. - Author of the SolidJS UI library and MarkoJS Core Team Member. - * Location - San Jose, California - * Education - Computer Engineering B.A.Sc, University of British Columbia - * Work - Principal Engineer, Open Source, Netlify - * Joined - Jun 25, 2019 - - • [103]May 15 '20 - (BUTTON) - * [104]Copy link - * - * (BUTTON) Hide - * - * - * - - That's interesting. I mean I was there too, and the extent of what I - can build with a modern library so extends what I could reasonably do - before. And the reason for that is JavaScript. When I was building - sites in the late 90s so many things weren't possible and you had no - choice but to pay these costs for interactivity. Sure I view sourced a - few cool tricks.. image maps etc, but with my table based layouts and a - little JavaScript I could do very little. Part of it was the available - DOM api's. My lack of understanding of the language but I think we look - at the past with rose colored glasses. - - It's more interesting to me that native platforms have borrowed - concepts from libraries like React in terms of declarative views etc. - I'm not saying React invented this stuff but that the trend would - suggest the contrary. These trends could be mistakes but popularity has - as much stake in the course of events as innate value. - - I think this comes down to really this hope of a Silver Bullet. It - doesn't exist. Instead we have momentum of a ubiquitous platform that - just is constantly aiming to improve. It's not only that the other - approaches have already lost, we're getting to a point where any new - approach will have to atleast acknowledge the current web. At this - point a competitor isn't going to change the tide, but something from - within. It's more likely that the web addresses those fundamental - shortcomings than people moving to a different platform. Native Apps - didn't kill the web even with all their superior capabilities. And on a - similar note it is going to take monumental change for this to - fundamentally change. Even with React's reach, it wasn't alone in a - movement that started years before. This is bigger than any particular - library or framework. - - (BUTTON) 13 likes Like Reply - - [105]mark_saward profile image - [106]Mark Saward - (BUTTON) Mark Saward - [107]Mark Saward - (button) Follow - CEO and Developer | PhD in Philosophy | Some things I like: Linux, Go, - Rust, SQL, Devops - * Location - Victoria, Australia - * Education - BA/Bsc in Philosophy and Physics. PhD in Philosophy. - * Work - CEO/Software Developer at Episub - * Joined - May 13, 2020 - - • [108]May 16 '20 • Edited on May 16 • Edited - (BUTTON) - * [109]Copy link - * - * (BUTTON) Hide - * - * - * - - There is absolutely no doubt that you can do incredible things with - modern web, and the power unlocked by having a programming language in - the browser has been amazing. However, when I think about a great deal - of the websites I interact with, and ones I build, there would not be - much lost if they significantly simplified the tech stack they work - with to be closer to the core technologies of the web (including a - splash of JavaScript). - - What I'm trying to convey is that I think our move to make everything a - web app has been a mistake, for multiple reasons. You are absolutely - right to say that this tide is going to be very hard (perhaps - impossible) to turn, and I absolutely agree there is no silver bullet - (I've looked), but that doesn't mean we haven't taken a worse path and - shouldn't lament for what could have been. - - The advantages of web apps are compelling for developers -- they are - easy to distribute, update, control, make cross platform, when compared - to native apps. It is not hard to understand why and how we have ended - up where we are. I just wish we were somewhere else -- but it would - take a lot of work to create that 'silver bullet'. - - (BUTTON) 11 likes Like Thread - - [110]adrianus profile image - [111]Adrianus - (BUTTON) Adrianus - [112]Adrianus - (button) Follow - Running a small company based in Kent. - * Location - Chatham, Kent - * Education - autodidactic - * Work - Entrepreneur at AVANDERGRINTEN Ltd. - * Joined - Jan 21, 2020 - - • [113]May 19 '20 • Edited on May 20 • Edited - (BUTTON) - * [114]Copy link - * - * (BUTTON) Hide - * - * - * - - That whole app environment was basically triggered by one need, and one - need only: bandwidth. No idea if anyone remembers when they launched - this WAP protocol, making the internet available on smartphones, what - failed for two reasons. The providers made it easy to access on their - own portals aka AOL strategy at beginning of the web, leaving the rest - of the market untouched, secondly the site performance was ridiculous. - Apple stepped in, put a bunch of intelligence into the app, - dramatically reducing the load time, did not convert so much traffic on - their own apps and let developers do what they do best. By 2008 more - than 50% of the whole mobile internet traffic was iPhone traffic. - - Bandwidth is no longer the breaking point. - - Google has for years campaigned the untapped goldmine local traffic, - experience flows that often start at the search for getting something - done in time, monetising on micro moments as more than half of all - mobile searches have a local intend. I posted an example how something - to get done interferes cross-applicational from the perspective of a - user. With an app-only scheme this is getting impossible. Sure it is - understandable that nobody pays so much attention. Most search engines - run a change and heavily invested in AI to optimise traffic at the - client's frontend. But even this is not enough, when it comes to - intends other than something very individualised. I wouldn't care so - much about the user, but more about what the user wants to achieve. - - (BUTTON) 1 like Like Reply - - - [115]oenonono profile image - [116]Junk - (BUTTON) Junk - [117]Junk - (button) Follow - * Joined - Mar 12, 2017 - - • [118]May 17 '20 - (BUTTON) - * [119]Copy link - * - * (BUTTON) Hide - * - * - * - - React definitely didn't invent HTML. - - Declarative views, indeed. - - (BUTTON) 1 like Like Reply - - - [120]v6 profile image - [121]🦄N B🛡 - (BUTTON) 🦄N B🛡 - [122]🦄N B🛡 - (button) Follow - // , “It is not so important to be serious as it is to be serious about - the important things. The monkey wears an expression of seriousness... - but the monkey is serious because he itches."(No/No) - * Location - (No/No) - * Education - (No/No) - * Work - Security - * Joined - Mar 1, 2018 - - • [123]May 15 '20 - (BUTTON) - * [124]Copy link - * - * (BUTTON) Hide - * - * - * - - The problem as I see it is that the web -- in terms of client-side - executed markup and code (HTML/CSS/JavaScript) just wasn't designed - with these kinds of interactions in mind (the interactions that Ryan - Florence highlighted). It's the wrong foundation for it. - - Yes. Please. Can we please just accept that it's all broken. - - (BUTTON) 4 likes Like Reply - - - [125]gotofritz profile image - [126]fritz - (BUTTON) fritz - [127]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [128]May 18 '20 • Edited on May 18 • Edited - (BUTTON) - * [129]Copy link - * - * (BUTTON) Hide - * - * - * - - Not at all. - - CSS has media queries and all sort of crazy and wonderful stuff. HTML - has tags for responsive design. JS has (in the browser) access to apis - like mutation observer and orientation and speech recognition. It's - TOTALLY built for that. Enough of the "get off my lawn" negativity - - (BUTTON) 8 likes Like Thread - - [130]v6 profile image - [131]🦄N B🛡 - (BUTTON) 🦄N B🛡 - [132]🦄N B🛡 - (button) Follow - // , “It is not so important to be serious as it is to be serious about - the important things. The monkey wears an expression of seriousness... - but the monkey is serious because he itches."(No/No) - * Location - (No/No) - * Education - (No/No) - * Work - Security - * Joined - Mar 1, 2018 - - • [133]May 18 '20 • Edited on May 18 • Edited - (BUTTON) - * [134]Copy link - * - * (BUTTON) Hide - * - * - * - - shakes his cane at you - - mutters incomprehensibly - - (BUTTON) 4 likes Like Reply - - - [135]stew_sims profile image - [136]Stewart Sims - (BUTTON) Stewart Sims - [137]Stewart Sims - (button) Follow - * Joined - May 31, 2019 - - • [138]May 15 '20 • Edited on May 15 • Edited - (BUTTON) - * [139]Copy link - * - * (BUTTON) Hide - * - * - * - - There's a lot to agree with in both of these takes. However, one - criticism of this one (and I realise we're getting into hugely - subjective territory) is the assumption that the goal should be to - 'build experiences that compete with native on UX'. It strikes me that - the web never was and never will be anything like any other platform - for building applications. Whether or not someone wants to turn it into - that is their prerogative and any success they have probably will help - others build better things. But it ultimately depends on what you want - to build and why, and emulating a native application might not always - be the best option. I think the key is to allow ourselves to question - the assumptions we all hold which seems to be exactly what both of you - are doing with different approaches, reaching different conclusions. So - I would say; keep doing that and keep doing your thing, but just don't - expect everyone to agree and do things the same way. The world is a - better place when we allow and encourage people not to homogenise in - their thinking. - - (BUTTON) 34 likes Like Reply - - - [140]rhymes profile image - [141]rhymes - (BUTTON) rhymes - [142]rhymes - (button) Follow - Such software as dreams are made on. I mostly rant about performance, - unnecessary complexity, privacy and data collection. - * Joined - Feb 2, 2017 - - • [143]May 18 '20 • Edited on May 18 • Edited - (BUTTON) - * [144]Copy link - * - * (BUTTON) Hide - * - * - * - - It strikes me that the web never was and never will be anything like - any other platform for building applications. Whether or not someone - wants to turn it into that is their prerogative and any success they - have probably will help others build better things. But it - ultimately depends on what you want to build and why, and emulating - a native application might not always be the best option. - - this :-) - - (BUTTON) 5 likes Like Reply - - - [145]oenonono profile image - [146]Junk - (BUTTON) Junk - [147]Junk - (button) Follow - * Joined - Mar 12, 2017 - - • [148]May 17 '20 - (BUTTON) - * [149]Copy link - * - * (BUTTON) Hide - * - * - * - - points up - - (BUTTON) 1 like Like Reply - - - [150]holdit profile image - [151]holdit - (BUTTON) holdit - [152]holdit - (button) Follow - * Joined - May 15, 2020 - - • [153]May 15 '20 - (BUTTON) - * [154]Copy link - * - * (BUTTON) Hide - * - * - * - - Looking at the criticism made about some recent redesigns (reddit, - facebook, etc) it seems that the main complaint (from a user point of - view, at least) is how slow it feels compared to the previous version - or to a "simple" site with HTML, CSS, and a little bit of javascript. - - I haven't checked it recently, but when the new reddit UI was released, - scrolling was terrible on my $2500k laptop. It felt slow. Everything - was sluggish. It also downloaded a few MB of javascript on pages that - essentially had a thumbnail, a title, and some comments (not everyone - lives in a big city or is connected to a super fast internet - connection!). When the page was loaded, I was seeing more scrolling lag - because they lazyload some content. I mean, it's hard to like this - "modern web". - - As a user, I don't care about how things work behind the scenes. I - don't mind some javascript on a page, after all we don't need a page - reload just to preview a comment or "like" something. You can even use - javascript for everything, I don't mind. But it needs to be fast and it - needs to work well... and right now some "modern" sites provide a worse - experience than before. - - (BUTTON) 24 likes Like Reply - - - [155]iamschulz profile image - [156]Daniel Schulz - (BUTTON) Daniel Schulz - [157]Daniel Schulz - (button) Follow - Hi! I'm a frontend guy. - * Location - Germany - * Education - Studied Media Art and Design - * Work - Performance Engineer at Baqend - * Joined - Sep 17, 2018 - - • [158]May 15 '20 • Edited on May 15 • Edited - (BUTTON) - * [159]Copy link - * - * (BUTTON) Hide - * - * - * - - Tom identified the main weakness of modern web development correctly: - It's based on javascript. He points out the sluggishness and - accessibility problems that stem from that attitude, and hes absolutely - right to do so. Static pages (as a paradigm, not as Gatsby in - particular) are maybe not the cure for that, but they are definitely a - step into the right direction. - I just rewrote my website with hugo and specifically without a major JS - framework, but settled for a vanilla approach rooted in a progressive - enhancement mindset. I didn't even run into the problems that are - inherent to React, Vue and Angular. - Sure, you can serve HTML with SSR, but you still have to wait for the - bundle in order to have a functional site, plus a truckload of - ssr-related complexity. And that is utter rubbish. JS should never be a - requirement, it needs to be put in its place as the cherry on top of - the cake. - Progressive enhancement needs not only to be a major approach to - webdevelopment again, it needs to be out default mode of operation. - This is also the core of Toms article. And I agree with him. - - That said, nothing stops you from adding features like nice - transitions. But please be sure not to break standard web features - while doing so. - Transitions need to add to hyperlinks, not replace them. - - (BUTTON) 21 likes Like Reply - - - [160]richharris profile image - [161]Rich Harris - (BUTTON) Rich Harris - [162]Rich Harris - (button) Follow - I like turtles - * Location - Behind you - * Work - Graphics editor at the New York Times - * Joined - Jun 20, 2019 - - • [163]May 15 '20 - (BUTTON) - * [164]Copy link - * - * (BUTTON) Hide - * - * - * - - I feel like you didn't quite read the article closely enough ;) Of - course progressive enhancement needs to be the default — that's why - there's so much focus on SSR in all major meta-frameworks. - - Sure, you can serve HTML with SSR, but you still have to wait for - the bundle in order to have a functional site - - This isn't true! Take [165]sapper.svelte.dev, which is a site built - with Sapper and baked out as static pages. It works just fine without - JavaScript, you just don't get client-side routing. It's a small site, - but the same thing applies to larger ones like Gatsby's homepage — no - JS? No problem. - - (BUTTON) 20 likes Like Reply - - - [166]iamschulz profile image - [167]Daniel Schulz - (BUTTON) Daniel Schulz - [168]Daniel Schulz - (button) Follow - Hi! I'm a frontend guy. - * Location - Germany - * Education - Studied Media Art and Design - * Work - Performance Engineer at Baqend - * Joined - Sep 17, 2018 - - • [169]May 15 '20 - (BUTTON) - * [170]Copy link - * - * (BUTTON) Hide - * - * - * - - It certainly is true for standard implementations of React-, Vue- and - Angular- based sites. There may be a focus on SSR, but it still isn't - close enough to deserve to be the default. It needs to come without - extra complexity. Only then we're ready to take the step to fully - embrace those solution. - - And this is my point. You need to take one step after the other. It was - a mistake to build everything with javascript first and then try to - look if it still works without afterwards. The damage to the web has - been done. - - I didn't take a look at Sapper/Svelte. Though, in comparison, those are - still a nieche product. - - (BUTTON) 7 likes Like Thread - - [171]martinmalinda profile image - [172]Martin Malinda - (BUTTON) Martin Malinda - [173]Martin Malinda - (button) Follow - * Joined - Apr 7, 2020 - - • [174]May 18 '20 - (BUTTON) - * [175]Copy link - * - * (BUTTON) Hide - * - * - * - - The damage to the web has been done. - - JS certainly caused a lot of damage on many websites. But now - finally - - we're getting to the point of having frameworks which can, by - default, offer client-side routing with SSR and hydration without - shipping large bundles of JS. Up to this point the frontend devs should - have been more conservative and they should have thought twice whether - they should really go all-in into an SPA. But now's the time when it's - really starting to be a viable option. Next, Nuxt, Marko and Sapper are - finally technologies highly worth pursuing, even for content-based - websites. - - (BUTTON) 2 likes Like Reply - - - [176]ben profile image - [177]Ben Halpern - (BUTTON) Ben Halpern - [178]Ben Halpern - (button) Follow - A Canadian software developer who thinks he’s funny. - * Email - [179]ben@forem.com - * Location - NY - * Education - Mount Allison University - * Pronouns - He/him - * Work - Co-founder at Forem - * Joined - Dec 27, 2015 - - • [180]May 15 '20 - (BUTTON) - * [181]Copy link - * - * (BUTTON) Hide - * - * - * - - The future I want — the future I see — is one with tooling that's - accessible to the greatest number of people (including designers), - that can intelligently move work between server and client as - appropriate, that lets us build experiences that compete with native - on UX (yes, even for blogs!), and where upgrading part of a site to - 'interactive' or from 'static' to 'dynamic' doesn't involve - communication across disparate teams using different technologies. - We can only get there by committing to the paradigm Tom critiques — - the JavaScript-ish component framework server-rendered SPA. (Better - names welcomed.) - - I like this takeaway because it's heavy on acknowledging the process - behind the technology which is often disparate and confusing. Even the - most well-intentioned and organized dev team is going to get out of - wack if succeeding with the tooling is experts only. We need to be able - to achieve great performance, UX and accessibility even under - conditions where designers do some work, devs pop in some hotfixes here - and there, old devs leave with some of the knowledge, priorities - change, etc. - - (BUTTON) 19 likes Like Reply - - - [182]v6 profile image - [183]🦄N B🛡 - (BUTTON) 🦄N B🛡 - [184]🦄N B🛡 - (button) Follow - // , “It is not so important to be serious as it is to be serious about - the important things. The monkey wears an expression of seriousness... - but the monkey is serious because he itches."(No/No) - * Location - (No/No) - * Education - (No/No) - * Work - Security - * Joined - Mar 1, 2018 - - • [185]May 15 '20 • Edited on May 15 • Edited - (BUTTON) - * [186]Copy link - * - * (BUTTON) Hide - * - * - * - - I like this aspect of Mr. Harris' article, too. It's the first - principle of the Tao of HashiCorp: [187]Workflows, not Technologies. - - The HashiCorp approach is to focus on the end goal and workflow, - rather than the underlying technologies. Software and hardware will - evolve and improve, and it is our goal to make adoption of new - tooling simple, while still providing the most streamlined user - experience possible. Product design starts with an envisioned - workflow to achieve a set goal. We then identify existing tools that - simplify the workflow. If a sufficient tool does not exist, we step - in to build it. This leads to a fundamentally technology-agnostic - view — we will use the best technology available to solve the - problem. As technologies evolve and better tooling emerges, the - ideal workflow is just updated to leverage those technologies. - Technologies change, end goals stay the same. - - And it's why Sacrificial Architecture appeases the dark ones. - - (BUTTON) 4 likes Like Reply - - - [188]phlash profile image - [189]Phil Ashby - (BUTTON) Phil Ashby - [190]Phil Ashby - (button) Follow - 30+ years of tech, retired from an identity intelligence company, job - done! Dev community mod - mostly light gardening & weeding out spam :) - * Location - Felixstowe, UK - * Education - M.Eng (hons) Electronics, MIET, MBCS, AMCIISec, CEH - * Pronouns - he/him - * Work - Retired! - * Joined - Apr 2, 2017 - - • [191]May 15 '20 - (BUTTON) - * [192]Copy link - * - * (BUTTON) Hide - * - * - * - - Good response, opinions are always worth having, as long as you are - prepared to discuss/defend/change them! I had a few thoughts on this - topic last year in response to your good self and web components that I - think is worth referring back to: [193]dev.to/phlash909/comment/cghl - - In essence, the DOM and page model of HTML is a constraint around the - outside of applications that might be better inverted: I'd like to see - browsers that support HTML/DOM content if required, but do not - constrain devs to always go though it. Let's stop thinking of them as - HTML rendering engines, and start thinking of pre-installed runtimes - with excellent web-based application management! - - We'll want to retain the benefits of dynamic software running on the - client (native UX, easy architecture changes, no user-install step, - etc.), while leveraging the effort that goes into making that a - portable & safe thing to do (common APIs, sandboxes, browsers as the - standard runtime for client-side applications). We are nearly there - with PWAs perhaps? WASM then expands the available languages for the - runtime, allowing common client/server languages and development - processes to ease developer adoption. As/when a document needs - rendering, then HTML/DOM/CSS is there to perform it's proper function, - however many apps many be better off with a UX library (eg: SDL) or - widget set (eg: wxWidgets) atop the runtime bindings. - - (BUTTON) 11 likes Like Reply - - - [194]v6 profile image - [195]🦄N B🛡 - (BUTTON) 🦄N B🛡 - [196]🦄N B🛡 - (button) Follow - // , “It is not so important to be serious as it is to be serious about - the important things. The monkey wears an expression of seriousness... - but the monkey is serious because he itches."(No/No) - * Location - (No/No) - * Education - (No/No) - * Work - Security - * Joined - Mar 1, 2018 - - • [197]May 15 '20 - (BUTTON) - * [198]Copy link - * - * (BUTTON) Hide - * - * - * - - start thinking of pre-installed runtimes with excellent web-based - application management! - - If you were to remove the "web-based" part, it'd almost describe the - beginning of OSes back in the day. - - Which is perhaps what they are: The UI part of a vast "operating - system" by which we access the "applications" of the internet. - - (BUTTON) 4 likes Like Reply - - - [199]panesofglass profile image - [200]panesofglass - (BUTTON) panesofglass - [201]panesofglass - (button) Follow - * Joined - Jul 23, 2020 - - • [202]Jul 23 '20 - (BUTTON) - * [203]Copy link - * - * (BUTTON) Hide - * - * - * - - I believe at the point you fundamentally push to render things other - than markup, you start making a different application. And that is - perfectly reasonable. I’m frankly surprised how well HTTP has held up - to so many use cases. I long ago expected to see far more protocols for - more kinds of apps, but HTTP seems to have solved so many problems well - enough that it now hosts other protocols. - - There are probably more protocols that could be written and hosted on - other ports. Those would likely address many of these issues in a far - better way. I just wonder when the industry will pivot back to building - protocols and leave HTTP well enough alone. - - (BUTTON) 1 like Like Reply - - - [204]rhymes profile image - [205]rhymes - (BUTTON) rhymes - [206]rhymes - (button) Follow - Such software as dreams are made on. I mostly rant about performance, - unnecessary complexity, privacy and data collection. - * Joined - Feb 2, 2017 - - • [207]Jul 23 '20 - (BUTTON) - * [208]Copy link - * - * (BUTTON) Hide - * - * - * - - I think we're past that as most recent innovations in the web space are - either formats or evolutions of HTTP. Why reinvent the wheel if the - wheel works well? What do you think? - - (BUTTON) 1 like Like Thread - - [209]panesofglass profile image - [210]panesofglass - (BUTTON) panesofglass - [211]panesofglass - (button) Follow - * Joined - Jul 23, 2020 - - • [212]Jul 23 '20 - (BUTTON) - * [213]Copy link - * - * (BUTTON) Hide - * - * - * - - HTTP/3 with QUIC seems like a great improvement, but it is changing - HTTP. I don’t see why HTTP needs changing for most things. Why not - update SMTP or FTP, as well? QUIC solves specific problems, and it - might be better for those who need QUIC for it to have features better - suited to their needs. - - In some ways, this also feels like the mash of several formats into - HTML5 to avoid name spacing. While we focus on and champion components - within our own apps, we continue to avoid and break components in the - infrastructure. - - Therefore, I think we may see new protocols emerge as the weight of - these complexities begin to cause problems. That could still be some - way off. - - (BUTTON) 1 like Like Thread - - [214]rhymes profile image - [215]rhymes - (BUTTON) rhymes - [216]rhymes - (button) Follow - Such software as dreams are made on. I mostly rant about performance, - unnecessary complexity, privacy and data collection. - * Joined - Feb 2, 2017 - - • [217]Jul 23 '20 - (BUTTON) - * [218]Copy link - * - * (BUTTON) Hide - * - * - * - - I'm not sure it is changing HTTP, it's HTTP over UDP. The protocol is - basically the same as HTTP/1 and HTTP/2. - - QUIC solves specific problems, and it might be better for those who - need QUIC for it to have features better suited to their needs. - - QUIC solves a specific problem HTTP has because it sits on top of TCP - though, basically pipelining - - In some ways, this also feels like the mash of several formats into - HTML5 to avoid name spacing. While we focus on and champion - components within our own apps, we continue to avoid and break - components in the infrastructure. - - I'm not sure I follow the analogy with HTML5, sorry :( IIRC HTML5 was - created to stop having to revise HTML as a a single unit and let things - evolve at their own pace. Same with CSS 3 I guess. I don't think it's - the same thing here: HTTP/3 is the result of the entire world using - HTTP and needing to improve performance. - - Could they have created a new protocol? Sure, but why break - compatibility with millions of browsers, proxies, machines, software - application and so on that understand and function through HTTP? I - think the decision to rewrite the transport layer to be a smart one. - - This doesn't mean that other protocols can't emerge, but it's okay not - to throw away those that work already - - (BUTTON) 1 like Like Reply - - - [219]gregfletcher profile image - [220]Greg Fletcher - (BUTTON) Greg Fletcher - [221]Greg Fletcher - (button) Follow - loop { refactoring() } - * Work - Full Stack at Freelance - * Joined - Mar 16, 2019 - - • [222]May 15 '20 - (BUTTON) - * [223]Copy link - * - * (BUTTON) Hide - * - * - * - - Great article! - - Doesn't a lot of this disagreement stem from --> "keep the web as it - is, coz it's fine" vs "let's make it better by making mistakes along - the way coz that's how software development works"? - - (BUTTON) 14 likes Like Reply - - - [224]v6 profile image - [225]🦄N B🛡 - (BUTTON) 🦄N B🛡 - [226]🦄N B🛡 - (button) Follow - // , “It is not so important to be serious as it is to be serious about - the important things. The monkey wears an expression of seriousness... - but the monkey is serious because he itches."(No/No) - * Location - (No/No) - * Education - (No/No) - * Work - Security - * Joined - Mar 1, 2018 - - • [227]May 15 '20 - (BUTTON) - * [228]Copy link - * - * (BUTTON) Hide - * - * - * - - What about making it better by [229]sacrificing it? - - We can [230]learn this lesson from Biology, that the best way to avoid - excessive optimization is the ultimate flexibility: Keeping the option - on the table to throw out the code, or well abstracted parts of it, and - rewrite that code or product from scratch. - - It's a little known "dark" pattern of Software Design, from the shadows - of Agile, called "Sacrificial Architecture." - - [231]exponential growth isnt kind to architectural decisions - - (BUTTON) 5 likes Like Reply - - - [232]richharris profile image - [233]Rich Harris - (BUTTON) Rich Harris - [234]Rich Harris - (button) Follow - I like turtles - * Location - Behind you - * Work - Graphics editor at the New York Times - * Joined - Jun 20, 2019 - - • [235]May 15 '20 - (BUTTON) - * [236]Copy link - * - * (BUTTON) Hide - * - * - * - - Is the Web for applications? - - I feel like this question sort of answers itself! Have you heard of - Amazon? Gmail? Facebook? - - (BUTTON) 13 likes Like Reply - - - [237]ben profile image - [238]Ben Halpern - (BUTTON) Ben Halpern - [239]Ben Halpern - (button) Follow - A Canadian software developer who thinks he’s funny. - * Email - [240]ben@forem.com - * Location - NY - * Education - Mount Allison University - * Pronouns - He/him - * Work - Co-founder at Forem - * Joined - Dec 27, 2015 - - • [241]May 15 '20 - (BUTTON) - * [242]Copy link - * - * (BUTTON) Hide - * - * - * - - My perpective: The web is for applications. The web is also for rich - documents where reading and simple linking can take priority. - - And there is an uncanny valley when you the latter is the sensible - choice, but the former is the approach taken. - - And many, the web is whatever Google tells them it is. Is AMP the web? - - (BUTTON) 22 likes Like Reply - - - [243]gotofritz profile image - [244]fritz - (BUTTON) fritz - [245]fritz - (button) Follow - * Location - Berlin - * Joined - Sep 28, 2018 - - • [246]May 22 '20 - (BUTTON) - * [247]Copy link - * - * (BUTTON) Hide - * - * - * - - We need to have a similar approach in client side frameworks. - - No we don't... if the The One True Omniscient God Framework approach - that Rails developers are constantly pining for was really the best - one, then Rails would be ruling. It isn't; it peaked in 2012 or - thereabouts, knocked off its perch by Node, among other technologies. - It's a single point of failure and it cannot adapt quickly enough to - the bewilderingly fast changing environment in which we operate. - - Alternatively, you can pick one of the two frameworks that follow the - model you advocate: Ember (actually inspired by Rails) or Angular (more - of a C# flavour), both of which strive to be a nanny that remove as - much as possible the need to (god forbid!) make your own decisions or - (the horror!) having to learn new tools - - If I could have the framework of my dreams ... It would allow me to - focus on HTML with a sprinkle of JavaScript. - - You may want to consider [248]stimulusjs.org/, which comes from the - Rails universe (it was created by no other than David Heinemeier - Hansson, the Rails Superstar) and does exactly what you want - - (BUTTON) 5 likes Like Thread - - [249]loilo profile image - [250]Florian Reuschel - (BUTTON) Florian Reuschel - [251]Florian Reuschel - (button) Follow - Web developer (JS, PHP), OSS enthusiast, loves to explain things to - beginners - * Location - Karlsruhe, DE - * Joined - Jan 14, 2017 - - • [252]May 22 '20 - (BUTTON) - * [253]Copy link - * - * (BUTTON) Hide - * - * - * - - Can confirm that the Stimulus framework works great for that exact use - case. But if you're used to the more common frameworks, you might - quickly miss the declarative "give me data, I give you DOM" approach - they provide. - - I haven't tried it myself yet, but [254]Alpine.js gained some steam - lately and might be a good middle ground between Stimulus and the "top - dogs". - - (BUTTON) 4 likes Like Reply - - - [255]mattwelke profile image - [256]Matt Welke - (BUTTON) Matt Welke - [257]Matt Welke - (button) Follow - Back end software developer, open source enthusiast. - * Location - Ontario, Canada - * Education - Seneca College - * Work - Backend software engineer at DigitalOcean - * Joined - Aug 16, 2019 - - • [258]May 27 '20 - (BUTTON) - * [259]Copy link - * - * (BUTTON) Hide - * - * - * - - writing an Express API requires "old javascript" unless you want to - go through the hassle of setting Babel up - - Not sure what you mean here. You can use very recent JS features in - Node. We have async/await, async iteration, ES module imports, and more - now. I've never felt the need to set up Babel in an Express project. - - (BUTTON) 5 likes Like Reply - - - [260]mattgperry profile image - [261]Matt Perry - (BUTTON) Matt Perry - [262]Matt Perry - (button) Follow - Creator of Framer Motion, Popmotion and Pose - * Location - Amsterdam - * Joined - May 15, 2020 - - • [263]May 15 '20 - (BUTTON) - * [264]Copy link - * - * (BUTTON) Hide - * - * - * - - it's widely understood that if you want 60fps animation, you will - likely have to bypass the React update cycle and do things in a more - imperative fashion (indeed, this is what libraries like react-spring - do) - - Probably aside from the article, which I largely agree with, but I - think this is an odd point to try and make. This is true of any - component library that has overhead above imperative JS. But there's - nothing stopping you from using CSS in React, which is all Svelte does - anyway. - - (BUTTON) 9 likes Like Reply - - - [265]richharris profile image - [266]Rich Harris - (BUTTON) Rich Harris - [267]Rich Harris - (button) Follow - I like turtles - * Location - Behind you - * Work - Graphics editor at the New York Times - * Joined - Jun 20, 2019 - - • [268]May 15 '20 - (BUTTON) - * [269]Copy link - * - * (BUTTON) Hide - * - * - * - - Wrong, sorry :) - - This isn't a CSS demo: [270]twitter.com/Rich_Harris/status/120... - - (BUTTON) 11 likes Like Reply - - - [271]daniel15 profile image - [272]Daniel Lo Nigro - (BUTTON) Daniel Lo Nigro - [273]Daniel Lo Nigro - (button) Follow - Australian living in the San Francisco Bay Area. Front End Engineer at - Facebook. - * Location - Palo Alto, CA - * Education - Swinburne University, Australia - * Work - Front End Engineer at Facebook - * Joined - Jan 11, 2017 - - • [274]May 15 '20 • Edited on May 15 • Edited - (BUTTON) - * [275]Copy link - * - * (BUTTON) Hide - * - * - * - - We can provide better visual feedback that loading is taking place - - I'm not so sure about that... IMO, so many single-page apps get this - wrong. The native browser loading indicator is still a lot better than - many SPAs, and unfortunately it's something that can't be triggered - from JS (apart from ugly hacks like infinitely-loading iframes) - - With the advent of Node, that changed. The fact that we can do - server-side rendering and communicate with databases and - what-have-you using a language native to the web is a wonderful - development. - - Server-side JS was a thing looooong before Node. I remember using - Microsoft's version of JavaScript ("JScript") server-side via Classic - ASP in the early 2000s. The issue back then was that JavaScript just - wasn't quite that popular yet. ES5 wasn't around yet (it was all ES3), - and there was a lack of good third-party libraries. But still, it was - absolutely in use long before Node even existed. - - What Node did do was cross-platform support, introduce a module system - (CommonJS) as standard, and introduced the concept of easily obtaining - third-party packages via "npm", taking ideas from similar systems like - Perl's CPAN. - - (BUTTON) 4 likes Like Reply - - - [276]mrispoli24 profile image - [277]Mike Rispoli - (BUTTON) Mike Rispoli - [278]Mike Rispoli - (button) Follow - I'm an award-winning designer, engineer and creative technologist that - helps daring founders ship valuable software. - * Location - New York City - * Work - Co-founder & CTO at Cause of a Kind - * Joined - Mar 8, 2019 - - • [279]May 15 '20 - (BUTTON) - * [280]Copy link - * - * (BUTTON) Hide - * - * - * - - So one thing I wondered after reading Tom's article and now yours is - how you feel about modern UI being so tied to node or javascript run - times on the backend specifically. For instance if you were to be - running something in Go and Phoenix you could dynamically render HTML - on the back end and serve it up quite a bit faster that the current SSR - environments based in Next or Nuxt or Sapper? So essentially somewhat - the way Stimulus JS works where you can send over static HTML, rendered - anywhere, by any type of server and the frontend could just hydrate - that and build components from it. - - (BUTTON) 3 likes Like Reply - - - [281]richharris profile image - [282]Rich Harris - (BUTTON) Rich Harris - [283]Rich Harris - (button) Follow - I like turtles - * Location - Behind you - * Work - Graphics editor at the New York Times - * Joined - Jun 20, 2019 - - • [284]May 15 '20 - (BUTTON) - * [285]Copy link - * - * (BUTTON) Hide - * - * - * - - This is the 'PHP with jQuery sprinkles' approach I mention in the - article, except with shinier things than PHP and jQuery. I'm not a fan, - personally. - - Phoenix LiveView is an interesting take on the problem, but I suspect - you hit a limit as to how ambitious your UI can be when deltas have to - come across web sockets at a consistent 60fps. - - (BUTTON) 5 likes Like Reply - - - [286]mrispoli24 profile image - [287]Mike Rispoli - (BUTTON) Mike Rispoli - [288]Mike Rispoli - (button) Follow - I'm an award-winning designer, engineer and creative technologist that - helps daring founders ship valuable software. - * Location - New York City - * Work - Co-founder & CTO at Cause of a Kind - * Joined - Mar 8, 2019 - - • [289]May 15 '20 - (BUTTON) - * [290]Copy link - * - * (BUTTON) Hide - * - * - * - - So do you think it’s impossible for a framework to effectively hydrate - static HTML not rendered by that frameworks specified renderToString - method? - - I really don’t know what these functions do under the hood to allow - rehydration so I’m just curious if it would be possible and achieve a - good frame rate. - - (BUTTON) 2 likes Like Reply - - - [291]lawwantsin profile image - [292]Lawrence Whiteside - (BUTTON) Lawrence Whiteside - [293]Lawrence Whiteside - (button) Follow - I'm a freelance web developer working remotely. Inquire about projects. - * Location - Austin, TX - * Work - Freelance Web Developer at Self-employeed - * Joined - Jun 19, 2019 - - • [294]May 15 '20 - (BUTTON) - * [295]Copy link - * - * (BUTTON) Hide - * - * - * - - Universal Javascript is a need for only Juniors out of Bootcamp. And - the cost is great. Just learn about parsers and you'll never look at a - framework or template library ever again. Good on you for jumping on - how terrible Gatsby is. - - (BUTTON) 3 likes Like Reply - - [296]View full discussion (98 comments) - - [297]Code of Conduct • [298]Report abuse - - Are you sure you want to hide this comment? It will become hidden in - your post, but will still be visible via the comment's [299]permalink. - [ ] - - Hide child comments as well - - (BUTTON) Confirm - - For further actions, you may consider blocking this person and/or - [300]reporting abuse +Subscribe +pic +[ ] +Personal Trusted User +[59] Create template + +Templates let you quickly answer FAQs or store snippets for re-use. + +Submit Preview [62]Dismiss + +[63] twigman08 profile image +[64] Chad Smith +Chad Smith +[66] [71bd929d-4] Chad Smith +Follow +Work with C# all day everyday creating web applications. Huge baseball buff. + + • Location + Texas + • Education + B.S in Computer Science + • Joined + Dec 17, 2017 + +• [68] May 15 '20 + + • [70]Copy link + • + • Hide + • + • + • + +Honestly my biggest issue with the current state of the web is the current +state of how complex the tools or build process is. + +I miss the days of some html, add a bit of JavaScript to the page and you were +done. You didn't worry about going and making sure you had a complete build or +bundling process to get everything good. You spent your time worrying about how +to develop your app. Which in my opinion was better for the users. There was +less bugs. We actually spent more time making sure the application worked rock +solid. + +Nowadays to get anything cool to be be ready for production you have spend +needless time on the configuration. Did you do this? Did you configure it to do +that? Oh you can't do that unless you eject it that build tool and use this +build tool. That's where the current state of the web is failing. + +Sure we have taken steps forward in some areas. But we have to be honest with +ourselves. We took major steps back in other areas of the web. Sometimes I +wonder if we took too many steps back. + +61 likes Like [73] Reply + +[74] gotofritz profile image +[75] fritz +fritz +[77] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [79] May 18 '20 + + • [81]Copy link + • + • Hide + • + • + • + +I don't get it. Nobody's stopping you from firing up an HTML doc in Notepad and +FTPing the result to a web server, if that's all you need. But other people +have more complex needs (in the "good ole days" there were no smart phones, to +mention just one thing) and therefore we need more complex tools. Why do you +want to force me to party like it's 1999? + +23 likes Like [84] Reply + +[85] twigman08 profile image +[86] Chad Smith +Chad Smith +[88] [71bd929d-4] Chad Smith +Follow +Work with C# all day everyday creating web applications. Huge baseball buff. + + • Location + Texas + • Education + B.S in Computer Science + • Joined + Dec 17, 2017 + +• [90] May 19 '20 + + • [92]Copy link + • + • Hide + • + • + • + +My issue isn't with applications are too complex really. I develop complex +applications too at work. + +My issue is with all the moving parts with a modern web application. Fighting +if I can use certain language features. Oh I can't, now I have to bother with +setting up and making sure I can use Babel or something to do it properly, or +even loading in polyfills (cool just added another dependency the browser has +to load before the application can be used). + +That still hasn't covered bundling everything. What's the correct way bundle +this? Well crap I now have to go and correctly configure WebPack. Unless you're +one of the VERY FEW experts on that ,that will take time to figure out to get +right. Ok so I think it bundles right, well now how should I lazy load this +code for the user? What should be lazy loaded? What should i use to set it up? + +That's just the beginning. I could go on and on about the other complex moving +parts with a modern web application. + +I am not asking anyone to make applications like it is 1999. All I'm asking for +is a more modern and simpler process that is a STANDARD. + +Maybe it is because I come from compiled language background. Where I have to +worry about that one single binary. I only have to worry if the compiler +supports the language version I'm using. Where I can just pass in a single flag +to the compiler for the optimization level I want. + +Yes I will be the first to say that in some areas of modern web application +development we have taken steps forward. I just wonder if we have taken steps +back in some areas to take those steps forward. + +13 likes Like Thread + +[95] gotofritz profile image +[96] fritz +fritz +[98] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [100] May 22 '20 • Edited on May 22 • Edited + + • [102]Copy link + • + • Hide + • + • + • + + All I'm asking for is a more modern and simpler process that is a STANDARD + ... + Maybe it is because I come from compiled language background ... + +Well I am sorry, but web development is a complete different kettle of fish. We +download all the parts that make up an application asynchronously, on a wide +variety of devices, with different specs and rendering capabilities - all +things which the app, once downloaded, need to adapt to. We have progressive +rendering and respond to all sort of sensors. All while ensuring boot up time +for the app is in the microseconds range and security for both you who download +the code and the server. + +Your expectations are simply unrealistic, sorry. + +Also, we always had polyfills, even "back in the day". Except that back then +everyone had to bake their own. In fact, we had browser wars and appalling +browser (IE5 for the Mac, anyone??!?) and it was a real pain in the neck. + +10 likes Like [105] Reply + +[106] adrianus profile image +[107] Adrianus +Adrianus +[109] [4e6de1e2-6] Adrianus +Follow +Running a small company based in Kent. + + • Location + Chatham, Kent + • Education + autodidactic + • Work + Entrepreneur at AVANDERGRINTEN Ltd. + • Joined + Jan 21, 2020 + +• [111] May 19 '20 • Edited on May 20 • Edited + + • [113]Copy link + • + • Hide + • + • + • + +Bingo, the complexity today is a must, at least because of the growing +smartphone usage. The simple reason why "Native Apps didn't kill the web even +with all their superior capabilities" (Ryan) is simply UX. As internet usage +often starts with searching for something having in mind, that all-app-thinking +interrupts exactly this flow, leaving at least 30% of all traffic untouched. +For what? For 5-minutes-crafts skyrocketing their YouTube traffic? Although not +everything needs server side complexity plus having API's and webhooks easily +integrated using browser capabilities not existing in the god old days, the +architecture underneath is not the real issue. + +3 likes Like [116] Reply + +[117] ojrask profile image +[118] Otto Rask +Otto Rask +[120] [f4751361-7] Otto Rask +Follow +A software engineer, mainly PHP, Rust, and related things. + + • Location + Finland + • Joined + Mar 12, 2019 + +• [122] May 28 '21 + + • [124]Copy link + • + • Hide + • + • + • + +You fight complexity with ... more complexity? + +1 like Like Thread + +[127] gotofritz profile image +[128] fritz +fritz +[130] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [132] May 28 '21 + + • [134]Copy link + • + • Hide + • + • + • + +You are getting it wrong. The aim is not "to fight complexity". The aim is to +fulfil complex needs. I am saying for that you often need more complex tools. + +1 like Like Thread + +[137] ojrask profile image +[138] Otto Rask +Otto Rask +[140] [f4751361-7] Otto Rask +Follow +A software engineer, mainly PHP, Rust, and related things. + + • Location + Finland + • Joined + Mar 12, 2019 + +• [142] May 28 '21 + + • [144]Copy link + • + • Hide + • + • + • + +What percentage of modern web is a "complex needs" target that requires a +complex solution such as React or Vue or perhaps something custom written in +WASM? 50% 25%? 5% 1%? + +2 likes Like Thread + +[147] gotofritz profile image +[148] fritz +fritz +[150] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [152] May 28 '21 + + • [154]Copy link + • + • Hide + • + • + • + +All of it. Unless you have actual data that proves otherwise... + +2 likes Like Thread + +[157] jacobmakestheweb profile image +[158] Jacob Ybarra +Jacob Ybarra +[160] [ea7fc8c6-1] Jacob Ybarra +Follow +dank web dev + + • Education + school + • Work + nada + • Joined + Sep 21, 2021 + +• [162] Sep 21 '21 + + • [164]Copy link + • + • Hide + • + • + • + +uh what? the web is about content and media. not a software environment. + +1 like Like [167] Reply + +[168] techbelle profile image +[169] rachelle palmer +rachelle palmer +[171] [16c23058-3] rachelle palmer +Follow +I decided I would try to build an app in every programming language. That +didn't happen, but what I learned along the way was really valuable. + + • Location + Raleigh, NC + • Joined + Sep 23, 2020 + +• [173] Feb 25 '21 + + • [175]Copy link + • + • Hide + • + • + • + +re: sessions --> I keep tabs open for months at a time, not sure about anyone +else + +1 like Like [178] Reply + +[179] mark_saward profile image +[180] Mark Saward +Mark Saward +[182] [2c925970-7] Mark Saward +Follow +CEO and Developer | PhD in Philosophy | Some things I like: Linux, Go, Rust, +SQL, Devops + + • Location + Victoria, Australia + • Education + BA/Bsc in Philosophy and Physics. PhD in Philosophy. + • Work + CEO/Software Developer at Episub + • Joined + May 13, 2020 + +• [184] May 15 '20 + + • [186]Copy link + • + • Hide + • + • + • + +Some interesting thoughts, in the original article and your response. Certainly +good for generating discussion :) + + It will take more than technological advancement to get the web there; it + will take a cultural shift as well. But we certainly can't get there if we + abandon our current trajectory. + +The problem as I see it is that the web -- in terms of client-side executed +markup and code (HTML/CSS/JavaScript) just wasn't designed with these kinds of +interactions in mind (the interactions that Ryan Florence highlighted). It's +the wrong foundation for it. + +I don't think that "getting there" should be through bending original web +technologies, but rather with something else entirely -- perhaps WebAssembly, +or a return to actual native applications much like we've come to depend on on +our tablets and phones. We already can do nice animations like that iPad demo +with native desktop applications. There's many advantages to websites over +native desktop apps, with the standout one being that they don't require +someone to install an application on their machine. Maybe WebAssembly can give +us a compromise -- desktop apps built with technology designed for that job, +but available in a way that doesn't require any local installation. Then we can +use tools that were purpose built for those kinds of tasks, instead of trying +to wrangle the foundations of the web to fit something they were never built +for. + +When I think back to how we used to build websites back in the day, and how we +build sites with technologies in tools like React now, I'm honestly not sure +that we've gained anything of great enough value relative to the simplicity +we've lost. In short, I'd be happy to abandon our current trajectory and put +our hope in alternative solutions for those situations where what we really +need is a native application. Leave the web for what it's good at. + +23 likes Like [189] Reply + +[190] ryansolid profile image +[191] Ryan Carniato +Ryan Carniato +[193] [a3d1cfed-a] Ryan Carniato +Follow +Frontend performance enthusiast and Fine-Grained Reactivity super fan. Author +of the SolidJS UI library and MarkoJS Core Team Member. + + • Location + San Jose, California + • Education + Computer Engineering B.A.Sc, University of British Columbia + • Work + Principal Engineer, Open Source, Netlify + • Joined + Jun 25, 2019 + +• [195] May 15 '20 + + • [197]Copy link + • + • Hide + • + • + • + +That's interesting. I mean I was there too, and the extent of what I can build +with a modern library so extends what I could reasonably do before. And the +reason for that is JavaScript. When I was building sites in the late 90s so +many things weren't possible and you had no choice but to pay these costs for +interactivity. Sure I view sourced a few cool tricks.. image maps etc, but with +my table based layouts and a little JavaScript I could do very little. Part of +it was the available DOM api's. My lack of understanding of the language but I +think we look at the past with rose colored glasses. + +It's more interesting to me that native platforms have borrowed concepts from +libraries like React in terms of declarative views etc. I'm not saying React +invented this stuff but that the trend would suggest the contrary. These trends +could be mistakes but popularity has as much stake in the course of events as +innate value. + +I think this comes down to really this hope of a Silver Bullet. It doesn't +exist. Instead we have momentum of a ubiquitous platform that just is +constantly aiming to improve. It's not only that the other approaches have +already lost, we're getting to a point where any new approach will have to +atleast acknowledge the current web. At this point a competitor isn't going to +change the tide, but something from within. It's more likely that the web +addresses those fundamental shortcomings than people moving to a different +platform. Native Apps didn't kill the web even with all their superior +capabilities. And on a similar note it is going to take monumental change for +this to fundamentally change. Even with React's reach, it wasn't alone in a +movement that started years before. This is bigger than any particular library +or framework. + +13 likes Like [200] Reply + +[201] mark_saward profile image +[202] Mark Saward +Mark Saward +[204] [2c925970-7] Mark Saward +Follow +CEO and Developer | PhD in Philosophy | Some things I like: Linux, Go, Rust, +SQL, Devops + + • Location + Victoria, Australia + • Education + BA/Bsc in Philosophy and Physics. PhD in Philosophy. + • Work + CEO/Software Developer at Episub + • Joined + May 13, 2020 + +• [206] May 16 '20 • Edited on May 16 • Edited + + • [208]Copy link + • + • Hide + • + • + • + +There is absolutely no doubt that you can do incredible things with modern web, +and the power unlocked by having a programming language in the browser has been +amazing. However, when I think about a great deal of the websites I interact +with, and ones I build, there would not be much lost if they significantly +simplified the tech stack they work with to be closer to the core technologies +of the web (including a splash of JavaScript). + +What I'm trying to convey is that I think our move to make everything a web app +has been a mistake, for multiple reasons. You are absolutely right to say that +this tide is going to be very hard (perhaps impossible) to turn, and I +absolutely agree there is no silver bullet (I've looked), but that doesn't mean +we haven't taken a worse path and shouldn't lament for what could have been. + +The advantages of web apps are compelling for developers -- they are easy to +distribute, update, control, make cross platform, when compared to native apps. +It is not hard to understand why and how we have ended up where we are. I just +wish we were somewhere else -- but it would take a lot of work to create that +'silver bullet'. + +11 likes Like Thread + +[211] adrianus profile image +[212] Adrianus +Adrianus +[214] [4e6de1e2-6] Adrianus +Follow +Running a small company based in Kent. + + • Location + Chatham, Kent + • Education + autodidactic + • Work + Entrepreneur at AVANDERGRINTEN Ltd. + • Joined + Jan 21, 2020 + +• [216] May 19 '20 • Edited on May 20 • Edited + + • [218]Copy link + • + • Hide + • + • + • + +That whole app environment was basically triggered by one need, and one need +only: bandwidth. No idea if anyone remembers when they launched this WAP +protocol, making the internet available on smartphones, what failed for two +reasons. The providers made it easy to access on their own portals aka AOL +strategy at beginning of the web, leaving the rest of the market untouched, +secondly the site performance was ridiculous. Apple stepped in, put a bunch of +intelligence into the app, dramatically reducing the load time, did not convert +so much traffic on their own apps and let developers do what they do best. By +2008 more than 50% of the whole mobile internet traffic was iPhone traffic. + +Bandwidth is no longer the breaking point. + +Google has for years campaigned the untapped goldmine local traffic, experience +flows that often start at the search for getting something done in time, +monetising on micro moments as more than half of all mobile searches have a +local intend. I posted an example how something to get done interferes +cross-applicational from the perspective of a user. With an app-only scheme +this is getting impossible. Sure it is understandable that nobody pays so much +attention. Most search engines run a change and heavily invested in AI to +optimise traffic at the client's frontend. But even this is not enough, when it +comes to intends other than something very individualised. I wouldn't care so +much about the user, but more about what the user wants to achieve. + +1 like Like [221] Reply + +[222] oenonono profile image +[223] Junk +Junk +[225] [default_pr] Junk +Follow + + • Joined + Mar 12, 2017 + +• [227] May 17 '20 + + • [229]Copy link + • + • Hide + • + • + • + +React definitely didn't invent HTML. + +Declarative views, indeed. + +1 like Like [232] Reply + +[233] v6 profile image +[234] 🦄N B🛡 +🦄N B🛡 +[236] [8267c2c7-f] 🦄N B🛡 +Follow +// , “It is not so important to be serious as it is to be serious about the +important things. The monkey wears an expression of seriousness... but the +monkey is serious because he itches."(No/No) + + • Location + (No/No) + • Education + (No/No) + • Work + Security + • Joined + Mar 1, 2018 + +• [238] May 15 '20 + + • [240]Copy link + • + • Hide + • + • + • + + The problem as I see it is that the web -- in terms of client-side executed + markup and code (HTML/CSS/JavaScript) just wasn't designed with these kinds + of interactions in mind (the interactions that Ryan Florence highlighted). + It's the wrong foundation for it. + +Yes. Please. Can we please just accept that it's all broken. + +4 likes Like [243] Reply + +[244] gotofritz profile image +[245] fritz +fritz +[247] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [249] May 18 '20 • Edited on May 18 • Edited + + • [251]Copy link + • + • Hide + • + • + • + +Not at all. + +CSS has media queries and all sort of crazy and wonderful stuff. HTML has tags +for responsive design. JS has (in the browser) access to apis like mutation +observer and orientation and speech recognition. It's TOTALLY built for that. +Enough of the "get off my lawn" negativity + +8 likes Like Thread + +[254] v6 profile image +[255] 🦄N B🛡 +🦄N B🛡 +[257] [8267c2c7-f] 🦄N B🛡 +Follow +// , “It is not so important to be serious as it is to be serious about the +important things. The monkey wears an expression of seriousness... but the +monkey is serious because he itches."(No/No) + + • Location + (No/No) + • Education + (No/No) + • Work + Security + • Joined + Mar 1, 2018 + +• [259] May 18 '20 • Edited on May 18 • Edited + + • [261]Copy link + • + • Hide + • + • + • + +shakes his cane at you + +mutters incomprehensibly + +4 likes Like [264] Reply + +[265] holdit profile image +[266] holdit +holdit +[268] [6f8ff7f5-7] holdit +Follow + + • Joined + May 15, 2020 + +• [270] May 15 '20 + + • [272]Copy link + • + • Hide + • + • + • + +Looking at the criticism made about some recent redesigns (reddit, facebook, +etc) it seems that the main complaint (from a user point of view, at least) is +how slow it feels compared to the previous version or to a "simple" site with +HTML, CSS, and a little bit of javascript. + +I haven't checked it recently, but when the new reddit UI was released, +scrolling was terrible on my $2500k laptop. It felt slow. Everything was +sluggish. It also downloaded a few MB of javascript on pages that essentially +had a thumbnail, a title, and some comments (not everyone lives in a big city +or is connected to a super fast internet connection!). When the page was +loaded, I was seeing more scrolling lag because they lazyload some content. I +mean, it's hard to like this "modern web". + +As a user, I don't care about how things work behind the scenes. I don't mind +some javascript on a page, after all we don't need a page reload just to +preview a comment or "like" something. You can even use javascript for +everything, I don't mind. But it needs to be fast and it needs to work well... +and right now some "modern" sites provide a worse experience than before. + +24 likes Like [275] Reply + +[276] iamschulz profile image +[277] Daniel Schulz +Daniel Schulz +[279] [0f4b16d2-a] Daniel Schulz +Follow +Hi! I'm a frontend guy. + + • Location + Germany + • Education + Studied Media Art and Design + • Work + Performance Engineer at Baqend + • Joined + Sep 17, 2018 + +• [281] May 15 '20 • Edited on May 15 • Edited + + • [283]Copy link + • + • Hide + • + • + • + +Tom identified the main weakness of modern web development correctly: It's +based on javascript. He points out the sluggishness and accessibility problems +that stem from that attitude, and hes absolutely right to do so. Static pages +(as a paradigm, not as Gatsby in particular) are maybe not the cure for that, +but they are definitely a step into the right direction. +I just rewrote my website with hugo and specifically without a major JS +framework, but settled for a vanilla approach rooted in a progressive +enhancement mindset. I didn't even run into the problems that are inherent to +React, Vue and Angular. +Sure, you can serve HTML with SSR, but you still have to wait for the bundle in +order to have a functional site, plus a truckload of ssr-related complexity. +And that is utter rubbish. JS should never be a requirement, it needs to be put +in its place as the cherry on top of the cake. +Progressive enhancement needs not only to be a major approach to webdevelopment +again, it needs to be out default mode of operation. +This is also the core of Toms article. And I agree with him. + +That said, nothing stops you from adding features like nice transitions. But +please be sure not to break standard web features while doing so. +Transitions need to add to hyperlinks, not replace them. + +21 likes Like [286] Reply + +[287] richharris profile image +[288] Rich Harris +Rich Harris +[290] [92d6b6d1-4] Rich Harris +Follow +I like turtles + + • Location + Behind you + • Work + Graphics editor at the New York Times + • Joined + Jun 20, 2019 + +• [292] May 15 '20 + + • [294]Copy link + • + • Hide + • + • + • + +I feel like you didn't quite read the article closely enough ;) Of course +progressive enhancement needs to be the default — that's why there's so much +focus on SSR in all major meta-frameworks. + + Sure, you can serve HTML with SSR, but you still have to wait for the + bundle in order to have a functional site + +This isn't true! Take [296]sapper.svelte.dev, which is a site built with Sapper +and baked out as static pages. It works just fine without JavaScript, you just +don't get client-side routing. It's a small site, but the same thing applies to +larger ones like Gatsby's homepage — no JS? No problem. + +20 likes Like [298] Reply + +[299] iamschulz profile image +[300] Daniel Schulz +Daniel Schulz +[302] [0f4b16d2-a] Daniel Schulz +Follow +Hi! I'm a frontend guy. + + • Location + Germany + • Education + Studied Media Art and Design + • Work + Performance Engineer at Baqend + • Joined + Sep 17, 2018 + +• [304] May 15 '20 + + • [306]Copy link + • + • Hide + • + • + • + +It certainly is true for standard implementations of React-, Vue- and Angular- +based sites. There may be a focus on SSR, but it still isn't close enough to +deserve to be the default. It needs to come without extra complexity. Only then +we're ready to take the step to fully embrace those solution. + +And this is my point. You need to take one step after the other. It was a +mistake to build everything with javascript first and then try to look if it +still works without afterwards. The damage to the web has been done. + +I didn't take a look at Sapper/Svelte. Though, in comparison, those are still a +nieche product. + +7 likes Like Thread + +[309] martinmalinda profile image +[310] Martin Malinda +Martin Malinda +[312] [2ee5ec39-1] Martin Malinda +Follow + + • Joined + Apr 7, 2020 + +• [314] May 18 '20 + + • [316]Copy link + • + • Hide + • + • + • + + The damage to the web has been done. + +JS certainly caused a lot of damage on many websites. But now - finally - we're +getting to the point of having frameworks which can, by default, offer +client-side routing with SSR and hydration without shipping large bundles of +JS. Up to this point the frontend devs should have been more conservative and +they should have thought twice whether they should really go all-in into an +SPA. But now's the time when it's really starting to be a viable option. Next, +Nuxt, Marko and Sapper are finally technologies highly worth pursuing, even for +content-based websites. + +2 likes Like [319] Reply + +[320] ben profile image +[321] Ben Halpern +Ben Halpern +[323] [f451a206-1] Ben Halpern +Follow +A Canadian software developer who thinks he’s funny. + + • Email + [325]ben@forem.com + • Location + NY + • Education + Mount Allison University + • Pronouns + He/him + • Work + Co-founder at Forem + • Joined + Dec 27, 2015 + +• [326] May 15 '20 + + • [328]Copy link + • + • Hide + • + • + • + + The future I want — the future I see — is one with tooling that's + accessible to the greatest number of people (including designers), that can + intelligently move work between server and client as appropriate, that lets + us build experiences that compete with native on UX (yes, even for blogs!), + and where upgrading part of a site to 'interactive' or from 'static' to + 'dynamic' doesn't involve communication across disparate teams using + different technologies. We can only get there by committing to the paradigm + Tom critiques — the JavaScript-ish component framework server-rendered SPA. + (Better names welcomed.) + +I like this takeaway because it's heavy on acknowledging the process behind the +technology which is often disparate and confusing. Even the most +well-intentioned and organized dev team is going to get out of wack if +succeeding with the tooling is experts only. We need to be able to achieve +great performance, UX and accessibility even under conditions where designers +do some work, devs pop in some hotfixes here and there, old devs leave with +some of the knowledge, priorities change, etc. + +19 likes Like [331] Reply + +[332] v6 profile image +[333] 🦄N B🛡 +🦄N B🛡 +[335] [8267c2c7-f] 🦄N B🛡 +Follow +// , “It is not so important to be serious as it is to be serious about the +important things. The monkey wears an expression of seriousness... but the +monkey is serious because he itches."(No/No) + + • Location + (No/No) + • Education + (No/No) + • Work + Security + • Joined + Mar 1, 2018 + +• [337] May 15 '20 • Edited on May 15 • Edited + + • [339]Copy link + • + • Hide + • + • + • + +I like this aspect of Mr. Harris' article, too. It's the first principle of the +Tao of HashiCorp: [341]Workflows, not Technologies. + + The HashiCorp approach is to focus on the end goal and workflow, rather + than the underlying technologies. Software and hardware will evolve and + improve, and it is our goal to make adoption of new tooling simple, while + still providing the most streamlined user experience possible. Product + design starts with an envisioned workflow to achieve a set goal. We then + identify existing tools that simplify the workflow. If a sufficient tool + does not exist, we step in to build it. This leads to a fundamentally + technology-agnostic view — we will use the best technology available to + solve the problem. As technologies evolve and better tooling emerges, the + ideal workflow is just updated to leverage those technologies. Technologies + change, end goals stay the same. + +And it's why Sacrificial Architecture appeases the dark ones. + +4 likes Like [343] Reply + +[344] phlash profile image +[345] Phil Ashby +Phil Ashby +[347] [e6bffa0e-3] Phil Ashby +Follow +30+ years of tech, retired from an identity intelligence company, job done! Dev +community mod - mostly light gardening & weeding out spam :) + + • Location + Felixstowe, UK + • Education + M.Eng (hons) Electronics, MIET, MBCS, AMCIISec, CEH + • Pronouns + he/him + • Work + Retired! + • Joined + Apr 2, 2017 + +• [349] May 15 '20 + + • [351]Copy link + • + • Hide + • + • + • + +Good response, opinions are always worth having, as long as you are prepared to +discuss/defend/change them! I had a few thoughts on this topic last year in +response to your good self and web components that I think is worth referring +back to: [353]dev.to/phlash909/comment/cghl + +In essence, the DOM and page model of HTML is a constraint around the outside +of applications that might be better inverted: I'd like to see browsers that +support HTML/DOM content if required, but do not constrain devs to always go +though it. Let's stop thinking of them as HTML rendering engines, and start +thinking of pre-installed runtimes with excellent web-based application +management! + +We'll want to retain the benefits of dynamic software running on the client +(native UX, easy architecture changes, no user-install step, etc.), while +leveraging the effort that goes into making that a portable & safe thing to do +(common APIs, sandboxes, browsers as the standard runtime for client-side +applications). We are nearly there with PWAs perhaps? WASM then expands the +available languages for the runtime, allowing common client/server languages +and development processes to ease developer adoption. As/when a document needs +rendering, then HTML/DOM/CSS is there to perform it's proper function, however +many apps many be better off with a UX library (eg: SDL) or widget set (eg: +wxWidgets) atop the runtime bindings. + +11 likes Like [355] Reply + +[356] v6 profile image +[357] 🦄N B🛡 +🦄N B🛡 +[359] [8267c2c7-f] 🦄N B🛡 +Follow +// , “It is not so important to be serious as it is to be serious about the +important things. The monkey wears an expression of seriousness... but the +monkey is serious because he itches."(No/No) + + • Location + (No/No) + • Education + (No/No) + • Work + Security + • Joined + Mar 1, 2018 + +• [361] May 15 '20 + + • [363]Copy link + • + • Hide + • + • + • + + start thinking of pre-installed runtimes with excellent web-based + application management! + +If you were to remove the "web-based" part, it'd almost describe the beginning +of OSes back in the day. + +Which is perhaps what they are: The UI part of a vast "operating system" by +which we access the "applications" of the internet. + +4 likes Like [366] Reply + +[367] panesofglass profile image +[368] panesofglass +panesofglass +[370] [b5aa0a77-5] panesofglass +Follow + + • Joined + Jul 23, 2020 + +• [372] Jul 23 '20 + + • [374]Copy link + • + • Hide + • + • + • + +I believe at the point you fundamentally push to render things other than +markup, you start making a different application. And that is perfectly +reasonable. I’m frankly surprised how well HTTP has held up to so many use +cases. I long ago expected to see far more protocols for more kinds of apps, +but HTTP seems to have solved so many problems well enough that it now hosts +other protocols. + +There are probably more protocols that could be written and hosted on other +ports. Those would likely address many of these issues in a far better way. I +just wonder when the industry will pivot back to building protocols and leave +HTTP well enough alone. + +1 like Like [377] Reply + +[378] rhymes profile image +[379] rhymes +rhymes +[381] [bfd9a4a5-9] rhymes +Follow +Such software as dreams are made on. I mostly rant about performance, +unnecessary complexity, privacy and data collection. + + • Joined + Feb 2, 2017 + +• [383] Jul 23 '20 + + • [385]Copy link + • + • Hide + • + • + • + +I think we're past that as most recent innovations in the web space are either +formats or evolutions of HTTP. Why reinvent the wheel if the wheel works well? +What do you think? + +1 like Like Thread + +[388] panesofglass profile image +[389] panesofglass +panesofglass +[391] [b5aa0a77-5] panesofglass +Follow + + • Joined + Jul 23, 2020 + +• [393] Jul 23 '20 + + • [395]Copy link + • + • Hide + • + • + • + +HTTP/3 with QUIC seems like a great improvement, but it is changing HTTP. I +don’t see why HTTP needs changing for most things. Why not update SMTP or FTP, +as well? QUIC solves specific problems, and it might be better for those who +need QUIC for it to have features better suited to their needs. + +In some ways, this also feels like the mash of several formats into HTML5 to +avoid name spacing. While we focus on and champion components within our own +apps, we continue to avoid and break components in the infrastructure. + +Therefore, I think we may see new protocols emerge as the weight of these +complexities begin to cause problems. That could still be some way off. + +1 like Like Thread + +[398] rhymes profile image +[399] rhymes +rhymes +[401] [bfd9a4a5-9] rhymes +Follow +Such software as dreams are made on. I mostly rant about performance, +unnecessary complexity, privacy and data collection. + + • Joined + Feb 2, 2017 + +• [403] Jul 23 '20 + + • [405]Copy link + • + • Hide + • + • + • + +I'm not sure it is changing HTTP, it's HTTP over UDP. The protocol is basically +the same as HTTP/1 and HTTP/2. + + QUIC solves specific problems, and it might be better for those who need + QUIC for it to have features better suited to their needs. + +QUIC solves a specific problem HTTP has because it sits on top of TCP though, +basically pipelining + + In some ways, this also feels like the mash of several formats into HTML5 + to avoid name spacing. While we focus on and champion components within our + own apps, we continue to avoid and break components in the infrastructure. + +I'm not sure I follow the analogy with HTML5, sorry :( IIRC HTML5 was created +to stop having to revise HTML as a a single unit and let things evolve at their +own pace. Same with CSS 3 I guess. I don't think it's the same thing here: HTTP +/3 is the result of the entire world using HTTP and needing to improve +performance. + +Could they have created a new protocol? Sure, but why break compatibility with +millions of browsers, proxies, machines, software application and so on that +understand and function through HTTP? I think the decision to rewrite the +transport layer to be a smart one. + +This doesn't mean that other protocols can't emerge, but it's okay not to throw +away those that work already + +1 like Like [408] Reply + +[409] gregfletcher profile image +[410] Greg Fletcher +Greg Fletcher +[412] [60dd3143-5] Greg Fletcher +Follow +loop { refactoring() } + + • Work + Full Stack at Freelance + • Joined + Mar 16, 2019 + +• [414] May 15 '20 + + • [416]Copy link + • + • Hide + • + • + • + +Great article! + +Doesn't a lot of this disagreement stem from --> "keep the web as it is, coz +it's fine" vs "let's make it better by making mistakes along the way coz that's +how software development works"? + +14 likes Like [419] Reply + +[420] v6 profile image +[421] 🦄N B🛡 +🦄N B🛡 +[423] [8267c2c7-f] 🦄N B🛡 +Follow +// , “It is not so important to be serious as it is to be serious about the +important things. The monkey wears an expression of seriousness... but the +monkey is serious because he itches."(No/No) + + • Location + (No/No) + • Education + (No/No) + • Work + Security + • Joined + Mar 1, 2018 + +• [425] May 15 '20 + + • [427]Copy link + • + • Hide + • + • + • + +What about making it better by [429]sacrificing it? + +We can [430]learn this lesson from Biology, that the best way to avoid +excessive optimization is the ultimate flexibility: Keeping the option on the +table to throw out the code, or well abstracted parts of it, and rewrite that +code or product from scratch. + +It's a little known "dark" pattern of Software Design, from the shadows of +Agile, called "Sacrificial Architecture." + +[431]exponential growth isnt kind to architectural decisions + +5 likes Like [433] Reply + +[434] richharris profile image +[435] Rich Harris +Rich Harris +[437] [92d6b6d1-4] Rich Harris +Follow +I like turtles + + • Location + Behind you + • Work + Graphics editor at the New York Times + • Joined + Jun 20, 2019 + +• [439] May 15 '20 + + • [441]Copy link + • + • Hide + • + • + • + + Is the Web for applications? + +I feel like this question sort of answers itself! Have you heard of Amazon? +Gmail? Facebook? + +13 likes Like [444] Reply + +[445] ben profile image +[446] Ben Halpern +Ben Halpern +[448] [f451a206-1] Ben Halpern +Follow +A Canadian software developer who thinks he’s funny. + + • Email + [450]ben@forem.com + • Location + NY + • Education + Mount Allison University + • Pronouns + He/him + • Work + Co-founder at Forem + • Joined + Dec 27, 2015 + +• [451] May 15 '20 + + • [453]Copy link + • + • Hide + • + • + • + +My perpective: The web is for applications. The web is also for rich documents +where reading and simple linking can take priority. + +And there is an uncanny valley when you the latter is the sensible choice, but +the former is the approach taken. + +And many, the web is whatever Google tells them it is. Is AMP the web? + +22 likes Like [456] Reply + +[457] rhymes profile image +[458] rhymes +rhymes +[460] [bfd9a4a5-9] rhymes +Follow +Such software as dreams are made on. I mostly rant about performance, +unnecessary complexity, privacy and data collection. + + • Joined + Feb 2, 2017 + +• [462] May 18 '20 • Edited on May 18 • Edited + + • [464]Copy link + • + • Hide + • + • + • + + It strikes me that the web never was and never will be anything like any + other platform for building applications. Whether or not someone wants to + turn it into that is their prerogative and any success they have probably + will help others build better things. But it ultimately depends on what you + want to build and why, and emulating a native application might not always + be the best option. + +this :-) + +5 likes Like [467] Reply + +[468] gotofritz profile image +[469] fritz +fritz +[471] [4e77b2fc-1] fritz +Follow + + • Location + Berlin + • Joined + Sep 28, 2018 + +• [473] May 22 '20 + + • [475]Copy link + • + • Hide + • + • + • + + We need to have a similar approach in client side frameworks. + +No we don't... if the The One True Omniscient God Framework approach that Rails +developers are constantly pining for was really the best one, then Rails would +be ruling. It isn't; it peaked in 2012 or thereabouts, knocked off its perch by +Node, among other technologies. It's a single point of failure and it cannot +adapt quickly enough to the bewilderingly fast changing environment in which we +operate. + +Alternatively, you can pick one of the two frameworks that follow the model you +advocate: Ember (actually inspired by Rails) or Angular (more of a C# flavour), +both of which strive to be a nanny that remove as much as possible the need to +(god forbid!) make your own decisions or (the horror!) having to learn new +tools + + If I could have the framework of my dreams ... It would allow me to focus + on HTML with a sprinkle of JavaScript. + +You may want to consider [477]stimulusjs.org/, which comes from the Rails +universe (it was created by no other than David Heinemeier Hansson, the Rails +Superstar) and does exactly what you want + +5 likes Like Thread + +[479] loilo profile image +[480] Florian Reuschel +Florian Reuschel +[482] [13456f88-0] Florian Reuschel +Follow +Web developer (JS, PHP), OSS enthusiast, loves to explain things to beginners + + • Location + Karlsruhe, DE + • Joined + Jan 14, 2017 + +• [484] May 22 '20 + + • [486]Copy link + • + • Hide + • + • + • + +Can confirm that the Stimulus framework works great for that exact use case. +But if you're used to the more common frameworks, you might quickly miss the +declarative "give me data, I give you DOM" approach they provide. + +I haven't tried it myself yet, but [488]Alpine.js gained some steam lately and +might be a good middle ground between Stimulus and the "top dogs". + +4 likes Like [490] Reply + +[491] mattwelke profile image +[492] Matt Welke +Matt Welke +[494] [666b194b-1] Matt Welke +Follow +Back end software developer, open source enthusiast. + + • Location + Ontario, Canada + • Education + Seneca College + • Work + Backend software engineer at DigitalOcean + • Joined + Aug 16, 2019 + +• [496] May 27 '20 + + • [498]Copy link + • + • Hide + • + • + • + + writing an Express API requires "old javascript" unless you want to go + through the hassle of setting Babel up + +Not sure what you mean here. You can use very recent JS features in Node. We +have async/await, async iteration, ES module imports, and more now. I've never +felt the need to set up Babel in an Express project. + +5 likes Like [501] Reply + +[502] mattgperry profile image +[503] Matt Perry +Matt Perry +[505] [f6c730d5-6] Matt Perry +Follow +Creator of Framer Motion, Popmotion and Pose + + • Location + Amsterdam + • Joined + May 15, 2020 + +• [507] May 15 '20 + + • [509]Copy link + • + • Hide + • + • + • + + it's widely understood that if you want 60fps animation, you will likely + have to bypass the React update cycle and do things in a more imperative + fashion (indeed, this is what libraries like react-spring do) + +Probably aside from the article, which I largely agree with, but I think this +is an odd point to try and make. This is true of any component library that has +overhead above imperative JS. But there's nothing stopping you from using CSS +in React, which is all Svelte does anyway. + +9 likes Like [512] Reply + +[513] richharris profile image +[514] Rich Harris +Rich Harris +[516] [92d6b6d1-4] Rich Harris +Follow +I like turtles + + • Location + Behind you + • Work + Graphics editor at the New York Times + • Joined + Jun 20, 2019 + +• [518] May 15 '20 + + • [520]Copy link + • + • Hide + • + • + • + +Wrong, sorry :) + +This isn't a CSS demo: [522]twitter.com/Rich_Harris/status/120... + +11 likes Like [524] Reply + +[525] daniel15 profile image +[526] Daniel Lo Nigro +Daniel Lo Nigro +[528] [91933] Daniel Lo Nigro +Follow +Australian living in the San Francisco Bay Area. Senior Front End Engineer at +Meta + + • Location + San Francisco Bay Area + • Education + Swinburne University, Australia + • Work + Senior Front End Engineer at Meta + • Joined + Jan 11, 2017 + +• [530] May 15 '20 • Edited on May 15 • Edited + + • [532]Copy link + • + • Hide + • + • + • + + We can provide better visual feedback that loading is taking place + +I'm not so sure about that... IMO, so many single-page apps get this wrong. The +native browser loading indicator is still a lot better than many SPAs, and +unfortunately it's something that can't be triggered from JS (apart from ugly +hacks like infinitely-loading iframes) + + With the advent of Node, that changed. The fact that we can do server-side + rendering and communicate with databases and what-have-you using a language + native to the web is a wonderful development. + +Server-side JS was a thing looooong before Node. I remember using Microsoft's +version of JavaScript ("JScript") server-side via Classic ASP in the early +2000s. The issue back then was that JavaScript just wasn't quite that popular +yet. ES5 wasn't around yet (it was all ES3), and there was a lack of good +third-party libraries. But still, it was absolutely in use long before Node +even existed. + +What Node did do was cross-platform support, introduce a module system +(CommonJS) as standard, and introduced the concept of easily obtaining +third-party packages via "npm", taking ideas from similar systems like Perl's +CPAN. + +4 likes Like [535] Reply + +[536] mrispoli24 profile image +[537] Mike Rispoli +Mike Rispoli +[539] [93acebe4-b] Mike Rispoli +Follow +I'm an award-winning designer, engineer and creative technologist that helps +daring founders ship valuable software. + + • Location + New York City + • Work + Co-founder & CTO at Cause of a Kind + • Joined + Mar 8, 2019 + +• [541] May 15 '20 + + • [543]Copy link + • + • Hide + • + • + • + +So one thing I wondered after reading Tom's article and now yours is how you +feel about modern UI being so tied to node or javascript run times on the +backend specifically. For instance if you were to be running something in Go +and Phoenix you could dynamically render HTML on the back end and serve it up +quite a bit faster that the current SSR environments based in Next or Nuxt or +Sapper? So essentially somewhat the way Stimulus JS works where you can send +over static HTML, rendered anywhere, by any type of server and the frontend +could just hydrate that and build components from it. + +3 likes Like [546] Reply + +[547] richharris profile image +[548] Rich Harris +Rich Harris +[550] [92d6b6d1-4] Rich Harris +Follow +I like turtles + + • Location + Behind you + • Work + Graphics editor at the New York Times + • Joined + Jun 20, 2019 + +• [552] May 15 '20 + + • [554]Copy link + • + • Hide + • + • + • + +This is the 'PHP with jQuery sprinkles' approach I mention in the article, +except with shinier things than PHP and jQuery. I'm not a fan, personally. + +Phoenix LiveView is an interesting take on the problem, but I suspect you hit a +limit as to how ambitious your UI can be when deltas have to come across web +sockets at a consistent 60fps. + +5 likes Like [557] Reply + +[558] mrispoli24 profile image +[559] Mike Rispoli +Mike Rispoli +[561] [93acebe4-b] Mike Rispoli +Follow +I'm an award-winning designer, engineer and creative technologist that helps +daring founders ship valuable software. + + • Location + New York City + • Work + Co-founder & CTO at Cause of a Kind + • Joined + Mar 8, 2019 + +• [563] May 15 '20 + + • [565]Copy link + • + • Hide + • + • + • + +So do you think it’s impossible for a framework to effectively hydrate static +HTML not rendered by that frameworks specified renderToString method? + +I really don’t know what these functions do under the hood to allow rehydration +so I’m just curious if it would be possible and achieve a good frame rate. + +2 likes Like [568] Reply + +[569] vintharas profile image +[570] Jaime González García +Jaime González García +[572] [09d69d89-7] Jaime González García +Follow +Senior Software Engineer at Google working on Google Meet 👨‍💻 Helping +developers be more awesome 🔥 author, speaker & nerd 🧙🏼‍♂️ into JavaScript, +TypeScript, Vim & pixelart ❤️ + + • Location + Stockholm + • Education + MsC Telecommunications Engineering + • Work + Senior Software Engineer at Google + • Joined + Aug 15, 2018 + +• [574] May 15 '20 + + • [576]Copy link + • + • Hide + • + • + • + +Beautifully written and very inspiring 😀👏👏👏 + +4 likes Like [579] Reply +[580] View full discussion (98 comments) +[581]Code of Conduct • [582]Report abuse + +Are you sure you want to hide this comment? It will become hidden in your post, +but will still be visible via the comment's [586]permalink. + +[588][ ] + +Hide child comments as well + +Confirm + +For further actions, you may consider blocking this person and/or [590] +reporting abuse Read next - franciscomendes10866 profile image +[591] +tthroo profile image -Next.js and GraphQL: The Perfect Combination for Full Stack Development +Build your SaaS landing page in 15 minutes using Mantine - Francisco Mendes - Jul 1 +TThroo-Dev - Jan 11 - bdbch profile image +[592] +tlaloces profile image -Sharing your Tailwind Configuration between Monorepo Packages +Authentication example with FastAPI and JWT, is it as easy and straightforward +as they claim? - bdbch - Jun 23 +Tlaloc-Es - Jan 11 - desoga profile image +[593] +myogeshchavan97 profile image -How to Fetch Data using the provideHttpClient in Angular +I Launched The Most Awaited Complete React Course - deji adesoga - Jul 1 +Yogesh Chavan - Jan 13 - jeetvora331 profile image +[594] +ziontutorial profile image -React Hooks vs Functions made easy +Build a Dynamic Currency Converter Beginner React Project - jeetvora331 - Jun 19 +ziontutorial - Jan 11 - [301]Rich Harris - (button) Follow - I like turtles - * Location - Behind you - * Work - Graphics editor at the New York Times - * Joined - Jun 20, 2019 +[595] [92d6b6d1-4] Rich Harris +Follow +I like turtles -More from [302]Rich Harris + • Location + Behind you + • Work + Graphics editor at the New York Times + • Joined + Jun 20, 2019 - [303]Stay alert - #javascript - [304]A new technique for making responsive, JavaScript-free charts - #dataviz #svelte #javascript +More from [597]Rich Harris - Once suspended, richharris will not be able to comment or publish posts - until their suspension is removed. - Note: - ______________________________________________________________________ - ______________________________________________________________________ - ______________________________________________________________________ - ______________________________________________________________________ +[598] Stay alert +#javascript +[599] A new technique for making responsive, JavaScript-free charts +#dataviz #svelte #javascript - (BUTTON) Submit & Suspend +Once suspended, richharris will not be able to comment or publish posts until +their suspension is removed. - Once unsuspended, richharris will be able to comment and publish posts - again. - Note: - ______________________________________________________________________ - ______________________________________________________________________ - ______________________________________________________________________ - ______________________________________________________________________ + [ ] + [ ] + [ ] +Note: [ ] - (BUTTON) Submit & Unsuspend +Submit & Suspend - Once unpublished, all posts by richharris will become hidden and only - accessible to themselves. +Once unsuspended, richharris will be able to comment and publish posts again. - If richharris is not suspended, they can still re-publish their posts - from their dashboard. + [ ] + [ ] + [ ] +Note: [ ] - Note: - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - (BUTTON) Unpublish all posts +Submit & Unsuspend - Once unpublished, this post will become invisible to the public and - only accessible to Rich Harris. +Once unpublished, all posts by richharris will become hidden and only +accessible to themselves. - They can still re-publish the post if they are not suspended. - (BUTTON) Unpublish Post +If richharris is not suspended, they can still re-publish their posts from +their dashboard. - Thanks for keeping DEV Community safe. Here is what you can do to flag - richharris: - (*) Make all posts by richharris less visible +Note:[ ] - richharris consistently posts content that violates DEV Community's - code of conduct because it is harassing, offensive or spammy. - [305]Report other inappropriate conduct +Unpublish all posts - (BUTTON) Confirm Flag +Once unpublished, this post will become invisible to the public and only +accessible to Rich Harris. - Unflagging richharris will restore default visibility to their posts. - (BUTTON) Confirm Unflag +They can still re-publish the post if they are not suspended. - [306]DEV Community — A constructive and inclusive social network for - software developers. With you every step of your journey. - * [307]Home - * [308]Listings - * [309]Podcasts - * [310]Videos - * [311]Tags - * [312]FAQ - * [313]Forem Shop - * [314]Sponsors - * [315]About - * [316]Contact - * [317]Guides - * [318]Software comparisons +Unpublish Post - * [319]Code of Conduct - * [320]Privacy Policy - * [321]Terms of use +Thanks for keeping DEV Community safe. Here is what you can do to flag +richharris: - Built on [322]Forem — the [323]open source software that powers - [324]DEV and other inclusive communities. +[607]( ) Make all posts by richharris less visible - Made with love and [325]Ruby on Rails. DEV Community © 2016 - 2023. +richharris consistently posts content that violates DEV Community's code of +conduct because it is harassing, offensive or spammy. - DEV Community +[608] Report other inappropriate conduct - We're a place where coders share, stay up-to-date and grow their - careers. - [326]Log in [327]Create account +Confirm Flag -References +Unflagging richharris will restore default visibility to their posts. - Visible links: - 1. https://dev.to/open-search.xml - 2. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#main-content - 3. file:/// - 4. file:///enter - 5. file:///enter?state=new-user - 6. https://twitter.com/intent/tweet?text="In defense of the modern web" by @Rich_Harris #DEVCommunity https://dev.to/richharris/in-defense-of-the-modern-web-2nia - 7. https://www.linkedin.com/shareArticle?mini=true&url=https://dev.to/richharris/in-defense-of-the-modern-web-2nia&title=In defense of the modern web&summary=I expect I'll annoy everyone with this post: the anti-JavaScript crusaders, justly aghast at how much...&source=DEV Community - 8. https://www.reddit.com/submit?url=https://dev.to/richharris/in-defense-of-the-modern-web-2nia&title=In defense of the modern web - 9. https://news.ycombinator.com/submitlink?u=https://dev.to/richharris/in-defense-of-the-modern-web-2nia&t=In defense of the modern web - 10. https://www.facebook.com/sharer.php?u=https://dev.to/richharris/in-defense-of-the-modern-web-2nia - 11. https://toot.kytta.dev/?text=https://dev.to/richharris/in-defense-of-the-modern-web-2nia - 12. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html - 13. file:///report-abuse - 14. file:///richharris - 15. file:///richharris - 16. file:///t/javascript - 17. file:///t/react - 18. file:///t/svelte - 19. file:///t/webdev - 20. https://twitter.com/tmcw - 21. https://macwright.org/2020/05/10/spa-fatigue.html - 22. https://twitter.com/tmcw/status/1259600386094030848 - 23. https://www.react-spring.io/ - 24. https://svelte.dev/ - 25. https://macwright.org/2020/05/10/spa-fatigue.html - 26. https://gatsbyjs.org/ - 27. https://res.cloudinary.com/practicaldev/image/fetch/s--L4S_VLxO--/c_limit,f_auto,fl_progressive,q_auto,w_880/https://user-images.githubusercontent.com/1162160/82001896-43e38b00-962a-11ea-9ae7-bda853a8cec1.png - 28. https://webpagetest.org/lighthouse.php?test=200515_N4_a92cbdd5b87d402522f710a8d82d2228&run=1 - 29. https://webpagetest.org/easy - 30. https://dev.to/ryanflorence - 31. https://twitter.com/intent/tweet?in_reply_to=1186675229621248000 - 32. https://twitter.com/intent/retweet?tweet_id=1186675229621248000 - 33. https://twitter.com/intent/like?tweet_id=1186675229621248000 - 34. https://nextjs.org/ - 35. https://medium.com/@mlrawlings/maybe-you-dont-need-that-spa-f2c659bc7fec - 36. https://sapper.svelte.dev/ - 37. https://svelte.dev/ - 38. file:///settings/response-templates - 39. file:///404.html - 40. https://dev.to/twigman08 - 41. https://dev.to/twigman08 - 42. file:///twigman08 - 43. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j6 - 44. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j6 - 45. https://dev.to/gotofritz - 46. https://dev.to/gotofritz - 47. file:///gotofritz - 48. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gj - 49. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gj - 50. https://dev.to/twigman08 - 51. https://dev.to/twigman08 - 52. file:///twigman08 - 53. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ke - 54. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ke - 55. https://dev.to/gotofritz - 56. https://dev.to/gotofritz - 57. file:///gotofritz - 58. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paob - 59. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paob - 60. https://dev.to/adrianus - 61. https://dev.to/adrianus - 62. file:///adrianus - 63. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6g5 - 64. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6g5 - 65. https://dev.to/techbelle - 66. https://dev.to/techbelle - 67. file:///techbelle - 68. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1bp6j - 69. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1bp6j - 70. https://dev.to/ojrask - 71. https://dev.to/ojrask - 72. file:///ojrask - 73. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjh - 74. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjh - 75. https://dev.to/gotofritz - 76. https://dev.to/gotofritz - 77. file:///gotofritz - 78. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjk - 79. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjk - 80. https://dev.to/ojrask - 81. https://dev.to/ojrask - 82. file:///ojrask - 83. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epn5 - 84. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epn5 - 85. https://dev.to/gotofritz - 86. https://dev.to/gotofritz - 87. file:///gotofritz - 88. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1f04h - 89. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1f04h - 90. https://dev.to/jacobmakestheweb - 91. https://dev.to/jacobmakestheweb - 92. file:///jacobmakestheweb - 93. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1i7gc - 94. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1i7gc - 95. https://dev.to/mark_saward - 96. https://dev.to/mark_saward - 97. file:///mark_saward - 98. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2k0 - 99. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2k0 - 100. https://dev.to/ryansolid - 101. https://dev.to/ryansolid - 102. file:///ryansolid - 103. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p369 - 104. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p369 - 105. https://dev.to/mark_saward - 106. https://dev.to/mark_saward - 107. file:///mark_saward - 108. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p3b8 - 109. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p3b8 - 110. https://dev.to/adrianus - 111. https://dev.to/adrianus - 112. file:///adrianus - 113. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ka - 114. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ka - 115. https://dev.to/oenonono - 116. https://dev.to/oenonono - 117. file:///oenonono - 118. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hk - 119. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hk - 120. https://dev.to/v6 - 121. https://dev.to/v6 - 122. file:///v6 - 123. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34a - 124. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34a - 125. https://dev.to/gotofritz - 126. https://dev.to/gotofritz - 127. file:///gotofritz - 128. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gf - 129. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gf - 130. https://dev.to/v6 - 131. https://dev.to/v6 - 132. file:///v6 - 133. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5lf - 134. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5lf - 135. https://dev.to/stew_sims - 136. https://dev.to/stew_sims - 137. file:///stew_sims - 138. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kj - 139. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kj - 140. https://dev.to/rhymes - 141. https://dev.to/rhymes - 142. file:///rhymes - 143. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6cm - 144. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6cm - 145. https://dev.to/oenonono - 146. https://dev.to/oenonono - 147. file:///oenonono - 148. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hm - 149. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hm - 150. https://dev.to/holdit - 151. https://dev.to/holdit - 152. file:///holdit - 153. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p4 - 154. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p4 - 155. https://dev.to/iamschulz - 156. https://dev.to/iamschulz - 157. file:///iamschulz - 158. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hk - 159. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hk - 160. https://dev.to/richharris - 161. https://dev.to/richharris - 162. file:///richharris - 163. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i2 - 164. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i2 - 165. https://sapper.svelte.dev/ - 166. https://dev.to/iamschulz - 167. https://dev.to/iamschulz - 168. file:///iamschulz - 169. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2id - 170. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2id - 171. https://dev.to/martinmalinda - 172. https://dev.to/martinmalinda - 173. file:///martinmalinda - 174. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5d6 - 175. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5d6 - 176. https://dev.to/ben - 177. https://dev.to/ben - 178. file:///ben - 179. mailto:ben@forem.com - 180. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2jk - 181. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2jk - 182. https://dev.to/v6 - 183. https://dev.to/v6 - 184. file:///v6 - 185. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34f - 186. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34f - 187. https://www.hashicorp.com/tao-of-hashicorp#workflows,-not-technologies - 188. https://dev.to/phlash - 189. https://dev.to/phlash - 190. file:///phlash - 191. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j3 - 192. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j3 - 193. https://dev.to/phlash909/comment/cghl - 194. https://dev.to/v6 - 195. https://dev.to/v6 - 196. file:///v6 - 197. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p348 - 198. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p348 - 199. https://dev.to/panesofglass - 200. https://dev.to/panesofglass - 201. file:///panesofglass - 202. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d20 - 203. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d20 - 204. https://dev.to/rhymes - 205. https://dev.to/rhymes - 206. file:///rhymes - 207. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d40 - 208. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d40 - 209. https://dev.to/panesofglass - 210. https://dev.to/panesofglass - 211. file:///panesofglass - 212. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12dc2 - 213. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12dc2 - 214. https://dev.to/rhymes - 215. https://dev.to/rhymes - 216. file:///rhymes - 217. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12df6 - 218. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12df6 - 219. https://dev.to/gregfletcher - 220. https://dev.to/gregfletcher - 221. file:///gregfletcher - 222. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j2 - 223. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j2 - 224. https://dev.to/v6 - 225. https://dev.to/v6 - 226. file:///v6 - 227. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34d - 228. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34d - 229. https://martinfowler.com/bliki/SacrificialArchitecture.html - 230. https://youtu.be/oKg1hTOQXoY?t=1754 - 231. https://res.cloudinary.com/practicaldev/image/fetch/s--KIKmJfBA--/c_limit,f_auto,fl_progressive,q_66,w_880/https://dev-to-uploads.s3.amazonaws.com/i/5ehz4jt3d7skefmuwg6d.gif - 232. https://dev.to/richharris - 233. https://dev.to/richharris - 234. file:///richharris - 235. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n0 - 236. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n0 - 237. https://dev.to/ben - 238. https://dev.to/ben - 239. file:///ben - 240. mailto:ben@forem.com - 241. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2nd - 242. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2nd - 243. https://dev.to/gotofritz - 244. https://dev.to/gotofritz - 245. file:///gotofritz - 246. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paom - 247. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paom - 248. https://stimulusjs.org/ - 249. https://dev.to/loilo - 250. https://dev.to/loilo - 251. file:///loilo - 252. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pb3c - 253. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pb3c - 254. https://github.com/alpinejs/alpine - 255. https://dev.to/mattwelke - 256. https://dev.to/mattwelke - 257. file:///mattwelke - 258. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pg9g - 259. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pg9g - 260. https://dev.to/mattgperry - 261. https://dev.to/mattgperry - 262. file:///mattgperry - 263. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i0 - 264. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i0 - 265. https://dev.to/richharris - 266. https://dev.to/richharris - 267. file:///richharris - 268. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2je - 269. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2je - 270. https://twitter.com/Rich_Harris/status/1200807516529147904 - 271. https://dev.to/daniel15 - 272. https://dev.to/daniel15 - 273. file:///daniel15 - 274. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n6 - 275. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n6 - 276. https://dev.to/mrispoli24 - 277. https://dev.to/mrispoli24 - 278. file:///mrispoli24 - 279. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kc - 280. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kc - 281. https://dev.to/richharris - 282. https://dev.to/richharris - 283. file:///richharris - 284. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p5 - 285. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p5 - 286. https://dev.to/mrispoli24 - 287. https://dev.to/mrispoli24 - 288. file:///mrispoli24 - 289. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p35p - 290. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p35p - 291. https://dev.to/lawwantsin - 292. https://dev.to/lawwantsin - 293. file:///lawwantsin - 294. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i8 - 295. https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i8 - 296. file:///richharris/in-defense-of-the-modern-web-2nia/comments - 297. file:///code-of-conduct - 298. file:///report-abuse - 299. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html - 300. file:///report-abuse - 301. file:///richharris - 302. file:///richharris - 303. file:///richharris/stay-alert-d - 304. file:///richharris/a-new-technique-for-making-responsive-javascript-free-charts-gmp - 305. javascript:void(0); - 306. file:/// - 307. file:/// - 308. file:///listings - 309. file:///pod - 310. file:///videos - 311. file:///tags - 312. file:///faq - 313. https://shop.forem.com/ - 314. file:///sponsorships - 315. file:///about - 316. file:///contact - 317. file:///guides - 318. file:///software-comparisons - 319. file:///code-of-conduct - 320. file:///privacy - 321. file:///terms - 322. https://www.forem.com/ - 323. https://dev.to/t/opensource - 324. https://dev.to/ - 325. https://dev.to/t/rails - 326. file:///enter - 327. file:///enter?state=new-user +Confirm Unflag - Hidden links: - 329. file://localhost/search - 330. file://localhost/richharris/in-defense-of-the-modern-web-2nia?comments_sort=top#toggle-comments-sort-dropdown - 331. file://localhost/richharris/in-defense-of-the-modern-web-2nia?comments_sort=latest#toggle-comments-sort-dropdown - 332. file://localhost/richharris/in-defense-of-the-modern-web-2nia?comments_sort=oldest#toggle-comments-sort-dropdown - 333. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j6 - 334. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5gj - 335. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/paob - 336. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p6g5 - 337. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/1bp6j - 338. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/1i7gc - 339. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2k0 - 340. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p369 - 341. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p7ka - 342. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p4hk - 343. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34a - 344. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5lf - 345. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2kj - 346. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p6cm - 347. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p4hm - 348. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2p4 - 349. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2hk - 350. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2i2 - 351. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5d6 - 352. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2jk - 353. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34f - 354. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j3 - 355. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p348 - 356. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/12d20 - 357. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/12df6 - 358. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j2 - 359. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34d - 360. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2n0 - 361. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2nd - 362. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/pb3c - 363. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/pg9g - 364. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2i0 - 365. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2je - 366. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2n6 - 367. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2kc - 368. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2p5 - 369. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p35p - 370. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L12384-4857TMP.html#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2i8 - 371. file://localhost/franciscomendes10866/nextjs-and-graphql-the-perfect-combination-for-full-stack-development-18l7 - 372. file://localhost/bdbch/sharing-your-tailwind-configuration-between-monorepo-packages-4o5k - 373. file://localhost/this-is-angular/how-to-fetch-data-using-the-providehttpclient-in-angular-5h47 - 374. file://localhost/jeetvora331/react-hooks-vs-functions-made-easy-2g2l +[611]DEV Community — A constructive and inclusive social network for software +developers. With you every step of your journey. + + • [612] Home + • [613] Podcasts + • [614] Videos + • [615] Tags + • [616] FAQ + • [617] Forem Shop + • [618] Advertise on DEV + • [619] About + • [620] Contact + • [621] Guides + • [622] Software comparisons + + • [623] Code of Conduct + • [624] Privacy Policy + • [625] Terms of use + +Built on [626]Forem — the [627]open source software that powers [628]DEV and +other inclusive communities. + +Made with love and [629]Ruby on Rails. DEV Community © 2016 - 2024. + +DEV Community + +We're a place where coders share, stay up-to-date and grow their careers. + +[630] Log in [631] Create account +● ● ● ● ● + +References: + +[1] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#main-content +[3] https://dev.to/ +[6] https://dev.to/search +[7] https://dev.to/enter +[8] https://dev.to/enter?state=new-user +[20] https://twitter.com/intent/tweet?text=%22In%20defense%20of%20the%20modern%20web%22%20by%20%40Rich_Harris%20%23DEVCommunity%20https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia +[21] https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia&title=In%20defense%20of%20the%20modern%20web&summary=I%20expect%20I%27ll%20annoy%20everyone%20with%20this%20post%3A%20the%20anti-JavaScript%20crusaders%2C%20justly%20aghast%20at%20how%20much...&source=DEV%20Community +[22] https://www.reddit.com/submit?url=https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia&title=In%20defense%20of%20the%20modern%20web +[23] https://news.ycombinator.com/submitlink?u=https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia&t=In%20defense%20of%20the%20modern%20web +[24] https://www.facebook.com/sharer.php?u=https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia +[25] https://toot.kytta.dev/?text=https%3A%2F%2Fdev.to%2Frichharris%2Fin-defense-of-the-modern-web-2nia +[26] https://dev.to/richharris/in-defense-of-the-modern-web-2nia# +[27] https://dev.to/report-abuse +[28] https://dev.to/richharris +[29] https://dev.to/richharris +[30] https://dev.to/t/javascript +[31] https://dev.to/t/react +[32] https://dev.to/t/svelte +[33] https://dev.to/t/webdev +[34] https://twitter.com/tmcw +[35] https://macwright.org/2020/05/10/spa-fatigue.html +[36] https://twitter.com/tmcw/status/1259600386094030848 +[37] https://www.react-spring.io/ +[38] https://svelte.dev/ +[39] https://macwright.org/2020/05/10/spa-fatigue.html +[40] https://gatsbyjs.org/ +[41] https://res.cloudinary.com/practicaldev/image/fetch/s--L4S_VLxO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/1162160/82001896-43e38b00-962a-11ea-9ae7-bda853a8cec1.png +[42] https://webpagetest.org/lighthouse.php?test=200515_N4_a92cbdd5b87d402522f710a8d82d2228&run=1 +[43] https://webpagetest.org/easy +[44] https://dev.to/ryanflorence +[45] https://twitter.com/intent/tweet?in_reply_to=1186675229621248000 +[46] https://twitter.com/intent/retweet?tweet_id=1186675229621248000 +[47] https://twitter.com/intent/like?tweet_id=1186675229621248000 +[48] https://nextjs.org/ +[49] https://medium.com/@mlrawlings/maybe-you-dont-need-that-spa-f2c659bc7fec +[50] https://sapper.svelte.dev/ +[51] https://svelte.dev/ +[59] https://dev.to/settings/response-templates +[62] https://dev.to/404.html +[63] https://dev.to/twigman08 +[64] https://dev.to/twigman08 +[66] https://dev.to/twigman08 +[68] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j6 +[70] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j6 +[73] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j6 +[74] https://dev.to/gotofritz +[75] https://dev.to/gotofritz +[77] https://dev.to/gotofritz +[79] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gj +[81] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gj +[84] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5gj +[85] https://dev.to/twigman08 +[86] https://dev.to/twigman08 +[88] https://dev.to/twigman08 +[90] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ke +[92] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ke +[95] https://dev.to/gotofritz +[96] https://dev.to/gotofritz +[98] https://dev.to/gotofritz +[100] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paob +[102] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paob +[105] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/paob +[106] https://dev.to/adrianus +[107] https://dev.to/adrianus +[109] https://dev.to/adrianus +[111] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6g5 +[113] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6g5 +[116] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p6g5 +[117] https://dev.to/ojrask +[118] https://dev.to/ojrask +[120] https://dev.to/ojrask +[122] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjh +[124] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjh +[127] https://dev.to/gotofritz +[128] https://dev.to/gotofritz +[130] https://dev.to/gotofritz +[132] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjk +[134] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epjk +[137] https://dev.to/ojrask +[138] https://dev.to/ojrask +[140] https://dev.to/ojrask +[142] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epn5 +[144] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1epn5 +[147] https://dev.to/gotofritz +[148] https://dev.to/gotofritz +[150] https://dev.to/gotofritz +[152] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1f04h +[154] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1f04h +[157] https://dev.to/jacobmakestheweb +[158] https://dev.to/jacobmakestheweb +[160] https://dev.to/jacobmakestheweb +[162] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1i7gc +[164] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1i7gc +[167] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/1i7gc +[168] https://dev.to/techbelle +[169] https://dev.to/techbelle +[171] https://dev.to/techbelle +[173] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1bp6j +[175] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-1bp6j +[178] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/1bp6j +[179] https://dev.to/mark_saward +[180] https://dev.to/mark_saward +[182] https://dev.to/mark_saward +[184] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2k0 +[186] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2k0 +[189] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2k0 +[190] https://dev.to/ryansolid +[191] https://dev.to/ryansolid +[193] https://dev.to/ryansolid +[195] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p369 +[197] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p369 +[200] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p369 +[201] https://dev.to/mark_saward +[202] https://dev.to/mark_saward +[204] https://dev.to/mark_saward +[206] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p3b8 +[208] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p3b8 +[211] https://dev.to/adrianus +[212] https://dev.to/adrianus +[214] https://dev.to/adrianus +[216] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ka +[218] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p7ka +[221] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p7ka +[222] https://dev.to/oenonono +[223] https://dev.to/oenonono +[225] https://dev.to/oenonono +[227] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hk +[229] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p4hk +[232] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p4hk +[233] https://dev.to/v6 +[234] https://dev.to/v6 +[236] https://dev.to/v6 +[238] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34a +[240] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34a +[243] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34a +[244] https://dev.to/gotofritz +[245] https://dev.to/gotofritz +[247] https://dev.to/gotofritz +[249] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gf +[251] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5gf +[254] https://dev.to/v6 +[255] https://dev.to/v6 +[257] https://dev.to/v6 +[259] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5lf +[261] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5lf +[264] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5lf +[265] https://dev.to/holdit +[266] https://dev.to/holdit +[268] https://dev.to/holdit +[270] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p4 +[272] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p4 +[275] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2p4 +[276] https://dev.to/iamschulz +[277] https://dev.to/iamschulz +[279] https://dev.to/iamschulz +[281] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hk +[283] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hk +[286] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2hk +[287] https://dev.to/richharris +[288] https://dev.to/richharris +[290] https://dev.to/richharris +[292] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i2 +[294] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i2 +[296] https://sapper.svelte.dev/ +[298] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2i2 +[299] https://dev.to/iamschulz +[300] https://dev.to/iamschulz +[302] https://dev.to/iamschulz +[304] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2id +[306] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2id +[309] https://dev.to/martinmalinda +[310] https://dev.to/martinmalinda +[312] https://dev.to/martinmalinda +[314] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5d6 +[316] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p5d6 +[319] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p5d6 +[320] https://dev.to/ben +[321] https://dev.to/ben +[323] https://dev.to/ben +[325] mailto:ben@forem.com +[326] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2jk +[328] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2jk +[331] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2jk +[332] https://dev.to/v6 +[333] https://dev.to/v6 +[335] https://dev.to/v6 +[337] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34f +[339] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34f +[341] https://www.hashicorp.com/tao-of-hashicorp#workflows,-not-technologies +[343] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34f +[344] https://dev.to/phlash +[345] https://dev.to/phlash +[347] https://dev.to/phlash +[349] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j3 +[351] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j3 +[353] https://dev.to/phlash909/comment/cghl +[355] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j3 +[356] https://dev.to/v6 +[357] https://dev.to/v6 +[359] https://dev.to/v6 +[361] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p348 +[363] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p348 +[366] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p348 +[367] https://dev.to/panesofglass +[368] https://dev.to/panesofglass +[370] https://dev.to/panesofglass +[372] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d20 +[374] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d20 +[377] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/12d20 +[378] https://dev.to/rhymes +[379] https://dev.to/rhymes +[381] https://dev.to/rhymes +[383] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d40 +[385] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12d40 +[388] https://dev.to/panesofglass +[389] https://dev.to/panesofglass +[391] https://dev.to/panesofglass +[393] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12dc2 +[395] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12dc2 +[398] https://dev.to/rhymes +[399] https://dev.to/rhymes +[401] https://dev.to/rhymes +[403] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12df6 +[405] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-12df6 +[408] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/12df6 +[409] https://dev.to/gregfletcher +[410] https://dev.to/gregfletcher +[412] https://dev.to/gregfletcher +[414] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j2 +[416] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2j2 +[419] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2j2 +[420] https://dev.to/v6 +[421] https://dev.to/v6 +[423] https://dev.to/v6 +[425] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34d +[427] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p34d +[429] https://martinfowler.com/bliki/SacrificialArchitecture.html +[430] https://youtu.be/oKg1hTOQXoY?t=1754 +[431] https://res.cloudinary.com/practicaldev/image/fetch/s--KIKmJfBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5ehz4jt3d7skefmuwg6d.gif +[433] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p34d +[434] https://dev.to/richharris +[435] https://dev.to/richharris +[437] https://dev.to/richharris +[439] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n0 +[441] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n0 +[444] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2n0 +[445] https://dev.to/ben +[446] https://dev.to/ben +[448] https://dev.to/ben +[450] mailto:ben@forem.com +[451] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2nd +[453] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2nd +[456] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2nd +[457] https://dev.to/rhymes +[458] https://dev.to/rhymes +[460] https://dev.to/rhymes +[462] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6cm +[464] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p6cm +[467] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p6cm +[468] https://dev.to/gotofritz +[469] https://dev.to/gotofritz +[471] https://dev.to/gotofritz +[473] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paom +[475] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-paom +[477] https://stimulusjs.org/ +[479] https://dev.to/loilo +[480] https://dev.to/loilo +[482] https://dev.to/loilo +[484] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pb3c +[486] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pb3c +[488] https://github.com/alpinejs/alpine +[490] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/pb3c +[491] https://dev.to/mattwelke +[492] https://dev.to/mattwelke +[494] https://dev.to/mattwelke +[496] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pg9g +[498] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-pg9g +[501] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/pg9g +[502] https://dev.to/mattgperry +[503] https://dev.to/mattgperry +[505] https://dev.to/mattgperry +[507] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i0 +[509] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2i0 +[512] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2i0 +[513] https://dev.to/richharris +[514] https://dev.to/richharris +[516] https://dev.to/richharris +[518] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2je +[520] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2je +[522] https://twitter.com/Rich_Harris/status/1200807516529147904 +[524] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2je +[525] https://dev.to/daniel15 +[526] https://dev.to/daniel15 +[528] https://dev.to/daniel15 +[530] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n6 +[532] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2n6 +[535] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2n6 +[536] https://dev.to/mrispoli24 +[537] https://dev.to/mrispoli24 +[539] https://dev.to/mrispoli24 +[541] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kc +[543] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2kc +[546] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2kc +[547] https://dev.to/richharris +[548] https://dev.to/richharris +[550] https://dev.to/richharris +[552] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p5 +[554] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2p5 +[557] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2p5 +[558] https://dev.to/mrispoli24 +[559] https://dev.to/mrispoli24 +[561] https://dev.to/mrispoli24 +[563] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p35p +[565] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p35p +[568] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p35p +[569] https://dev.to/vintharas +[570] https://dev.to/vintharas +[572] https://dev.to/vintharas +[574] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hp +[576] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#comment-p2hp +[579] https://dev.to/richharris/in-defense-of-the-modern-web-2nia#/richharris/in-defense-of-the-modern-web-2nia/comments/new/p2hp +[580] https://dev.to/richharris/in-defense-of-the-modern-web-2nia/comments +[581] https://dev.to/code-of-conduct +[582] https://dev.to/report-abuse +[586] https://dev.to/richharris/in-defense-of-the-modern-web-2nia# +[590] https://dev.to/report-abuse +[591] https://dev.to/tthroo/build-your-saas-landing-page-in-15-minutes-using-mantine-111a +[592] https://dev.to/tlaloces/authentication-example-with-fastapi-and-jwt-is-it-as-easy-and-straightforward-as-they-claim-16m1 +[593] https://dev.to/myogeshchavan97/i-launched-the-most-awaited-complete-react-course-1efe +[594] https://dev.to/ziontutorial/build-a-dynamic-currency-converter-beginner-react-project-5cb8 +[595] https://dev.to/richharris +[597] https://dev.to/richharris +[598] https://dev.to/richharris/stay-alert-d +[599] https://dev.to/richharris/a-new-technique-for-making-responsive-javascript-free-charts-gmp +[608] javascript:void(0); +[611] https://dev.to/ +[612] https://dev.to/ +[613] https://dev.to/pod +[614] https://dev.to/videos +[615] https://dev.to/tags +[616] https://dev.to/faq +[617] https://shop.forem.com/ +[618] https://dev.to/advertise +[619] https://dev.to/about +[620] https://dev.to/contact +[621] https://dev.to/guides +[622] https://dev.to/software-comparisons +[623] https://dev.to/code-of-conduct +[624] https://dev.to/privacy +[625] https://dev.to/terms +[626] https://www.forem.com/ +[627] https://dev.to/t/opensource +[628] https://dev.to/ +[629] https://dev.to/t/rails +[630] https://dev.to/enter +[631] https://dev.to/enter?state=new-user diff --git a/static/archive/edmtips-com-05su6g.txt b/static/archive/edmtips-com-05su6g.txt index 4e8dc83..9a87737 100644 --- a/static/archive/edmtips-com-05su6g.txt +++ b/static/archive/edmtips-com-05su6g.txt @@ -1,622 +1,619 @@ - [tr?id=279433711742018&ev=PageView&noscript=1] #[1]EDM Tips » EDM Song - Structure: Arrange Your Loop into a Full Song Comments Feed - [2]alternate [3]alternate [4]alternate +* +* +[1] EDM Tips + - IFRAME: [5]https://www.googletagmanager.com/ns.html?id=GTM-N5SBWB6 + • [2]FREE + • [3]COURSES + • [4]BLOG + • [5]JOIN + • [6]LOGIN + • Search + [7][ ] [8][ ] [9][SUBMIT] + More results... - [6]EDM Tips -  - - * [7]FREE - * [8]COURSES - * [9]BLOG - * [10]JOIN - * [11]LOGIN - * Search - ____________________ ____________________ Submit - More results... - - [ ] - [X] - [X] - [X] - [ ] - - Filter by Custom Post Type - - [X] + [12][ ] + [13][*] + [14][*] + [15][*] + [16][ ] + Filter by Custom Post Type + [17][*] EDM Song Structure: Arrange Your Loop into a Full Song - [12]6 Comments +[18] 6 Comments +[19]Share33 +[20]Tweet +33 Shares - [13]Share33 - [14]Tweet - 33 Shares +So you’ve created a killer 8-bar loop and want to take your great idea to a +full song, but don’t know where to go from here? We’ve all been there before! - So you’ve created a killer 8-bar loop and want to take your great idea - to a full song, but don’t know where to go from here? We’ve all been - there before! +The good news is that you don’t need to feel disheartened: this is a super +common problem that happens to all music producers, and thankfully there are +some very straightforward steps you can take to get out of the loop and to a +finished arrangement…. - The good news is that you don’t need to feel disheartened: this is a - super common problem that happens to all music producers, and - thankfully there are some very straightforward steps you can take to - get out of the loop and to a finished arrangement…. +We get stuck because it can be very difficult to imagine each individual +section of a track before it exists. So, how do we fix this?  + +Start 2022 the right way! Download your FREE “New Producer Starter Pack” here. + +Let’s look into EDM song structure, and use that knowledge as a template for +our own tracks almost like one of those Paint-by-Numbers books. If you use the +techniques outlined below, you’ll be writing full tracks and streamlining your +workflow in no time! - We get stuck because it can be very difficult to imagine each - individual section of a track before it exists. So, how do we fix - this? - Start 2022 the right way! Download your FREE “New Producer Starter - Pack” here. - Let’s look into EDM song structure, and use that knowledge as a - template for our own tracks almost like one of those Paint-by-Numbers - books. If you use the techniques outlined below, you’ll be writing full - tracks and streamlining your workflow in no time! - IFRAME: - [15]https://www.youtube.com/embed/EXx9At3iUOw?feature=oembed&iv_load_po - licy=3&modestbranding=1&rel=0&autohide=1&playsinline=0&autoplay=0 EDM Song Structure - So what exactly are the benefits of learning EDM song structure? Well, - for one, by learning the common ways in which other artists create and - sculpt their songs, we can use that as a template for when we get stuck - in creating our own music. +So what exactly are the benefits of learning EDM song structure? Well, for one, +by learning the common ways in which other artists create and sculpt their +songs, we can use that as a template for when we get stuck in creating our own +music.  - Additionally, using known song structures helps increase relatability - and appeal to a wider audience. The practice of purposely arranging - your music in a carefully crafted way is called arrangement, and is - used in all types of music – not just Electronic Dance Music. +Additionally, using known song structures helps increase relatability and +appeal to a wider audience. The practice of purposely arranging your music in a +carefully crafted way is called arrangement, and is used in all types of music +– not just Electronic Dance Music. - In most Electronic Dance Music genres, your track will be in 4/4 time. - This means that in every bar (also known as a measure), there will be 4 - beats, and that the quarter note (the kick on every beat), will carry - the song. +In most Electronic Dance Music genres, your track will be in 4/4 time. This +means that in every bar (also known as a measure), there will be 4 beats, and +that the quarter note (the kick on every beat), will carry the song.  - In this format, a bar is 4 beats, and a musical phrase is usually a - multiple of 2 or 4 bars. In music theory, a phrase is generally just a - grouping of bars whose energy flows nicely. For example, your build - might contain two separate phrases; one that first hints at the melody - followed by a second that introduces a snare or clap build up. +In this format, a bar is 4 beats, and a musical phrase is usually a multiple of +2 or 4 bars. In music theory, a phrase is generally just a grouping of bars +whose energy flows nicely. For example, your build might contain two separate +phrases; one that first hints at the melody followed by a second that +introduces a snare or clap build up.  - Phrases build up, take down, or play around with the energy of a - section of your track to build interest, and create and release - tension. +Phrases build up, take down, or play around with the energy of a section of +your track to build interest, and create and release tension. - However, let’s take a step back and see what the main overall sections - of an EDM song structure are. +However, let’s take a step back and see what the main overall sections of an +EDM song structure are.  - They are as follows: - * Intro - * Verse - * Build up - * Drop +They are as follows: - Each of these distinct sections contains elements of your loop - simplified, modified, or generally expanded upon. Knowing what makes up - these sections and how they’re crafted is at the heart of how you - transform your loop into a full-fledged song. + • Intro + • Verse + • Build up + • Drop - Now, let’s see a rundown of which elements each section usually - contains. +Each of these distinct sections contains elements of your loop simplified, +modified, or generally expanded upon. Knowing what makes up these sections and +how they’re crafted is at the heart of how you transform your loop into a +full-fledged song. + +Now, let’s see a rundown of which elements each section usually contains. Intro - The intro is usually the simplest part of your entire track. It will - usually contain a stripped down beat to allow DJ’s to more easily - transition into your track, or – if you’re making a radio or Spotify - edit – will have a very short 2 to 4 bar phrase introducing the main - theme of your track. The intro also sets the pace and expectations for - what the track will deliver. (Will it be a break-neck speed drum-n-bass - track? Will it be a more chilled-out deep house track?) +The intro is usually the simplest part of your entire track. It will usually +contain a stripped down beat to allow DJ’s to more easily transition into your +track, or – if you’re making a radio or Spotify edit – will have a very short 2 +to 4 bar phrase introducing the main theme of your track. The intro also sets +the pace and expectations for what the track will deliver. (Will it be a +break-neck speed drum-n-bass track? Will it be a more chilled-out deep house +track?) Verse - The verse is more complex than the intro, but often less complex than - the drop (or at least, conveying less energy). In vocal driven music, - this is where the majority of the storytelling of songwriting occurs, - but in a lot of EDM, this is where you establish your melodic motifs. - These motifs – or small musical ideas – should hint at your main drop - melody without giving away your big, exciting, energetic drop. +The verse is more complex than the intro, but often less complex than the drop +(or at least, conveying less energy). In vocal driven music, this is where the +majority of the storytelling of songwriting occurs, but in a lot of EDM, this +is where you establish your melodic motifs. These motifs – or small musical +ideas – should hint at your main drop melody without giving away your big, +exciting, energetic drop. Build up - The build up typically contains risers, repetitive melodic motifs, and - is generally rather short (a notable exception to this rule might be an - 8-minute trance track). When creating build ups, you can also consider - stripping down your percussion and drums to the bare essentials, in - order to juxtapose to the heavy drop. +The build up typically contains risers, repetitive melodic motifs, and is +generally rather short (a notable exception to this rule might be an 8-minute +trance track). When creating build ups, you can also consider stripping down +your percussion and drums to the bare essentials, in order to juxtapose to the +heavy drop. Drop - The drop is the hardest hitting part of your track. This is where the - main hook of your song lies, and where the energy in your track should - be the highest. You want people to get up and dance when they hear your - drop! The drop can be very simple, or very complex; this heavily relies - on genre, so make sure to listen to your favorite songs and use them as - reference. +The drop is the hardest hitting part of your track. This is where the main hook +of your song lies, and where the energy in your track should be the highest. +You want people to get up and dance when they hear your drop! The drop can be +very simple, or very complex; this heavily relies on genre, so make sure to +listen to your favorite songs and use them as reference. Structures - Many songs you hear on the radio or in the club utilize similar song - structures, with some key variation to keep it interesting. When - deciding how to structure your own track, listening and referencing - your favorite track in the same genre can be immensely valuable, as - that track is likely commercially successful and has a structure that - is proven and works. +Many songs you hear on the radio or in the club utilize similar song +structures, with some key variation to keep it interesting. When deciding how +to structure your own track, listening and referencing your favorite track in +the same genre can be immensely valuable, as that track is likely commercially +successful and has a structure that is proven and works. - As a high level overview, structuring your song is a bit like designing - a roller-coaster. We want to bring the listener on a journey with the - emotion and energy from the track. This will help keep your listeners - engaged, prevent them from becoming bored, and hopefully keep playing - your track for days, months, and years to come. +As a high level overview, structuring your song is a bit like designing a +roller-coaster. We want to bring the listener on a journey with the emotion and +energy from the track. This will help keep your listeners engaged, prevent them +from becoming bored, and hopefully keep playing your track for days, months, +and years to come. - You can even analyse the structure of existing songs and draw in an - “energy map” using an automation line, as shown here. +You can even analyse the structure of existing songs and draw in an “energy +map” using an automation line, as shown here. - There are a few ways of representing song structure, but by far the - most common is to use letters to represent each part of a track. For - example, a common song structure in pop music goes as follows: +[EDM-Song-Structure-Energy-Map] - A B D B D E D A +There are a few ways of representing song structure, but by far the most common +is to use letters to represent each part of a track. For example, a common song +structure in pop music goes as follows: - In this instance, the letter A stands for an intro or outtro, B stands - for a verse, D stands for a chorus or drop, and E stands for the bridge - of the song, adding variety. Using this notation, we can quickly and - easily create and plan our song’s structure without getting too deep - into the details and slowing us down. +A B D B D E D A - If we wanted to use a similar structure for EDM, we could use A B D B D - A or A B D E D A, both of which are fairly basic but common structures. - In this instance, however, the E section is an extended breakdown, - bridge, or a new section or extended verse. +In this instance, the letter A stands for an intro or outtro, B stands for a +verse, D stands for a chorus or drop, and E stands for the bridge of the song, +adding variety. Using this notation, we can quickly and easily create and plan +our song’s structure without getting too deep into the details and slowing us +down. - Now we understand how song structure notation works, let’s look at a - common example of a more complex EDM song structure. +If we wanted to use a similar structure for EDM, we could use A B D B D A or A +B D E D A, both of which are fairly basic but common structures. In this +instance, however, the E section is an extended breakdown, bridge, or a new +section or extended verse. - A B C D B C D A +Now we understand how song structure notation works, let’s look at a common +example of a more complex EDM song structure. - This structure breaks down like so: - * A: These are the intro and outtro of the track. They are typically - 8 or 16 bars in length. In some genres, you may have 4 bar intro - and outtros; it’s important to reference the genre you’re producing - to ensure your song fits in well with the genre. - * B: This is the verse in your track. The first verse is typically 16 - bars, and the second verse is 16 or 32 bars. - * C: This is the build of the track. Both builds are typically 8 bars - in length, although in some genres can be 4 or even 10 or 12 bars - long. - * D: This is the drop of your track. A drop can vary in length but - are usually 8 to 16 bars. The second drop is typically either the - same length as the first, or slightly longer to develop a little - bit of additional energy. +A B C D B C D A - EDM Song Structure - Track Breakdown +This structure breaks down like so: - This is only one example of how you can structure your song, feel free - to deviate as much or as little as you want. During the music - production process, there’s tons of room for experimentation, - innovation, and self-expression; however, the vast majority of the - time, you do not want to experiment with EDM song structure. By doing - so you make your track more difficult to understand. No need to - reinvent the wheel! + • A: These are the intro and outtro of the track. They are typically 8 or 16 + bars in length. In some genres, you may have 4 bar intro and outtros; it’s + important to reference the genre you’re producing to ensure your song fits + in well with the genre. + + • B: This is the verse in your track. The first verse is typically 16 bars, + and the second verse is 16 or 32 bars. + + • C: This is the build of the track. Both builds are typically 8 bars in + length, although in some genres can be 4 or even 10 or 12 bars long. + + • D: This is the drop of your track. A drop can vary in length but are + usually 8 to 16 bars. The second drop is typically either the same length + as the first, or slightly longer to develop a little bit of additional + energy. + +EDM Song Structure - Track Breakdown + +This is only one example of how you can structure your song, feel free to +deviate as much or as little as you want. During the music production process, +there’s tons of room for experimentation, innovation, and self-expression; +however, the vast majority of the time, you do not want to experiment with EDM +song structure. By doing so you make your track more difficult to understand. +No need to reinvent the wheel! Song Structure and Genre - Now for a quick note on genre. Genre itself dictates a lot of how your - track should be structured. A tech house track is going to have a - different song structure than a future bass track, which will be - different than an EDM trap track. Additionally, the length of the track - also fairly tightly correlates to the genre, with pop-y tracks being - shorter and club and house tracks being on the longer side. +Now for a quick note on genre. Genre itself dictates a lot of how your track +should be structured. A tech house track is going to have a different song +structure than a future bass track, which will be different than an EDM trap +track. Additionally, the length of the track also fairly tightly correlates to +the genre, with pop-y tracks being shorter and club and house tracks being on +the longer side. - For example, future bass typically follow a more pop-like structure, - with longer fleshed out melodic verses and short 4 bar intros and - outtros. Most house music, however, has a significantly longer intro - and outtro; 8 to 16 bars, sometimes even 32. House music also typically - has fewer purely melodic elements focused in the verses and breakdowns, - and instead focuses on the vibe, atmosphere, and groove, building up to - an epic drop. +For example, future bass typically follow a more pop-like structure, with +longer fleshed out melodic verses and short 4 bar intros and outtros. Most +house music, however, has a significantly longer intro and outtro; 8 to 16 +bars, sometimes even 32. House music also typically has fewer purely melodic +elements focused in the verses and breakdowns, and instead focuses on the vibe, +atmosphere, and groove, building up to an epic drop. - Let’s take a look at [16]“Chained For Love – B2A & Anklebreaker Remix”. - This is a hardstyle track and has a song structure of: +Let’s take a look at [21]“Chained For Love – B2A & Anklebreaker Remix”. This is +a hardstyle track and has a song structure of: - A B C D B C D A +A B C D B C D A - Where A stands for your intro and outtro, B is your verse, C is the - build, and D is the drop. This is an extremely common structure in - hardstyle tracks; the verse is also typically split into a more vocal - or lower energy first half, and the second half is where your - saw-driven leads come in to introduce components of the drop melody. +Where A stands for your intro and outtro, B is your verse, C is the build, and +D is the drop. This is an extremely common structure in hardstyle tracks; the +verse is also typically split into a more vocal or lower energy first half, and +the second half is where your saw-driven leads come in to introduce components +of the drop melody. - Now let’s examine a future bass track, [17]“Lifeline – LODIS, Josh - Rubin”. This particular track has a structure like so: +Now let’s examine a future bass track, [22]“Lifeline – LODIS, Josh Rubin”. This +particular track has a structure like so: - A B E C D B E C D A +A B E C D B E C D A - Note that this genre has a significantly longer intro than the previous - hardstyle track, yet the overarching structure itself is remarkably - similar. The key difference is the addition of E; which is a breakdown - or pre-build. This component lowers the energy right before the build, - allowing the producer to create a bigger feeling build. +Note that this genre has a significantly longer intro than the previous +hardstyle track, yet the overarching structure itself is remarkably similar. +The key difference is the addition of E; which is a breakdown or pre-build. +This component lowers the energy right before the build, allowing the producer +to create a bigger feeling build. - Finally, let’s take a look at a big room / EDM track. We’ll use - [18]“Cold – Timmy Trumpet” as an example here. He utilizes the - following structure for his track: +Finally, let’s take a look at a big room / EDM track. We’ll use [23]“Cold – +Timmy Trumpet” as an example here. He utilizes the following structure for his +track: - B C D B C D A +B C D B C D A - “Cold” also shares a similar structure to the other tracks. In fact, - it’s virtually identical to “Chained For Love”, save for the lack of - any sort of intro, even though the sounds and overall general vibe of - the genre are strikingly different. +“Cold” also shares a similar structure to the other tracks. In fact, it’s +virtually identical to “Chained For Love”, save for the lack of any sort of +intro, even though the sounds and overall general vibe of the genre are +strikingly different. EDM Song Structure and Arrangement - Now we understand how songs are structured and how to structure our own - track, we need to decide on the genre we want our loop to fit, or what - genre the loop already fits. Then, identify which section of a track - your loop fits into. Is it a heavy and energetic drop, or is it more a - verse or breakdown? +Now we understand how songs are structured and how to structure our own track, +we need to decide on the genre we want our loop to fit, or what genre the loop +already fits. Then, identify which section of a track your loop fits into. Is +it a heavy and energetic drop, or is it more a verse or breakdown? - Once you’ve figured out these overarching details, we can start to - think about how we want to structure our track. You can use your DAW or - even just a piece of paper to map out each section of our song, and - what should go where. Now it’s as simple as filling in the gaps with - elements from your loop, and you’re well on your way to finishing your - track! +Once you’ve figured out these overarching details, we can start to think about +how we want to structure our track. You can use your DAW or even just a piece +of paper to map out each section of our song, and what should go where. Now +it’s as simple as filling in the gaps with elements from your loop, and you’re +well on your way to finishing your track! - Let’s go over some of the common scenarios you’ll find yourself in. +Let’s go over some of the common scenarios you’ll find yourself in. Starting with the Drop - Your loop is energetic and pumping; this is your drop. Let’s use an A B - C D B C D A structure for our track, just like the “Chained For Love – - B2A & Anklebreaker Remix” prior example. +Your loop is energetic and pumping; this is your drop. Let’s use an A B C D B C +D A structure for our track, just like the “Chained For Love – B2A & +Anklebreaker Remix” prior example. - EDM Song Structure - Straring with a Drop +EDM Song Structure - Straring with a Drop - Now you’ve identified that you have a drop, let’s expand it to two - sections with a little bit of melodic or rhythmic variation on the - second iteration. +Now you’ve identified that you have a drop, let’s expand it to two sections +with a little bit of melodic or rhythmic variation on the second iteration. - Now we’ve gotten a full drop, let’s take a look at the build up. We can - use more filtered leads and pads, and switch up the snare or clap to a - contrasting rhythm to build tension. We’ll open up the filters and - speed up the percussion as the drop builds to further build up that - tension before the drop. +[EDM-Song-Structure-Starting-with-a-Drop-2] - Let’s take a look at the intro and outtro. Take the melody, simplify it - and the instrumentation, and use a stripped down drum pattern. You can - also experiment with some low and simple bass or some rhythmically - simple chord patterns. The outtro can be as simple as the intro, but - instead of bringing in elements, we take them out. +Now we’ve gotten a full drop, let’s take a look at the build up. We can use +more filtered leads and pads, and switch up the snare or clap to a contrasting +rhythm to build tension. We’ll open up the filters and speed up the percussion +as the drop builds to further build up that tension before the drop. - The verses should be a contrasting force to the drop, while still - maintaining a similar vibe. To quickly get down a verse idea, you can - take the drop melody, take it down to a lower register with some more - interesting rhythmic chord structures that build nicely into the build - up. We can also add our second verse, build, and drops. +[EDM-Song-Structure-Strarting-with-a-Drop-3] - EDM Song Structure - Starging with a Drop 5 +Let’s take a look at the intro and outtro. Take the melody, simplify it and the +instrumentation, and use a stripped down drum pattern. You can also experiment +with some low and simple bass or some rhythmically simple chord patterns. The +outtro can be as simple as the intro, but instead of bringing in elements, we +take them out. + +[EDM-Song-Structure-Starting-with-a-Drop-4-1024x337] + +The verses should be a contrasting force to the drop, while still maintaining a +similar vibe. To quickly get down a verse idea, you can take the drop melody, +take it down to a lower register with some more interesting rhythmic chord +structures that build nicely into the build up. We can also add our second +verse, build, and drops. + +EDM Song Structure - Starging with a Drop 5 Starting with a Breakdown, Verse or Intro - So your loop isn’t super energetic, maybe it fits well as a verse or - intro. To generate your placeholder verses, take the idea and evolve it - with moving drum patterns and chord patterns. The build up will then - come more naturally, and you can introduce a switch-up in drum patterns - to help contrast this section from the verses and drop. Work up the - energy in the build up, adding faster drums and risers and other - effects. After this build is complete, usually you’ll have a solid idea - for the drop itself; if not, don’t worry! Take your verse idea, take - apart a one or two bar section, and build upon it to make it as high - energy as possible. +So your loop isn’t super energetic, maybe it fits well as a verse or intro. To +generate your placeholder verses, take the idea and evolve it with moving drum +patterns and chord patterns. The build up will then come more naturally, and +you can introduce a switch-up in drum patterns to help contrast this section +from the verses and drop. Work up the energy in the build up, adding faster +drums and risers and other effects. After this build is complete, usually +you’ll have a solid idea for the drop itself; if not, don’t worry! Take your +verse idea, take apart a one or two bar section, and build upon it to make it +as high energy as possible. Referencing Existing Material - If you’re still struggling to build out your loop into a full track - scaffold, try using your favorite song as reference. In this example, - we’ll use HOLIDAY by Lil Nas X, a pop and rap song. +If you’re still struggling to build out your loop into a full track scaffold, +try using your favorite song as reference. In this example, we’ll use HOLIDAY +by Lil Nas X, a pop and rap song. - Import the track into your DAW, and set the tempo equal to that of the - track. Sometimes your DAW will do this for you, but if not, you can - usually find it easily on Beatport or other sites. +Import the track into your DAW, and set the tempo equal to that of the track. +Sometimes your DAW will do this for you, but if not, you can usually find it +easily on Beatport or other sites. - EDM Song Structure - Referencing Existing Material +EDM Song Structure - Referencing Existing Material - Take a listen to the song in full. As you listen, mark down where each - change occurs in the song, and what the upcoming section is.Take a - listen to the song in full. As you listen, mark down where each change - occurs in the song, and what the upcoming section is. +Take a listen to the song in full. As you listen, mark down where each change +occurs in the song, and what the upcoming section is.Take a listen to the song +in full. As you listen, mark down where each change occurs in the song, and +what the upcoming section is. - EDM Song Structure- Referencing Existing Material 2 +EDM Song Structure- Referencing Existing Material 2 - After going through the entire track, you’ll have an accurate map of - the full track, and can use the markers as guidelines on how you can - structure your own track. - Start 2022 the right way! Download your FREE “New Producer Starter - Pack” here. +After going through the entire track, you’ll have an accurate map of the full +track, and can use the markers as guidelines on how you can structure your own +track. + +Start 2022 the right way! Download your FREE “New Producer Starter Pack” here. Conclusion - One of the hardest parts of music production is actually finishing your - own tracks, and not ending up with a hard drive full of unfinished - loops. However, using song structuring techniques, we can use them as - scaffolding for us to write better music, faster. When you create each - section, make sure that each section captures and holds the user’s - interest in its own right; the best songs are interesting throughout, - (even in the intros and outtros!), not just during the drops. +One of the hardest parts of music production is actually finishing your own +tracks, and not ending up with a hard drive full of unfinished loops. However, +using song structuring techniques, we can use them as scaffolding for us to +write better music, faster. When you create each section, make sure that each +section captures and holds the user’s interest in its own right; the best songs +are interesting throughout, (even in the intros and outtros!), not just during +the drops. - What do you struggle with most when it comes to EDM song structure? - Let us know in the comments! - [19]Share33 - [20]Tweet - 33 Shares +What do you struggle with most when it comes to EDM song structure?  Let us +know in the comments! - * [21]Music Theory & Arrangement +[24]Share33 +[25]Tweet +33 Shares + + • [26]Music Theory & Arrangement Related Posts - How to Write Catchy Melodies from Scratch (The Ultimate Guide) +[27] - Everything an Electronic Music Producer Needs to Know About Drum - Programming +How to Write Catchy Melodies from Scratch (The Ultimate Guide) + +[28] + +Everything an Electronic Music Producer Needs to Know About Drum Programming + +[29] About the Author - My name's Will Darling. I've been making and playing dance music for - over 25 years, and share what I've learnt on EDM Tips. Get in touch on - [22]Facebook. +My name's Will Darling. I've been making and playing dance music for over 25 +years, and share what I've learnt on EDM Tips. Get in touch on [30]Facebook. Leave a Reply 6 comments +[loading] + Leave a Reply: - Name * ____________________ - E-Mail * ____________________ - Website ____________________ +Name * [31][ ] - [ ] Save my name, email, and website in this browser for the next time - I comment. +E-Mail * [32][ ] - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - SUBMIT COMMENT +Website [33][ ] - Δ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - _____________________________________________ - [23]←Previous post [24]Next post→ - What do you want to learn? - * [25]Messages - * [26]Mixing & Mastering - * [27]Music Industry - * [28]Music Theory & Arrangement - * [29]Sound Design - * [30]Workflow & Creativity +[34][ ] Save my name, email, and website in this browser for the next time I +comment. - About EDM Tips +[ ] +[36][SUBMIT COMMENT] - My name is Will Darling and I'm the founder of EDM Tips. I've been - producing Electronic Dance Music for over 25 years, and each week help - my readers achieve their music goals. [31]Read More... + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] +Δ[ ] - *  - * [32]Follow @edmtipsofficial -  - *  +[42]←Previous post [43]Next post→ - Popular Posts - [33]The Ultimate Guide to Success in Music Production in 2022 - [34]How To Make Chords - [35]The Circle of Fifths (and how to use it…) - [36]Make Better EDM Using Keys And Scales - [37]The Ultimate EDM Production Glossary +What do you want to learn? - Archives - * [38]April 2023 - * [39]March 2023 - * [40]February 2023 - * [41]January 2023 - * [42]November 2022 - * [43]October 2022 - * [44]September 2022 - * [45]July 2022 - * [46]May 2022 - * [47]March 2022 - * [48]February 2022 - * [49]January 2022 - * [50]October 2021 - * [51]September 2021 - * [52]August 2021 - * [53]June 2021 - * [54]May 2021 - * [55]April 2021 - * [56]March 2021 - * [57]February 2021 - * [58]January 2021 - * [59]December 2020 - * [60]November 2020 - * [61]October 2020 - * [62]September 2020 - * [63]August 2020 - * [64]July 2020 - * [65]June 2020 - * [66]May 2020 - * [67]April 2020 - * [68]March 2020 - * [69]February 2020 - * [70]January 2020 - * [71]December 2019 - * [72]November 2019 - * [73]October 2019 - * [74]September 2019 - * [75]August 2019 - * [76]July 2019 - * [77]June 2019 - * [78]May 2019 - * [79]April 2019 - * [80]February 2019 - * [81]January 2019 - * [82]December 2018 - * [83]November 2018 - * [84]September 2018 - * [85]August 2018 - * [86]July 2018 - * [87]June 2018 - * [88]May 2018 - * [89]April 2018 - * [90]March 2018 - * [91]January 2018 - * [92]December 2017 - * [93]November 2017 - * [94]October 2017 - * [95]September 2017 - * [96]August 2017 - * [97]July 2017 - * [98]June 2017 - * [99]May 2017 - * [100]April 2017 - * [101]February 2017 - * [102]January 2017 - * [103]December 2016 - * [104]November 2016 - * [105]October 2016 - * [106]September 2016 - * [107]August 2016 + • [44]Messages + • [45]Mixing & Mastering + • [46]Music Industry + • [47]Music Theory & Arrangement + • [48]Sound Design + • [49]Workflow & Creativity - Copyright 2023 EDM Tips Ltd. - * [108] - * [109] - * [110] +About EDM Tips -References +[Will-Darli] - Visible links: - 1. https://edmtips.com/edm-song-structure/feed/ - 2. https://edmtips.com/wp-json/wp/v2/posts/3828 - 3. https://edmtips.com/wp-json/oembed/1.0/embed?url=https://edmtips.com/edm-song-structure/ - 4. https://edmtips.com/wp-json/oembed/1.0/embed?url=https://edmtips.com/edm-song-structure/&format=xml - 5. https://www.googletagmanager.com/ns.html?id=GTM-N5SBWB6 - 6. https://edmtips.com/ - 7. https://edmtips.com/free-guides/ - 8. https://edmtips.com/products/ - 9. https://edmtips.com/blog/ - 10. https://edmtips.com/club/ - 11. https://academy.edmtips.com/login - 12. https://edmtips.com/edm-song-structure/#comments - 13. https://www.facebook.com/share.php?u=https://edmtips.com/edm-song-structure/ - 14. https://twitter.com/intent/tweet?text=EDM+Song+Structure:+Arrange+Your+Loop+into+a+Full+Song&url=https://edmtips.com/edm-song-structure/&via=EDMtipsOfficial - 15. https://www.youtube.com/embed/EXx9At3iUOw?feature=oembed&iv_load_policy=3&modestbranding=1&rel=0&autohide=1&playsinline=0&autoplay=0 - 16. https://www.youtube.com/watch?v=F-tDyFu-YzQ - 17. https://www.youtube.com/watch?v=QVtRH0znmqU - 18. https://www.youtube.com/watch?v=Nld4XNwpZN8 - 19. https://www.facebook.com/share.php?u=https://edmtips.com/edm-song-structure/ - 20. https://twitter.com/intent/tweet?text=EDM+Song+Structure:+Arrange+Your+Loop+into+a+Full+Song&url=https://edmtips.com/edm-song-structure/&via=EDMtipsOfficial - 21. https://edmtips.com/category/composition-arrangement/ - 22. https://www.facebook.com/EDMtipsOfficial/ - 23. https://edmtips.com/how-to-make-edm-like-martin-garrix/ - 24. https://edmtips.com/guide-into-music-production-software-for-beginners/ - 25. https://edmtips.com/category/messages/ - 26. https://edmtips.com/category/mixing-mastering/ - 27. https://edmtips.com/category/music-industry/ - 28. https://edmtips.com/category/composition-arrangement/ - 29. https://edmtips.com/category/sound-design/ - 30. https://edmtips.com/category/workflow-creativity/ - 31. http://edmtips.com/about/ - 32. http://twitter.com/http://edmtipsofficial - 33. https://edmtips.com/success-music-production/ - 34. https://edmtips.com/how-to-make-chords/ - 35. https://edmtips.com/the-circle-of-fifths-and-how-to-use-it/ - 36. https://edmtips.com/how-to-use-keys-make-edm/ - 37. https://edmtips.com/ultimate-edm-production-glossary/ - 38. https://edmtips.com/2023/04/ - 39. https://edmtips.com/2023/03/ - 40. https://edmtips.com/2023/02/ - 41. https://edmtips.com/2023/01/ - 42. https://edmtips.com/2022/11/ - 43. https://edmtips.com/2022/10/ - 44. https://edmtips.com/2022/09/ - 45. https://edmtips.com/2022/07/ - 46. https://edmtips.com/2022/05/ - 47. https://edmtips.com/2022/03/ - 48. https://edmtips.com/2022/02/ - 49. https://edmtips.com/2022/01/ - 50. https://edmtips.com/2021/10/ - 51. https://edmtips.com/2021/09/ - 52. https://edmtips.com/2021/08/ - 53. https://edmtips.com/2021/06/ - 54. https://edmtips.com/2021/05/ - 55. https://edmtips.com/2021/04/ - 56. https://edmtips.com/2021/03/ - 57. https://edmtips.com/2021/02/ - 58. https://edmtips.com/2021/01/ - 59. https://edmtips.com/2020/12/ - 60. https://edmtips.com/2020/11/ - 61. https://edmtips.com/2020/10/ - 62. https://edmtips.com/2020/09/ - 63. https://edmtips.com/2020/08/ - 64. https://edmtips.com/2020/07/ - 65. https://edmtips.com/2020/06/ - 66. https://edmtips.com/2020/05/ - 67. https://edmtips.com/2020/04/ - 68. https://edmtips.com/2020/03/ - 69. https://edmtips.com/2020/02/ - 70. https://edmtips.com/2020/01/ - 71. https://edmtips.com/2019/12/ - 72. https://edmtips.com/2019/11/ - 73. https://edmtips.com/2019/10/ - 74. https://edmtips.com/2019/09/ - 75. https://edmtips.com/2019/08/ - 76. https://edmtips.com/2019/07/ - 77. https://edmtips.com/2019/06/ - 78. https://edmtips.com/2019/05/ - 79. https://edmtips.com/2019/04/ - 80. https://edmtips.com/2019/02/ - 81. https://edmtips.com/2019/01/ - 82. https://edmtips.com/2018/12/ - 83. https://edmtips.com/2018/11/ - 84. https://edmtips.com/2018/09/ - 85. https://edmtips.com/2018/08/ - 86. https://edmtips.com/2018/07/ - 87. https://edmtips.com/2018/06/ - 88. https://edmtips.com/2018/05/ - 89. https://edmtips.com/2018/04/ - 90. https://edmtips.com/2018/03/ - 91. https://edmtips.com/2018/01/ - 92. https://edmtips.com/2017/12/ - 93. https://edmtips.com/2017/11/ - 94. https://edmtips.com/2017/10/ - 95. https://edmtips.com/2017/09/ - 96. https://edmtips.com/2017/08/ - 97. https://edmtips.com/2017/07/ - 98. https://edmtips.com/2017/06/ - 99. https://edmtips.com/2017/05/ - 100. https://edmtips.com/2017/04/ - 101. https://edmtips.com/2017/02/ - 102. https://edmtips.com/2017/01/ - 103. https://edmtips.com/2016/12/ - 104. https://edmtips.com/2016/11/ - 105. https://edmtips.com/2016/10/ - 106. https://edmtips.com/2016/09/ - 107. https://edmtips.com/2016/08/ - 108. https://www.facebook.com/EDMtipsOfficial/ - 109. https://twitter.com/edmtipsofficial - 110. http://youtube.com/c/edmtips?sub_confirmation=1 +My name is Will Darling and I'm the founder of EDM Tips. I've been producing +Electronic Dance Music for over 25 years, and each week help my readers achieve +their music goals. [50]Read More... - Hidden links: - 112. https://edmtips.com/how-to-write-catchy-melodies-from-scratch-the-ultimate-guide/ - 113. https://edmtips.com/drum-programming/ - 114. https://edmtips.com/author/edmtips/ + • +  + • [51]Follow @edmtipsofficial +  + • +  + +Popular Posts + +[52]The Ultimate Guide to Success in Music Production in 2022 +[53]How To Make Chords +[54]The Circle of Fifths (and how to use it…) +[55]Make Better EDM Using Keys And Scales +[56]The Ultimate EDM Production Glossary + +Archives + + • [57]April 2023 + • [58]March 2023 + • [59]February 2023 + • [60]January 2023 + • [61]November 2022 + • [62]October 2022 + • [63]September 2022 + • [64]July 2022 + • [65]May 2022 + • [66]March 2022 + • [67]February 2022 + • [68]January 2022 + • [69]October 2021 + • [70]September 2021 + • [71]August 2021 + • [72]June 2021 + • [73]May 2021 + • [74]April 2021 + • [75]March 2021 + • [76]February 2021 + • [77]January 2021 + • [78]December 2020 + • [79]November 2020 + • [80]October 2020 + • [81]September 2020 + • [82]August 2020 + • [83]July 2020 + • [84]June 2020 + • [85]May 2020 + • [86]April 2020 + • [87]March 2020 + • [88]February 2020 + • [89]January 2020 + • [90]December 2019 + • [91]November 2019 + • [92]October 2019 + • [93]September 2019 + • [94]August 2019 + • [95]July 2019 + • [96]June 2019 + • [97]May 2019 + • [98]April 2019 + • [99]February 2019 + • [100]January 2019 + • [101]December 2018 + • [102]November 2018 + • [103]September 2018 + • [104]August 2018 + • [105]July 2018 + • [106]June 2018 + • [107]May 2018 + • [108]April 2018 + • [109]March 2018 + • [110]January 2018 + • [111]December 2017 + • [112]November 2017 + • [113]October 2017 + • [114]September 2017 + • [115]August 2017 + • [116]July 2017 + • [117]June 2017 + • [118]May 2017 + • [119]April 2017 + • [120]February 2017 + • [121]January 2017 + • [122]December 2016 + • [123]November 2016 + • [124]October 2016 + • [125]September 2016 + • [126]August 2016 + +Copyright 2023 EDM Tips Ltd. + + • [127]  + • [128]  + • [129]  + + +References: + +[1] https://edmtips.com/ +[2] https://edmtips.com/free-guides/ +[3] https://edmtips.com/products/ +[4] https://edmtips.com/blog/ +[5] https://edmtips.com/club/ +[6] https://academy.edmtips.com/login +[18] https://edmtips.com/edm-song-structure/#comments +[19] https://www.facebook.com/share.php?u=https%3A%2F%2Fedmtips.com%2Fedm-song-structure%2F +[20] https://twitter.com/intent/tweet?text=EDM+Song+Structure%3A+Arrange+Your+Loop+into+a+Full+Song&url=https%3A%2F%2Fedmtips.com%2Fedm-song-structure%2F&via=EDMtipsOfficial +[21] https://www.youtube.com/watch?v=F-tDyFu-YzQ +[22] https://www.youtube.com/watch?v=QVtRH0znmqU +[23] https://www.youtube.com/watch?v=Nld4XNwpZN8 +[24] https://www.facebook.com/share.php?u=https%3A%2F%2Fedmtips.com%2Fedm-song-structure%2F +[25] https://twitter.com/intent/tweet?text=EDM+Song+Structure%3A+Arrange+Your+Loop+into+a+Full+Song&url=https%3A%2F%2Fedmtips.com%2Fedm-song-structure%2F&via=EDMtipsOfficial +[26] https://edmtips.com/category/composition-arrangement/ +[27] https://edmtips.com/how-to-write-catchy-melodies-from-scratch-the-ultimate-guide/ +[28] https://edmtips.com/drum-programming/ +[29] https://edmtips.com/author/edmtips/ +[30] https://www.facebook.com/EDMtipsOfficial/ +[42] https://edmtips.com/how-to-make-edm-like-martin-garrix/ +[43] https://edmtips.com/guide-into-music-production-software-for-beginners/ +[44] https://edmtips.com/category/messages/ +[45] https://edmtips.com/category/mixing-mastering/ +[46] https://edmtips.com/category/music-industry/ +[47] https://edmtips.com/category/composition-arrangement/ +[48] https://edmtips.com/category/sound-design/ +[49] https://edmtips.com/category/workflow-creativity/ +[50] http://edmtips.com/about/ +[51] http://twitter.com/http://edmtipsofficial +[52] https://edmtips.com/success-music-production/ +[53] https://edmtips.com/how-to-make-chords/ +[54] https://edmtips.com/the-circle-of-fifths-and-how-to-use-it/ +[55] https://edmtips.com/how-to-use-keys-make-edm/ +[56] https://edmtips.com/ultimate-edm-production-glossary/ +[57] https://edmtips.com/2023/04/ +[58] https://edmtips.com/2023/03/ +[59] https://edmtips.com/2023/02/ +[60] https://edmtips.com/2023/01/ +[61] https://edmtips.com/2022/11/ +[62] https://edmtips.com/2022/10/ +[63] https://edmtips.com/2022/09/ +[64] https://edmtips.com/2022/07/ +[65] https://edmtips.com/2022/05/ +[66] https://edmtips.com/2022/03/ +[67] https://edmtips.com/2022/02/ +[68] https://edmtips.com/2022/01/ +[69] https://edmtips.com/2021/10/ +[70] https://edmtips.com/2021/09/ +[71] https://edmtips.com/2021/08/ +[72] https://edmtips.com/2021/06/ +[73] https://edmtips.com/2021/05/ +[74] https://edmtips.com/2021/04/ +[75] https://edmtips.com/2021/03/ +[76] https://edmtips.com/2021/02/ +[77] https://edmtips.com/2021/01/ +[78] https://edmtips.com/2020/12/ +[79] https://edmtips.com/2020/11/ +[80] https://edmtips.com/2020/10/ +[81] https://edmtips.com/2020/09/ +[82] https://edmtips.com/2020/08/ +[83] https://edmtips.com/2020/07/ +[84] https://edmtips.com/2020/06/ +[85] https://edmtips.com/2020/05/ +[86] https://edmtips.com/2020/04/ +[87] https://edmtips.com/2020/03/ +[88] https://edmtips.com/2020/02/ +[89] https://edmtips.com/2020/01/ +[90] https://edmtips.com/2019/12/ +[91] https://edmtips.com/2019/11/ +[92] https://edmtips.com/2019/10/ +[93] https://edmtips.com/2019/09/ +[94] https://edmtips.com/2019/08/ +[95] https://edmtips.com/2019/07/ +[96] https://edmtips.com/2019/06/ +[97] https://edmtips.com/2019/05/ +[98] https://edmtips.com/2019/04/ +[99] https://edmtips.com/2019/02/ +[100] https://edmtips.com/2019/01/ +[101] https://edmtips.com/2018/12/ +[102] https://edmtips.com/2018/11/ +[103] https://edmtips.com/2018/09/ +[104] https://edmtips.com/2018/08/ +[105] https://edmtips.com/2018/07/ +[106] https://edmtips.com/2018/06/ +[107] https://edmtips.com/2018/05/ +[108] https://edmtips.com/2018/04/ +[109] https://edmtips.com/2018/03/ +[110] https://edmtips.com/2018/01/ +[111] https://edmtips.com/2017/12/ +[112] https://edmtips.com/2017/11/ +[113] https://edmtips.com/2017/10/ +[114] https://edmtips.com/2017/09/ +[115] https://edmtips.com/2017/08/ +[116] https://edmtips.com/2017/07/ +[117] https://edmtips.com/2017/06/ +[118] https://edmtips.com/2017/05/ +[119] https://edmtips.com/2017/04/ +[120] https://edmtips.com/2017/02/ +[121] https://edmtips.com/2017/01/ +[122] https://edmtips.com/2016/12/ +[123] https://edmtips.com/2016/11/ +[124] https://edmtips.com/2016/10/ +[125] https://edmtips.com/2016/09/ +[126] https://edmtips.com/2016/08/ +[127] https://www.facebook.com/EDMtipsOfficial/ +[128] https://twitter.com/edmtipsofficial +[129] http://youtube.com/c/edmtips?sub_confirmation=1 diff --git a/static/archive/funlandrehoboth-com-jrkd5r.txt b/static/archive/funlandrehoboth-com-jrkd5r.txt index 604c837..bf53ece 100644 --- a/static/archive/funlandrehoboth-com-jrkd5r.txt +++ b/static/archive/funlandrehoboth-com-jrkd5r.txt @@ -1,311 +1,328 @@ - Funland is closed for the season! Our opening day next season is Sat, - May 11! - [1]Home - Attractions - * [2]Park Information - * [3]Rides - * [4]Games - * [5]Retail & Food +[1] - [6]Schedule - Work For Us - * [7]Employee Testimonials - * [8]Seasonal Rides/ Games - * [9]Maintenance Manager - * [10]Maintenance Mechanic - * [11]Seasonal Park Cleaner +Funland is closed for the season! Our opening day next season is Sat, May 11! - Info - * [12]Tickets - * [13]Height Restrictions - * [14]Photos - * [15]Contact Us - * [16]Report A Lost Item +[2]Home +[3] +Attractions - Funland Rehoboth - [17]Home - Attractions - * [18]Park Information - * [19]Rides - * [20]Games - * [21]Retail & Food + • [4]Park Information + • [5]Rides + • [6]Games + • [7]Retail & Food - [22]Schedule - Work For Us - * [23]Employee Testimonials - * [24]Seasonal Rides/ Games - * [25]Maintenance Manager - * [26]Maintenance Mechanic - * [27]Seasonal Park Cleaner +[8]Schedule +[9] +Work For Us - Info - * [28]Tickets - * [29]Height Restrictions - * [30]Photos - * [31]Contact Us - * [32]Report A Lost Item + • [10]Employee Testimonials + • [11]Seasonal Rides/ Games + • [12]Maintenance Manager + • [13]Maintenance Mechanic + • [14]Seasonal Park Cleaner - 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 +[15] +Info - * [49]Sign In - * - ______________________________________________________________ + • [16]Tickets + • [17]Height Restrictions + • [18]Photos + • [19]Contact Us + • [20]Report A Lost Item - * [50]My Account +[21] +Funland Rehoboth +[22]Home +[23] +Attractions - * Signed in as: - * filler@godaddy.com - * - ______________________________________________________________ + • [24]Park Information + • [25]Rides + • [26]Games + • [27]Retail & Food - * [51]My Account - * Sign out +[28]Schedule +[29] +Work For Us - Funland Rehoboth + • [30]Employee Testimonials + • [31]Seasonal Rides/ Games + • [32]Maintenance Manager + • [33]Maintenance Mechanic + • [34]Seasonal Park Cleaner - Signed in as: +[35] +Info - 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 + • [36]Tickets + • [37]Height Restrictions + • [38]Photos + • [39]Contact Us + • [40]Report A Lost Item - Account - * - ______________________________________________________________ +[41] +More - * [71]My Account - * Sign out + • [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 - * - ______________________________________________________________ +[58] +[59] - * [72]Sign In - * [73]My Account + • [60]Sign In + • ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + • [61]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 + • Signed in as: - IFRAME: [80]javascript: window.frameElement.getAttribute("srcdoc"); + • filler@godaddy.com + + • ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + • [62]My Account + • Sign out + +[63] +[64] +Funland Rehoboth + +Signed in as: + +filler@godaddy.com + + • [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 + + • ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + • [84]My Account + • Sign out + + • ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + • [85]Sign In + • [86]My Account + +[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 - 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. +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. - 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. - 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! +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. - If you would like to hear more about the Funland story check out the - links below! - 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. +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. + + +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 +Sign up to stay up to date with all announcements! - Funland +[96][ ]Email +Sign up + • [98]Seasonal Rides/ Games + • [99]Park Policies + • [100]Rider Safety Guide + • [101]Contact Us + • [102]Subscribe - Copyright © 2020 Funland - All Rights Reserved. +[103][104][105] -References +Funland - 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 +Copyright © 2020 Funland - All Rights Reserved. - 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 + +References: + +[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 diff --git a/static/archive/go-dev-vfin4x.txt b/static/archive/go-dev-vfin4x.txt index e8ace61..436f82e 100644 --- a/static/archive/go-dev-vfin4x.txt +++ b/static/archive/go-dev-vfin4x.txt @@ -1,307 +1,321 @@ - IFRAME: [1]https://www.googletagmanager.com/ns.html?id=GTM-W8MVQXG +[1] Go +[2] Skip to Main Content - [2]Go - [3]Skip to Main Content - * [4]Why Go arrow_drop_down - Press Enter to activate/deactivate dropdown - + [5]Case Studies - Common problems companies solve with Go - + [6]Use Cases - Stories about how and why companies use Go - + [7]Security - How Go can help keep you secure by default - * [8]Learn - Press Enter to activate/deactivate dropdown - * [9]Docs arrow_drop_down - Press Enter to activate/deactivate dropdown - + [10]Effective Go - Tips for writing clear, performant, and idiomatic Go code - + [11]Go User Manual - A complete introduction to building software with Go - + [12]Standard library - Reference documentation for Go's standard library - + [13]Release Notes - Learn what's new in each Go release - * [14]Packages - Press Enter to activate/deactivate dropdown - * [15]Community arrow_drop_down - Press Enter to activate/deactivate dropdown - + [16]Recorded Talks - Videos from prior events - + [17]Meetups open_in_new - Meet other local Go developers - + [18]Conferences open_in_new - Learn and network with Go developers from around the world - + [19]Go blog - The Go project's official blog. - + [20]Go project - Get help and stay informed from Go - + Get connected - [21][google-groups.svg] [22][github.svg] [23][twitter.svg] - [24][reddit.svg] [25][slack.svg] [26][stack-overflow.svg] + • [3] Why Go arrow_drop_down + Press Enter to activate/deactivate dropdown + □ [4] Case Studies - (BUTTON) + Common problems companies solve with Go - [27]Go. + □ [5] Use Cases - * [28]Why Go navigate_next - [29]navigate_beforeWhy Go - + [30]Case Studies - + [31]Use Cases - + [32]Security - * [33]Learn - * [34]Docs navigate_next - [35]navigate_beforeDocs - + [36]Effective Go - + [37]Go User Manual - + [38]Standard library - + [39]Release Notes - * [40]Packages - * [41]Community navigate_next - [42]navigate_beforeCommunity - + [43]Recorded Talks - + [44]Meetups open_in_new - + [45]Conferences open_in_new - + [46]Go blog - + [47]Go project - + Get connected - [48][google-groups.svg] [49][github.svg] [50][twitter.svg] - [51][reddit.svg] [52][slack.svg] [53][stack-overflow.svg] + Stories about how and why companies use Go - 1. [54]Documentation - 2. [55]Effective Go + □ [6] Security - Effective Go + How Go can help keep you secure by default + + • [7] Learn + Press Enter to activate/deactivate dropdown + • [8] Docs arrow_drop_down + Press Enter to activate/deactivate dropdown + □ [9] Effective Go + + Tips for writing clear, performant, and idiomatic Go code + + □ [10] Go User Manual + + A complete introduction to building software with Go + + □ [11] Standard library + + Reference documentation for Go's standard library + + □ [12] Release Notes + + Learn what's new in each Go release + + • [13] Packages + Press Enter to activate/deactivate dropdown + • [14] Community arrow_drop_down + Press Enter to activate/deactivate dropdown + □ [15] Recorded Talks + + Videos from prior events + + □ [16] Meetups open_in_new + + Meet other local Go developers + + □ [17] Conferences open_in_new + + Learn and network with Go developers from around the world + + □ [18] Go blog + + The Go project's official blog. + + □ [19] Go project + + Get help and stay informed from Go + + □ Get connected + + [20][google-gro] [21][github] [22][twitter] [23][reddit] [24][slack] + [25][stack-over] + +[27] Go. + + • [28]Why Go navigate_next + [29]navigate_beforeWhy Go + □ [30] Case Studies + □ [31] Use Cases + □ [32] Security + • [33]Learn + • [34]Docs navigate_next + [35]navigate_beforeDocs + □ [36] Effective Go + □ [37] Go User Manual + □ [38] Standard library + □ [39] Release Notes + • [40]Packages + • [41]Community navigate_next + [42]navigate_beforeCommunity + □ [43] Recorded Talks + □ [44] Meetups open_in_new + □ [45] Conferences open_in_new + □ [46] Go blog + □ [47] Go project + □ Get connected + [48][google-gro] [49][github] [50][twitter] [51][reddit] [52][slack] + [53][stack-over] + + 1. [54] Documentation + 2. [55] Effective Go + +Effective Go Introduction - Go is a new language. Although it borrows ideas from existing - languages, it has unusual properties that make effective Go programs - different in character from programs written in its relatives. A - straightforward translation of a C++ or Java program into Go is - unlikely to produce a satisfactory result—Java programs are written in - Java, not Go. On the other hand, thinking about the problem from a Go - perspective could produce a successful but quite different program. In - other words, to write Go well, it's important to understand its - properties and idioms. It's also important to know the established - conventions for programming in Go, such as naming, formatting, program - construction, and so on, so that programs you write will be easy for - other Go programmers to understand. +Go is a new language. Although it borrows ideas from existing languages, it has +unusual properties that make effective Go programs different in character from +programs written in its relatives. A straightforward translation of a C++ or +Java program into Go is unlikely to produce a satisfactory result—Java programs +are written in Java, not Go. On the other hand, thinking about the problem from +a Go perspective could produce a successful but quite different program. In +other words, to write Go well, it's important to understand its properties and +idioms. It's also important to know the established conventions for programming +in Go, such as naming, formatting, program construction, and so on, so that +programs you write will be easy for other Go programmers to understand. - This document gives tips for writing clear, idiomatic Go code. It - augments the [56]language specification, the [57]Tour of Go, and - [58]How to Write Go Code, all of which you should read first. +This document gives tips for writing clear, idiomatic Go code. It augments the +[56]language specification, the [57]Tour of Go, and [58]How to Write Go Code, +all of which you should read first. - Note added January, 2022: This document was written for Go's release in - 2009, and has not been updated significantly since. Although it is a - good guide to understand how to use the language itself, thanks to the - stability of the language, it says little about the libraries and - nothing about significant changes to the Go ecosystem since it was - written, such as the build system, testing, modules, and polymorphism. - There are no plans to update it, as so much has happened and a large - and growing set of documents, blogs, and books do a fine job of - describing modern Go usage. Effective Go continues to be useful, but - the reader should understand it is far from a complete guide. See - [59]issue 28782 for context. +Note added January, 2022: This document was written for Go's release in 2009, +and has not been updated significantly since. Although it is a good guide to +understand how to use the language itself, thanks to the stability of the +language, it says little about the libraries and nothing about significant +changes to the Go ecosystem since it was written, such as the build system, +testing, modules, and polymorphism. There are no plans to update it, as so much +has happened and a large and growing set of documents, blogs, and books do a +fine job of describing modern Go usage. Effective Go continues to be useful, +but the reader should understand it is far from a complete guide. See [59]issue +28782 for context. - Examples +Examples - The [60]Go package sources are intended to serve not only as the core - library but also as examples of how to use the language. Moreover, many - of the packages contain working, self-contained executable examples you - can run directly from the [61]go.dev web site, such as [62]this one (if - necessary, click on the word "Example" to open it up). If you have a - question about how to approach a problem or how something might be - implemented, the documentation, code and examples in the library can - provide answers, ideas and background. +The [60]Go package sources are intended to serve not only as the core library +but also as examples of how to use the language. Moreover, many of the packages +contain working, self-contained executable examples you can run directly from +the [61]go.dev web site, such as [62]this one (if necessary, click on the word +"Example" to open it up). If you have a question about how to approach a +problem or how something might be implemented, the documentation, code and +examples in the library can provide answers, ideas and background. Formatting - Formatting issues are the most contentious but the least consequential. - People can adapt to different formatting styles but it's better if they - don't have to, and less time is devoted to the topic if everyone - adheres to the same style. The problem is how to approach this Utopia - without a long prescriptive style guide. +Formatting issues are the most contentious but the least consequential. People +can adapt to different formatting styles but it's better if they don't have to, +and less time is devoted to the topic if everyone adheres to the same style. +The problem is how to approach this Utopia without a long prescriptive style +guide. - With Go we take an unusual approach and let the machine take care of - most formatting issues. The gofmt program (also available as go fmt, - which operates at the package level rather than source file level) - reads a Go program and emits the source in a standard style of - indentation and vertical alignment, retaining and if necessary - reformatting comments. If you want to know how to handle some new - layout situation, run gofmt; if the answer doesn't seem right, - rearrange your program (or file a bug about gofmt), don't work around - it. +With Go we take an unusual approach and let the machine take care of most +formatting issues. The gofmt program (also available as go fmt, which operates +at the package level rather than source file level) reads a Go program and +emits the source in a standard style of indentation and vertical alignment, +retaining and if necessary reformatting comments. If you want to know how to +handle some new layout situation, run gofmt; if the answer doesn't seem right, +rearrange your program (or file a bug about gofmt), don't work around it. + +As an example, there's no need to spend time lining up the comments on the +fields of a structure. Gofmt will do that for you. Given the declaration - As an example, there's no need to spend time lining up the comments on - the fields of a structure. Gofmt will do that for you. Given the - declaration type T struct { name string // name of the object value int // its value } - gofmt will line up the columns: +gofmt will line up the columns: + type T struct { name string // name of the object value int // its value } - All Go code in the standard packages has been formatted with gofmt. +All Go code in the standard packages has been formatted with gofmt. - Some formatting details remain. Very briefly: +Some formatting details remain. Very briefly: - Indentation - We use tabs for indentation and gofmt emits them by default. Use - spaces only if you must. +Indentation + We use tabs for indentation and gofmt emits them by default. Use spaces + only if you must. +Line length + Go has no line length limit. Don't worry about overflowing a punched card. + If a line feels too long, wrap it and indent with an extra tab. +Parentheses + Go needs fewer parentheses than C and Java: control structures (if, for, + switch) do not have parentheses in their syntax. Also, the operator + precedence hierarchy is shorter and clearer, so - Line length - Go has no line length limit. Don't worry about overflowing a - punched card. If a line feels too long, wrap it and indent with - an extra tab. + x<<8 + y<<16 - Parentheses - Go needs fewer parentheses than C and Java: control structures - (if, for, switch) do not have parentheses in their syntax. Also, - the operator precedence hierarchy is shorter and clearer, so - -x<<8 + y<<16 - - means what the spacing implies, unlike in the other languages. + means what the spacing implies, unlike in the other languages. Commentary - Go provides C-style /* */ block comments and C++-style // line - comments. Line comments are the norm; block comments appear mostly as - package comments, but are useful within an expression or to disable - large swaths of code. +Go provides C-style /* */ block comments and C++-style // line comments. Line +comments are the norm; block comments appear mostly as package comments, but +are useful within an expression or to disable large swaths of code. - Comments that appear before top-level declarations, with no intervening - newlines, are considered to document the declaration itself. These “doc - comments” are the primary documentation for a given Go package or - command. For more about doc comments, see “[63]Go Doc Comments”. +Comments that appear before top-level declarations, with no intervening +newlines, are considered to document the declaration itself. These “doc +comments” are the primary documentation for a given Go package or command. For +more about doc comments, see “[63]Go Doc Comments”. Names - Names are as important in Go as in any other language. They even have - semantic effect: the visibility of a name outside a package is - determined by whether its first character is upper case. It's therefore - worth spending a little time talking about naming conventions in Go - programs. +Names are as important in Go as in any other language. They even have semantic +effect: the visibility of a name outside a package is determined by whether its +first character is upper case. It's therefore worth spending a little time +talking about naming conventions in Go programs. - Package names +Package names + +When a package is imported, the package name becomes an accessor for the +contents. After - When a package is imported, the package name becomes an accessor for - the contents. After import "bytes" - the importing package can talk about bytes.Buffer. It's helpful if - everyone using the package can use the same name to refer to its - contents, which implies that the package name should be good: short, - concise, evocative. By convention, packages are given lower case, - single-word names; there should be no need for underscores or - mixedCaps. Err on the side of brevity, since everyone using your - package will be typing that name. And don't worry about collisions a - priori. The package name is only the default name for imports; it need - not be unique across all source code, and in the rare case of a - collision the importing package can choose a different name to use - locally. In any case, confusion is rare because the file name in the - import determines just which package is being used. +the importing package can talk about bytes.Buffer. It's helpful if everyone +using the package can use the same name to refer to its contents, which implies +that the package name should be good: short, concise, evocative. By convention, +packages are given lower case, single-word names; there should be no need for +underscores or mixedCaps. Err on the side of brevity, since everyone using your +package will be typing that name. And don't worry about collisions a priori. +The package name is only the default name for imports; it need not be unique +across all source code, and in the rare case of a collision the importing +package can choose a different name to use locally. In any case, confusion is +rare because the file name in the import determines just which package is being +used. - Another convention is that the package name is the base name of its - source directory; the package in src/encoding/base64 is imported as - "encoding/base64" but has name base64, not encoding_base64 and not - encodingBase64. +Another convention is that the package name is the base name of its source +directory; the package in src/encoding/base64 is imported as "encoding/base64" +but has name base64, not encoding_base64 and not encodingBase64. - The importer of a package will use the name to refer to its contents, - so exported names in the package can use that fact to avoid repetition. - (Don't use the import . notation, which can simplify tests that must - run outside the package they are testing, but should otherwise be - avoided.) For instance, the buffered reader type in the bufio package - is called Reader, not BufReader, because users see it as bufio.Reader, - which is a clear, concise name. Moreover, because imported entities are - always addressed with their package name, bufio.Reader does not - conflict with io.Reader. Similarly, the function to make new instances - of ring.Ring—which is the definition of a constructor in Go—would - normally be called NewRing, but since Ring is the only type exported by - the package, and since the package is called ring, it's called just - New, which clients of the package see as ring.New. Use the package - structure to help you choose good names. +The importer of a package will use the name to refer to its contents, so +exported names in the package can use that fact to avoid repetition. (Don't use +the import . notation, which can simplify tests that must run outside the +package they are testing, but should otherwise be avoided.) For instance, the +buffered reader type in the bufio package is called Reader, not BufReader, +because users see it as bufio.Reader, which is a clear, concise name. Moreover, +because imported entities are always addressed with their package name, +bufio.Reader does not conflict with io.Reader. Similarly, the function to make +new instances of ring.Ring—which is the definition of a constructor in Go—would +normally be called NewRing, but since Ring is the only type exported by the +package, and since the package is called ring, it's called just New, which +clients of the package see as ring.New. Use the package structure to help you +choose good names. - Another short example is once.Do; once.Do(setup) reads well and would - not be improved by writing once.DoOrWaitUntilDone(setup). Long names - don't automatically make things more readable. A helpful doc comment - can often be more valuable than an extra long name. +Another short example is once.Do; once.Do(setup) reads well and would not be +improved by writing once.DoOrWaitUntilDone(setup). Long names don't +automatically make things more readable. A helpful doc comment can often be +more valuable than an extra long name. - Getters +Getters + +Go doesn't provide automatic support for getters and setters. There's nothing +wrong with providing getters and setters yourself, and it's often appropriate +to do so, but it's neither idiomatic nor necessary to put Get into the getter's +name. If you have a field called owner (lower case, unexported), the getter +method should be called Owner (upper case, exported), not GetOwner. The use of +upper-case names for export provides the hook to discriminate the field from +the method. A setter function, if needed, will likely be called SetOwner. Both +names read well in practice: - Go doesn't provide automatic support for getters and setters. There's - nothing wrong with providing getters and setters yourself, and it's - often appropriate to do so, but it's neither idiomatic nor necessary to - put Get into the getter's name. If you have a field called owner (lower - case, unexported), the getter method should be called Owner (upper - case, exported), not GetOwner. The use of upper-case names for export - provides the hook to discriminate the field from the method. A setter - function, if needed, will likely be called SetOwner. Both names read - well in practice: owner := obj.Owner() if owner != user { obj.SetOwner(user) } - Interface names +Interface names - By convention, one-method interfaces are named by the method name plus - an -er suffix or similar modification to construct an agent noun: - Reader, Writer, Formatter, CloseNotifier etc. +By convention, one-method interfaces are named by the method name plus an -er +suffix or similar modification to construct an agent noun: Reader, Writer, +Formatter, CloseNotifier etc. - There are a number of such names and it's productive to honor them and - the function names they capture. Read, Write, Close, Flush, String and - so on have canonical signatures and meanings. To avoid confusion, don't - give your method one of those names unless it has the same signature - and meaning. Conversely, if your type implements a method with the same - meaning as a method on a well-known type, give it the same name and - signature; call your string-converter method String not ToString. +There are a number of such names and it's productive to honor them and the +function names they capture. Read, Write, Close, Flush, String and so on have +canonical signatures and meanings. To avoid confusion, don't give your method +one of those names unless it has the same signature and meaning. Conversely, if +your type implements a method with the same meaning as a method on a well-known +type, give it the same name and signature; call your string-converter method +String not ToString. - MixedCaps +MixedCaps - Finally, the convention in Go is to use MixedCaps or mixedCaps rather - than underscores to write multiword names. +Finally, the convention in Go is to use MixedCaps or mixedCaps rather than +underscores to write multiword names. Semicolons - Like C, Go's formal grammar uses semicolons to terminate statements, - but unlike in C, those semicolons do not appear in the source. Instead - the lexer uses a simple rule to insert semicolons automatically as it - scans, so the input text is mostly free of them. +Like C, Go's formal grammar uses semicolons to terminate statements, but unlike +in C, those semicolons do not appear in the source. Instead the lexer uses a +simple rule to insert semicolons automatically as it scans, so the input text +is mostly free of them. + +The rule is this. If the last token before a newline is an identifier (which +includes words like int and float64), a basic literal such as a number or +string constant, or one of the tokens - The rule is this. If the last token before a newline is an identifier - (which includes words like int and float64), a basic literal such as a - number or string constant, or one of the tokens break continue fallthrough return ++ -- ) } - the lexer always inserts a semicolon after the token. This could be - summarized as, “if the newline comes after a token that could end a - statement, insert a semicolon”. +the lexer always inserts a semicolon after the token. This could be summarized +as, “if the newline comes after a token that could end a statement, insert a +semicolon”. + +A semicolon can also be omitted immediately before a closing brace, so a +statement such as - A semicolon can also be omitted immediately before a closing brace, so - a statement such as go func() { for { dst <- <-src } }() - needs no semicolons. Idiomatic Go programs have semicolons only in - places such as for loop clauses, to separate the initializer, - condition, and continuation elements. They are also necessary to - separate multiple statements on a line, should you write code that way. +needs no semicolons. Idiomatic Go programs have semicolons only in places such +as for loop clauses, to separate the initializer, condition, and continuation +elements. They are also necessary to separate multiple statements on a line, +should you write code that way. + +One consequence of the semicolon insertion rules is that you cannot put the +opening brace of a control structure (if, for, switch, or select) on the next +line. If you do, a semicolon will be inserted before the brace, which could +cause unwanted effects. Write them like this - One consequence of the semicolon insertion rules is that you cannot put - the opening brace of a control structure (if, for, switch, or select) - on the next line. If you do, a semicolon will be inserted before the - brace, which could cause unwanted effects. Write them like this if i < f() { g() } - not like this +not like this + if i < f() // wrong! { // wrong! g() @@ -309,48 +323,51 @@ if i < f() // wrong! Control structures - The control structures of Go are related to those of C but differ in - important ways. There is no do or while loop, only a slightly - generalized for; switch is more flexible; if and switch accept an - optional initialization statement like that of for; break and continue - statements take an optional label to identify what to break or - continue; and there are new control structures including a type switch - and a multiway communications multiplexer, select. The syntax is also - slightly different: there are no parentheses and the bodies must always - be brace-delimited. +The control structures of Go are related to those of C but differ in important +ways. There is no do or while loop, only a slightly generalized for; switch is +more flexible; if and switch accept an optional initialization statement like +that of for; break and continue statements take an optional label to identify +what to break or continue; and there are new control structures including a +type switch and a multiway communications multiplexer, select. The syntax is +also slightly different: there are no parentheses and the bodies must always be +brace-delimited. - If +If + +In Go a simple if looks like this: - In Go a simple if looks like this: if x > 0 { return y } - Mandatory braces encourage writing simple if statements on multiple - lines. It's good style to do so anyway, especially when the body - contains a control statement such as a return or break. +Mandatory braces encourage writing simple if statements on multiple lines. It's +good style to do so anyway, especially when the body contains a control +statement such as a return or break. + +Since if and switch accept an initialization statement, it's common to see one +used to set up a local variable. - Since if and switch accept an initialization statement, it's common to - see one used to set up a local variable. if err := file.Chmod(0664); err != nil { log.Print(err) return err } - In the Go libraries, you'll find that when an if statement doesn't flow - into the next statement—that is, the body ends in break, continue, - goto, or return—the unnecessary else is omitted. +In the Go libraries, you'll find that when an if statement doesn't flow into +the next statement—that is, the body ends in break, continue, goto, or +return—the unnecessary else is omitted. + f, err := os.Open(name) if err != nil { return err } codeUsing(f) - This is an example of a common situation where code must guard against - a sequence of error conditions. The code reads well if the successful - flow of control runs down the page, eliminating error cases as they - arise. Since error cases tend to end in return statements, the - resulting code needs no else statements. +This is an example of a common situation where code must guard against a +sequence of error conditions. The code reads well if the successful flow of +control runs down the page, eliminating error cases as they arise. Since error +cases tend to end in return statements, the resulting code needs no else +statements. + f, err := os.Open(name) if err != nil { return err @@ -362,46 +379,46 @@ if err != nil { } codeUsing(f, d) - Redeclaration and reassignment +Redeclaration and reassignment + +An aside: The last example in the previous section demonstrates a detail of how +the := short declaration form works. The declaration that calls os.Open reads, - An aside: The last example in the previous section demonstrates a - detail of how the := short declaration form works. The declaration that - calls os.Open reads, f, err := os.Open(name) - This statement declares two variables, f and err. A few lines later, - the call to f.Stat reads, +This statement declares two variables, f and err. A few lines later, the call +to f.Stat reads, + d, err := f.Stat() - which looks as if it declares d and err. Notice, though, that err - appears in both statements. This duplication is legal: err is declared - by the first statement, but only re-assigned in the second. This means - that the call to f.Stat uses the existing err variable declared above, - and just gives it a new value. +which looks as if it declares d and err. Notice, though, that err appears in +both statements. This duplication is legal: err is declared by the first +statement, but only re-assigned in the second. This means that the call to +f.Stat uses the existing err variable declared above, and just gives it a new +value. - In a := declaration a variable v may appear even if it has already been - declared, provided: - * this declaration is in the same scope as the existing declaration - of v (if v is already declared in an outer scope, the declaration - will create a new variable §), - * the corresponding value in the initialization is assignable to v, - and - * there is at least one other variable that is created by the - declaration. +In a := declaration a variable v may appear even if it has already been +declared, provided: - This unusual property is pure pragmatism, making it easy to use a - single err value, for example, in a long if-else chain. You'll see it - used often. + • this declaration is in the same scope as the existing declaration of v (if + v is already declared in an outer scope, the declaration will create a new + variable §), + • the corresponding value in the initialization is assignable to v, and + • there is at least one other variable that is created by the declaration. - § It's worth noting here that in Go the scope of function parameters - and return values is the same as the function body, even though they - appear lexically outside the braces that enclose the body. +This unusual property is pure pragmatism, making it easy to use a single err +value, for example, in a long if-else chain. You'll see it used often. - For +§ It's worth noting here that in Go the scope of function parameters and return +values is the same as the function body, even though they appear lexically +outside the braces that enclose the body. + +For + +The Go for loop is similar to—but not the same as—C's. It unifies for and while +and there is no do-while. There are three forms, only one of which has +semicolons. - The Go for loop is similar to—but not the same as—C's. It unifies for - and while and there is no do-while. There are three forms, only one of - which has semicolons. // Like a C for for init; condition; post { } @@ -411,67 +428,73 @@ for condition { } // Like a C for(;;) for { } - Short declarations make it easy to declare the index variable right in - the loop. +Short declarations make it easy to declare the index variable right in the +loop. + sum := 0 for i := 0; i < 10; i++ { sum += i } - If you're looping over an array, slice, string, or map, or reading from - a channel, a range clause can manage the loop. +If you're looping over an array, slice, string, or map, or reading from a +channel, a range clause can manage the loop. + for key, value := range oldMap { newMap[key] = value } - If you only need the first item in the range (the key or index), drop - the second: +If you only need the first item in the range (the key or index), drop the +second: + for key := range m { if key.expired() { delete(m, key) } } - If you only need the second item in the range (the value), use the - blank identifier, an underscore, to discard the first: +If you only need the second item in the range (the value), use the blank +identifier, an underscore, to discard the first: + sum := 0 for _, value := range array { sum += value } - The blank identifier has many uses, as described in [64]a later - section. +The blank identifier has many uses, as described in [64]a later section. + +For strings, the range does more work for you, breaking out individual Unicode +code points by parsing the UTF-8. Erroneous encodings consume one byte and +produce the replacement rune U+FFFD. (The name (with associated builtin type) +rune is Go terminology for a single Unicode code point. See [65]the language +specification for details.) The loop - For strings, the range does more work for you, breaking out individual - Unicode code points by parsing the UTF-8. Erroneous encodings consume - one byte and produce the replacement rune U+FFFD. (The name (with - associated builtin type) rune is Go terminology for a single Unicode - code point. See [65]the language specification for details.) The loop for pos, char := range "日本\x80語" { // \x80 is an illegal UTF-8 encoding fmt.Printf("character %#U starts at byte position %d\n", char, pos) } - prints +prints + character U+65E5 '日' starts at byte position 0 character U+672C '本' starts at byte position 3 character U+FFFD '�' starts at byte position 6 character U+8A9E '語' starts at byte position 7 - Finally, Go has no comma operator and ++ and -- are statements not - expressions. Thus if you want to run multiple variables in a for you - should use parallel assignment (although that precludes ++ and --). +Finally, Go has no comma operator and ++ and -- are statements not expressions. +Thus if you want to run multiple variables in a for you should use parallel +assignment (although that precludes ++ and --). + // Reverse a for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 { a[i], a[j] = a[j], a[i] } - Switch +Switch + +Go's switch is more general than C's. The expressions need not be constants or +even integers, the cases are evaluated top to bottom until a match is found, +and if the switch has no expression it switches on true. It's therefore +possible—and idiomatic—to write an if-else-if-else chain as a switch. - Go's switch is more general than C's. The expressions need not be - constants or even integers, the cases are evaluated top to bottom until - a match is found, and if the switch has no expression it switches on - true. It's therefore possible—and idiomatic—to write an if-else-if-else - chain as a switch. func unhex(c byte) byte { switch { case '0' <= c && c <= '9': @@ -484,8 +507,9 @@ func unhex(c byte) byte { return 0 } - There is no automatic fall through, but cases can be presented in - comma-separated lists. +There is no automatic fall through, but cases can be presented in +comma-separated lists. + func shouldEscape(c byte) bool { switch c { case ' ', '?', '&', '=', '#', '+', '%': @@ -494,11 +518,12 @@ func shouldEscape(c byte) bool { return false } - Although they are not nearly as common in Go as some other C-like - languages, break statements can be used to terminate a switch early. - Sometimes, though, it's necessary to break out of a surrounding loop, - not the switch, and in Go that can be accomplished by putting a label - on the loop and "breaking" to that label. This example shows both uses. +Although they are not nearly as common in Go as some other C-like languages, +break statements can be used to terminate a switch early. Sometimes, though, +it's necessary to break out of a surrounding loop, not the switch, and in Go +that can be accomplished by putting a label on the loop and "breaking" to that +label. This example shows both uses. + Loop: for n := 0; n < len(src); n += size { switch { @@ -522,11 +547,12 @@ Loop: } } - Of course, the continue statement also accepts an optional label but it - applies only to loops. +Of course, the continue statement also accepts an optional label but it applies +only to loops. + +To close this section, here's a comparison routine for byte slices that uses +two switch statements: - To close this section, here's a comparison routine for byte slices that - uses two switch statements: // Compare returns an integer comparing the two byte slices, // lexicographically. // The result will be 0 if a == b, -1 if a < b, and +1 if a > b @@ -548,15 +574,15 @@ func Compare(a, b []byte) int { return 0 } - Type switch +Type switch + +A switch can also be used to discover the dynamic type of an interface +variable. Such a type switch uses the syntax of a type assertion with the +keyword type inside the parentheses. If the switch declares a variable in the +expression, the variable will have the corresponding type in each clause. It's +also idiomatic to reuse the name in such cases, in effect declaring a new +variable with the same name but a different type in each case. - A switch can also be used to discover the dynamic type of an interface - variable. Such a type switch uses the syntax of a type assertion with - the keyword type inside the parentheses. If the switch declares a - variable in the expression, the variable will have the corresponding - type in each clause. It's also idiomatic to reuse the name in such - cases, in effect declaring a new variable with the same name but a - different type in each case. var t interface{} t = functionOfSomeType() switch t := t.(type) { @@ -574,28 +600,29 @@ case *int: Functions - Multiple return values +Multiple return values - One of Go's unusual features is that functions and methods can return - multiple values. This form can be used to improve on a couple of clumsy - idioms in C programs: in-band error returns such as -1 for EOF and - modifying an argument passed by address. +One of Go's unusual features is that functions and methods can return multiple +values. This form can be used to improve on a couple of clumsy idioms in C +programs: in-band error returns such as -1 for EOF and modifying an argument +passed by address. + +In C, a write error is signaled by a negative count with the error code +secreted away in a volatile location. In Go, Write can return a count and an +error: “Yes, you wrote some bytes but not all of them because you filled the +device”. The signature of the Write method on files from package os is: - In C, a write error is signaled by a negative count with the error code - secreted away in a volatile location. In Go, Write can return a count - and an error: “Yes, you wrote some bytes but not all of them because - you filled the device”. The signature of the Write method on files from - package os is: func (file *File) Write(b []byte) (n int, err error) - and as the documentation says, it returns the number of bytes written - and a non-nil error when n != len(b). This is a common style; see the - section on error handling for more examples. +and as the documentation says, it returns the number of bytes written and a +non-nil error when n != len(b). This is a common style; see the section on +error handling for more examples. + +A similar approach obviates the need to pass a pointer to a return value to +simulate a reference parameter. Here's a simple-minded function to grab a +number from a position in a byte slice, returning the number and the next +position. - A similar approach obviates the need to pass a pointer to a return - value to simulate a reference parameter. Here's a simple-minded - function to grab a number from a position in a byte slice, returning - the number and the next position. func nextInt(b []byte, i int) (int, int) { for ; i < len(b) && !isDigit(b[i]); i++ { } @@ -606,29 +633,31 @@ func nextInt(b []byte, i int) (int, int) { return x, i } - You could use it to scan the numbers in an input slice b like this: +You could use it to scan the numbers in an input slice b like this: + for i := 0; i < len(b); { x, i = nextInt(b, i) fmt.Println(x) } - Named result parameters +Named result parameters - The return or result "parameters" of a Go function can be given names - and used as regular variables, just like the incoming parameters. When - named, they are initialized to the zero values for their types when the - function begins; if the function executes a return statement with no - arguments, the current values of the result parameters are used as the - returned values. +The return or result "parameters" of a Go function can be given names and used +as regular variables, just like the incoming parameters. When named, they are +initialized to the zero values for their types when the function begins; if the +function executes a return statement with no arguments, the current values of +the result parameters are used as the returned values. + +The names are not mandatory but they can make code shorter and clearer: they're +documentation. If we name the results of nextInt it becomes obvious which +returned int is which. - The names are not mandatory but they can make code shorter and clearer: - they're documentation. If we name the results of nextInt it becomes - obvious which returned int is which. func nextInt(b []byte, pos int) (value, nextPos int) { - Because named results are initialized and tied to an unadorned return, - they can simplify as well as clarify. Here's a version of io.ReadFull - that uses them well: +Because named results are initialized and tied to an unadorned return, they can +simplify as well as clarify. Here's a version of io.ReadFull that uses them +well: + func ReadFull(r Reader, buf []byte) (n int, err error) { for len(buf) > 0 && err == nil { var nr int @@ -639,14 +668,14 @@ func ReadFull(r Reader, buf []byte) (n int, err error) { return } - Defer +Defer + +Go's defer statement schedules a function call (the deferred function) to be +run immediately before the function executing the defer returns. It's an +unusual but effective way to deal with situations such as resources that must +be released regardless of which path a function takes to return. The canonical +examples are unlocking a mutex or closing a file. - Go's defer statement schedules a function call (the deferred function) - to be run immediately before the function executing the defer returns. - It's an unusual but effective way to deal with situations such as - resources that must be released regardless of which path a function - takes to return. The canonical examples are unlocking a mutex or - closing a file. // Contents returns the file's contents as a string. func Contents(filename string) (string, error) { f, err := os.Open(filename) @@ -670,26 +699,27 @@ func Contents(filename string) (string, error) { return string(result), nil // f will be closed if we return here. } - Deferring a call to a function such as Close has two advantages. First, - it guarantees that you will never forget to close the file, a mistake - that's easy to make if you later edit the function to add a new return - path. Second, it means that the close sits near the open, which is much - clearer than placing it at the end of the function. +Deferring a call to a function such as Close has two advantages. First, it +guarantees that you will never forget to close the file, a mistake that's easy +to make if you later edit the function to add a new return path. Second, it +means that the close sits near the open, which is much clearer than placing it +at the end of the function. + +The arguments to the deferred function (which include the receiver if the +function is a method) are evaluated when the defer executes, not when the call +executes. Besides avoiding worries about variables changing values as the +function executes, this means that a single deferred call site can defer +multiple function executions. Here's a silly example. - The arguments to the deferred function (which include the receiver if - the function is a method) are evaluated when the defer executes, not - when the call executes. Besides avoiding worries about variables - changing values as the function executes, this means that a single - deferred call site can defer multiple function executions. Here's a - silly example. for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } - Deferred functions are executed in LIFO order, so this code will cause - 4 3 2 1 0 to be printed when the function returns. A more plausible - example is a simple way to trace function execution through the - program. We could write a couple of simple tracing routines like this: +Deferred functions are executed in LIFO order, so this code will cause 4 3 2 1 +0 to be printed when the function returns. A more plausible example is a simple +way to trace function execution through the program. We could write a couple of +simple tracing routines like this: + func trace(s string) { fmt.Println("entering:", s) } func untrace(s string) { fmt.Println("leaving:", s) } @@ -700,9 +730,10 @@ func a() { // do something.... } - We can do better by exploiting the fact that arguments to deferred - functions are evaluated when the defer executes. The tracing routine - can set up the argument to the untracing routine. This example: +We can do better by exploiting the fact that arguments to deferred functions +are evaluated when the defer executes. The tracing routine can set up the +argument to the untracing routine. This example: + func trace(s string) string { fmt.Println("entering:", s) return s @@ -727,7 +758,8 @@ func main() { b() } - prints +prints + entering: b in b entering: a @@ -735,51 +767,54 @@ in a leaving: a leaving: b - For programmers accustomed to block-level resource management from - other languages, defer may seem peculiar, but its most interesting and - powerful applications come precisely from the fact that it's not - block-based but function-based. In the section on panic and recover - we'll see another example of its possibilities. +For programmers accustomed to block-level resource management from other +languages, defer may seem peculiar, but its most interesting and powerful +applications come precisely from the fact that it's not block-based but +function-based. In the section on panic and recover we'll see another example +of its possibilities. Data - Allocation with new +Allocation with new - Go has two allocation primitives, the built-in functions new and make. - They do different things and apply to different types, which can be - confusing, but the rules are simple. Let's talk about new first. It's a - built-in function that allocates memory, but unlike its namesakes in - some other languages it does not initialize the memory, it only zeros - it. That is, new(T) allocates zeroed storage for a new item of type T - and returns its address, a value of type *T. In Go terminology, it - returns a pointer to a newly allocated zero value of type T. +Go has two allocation primitives, the built-in functions new and make. They do +different things and apply to different types, which can be confusing, but the +rules are simple. Let's talk about new first. It's a built-in function that +allocates memory, but unlike its namesakes in some other languages it does not +initialize the memory, it only zeros it. That is, new(T) allocates zeroed +storage for a new item of type T and returns its address, a value of type *T. +In Go terminology, it returns a pointer to a newly allocated zero value of type +T. - Since the memory returned by new is zeroed, it's helpful to arrange - when designing your data structures that the zero value of each type - can be used without further initialization. This means a user of the - data structure can create one with new and get right to work. For - example, the documentation for bytes.Buffer states that "the zero value - for Buffer is an empty buffer ready to use." Similarly, sync.Mutex does - not have an explicit constructor or Init method. Instead, the zero - value for a sync.Mutex is defined to be an unlocked mutex. +Since the memory returned by new is zeroed, it's helpful to arrange when +designing your data structures that the zero value of each type can be used +without further initialization. This means a user of the data structure can +create one with new and get right to work. For example, the documentation for +bytes.Buffer states that "the zero value for Buffer is an empty buffer ready to +use." Similarly, sync.Mutex does not have an explicit constructor or Init +method. Instead, the zero value for a sync.Mutex is defined to be an unlocked +mutex. + +The zero-value-is-useful property works transitively. Consider this type +declaration. - The zero-value-is-useful property works transitively. Consider this - type declaration. type SyncedBuffer struct { lock sync.Mutex buffer bytes.Buffer } - Values of type SyncedBuffer are also ready to use immediately upon - allocation or just declaration. In the next snippet, both p and v will - work correctly without further arrangement. +Values of type SyncedBuffer are also ready to use immediately upon allocation +or just declaration. In the next snippet, both p and v will work correctly +without further arrangement. + p := new(SyncedBuffer) // type *SyncedBuffer var v SyncedBuffer // type SyncedBuffer - Constructors and composite literals +Constructors and composite literals + +Sometimes the zero value isn't good enough and an initializing constructor is +necessary, as in this example derived from package os. - Sometimes the zero value isn't good enough and an initializing - constructor is necessary, as in this example derived from package os. func NewFile(fd int, name string) *File { if fd < 0 { return nil @@ -792,9 +827,10 @@ func NewFile(fd int, name string) *File { return f } - There's a lot of boilerplate in there. We can simplify it using a - composite literal, which is an expression that creates a new instance - each time it is evaluated. +There's a lot of boilerplate in there. We can simplify it using a composite +literal, which is an expression that creates a new instance each time it is +evaluated. + func NewFile(fd int, name string) *File { if fd < 0 { return nil @@ -803,57 +839,57 @@ func NewFile(fd int, name string) *File { return &f } - Note that, unlike in C, it's perfectly OK to return the address of a - local variable; the storage associated with the variable survives after - the function returns. In fact, taking the address of a composite - literal allocates a fresh instance each time it is evaluated, so we can - combine these last two lines. +Note that, unlike in C, it's perfectly OK to return the address of a local +variable; the storage associated with the variable survives after the function +returns. In fact, taking the address of a composite literal allocates a fresh +instance each time it is evaluated, so we can combine these last two lines. + return &File{fd, name, nil, 0} - The fields of a composite literal are laid out in order and must all be - present. However, by labeling the elements explicitly as field:value - pairs, the initializers can appear in any order, with the missing ones - left as their respective zero values. Thus we could say +The fields of a composite literal are laid out in order and must all be +present. However, by labeling the elements explicitly as field:value pairs, the +initializers can appear in any order, with the missing ones left as their +respective zero values. Thus we could say + return &File{fd: fd, name: name} - As a limiting case, if a composite literal contains no fields at all, - it creates a zero value for the type. The expressions new(File) and - &File{} are equivalent. +As a limiting case, if a composite literal contains no fields at all, it +creates a zero value for the type. The expressions new(File) and &File{} are +equivalent. + +Composite literals can also be created for arrays, slices, and maps, with the +field labels being indices or map keys as appropriate. In these examples, the +initializations work regardless of the values of Enone, Eio, and Einval, as +long as they are distinct. - Composite literals can also be created for arrays, slices, and maps, - with the field labels being indices or map keys as appropriate. In - these examples, the initializations work regardless of the values of - Enone, Eio, and Einval, as long as they are distinct. a := [...]string {Enone: "no error", Eio: "Eio", Einval: "invalid argument"} s := []string {Enone: "no error", Eio: "Eio", Einval: "invalid argument"} m := map[int]string{Enone: "no error", Eio: "Eio", Einval: "invalid argument"} - Allocation with make +Allocation with make + +Back to allocation. The built-in function make(T, args) serves a purpose +different from new(T). It creates slices, maps, and channels only, and it +returns an initialized (not zeroed) value of type T (not *T). The reason for +the distinction is that these three types represent, under the covers, +references to data structures that must be initialized before use. A slice, for +example, is a three-item descriptor containing a pointer to the data (inside an +array), the length, and the capacity, and until those items are initialized, +the slice is nil. For slices, maps, and channels, make initializes the internal +data structure and prepares the value for use. For instance, - Back to allocation. The built-in function make(T, args) serves a - purpose different from new(T). It creates slices, maps, and channels - only, and it returns an initialized (not zeroed) value of type T (not - *T). The reason for the distinction is that these three types - represent, under the covers, references to data structures that must be - initialized before use. A slice, for example, is a three-item - descriptor containing a pointer to the data (inside an array), the - length, and the capacity, and until those items are initialized, the - slice is nil. For slices, maps, and channels, make initializes the - internal data structure and prepares the value for use. For instance, make([]int, 10, 100) - allocates an array of 100 ints and then creates a slice structure with - length 10 and a capacity of 100 pointing at the first 10 elements of - the array. (When making a slice, the capacity can be omitted; see the - section on slices for more information.) In contrast, new([]int) - returns a pointer to a newly allocated, zeroed slice structure, that - is, a pointer to a nil slice value. +allocates an array of 100 ints and then creates a slice structure with length +10 and a capacity of 100 pointing at the first 10 elements of the array. (When +making a slice, the capacity can be omitted; see the section on slices for more +information.) In contrast, new([]int) returns a pointer to a newly allocated, +zeroed slice structure, that is, a pointer to a nil slice value. - These examples illustrate the difference between new and make. -var p *[]int = new([]int) // allocates slice structure; *p == nil; rarely -useful -var v []int = make([]int, 100) // the slice v now refers to a new array of 100 -ints +These examples illustrate the difference between new and make. + +var p *[]int = new([]int) // allocates slice structure; *p == nil; rarely useful +var v []int = make([]int, 100) // the slice v now refers to a new array of 100 ints // Unnecessarily complex: var p *[]int = new([]int) @@ -862,28 +898,28 @@ var p *[]int = new([]int) // Idiomatic: v := make([]int, 100) - Remember that make applies only to maps, slices and channels and does - not return a pointer. To obtain an explicit pointer allocate with new - or take the address of a variable explicitly. +Remember that make applies only to maps, slices and channels and does not +return a pointer. To obtain an explicit pointer allocate with new or take the +address of a variable explicitly. - Arrays +Arrays - Arrays are useful when planning the detailed layout of memory and - sometimes can help avoid allocation, but primarily they are a building - block for slices, the subject of the next section. To lay the - foundation for that topic, here are a few words about arrays. +Arrays are useful when planning the detailed layout of memory and sometimes can +help avoid allocation, but primarily they are a building block for slices, the +subject of the next section. To lay the foundation for that topic, here are a +few words about arrays. - There are major differences between the ways arrays work in Go and C. - In Go, - * Arrays are values. Assigning one array to another copies all the - elements. - * In particular, if you pass an array to a function, it will receive - a copy of the array, not a pointer to it. - * The size of an array is part of its type. The types [10]int and - [20]int are distinct. +There are major differences between the ways arrays work in Go and C. In Go, + + • Arrays are values. Assigning one array to another copies all the elements. + • In particular, if you pass an array to a function, it will receive a copy + of the array, not a pointer to it. + • The size of an array is part of its type. The types [10]int and [20]int are + distinct. + +The value property can be useful but also expensive; if you want C-like +behavior and efficiency, you can pass a pointer to the array. - The value property can be useful but also expensive; if you want C-like - behavior and efficiency, you can pass a pointer to the array. func Sum(a *[3]float64) (sum float64) { for _, v := range *a { sum += v @@ -894,33 +930,34 @@ func Sum(a *[3]float64) (sum float64) { array := [...]float64{7.0, 8.5, 9.1} x := Sum(&array) // Note the explicit address-of operator - But even this style isn't idiomatic Go. Use slices instead. +But even this style isn't idiomatic Go. Use slices instead. - Slices +Slices - Slices wrap arrays to give a more general, powerful, and convenient - interface to sequences of data. Except for items with explicit - dimension such as transformation matrices, most array programming in Go - is done with slices rather than simple arrays. +Slices wrap arrays to give a more general, powerful, and convenient interface +to sequences of data. Except for items with explicit dimension such as +transformation matrices, most array programming in Go is done with slices +rather than simple arrays. + +Slices hold references to an underlying array, and if you assign one slice to +another, both refer to the same array. If a function takes a slice argument, +changes it makes to the elements of the slice will be visible to the caller, +analogous to passing a pointer to the underlying array. A Read function can +therefore accept a slice argument rather than a pointer and a count; the length +within the slice sets an upper limit of how much data to read. Here is the +signature of the Read method of the File type in package os: - Slices hold references to an underlying array, and if you assign one - slice to another, both refer to the same array. If a function takes a - slice argument, changes it makes to the elements of the slice will be - visible to the caller, analogous to passing a pointer to the underlying - array. A Read function can therefore accept a slice argument rather - than a pointer and a count; the length within the slice sets an upper - limit of how much data to read. Here is the signature of the Read - method of the File type in package os: func (f *File) Read(buf []byte) (n int, err error) - The method returns the number of bytes read and an error value, if any. - To read into the first 32 bytes of a larger buffer buf, slice (here - used as a verb) the buffer. +The method returns the number of bytes read and an error value, if any. To read +into the first 32 bytes of a larger buffer buf, slice (here used as a verb) the +buffer. + n, err := f.Read(buf[0:32]) - Such slicing is common and efficient. In fact, leaving efficiency aside - for the moment, the following snippet would also read the first 32 - bytes of the buffer. +Such slicing is common and efficient. In fact, leaving efficiency aside for the +moment, the following snippet would also read the first 32 bytes of the buffer. + var n int var err error for i := 0; i < 32; i++ { @@ -932,14 +969,14 @@ func (f *File) Read(buf []byte) (n int, err error) } } - The length of a slice may be changed as long as it still fits within - the limits of the underlying array; just assign it to a slice of - itself. The capacity of a slice, accessible by the built-in function - cap, reports the maximum length the slice may assume. Here is a - function to append data to a slice. If the data exceeds the capacity, - the slice is reallocated. The resulting slice is returned. The function - uses the fact that len and cap are legal when applied to the nil slice, - and return 0. +The length of a slice may be changed as long as it still fits within the limits +of the underlying array; just assign it to a slice of itself. The capacity of a +slice, accessible by the built-in function cap, reports the maximum length the +slice may assume. Here is a function to append data to a slice. If the data +exceeds the capacity, the slice is reallocated. The resulting slice is +returned. The function uses the fact that len and cap are legal when applied to +the nil slice, and return 0. + func Append(slice, data []byte) []byte { l := len(slice) if l + len(data) > cap(slice) { // reallocate @@ -954,40 +991,42 @@ func Append(slice, data []byte) []byte { return slice } - We must return the slice afterwards because, although Append can modify - the elements of slice, the slice itself (the run-time data structure - holding the pointer, length, and capacity) is passed by value. +We must return the slice afterwards because, although Append can modify the +elements of slice, the slice itself (the run-time data structure holding the +pointer, length, and capacity) is passed by value. - The idea of appending to a slice is so useful it's captured by the - append built-in function. To understand that function's design, though, - we need a little more information, so we'll return to it later. +The idea of appending to a slice is so useful it's captured by the append +built-in function. To understand that function's design, though, we need a +little more information, so we'll return to it later. - Two-dimensional slices +Two-dimensional slices + +Go's arrays and slices are one-dimensional. To create the equivalent of a 2D +array or slice, it is necessary to define an array-of-arrays or +slice-of-slices, like this: - Go's arrays and slices are one-dimensional. To create the equivalent of - a 2D array or slice, it is necessary to define an array-of-arrays or - slice-of-slices, like this: type Transform [3][3]float64 // A 3x3 array, really an array of arrays. type LinesOfText [][]byte // A slice of byte slices. - Because slices are variable-length, it is possible to have each inner - slice be a different length. That can be a common situation, as in our - LinesOfText example: each line has an independent length. +Because slices are variable-length, it is possible to have each inner slice be +a different length. That can be a common situation, as in our LinesOfText +example: each line has an independent length. + text := LinesOfText{ []byte("Now is the time"), []byte("for all good gophers"), []byte("to bring some fun to the party."), } - Sometimes it's necessary to allocate a 2D slice, a situation that can - arise when processing scan lines of pixels, for instance. There are two - ways to achieve this. One is to allocate each slice independently; the - other is to allocate a single array and point the individual slices - into it. Which to use depends on your application. If the slices might - grow or shrink, they should be allocated independently to avoid - overwriting the next line; if not, it can be more efficient to - construct the object with a single allocation. For reference, here are - sketches of the two methods. First, a line at a time: +Sometimes it's necessary to allocate a 2D slice, a situation that can arise +when processing scan lines of pixels, for instance. There are two ways to +achieve this. One is to allocate each slice independently; the other is to +allocate a single array and point the individual slices into it. Which to use +depends on your application. If the slices might grow or shrink, they should be +allocated independently to avoid overwriting the next line; if not, it can be +more efficient to construct the object with a single allocation. For reference, +here are sketches of the two methods. First, a line at a time: + // Allocate the top-level slice. picture := make([][]uint8, YSize) // One row per unit of y. // Loop over the rows, allocating the slice for each row. @@ -995,34 +1034,33 @@ for i := range picture { picture[i] = make([]uint8, XSize) } - And now as one allocation, sliced into lines: +And now as one allocation, sliced into lines: + // Allocate the top-level slice, the same as before. picture := make([][]uint8, YSize) // One row per unit of y. // Allocate one large slice to hold all the pixels. -pixels := make([]uint8, XSize*YSize) // Has type []uint8 even though picture is -[][]uint8. -// Loop over the rows, slicing each row from the front of the remaining pixels s -lice. +pixels := make([]uint8, XSize*YSize) // Has type []uint8 even though picture is [][]uint8. +// Loop over the rows, slicing each row from the front of the remaining pixels slice. for i := range picture { picture[i], pixels = pixels[:XSize], pixels[XSize:] } - Maps +Maps - Maps are a convenient and powerful built-in data structure that - associate values of one type (the key) with values of another type (the - element or value). The key can be of any type for which the equality - operator is defined, such as integers, floating point and complex - numbers, strings, pointers, interfaces (as long as the dynamic type - supports equality), structs and arrays. Slices cannot be used as map - keys, because equality is not defined on them. Like slices, maps hold - references to an underlying data structure. If you pass a map to a - function that changes the contents of the map, the changes will be - visible in the caller. +Maps are a convenient and powerful built-in data structure that associate +values of one type (the key) with values of another type (the element or value +). The key can be of any type for which the equality operator is defined, such +as integers, floating point and complex numbers, strings, pointers, interfaces +(as long as the dynamic type supports equality), structs and arrays. Slices +cannot be used as map keys, because equality is not defined on them. Like +slices, maps hold references to an underlying data structure. If you pass a map +to a function that changes the contents of the map, the changes will be visible +in the caller. + +Maps can be constructed using the usual composite literal syntax with +colon-separated key-value pairs, so it's easy to build them during +initialization. - Maps can be constructed using the usual composite literal syntax with - colon-separated key-value pairs, so it's easy to build them during - initialization. var timeZone = map[string]int{ "UTC": 0*60*60, "EST": -5*60*60, @@ -1031,17 +1069,17 @@ var timeZone = map[string]int{ "PST": -8*60*60, } - Assigning and fetching map values looks syntactically just like doing - the same for arrays and slices except that the index doesn't need to be - an integer. +Assigning and fetching map values looks syntactically just like doing the same +for arrays and slices except that the index doesn't need to be an integer. + offset := timeZone["EST"] - An attempt to fetch a map value with a key that is not present in the - map will return the zero value for the type of the entries in the map. - For instance, if the map contains integers, looking up a non-existent - key will return 0. A set can be implemented as a map with value type - bool. Set the map entry to true to put the value in the set, and then - test it by simple indexing. +An attempt to fetch a map value with a key that is not present in the map will +return the zero value for the type of the entries in the map. For instance, if +the map contains integers, looking up a non-existent key will return 0. A set +can be implemented as a map with value type bool. Set the map entry to true to +put the value in the set, and then test it by simple indexing. + attended := map[string]bool{ "Ann": true, "Joe": true, @@ -1052,17 +1090,19 @@ if attended[person] { // will be false if person is not in the map fmt.Println(person, "was at the meeting") } - Sometimes you need to distinguish a missing entry from a zero value. Is - there an entry for "UTC" or is that 0 because it's not in the map at - all? You can discriminate with a form of multiple assignment. +Sometimes you need to distinguish a missing entry from a zero value. Is there +an entry for "UTC" or is that 0 because it's not in the map at all? You can +discriminate with a form of multiple assignment. + var seconds int var ok bool seconds, ok = timeZone[tz] - For obvious reasons this is called the “comma ok” idiom. In this - example, if tz is present, seconds will be set appropriately and ok - will be true; if not, seconds will be set to zero and ok will be false. - Here's a function that puts it together with a nice error report: +For obvious reasons this is called the “comma ok” idiom. In this example, if tz +is present, seconds will be set appropriately and ok will be true; if not, +seconds will be set to zero and ok will be false. Here's a function that puts +it together with a nice error report: + func offset(tz string) int { if seconds, ok := timeZone[tz]; ok { return seconds @@ -1071,64 +1111,72 @@ func offset(tz string) int { return 0 } - To test for presence in the map without worrying about the actual - value, you can use the [66]blank identifier (_) in place of the usual - variable for the value. +To test for presence in the map without worrying about the actual value, you +can use the [66]blank identifier (_) in place of the usual variable for the +value. + _, present := timeZone[tz] - To delete a map entry, use the delete built-in function, whose - arguments are the map and the key to be deleted. It's safe to do this - even if the key is already absent from the map. +To delete a map entry, use the delete built-in function, whose arguments are +the map and the key to be deleted. It's safe to do this even if the key is +already absent from the map. + delete(timeZone, "PDT") // Now on Standard Time - Printing +Printing - Formatted printing in Go uses a style similar to C's printf family but - is richer and more general. The functions live in the fmt package and - have capitalized names: fmt.Printf, fmt.Fprintf, fmt.Sprintf and so on. - The string functions (Sprintf etc.) return a string rather than filling - in a provided buffer. +Formatted printing in Go uses a style similar to C's printf family but is +richer and more general. The functions live in the fmt package and have +capitalized names: fmt.Printf, fmt.Fprintf, fmt.Sprintf and so on. The string +functions (Sprintf etc.) return a string rather than filling in a provided +buffer. + +You don't need to provide a format string. For each of Printf, Fprintf and +Sprintf there is another pair of functions, for instance Print and Println. +These functions do not take a format string but instead generate a default +format for each argument. The Println versions also insert a blank between +arguments and append a newline to the output while the Print versions add +blanks only if the operand on neither side is a string. In this example each +line produces the same output. - You don't need to provide a format string. For each of Printf, Fprintf - and Sprintf there is another pair of functions, for instance Print and - Println. These functions do not take a format string but instead - generate a default format for each argument. The Println versions also - insert a blank between arguments and append a newline to the output - while the Print versions add blanks only if the operand on neither side - is a string. In this example each line produces the same output. fmt.Printf("Hello %d\n", 23) fmt.Fprint(os.Stdout, "Hello ", 23, "\n") fmt.Println("Hello", 23) fmt.Println(fmt.Sprint("Hello ", 23)) - The formatted print functions fmt.Fprint and friends take as a first - argument any object that implements the io.Writer interface; the - variables os.Stdout and os.Stderr are familiar instances. +The formatted print functions fmt.Fprint and friends take as a first argument +any object that implements the io.Writer interface; the variables os.Stdout and +os.Stderr are familiar instances. + +Here things start to diverge from C. First, the numeric formats such as %d do +not take flags for signedness or size; instead, the printing routines use the +type of the argument to decide these properties. - Here things start to diverge from C. First, the numeric formats such as - %d do not take flags for signedness or size; instead, the printing - routines use the type of the argument to decide these properties. var x uint64 = 1<<64 - 1 fmt.Printf("%d %x; %d %x\n", x, x, int64(x), int64(x)) - prints +prints + 18446744073709551615 ffffffffffffffff; -1 -1 - If you just want the default conversion, such as decimal for integers, - you can use the catchall format %v (for “value”); the result is exactly - what Print and Println would produce. Moreover, that format can print - any value, even arrays, slices, structs, and maps. Here is a print - statement for the time zone map defined in the previous section. +If you just want the default conversion, such as decimal for integers, you can +use the catchall format %v (for “value”); the result is exactly what Print and +Println would produce. Moreover, that format can print any value, even arrays, +slices, structs, and maps. Here is a print statement for the time zone map +defined in the previous section. + fmt.Printf("%v\n", timeZone) // or just fmt.Println(timeZone) - which gives output: +which gives output: + map[CST:-21600 EST:-18000 MST:-25200 PST:-28800 UTC:0] - For maps, Printf and friends sort the output lexicographically by key. +For maps, Printf and friends sort the output lexicographically by key. + +When printing a struct, the modified format %+v annotates the fields of the +structure with their names, and for any value the alternate format %#v prints +the value in full Go syntax. - When printing a struct, the modified format %+v annotates the fields of - the structure with their names, and for any value the alternate format - %#v prints the value in full Go syntax. type T struct { a int b float64 @@ -1140,92 +1188,100 @@ fmt.Printf("%+v\n", t) fmt.Printf("%#v\n", t) fmt.Printf("%#v\n", timeZone) - prints +prints + &{7 -2.35 abc def} &{a:7 b:-2.35 c:abc def} &main.T{a:7, b:-2.35, c:"abc\tdef"} map[string]int{"CST":-21600, "EST":-18000, "MST":-25200, "PST":-28800, "UTC":0} - (Note the ampersands.) That quoted string format is also available - through %q when applied to a value of type string or []byte. The - alternate format %#q will use backquotes instead if possible. (The %q - format also applies to integers and runes, producing a single-quoted - rune constant.) Also, %x works on strings, byte arrays and byte slices - as well as on integers, generating a long hexadecimal string, and with - a space in the format (% x) it puts spaces between the bytes. +(Note the ampersands.) That quoted string format is also available through %q +when applied to a value of type string or []byte. The alternate format %#q will +use backquotes instead if possible. (The %q format also applies to integers and +runes, producing a single-quoted rune constant.) Also, %x works on strings, +byte arrays and byte slices as well as on integers, generating a long +hexadecimal string, and with a space in the format (% x) it puts spaces between +the bytes. + +Another handy format is %T, which prints the type of a value. - Another handy format is %T, which prints the type of a value. fmt.Printf("%T\n", timeZone) - prints +prints + map[string]int - If you want to control the default format for a custom type, all that's - required is to define a method with the signature String() string on - the type. For our simple type T, that might look like this. +If you want to control the default format for a custom type, all that's +required is to define a method with the signature String() string on the type. +For our simple type T, that might look like this. + func (t *T) String() string { return fmt.Sprintf("%d/%g/%q", t.a, t.b, t.c) } fmt.Printf("%v\n", t) - to print in the format +to print in the format + 7/-2.35/"abc\tdef" - (If you need to print values of type T as well as pointers to T, the - receiver for String must be of value type; this example used a pointer - because that's more efficient and idiomatic for struct types. See the - section below on [67]pointers vs. value receivers for more - information.) +(If you need to print values of type T as well as pointers to T, the receiver +for String must be of value type; this example used a pointer because that's +more efficient and idiomatic for struct types. See the section below on [67] +pointers vs. value receivers for more information.) + +Our String method is able to call Sprintf because the print routines are fully +reentrant and can be wrapped this way. There is one important detail to +understand about this approach, however: don't construct a String method by +calling Sprintf in a way that will recur into your String method indefinitely. +This can happen if the Sprintf call attempts to print the receiver directly as +a string, which in turn will invoke the method again. It's a common and easy +mistake to make, as this example shows. - Our String method is able to call Sprintf because the print routines - are fully reentrant and can be wrapped this way. There is one important - detail to understand about this approach, however: don't construct a - String method by calling Sprintf in a way that will recur into your - String method indefinitely. This can happen if the Sprintf call - attempts to print the receiver directly as a string, which in turn will - invoke the method again. It's a common and easy mistake to make, as - this example shows. type MyString string func (m MyString) String() string { return fmt.Sprintf("MyString=%s", m) // Error: will recur forever. } - It's also easy to fix: convert the argument to the basic string type, - which does not have the method. +It's also easy to fix: convert the argument to the basic string type, which +does not have the method. + type MyString string func (m MyString) String() string { return fmt.Sprintf("MyString=%s", string(m)) // OK: note conversion. } - In the [68]initialization section we'll see another technique that - avoids this recursion. +In the [68]initialization section we'll see another technique that avoids this +recursion. + +Another printing technique is to pass a print routine's arguments directly to +another such routine. The signature of Printf uses the type ...interface{} for +its final argument to specify that an arbitrary number of parameters (of +arbitrary type) can appear after the format. - Another printing technique is to pass a print routine's arguments - directly to another such routine. The signature of Printf uses the type - ...interface{} for its final argument to specify that an arbitrary - number of parameters (of arbitrary type) can appear after the format. func Printf(format string, v ...interface{}) (n int, err error) { - Within the function Printf, v acts like a variable of type - []interface{} but if it is passed to another variadic function, it acts - like a regular list of arguments. Here is the implementation of the - function log.Println we used above. It passes its arguments directly to - fmt.Sprintln for the actual formatting. +Within the function Printf, v acts like a variable of type []interface{} but if +it is passed to another variadic function, it acts like a regular list of +arguments. Here is the implementation of the function log.Println we used +above. It passes its arguments directly to fmt.Sprintln for the actual +formatting. + // Println prints to the standard logger in the manner of fmt.Println. func Println(v ...interface{}) { std.Output(2, fmt.Sprintln(v...)) // Output takes parameters (int, string) } - We write ... after v in the nested call to Sprintln to tell the - compiler to treat v as a list of arguments; otherwise it would just - pass v as a single slice argument. +We write ... after v in the nested call to Sprintln to tell the compiler to +treat v as a list of arguments; otherwise it would just pass v as a single +slice argument. - There's even more to printing than we've covered here. See the godoc - documentation for package fmt for the details. +There's even more to printing than we've covered here. See the godoc +documentation for package fmt for the details. + +By the way, a ... parameter can be of a specific type, for instance ...int for +a min function that chooses the least of a list of integers: - By the way, a ... parameter can be of a specific type, for instance - ...int for a min function that chooses the least of a list of integers: func Min(a ...int) int { min := int(^uint(0) >> 1) // largest int for _, i := range a { @@ -1236,60 +1292,60 @@ func Min(a ...int) int { return min } - Append +Append + +Now we have the missing piece we needed to explain the design of the append +built-in function. The signature of append is different from our custom Append +function above. Schematically, it's like this: - Now we have the missing piece we needed to explain the design of the - append built-in function. The signature of append is different from our - custom Append function above. Schematically, it's like this: func append(slice []T, elements ...T) []T - where T is a placeholder for any given type. You can't actually write a - function in Go where the type T is determined by the caller. That's why - append is built in: it needs support from the compiler. +where T is a placeholder for any given type. You can't actually write a +function in Go where the type T is determined by the caller. That's why append +is built in: it needs support from the compiler. + +What append does is append the elements to the end of the slice and return the +result. The result needs to be returned because, as with our hand-written +Append, the underlying array may change. This simple example - What append does is append the elements to the end of the slice and - return the result. The result needs to be returned because, as with our - hand-written Append, the underlying array may change. This simple - example x := []int{1,2,3} x = append(x, 4, 5, 6) fmt.Println(x) - prints [1 2 3 4 5 6]. So append works a little like Printf, collecting - an arbitrary number of arguments. +prints [1 2 3 4 5 6]. So append works a little like Printf, collecting an +arbitrary number of arguments. + +But what if we wanted to do what our Append does and append a slice to a slice? +Easy: use ... at the call site, just as we did in the call to Output above. +This snippet produces identical output to the one above. - But what if we wanted to do what our Append does and append a slice to - a slice? Easy: use ... at the call site, just as we did in the call to - Output above. This snippet produces identical output to the one above. x := []int{1,2,3} y := []int{4,5,6} x = append(x, y...) fmt.Println(x) - Without that ..., it wouldn't compile because the types would be wrong; - y is not of type int. +Without that ..., it wouldn't compile because the types would be wrong; y is +not of type int. Initialization - Although it doesn't look superficially very different from - initialization in C or C++, initialization in Go is more powerful. - Complex structures can be built during initialization and the ordering - issues among initialized objects, even among different packages, are - handled correctly. +Although it doesn't look superficially very different from initialization in C +or C++, initialization in Go is more powerful. Complex structures can be built +during initialization and the ordering issues among initialized objects, even +among different packages, are handled correctly. - Constants +Constants - Constants in Go are just that—constant. They are created at compile - time, even when defined as locals in functions, and can only be - numbers, characters (runes), strings or booleans. Because of the - compile-time restriction, the expressions that define them must be - constant expressions, evaluatable by the compiler. For instance, 1<<3 - is a constant expression, while math.Sin(math.Pi/4) is not because the - function call to math.Sin needs to happen at run time. +Constants in Go are just that—constant. They are created at compile time, even +when defined as locals in functions, and can only be numbers, characters +(runes), strings or booleans. Because of the compile-time restriction, the +expressions that define them must be constant expressions, evaluatable by the +compiler. For instance, 1<<3 is a constant expression, while math.Sin(math.Pi/ +4) is not because the function call to math.Sin needs to happen at run time. - In Go, enumerated constants are created using the iota enumerator. - Since iota can be part of an expression and expressions can be - implicitly repeated, it is easy to build intricate sets of values. +In Go, enumerated constants are created using the iota enumerator. Since iota +can be part of an expression and expressions can be implicitly repeated, it is +easy to build intricate sets of values. type ByteSize float64 @@ -1305,11 +1361,10 @@ const ( YB ) - The ability to attach a method such as String to any user-defined type - makes it possible for arbitrary values to format themselves - automatically for printing. Although you'll see it most often applied - to structs, this technique is also useful for scalar types such as - floating-point types like ByteSize. +The ability to attach a method such as String to any user-defined type makes it +possible for arbitrary values to format themselves automatically for printing. +Although you'll see it most often applied to structs, this technique is also +useful for scalar types such as floating-point types like ByteSize. func (b ByteSize) String() string { switch { @@ -1333,37 +1388,36 @@ func (b ByteSize) String() string { return fmt.Sprintf("%.2fB", b) } - The expression YB prints as 1.00YB, while ByteSize(1e13) prints as - 9.09TB. +The expression YB prints as 1.00YB, while ByteSize(1e13) prints as 9.09TB. - The use here of Sprintf to implement ByteSize's String method is safe - (avoids recurring indefinitely) not because of a conversion but because - it calls Sprintf with %f, which is not a string format: Sprintf will - only call the String method when it wants a string, and %f wants a - floating-point value. +The use here of Sprintf to implement ByteSize's String method is safe (avoids +recurring indefinitely) not because of a conversion but because it calls +Sprintf with %f, which is not a string format: Sprintf will only call the +String method when it wants a string, and %f wants a floating-point value. - Variables +Variables + +Variables can be initialized just like constants but the initializer can be a +general expression computed at run time. - Variables can be initialized just like constants but the initializer - can be a general expression computed at run time. var ( home = os.Getenv("HOME") user = os.Getenv("USER") gopath = os.Getenv("GOPATH") ) - The init function +The init function - Finally, each source file can define its own niladic init function to - set up whatever state is required. (Actually each file can have - multiple init functions.) And finally means finally: init is called - after all the variable declarations in the package have evaluated their - initializers, and those are evaluated only after all the imported - packages have been initialized. +Finally, each source file can define its own niladic init function to set up +whatever state is required. (Actually each file can have multiple init +functions.) And finally means finally: init is called after all the variable +declarations in the package have evaluated their initializers, and those are +evaluated only after all the imported packages have been initialized. + +Besides initializations that cannot be expressed as declarations, a common use +of init functions is to verify or repair correctness of the program state +before real execution begins. - Besides initializations that cannot be expressed as declarations, a - common use of init functions is to verify or repair correctness of the - program state before real execution begins. func init() { if user == "" { log.Fatal("$USER not set") @@ -1380,34 +1434,35 @@ func init() { Methods - Pointers vs. Values +Pointers vs. Values - As we saw with ByteSize, methods can be defined for any named type - (except a pointer or an interface); the receiver does not have to be a - struct. +As we saw with ByteSize, methods can be defined for any named type (except a +pointer or an interface); the receiver does not have to be a struct. + +In the discussion of slices above, we wrote an Append function. We can define +it as a method on slices instead. To do this, we first declare a named type to +which we can bind the method, and then make the receiver for the method a value +of that type. - In the discussion of slices above, we wrote an Append function. We can - define it as a method on slices instead. To do this, we first declare a - named type to which we can bind the method, and then make the receiver - for the method a value of that type. type ByteSlice []byte func (slice ByteSlice) Append(data []byte) []byte { // Body exactly the same as the Append function defined above. } - This still requires the method to return the updated slice. We can - eliminate that clumsiness by redefining the method to take a pointer to - a ByteSlice as its receiver, so the method can overwrite the caller's - slice. +This still requires the method to return the updated slice. We can eliminate +that clumsiness by redefining the method to take a pointer to a ByteSlice as +its receiver, so the method can overwrite the caller's slice. + func (p *ByteSlice) Append(data []byte) { slice := *p // Body as above, without the return. *p = slice } - In fact, we can do even better. If we modify our function so it looks - like a standard Write method, like this, +In fact, we can do even better. If we modify our function so it looks like a +standard Write method, like this, + func (p *ByteSlice) Write(data []byte) (n int, err error) { slice := *p // Again as above. @@ -1415,46 +1470,44 @@ func (p *ByteSlice) Write(data []byte) (n int, err error) { return len(data), nil } - then the type *ByteSlice satisfies the standard interface io.Writer, - which is handy. For instance, we can print into one. +then the type *ByteSlice satisfies the standard interface io.Writer, which is +handy. For instance, we can print into one. + var b ByteSlice fmt.Fprintf(&b, "This hour has %d days\n", 7) - We pass the address of a ByteSlice because only *ByteSlice satisfies - io.Writer. The rule about pointers vs. values for receivers is that - value methods can be invoked on pointers and values, but pointer - methods can only be invoked on pointers. +We pass the address of a ByteSlice because only *ByteSlice satisfies io.Writer. +The rule about pointers vs. values for receivers is that value methods can be +invoked on pointers and values, but pointer methods can only be invoked on +pointers. - This rule arises because pointer methods can modify the receiver; - invoking them on a value would cause the method to receive a copy of - the value, so any modifications would be discarded. The language - therefore disallows this mistake. There is a handy exception, though. - When the value is addressable, the language takes care of the common - case of invoking a pointer method on a value by inserting the address - operator automatically. In our example, the variable b is addressable, - so we can call its Write method with just b.Write. The compiler will - rewrite that to (&b).Write for us. +This rule arises because pointer methods can modify the receiver; invoking them +on a value would cause the method to receive a copy of the value, so any +modifications would be discarded. The language therefore disallows this +mistake. There is a handy exception, though. When the value is addressable, the +language takes care of the common case of invoking a pointer method on a value +by inserting the address operator automatically. In our example, the variable b +is addressable, so we can call its Write method with just b.Write. The compiler +will rewrite that to (&b).Write for us. - By the way, the idea of using Write on a slice of bytes is central to - the implementation of bytes.Buffer. +By the way, the idea of using Write on a slice of bytes is central to the +implementation of bytes.Buffer. Interfaces and other types - Interfaces +Interfaces - Interfaces in Go provide a way to specify the behavior of an object: if - something can do this, then it can be used here. We've seen a couple of - simple examples already; custom printers can be implemented by a String - method while Fprintf can generate output to anything with a Write - method. Interfaces with only one or two methods are common in Go code, - and are usually given a name derived from the method, such as io.Writer - for something that implements Write. +Interfaces in Go provide a way to specify the behavior of an object: if +something can do this, then it can be used here. We've seen a couple of simple +examples already; custom printers can be implemented by a String method while +Fprintf can generate output to anything with a Write method. Interfaces with +only one or two methods are common in Go code, and are usually given a name +derived from the method, such as io.Writer for something that implements Write. - A type can implement multiple interfaces. For instance, a collection - can be sorted by the routines in package sort if it implements - sort.Interface, which contains Len(), Less(i, j int) bool, and Swap(i, - j int), and it could also have a custom formatter. In this contrived - example Sequence satisfies both. +A type can implement multiple interfaces. For instance, a collection can be +sorted by the routines in package sort if it implements sort.Interface, which +contains Len(), Less(i, j int) bool, and Swap(i, j int), and it could also have +a custom formatter. In this contrived example Sequence satisfies both. type Sequence []int @@ -1489,29 +1542,30 @@ func (s Sequence) String() string { return str + "]" } - Conversions +Conversions + +The String method of Sequence is recreating the work that Sprint already does +for slices. (It also has complexity O(N²), which is poor.) We can share the +effort (and also speed it up) if we convert the Sequence to a plain []int +before calling Sprint. - The String method of Sequence is recreating the work that Sprint - already does for slices. (It also has complexity O(N²), which is poor.) - We can share the effort (and also speed it up) if we convert the - Sequence to a plain []int before calling Sprint. func (s Sequence) String() string { s = s.Copy() sort.Sort(s) return fmt.Sprint([]int(s)) } - This method is another example of the conversion technique for calling - Sprintf safely from a String method. Because the two types (Sequence - and []int) are the same if we ignore the type name, it's legal to - convert between them. The conversion doesn't create a new value, it - just temporarily acts as though the existing value has a new type. - (There are other legal conversions, such as from integer to floating - point, that do create a new value.) +This method is another example of the conversion technique for calling Sprintf +safely from a String method. Because the two types (Sequence and []int) are the +same if we ignore the type name, it's legal to convert between them. The +conversion doesn't create a new value, it just temporarily acts as though the +existing value has a new type. (There are other legal conversions, such as from +integer to floating point, that do create a new value.) + +It's an idiom in Go programs to convert the type of an expression to access a +different set of methods. As an example, we could use the existing type +sort.IntSlice to reduce the entire example to this: - It's an idiom in Go programs to convert the type of an expression to - access a different set of methods. As an example, we could use the - existing type sort.IntSlice to reduce the entire example to this: type Sequence []int // Method for printing - sorts the elements before printing @@ -1521,20 +1575,20 @@ func (s Sequence) String() string { return fmt.Sprint([]int(s)) } - Now, instead of having Sequence implement multiple interfaces (sorting - and printing), we're using the ability of a data item to be converted - to multiple types (Sequence, sort.IntSlice and []int), each of which - does some part of the job. That's more unusual in practice but can be - effective. +Now, instead of having Sequence implement multiple interfaces (sorting and +printing), we're using the ability of a data item to be converted to multiple +types (Sequence, sort.IntSlice and []int), each of which does some part of the +job. That's more unusual in practice but can be effective. - Interface conversions and type assertions +Interface conversions and type assertions + +[69]Type switches are a form of conversion: they take an interface and, for +each case in the switch, in a sense convert it to the type of that case. Here's +a simplified version of how the code under fmt.Printf turns a value into a +string using a type switch. If it's already a string, we want the actual string +value held by the interface, while if it has a String method we want the result +of calling the method. - [69]Type switches are a form of conversion: they take an interface and, - for each case in the switch, in a sense convert it to the type of that - case. Here's a simplified version of how the code under fmt.Printf - turns a value into a string using a type switch. If it's already a - string, we want the actual string value held by the interface, while if - it has a String method we want the result of calling the method. type Stringer interface { String() string } @@ -1547,27 +1601,29 @@ case Stringer: return str.String() } - The first case finds a concrete value; the second converts the - interface into another interface. It's perfectly fine to mix types this - way. +The first case finds a concrete value; the second converts the interface into +another interface. It's perfectly fine to mix types this way. + +What if there's only one type we care about? If we know the value holds a +string and we just want to extract it? A one-case type switch would do, but so +would a type assertion. A type assertion takes an interface value and extracts +from it a value of the specified explicit type. The syntax borrows from the +clause opening a type switch, but with an explicit type rather than the type +keyword: - What if there's only one type we care about? If we know the value holds - a string and we just want to extract it? A one-case type switch would - do, but so would a type assertion. A type assertion takes an interface - value and extracts from it a value of the specified explicit type. The - syntax borrows from the clause opening a type switch, but with an - explicit type rather than the type keyword: value.(typeName) - and the result is a new value with the static type typeName. That type - must either be the concrete type held by the interface, or a second - interface type that the value can be converted to. To extract the - string we know is in the value, we could write: +and the result is a new value with the static type typeName. That type must +either be the concrete type held by the interface, or a second interface type +that the value can be converted to. To extract the string we know is in the +value, we could write: + str := value.(string) - But if it turns out that the value does not contain a string, the - program will crash with a run-time error. To guard against that, use - the "comma, ok" idiom to test, safely, whether the value is a string: +But if it turns out that the value does not contain a string, the program will +crash with a run-time error. To guard against that, use the "comma, ok" idiom +to test, safely, whether the value is a string: + str, ok := value.(string) if ok { fmt.Printf("string value is: %q\n", str) @@ -1575,43 +1631,42 @@ if ok { fmt.Printf("value is not a string\n") } - If the type assertion fails, str will still exist and be of type - string, but it will have the zero value, an empty string. +If the type assertion fails, str will still exist and be of type string, but it +will have the zero value, an empty string. + +As an illustration of the capability, here's an if-else statement that's +equivalent to the type switch that opened this section. - As an illustration of the capability, here's an if-else statement - that's equivalent to the type switch that opened this section. if str, ok := value.(string); ok { return str } else if str, ok := value.(Stringer); ok { return str.String() } - Generality +Generality - If a type exists only to implement an interface and will never have - exported methods beyond that interface, there is no need to export the - type itself. Exporting just the interface makes it clear the value has - no interesting behavior beyond what is described in the interface. It - also avoids the need to repeat the documentation on every instance of a - common method. +If a type exists only to implement an interface and will never have exported +methods beyond that interface, there is no need to export the type itself. +Exporting just the interface makes it clear the value has no interesting +behavior beyond what is described in the interface. It also avoids the need to +repeat the documentation on every instance of a common method. - In such cases, the constructor should return an interface value rather - than the implementing type. As an example, in the hash libraries both - crc32.NewIEEE and adler32.New return the interface type hash.Hash32. - Substituting the CRC-32 algorithm for Adler-32 in a Go program requires - only changing the constructor call; the rest of the code is unaffected - by the change of algorithm. +In such cases, the constructor should return an interface value rather than the +implementing type. As an example, in the hash libraries both crc32.NewIEEE and +adler32.New return the interface type hash.Hash32. Substituting the CRC-32 +algorithm for Adler-32 in a Go program requires only changing the constructor +call; the rest of the code is unaffected by the change of algorithm. - A similar approach allows the streaming cipher algorithms in the - various crypto packages to be separated from the block ciphers they - chain together. The Block interface in the crypto/cipher package - specifies the behavior of a block cipher, which provides encryption of - a single block of data. Then, by analogy with the bufio package, cipher - packages that implement this interface can be used to construct - streaming ciphers, represented by the Stream interface, without knowing - the details of the block encryption. +A similar approach allows the streaming cipher algorithms in the various crypto +packages to be separated from the block ciphers they chain together. The Block +interface in the crypto/cipher package specifies the behavior of a block +cipher, which provides encryption of a single block of data. Then, by analogy +with the bufio package, cipher packages that implement this interface can be +used to construct streaming ciphers, represented by the Stream interface, +without knowing the details of the block encryption. + +The crypto/cipher interfaces look like this: - The crypto/cipher interfaces look like this: type Block interface { BlockSize() int Encrypt(dst, src []byte) @@ -1622,40 +1677,42 @@ type Stream interface { XORKeyStream(dst, src []byte) } - Here's the definition of the counter mode (CTR) stream, which turns a - block cipher into a streaming cipher; notice that the block cipher's - details are abstracted away: +Here's the definition of the counter mode (CTR) stream, which turns a block +cipher into a streaming cipher; notice that the block cipher's details are +abstracted away: + // NewCTR returns a Stream that encrypts/decrypts using the given Block in // counter mode. The length of iv must be the same as the Block's block size. func NewCTR(block Block, iv []byte) Stream - NewCTR applies not just to one specific encryption algorithm and data - source but to any implementation of the Block interface and any Stream. - Because they return interface values, replacing CTR encryption with - other encryption modes is a localized change. The constructor calls - must be edited, but because the surrounding code must treat the result - only as a Stream, it won't notice the difference. +NewCTR applies not just to one specific encryption algorithm and data source +but to any implementation of the Block interface and any Stream. Because they +return interface values, replacing CTR encryption with other encryption modes +is a localized change. The constructor calls must be edited, but because the +surrounding code must treat the result only as a Stream, it won't notice the +difference. - Interfaces and methods +Interfaces and methods + +Since almost anything can have methods attached, almost anything can satisfy an +interface. One illustrative example is in the http package, which defines the +Handler interface. Any object that implements Handler can serve HTTP requests. - Since almost anything can have methods attached, almost anything can - satisfy an interface. One illustrative example is in the http package, - which defines the Handler interface. Any object that implements Handler - can serve HTTP requests. type Handler interface { ServeHTTP(ResponseWriter, *Request) } - ResponseWriter is itself an interface that provides access to the - methods needed to return the response to the client. Those methods - include the standard Write method, so an http.ResponseWriter can be - used wherever an io.Writer can be used. Request is a struct containing - a parsed representation of the request from the client. +ResponseWriter is itself an interface that provides access to the methods +needed to return the response to the client. Those methods include the standard +Write method, so an http.ResponseWriter can be used wherever an io.Writer can +be used. Request is a struct containing a parsed representation of the request +from the client. + +For brevity, let's ignore POSTs and assume HTTP requests are always GETs; that +simplification does not affect the way the handlers are set up. Here's a +trivial implementation of a handler to count the number of times the page is +visited. - For brevity, let's ignore POSTs and assume HTTP requests are always - GETs; that simplification does not affect the way the handlers are set - up. Here's a trivial implementation of a handler to count the number of - times the page is visited. // Simple counter server. type Counter struct { n int @@ -1666,21 +1723,20 @@ func (ctr *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "counter = %d\n", ctr.n) } - (Keeping with our theme, note how Fprintf can print to an - http.ResponseWriter.) In a real server, access to ctr.n would need - protection from concurrent access. See the sync and atomic packages for - suggestions. +(Keeping with our theme, note how Fprintf can print to an http.ResponseWriter.) +In a real server, access to ctr.n would need protection from concurrent access. +See the sync and atomic packages for suggestions. + +For reference, here's how to attach such a server to a node on the URL tree. - For reference, here's how to attach such a server to a node on the URL - tree. import "net/http" ... ctr := new(Counter) http.Handle("/counter", ctr) - But why make Counter a struct? An integer is all that's needed. (The - receiver needs to be a pointer so the increment is visible to the - caller.) +But why make Counter a struct? An integer is all that's needed. (The receiver +needs to be a pointer so the increment is visible to the caller.) + // Simpler counter server. type Counter int @@ -1689,8 +1745,9 @@ func (ctr *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "counter = %d\n", *ctr) } - What if your program has some internal state that needs to be notified - that a page has been visited? Tie a channel to the web page. +What if your program has some internal state that needs to be notified that a +page has been visited? Tie a channel to the web page. + // A channel that sends a notification on each visit. // (Probably want the channel to be buffered.) type Chan chan *http.Request @@ -1700,18 +1757,19 @@ func (ch Chan) ServeHTTP(w http.ResponseWriter, req *http.Request) { fmt.Fprint(w, "notification sent") } - Finally, let's say we wanted to present on /args the arguments used - when invoking the server binary. It's easy to write a function to print - the arguments. +Finally, let's say we wanted to present on /args the arguments used when +invoking the server binary. It's easy to write a function to print the +arguments. + func ArgServer() { fmt.Println(os.Args) } - How do we turn that into an HTTP server? We could make ArgServer a - method of some type whose value we ignore, but there's a cleaner way. - Since we can define a method for any type except pointers and - interfaces, we can write a method for a function. The http package - contains this code: +How do we turn that into an HTTP server? We could make ArgServer a method of +some type whose value we ignore, but there's a cleaner way. Since we can define +a method for any type except pointers and interfaces, we can write a method for +a function. The http package contains this code: + // The HandlerFunc type is an adapter to allow the use of // ordinary functions as HTTP handlers. If f is a function // with the appropriate signature, HandlerFunc(f) is a @@ -1723,84 +1781,84 @@ func (f HandlerFunc) ServeHTTP(w ResponseWriter, req *Request) { f(w, req) } - HandlerFunc is a type with a method, ServeHTTP, so values of that type - can serve HTTP requests. Look at the implementation of the method: the - receiver is a function, f, and the method calls f. That may seem odd - but it's not that different from, say, the receiver being a channel and - the method sending on the channel. +HandlerFunc is a type with a method, ServeHTTP, so values of that type can +serve HTTP requests. Look at the implementation of the method: the receiver is +a function, f, and the method calls f. That may seem odd but it's not that +different from, say, the receiver being a channel and the method sending on the +channel. + +To make ArgServer into an HTTP server, we first modify it to have the right +signature. - To make ArgServer into an HTTP server, we first modify it to have the - right signature. // Argument server. func ArgServer(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, os.Args) } - ArgServer now has the same signature as HandlerFunc, so it can be - converted to that type to access its methods, just as we converted - Sequence to IntSlice to access IntSlice.Sort. The code to set it up is - concise: +ArgServer now has the same signature as HandlerFunc, so it can be converted to +that type to access its methods, just as we converted Sequence to IntSlice to +access IntSlice.Sort. The code to set it up is concise: + http.Handle("/args", http.HandlerFunc(ArgServer)) - When someone visits the page /args, the handler installed at that page - has value ArgServer and type HandlerFunc. The HTTP server will invoke - the method ServeHTTP of that type, with ArgServer as the receiver, - which will in turn call ArgServer (via the invocation f(w, req) inside - HandlerFunc.ServeHTTP). The arguments will then be displayed. +When someone visits the page /args, the handler installed at that page has +value ArgServer and type HandlerFunc. The HTTP server will invoke the method +ServeHTTP of that type, with ArgServer as the receiver, which will in turn call +ArgServer (via the invocation f(w, req) inside HandlerFunc.ServeHTTP). The +arguments will then be displayed. - In this section we have made an HTTP server from a struct, an integer, - a channel, and a function, all because interfaces are just sets of - methods, which can be defined for (almost) any type. +In this section we have made an HTTP server from a struct, an integer, a +channel, and a function, all because interfaces are just sets of methods, which +can be defined for (almost) any type. The blank identifier - We've mentioned the blank identifier a couple of times now, in the - context of [70]for range loops and [71]maps. The blank identifier can - be assigned or declared with any value of any type, with the value - discarded harmlessly. It's a bit like writing to the Unix /dev/null - file: it represents a write-only value to be used as a place-holder - where a variable is needed but the actual value is irrelevant. It has - uses beyond those we've seen already. +We've mentioned the blank identifier a couple of times now, in the context of +[70]for range loops and [71]maps. The blank identifier can be assigned or +declared with any value of any type, with the value discarded harmlessly. It's +a bit like writing to the Unix /dev/null file: it represents a write-only value +to be used as a place-holder where a variable is needed but the actual value is +irrelevant. It has uses beyond those we've seen already. - The blank identifier in multiple assignment +The blank identifier in multiple assignment - The use of a blank identifier in a for range loop is a special case of - a general situation: multiple assignment. +The use of a blank identifier in a for range loop is a special case of a +general situation: multiple assignment. + +If an assignment requires multiple values on the left side, but one of the +values will not be used by the program, a blank identifier on the +left-hand-side of the assignment avoids the need to create a dummy variable and +makes it clear that the value is to be discarded. For instance, when calling a +function that returns a value and an error, but only the error is important, +use the blank identifier to discard the irrelevant value. - If an assignment requires multiple values on the left side, but one of - the values will not be used by the program, a blank identifier on the - left-hand-side of the assignment avoids the need to create a dummy - variable and makes it clear that the value is to be discarded. For - instance, when calling a function that returns a value and an error, - but only the error is important, use the blank identifier to discard - the irrelevant value. if _, err := os.Stat(path); os.IsNotExist(err) { fmt.Printf("%s does not exist\n", path) } - Occasionally you'll see code that discards the error value in order to - ignore the error; this is terrible practice. Always check error - returns; they're provided for a reason. +Occasionally you'll see code that discards the error value in order to ignore +the error; this is terrible practice. Always check error returns; they're +provided for a reason. + // Bad! This code will crash if path does not exist. fi, _ := os.Stat(path) if fi.IsDir() { fmt.Printf("%s is a directory\n", path) } - Unused imports and variables +Unused imports and variables - It is an error to import a package or to declare a variable without - using it. Unused imports bloat the program and slow compilation, while - a variable that is initialized but not used is at least a wasted - computation and perhaps indicative of a larger bug. When a program is - under active development, however, unused imports and variables often - arise and it can be annoying to delete them just to have the - compilation proceed, only to have them be needed again later. The blank - identifier provides a workaround. +It is an error to import a package or to declare a variable without using it. +Unused imports bloat the program and slow compilation, while a variable that is +initialized but not used is at least a wasted computation and perhaps +indicative of a larger bug. When a program is under active development, +however, unused imports and variables often arise and it can be annoying to +delete them just to have the compilation proceed, only to have them be needed +again later. The blank identifier provides a workaround. - This half-written program has two unused imports (fmt and io) and an - unused variable (fd), so it will not compile, but it would be nice to - see if the code so far is correct. +This half-written program has two unused imports (fmt and io) and an unused +variable (fd), so it will not compile, but it would be nice to see if the code +so far is correct. package main @@ -1819,10 +1877,10 @@ func main() { // TODO: use fd. } - To silence complaints about the unused imports, use a blank identifier - to refer to a symbol from the imported package. Similarly, assigning - the unused variable fd to the blank identifier will silence the unused - variable error. This version of the program does compile. +To silence complaints about the unused imports, use a blank identifier to refer +to a symbol from the imported package. Similarly, assigning the unused variable +fd to the blank identifier will silence the unused variable error. This version +of the program does compile. package main @@ -1845,87 +1903,86 @@ func main() { _ = fd } - By convention, the global declarations to silence import errors should - come right after the imports and be commented, both to make them easy - to find and as a reminder to clean things up later. +By convention, the global declarations to silence import errors should come +right after the imports and be commented, both to make them easy to find and as +a reminder to clean things up later. - Import for side effect +Import for side effect + +An unused import like fmt or io in the previous example should eventually be +used or removed: blank assignments identify code as a work in progress. But +sometimes it is useful to import a package only for its side effects, without +any explicit use. For example, during its init function, the [72]net/http/pprof +package registers HTTP handlers that provide debugging information. It has an +exported API, but most clients need only the handler registration and access +the data through a web page. To import the package only for its side effects, +rename the package to the blank identifier: - An unused import like fmt or io in the previous example should - eventually be used or removed: blank assignments identify code as a - work in progress. But sometimes it is useful to import a package only - for its side effects, without any explicit use. For example, during its - init function, the [72]net/http/pprof package registers HTTP handlers - that provide debugging information. It has an exported API, but most - clients need only the handler registration and access the data through - a web page. To import the package only for its side effects, rename the - package to the blank identifier: import _ "net/http/pprof" - This form of import makes clear that the package is being imported for - its side effects, because there is no other possible use of the - package: in this file, it doesn't have a name. (If it did, and we - didn't use that name, the compiler would reject the program.) +This form of import makes clear that the package is being imported for its side +effects, because there is no other possible use of the package: in this file, +it doesn't have a name. (If it did, and we didn't use that name, the compiler +would reject the program.) - Interface checks +Interface checks - As we saw in the discussion of [73]interfaces above, a type need not - declare explicitly that it implements an interface. Instead, a type - implements the interface just by implementing the interface's methods. - In practice, most interface conversions are static and therefore - checked at compile time. For example, passing an *os.File to a function - expecting an io.Reader will not compile unless *os.File implements the - io.Reader interface. +As we saw in the discussion of [73]interfaces above, a type need not declare +explicitly that it implements an interface. Instead, a type implements the +interface just by implementing the interface's methods. In practice, most +interface conversions are static and therefore checked at compile time. For +example, passing an *os.File to a function expecting an io.Reader will not +compile unless *os.File implements the io.Reader interface. + +Some interface checks do happen at run-time, though. One instance is in the +[74]encoding/json package, which defines a [75]Marshaler interface. When the +JSON encoder receives a value that implements that interface, the encoder +invokes the value's marshaling method to convert it to JSON instead of doing +the standard conversion. The encoder checks this property at run time with a +[76]type assertion like: - Some interface checks do happen at run-time, though. One instance is in - the [74]encoding/json package, which defines a [75]Marshaler interface. - When the JSON encoder receives a value that implements that interface, - the encoder invokes the value's marshaling method to convert it to JSON - instead of doing the standard conversion. The encoder checks this - property at run time with a [76]type assertion like: m, ok := val.(json.Marshaler) - If it's necessary only to ask whether a type implements an interface, - without actually using the interface itself, perhaps as part of an - error check, use the blank identifier to ignore the type-asserted - value: +If it's necessary only to ask whether a type implements an interface, without +actually using the interface itself, perhaps as part of an error check, use the +blank identifier to ignore the type-asserted value: + if _, ok := val.(json.Marshaler); ok { fmt.Printf("value %v of type %T implements json.Marshaler\n", val, val) } - One place this situation arises is when it is necessary to guarantee - within the package implementing the type that it actually satisfies the - interface. If a type—for example, [77]json.RawMessage—needs a custom - JSON representation, it should implement json.Marshaler, but there are - no static conversions that would cause the compiler to verify this - automatically. If the type inadvertently fails to satisfy the - interface, the JSON encoder will still work, but will not use the - custom implementation. To guarantee that the implementation is correct, - a global declaration using the blank identifier can be used in the - package: +One place this situation arises is when it is necessary to guarantee within the +package implementing the type that it actually satisfies the interface. If a +type—for example, [77]json.RawMessage—needs a custom JSON representation, it +should implement json.Marshaler, but there are no static conversions that would +cause the compiler to verify this automatically. If the type inadvertently +fails to satisfy the interface, the JSON encoder will still work, but will not +use the custom implementation. To guarantee that the implementation is correct, +a global declaration using the blank identifier can be used in the package: + var _ json.Marshaler = (*RawMessage)(nil) - In this declaration, the assignment involving a conversion of a - *RawMessage to a Marshaler requires that *RawMessage implements - Marshaler, and that property will be checked at compile time. Should - the json.Marshaler interface change, this package will no longer - compile and we will be on notice that it needs to be updated. +In this declaration, the assignment involving a conversion of a *RawMessage to +a Marshaler requires that *RawMessage implements Marshaler, and that property +will be checked at compile time. Should the json.Marshaler interface change, +this package will no longer compile and we will be on notice that it needs to +be updated. - The appearance of the blank identifier in this construct indicates that - the declaration exists only for the type checking, not to create a - variable. Don't do this for every type that satisfies an interface, - though. By convention, such declarations are only used when there are - no static conversions already present in the code, which is a rare - event. +The appearance of the blank identifier in this construct indicates that the +declaration exists only for the type checking, not to create a variable. Don't +do this for every type that satisfies an interface, though. By convention, such +declarations are only used when there are no static conversions already present +in the code, which is a rare event. Embedding - Go does not provide the typical, type-driven notion of subclassing, but - it does have the ability to “borrow” pieces of an implementation by - embedding types within a struct or interface. +Go does not provide the typical, type-driven notion of subclassing, but it does +have the ability to “borrow” pieces of an implementation by embedding types +within a struct or interface. + +Interface embedding is very simple. We've mentioned the io.Reader and io.Writer +interfaces before; here are their definitions. - Interface embedding is very simple. We've mentioned the io.Reader and - io.Writer interfaces before; here are their definitions. type Reader interface { Read(p []byte) (n int, err error) } @@ -1934,29 +1991,29 @@ type Writer interface { Write(p []byte) (n int, err error) } - The io package also exports several other interfaces that specify - objects that can implement several such methods. For instance, there is - io.ReadWriter, an interface containing both Read and Write. We could - specify io.ReadWriter by listing the two methods explicitly, but it's - easier and more evocative to embed the two interfaces to form the new - one, like this: +The io package also exports several other interfaces that specify objects that +can implement several such methods. For instance, there is io.ReadWriter, an +interface containing both Read and Write. We could specify io.ReadWriter by +listing the two methods explicitly, but it's easier and more evocative to embed +the two interfaces to form the new one, like this: + // ReadWriter is the interface that combines the Reader and Writer interfaces. type ReadWriter interface { Reader Writer } - This says just what it looks like: A ReadWriter can do what a Reader - does and what a Writer does; it is a union of the embedded interfaces. - Only interfaces can be embedded within interfaces. +This says just what it looks like: A ReadWriter can do what a Reader does and +what a Writer does; it is a union of the embedded interfaces. Only interfaces +can be embedded within interfaces. + +The same basic idea applies to structs, but with more far-reaching +implications. The bufio package has two struct types, bufio.Reader and +bufio.Writer, each of which of course implements the analogous interfaces from +package io. And bufio also implements a buffered reader/writer, which it does +by combining a reader and a writer into one struct using embedding: it lists +the types within the struct but does not give them field names. - The same basic idea applies to structs, but with more far-reaching - implications. The bufio package has two struct types, bufio.Reader and - bufio.Writer, each of which of course implements the analogous - interfaces from package io. And bufio also implements a buffered - reader/writer, which it does by combining a reader and a writer into - one struct using embedding: it lists the types within the struct but - does not give them field names. // ReadWriter stores pointers to a Reader and a Writer. // It implements io.ReadWriter. type ReadWriter struct { @@ -1964,137 +2021,136 @@ type ReadWriter struct { *Writer // *bufio.Writer } - The embedded elements are pointers to structs and of course must be - initialized to point to valid structs before they can be used. The - ReadWriter struct could be written as +The embedded elements are pointers to structs and of course must be initialized +to point to valid structs before they can be used. The ReadWriter struct could +be written as + type ReadWriter struct { reader *Reader writer *Writer } - but then to promote the methods of the fields and to satisfy the io - interfaces, we would also need to provide forwarding methods, like - this: +but then to promote the methods of the fields and to satisfy the io interfaces, +we would also need to provide forwarding methods, like this: + func (rw *ReadWriter) Read(p []byte) (n int, err error) { return rw.reader.Read(p) } - By embedding the structs directly, we avoid this bookkeeping. The - methods of embedded types come along for free, which means that - bufio.ReadWriter not only has the methods of bufio.Reader and - bufio.Writer, it also satisfies all three interfaces: io.Reader, - io.Writer, and io.ReadWriter. +By embedding the structs directly, we avoid this bookkeeping. The methods of +embedded types come along for free, which means that bufio.ReadWriter not only +has the methods of bufio.Reader and bufio.Writer, it also satisfies all three +interfaces: io.Reader, io.Writer, and io.ReadWriter. - There's an important way in which embedding differs from subclassing. - When we embed a type, the methods of that type become methods of the - outer type, but when they are invoked the receiver of the method is the - inner type, not the outer one. In our example, when the Read method of - a bufio.ReadWriter is invoked, it has exactly the same effect as the - forwarding method written out above; the receiver is the reader field - of the ReadWriter, not the ReadWriter itself. +There's an important way in which embedding differs from subclassing. When we +embed a type, the methods of that type become methods of the outer type, but +when they are invoked the receiver of the method is the inner type, not the +outer one. In our example, when the Read method of a bufio.ReadWriter is +invoked, it has exactly the same effect as the forwarding method written out +above; the receiver is the reader field of the ReadWriter, not the ReadWriter +itself. + +Embedding can also be a simple convenience. This example shows an embedded +field alongside a regular, named field. - Embedding can also be a simple convenience. This example shows an - embedded field alongside a regular, named field. type Job struct { Command string *log.Logger } - The Job type now has the Print, Printf, Println and other methods of - *log.Logger. We could have given the Logger a field name, of course, - but it's not necessary to do so. And now, once initialized, we can log - to the Job: +The Job type now has the Print, Printf, Println and other methods of +*log.Logger. We could have given the Logger a field name, of course, but it's +not necessary to do so. And now, once initialized, we can log to the Job: + job.Println("starting now...") - The Logger is a regular field of the Job struct, so we can initialize - it in the usual way inside the constructor for Job, like this, +The Logger is a regular field of the Job struct, so we can initialize it in the +usual way inside the constructor for Job, like this, + func NewJob(command string, logger *log.Logger) *Job { return &Job{command, logger} } - or with a composite literal, +or with a composite literal, + job := &Job{command, log.New(os.Stderr, "Job: ", log.Ldate)} - If we need to refer to an embedded field directly, the type name of the - field, ignoring the package qualifier, serves as a field name, as it - did in the Read method of our ReadWriter struct. Here, if we needed to - access the *log.Logger of a Job variable job, we would write - job.Logger, which would be useful if we wanted to refine the methods of - Logger. +If we need to refer to an embedded field directly, the type name of the field, +ignoring the package qualifier, serves as a field name, as it did in the Read +method of our ReadWriter struct. Here, if we needed to access the *log.Logger +of a Job variable job, we would write job.Logger, which would be useful if we +wanted to refine the methods of Logger. + func (job *Job) Printf(format string, args ...interface{}) { job.Logger.Printf("%q: %s", job.Command, fmt.Sprintf(format, args...)) } - Embedding types introduces the problem of name conflicts but the rules - to resolve them are simple. First, a field or method X hides any other - item X in a more deeply nested part of the type. If log.Logger - contained a field or method called Command, the Command field of Job - would dominate it. +Embedding types introduces the problem of name conflicts but the rules to +resolve them are simple. First, a field or method X hides any other item X in a +more deeply nested part of the type. If log.Logger contained a field or method +called Command, the Command field of Job would dominate it. - Second, if the same name appears at the same nesting level, it is - usually an error; it would be erroneous to embed log.Logger if the Job - struct contained another field or method called Logger. However, if the - duplicate name is never mentioned in the program outside the type - definition, it is OK. This qualification provides some protection - against changes made to types embedded from outside; there is no - problem if a field is added that conflicts with another field in - another subtype if neither field is ever used. +Second, if the same name appears at the same nesting level, it is usually an +error; it would be erroneous to embed log.Logger if the Job struct contained +another field or method called Logger. However, if the duplicate name is never +mentioned in the program outside the type definition, it is OK. This +qualification provides some protection against changes made to types embedded +from outside; there is no problem if a field is added that conflicts with +another field in another subtype if neither field is ever used. Concurrency - Share by communicating +Share by communicating - Concurrent programming is a large topic and there is space only for - some Go-specific highlights here. +Concurrent programming is a large topic and there is space only for some +Go-specific highlights here. - Concurrent programming in many environments is made difficult by the - subtleties required to implement correct access to shared variables. Go - encourages a different approach in which shared values are passed - around on channels and, in fact, never actively shared by separate - threads of execution. Only one goroutine has access to the value at any - given time. Data races cannot occur, by design. To encourage this way - of thinking we have reduced it to a slogan: +Concurrent programming in many environments is made difficult by the subtleties +required to implement correct access to shared variables. Go encourages a +different approach in which shared values are passed around on channels and, in +fact, never actively shared by separate threads of execution. Only one +goroutine has access to the value at any given time. Data races cannot occur, +by design. To encourage this way of thinking we have reduced it to a slogan: - Do not communicate by sharing memory; instead, share memory by - communicating. + Do not communicate by sharing memory; instead, share memory by + communicating. - This approach can be taken too far. Reference counts may be best done - by putting a mutex around an integer variable, for instance. But as a - high-level approach, using channels to control access makes it easier - to write clear, correct programs. +This approach can be taken too far. Reference counts may be best done by +putting a mutex around an integer variable, for instance. But as a high-level +approach, using channels to control access makes it easier to write clear, +correct programs. - One way to think about this model is to consider a typical - single-threaded program running on one CPU. It has no need for - synchronization primitives. Now run another such instance; it too needs - no synchronization. Now let those two communicate; if the communication - is the synchronizer, there's still no need for other synchronization. - Unix pipelines, for example, fit this model perfectly. Although Go's - approach to concurrency originates in Hoare's Communicating Sequential - Processes (CSP), it can also be seen as a type-safe generalization of - Unix pipes. +One way to think about this model is to consider a typical single-threaded +program running on one CPU. It has no need for synchronization primitives. Now +run another such instance; it too needs no synchronization. Now let those two +communicate; if the communication is the synchronizer, there's still no need +for other synchronization. Unix pipelines, for example, fit this model +perfectly. Although Go's approach to concurrency originates in Hoare's +Communicating Sequential Processes (CSP), it can also be seen as a type-safe +generalization of Unix pipes. - Goroutines +Goroutines - They're called goroutines because the existing terms—threads, - coroutines, processes, and so on—convey inaccurate connotations. A - goroutine has a simple model: it is a function executing concurrently - with other goroutines in the same address space. It is lightweight, - costing little more than the allocation of stack space. And the stacks - start small, so they are cheap, and grow by allocating (and freeing) - heap storage as required. +They're called goroutines because the existing terms—threads, coroutines, +processes, and so on—convey inaccurate connotations. A goroutine has a simple +model: it is a function executing concurrently with other goroutines in the +same address space. It is lightweight, costing little more than the allocation +of stack space. And the stacks start small, so they are cheap, and grow by +allocating (and freeing) heap storage as required. - Goroutines are multiplexed onto multiple OS threads so if one should - block, such as while waiting for I/O, others continue to run. Their - design hides many of the complexities of thread creation and - management. +Goroutines are multiplexed onto multiple OS threads so if one should block, +such as while waiting for I/O, others continue to run. Their design hides many +of the complexities of thread creation and management. + +Prefix a function or method call with the go keyword to run the call in a new +goroutine. When the call completes, the goroutine exits, silently. (The effect +is similar to the Unix shell's & notation for running a command in the +background.) - Prefix a function or method call with the go keyword to run the call in - a new goroutine. When the call completes, the goroutine exits, - silently. (The effect is similar to the Unix shell's & notation for - running a command in the background.) go list.Sort() // run list.Sort concurrently; don't wait for it. - A function literal can be handy in a goroutine invocation. +A function literal can be handy in a goroutine invocation. + func Announce(message string, delay time.Duration) { go func() { time.Sleep(delay) @@ -2102,31 +2158,31 @@ func Announce(message string, delay time.Duration) { }() // Note the parentheses - must call the function. } - In Go, function literals are closures: the implementation makes sure - the variables referred to by the function survive as long as they are - active. +In Go, function literals are closures: the implementation makes sure the +variables referred to by the function survive as long as they are active. - These examples aren't too practical because the functions have no way - of signaling completion. For that, we need channels. +These examples aren't too practical because the functions have no way of +signaling completion. For that, we need channels. - Channels +Channels + +Like maps, channels are allocated with make, and the resulting value acts as a +reference to an underlying data structure. If an optional integer parameter is +provided, it sets the buffer size for the channel. The default is zero, for an +unbuffered or synchronous channel. - Like maps, channels are allocated with make, and the resulting value - acts as a reference to an underlying data structure. If an optional - integer parameter is provided, it sets the buffer size for the channel. - The default is zero, for an unbuffered or synchronous channel. ci := make(chan int) // unbuffered channel of integers cj := make(chan int, 0) // unbuffered channel of integers cs := make(chan *os.File, 100) // buffered channel of pointers to Files - Unbuffered channels combine communication—the exchange of a value—with - synchronization—guaranteeing that two calculations (goroutines) are in - a known state. +Unbuffered channels combine communication—the exchange of a value—with +synchronization—guaranteeing that two calculations (goroutines) are in a known +state. + +There are lots of nice idioms using channels. Here's one to get us started. In +the previous section we launched a sort in the background. A channel can allow +the launching goroutine to wait for the sort to complete. - There are lots of nice idioms using channels. Here's one to get us - started. In the previous section we launched a sort in the background. - A channel can allow the launching goroutine to wait for the sort to - complete. c := make(chan int) // Allocate a channel. // Start the sort in a goroutine; when it completes, signal on the channel. go func() { @@ -2136,18 +2192,19 @@ go func() { doSomethingForAWhile() <-c // Wait for sort to finish; discard sent value. - Receivers always block until there is data to receive. If the channel - is unbuffered, the sender blocks until the receiver has received the - value. If the channel has a buffer, the sender blocks only until the - value has been copied to the buffer; if the buffer is full, this means - waiting until some receiver has retrieved a value. +Receivers always block until there is data to receive. If the channel is +unbuffered, the sender blocks until the receiver has received the value. If the +channel has a buffer, the sender blocks only until the value has been copied to +the buffer; if the buffer is full, this means waiting until some receiver has +retrieved a value. + +A buffered channel can be used like a semaphore, for instance to limit +throughput. In this example, incoming requests are passed to handle, which +sends a value into the channel, processes the request, and then receives a +value from the channel to ready the “semaphore” for the next consumer. The +capacity of the channel buffer limits the number of simultaneous calls to +process. - A buffered channel can be used like a semaphore, for instance to limit - throughput. In this example, incoming requests are passed to handle, - which sends a value into the channel, processes the request, and then - receives a value from the channel to ready the “semaphore” for the next - consumer. The capacity of the channel buffer limits the number of - simultaneous calls to process. var sem = make(chan int, MaxOutstanding) func handle(r *Request) { @@ -2163,16 +2220,17 @@ func Serve(queue chan *Request) { } } - Once MaxOutstanding handlers are executing process, any more will block - trying to send into the filled channel buffer, until one of the - existing handlers finishes and receives from the buffer. +Once MaxOutstanding handlers are executing process, any more will block trying +to send into the filled channel buffer, until one of the existing handlers +finishes and receives from the buffer. + +This design has a problem, though: Serve creates a new goroutine for every +incoming request, even though only MaxOutstanding of them can run at any +moment. As a result, the program can consume unlimited resources if the +requests come in too fast. We can address that deficiency by changing Serve to +gate the creation of the goroutines. Here's an obvious solution, but beware it +has a bug we'll fix subsequently: - This design has a problem, though: Serve creates a new goroutine for - every incoming request, even though only MaxOutstanding of them can run - at any moment. As a result, the program can consume unlimited resources - if the requests come in too fast. We can address that deficiency by - changing Serve to gate the creation of the goroutines. Here's an - obvious solution, but beware it has a bug we'll fix subsequently: func Serve(queue chan *Request) { for req := range queue { sem <- 1 @@ -2183,11 +2241,12 @@ func Serve(queue chan *Request) { } } - The bug is that in a Go for loop, the loop variable is reused for each - iteration, so the req variable is shared across all goroutines. That's - not what we want. We need to make sure that req is unique for each - goroutine. Here's one way to do that, passing the value of req as an - argument to the closure in the goroutine: +The bug is that in a Go for loop, the loop variable is reused for each +iteration, so the req variable is shared across all goroutines. That's not what +we want. We need to make sure that req is unique for each goroutine. Here's one +way to do that, passing the value of req as an argument to the closure in the +goroutine: + func Serve(queue chan *Request) { for req := range queue { sem <- 1 @@ -2198,9 +2257,10 @@ func Serve(queue chan *Request) { } } - Compare this version with the previous to see the difference in how the - closure is declared and run. Another solution is just to create a new - variable with the same name, as in this example: +Compare this version with the previous to see the difference in how the closure +is declared and run. Another solution is just to create a new variable with the +same name, as in this example: + func Serve(queue chan *Request) { for req := range queue { req := req // Create new instance of req for the goroutine. @@ -2212,19 +2272,21 @@ func Serve(queue chan *Request) { } } - It may seem odd to write +It may seem odd to write + req := req - but it's legal and idiomatic in Go to do this. You get a fresh version - of the variable with the same name, deliberately shadowing the loop - variable locally but unique to each goroutine. +but it's legal and idiomatic in Go to do this. You get a fresh version of the +variable with the same name, deliberately shadowing the loop variable locally +but unique to each goroutine. + +Going back to the general problem of writing the server, another approach that +manages resources well is to start a fixed number of handle goroutines all +reading from the request channel. The number of goroutines limits the number of +simultaneous calls to process. This Serve function also accepts a channel on +which it will be told to exit; after launching the goroutines it blocks +receiving from that channel. - Going back to the general problem of writing the server, another - approach that manages resources well is to start a fixed number of - handle goroutines all reading from the request channel. The number of - goroutines limits the number of simultaneous calls to process. This - Serve function also accepts a channel on which it will be told to exit; - after launching the goroutines it blocks receiving from that channel. func handle(queue chan *Request) { for r := range queue { process(r) @@ -2239,25 +2301,26 @@ func Serve(clientRequests chan *Request, quit chan bool) { <-quit // Wait to be told to exit. } - Channels of channels +Channels of channels - One of the most important properties of Go is that a channel is a - first-class value that can be allocated and passed around like any - other. A common use of this property is to implement safe, parallel - demultiplexing. +One of the most important properties of Go is that a channel is a first-class +value that can be allocated and passed around like any other. A common use of +this property is to implement safe, parallel demultiplexing. + +In the example in the previous section, handle was an idealized handler for a +request but we didn't define the type it was handling. If that type includes a +channel on which to reply, each client can provide its own path for the answer. +Here's a schematic definition of type Request. - In the example in the previous section, handle was an idealized handler - for a request but we didn't define the type it was handling. If that - type includes a channel on which to reply, each client can provide its - own path for the answer. Here's a schematic definition of type Request. type Request struct { args []int f func([]int) int resultChan chan int } - The client provides a function and its arguments, as well as a channel - inside the request object on which to receive the answer. +The client provides a function and its arguments, as well as a channel inside +the request object on which to receive the answer. + func sum(a []int) (s int) { for _, v := range a { s += v @@ -2271,28 +2334,29 @@ clientRequests <- request // Wait for response. fmt.Printf("answer: %d\n", <-request.resultChan) - On the server side, the handler function is the only thing that - changes. +On the server side, the handler function is the only thing that changes. + func handle(queue chan *Request) { for req := range queue { req.resultChan <- req.f(req.args) } } - There's clearly a lot more to do to make it realistic, but this code is - a framework for a rate-limited, parallel, non-blocking RPC system, and - there's not a mutex in sight. +There's clearly a lot more to do to make it realistic, but this code is a +framework for a rate-limited, parallel, non-blocking RPC system, and there's +not a mutex in sight. - Parallelization +Parallelization - Another application of these ideas is to parallelize a calculation - across multiple CPU cores. If the calculation can be broken into - separate pieces that can execute independently, it can be parallelized, - with a channel to signal when each piece completes. +Another application of these ideas is to parallelize a calculation across +multiple CPU cores. If the calculation can be broken into separate pieces that +can execute independently, it can be parallelized, with a channel to signal +when each piece completes. + +Let's say we have an expensive operation to perform on a vector of items, and +that the value of the operation on each item is independent, as in this +idealized example. - Let's say we have an expensive operation to perform on a vector of - items, and that the value of the operation on each item is independent, - as in this idealized example. type Vector []float64 // Apply the operation to v[i], v[i+1] ... up to v[n-1]. @@ -2303,10 +2367,10 @@ func (v Vector) DoSome(i, n int, u Vector, c chan int) { c <- 1 // signal that this piece is done } - We launch the pieces independently in a loop, one per CPU. They can - complete in any order but it doesn't matter; we just count the - completion signals by draining the channel after launching all the - goroutines. +We launch the pieces independently in a loop, one per CPU. They can complete in +any order but it doesn't matter; we just count the completion signals by +draining the channel after launching all the goroutines. + const numCPU = 4 // number of CPU cores func (v Vector) DoAll(u Vector) { @@ -2321,37 +2385,39 @@ func (v Vector) DoAll(u Vector) { // All done. } - Rather than create a constant value for numCPU, we can ask the runtime - what value is appropriate. The function [78]runtime.NumCPU returns the - number of hardware CPU cores in the machine, so we could write +Rather than create a constant value for numCPU, we can ask the runtime what +value is appropriate. The function [78]runtime.NumCPU returns the number of +hardware CPU cores in the machine, so we could write + var numCPU = runtime.NumCPU() - There is also a function [79]runtime.GOMAXPROCS, which reports (or - sets) the user-specified number of cores that a Go program can have - running simultaneously. It defaults to the value of runtime.NumCPU but - can be overridden by setting the similarly named shell environment - variable or by calling the function with a positive number. Calling it - with zero just queries the value. Therefore if we want to honor the - user's resource request, we should write +There is also a function [79]runtime.GOMAXPROCS, which reports (or sets) the +user-specified number of cores that a Go program can have running +simultaneously. It defaults to the value of runtime.NumCPU but can be +overridden by setting the similarly named shell environment variable or by +calling the function with a positive number. Calling it with zero just queries +the value. Therefore if we want to honor the user's resource request, we should +write + var numCPU = runtime.GOMAXPROCS(0) - Be sure not to confuse the ideas of concurrency—structuring a program - as independently executing components—and parallelism—executing - calculations in parallel for efficiency on multiple CPUs. Although the - concurrency features of Go can make some problems easy to structure as - parallel computations, Go is a concurrent language, not a parallel one, - and not all parallelization problems fit Go's model. For a discussion - of the distinction, see the talk cited in [80]this blog post. +Be sure not to confuse the ideas of concurrency—structuring a program as +independently executing components—and parallelism—executing calculations in +parallel for efficiency on multiple CPUs. Although the concurrency features of +Go can make some problems easy to structure as parallel computations, Go is a +concurrent language, not a parallel one, and not all parallelization problems +fit Go's model. For a discussion of the distinction, see the talk cited in [80] +this blog post. - A leaky buffer +A leaky buffer + +The tools of concurrent programming can even make non-concurrent ideas easier +to express. Here's an example abstracted from an RPC package. The client +goroutine loops receiving data from some source, perhaps a network. To avoid +allocating and freeing buffers, it keeps a free list, and uses a buffered +channel to represent it. If the channel is empty, a new buffer gets allocated. +Once the message buffer is ready, it's sent to the server on serverChan. - The tools of concurrent programming can even make non-concurrent ideas - easier to express. Here's an example abstracted from an RPC package. - The client goroutine loops receiving data from some source, perhaps a - network. To avoid allocating and freeing buffers, it keeps a free list, - and uses a buffered channel to represent it. If the channel is empty, a - new buffer gets allocated. Once the message buffer is ready, it's sent - to the server on serverChan. var freeList = make(chan *Buffer, 100) var serverChan = make(chan *Buffer) @@ -2371,8 +2437,9 @@ func client() { } } - The server loop receives each message from the client, processes it, - and returns the buffer to the free list. +The server loop receives each message from the client, processes it, and +returns the buffer to the free list. + func server() { for { b := <-serverChan // Wait for work. @@ -2387,37 +2454,36 @@ func server() { } } - The client attempts to retrieve a buffer from freeList; if none is - available, it allocates a fresh one. The server's send to freeList puts - b back on the free list unless the list is full, in which case the - buffer is dropped on the floor to be reclaimed by the garbage - collector. (The default clauses in the select statements execute when - no other case is ready, meaning that the selects never block.) This - implementation builds a leaky bucket free list in just a few lines, - relying on the buffered channel and the garbage collector for - bookkeeping. +The client attempts to retrieve a buffer from freeList; if none is available, +it allocates a fresh one. The server's send to freeList puts b back on the free +list unless the list is full, in which case the buffer is dropped on the floor +to be reclaimed by the garbage collector. (The default clauses in the select +statements execute when no other case is ready, meaning that the selects never +block.) This implementation builds a leaky bucket free list in just a few +lines, relying on the buffered channel and the garbage collector for +bookkeeping. Errors - Library routines must often return some sort of error indication to the - caller. As mentioned earlier, Go's multivalue return makes it easy to - return a detailed error description alongside the normal return value. - It is good style to use this feature to provide detailed error - information. For example, as we'll see, os.Open doesn't just return a - nil pointer on failure, it also returns an error value that describes - what went wrong. +Library routines must often return some sort of error indication to the caller. +As mentioned earlier, Go's multivalue return makes it easy to return a detailed +error description alongside the normal return value. It is good style to use +this feature to provide detailed error information. For example, as we'll see, +os.Open doesn't just return a nil pointer on failure, it also returns an error +value that describes what went wrong. + +By convention, errors have type error, a simple built-in interface. - By convention, errors have type error, a simple built-in interface. type error interface { Error() string } - A library writer is free to implement this interface with a richer - model under the covers, making it possible not only to see the error - but also to provide some context. As mentioned, alongside the usual - *os.File return value, os.Open also returns an error value. If the file - is opened successfully, the error will be nil, but when there is a - problem, it will hold an os.PathError: +A library writer is free to implement this interface with a richer model under +the covers, making it possible not only to see the error but also to provide +some context. As mentioned, alongside the usual *os.File return value, os.Open +also returns an error value. If the file is opened successfully, the error will +be nil, but when there is a problem, it will hold an os.PathError: + // PathError records an error and the operation and // file path that caused it. type PathError struct { @@ -2430,23 +2496,24 @@ func (e *PathError) Error() string { return e.Op + " " + e.Path + ": " + e.Err.Error() } - PathError's Error generates a string like this: +PathError's Error generates a string like this: + open /etc/passwx: no such file or directory - Such an error, which includes the problematic file name, the operation, - and the operating system error it triggered, is useful even if printed - far from the call that caused it; it is much more informative than the - plain "no such file or directory". +Such an error, which includes the problematic file name, the operation, and the +operating system error it triggered, is useful even if printed far from the +call that caused it; it is much more informative than the plain "no such file +or directory". - When feasible, error strings should identify their origin, such as by - having a prefix naming the operation or package that generated the - error. For example, in package image, the string representation for a - decoding error due to an unknown format is "image: unknown format". +When feasible, error strings should identify their origin, such as by having a +prefix naming the operation or package that generated the error. For example, +in package image, the string representation for a decoding error due to an +unknown format is "image: unknown format". + +Callers that care about the precise error details can use a type switch or a +type assertion to look for specific errors and extract details. For PathErrors +this might include examining the internal Err field for recoverable failures. - Callers that care about the precise error details can use a type switch - or a type assertion to look for specific errors and extract details. - For PathErrors this might include examining the internal Err field for - recoverable failures. for try := 0; try < 2; try++ { file, err = os.Create(filename) if err == nil { @@ -2459,24 +2526,24 @@ for try := 0; try < 2; try++ { return } - The second if statement here is another [81]type assertion. If it - fails, ok will be false, and e will be nil. If it succeeds, ok will be - true, which means the error was of type *os.PathError, and then so is - e, which we can examine for more information about the error. +The second if statement here is another [81]type assertion. If it fails, ok +will be false, and e will be nil. If it succeeds, ok will be true, which means +the error was of type *os.PathError, and then so is e, which we can examine for +more information about the error. - Panic +Panic - The usual way to report an error to a caller is to return an error as - an extra return value. The canonical Read method is a well-known - instance; it returns a byte count and an error. But what if the error - is unrecoverable? Sometimes the program simply cannot continue. +The usual way to report an error to a caller is to return an error as an extra +return value. The canonical Read method is a well-known instance; it returns a +byte count and an error. But what if the error is unrecoverable? Sometimes the +program simply cannot continue. + +For this purpose, there is a built-in function panic that in effect creates a +run-time error that will stop the program (but see the next section). The +function takes a single argument of arbitrary type—often a string—to be printed +as the program dies. It's also a way to indicate that something impossible has +happened, such as exiting an infinite loop. - For this purpose, there is a built-in function panic that in effect - creates a run-time error that will stop the program (but see the next - section). The function takes a single argument of arbitrary type—often - a string—to be printed as the program dies. It's also a way to indicate - that something impossible has happened, such as exiting an infinite - loop. // A toy implementation of cube root using Newton's method. func CubeRoot(x float64) float64 { z := x/3 // Arbitrary initial value @@ -2491,12 +2558,12 @@ func CubeRoot(x float64) float64 { panic(fmt.Sprintf("CubeRoot(%g) did not converge", x)) } - This is only an example but real library functions should avoid panic. - If the problem can be masked or worked around, it's always better to - let things continue to run rather than taking down the whole program. - One possible counterexample is during initialization: if the library - truly cannot set itself up, it might be reasonable to panic, so to - speak. +This is only an example but real library functions should avoid panic. If the +problem can be masked or worked around, it's always better to let things +continue to run rather than taking down the whole program. One possible +counterexample is during initialization: if the library truly cannot set itself +up, it might be reasonable to panic, so to speak. + var user = os.Getenv("USER") func init() { @@ -2505,23 +2572,23 @@ func init() { } } - Recover +Recover - When panic is called, including implicitly for run-time errors such as - indexing a slice out of bounds or failing a type assertion, it - immediately stops execution of the current function and begins - unwinding the stack of the goroutine, running any deferred functions - along the way. If that unwinding reaches the top of the goroutine's - stack, the program dies. However, it is possible to use the built-in - function recover to regain control of the goroutine and resume normal - execution. +When panic is called, including implicitly for run-time errors such as indexing +a slice out of bounds or failing a type assertion, it immediately stops +execution of the current function and begins unwinding the stack of the +goroutine, running any deferred functions along the way. If that unwinding +reaches the top of the goroutine's stack, the program dies. However, it is +possible to use the built-in function recover to regain control of the +goroutine and resume normal execution. - A call to recover stops the unwinding and returns the argument passed - to panic. Because the only code that runs while unwinding is inside - deferred functions, recover is only useful inside deferred functions. +A call to recover stops the unwinding and returns the argument passed to panic. +Because the only code that runs while unwinding is inside deferred functions, +recover is only useful inside deferred functions. + +One application of recover is to shut down a failing goroutine inside a server +without killing the other executing goroutines. - One application of recover is to shut down a failing goroutine inside a - server without killing the other executing goroutines. func server(workChan <-chan *Work) { for work := range workChan { go safelyDo(work) @@ -2537,24 +2604,24 @@ func safelyDo(work *Work) { do(work) } - In this example, if do(work) panics, the result will be logged and the - goroutine will exit cleanly without disturbing the others. There's no - need to do anything else in the deferred closure; calling recover - handles the condition completely. +In this example, if do(work) panics, the result will be logged and the +goroutine will exit cleanly without disturbing the others. There's no need to +do anything else in the deferred closure; calling recover handles the condition +completely. - Because recover always returns nil unless called directly from a - deferred function, deferred code can call library routines that - themselves use panic and recover without failing. As an example, the - deferred function in safelyDo might call a logging function before - calling recover, and that logging code would run unaffected by the - panicking state. +Because recover always returns nil unless called directly from a deferred +function, deferred code can call library routines that themselves use panic and +recover without failing. As an example, the deferred function in safelyDo might +call a logging function before calling recover, and that logging code would run +unaffected by the panicking state. + +With our recovery pattern in place, the do function (and anything it calls) can +get out of any bad situation cleanly by calling panic. We can use that idea to +simplify error handling in complex software. Let's look at an idealized version +of a regexp package, which reports parsing errors by calling panic with a local +error type. Here's the definition of Error, an error method, and the Compile +function. - With our recovery pattern in place, the do function (and anything it - calls) can get out of any bad situation cleanly by calling panic. We - can use that idea to simplify error handling in complex software. Let's - look at an idealized version of a regexp package, which reports parsing - errors by calling panic with a local error type. Here's the definition - of Error, an error method, and the Compile function. // Error is the type of a parse error; it satisfies the error interface. type Error string func (e Error) Error() string { @@ -2580,51 +2647,49 @@ func Compile(str string) (regexp *Regexp, err error) { return regexp.doParse(str), nil } - If doParse panics, the recovery block will set the return value to - nil—deferred functions can modify named return values. It will then - check, in the assignment to err, that the problem was a parse error by - asserting that it has the local type Error. If it does not, the type - assertion will fail, causing a run-time error that continues the stack - unwinding as though nothing had interrupted it. This check means that - if something unexpected happens, such as an index out of bounds, the - code will fail even though we are using panic and recover to handle - parse errors. +If doParse panics, the recovery block will set the return value to nil—deferred +functions can modify named return values. It will then check, in the assignment +to err, that the problem was a parse error by asserting that it has the local +type Error. If it does not, the type assertion will fail, causing a run-time +error that continues the stack unwinding as though nothing had interrupted it. +This check means that if something unexpected happens, such as an index out of +bounds, the code will fail even though we are using panic and recover to handle +parse errors. + +With error handling in place, the error method (because it's a method bound to +a type, it's fine, even natural, for it to have the same name as the builtin +error type) makes it easy to report parse errors without worrying about +unwinding the parse stack by hand: - With error handling in place, the error method (because it's a method - bound to a type, it's fine, even natural, for it to have the same name - as the builtin error type) makes it easy to report parse errors without - worrying about unwinding the parse stack by hand: if pos == 0 { re.error("'*' illegal at start of expression") } - Useful though this pattern is, it should be used only within a package. - Parse turns its internal panic calls into error values; it does not - expose panics to its client. That is a good rule to follow. +Useful though this pattern is, it should be used only within a package. Parse +turns its internal panic calls into error values; it does not expose panics to +its client. That is a good rule to follow. - By the way, this re-panic idiom changes the panic value if an actual - error occurs. However, both the original and new failures will be - presented in the crash report, so the root cause of the problem will - still be visible. Thus this simple re-panic approach is usually - sufficient—it's a crash after all—but if you want to display only the - original value, you can write a little more code to filter unexpected - problems and re-panic with the original error. That's left as an - exercise for the reader. +By the way, this re-panic idiom changes the panic value if an actual error +occurs. However, both the original and new failures will be presented in the +crash report, so the root cause of the problem will still be visible. Thus this +simple re-panic approach is usually sufficient—it's a crash after all—but if +you want to display only the original value, you can write a little more code +to filter unexpected problems and re-panic with the original error. That's left +as an exercise for the reader. A web server - Let's finish with a complete Go program, a web server. This one is - actually a kind of web re-server. Google provides a service at - chart.apis.google.com that does automatic formatting of data into - charts and graphs. It's hard to use interactively, though, because you - need to put the data into the URL as a query. The program here provides - a nicer interface to one form of data: given a short piece of text, it - calls on the chart server to produce a QR code, a matrix of boxes that - encode the text. That image can be grabbed with your cell phone's - camera and interpreted as, for instance, a URL, saving you typing the - URL into the phone's tiny keyboard. +Let's finish with a complete Go program, a web server. This one is actually a +kind of web re-server. Google provides a service at chart.apis.google.com that +does automatic formatting of data into charts and graphs. It's hard to use +interactively, though, because you need to put the data into the URL as a +query. The program here provides a nicer interface to one form of data: given a +short piece of text, it calls on the chart server to produce a QR code, a +matrix of boxes that encode the text. That image can be grabbed with your cell +phone's camera and interpreted as, for instance, a URL, saving you typing the +URL into the phone's tiny keyboard. - Here's the complete program. An explanation follows. +Here's the complete program. An explanation follows. package main @@ -2659,8 +2724,7 @@ const templateStr = ` {{if .}} - +
{{.}}
@@ -2674,177 +2738,172 @@ const templateStr = ` ` - The pieces up to main should be easy to follow. The one flag sets a - default HTTP port for our server. The template variable templ is where - the fun happens. It builds an HTML template that will be executed by - the server to display the page; more about that in a moment. +The pieces up to main should be easy to follow. The one flag sets a default +HTTP port for our server. The template variable templ is where the fun happens. +It builds an HTML template that will be executed by the server to display the +page; more about that in a moment. - The main function parses the flags and, using the mechanism we talked - about above, binds the function QR to the root path for the server. - Then http.ListenAndServe is called to start the server; it blocks while - the server runs. +The main function parses the flags and, using the mechanism we talked about +above, binds the function QR to the root path for the server. Then +http.ListenAndServe is called to start the server; it blocks while the server +runs. - QR just receives the request, which contains form data, and executes - the template on the data in the form value named s. +QR just receives the request, which contains form data, and executes the +template on the data in the form value named s. - The template package html/template is powerful; this program just - touches on its capabilities. In essence, it rewrites a piece of HTML - text on the fly by substituting elements derived from data items passed - to templ.Execute, in this case the form value. Within the template text - (templateStr), double-brace-delimited pieces denote template actions. - The piece from {{if .}} to {{end}} executes only if the value of the - current data item, called . (dot), is non-empty. That is, when the - string is empty, this piece of the template is suppressed. +The template package html/template is powerful; this program just touches on +its capabilities. In essence, it rewrites a piece of HTML text on the fly by +substituting elements derived from data items passed to templ.Execute, in this +case the form value. Within the template text (templateStr), +double-brace-delimited pieces denote template actions. The piece from {{if .}} +to {{end}} executes only if the value of the current data item, called . (dot), +is non-empty. That is, when the string is empty, this piece of the template is +suppressed. - The two snippets {{.}} say to show the data presented to the - template—the query string—on the web page. The HTML template package - automatically provides appropriate escaping so the text is safe to - display. +The two snippets {{.}} say to show the data presented to the template—the query +string—on the web page. The HTML template package automatically provides +appropriate escaping so the text is safe to display. - The rest of the template string is just the HTML to show when the page - loads. If this is too quick an explanation, see the [82]documentation - for the template package for a more thorough discussion. +The rest of the template string is just the HTML to show when the page loads. +If this is too quick an explanation, see the [82]documentation for the template +package for a more thorough discussion. - And there you have it: a useful web server in a few lines of code plus - some data-driven HTML text. Go is powerful enough to make a lot happen - in a few lines. +And there you have it: a useful web server in a few lines of code plus some +data-driven HTML text. Go is powerful enough to make a lot happen in a few +lines. - [83]Why Go [84]Use Cases [85]Case Studies - [86]Get Started [87]Playground [88]Tour [89]Stack Overflow [90]Help - [91]Packages [92]Standard Library [93]About Go Packages - [94]About [95]Download [96]Blog [97]Issue Tracker [98]Release Notes - [99]Brand Guidelines [100]Code of Conduct - [101]Connect [102]Twitter [103]GitHub [104]Slack [105]r/golang - [106]Meetup [107]Golang Weekly +[83] Why Go [84] Use Cases [85] Case Studies +[86] Get Started [87] Playground [88] Tour [89] Stack Overflow [90] Help +[91] Packages [92] Standard Library [93] About Go Packages +[94] About [95] Download [96] Blog [97] Issue Tracker [98] Release Notes [99] +Brand Guidelines [100] Code of Conduct +[101] Connect [102] Twitter [103] GitHub [104] Slack [105] r/golang [106] +Meetup [107] Golang Weekly +Opens in new window. +The Go Gopher - Opens in new window. + • [108]Copyright + • [109]Terms of Service + • [110] Privacy Policy + • [111] Report an Issue + • System theme Dark theme Light theme - The Go Gopher - * [108]Copyright - * [109]Terms of Service - * [110]Privacy Policy - * [111]Report an Issue - * (BUTTON) System theme Dark theme Light theme +[113] Google logo +go.dev uses cookies from Google to deliver and enhance the quality of its +services and to analyze traffic. [114]Learn more. +Okay - [112]Google logo +References: - go.dev uses cookies from Google to deliver and enhance the quality of - its services and to analyze traffic. [113]Learn more. - - (BUTTON) Okay - -References - - 1. https://www.googletagmanager.com/ns.html?id=GTM-W8MVQXG - 2. https://go.dev/ - 3. https://go.dev/doc/effective_go#main-content - 4. https://go.dev/doc/effective_go - 5. https://go.dev/solutions/case-studies - 6. https://go.dev/solutions/use-cases - 7. https://go.dev/security/ - 8. https://go.dev/learn/ - 9. https://go.dev/doc/effective_go - 10. https://go.dev/doc/effective_go - 11. https://go.dev/doc - 12. https://pkg.go.dev/std - 13. https://go.dev/doc/devel/release - 14. https://pkg.go.dev/ - 15. https://go.dev/doc/effective_go - 16. https://go.dev/talks/ - 17. https://www.meetup.com/pro/go - 18. https://go.dev/wiki/Conferences - 19. https://go.dev/blog - 20. https://go.dev/help - 21. https://groups.google.com/g/golang-nuts - 22. https://github.com/golang - 23. https://twitter.com/golang - 24. https://www.reddit.com/r/golang/ - 25. https://invite.slack.golangbridge.org/ - 26. https://stackoverflow.com/tags/go - 27. https://go.dev/ - 28. https://go.dev/doc/effective_go - 29. https://go.dev/doc/effective_go - 30. https://go.dev/solutions/case-studies - 31. https://go.dev/solutions/use-cases - 32. https://go.dev/security/ - 33. https://go.dev/learn/ - 34. https://go.dev/doc/effective_go - 35. https://go.dev/doc/effective_go - 36. https://go.dev/doc/effective_go - 37. https://go.dev/doc - 38. https://pkg.go.dev/std - 39. https://go.dev/doc/devel/release - 40. https://pkg.go.dev/ - 41. https://go.dev/doc/effective_go - 42. https://go.dev/doc/effective_go - 43. https://go.dev/talks/ - 44. https://www.meetup.com/pro/go - 45. https://go.dev/wiki/Conferences - 46. https://go.dev/blog - 47. https://go.dev/help - 48. https://groups.google.com/g/golang-nuts - 49. https://github.com/golang - 50. https://twitter.com/golang - 51. https://www.reddit.com/r/golang/ - 52. https://invite.slack.golangbridge.org/ - 53. https://stackoverflow.com/tags/go - 54. https://go.dev/doc/ - 55. https://go.dev/doc/effective_go - 56. https://go.dev/ref/spec - 57. https://go.dev/tour/ - 58. https://go.dev/doc/code.html - 59. https://go.dev/issue/28782 - 60. https://go.dev/src/ - 61. https://go.dev/ - 62. https://go.dev/pkg/strings/#example-Map - 63. https://go.dev/doc/comment - 64. https://go.dev/doc/effective_go#blank - 65. https://go.dev/ref/spec#Rune_literals - 66. https://go.dev/doc/effective_go#blank - 67. https://go.dev/doc/effective_go#pointers_vs_values - 68. https://go.dev/doc/effective_go#initialization - 69. https://go.dev/doc/effective_go#type_switch - 70. https://go.dev/doc/effective_go#for - 71. https://go.dev/doc/effective_go#maps - 72. https://go.dev/pkg/net/http/pprof/ - 73. https://go.dev/doc/effective_go#interfaces_and_types - 74. https://go.dev/pkg/encoding/json/ - 75. https://go.dev/pkg/encoding/json/#Marshaler - 76. https://go.dev/doc/effective_go#interface_conversions - 77. https://go.dev/pkg/encoding/json/#RawMessage - 78. https://go.dev/pkg/runtime#NumCPU - 79. https://go.dev/pkg/runtime#GOMAXPROCS - 80. https://go.dev/blog/concurrency-is-not-parallelism - 81. https://go.dev/doc/effective_go#interface_conversions - 82. https://go.dev/pkg/html/template/ - 83. https://go.dev/solutions/ - 84. https://go.dev/solutions/use-cases - 85. https://go.dev/solutions/case-studies - 86. https://go.dev/learn/ - 87. https://go.dev/play - 88. https://go.dev/tour/ - 89. https://stackoverflow.com/questions/tagged/go?tab=Newest - 90. https://go.dev/help/ - 91. https://pkg.go.dev/ - 92. https://go.dev/pkg/ - 93. https://pkg.go.dev/about - 94. https://go.dev/project - 95. https://go.dev/dl/ - 96. https://go.dev/blog/ - 97. https://github.com/golang/go/issues - 98. https://go.dev/doc/devel/release - 99. https://go.dev/brand - 100. https://go.dev/conduct - 101. https://www.twitter.com/golang - 102. https://www.twitter.com/golang - 103. https://github.com/golang - 104. https://invite.slack.golangbridge.org/ - 105. https://reddit.com/r/golang - 106. https://www.meetup.com/pro/go - 107. https://golangweekly.com/ - 108. https://go.dev/copyright - 109. https://go.dev/tos - 110. http://www.google.com/intl/en/policies/privacy/ - 111. https://go.dev/s/website-issue - 112. https://google.com/ - 113. https://policies.google.com/technologies/cookies +[1] https://go.dev/ +[2] https://go.dev/doc/effective_go#main-content +[3] https://go.dev/doc/effective_go# +[4] https://go.dev/solutions/case-studies +[5] https://go.dev/solutions/use-cases +[6] https://go.dev/security/ +[7] https://go.dev/learn/ +[8] https://go.dev/doc/effective_go# +[9] https://go.dev/doc/effective_go +[10] https://go.dev/doc +[11] https://pkg.go.dev/std +[12] https://go.dev/doc/devel/release +[13] https://pkg.go.dev/ +[14] https://go.dev/doc/effective_go# +[15] https://go.dev/talks/ +[16] https://www.meetup.com/pro/go +[17] https://go.dev/wiki/Conferences +[18] https://go.dev/blog +[19] https://go.dev/help +[20] https://groups.google.com/g/golang-nuts +[21] https://github.com/golang +[22] https://twitter.com/golang +[23] https://www.reddit.com/r/golang/ +[24] https://invite.slack.golangbridge.org/ +[25] https://stackoverflow.com/tags/go +[27] https://go.dev/ +[28] https://go.dev/doc/effective_go# +[29] https://go.dev/doc/effective_go# +[30] https://go.dev/solutions/case-studies +[31] https://go.dev/solutions/use-cases +[32] https://go.dev/security/ +[33] https://go.dev/learn/ +[34] https://go.dev/doc/effective_go# +[35] https://go.dev/doc/effective_go# +[36] https://go.dev/doc/effective_go +[37] https://go.dev/doc +[38] https://pkg.go.dev/std +[39] https://go.dev/doc/devel/release +[40] https://pkg.go.dev/ +[41] https://go.dev/doc/effective_go# +[42] https://go.dev/doc/effective_go# +[43] https://go.dev/talks/ +[44] https://www.meetup.com/pro/go +[45] https://go.dev/wiki/Conferences +[46] https://go.dev/blog +[47] https://go.dev/help +[48] https://groups.google.com/g/golang-nuts +[49] https://github.com/golang +[50] https://twitter.com/golang +[51] https://www.reddit.com/r/golang/ +[52] https://invite.slack.golangbridge.org/ +[53] https://stackoverflow.com/tags/go +[54] https://go.dev/doc/ +[55] https://go.dev/doc/effective_go +[56] https://go.dev/ref/spec +[57] https://go.dev/tour/ +[58] https://go.dev/doc/code.html +[59] https://go.dev/issue/28782 +[60] https://go.dev/src/ +[61] https://go.dev/ +[62] https://go.dev/pkg/strings/#example-Map +[63] https://go.dev/doc/comment +[64] https://go.dev/doc/effective_go#blank +[65] https://go.dev/ref/spec#Rune_literals +[66] https://go.dev/doc/effective_go#blank +[67] https://go.dev/doc/effective_go#pointers_vs_values +[68] https://go.dev/doc/effective_go#initialization +[69] https://go.dev/doc/effective_go#type_switch +[70] https://go.dev/doc/effective_go#for +[71] https://go.dev/doc/effective_go#maps +[72] https://go.dev/pkg/net/http/pprof/ +[73] https://go.dev/doc/effective_go#interfaces_and_types +[74] https://go.dev/pkg/encoding/json/ +[75] https://go.dev/pkg/encoding/json/#Marshaler +[76] https://go.dev/doc/effective_go#interface_conversions +[77] https://go.dev/pkg/encoding/json/#RawMessage +[78] https://go.dev/pkg/runtime#NumCPU +[79] https://go.dev/pkg/runtime#GOMAXPROCS +[80] https://go.dev/blog/concurrency-is-not-parallelism +[81] https://go.dev/doc/effective_go#interface_conversions +[82] https://go.dev/pkg/html/template/ +[83] https://go.dev/solutions/ +[84] https://go.dev/solutions/use-cases +[85] https://go.dev/solutions/case-studies +[86] https://go.dev/learn/ +[87] https://go.dev/play +[88] https://go.dev/tour/ +[89] https://stackoverflow.com/questions/tagged/go?tab=Newest +[90] https://go.dev/help/ +[91] https://pkg.go.dev/ +[92] https://go.dev/pkg/ +[93] https://pkg.go.dev/about +[94] https://go.dev/project +[95] https://go.dev/dl/ +[96] https://go.dev/blog/ +[97] https://github.com/golang/go/issues +[98] https://go.dev/doc/devel/release +[99] https://go.dev/brand +[100] https://go.dev/conduct +[101] https://www.twitter.com/golang +[102] https://www.twitter.com/golang +[103] https://github.com/golang +[104] https://invite.slack.golangbridge.org/ +[105] https://reddit.com/r/golang +[106] https://www.meetup.com/pro/go +[107] https://golangweekly.com/ +[108] https://go.dev/copyright +[109] https://go.dev/tos +[110] http://www.google.com/intl/en/policies/privacy/ +[111] https://go.dev/s/website-issue +[113] https://google.com/ +[114] https://policies.google.com/technologies/cookies diff --git a/static/archive/grugbrain-dev-dzqozx.txt b/static/archive/grugbrain-dev-dzqozx.txt index 5f0143f..aa6da09 100644 --- a/static/archive/grugbrain-dev-dzqozx.txt +++ b/static/archive/grugbrain-dev-dzqozx.txt @@ -1,855 +1,817 @@ - [1]grug +[1] grug The Grug Brained Developer A layman's guide to thinking like the self-aware smol brained - Introduction +Introduction - this collection of thoughts on software development gathered by grug - brain developer +this collection of thoughts on software development gathered by grug brain +developer - grug brain developer not so smart, but grug brain developer program - many long year and learn some things although mostly still confused +grug brain developer not so smart, but grug brain developer program many long +year and learn some things although mostly still confused - grug brain developer try collect learns into small, easily digestible - and funny page, not only for you, the young grug, but also for him - because as grug brain developer get older he forget important things, - like what had for breakfast or if put pants on +grug brain developer try collect learns into small, easily digestible and funny +page, not only for you, the young grug, but also for him because as grug brain +developer get older he forget important things, like what had for breakfast or +if put pants on - big brained developers are many, and some not expected to like this, - make sour face +big brained developers are many, and some not expected to like this, make sour +face - THINK they are big brained developers many, many more, and more even - definitely probably maybe not like this, many sour face (such is - internet) +THINK they are big brained developers many, many more, and more even definitely +probably maybe not like this, many sour face (such is internet) - (note: grug once think big brained but learn hard way) +(note: grug once think big brained but learn hard way) - is fine! +is fine! - is free country sort of and end of day not really matter too much, but - grug hope you fun reading and maybe learn from many, many mistake grug - make over long program life +is free country sort of and end of day not really matter too much, but grug +hope you fun reading and maybe learn from many, many mistake grug make over +long program life - [2]The Eternal Enemy: Complexity +[2]The Eternal Enemy: Complexity - apex predator of grug is complexity +apex predator of grug is complexity - complexity bad +complexity bad - say again: +say again: - complexity very bad +complexity very bad - you say now: +you say now: - complexity very, very bad +complexity very, very bad - given choice between complexity or one on one against t-rex, grug take - t-rex: at least grug see t-rex +given choice between complexity or one on one against t-rex, grug take t-rex: +at least grug see t-rex - complexity is spirit demon that enter codebase through well-meaning but - ultimately very clubbable non grug-brain developers and project - managers who not fear complexity spirit demon or even know about - sometime +complexity is spirit demon that enter codebase through well-meaning but +ultimately very clubbable non grug-brain developers and project managers who +not fear complexity spirit demon or even know about sometime - one day code base understandable and grug can get work done, everything - good! +one day code base understandable and grug can get work done, everything good! - next day impossible: complexity demon spirit has entered code and very - dangerous situation! +next day impossible: complexity demon spirit has entered code and very +dangerous situation! - grug no able see complexity demon, but grug sense presence in code base +grug no able see complexity demon, but grug sense presence in code base - demon complexity spirit mocking him make change here break unrelated - thing there what!?! mock mock mock ha ha so funny grug love programming - and not becoming shiney rock speculator like grug senior advise +demon complexity spirit mocking him make change here break unrelated thing +there what!?! mock mock mock ha ha so funny grug love programming and not +becoming shiney rock speculator like grug senior advise - club not work on demon spirit complexity and bad idea actually hit - developer who let spirit in with club: sometimes grug himself! +club not work on demon spirit complexity and bad idea actually hit developer +who let spirit in with club: sometimes grug himself! - sadly, often grug himself +sadly, often grug himself - so grug say again and say often: complexity very, very bad +so grug say again and say often: complexity very, very bad [3]Saying No - best weapon against complexity spirit demon is magic word: "no" +best weapon against complexity spirit demon is magic word: "no" - "no, grug not build that feature" +"no, grug not build that feature" - "no, grug not build that abstraction" +"no, grug not build that abstraction" - "no, grug not put water on body every day or drink less black think - juice you stop repeat ask now" +"no, grug not put water on body every day or drink less black think juice you +stop repeat ask now" - note, this good engineering advice but bad career advice: "yes" is - magic word for more shiney rock and put in charge of large tribe of - developer +note, this good engineering advice but bad career advice: "yes" is magic word +for more shiney rock and put in charge of large tribe of developer - sad but true: learn "yes" then learn blame other grugs when fail, ideal - career advice +sad but true: learn "yes" then learn blame other grugs when fail, ideal career +advice - but grug must to grug be true, and "no" is magic grug word. Hard say at - first, especially if you nice grug and don't like disappoint people - (many such grugs!) but easier over time even though shiney rock pile - not as high as might otherwise be +but grug must to grug be true, and "no" is magic grug word. Hard say at first, +especially if you nice grug and don't like disappoint people (many such grugs!) +but easier over time even though shiney rock pile not as high as might +otherwise be - is ok: how many shiney rock grug really need anyway? +is ok: how many shiney rock grug really need anyway? [4]Saying ok - sometimes compromise necessary or no shiney rock, mean no dinosaur - meat, not good, wife firmly remind grug about young grugs at home need - roof, food, and so forth, no interest in complexity demon spirit rant - by grug for fiftieth time +sometimes compromise necessary or no shiney rock, mean no dinosaur meat, not +good, wife firmly remind grug about young grugs at home need roof, food, and so +forth, no interest in complexity demon spirit rant by grug for fiftieth time - in this situation, grug recommend "ok" +in this situation, grug recommend "ok" - "ok, grug build that feature" +"ok, grug build that feature" - then grug spend time think of [5]80/20 solution to problem and build - that instead. - 80/20 solution say "80 want with 20 code" solution maybe not have all - bell-whistle that project manager want, maybe a little ugly, but work - and deliver most value, and keep demon complexity spirit at bay for - most part to extent +then grug spend time think of [5]80/20 solution to problem and build that +instead. +80/20 solution say "80 want with 20 code" solution maybe not have all +bell-whistle that project manager want, maybe a little ugly, but work and +deliver most value, and keep demon complexity spirit at bay for most part to +extent - sometimes probably best just not tell project manager and do it 80/20 - way. easier forgive than permission, project managers mind like - butterfly at times overworked and dealing with many grugs. often forget - what even feature supposed to do or move on or quit or get fired grug - see many such cases +sometimes probably best just not tell project manager and do it 80/20 way. +easier forgive than permission, project managers mind like butterfly at times +overworked and dealing with many grugs. often forget what even feature supposed +to do or move on or quit or get fired grug see many such cases - anyway is in project managers best interest anyway so grug not to feel - too bad for this approach usually +anyway is in project managers best interest anyway so grug not to feel too bad +for this approach usually [6]Factoring Your Code - next strategy very harder: break code base up properly (fancy word: - "factor your code properly") here is hard give general advice because - each system so different. however, one thing grug come to believe: not - factor your application too early! +next strategy very harder: break code base up properly (fancy word: "factor +your code properly") here is hard give general advice because each system so +different. however, one thing grug come to believe: not factor your application +too early! - early on in project everything very abstract and like water: very - little solid holds for grug's struggling brain to hang on to. take time - to develop "shape" of system and learn what even doing. grug try not to - factor in early part of project and then, at some point, good - cut-points emerge from code base +early on in project everything very abstract and like water: very little solid +holds for grug's struggling brain to hang on to. take time to develop "shape" +of system and learn what even doing. grug try not to factor in early part of +project and then, at some point, good cut-points emerge from code base - good cut point has narrow interface with rest of system: small number - of functions or abstractions that hide complexity demon internally, - like trapped in crystal +good cut point has narrow interface with rest of system: small number of +functions or abstractions that hide complexity demon internally, like trapped +in crystal - grug quite satisfied when complexity demon trapped properly in crystal, - is best feeling to trap mortal enemy! +grug quite satisfied when complexity demon trapped properly in crystal, is best +feeling to trap mortal enemy! - grug try watch patiently as cut points emerge from code and slowly - refactor, with code base taking shape over time along with experience. - no hard/ fast rule for this: grug know cut point when grug see cut - point, just take time to build skill in seeing, patience +grug try watch patiently as cut points emerge from code and slowly refactor, +with code base taking shape over time along with experience. no hard/ fast rule +for this: grug know cut point when grug see cut point, just take time to build +skill in seeing, patience - sometimes grug go too early and get abstractions wrong, so grug bias - towards waiting +sometimes grug go too early and get abstractions wrong, so grug bias towards +waiting - big brain developers often not like this at all and invent many - abstractions start of project +big brain developers often not like this at all and invent many abstractions +start of project - grug tempted to reach for club and yell "big brain no maintain code! - big brain move on next architecture committee leave code for grug deal - with!" +grug tempted to reach for club and yell "big brain no maintain code! big brain +move on next architecture committee leave code for grug deal with!" - but grug learn control passions, major difference between grug and - animal +but grug learn control passions, major difference between grug and animal - instead grug try to limit damage of big brain developer early in - project by giving them thing like UML diagram (not hurt code, probably - throw away anyway) or by demanding working demo tomorrow +instead grug try to limit damage of big brain developer early in project by +giving them thing like UML diagram (not hurt code, probably throw away anyway) +or by demanding working demo tomorrow - working demo especially good trick: force big brain make something to - actually work to talk about and code to look at that do thing, will - help big brain see reality on ground more quickly +working demo especially good trick: force big brain make something to actually +work to talk about and code to look at that do thing, will help big brain see +reality on ground more quickly - remember! big brain have big brain! need only be harness for good and - not in service of spirit complexity demon on accident, many times seen +remember! big brain have big brain! need only be harness for good and not in +service of spirit complexity demon on accident, many times seen - (best grug brain able to herd multiple big brain in right direction and - produce many complexity demon trap crystals, large shiney rock pile - awaits such grug!) +(best grug brain able to herd multiple big brain in right direction and produce +many complexity demon trap crystals, large shiney rock pile awaits such grug!) - also sometimes call demo approach "prototype", sound fancier to project - manager +also sometimes call demo approach "prototype", sound fancier to project manager - grug say prototype early in software making, especially if many big - brains +grug say prototype early in software making, especially if many big brains - [7]Testing +[7]Testing - grug have love/hate relationship with test: test save grug many, many - uncountable time and grug love and respect test +grug have love/hate relationship with test: test save grug many, many +uncountable time and grug love and respect test - unfortunately also many test shamans exist. some test shaman make test - idol, demand things like "first test" before grug even write code or - have any idea what grug doing domain! +unfortunately also many test shamans exist. some test shaman make test idol, +demand things like "first test" before grug even write code or have any idea +what grug doing domain! - how grug test what grug not even understand domain yet!? +how grug test what grug not even understand domain yet!? - "Oh, don't worry: the tests will show you what you need to do." +"Oh, don't worry: the tests will show you what you need to do." - grug once again catch grug slowly reaching for club, but grug stay calm +grug once again catch grug slowly reaching for club, but grug stay calm - grug instead prefer write most tests after prototype phase, when code - has begun firm up +grug instead prefer write most tests after prototype phase, when code has begun +firm up - but, note well: grug must here be very disciplined! +but, note well: grug must here be very disciplined! - easy grug to move on and not write tests because "work on grugs - machine"! +easy grug to move on and not write tests because "work on grugs machine"! - this very, very bad: no guarantee work on other machine and no - guarantee work on grug machine in future, many times +this very, very bad: no guarantee work on other machine and no guarantee work +on grug machine in future, many times - test shaman have good point on importance of test, even if test shaman - often sometimes not complete useful feature in life and talk only about - test all time, deserve of club but heart in right place +test shaman have good point on importance of test, even if test shaman often +sometimes not complete useful feature in life and talk only about test all +time, deserve of club but heart in right place - also, test shaman often talk unit test very much, but grug not find so - useful. grug experience that ideal tests are not unit test or either - end-to-end test, but in-between test +also, test shaman often talk unit test very much, but grug not find so useful. +grug experience that ideal tests are not unit test or either end-to-end test, +but in-between test - [8]unit tests fine, ok, but break as implementation change (much - compared api!) and make refactor hard and, frankly, many bugs anyway - often due interactions other code. often throw away when code change. +[8]unit tests fine, ok, but break as implementation change (much compared api!) +and make refactor hard and, frankly, many bugs anyway often due interactions +other code. often throw away when code change. - grug write unit test mostly at start of project, help get things going - but not get too attached or expect value long time +grug write unit test mostly at start of project, help get things going but not +get too attached or expect value long time - [9]end to end tests good, show whole system work, but! hard to - understand when break and drive grug crazy very often, sometimes grugs - just end up ignoring because "oh, that break all time" very bad! +[9]end to end tests good, show whole system work, but! hard to understand when +break and drive grug crazy very often, sometimes grugs just end up ignoring +because "oh, that break all time" very bad! - in-between tests, grug hear shaman call [10]"integration tests" - sometime often with sour look on face. but grug say integration test - sweet spot according to grug: high level enough test correctness of - system, low level enough, with good debugger, easy to see what break +in-between tests, grug hear shaman call [10]"integration tests" sometime often +with sour look on face. but grug say integration test sweet spot according to +grug: high level enough test correctness of system, low level enough, with good +debugger, easy to see what break - grug prefer some unit tests especially at start but not 100% all code - test and definitely not "first test". "test along the way" work pretty - well for grug, especially as grug figure things out +grug prefer some unit tests especially at start but not 100% all code test and +definitely not "first test". "test along the way" work pretty well for grug, +especially as grug figure things out - grug focus much ferocious integration test effort as cut point emerge - and system stabilize! cut point api hopefully stable compared - implementation and integration test remain valuable many long time, and - easy debug +grug focus much ferocious integration test effort as cut point emerge and +system stabilize! cut point api hopefully stable compared implementation and +integration test remain valuable many long time, and easy debug - also small, well curated end-to-end test suite is created to be kept - working religiously on pain of clubbing. focus of important end-to-end - test on most common UI features and few most important edge cases, but - not too many or become impossible maintain and then ignored +also small, well curated end-to-end test suite is created to be kept working +religiously on pain of clubbing. focus of important end-to-end test on most +common UI features and few most important edge cases, but not too many or +become impossible maintain and then ignored - this ideal set of test to grug +this ideal set of test to grug - you may not like, but this peak grug testing +you may not like, but this peak grug testing - also, grug dislike [11]mocking in test, prefer only when absolute - necessary to (rare/never) and coarse grain mocking (cut points/systems) - only at that +also, grug dislike [11]mocking in test, prefer only when absolute necessary to +(rare/never) and coarse grain mocking (cut points/systems) only at that - one exception "first test" dislike by grug: when bug found. grug always - try first reproduce bug with regression test then fix bug, this case - only for some reason work better +one exception "first test" dislike by grug: when bug found. grug always try +first reproduce bug with regression test then fix bug, this case only for some +reason work better - [12]Agile +[12]Agile - grug think agile not terrible, not good +grug think agile not terrible, not good - end of day, not worst way to organize development, maybe better than - others grug supposes is fine +end of day, not worst way to organize development, maybe better than others +grug supposes is fine - danger, however, is agile shaman! many, many shiney rock lost to agile - shaman! +danger, however, is agile shaman! many, many shiney rock lost to agile shaman! - whenever agile project fail, agile shaman say "you didn't do agile - right!" grug note this awfully convenient for agile shaman, ask more - shiney rock better agile train young grugs on agile, danger! +whenever agile project fail, agile shaman say "you didn't do agile right!" grug +note this awfully convenient for agile shaman, ask more shiney rock better +agile train young grugs on agile, danger! - grug tempted reach for club when too much agile talk happen but always - stay calm +grug tempted reach for club when too much agile talk happen but always stay +calm - prototyping, tools and hiring good grugs better key to success - software: agile process ok and help some but sometimes hurt taken too - seriously +prototyping, tools and hiring good grugs better key to success software: agile +process ok and help some but sometimes hurt taken too seriously - grug say [13]no silver club fix all software problems no matter what - agile shaman say (danger!) +grug say [13]no silver club fix all software problems no matter what agile +shaman say (danger!) - [14]Refactoring +[14]Refactoring - refactoring fine activity and often good idea, especially later in - project when code firmed up +refactoring fine activity and often good idea, especially later in project when +code firmed up - however, grug note that many times in career "refactors" go horribly - off rails and end up causing more harm than good +however, grug note that many times in career "refactors" go horribly off rails +and end up causing more harm than good - grug not sure exactly why some refactors work well, some fail, but grug - notice that larger refactor, more likely failure appear to be +grug not sure exactly why some refactors work well, some fail, but grug notice +that larger refactor, more likely failure appear to be - so grug try to keep refactors relatively small and not be "too far out - from shore" during refactor. ideally system work entire time and each - step of finish before other begin. +so grug try to keep refactors relatively small and not be "too far out from +shore" during refactor. ideally system work entire time and each step of finish +before other begin. - end-to-end tests are life saver here, but often very hard understand - why broke... such is refactor life. +end-to-end tests are life saver here, but often very hard understand why +broke... such is refactor life. - also grug notice that introducing too much abstraction often lead to - refactor failure and system failure. good example was [15]J2EE - introduce, many big brain sit around thinking too much abstraction, - nothing good came of it many project hurt +also grug notice that introducing too much abstraction often lead to refactor +failure and system failure. good example was [15]J2EE introduce, many big brain +sit around thinking too much abstraction, nothing good came of it many project +hurt - another good example when company grug work for introduce [16]OSGi to - help manage/trap spriit complexity demon in code base. not only OSGi - not help, but make complexity demon much more powerful! took multiple - man year of best developers to rework as well to boot! more complex - spirit and now features impossible implement! very bad! +another good example when company grug work for introduce [16]OSGi to help +manage/trap spriit complexity demon in code base. not only OSGi not help, but +make complexity demon much more powerful! took multiple man year of best +developers to rework as well to boot! more complex spirit and now features +impossible implement! very bad! - [17]Chesterton's Fence +[17]Chesterton's Fence - wise grug shaman [18]chesterton once say +wise grug shaman [18]chesterton once say - here exists in such a case a certain institution or law; let us say, - for the sake of simplicity, a fence or gate erected across a road. - The more modern type of reformer goes gaily up to it and says, “I - don’t see the use of this; let us clear it away.” To which the more - intelligent type of reformer will do well to answer: “If you don’t - see the use of it, I certainly won’t let you clear it away. Go away - and think. Then, when you can come back and tell me that you do see - the use of it, I may allow you to destroy it.” + here exists in such a case a certain institution or law; let us say, for + the sake of simplicity, a fence or gate erected across a road. The more + modern type of reformer goes gaily up to it and says, “I don’t see the use + of this; let us clear it away.” To which the more intelligent type of + reformer will do well to answer: “If you don’t see the use of it, I + certainly won’t let you clear it away. Go away and think. Then, when you + can come back and tell me that you do see the use of it, I may allow you to + destroy it.” - many older grug learn this lesson well not start tearing code out willy - nilly, no matter how ugly look +many older grug learn this lesson well not start tearing code out willy nilly, +no matter how ugly look - grug understand all programmer platonists at some level wish music of - spheres perfection in code. but danger is here, world is ugly and - gronky many times and so also must code be +grug understand all programmer platonists at some level wish music of spheres +perfection in code. but danger is here, world is ugly and gronky many times and +so also must code be - humility not often come big brained or think big brained easily or grug - even, but grug often find "oh, grug no like look of this, grug fix" - lead many hours pain grug and no better or system worse even +humility not often come big brained or think big brained easily or grug even, +but grug often find "oh, grug no like look of this, grug fix" lead many hours +pain grug and no better or system worse even - grug early on in career often charge into code base waving club wildly - and smash up everything, learn not good +grug early on in career often charge into code base waving club wildly and +smash up everything, learn not good - grug not say no improve system ever, quite foolish, but recommend take - time understand system first especially bigger system is and is respect - code working today even if not perfect +grug not say no improve system ever, quite foolish, but recommend take time +understand system first especially bigger system is and is respect code working +today even if not perfect - here tests often good hint for why fence not to be smashed! +here tests often good hint for why fence not to be smashed! - [19]Microservices +[19]Microservices - grug wonder why big brain take hardest problem, factoring system - correctly, and introduce network call too +grug wonder why big brain take hardest problem, factoring system correctly, and +introduce network call too - seem very confusing to grug +seem very confusing to grug - [20]Tools +[20]Tools - grug love tool. tool and control passion what separate grug from - dinosaurs! tool allow grug brain to create code that not possible - otherwise by doing thinking for grug, always good relief! grug always - spend time in new place learning tools around him to maximize - productivity: learn tools for two weeks make development often twice - faster and often have dig around ask other developers help, no docs +grug love tool. tool and control passion what separate grug from dinosaurs! +tool allow grug brain to create code that not possible otherwise by doing +thinking for grug, always good relief! grug always spend time in new place +learning tools around him to maximize productivity: learn tools for two weeks +make development often twice faster and often have dig around ask other +developers help, no docs - code completion in IDE allow grug not have remembered all API, very - important! +code completion in IDE allow grug not have remembered all API, very important! - java programming nearly impossible without it for grug! +java programming nearly impossible without it for grug! - really make grug think some time +really make grug think some time - good debugger worth weight in shiney rocks, in fact also more: when - faced with bug grug would often trade all shiney rock and perhaps few - children for good debugger and anyway debugger no weigh anything far as - grug can tell +good debugger worth weight in shiney rocks, in fact also more: when faced with +bug grug would often trade all shiney rock and perhaps few children for good +debugger and anyway debugger no weigh anything far as grug can tell - grug always recommend new programmer learn available debugger very - deeply, features like conditional break points, expression evaluation, - stack navigation, etc teach new grug more about computer than - university class often! +grug always recommend new programmer learn available debugger very deeply, +features like conditional break points, expression evaluation, stack +navigation, etc teach new grug more about computer than university class often! - grug say never be not improving tooling +grug say never be not improving tooling - [21]Type Systems +[21]Type Systems - grug very like type systems make programming easier. for grug, type - systems most value when grug hit dot on keyboard and list of things - grug can do pop up magic. this 90% of value of type system or more to - grug +grug very like type systems make programming easier. for grug, type systems +most value when grug hit dot on keyboard and list of things grug can do pop up +magic. this 90% of value of type system or more to grug - big brain type system shaman often say type correctness main point type - system, but grug note some big brain type system shaman not often ship - code. grug suppose code never shipped is correct, in some sense, but - not really what grug mean when say correct +big brain type system shaman often say type correctness main point type system, +but grug note some big brain type system shaman not often ship code. grug +suppose code never shipped is correct, in some sense, but not really what grug +mean when say correct - grug say tool magic pop up of what can do and complete of code major - most benefit of type system, correctness also good but not so nearly so - much +grug say tool magic pop up of what can do and complete of code major most +benefit of type system, correctness also good but not so nearly so much - also, often sometimes caution beware big brains here! +also, often sometimes caution beware big brains here! - some type big brain think in type systems and talk in lemmas, potential - danger! +some type big brain think in type systems and talk in lemmas, potential danger! - danger abstraction too high, big brain type system code become astral - projection of platonic generic turing model of computation into code - base. grug confused and agree some level very elegant but also very - hard do anything like record number of club inventory for Grug Inc. - task at hand +danger abstraction too high, big brain type system code become astral +projection of platonic generic turing model of computation into code base. grug +confused and agree some level very elegant but also very hard do anything like +record number of club inventory for Grug Inc. task at hand - generics especially dangerous here, grug try limit generics to - container classes for most part where most value add +generics especially dangerous here, grug try limit generics to container +classes for most part where most value add - temptation generics very large is trick! spirit demon complex love this - one trick! beware! +temptation generics very large is trick! spirit demon complex love this one +trick! beware! - always most value type system come: hit dot see what grug can do, never - forget! +always most value type system come: hit dot see what grug can do, never forget! - [22]Expression Complexity +[22]Expression Complexity - grug once like to minimize lines of code much as possible. write code - like this: - if(contact && !contact.isActive() && (contact.inGroup(FAMILY) || contact.inGro -up(FRIENDS))) { +grug once like to minimize lines of code much as possible. write code like +this: + + if(contact && !contact.isActive() && (contact.inGroup(FAMILY) || contact.inGroup(FRIENDS))) { // ... } - over time grug learn this hard debug, learn prefer write like so: +over time grug learn this hard debug, learn prefer write like so: + if(contact) { var contactIsInactive = !contact.isActive(); - var contactIsFamilyOrFriends = contact.inGroup(FAMILY) || contact.inGroup(FR -IENDS); + var contactIsFamilyOrFriends = contact.inGroup(FAMILY) || contact.inGroup(FRIENDS); if(contactIsInactive && contactIsFamilyOrFriends) { // ... } } - grug hear screams from young grugs at horror of many line of code and - pointless variable and grug prepare defend self with club +grug hear screams from young grugs at horror of many line of code and pointless +variable and grug prepare defend self with club - club fight start with other developers attack and grug yell: "easier - debug! see result of each expression more clearly and good name! easier - understand conditional expression! EASIER DEBUG!" +club fight start with other developers attack and grug yell: "easier debug! see +result of each expression more clearly and good name! easier understand +conditional expression! EASIER DEBUG!" - definitely easier debug and once club fight end calm down and young - grug think a bit, they realize grug right +definitely easier debug and once club fight end calm down and young grug think +a bit, they realize grug right - grug still catch grug writing code like first example and often regret, - so grug not judge young grug +grug still catch grug writing code like first example and often regret, so grug +not judge young grug - [23]DRY +[23]DRY - [24]DRY mean Don't Repeat Self, powerful maxim over mind of most - developers +[24]DRY mean Don't Repeat Self, powerful maxim over mind of most developers - grug respect DRY and good advice, however grug recommend balance in all - things, as gruggest big brain aristotle recommend +grug respect DRY and good advice, however grug recommend balance in all things, +as gruggest big brain aristotle recommend - grug note humourous graph by Lea Verou correspond with grug passion not - repeat: - code concerns over time +grug note humourous graph by Lea Verou correspond with grug passion not repeat: - over time past ten years program grug not as concerned repeat code. so - long as repeat code simple enough and obvious enough, and grug begin - feel repeat/copy paste code with small variation is better than many - callback/closures passed arguments or elaborate object model: too hard - complex for too little benefit at times +code concerns over time - hard balance here, repeat code always still make grug stare and say - "mmm" often, but experience show repeat code sometimes often better - than complex DRY solution +over time past ten years program grug not as concerned repeat code. so long as +repeat code simple enough and obvious enough, and grug begin feel repeat/copy +paste code with small variation is better than many callback/closures passed +arguments or elaborate object model: too hard complex for too little benefit at +times - note well! grug encourage over literal developer not take does work - line too serious, is joke +hard balance here, repeat code always still make grug stare and say "mmm" +often, but experience show repeat code sometimes often better than complex DRY +solution - [25]Separation of Concerns (SoC) +note well! grug encourage over literal developer not take does work line too +serious, is joke - [26]Separation of Concern (SoC) another powerful idea over many - developer mind, idea to separate different aspects of system into - distinct sections code +[25]Separation of Concerns (SoC) - canonical example from web development: separation of style (css file), - markup (html file) and logic (javascript file) +[26]Separation of Concern (SoC) another powerful idea over many developer mind, +idea to separate different aspects of system into distinct sections code - here grug much more sour faced than DRY and in fact write big brained - essay on alternative design principle [27]locality of behavior (LoB) - against SoC +canonical example from web development: separation of style (css file), markup +(html file) and logic (javascript file) - grug much prefer put code on the thing that do the thing. now when grug - look at the thing grug know the thing what the thing do, alwasy good - relief! +here grug much more sour faced than DRY and in fact write big brained essay on +alternative design principle [27]locality of behavior (LoB) against SoC - when separate of concern grug must often all over tarnation many file - look understand what how button do, much confuse and time waste: bad! +grug much prefer put code on the thing that do the thing. now when grug look at +the thing grug know the thing what the thing do, alwasy good relief! - [28]Closures +when separate of concern grug must often all over tarnation many file look +understand what how button do, much confuse and time waste: bad! - grug like closures for right job and that job usually abstracting - operation over collection of objects +[28]Closures - grug warn closures like salt, type systems and generics: small amount - go long way, but easy spoil things too much use give heart attack +grug like closures for right job and that job usually abstracting operation +over collection of objects - javascript developers call very special complexity demon spirit in - javascript "callback hell" because too much closure used by javascript - libraries very sad but also javascript developer get what deserved let - grug be frank +grug warn closures like salt, type systems and generics: small amount go long +way, but easy spoil things too much use give heart attack - [29]Logging +javascript developers call very special complexity demon spirit in javascript +"callback hell" because too much closure used by javascript libraries very sad +but also javascript developer get what deserved let grug be frank - grug huge fan of logging and encourage lots of it, especially in cloud - deployed. some non-grugs say logging expensive and not important. grug - used think this way no more +[29]Logging - funny story: grug learn idol [30]rob pike working on logging at google - and decide: "if rob pike working on logging, what grug do there?!?" so - not pursue. turn out logging very important to google so of course best - programmer work on it, grug! +grug huge fan of logging and encourage lots of it, especially in cloud +deployed. some non-grugs say logging expensive and not important. grug used +think this way no more - don't be such grug brain, grug, much less shiney rock now! +funny story: grug learn idol [30]rob pike working on logging at google and +decide: "if rob pike working on logging, what grug do there?!?" so not pursue. +turn out logging very important to google so of course best programmer work on +it, grug! - oh well, grug end up at good company anyway and rob pike dress habit - [31]increasingly erratic, so all work out in end, but point stand: - logging very important! +don't be such grug brain, grug, much less shiney rock now! - grug tips on logging are: - * log all major logical branches within code (if/for) - * if "request" span multiple machine in cloud infrastructure, include - request ID in all so logs can be grouped - * if possible make log level dynamically controlled, so grug can turn - on/off when need debug issue (many!) - * if possible make log level per user, so can debug specific user - issue +oh well, grug end up at good company anyway and rob pike dress habit [31] +increasingly erratic, so all work out in end, but point stand: logging very +important! - last two points are especially handy club when fighting bugs in - production systems very often +grug tips on logging are: - unfortunately log libraries often very complex (java, [32]why you do?) - but worth investing time in getting logging infrastructure "just right" - pay off big later in grug experience + • log all major logical branches within code (if/for) + • if "request" span multiple machine in cloud infrastructure, include request + ID in all so logs can be grouped + • if possible make log level dynamically controlled, so grug can turn on/off + when need debug issue (many!) + • if possible make log level per user, so can debug specific user issue - logging need taught more in schools, grug think +last two points are especially handy club when fighting bugs in production +systems very often - [33]Concurrency +unfortunately log libraries often very complex (java, [32]why you do?) but +worth investing time in getting logging infrastructure "just right" pay off big +later in grug experience - grug, like all sane developer, fear concurrency +logging need taught more in schools, grug think - as much as possible, grug try to rely on simple concurrency models like - stateless web request handlers and simple remote job worker queues - where jobs no interdepend and simple api +[33]Concurrency - [34]optimistic concurrency seem work well for web stuff +grug, like all sane developer, fear concurrency - occasionally grug reach for [35]thread local variable, usually when - writing framework code +as much as possible, grug try to rely on simple concurrency models like +stateless web request handlers and simple remote job worker queues where jobs +no interdepend and simple api - some language have good concurrent data structure, like java - [36]ConcurrentHashMap but still need careful grug work to get right +[34]optimistic concurrency seem work well for web stuff - grug has never used [37]erlang, hear good things, but language look - wierd to grug sorry +occasionally grug reach for [35]thread local variable, usually when writing +framework code - [38]Optimizing +some language have good concurrent data structure, like java [36] +ConcurrentHashMap but still need careful grug work to get right - ultra biggest of brain developer once say: +grug has never used [37]erlang, hear good things, but language look wierd to +grug sorry - premature optimization is the root of all evil +[38]Optimizing - this everyone mostly know and grug in humble violent agreement with - ultra biggest of big brain +ultra biggest of brain developer once say: - grug recommend always to have concrete, real world perf profile showing - specific perf issue before begin optimizing. + premature optimization is the root of all evil - never know what actual issue might be, grug often surprise! very often! +this everyone mostly know and grug in humble violent agreement with ultra +biggest of big brain - beware only cpu focus: easy to see cpu and much big o notation thinking - having been done in school, but often not root of all slowness, - surprise to many including grug +grug recommend always to have concrete, real world perf profile showing +specific perf issue before begin optimizing. - hitting network equivalent of many, many millions cpu cycle and always - to be minimized if possible, note well big brain microservice - developer! +never know what actual issue might be, grug often surprise! very often! - inexperienced big brain developer see nested loop and often say - "O(n^2)? Not on my watch!" +beware only cpu focus: easy to see cpu and much big o notation thinking having +been done in school, but often not root of all slowness, surprise to many +including grug - complexity demon spirit smile +hitting network equivalent of many, many millions cpu cycle and always to be +minimized if possible, note well big brain microservice developer! - [39]APIs +inexperienced big brain developer see nested loop and often say "O(n^2)? Not on +my watch!" - grug love good apis. good apis not make grug think too much +complexity demon spirit smile - unfortunately, many apis very bad, make grug think quite a bit. this - happen many reasons, here two: - * API creators think in terms of implementation or domain of API, - rather than in terms of use of API - * API creators think too abstract and big brained +[39]APIs - usually grug not care too deeply about detail of api: want write file - or sort list or whatever, just want to call write() or sort() or - whatever +grug love good apis. good apis not make grug think too much - but big brain api developers say: +unfortunately, many apis very bad, make grug think quite a bit. this happen +many reasons, here two: - "not so fast, grug! is that file open for write? did you define a - Comparator for that sort?" + • API creators think in terms of implementation or domain of API, rather than + in terms of use of API + • API creators think too abstract and big brained - grug find self restraining hand reaching for club again +usually grug not care too deeply about detail of api: want write file or sort +list or whatever, just want to call write() or sort() or whatever - not care about that stuff right now, just want sort and write file mr - big brain! +but big brain api developers say: - grug recognize that big brain api designer have point and that sometime - these things matter, but often do not. big brain api developers better - if design for simple cases with simple api, make complex cases possible - with more complex api +"not so fast, grug! is that file open for write? did you define a Comparator +for that sort?" - grug call this "layering" apis: two or three different apis at - different level complexity for various grug needs +grug find self restraining hand reaching for club again - also, if object oriented, put api on thing instead of elsewhere. java - worst at this! +not care about that stuff right now, just want sort and write file mr big +brain! - grug want filter list in java +grug recognize that big brain api designer have point and that sometime these +things matter, but often do not. big brain api developers better if design for +simple cases with simple api, make complex cases possible with more complex api - "Did you convert it to a stream?" +grug call this "layering" apis: two or three different apis at different level +complexity for various grug needs - fine, grug convert to stream +also, if object oriented, put api on thing instead of elsewhere. java worst at +this! - "OK, now you can filter." +grug want filter list in java - OK, but now need return list! have stream! +"Did you convert it to a stream?" - "Well, did you collect your stream into a list?" +fine, grug convert to stream - what? +"OK, now you can filter." - "Define a Collector to collect your stream into a - list" +OK, but now need return list! have stream! - grug now swear on ancestor grave he club every single person in room, - but count two instead and remain calm +"Well, did you collect your stream into a list?" - put common thing like filter() on list and make return list, listen - well big brain java api developer! +what? - nobody care about "stream" or even hear of "stream" before, is not - networking api, all java grugs use list mr big brain! +"Define a Collector to collect your stream into a list" - [40]Parsing +grug now swear on ancestor grave he club every single person in room, but count +two instead and remain calm - grug love make programming language at drop of hat and say - [41]recursive descent most fun and beautiful way create parser +put common thing like filter() on list and make return list, listen well big +brain java api developer! - unfortunately many big brain school teach only parser generator tool. - here grug usual love of tool is not: parser generator tool generate - code of awful snakes nest: impossible understand, bottom up, what? hide - recursive nature of grammar from grug and debug impossible, very bad - according grug! +nobody care about "stream" or even hear of "stream" before, is not networking +api, all java grugs use list mr big brain! - grug think this because while complexity demon bad for code base and - understand, complexity demon very good for generation of much academic - papers, sad but true +[40]Parsing - production parser almost always recursive descent, despite ignore by - schools! grug furious when learn how simple parse is! parsing not big - brain only magic: so can you! +grug love make programming language at drop of hat and say [41]recursive +descent most fun and beautiful way create parser - grug very elated find big brain developer Bob Nystrom redeem the big - brain tribe and write excellent book on recursive descent: [42]Crafting - Interpreters +unfortunately many big brain school teach only parser generator tool. here grug +usual love of tool is not: parser generator tool generate code of awful snakes +nest: impossible understand, bottom up, what? hide recursive nature of grammar +from grug and debug impossible, very bad according grug! - book available online free, but grug highly recommend all interested - grugs purchase book on general principle, provide much big brain advice - and grug love book very much except visitor pattern (trap!) +grug think this because while complexity demon bad for code base and +understand, complexity demon very good for generation of much academic papers, +sad but true - [43]The Visitor Pattern +production parser almost always recursive descent, despite ignore by schools! +grug furious when learn how simple parse is! parsing not big brain only magic: +so can you! - [44]bad +grug very elated find big brain developer Bob Nystrom redeem the big brain +tribe and write excellent book on recursive descent: [42]Crafting Interpreters - [45]Front End Development +book available online free, but grug highly recommend all interested grugs +purchase book on general principle, provide much big brain advice and grug love +book very much except visitor pattern (trap!) - some non-grugs, when faced with web development say: +[43]The Visitor Pattern - "I know, I'll split my front end and back end codebase up and use a hot - new SPA library talking to a GraphQL JSON API back end over HTTP (which - is funny because I'm not transferring hypertext)" +[44]bad - now you have two complexity demon spirit lairs +[45]Front End Development - and, what is worse, front end complexity demon spirit even more - powerful and have deep spiritual hold on entire front end industry as - far as grug can tell +some non-grugs, when faced with web development say: - back end developers try keep things simple and can work ok, but front - end developers make very complex very quickly and introduce lots of - code, demon complex spirit +"I know, I'll split my front end and back end codebase up and use a hot new SPA +library talking to a GraphQL JSON API back end over HTTP (which is funny +because I'm not transferring hypertext)" - even when website just need put form into database or simple brochure - site! +now you have two complexity demon spirit lairs - everyone do this now! +and, what is worse, front end complexity demon spirit even more powerful and +have deep spiritual hold on entire front end industry as far as grug can tell - grug not sure why except maybe facebook and google say so, but that not - seem very good reason to grug +back end developers try keep things simple and can work ok, but front end +developers make very complex very quickly and introduce lots of code, demon +complex spirit - grug not like big complex front end libraries everyone use +even when website just need put form into database or simple brochure site! - grug make [46]htmx and [47]hyperscript to avoid +everyone do this now! - keep complexity low, simple HTML, avoid lots javascript, the natural - ether of spirit complexity demon +grug not sure why except maybe facebook and google say so, but that not seem +very good reason to grug - maybe they work for you, but no job post, sorry +grug not like big complex front end libraries everyone use - react better for job and also some type application, but also you - become alcolyte of complexity demon whether you like or no, sorry such - is front end life +grug make [46]htmx and [47]hyperscript to avoid - [48]Fads +keep complexity low, simple HTML, avoid lots javascript, the natural ether of +spirit complexity demon - grug note lots of fads in development, especially front end development - today +maybe they work for you, but no job post, sorry - back end better more boring because all bad ideas have tried at this - point maybe (still retry some!) +react better for job and also some type application, but also you become +alcolyte of complexity demon whether you like or no, sorry such is front end +life - still trying all bad ideas in front end development so still much - change and hard to know +[48]Fads - grug recommend taking all revolutionary new approach with grain salt: - big brains have working for long time on computers now, most ideas have - tried at least once +grug note lots of fads in development, especially front end development today - grug not saying can't learn new tricks or no good new ideas, but also - much of time wasted on recycled bad ideas, lots of spirit complexity - demon power come from putting new idea willy nilly into code base +back end better more boring because all bad ideas have tried at this point +maybe (still retry some!) - [49]Fear Of Looking Dumb +still trying all bad ideas in front end development so still much change and +hard to know - note! very good if senior grug willing to say publicly: "hmmm, this too - complex for grug"! +grug recommend taking all revolutionary new approach with grain salt: big +brains have working for long time on computers now, most ideas have tried at +least once - many developers Fear Of Looking Dumb (FOLD), grug also at one time - FOLD, but grug learn get over: very important senior grug say "this too - complicated and confuse to me" +grug not saying can't learn new tricks or no good new ideas, but also much of +time wasted on recycled bad ideas, lots of spirit complexity demon power come +from putting new idea willy nilly into code base - this make it ok for junior grugs to admit too complex and not - understand as well, often such case! FOLD major source of complexity - demon power over developer, especially young grugs! - - take FOLD power away, very good of senior grug! - - note: important to make thinking face and look big brained when saying - though. be prepare for big brain or, worse and much more common, thinks - is big brain to make snide remark of grug - - be strong! no FOLD! - - club sometimes useful here, but more often sense of humor and - especially last failed project by big brain very useful, so collect and - be calm - - [50]Impostor Syndrome - - grug note many such impostor feels in development - - always grug one of two states: grug is ruler of all survey, wield code - club like thor OR grug have no idea what doing - - grug is mostly latter state most times, hide it pretty well though - - now, grug make softwares of much work and [51]moderate open source - success , and yet grug himself often feel not any idea what doing! very - often! grug still fear make mistake break everyone code and disappoint - other grugs, imposter! - - is maybe nature of programming for most grug to feel impostor and be ok - with is best: nobody imposter if everybody imposter - - any young grug read this far probably do fine in program career even if - frustrations and worry is always to be there, sorry - - [52]Reads - - grug like these: - * [53]Worse is Better - * [54]Worse is Better is Worse - * [55]Is Worse Really Better? - * [56]A Philosophy of Software Design - - [57]Conclusion - - you say: complexity very, very bad - -References - - 1. https://www.redbubble.com/i/sticker/Programmer-Grug-by-colossalbreaker/42915272.EJUG5 - 2. https://grugbrain.dev/#grug-on-complexity - 3. https://grugbrain.dev/#grug-on-saying-no - 4. https://grugbrain.dev/#grug-on-saying-ok - 5. https://en.wikipedia.org/wiki/Pareto_principle - 6. https://grugbrain.dev/#grug-on-factring-your-code - 7. https://grugbrain.dev/#grug-on-testing - 8. https://en.wikipedia.org/wiki/Unit_testing - 9. https://smartbear.com/solutions/end-to-end-testing/ - 10. https://en.wikipedia.org/wiki/Integration_testing - 11. https://en.wikipedia.org/wiki/Mock_object - 12. https://grugbrain.dev/#grug-on-agile - 13. https://en.wikipedia.org/wiki/No_Silver_Bullet - 14. https://grugbrain.dev/#grug-on-refactoring - 15. https://www.webopedia.com/definitions/j2ee/ - 16. https://www.techtarget.com/searchnetworking/definition/OSGi - 17. https://grugbrain.dev/#grug-on-chestertons-fence - 18. https://en.wikipedia.org/wiki/G._K._Chesterton - 19. https://grugbrain.dev/#grug-on-microservices - 20. https://grugbrain.dev/#grug-on-tools - 21. https://grugbrain.dev/#grug-on-type-systems - 22. https://grugbrain.dev/#grug-on-expression-complexity - 23. https://grugbrain.dev/#grug-on-dry - 24. https://en.wikipedia.org/wiki/Don't_repeat_yourself - 25. https://grugbrain.dev/#grug-on-soc - 26. https://en.wikipedia.org/wiki/Separation_of_concerns - 27. https://htmx.org/essays/locality-of-behaviour/ - 28. https://grugbrain.dev/#grug-on-closures - 29. https://grugbrain.dev/#grug-on-logging - 30. https://en.wikipedia.org/wiki/Rob_Pike - 31. https://www.youtube.com/watch?v=KINIAgRpkDA - 32. https://stackify.com/logging-java/ - 33. https://grugbrain.dev/#grug-on-concurrency - 34. https://en.wikipedia.org/wiki/Optimistic_concurrency_control - 35. https://en.wikipedia.org/wiki/Thread-local_storage - 36. https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html - 37. https://en.wikipedia.org/wiki/Erlang_(programming_language) - 38. https://grugbrain.dev/#grug-on-optimizing - 39. https://grugbrain.dev/#grug-on-apis - 40. https://grugbrain.dev/#grug-on-parsing - 41. https://en.wikipedia.org/wiki/Recursive_descent_parser - 42. https://craftinginterpreters.com/ - 43. https://grugbrain.dev/#grug-on-visitor-pattern - 44. https://en.wikipedia.org/wiki/Visitor_pattern - 45. https://grugbrain.dev/#grug-on-front-end-development - 46. https://htmx.org/ - 47. https://hyperscript.org/ - 48. https://grugbrain.dev/#grug-on-fads - 49. https://grugbrain.dev/#grug-on-fold - 50. https://grugbrain.dev/#grug-on-imposter-syndrom - 51. https://star-history.com/#bigskysoftware/htmx&bigskysoftware/_hyperscript&Date - 52. https://grugbrain.dev/#grug-reads - 53. https://www.dreamsongs.com/WorseIsBetter.html - 54. https://www.dreamsongs.com/Files/worse-is-worse.pdf - 55. https://www.dreamsongs.com/Files/IsWorseReallyBetter.pdf - 56. https://www.goodreads.com/en/book/show/39996759-a-philosophy-of-software-design - 57. https://grugbrain.dev/#lol-lmao +[49]Fear Of Looking Dumb + +note! very good if senior grug willing to say publicly: "hmmm, this too complex +for grug"! + +many developers Fear Of Looking Dumb (FOLD), grug also at one time FOLD, but +grug learn get over: very important senior grug say "this too complicated and +confuse to me" + +this make it ok for junior grugs to admit too complex and not understand as +well, often such case! FOLD major source of complexity demon power over +developer, especially young grugs! + +take FOLD power away, very good of senior grug! + +note: important to make thinking face and look big brained when saying though. +be prepare for big brain or, worse and much more common, thinks is big brain to +make snide remark of grug + +be strong! no FOLD! + +club sometimes useful here, but more often sense of humor and especially last +failed project by big brain very useful, so collect and be calm + +[50]Impostor Syndrome + +grug note many such impostor feels in development + +always grug one of two states: grug is ruler of all survey, wield code club +like thor OR grug have no idea what doing + +grug is mostly latter state most times, hide it pretty well though + +now, grug make softwares of much work and [51]moderate open source success , +and yet grug himself often feel not any idea what doing! very often! grug still +fear make mistake break everyone code and disappoint other grugs, imposter! + +is maybe nature of programming for most grug to feel impostor and be ok with is +best: nobody imposter if everybody imposter + +any young grug read this far probably do fine in program career even if +frustrations and worry is always to be there, sorry + +[52]Reads + +grug like these: + + • [53]Worse is Better + • [54]Worse is Better is Worse + • [55]Is Worse Really Better? + • [56]A Philosophy of Software Design + +[57]Conclusion + +you say: complexity very, very bad + + +References: + +[1] https://www.redbubble.com/i/sticker/Programmer-Grug-by-colossalbreaker/42915272.EJUG5 +[2] https://grugbrain.dev/#grug-on-complexity +[3] https://grugbrain.dev/#grug-on-saying-no +[4] https://grugbrain.dev/#grug-on-saying-ok +[5] https://en.wikipedia.org/wiki/Pareto_principle +[6] https://grugbrain.dev/#grug-on-factring-your-code +[7] https://grugbrain.dev/#grug-on-testing +[8] https://en.wikipedia.org/wiki/Unit_testing +[9] https://smartbear.com/solutions/end-to-end-testing/ +[10] https://en.wikipedia.org/wiki/Integration_testing +[11] https://en.wikipedia.org/wiki/Mock_object +[12] https://grugbrain.dev/#grug-on-agile +[13] https://en.wikipedia.org/wiki/No_Silver_Bullet +[14] https://grugbrain.dev/#grug-on-refactoring +[15] https://www.webopedia.com/definitions/j2ee/ +[16] https://www.techtarget.com/searchnetworking/definition/OSGi +[17] https://grugbrain.dev/#grug-on-chestertons-fence +[18] https://en.wikipedia.org/wiki/G._K._Chesterton +[19] https://grugbrain.dev/#grug-on-microservices +[20] https://grugbrain.dev/#grug-on-tools +[21] https://grugbrain.dev/#grug-on-type-systems +[22] https://grugbrain.dev/#grug-on-expression-complexity +[23] https://grugbrain.dev/#grug-on-dry +[24] https://en.wikipedia.org/wiki/Don%27t_repeat_yourself +[25] https://grugbrain.dev/#grug-on-soc +[26] https://en.wikipedia.org/wiki/Separation_of_concerns +[27] https://htmx.org/essays/locality-of-behaviour/ +[28] https://grugbrain.dev/#grug-on-closures +[29] https://grugbrain.dev/#grug-on-logging +[30] https://en.wikipedia.org/wiki/Rob_Pike +[31] https://www.youtube.com/watch?v=KINIAgRpkDA +[32] https://stackify.com/logging-java/ +[33] https://grugbrain.dev/#grug-on-concurrency +[34] https://en.wikipedia.org/wiki/Optimistic_concurrency_control +[35] https://en.wikipedia.org/wiki/Thread-local_storage +[36] https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html +[37] https://en.wikipedia.org/wiki/Erlang_(programming_language) +[38] https://grugbrain.dev/#grug-on-optimizing +[39] https://grugbrain.dev/#grug-on-apis +[40] https://grugbrain.dev/#grug-on-parsing +[41] https://en.wikipedia.org/wiki/Recursive_descent_parser +[42] https://craftinginterpreters.com/ +[43] https://grugbrain.dev/#grug-on-visitor-pattern +[44] https://en.wikipedia.org/wiki/Visitor_pattern +[45] https://grugbrain.dev/#grug-on-front-end-development +[46] https://htmx.org/ +[47] https://hyperscript.org/ +[48] https://grugbrain.dev/#grug-on-fads +[49] https://grugbrain.dev/#grug-on-fold +[50] https://grugbrain.dev/#grug-on-imposter-syndrom +[51] https://star-history.com/#bigskysoftware/htmx&bigskysoftware/_hyperscript&Date +[52] https://grugbrain.dev/#grug-reads +[53] https://www.dreamsongs.com/WorseIsBetter.html +[54] https://www.dreamsongs.com/Files/worse-is-worse.pdf +[55] https://www.dreamsongs.com/Files/IsWorseReallyBetter.pdf +[56] https://www.goodreads.com/en/book/show/39996759-a-philosophy-of-software-design +[57] https://grugbrain.dev/#lol-lmao diff --git a/static/archive/inkdroid-org-belior.txt b/static/archive/inkdroid-org-belior.txt index ace324a..fa5083d 100644 --- a/static/archive/inkdroid-org-belior.txt +++ b/static/archive/inkdroid-org-belior.txt @@ -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 - __________________________________________________________________ +June 4, 2023 +[15]programming [16]artificial-intelligence - TL;DR Don’t install Copilot. It rots your brain and destroys the - environment. - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - [rubber-duck.jpg] [17]A rubber duck in use by a developer to aid code - review +TL;DR Don’t install Copilot. It rots your brain and destroys the environment. - [18]GitHub Copilot is a technology that is designed to help you write - code, kind of like your partner in [19]pair programming. But, you know, - it’s not an actual person. It’s “A.I.”–whatever that means. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[rubber-duc] [17]A rubber duck in use by a developer to aid code review - In principle this sounds like it might actually be a good thing right? - I know several people, who I respect, that use it as part of their - daily work. I’ve heard [20]smart people say AI coding assistants like - Copilot will democratize programming, by making it possible for more - people to write code, and automate the drudgery out of their lives. I’m - not convinced. +[18]GitHub Copilot is a technology that is designed to help you write code, +kind of like your partner in [19]pair programming. But, you know, it’s not an +actual person. It’s “A.I.”–whatever that means. - Here’s why I don’t use Copilot (or ChatGPT) to write code: - 1. Copilot’s suggestions are based on a corpus of open source code in - GitHub, but the suggestions do not mention where the code came - from, and what the license is. GitHub is stealing and selling - intellectual property. - 2. Copilot lets you write code faster. I don’t think more code is a - good thing. The more code there is, the more code there is to - maintain. Minimalism in features is usually a good thing too. Less - really is more. - 3. As more and more programmers use Copilot it creates conservativism - in languages and frameworks that prevents people from creating and - learning new ways of doing things. Collectively, we get even more - stuck in our ways and biases. Some of the biases encoded into LLMs - are things that we are actively trying to [21]change. - 4. Developers become dependent on Copilot for intellectual work. - Actually, maybe addicted is a better word here. The same could be - (and was) said about the effect of search engines on software - development work (e.g. Googling error messages). But the difference - is that search results need to be interpreted, and the resulting - web pages have important context that you often need to understand. - This is work that Copilot optimizes away and truncates our - knowledge in the process. - 5. Copilot costs money. It doesn’t cost tons of money (for a - professional person in the USA) but it could be significant for - some. Who does it privilege? Also, it could change (see point 4). - Remember who owns this thing. - 6. How much [22]energy does it take to run Copilot as millions of - developers outsource their intellectual work to its LLM - infrastructure? Is this massive centralization and enclosure really - progress in computing? Or is it a [23]step backwards as we try to - [24]reduce our energy use as a species? - 7. What does Copilot see of the code in your editor? Does it use your - code as context for the prompt? What does it store, and remember, - and give to others? Somebody has probably looked into this, but if - they have it is always up for revision. Just out of principle I - don’t want my editor sending my code somewhere else without me - intentionally doing it. - 8. Working with others who use Copilot makes my job harder, since they - sometimes don’t really understand the details of why the code is - written a particular way. Over time Copilot code can mix idioms, - styles and approaches, in ways that the developer doesn’t really - understand or even recognize. This makes maintenance harder. +In principle this sounds like it might actually be a good thing right? I know +several people, who I respect, that use it as part of their daily work. I’ve +heard [20]smart people say AI coding assistants like Copilot will democratize +programming, by making it possible for more people to write code, and automate +the drudgery out of their lives. I’m not convinced. - As far as I can tell the only redeeming qualities of Copilot are: - 1. Copilot encourages you to articulate and describe a problem as - written prose before starting to write code. You don’t need Copilot - for this. Maybe keep a work journal or write a [25]design document? - Maybe use your issue tracker? Use [26]text to communicate with - other people. - 2. Copilot is more interactive than a [27]rubber duck. But, it turns - out Actual People are even more interactive and surprising. Reach - out to other professionals and make some friends. Go to workshops - and conferences. - 3. I could be convinced that Copilot has a useful place in the - [28]review of code rather than the first draft of code. It wouldn’t - be a replacement for review by people, but I believe it could - potentially help people do the review. I don’t think this exists - yet? - 4. Copilot makes me think critically about machine learning - technology, my profession and its place in the world. +Here’s why I don’t use Copilot (or ChatGPT) to write code: - Maybe my thinking on this will change. But I doubt it. I’m on the older - side for a software developer, and (hopefully) will retire some day. - Maybe people like me are on the way out, and writing code with Copilot - and ChatGPT is the future. Maybe programming has always been about - increasing layers of abstraction and this is just the next logical - layer. I really hope not. + 1. Copilot’s suggestions are based on a corpus of open source code in GitHub, + but the suggestions do not mention where the code came from, and what the + license is. GitHub is stealing and selling intellectual property. + 2. Copilot lets you write code faster. I don’t think more code is a good + thing. The more code there is, the more code there is to maintain. + Minimalism in features is usually a good thing too. Less really is more. + 3. As more and more programmers use Copilot it creates conservativism in + languages and frameworks that prevents people from creating and learning + new ways of doing things. Collectively, we get even more stuck in our ways + and biases. Some of the biases encoded into LLMs are things that we are + actively trying to [21]change. + 4. Developers become dependent on Copilot for intellectual work. Actually, + maybe addicted is a better word here. The same could be (and was) said + about the effect of search engines on software development work + (e.g. Googling error messages). But the difference is that search results + need to be interpreted, and the resulting web pages have important context + that you often need to understand. This is work that Copilot optimizes away + and truncates our knowledge in the process. + 5. Copilot costs money. It doesn’t cost tons of money (for a professional + person in the USA) but it could be significant for some. Who does it + privilege? Also, it could change (see point 4). Remember who owns this + thing. + 6. How much [22]energy does it take to run Copilot as millions of developers + outsource their intellectual work to its LLM infrastructure? Is this + massive centralization and enclosure really progress in computing? Or is it + a [23]step backwards as we try to [24]reduce our energy use as a species? + 7. What does Copilot see of the code in your editor? Does it use your code as + context for the prompt? What does it store, and remember, and give to + others? Somebody has probably looked into this, but if they have it is + always up for revision. Just out of principle I don’t want my editor + sending my code somewhere else without me intentionally doing it. + 8. Working with others who use Copilot makes my job harder, since they + sometimes don’t really understand the details of why the code is written a + particular way. Over time Copilot code can mix idioms, styles and + approaches, in ways that the developer doesn’t really understand or even + recognize. This makes maintenance harder. - I enjoy programming because it’s about reasoning, thinking, models, - concepts, expression, communication, ethics, reading, learning, making, - and process. It’s an art and a practice that is best done with other - people. +As far as I can tell the only redeeming qualities of Copilot are: - Increasingly I think it’s imperative for programming to be done more - slowly, more deliberatively, and as part of more conversations with - more people. The furious automation of everything is eating the world. + 1. Copilot encourages you to articulate and describe a problem as written + prose before starting to write code. You don’t need Copilot for this. Maybe + keep a work journal or write a [25]design document? Maybe use your issue + tracker? Use [26]text to communicate with other people. + 2. Copilot is more interactive than a [27]rubber duck. But, it turns out + Actual People are even more interactive and surprising. Reach out to other + professionals and make some friends. Go to workshops and conferences. + 3. I could be convinced that Copilot has a useful place in the [28]review of + code rather than the first draft of code. It wouldn’t be a replacement for + review by people, but I believe it could potentially help people do the + review. I don’t think this exists yet? + 4. Copilot makes me think critically about machine learning technology, my + profession and its place in the world. - 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. +Maybe my thinking on this will change. But I doubt it. I’m on the older side +for a software developer, and (hopefully) will retire some day. Maybe people +like me are on the way out, and writing code with Copilot and ChatGPT is the +future. Maybe programming has always been about increasing layers of +abstraction and this is just the next logical layer. I really hope not. - Can Copilot help with these [29]goals? I think the answer is no, - because it doesn’t actually understand anything, and more importantly, - it doesn’t promote understanding. - __________________________________________________________________ +I enjoy programming because it’s about reasoning, thinking, models, concepts, +expression, communication, ethics, reading, learning, making, and process. It’s +an art and a practice that is best done with other people. - Update (2023-06-09): For another take on Copilot that uses this post as - a jumping off point see Vivek Haldar’s [30]Re: Why I don’t use Copilot. +Increasingly I think it’s imperative for programming to be done more slowly, +more deliberatively, and as part of more conversations with more people. The +furious automation of everything is eating the world. - Unless otherwise noted all the content here is licensed [31]CC-BY +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. -References +Can Copilot help with these [29]goals? I think the answer is no, because it +doesn’t actually understand anything, and more importantly, it doesn’t promote +understanding. - 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/ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Update (2023-06-09): For another take on Copilot that uses this post as a +jumping off point see Vivek Haldar’s [30]Re: Why I don’t use Copilot. + +Unless otherwise noted all the content here is licensed [31]CC-BY + + +References: + +[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/ diff --git a/static/archive/inviqa-com-kztbkj.txt b/static/archive/inviqa-com-kztbkj.txt index 8c1aa36..8e796d9 100644 --- a/static/archive/inviqa-com-kztbkj.txt +++ b/static/archive/inviqa-com-kztbkj.txt @@ -1,113 +1,109 @@ - #[1]alternate +[1] Skip to main content +Search [2][ ] +[3][Search] +[4] Home +Main navigation Menu - IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-NBN52P + • [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 - [3]Skip to main content - - Search ______________________________ - Search - [4]Home - - 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 - - * [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 +By Lorenzo Alberton +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! +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! - 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. +" "" " - 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. +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 '[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, @@ -124,20 +120,19 @@ CREATE TABLE edges ( 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.). +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.). - 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: +or, in the case of undirected edges: + SELECT * FROM nodes WHERE id IN ( SELECT a FROM edges WHERE b = 1 UNION @@ -189,53 +185,51 @@ SELECT * FROM nodes where id IN ( WHERE 1 IN (a, b) ); - Traversing the full graph usually requires more than a query: we can - either loop through the connected nodes, one level a time, or we can - create a temporary table holding all the possible paths between two - nodes. +Traversing the full graph usually requires more than a query: we can either +loop through the connected nodes, one level a time, or we can create a +temporary table holding all the possible paths between two nodes. - We could use Oracle’s CONNECT BY syntax or SQL standard’s Common Table - Expressions (CTEs) to recurse through the nodes, but since the graph - can contain loops, we’d get errors (unless we’re very careful, as we’ll - see in a moment). +We could use Oracle’s CONNECT BY syntax or SQL standard’s Common Table +Expressions (CTEs) to recurse through the nodes, but since the graph can +contain loops, we’d get errors (unless we’re very careful, as we’ll see in a +moment). - Kendall Willets [2] proposes a way of traversing (BFS) the graph using - a temporary table. It is quite robust, since it doesn’t fail on graphs - with cycles (and when dealing with trees, he shows there are better - algorithms available). His solution is just one of the many available, - but quite good. +Kendall Willets [2] proposes a way of traversing (BFS) the graph using a +temporary table. It is quite robust, since it doesn’t fail on graphs with +cycles (and when dealing with trees, he shows there are better algorithms +available). His solution is just one of the many available, but quite good. - The problem with temporary tables holding all the possible paths is it - has to be maintained. Depending on how frequently the data is accessed - and updated it might still be worth it, but it’s quite expensive. If - you do resort to such a solution, these references may be of use [13] - [14]. +The problem with temporary tables holding all the possible paths is it has to +be maintained. Depending on how frequently the data is accessed and updated it +might still be worth it, but it’s quite expensive. If you do resort to such a +solution, these references may be of use [13] [14]. - Before going further in our analysis, we need to introduce a new - concept: the transitive closure of a graph. +Before going further in our analysis, we need to introduce a new concept: the +transitive closure of a graph. Transitive closure - The transitive closure of a graph G = (V,E) is a graph G* = (V,E*) such - that E* contains an edge (u,v) if and only if G contains a path from u - to v. +The transitive closure of a graph G = (V,E) is a graph G* = (V,E*) such that E* +contains an edge (u,v) if and only if G contains a path from u to v. - In other words, the transitive closure of a graph is a graph which - contains an edge (u,v) whenever there is a directed path from u to v. - " " +In other words, the transitive closure of a graph is a graph which contains an +edge (u,v) whenever there is a directed path from u to v. - Graph: transitive closure +" " - 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. +Graph: transitive closure - Here's my clumsy attempt at a possible solution using CTEs +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: - " " +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 @@ -323,20 +318,20 @@ WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS WHERE b=6 -- destination 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, @@ -356,11 +351,12 @@ SELECT a, b, min(distance) AS dist FROM transitive_closure GROUP BY a, b 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 @@ -455,21 +451,22 @@ WHERE b=4 -- set the target node GROUP BY a, b HAVING min(distance) = 3; --set the minimum distance - Then you select the paths between those nodes. +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 - Linkedin WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS ( SELECT a, b, 1 AS distance, a || '.' || b || '.' AS path_string, @@ -491,47 +488,44 @@ SELECT * FROM transitive_closure --WHERE b=3 -- set the target node 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 +" " + +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 ( @@ -564,184 +558,179 @@ LEFT JOIN nodes AS n3 ON youmightknow.shared_connection = n3.id WHERE (n1.feat1 = n2.feat1 AND n1.feat1 = n3.feat1) OR (n1.feat2 = n2.feat2 AND n1.feat2 = n3.feat2); - " " +" " - 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... - A woman reviews code on her laptop +[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. +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 - Drupal consulting and web development at Inviqa The Drupal 9 upgrade Config Split issue and how to fix it - In this article we look back at an issue we’ve encountered with Drupal - Config Split when upgrading Drupal 8 to 9 – and we share how to fix it, - so you don’t have to run into the same issue when upgrading to Drupal - 9. +In this article we look back at an issue we’ve encountered with Drupal Config +Split when upgrading Drupal 8 to 9 – and we share how to fix it, so you don’t +have to run into the same issue when upgrading to Drupal 9. - Inviqa, winner of Webby Awards The Webby Awards winner - Inviqa named one of Top 100 Agencies in Econsultancy Top 100 Digital - Agencies - Inviqa UXUK Awards winner UXUK Awards winner - DADI Award winner of 'Best UX / Usability category' DADI Award winner +Inviqa, winner of Webby Awards The Webby Awards winner +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 - 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 +Footer Legal Links -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 diff --git a/static/archive/jeffhuang-com-njdbjn.txt b/static/archive/jeffhuang-com-njdbjn.txt index 7d750af..2dfeff2 100644 --- a/static/archive/jeffhuang-com-njdbjn.txt +++ b/static/archive/jeffhuang-com-njdbjn.txt @@ -1,291 +1,273 @@ - A Manifesto for Preserving Content on the Web +A Manifesto for Preserving Content on the Web This Page is Designed to Last - By [1]Jeff Huang, published 2019-12-19, updated 2021-08-24 +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. - 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 - 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. - 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. +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. - 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. + 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 + 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. + 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. - 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. +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. - In fact, it's not even that important you strictly follow the 7 - "rules", as they're more of a provocation than strict rules. +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. - 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. +In fact, it's not even that important you strictly follow the 7 "rules", as +they're more of a provocation than strict rules. - 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. +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. - 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. +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. - 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. +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. - 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. +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. - See discussions on [14]Hacker News and [15]reddit /r/programming +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 Also in this series - [16]Behind the scenes: the struggle for each paper to get published +[16]Behind the scenes: the struggle for each paper to get published - [17]Illustrative notes for obsessing over publishing aesthetics +[17]Illustrative notes for obsessing over publishing aesthetics Other articles I've written - [18]My productivity app is a never-ending .txt file +[18]My productivity app is a never-ending .txt file - [19]The Coronavirus pandemic has changed our sleep behavior +[19]The Coronavirus pandemic has changed our sleep behavior - [20]Extracting data from tracking devices by going to the cloud +[20]Extracting data from tracking devices by going to the cloud - [21]CS Faculty Composition and Hiring Trends +[21]CS Faculty Composition and Hiring Trends - [22]Bias in Computer Science Rankings +[22]Bias in Computer Science Rankings - [23]Who Wins CS Best Paper Awards? +[23]Who Wins CS Best Paper Awards? - [24]Verified Computer Science Ph.D. Stipends +[24]Verified Computer Science Ph.D. Stipends - This page is [25]designed to last. +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/ diff --git a/static/archive/josem-co-8ssbyq.txt b/static/archive/josem-co-8ssbyq.txt index 0d6d49d..d4c4239 100644 --- a/static/archive/josem-co-8ssbyq.txt +++ b/static/archive/josem-co-8ssbyq.txt @@ -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 +The beauty of finished software - October 31, 2023 +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 +Wordstar 4.0 WordStar 4.0 - As old as it seems, George R.R. Martin used it to write “A Song of Ice - and Fire”. +As old as it seems, George R.R. Martin used it to write “A Song of Ice and +Fire”. - Why would someone use such an old piece of software to write over 5,000 - pages? I love how he puts it: +Why would someone use such an old piece of software to write over 5,000 pages? +I love how he puts it: - It does everything I want a word processing program to do and it - doesn't do anything else. I don't want any help. I hate some of - these modern systems where you type up a lowercase letter and it - becomes a capital. I don't want a capital, if I'd wanted a capital, - I would have typed the capital.[8]George R.R. Martin + It does everything I want a word processing program to do and it doesn't do + anything else. I don't want any help. I hate some of these modern systems + where you type up a lowercase letter and it becomes a capital. I don't want + a capital, if I'd wanted a capital, I would have typed the capital.[9] + George R.R. Martin - This program embodies the concept of finished software — a software you - can use forever with no unneeded changes. +This program embodies the concept of finished software — a software you can use +forever with no unneeded changes. - Finished software is software that’s not expected to change, and that’s - a feature! You can rely on it to do some real work. +Finished software is software that’s not expected to change, and that’s a +feature! You can rely on it to do some real work. - Once you get used to the software, once the software works for you, you - don’t need to learn anything new; the interface will exactly be the - same, and all your files will stay relevant. No migrations, no new - payments, no new changes. +Once you get used to the software, once the software works for you, you don’t +need to learn anything new; the interface will exactly be the same, and all +your files will stay relevant. No migrations, no new payments, no new changes. - This kind of software can be created intentionally, with a compromise - from the creators that they won’t bother you with things you don’t - need, and only the absolutely necessary will change, like minor updates - to make it compatible with new operating systems. +This kind of software can be created intentionally, with a compromise from the +creators that they won’t bother you with things you don’t need, and only the +absolutely necessary will change, like minor updates to make it compatible with +new operating systems. - Sometimes, finished software happens accidentally; maybe the company - behind it has disappeared, or the product has been abandoned. +Sometimes, finished software happens accidentally; maybe the company behind it +has disappeared, or the product has been abandoned. - There are also some great examples in the UNIX world of finished - software: commands like cd(to change the current directory) or ls(to - list what’s there) won’t ever change in a significant way. You can rely - on them until the end of your career. +There are also some great examples in the UNIX world of finished software: +commands like cd(to change the current directory) or ls(to list what’s there) +won’t ever change in a significant way. You can rely on them until the end of +your career. The seduction of constant updates - Our expectations for software are different from other products we use - in our daily lives. +Our expectations for software are different from other products we use in our +daily lives. - When we buy a physical product, we accept that it won’t change in its - lifetime. We’ll use it until it wears off, and we replace it. We can - rely on that product not evolving; the gas pedal in my car will always - be in the same place. +When we buy a physical product, we accept that it won’t change in its lifetime. +We’ll use it until it wears off, and we replace it. We can rely on that product +not evolving; the gas pedal in my car will always be in the same place. - However, when it comes to software, we usually have the ingrained - expectations of perpetual updates. We believe that if software doesn’t - evolve it’ll be boring, old and unusable. If we see an app with no - updates in the last year, we think the creator might be dead. +However, when it comes to software, we usually have the ingrained expectations +of perpetual updates. We believe that if software doesn’t evolve it’ll be +boring, old and unusable. If we see an app with no updates in the last year, we +think the creator might be dead. - We also expect new versions of any software will be better than the - previous ones. Once it’s released, most of our problems will be solved! - What a deceiving lie. +We also expect new versions of any software will be better than the previous +ones. Once it’s released, most of our problems will be solved! What a deceiving +lie. - Sometimes, a software upgrade is a step backward: less usable, less - stable, with new bugs. Even if it’s genuinely better, there’s the - learning curve. You were efficient with the old version, but now your - most used button is on the other side of the screen under a hidden - menu. +Sometimes, a software upgrade is a step backward: less usable, less stable, +with new bugs. Even if it’s genuinely better, there’s the learning curve. You +were efficient with the old version, but now your most used button is on the +other side of the screen under a hidden menu. Finished software is a good reminder - In a world where constant change is the norm, finished software - provides a breath of fresh air. It’s a reminder that reliability, - consistency, and user satisfaction can coexist in the realm of software - development. +In a world where constant change is the norm, finished software provides a +breath of fresh air. It’s a reminder that reliability, consistency, and user +satisfaction can coexist in the realm of software development. - So the next time you find yourself yearning for the latest update, - remember that sometimes, the best software is the one that doesn’t - change at all. - __________________________________________________________________ +So the next time you find yourself yearning for the latest update, remember +that sometimes, the best software is the one that doesn’t change at all. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ References - [1] George R.R. Martin in Conan show (2014). - [9]https://www.youtube.com/watch?v=X5REM-3nWHg. +[1] George R.R. Martin in Conan show (2014). [10]https://www.youtube.com/watch? +v=X5REM-3nWHg. - Subscribe below to get future posts in your inbox (no spam) - ____________________ - ____________________ - Subscribe +Subscribe below to get future posts in your inbox (no spam) - 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 diff --git a/static/archive/leancrew-com-7l5uqs.txt b/static/archive/leancrew-com-7l5uqs.txt index 55220f0..d78473c 100644 --- a/static/archive/leancrew-com-7l5uqs.txt +++ b/static/archive/leancrew-com-7l5uqs.txt @@ -1,42 +1,39 @@ - #[1]RSS Feed for ANIAT [2]JSON Feed for ANIAT +[snowman-20] - [snowman-200.jpg] - -[3]And now it’s all this +[1]And now it’s all this I just said what I said and it was wrong Or was taken wrong - [4]Next post [5]Previous post +[2]Next post [3]Previous post -[6]Tidying Markdown reference links +[4]Tidying Markdown reference links - September 17, 2012 at 9:15 PM by Dr. Drang +September 17, 2012 at 9:15 PM by Dr. Drang - Oscar Wilde—who would have been great on Twitter—[7]said “I couldn’t - help it. I can resist everything except temptation.” That’s my excuse - for this post. +Oscar Wilde—who would have been great on Twitter—[5]said “I couldn’t help it. I +can resist everything except temptation.” That’s my excuse for this post. - Several days ago I got an email from a reader, asking if I knew of a - script that would tidy up [8]Markdown reference links in a document. - She wanted them reordered and renumbered at the end of the document to - match the order in which they appear in the body of the text. I didn’t - know of one^[9]1 and suggested she write it herself and let me know - when it’s done. I’ve been getting progress reports, but her script - isn’t finished yet. +Several days ago I got an email from a reader, asking if I knew of a script +that would tidy up [6]Markdown reference links in a document. She wanted them +reordered and renumbered at the end of the document to match the order in which +they appear in the body of the text. I didn’t know of one^[7]1 and suggested +she write it herself and let me know when it’s done. I’ve been getting progress +reports, but her script isn’t finished yet. - There’s certainly no need to tidy the links up that way. Markdown - doesn’t care what order the reference links appear in or the labels - that are assigned to them. I’ve written dozens of posts in which the - order of the references at the end of the Markdown source were way off - from the order of the links in body. But… +There’s certainly no need to tidy the links up that way. Markdown doesn’t care +what order the reference links appear in or the labels that are assigned to +them. I’ve written dozens of posts in which the order of the references at the +end of the Markdown source were way off from the order of the links in body. +But… - But there is an attraction to putting everything in apple pie order, - even when no one but me will ever see it. Last night I succumbed and - wrote a script to tidy up the links. Sorry, Phaedra. +But there is an attraction to putting everything in apple pie order, even when +no one but me will ever see it. Last night I succumbed and wrote a script to +tidy up the links. Sorry, Phaedra. + +Here’s an example of a short Markdown document with out-of-order reference +links: - Here’s an example of a short Markdown document with out-of-order - reference links: Species and their hybrids, How simply are these facts! How strange that the pollen of each But we may thus have [succeeded][2] in selecting so many exceptions to this rule. @@ -64,9 +61,10 @@ selection may be extended--to the stigma of. [3]: http://docs.python.org/library/index.html [4]: http://www.kungfugrippe.com/ - Note that the references are numbered 1, 2, 3, 4 at the bottom of the - document, but that they appear in the body in the order 2, 4, 3, 1. The - purpose of the script is to change the document to +Note that the references are numbered 1, 2, 3, 4 at the bottom of the document, +but that they appear in the body in the order 2, 4, 3, 1. The purpose of the +script is to change the document to + Species and their hybrids, How simply are these facts! How strange that the pollen of each But we may thus have [succeeded][1] in selecting so many exceptions to this rule. @@ -95,12 +93,13 @@ selection may be extended--to the stigma of. [3]: http://www.kungfugrippe.com/ [4]: http://daringfireball.net/markdown/ - Now the links are numbered 1, 2, 3, 4 in both the text and the end - references. The HTML produced when this document is run through a - Markdown processor will be the same as the previous one—the links will - still go to the right places—but the Markdown source looks better. +Now the links are numbered 1, 2, 3, 4 in both the text and the end references. +The HTML produced when this document is run through a Markdown processor will +be the same as the previous one—the links will still go to the right places—but +the Markdown source looks better. + +Here’s the script that does it: - Here’s the script that does it: python: 1: #!/usr/bin/python 2: @@ -137,8 +136,7 @@ python: 33: order.append(i[1]) 34: 35: # Make a list of the references in order of appearance. -36: newlabels = [ '[%d]: %s' % (i + 1, labels[j]) for (i, j) in enumerate(order -) ] +36: newlabels = [ '[%d]: %s' % (i + 1, labels[j]) for (i, j) in enumerate(order) ] 37: 38: # Remove the old references and put the new ones at the end of the text. 39: text = label.sub('', text).rstrip() + '\n'*3 + '\n'.join(newlabels) @@ -148,139 +146,135 @@ python: 43: 44: print text - The regular expressions in Lines 13 and 17 are fairly easy to - understand. The first one looks for the links in the body of the text - and the second looks for the labels. +The regular expressions in Lines 13 and 17 are fairly easy to understand. The +first one looks for the links in the body of the text and the second looks for +the labels. + +The key to the script are the four data structures: links, labels, order, and +newlabels. For our example document, links is the list of tuples - The key to the script are the four data structures: links, labels, - order, and newlabels. For our example document, links is the list of - tuples [('succeeded', '2'), ('single character', '4'), ('under confinement', '3'), ('slaves', '1')] - labels is the dictionary +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 +order is the list + ['2', '4', '3', '1'] - and newlabels is the list of strings +and newlabels is the list of strings + ['[1]: http://www.google.com/', '[2]: http://docs.python.org/library/index.html', '[3]: http://www.kungfugrippe.com/', '[4]: http://daringfireball.net/markdown/'] - links and labels are built via the regex findall method in Lines 25-26. - links is the direct output of the method and maintains the order in - which the links appear in the text. labels is that same output, but - converted to a dictionary. Its order, which we don’t care about, is - lost in the conversion, but it can be used to easily access the URL - from the link label. +links and labels are built via the regex findall method in Lines 25-26. links +is the direct output of the method and maintains the order in which the links +appear in the text. labels is that same output, but converted to a dictionary. +Its order, which we don’t care about, is lost in the conversion, but it can be +used to easily access the URL from the link label. - order is the order in which the link labels first appear in the text. - The if statement in Line 32 ensures that repeated links don’t overwrite - each other. +order is the order in which the link labels first appear in the text. The if +statement in Line 32 ensures that repeated links don’t overwrite each other. - newlabels is built from labels and order in Line 36. It’s the list of - labels after the renumbering. Line 39 deletes the original label lines - and puts the new ones at the end of the document. +newlabels is built from labels and order in Line 36. It’s the list of labels +after the renumbering. Line 39 deletes the original label lines and puts the +new ones at the end of the document. - Finally, Line 42 replaces all the link labels in the body of the text - with the new values. Rather than a replacement string, it uses a simple - replacement function defined in Lines 19-21 to do so. +Finally, Line 42 replaces all the link labels in the body of the text with the +new values. Rather than a replacement string, it uses a simple replacement +function defined in Lines 19-21 to do so. - Barring any bugs I haven’t found yet, this script (or filter) will work - on any Markdown document and can be used either directly from the - command line or through whatever system your text editor uses to call - external scripts. I have it stored in BBEdit’s Text Filters folder - under the name “Tidy Markdown Reference Links.py,” so I can call it - from the Text ‣ Apply Text Filter submenu. +Barring any bugs I haven’t found yet, this script (or filter) will work on any +Markdown document and can be used either directly from the command line or +through whatever system your text editor uses to call external scripts. I have +it stored in BBEdit’s Text Filters folder under the name “Tidy Markdown +Reference Links.py,” so I can call it from the Text ‣ Apply Text Filter +submenu. - I should mention that although this script is fairly compact and - simple, it didn’t spring from my head fully formed. There were starts - and stops as I figured out which data structures were needed and how - they could be built. Each little subsection of the script was tested as - I went along. The order list was originally a list of tuples; it wasn’t - until I had a working version of the entire script that I realized that - it could be simplified down to a list of link labels. That change - shortened the script by five lines or so and, more importantly, - clarified its logic. +I should mention that although this script is fairly compact and simple, it +didn’t spring from my head fully formed. There were starts and stops as I +figured out which data structures were needed and how they could be built. Each +little subsection of the script was tested as I went along. The order list was +originally a list of tuples; it wasn’t until I had a working version of the +entire script that I realized that it could be simplified down to a list of +link labels. That change shortened the script by five lines or so and, more +importantly, clarified its logic. - Despite these improvements, the script is hardly foolproof. The - Markdown source of this very post confuses the hell out it. Not only - does it think there are links in the sample document (which you’d - probably guess), it also thinks the [%s][%d] in Line 21 of the script - is a link (and the one in this sentence, too). And why wouldn’t it? To - distinguish between real links and things that look like links in - embedded source code, the script would have to be able to parse - Markdown, not just match a couple of short regular expressions. This is - a variant on what Hamish Sanderson said in the comments on [10]an - earlier post. +Despite these improvements, the script is hardly foolproof. The Markdown source +of this very post confuses the hell out it. Not only does it think there are +links in the sample document (which you’d probably guess), it also thinks the +[%s][%d] in Line 21 of the script is a link (and the one in this sentence, +too). And why wouldn’t it? To distinguish between real links and things that +look like links in embedded source code, the script would have to be able to +parse Markdown, not just match a couple of short regular expressions. This is a +variant on what Hamish Sanderson said in the comments on [8]an earlier post. - At the moment, I’m not willing to sacrifice the simplicity of the Tidy - script to get it to handle weird posts like this one. But if I find - that it fails often with the kind of input I commonly give it, I’ll - have to revisit that decision. +At the moment, I’m not willing to sacrifice the simplicity of the Tidy script +to get it to handle weird posts like this one. But if I find that it fails +often with the kind of input I commonly give it, I’ll have to revisit that +decision. - As Wilde also said, “Experience is the name everyone gives to their - mistakes.” - __________________________________________________________________ +As Wilde also said, “Experience is the name everyone gives to their mistakes.” - 1. I didn’t think [11]Seth Brown’s formd did that, but [12]this tweet - from Brett Terpsta says I was wrong about that. [13]↩ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - [14]Next post [15]Previous post + 1. I didn’t think [9]Seth Brown’s formd did that, but [10]this tweet from + Brett Terpsta says I was wrong about that. [11]↩ + +[12]Next post [13]Previous post Site search - ____________________ Go! - +[21][ ] [22][Go!] Meta - * drdrang at leancrew - * [16]Blog archive - * [17]RSS feed - * [18]JSON feed - * [19]Mastodon - * [20]GitHub repositories + • drdrang at leancrew + • [23]Blog archive + • [24]RSS feed + • [25]JSON feed + • [26]Mastodon + • [27]GitHub repositories Recent posts Credits - [21]Powered by MathJax +[28] Powered by MathJax - This work is licensed under a [22]Creative Commons Attribution-Share - Alike 3.0 Unported License. +This work is licensed under a [29]Creative Commons Attribution-Share Alike 3.0 +Unported License. - © 2005–2023, Dr. Drang +© 2005–2023, Dr. Drang -References - 1. https://leancrew.com/all-this/feed/ - 2. https://leancrew.com/all-this/feed.json - 3. https://leancrew.com/all-this/ - 4. https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/ - 5. https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/ - 6. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/ - 7. http://www.gutenberg.org/dirs/etext97/lwfan10h.htm - 8. http://daringfireball.net/projects/markdown/syntax#link - 9. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fn:formd - 10. http://www.leancrew.com/all-this/2012/09/applescript-syntax-highlighting-finally/ - 11. http://www.drbunsen.org/formd-a-markdown-formatting-tool.html - 12. https://twitter.com/ttscoff/status/247398632377184256 - 13. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fnref:formd - 14. https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/ - 15. https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/ - 16. https://leancrew.com/all-this/archive/ - 17. https://leancrew.com/all-this/feed/ - 18. https://leancrew.com/all-this/feed.json - 19. https://fosstodon.org/@drdrang - 20. http://github.com/drdrang - 21. http://www.mathjax.org/ - 22. http://creativecommons.org/licenses/by-sa/3.0/ +References: + +[1] https://leancrew.com/all-this/ +[2] https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/ +[3] https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/ +[4] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/ +[5] http://www.gutenberg.org/dirs/etext97/lwfan10h.htm +[6] http://daringfireball.net/projects/markdown/syntax#link +[7] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fn:formd +[8] http://www.leancrew.com/all-this/2012/09/applescript-syntax-highlighting-finally/ +[9] http://www.drbunsen.org/formd-a-markdown-formatting-tool.html +[10] https://twitter.com/ttscoff/status/247398632377184256 +[11] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fnref:formd +[12] https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/ +[13] https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/ +[23] https://leancrew.com/all-this/archive/ +[24] https://leancrew.com/all-this/feed/ +[25] https://leancrew.com/all-this/feed.json +[26] https://fosstodon.org/@drdrang +[27] http://github.com/drdrang +[28] http://www.mathjax.org/ +[29] http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/static/archive/lukeplant-me-uk-ms1b6l.txt b/static/archive/lukeplant-me-uk-ms1b6l.txt index 1833a30..707e01e 100644 --- a/static/archive/lukeplant-me-uk-ms1b6l.txt +++ b/static/archive/lukeplant-me-uk-ms1b6l.txt @@ -1,126 +1,123 @@ - * 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 +by [7]Luke Plant +Posted in: - — August 22, 2023 18:49 + • [8]Rants + • [9]Software development + • [10]Web development - 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. +— August 22, 2023 18:49 - A lot of developers want simplicity in the same way that a lot of - clients claim they want a fast website. You respond “OK, so we can - remove some of these 17 Javascript trackers and other bloat that’s - making your website horribly slow?” – no, apparently those are all - critical business functionality. +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. - 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. +A lot of developers want simplicity in the same way that a lot of clients claim +they want a fast website. You respond “OK, so we can remove some of these 17 +Javascript trackers and other bloat that’s making your website horribly slow?” +– no, apparently those are all critical business functionality. - The same is often true of complexity. The real test is the question - “what are you willing to sacrifice to achieve simplicity?” If the - answer is “nothing”, then you don’t actually love simplicity at all, - it’s your lowest priority. +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. - When I say “sacrifice”, I don’t mean that choosing simplicity will mean - you are worse off overall – simplicity brings massive benefits. But it - does mean that there will be some things that tempt you to believe you - are missing out. +The same is often true of complexity. The real test is the question “what are +you willing to sacrifice to achieve simplicity?” If the answer is “nothing”, +then you don’t actually love simplicity at all, it’s your lowest priority. - 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. +When I say “sacrifice”, I don’t mean that choosing simplicity will mean you are +worse off overall – simplicity brings massive benefits. But it does mean that +there will be some things that tempt you to believe you are missing out. - Of course we all claim to hate complexity, but it’s actually just - complexity added by other people that we hate — our own bugbears are - always exempted, and for things we understand we quickly become unable - to even see there is a potential problem for other people. Certainly - there are frameworks and dependencies that justify their existence and - adoption, but working out which ones they are is hard. +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. - I think a good test of whether you truly love simplicity is whether you - are able to remove things you have added, especially code you’ve - written, even when it is still providing value, because you realise it - is not providing enough value. +Of course we all claim to hate complexity, but it’s actually just complexity +added by other people that we hate — our own bugbears are always exempted, and +for things we understand we quickly become unable to even see there is a +potential problem for other people. Certainly there are frameworks and +dependencies that justify their existence and adoption, but working out which +ones they are is hard. - Another test is what you are tempted to do when a problem arises with - some of the complexity you’ve added. Is your first instinct to add even - more stuff to fix it, or is it to remove and live with the loss? +I think a good test of whether you truly love simplicity is whether you are +able to remove things you have added, especially code you’ve written, even when +it is still providing value, because you realise it is not providing enough +value. - The only path I can see through all this is to cultivate an almost - obsessive suspicion of [13]FOMO. I think that’s probably key to - learning to [14]say no. +Another test is what you are tempted to do when a problem arises with some of +the complexity you’ve added. Is your first instinct to add even more stuff to +fix it, or is it to remove and live with the loss? + +The only path I can see through all this is to cultivate an almost obsessive +suspicion of [13]FOMO. I think that’s probably key to learning to [14]say no. 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]§ - Comments should load when you scroll to here... +Comments should load when you scroll to here... - Copyright Luke Plant +Copyright Luke Plant - Built using [25]Nikola - Powered by [26]DigitalOcean +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 diff --git a/static/archive/macwright-com-o4dndf.txt b/static/archive/macwright-com-o4dndf.txt index e050afc..7e37454 100644 --- a/static/archive/macwright-com-o4dndf.txt +++ b/static/archive/macwright-com-o4dndf.txt @@ -1,349 +1,328 @@ - #[1]macwright.com - Micro [2]macwright.com - Micro +Tom MacWright + +tom@macwright.com 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 +Railroad - I spent most of 2020 working with [10]Ruby on Rails. I moved a project - from [11]Next.js + [12]Rust to… Rails, baby! Back to the future. My - earlier post on [13]Second-guessing the modern web was inspired by this - experience, that for the product we were building, a ‘modern’ stack was - not working as well as a traditional one. +I spent most of 2020 working with [8]Ruby on Rails. I moved a project from [9] +Next.js + [10]Rust to… Rails, baby! Back to the future. My earlier post on [11] +Second-guessing the modern web was inspired by this experience, that for the +product we were building, a ‘modern’ stack was not working as well as a +traditional one. - We didn’t do competitive analysis against Laravel, Django, or Phoenix. - They’re similar, not radically better or worse. There are multiple - acceptable solutions to a problem, and this was more a matter of - choosing the right kind of solution than pursuing some kind of perfect - choice and burning hours and motivation doing the window-shopping. +We didn’t do competitive analysis against Laravel, Django, or Phoenix. They’re +similar, not radically better or worse. There are multiple acceptable solutions +to a problem, and this was more a matter of choosing the right kind of solution +than pursuing some kind of perfect choice and burning hours and motivation +doing the window-shopping. - What helped Rails win was that the team had a little more experience in - Ruby (with the exception of myself), and we found plenty of resources - for developing and deploying the stack. Rails fit perfectly into the - ideology of [14]Choosing boring technology. Another part of the product - would be the hard, innovative part, so it made no sense to grapple with - bleeding-edge web frameworks. +What helped Rails win was that the team had a little more experience in Ruby +(with the exception of myself), and we found plenty of resources for developing +and deploying the stack. Rails fit perfectly into the ideology of [12]Choosing +boring technology. Another part of the product would be the hard, innovative +part, so it made no sense to grapple with bleeding-edge web frameworks. - This was a really fun experience. There’s a lot to love about Rails. - Other communities could learn a bit from the Ruby & Rails culture and - wisdom. I won’t implement everything in Rails, but it’ll be part of the - toolbox. +This was a really fun experience. There’s a lot to love about Rails. Other +communities could learn a bit from the Ruby & Rails culture and wisdom. I won’t +implement everything in Rails, but it’ll be part of the toolbox. - Before this, I hadn’t touched the stuff. And I bet a lot of people are - like that - they came of age in the world of React and Go, and haven’t - tried anything even remotely similar to Rails. For their benefit, and - to debrief from 2020, here are some notes on the experience. Plus, - [15]Rails-like projects in JavaScript are ramping up quickly, and it’s - fun to know the origins. +Before this, I hadn’t touched the stuff. And I bet a lot of people are like +that - they came of age in the world of React and Go, and haven’t tried +anything even remotely similar to Rails. For their benefit, and to debrief from +2020, here are some notes on the experience. Plus, [13]Rails-like projects in +JavaScript are ramping up quickly, and it’s fun to know the origins. The good Debugging Rails apps is amazing - A while ago, I [16]wrote on Twitter +A while ago, I [14]wrote on Twitter - the real reason why javascript developers don’t use breakpoints and - use console.log is that breakpoints don’t work + the real reason why javascript developers don’t use breakpoints and use + console.log is that breakpoints don’t work - After years of working in JavaScript, I’m used to bad debugging - experiences. The Chrome debugger’s [17]automatic pause on caught - exceptions is amazing, sometimes. But throwing a debugger statement in - some React code is dodgy as hell. Sometimes it works, mostly it - doesn’t. You have to deal with code that might not have the right - [18]sourcemap to translate from bundled & minified code to original - source. Subtle abstractions like React hooks and advanced transpiler - stuff like [19]Regenerator mean that your code’s stacktrace probably - looks nothing like what you expect, with lots of internal garbage. - Sure, you can learn better techniques for diagnosing and debugging - errors, but it’s not just you - the debugging story in JavaScript is - pretty bad. This applies even to Node.js, where one of the debugging - stories is to connect Chrome’s debugger to a Node.js instance: a - finicky solution that doesn’t consistently work. +After years of working in JavaScript, I’m used to bad debugging experiences. +The Chrome debugger’s [15]automatic pause on caught exceptions is amazing, +sometimes. But throwing a debugger statement in some React code is dodgy as +hell. Sometimes it works, mostly it doesn’t. You have to deal with code that +might not have the right [16]sourcemap to translate from bundled & minified +code to original source. Subtle abstractions like React hooks and advanced +transpiler stuff like [17]Regenerator mean that your code’s stacktrace probably +looks nothing like what you expect, with lots of internal garbage. Sure, you +can learn better techniques for diagnosing and debugging errors, but it’s not +just you - the debugging story in JavaScript is pretty bad. This applies even +to Node.js, where one of the debugging stories is to connect Chrome’s debugger +to a Node.js instance: a finicky solution that doesn’t consistently work. - In Rails, there is [20]byebug. You write byebug in your source code, - and you get an interactive REPL right there. It works in views, - controllers, database migrations, everywhere. It almost always works. - Variables are named what you expect. The whole system is paused at that - moment, and you can actually interact with it, using all of the Rails - utilities and your installed gems. +In Rails, there is [18]byebug. You write byebug in your source code, and you +get an interactive REPL right there. It works in views, controllers, database +migrations, everywhere. It almost always works. Variables are named what you +expect. The whole system is paused at that moment, and you can actually +interact with it, using all of the Rails utilities and your installed gems. - If a page crashes unexpectedly, you get a similar REPL experience, in - your browser, automatically. With an automatically cleaned-up - stacktrace that excludes Rails’s own frames. Like the byebug interface, - this REPL actually works and is consistently helpful in finding root - causes. Rarely will you need to use puts to print something to the - console because this debugging system is so good. +If a page crashes unexpectedly, you get a similar REPL experience, in your +browser, automatically. With an automatically cleaned-up stacktrace that +excludes Rails’s own frames. Like the byebug interface, this REPL actually +works and is consistently helpful in finding root causes. Rarely will you need +to use puts to print something to the console because this debugging system is +so good. The magic mostly works - Our Rails app didn’t have any require statements. You mention a - module’s name, and it’s automatically included, using [21]Zeitwerk, a - tool that comes standard with Rails. +Our Rails app didn’t have any require statements. You mention a module’s name, +and it’s automatically included, using [19]Zeitwerk, a tool that comes standard +with Rails. - This kind of system was terrifying to me before. What if you - accidentally import something just by mentioning it? What if two things - have the same name and you import the wrong one? How do you really know - what’s happening? Sure, you’re happy now, with all of that annoying - importing and exporting taken care of, but the sky might fall. +This kind of system was terrifying to me before. What if you accidentally +import something just by mentioning it? What if two things have the same name +and you import the wrong one? How do you really know what’s happening? Sure, +you’re happy now, with all of that annoying importing and exporting taken care +of, but the sky might fall. - Or maybe it just… doesn’t. Maybe impure, vaguely risky techniques are - just a net positive over time, and making everything fully explicit - isn’t really necessary? Now when I’m using other systems, I wonder - - what if I could just mention one of my React components and it would - just… be there? Sure, the system would have to complain if there were - two components with the same name, and it would have to make - assumptions about directory structure, but overall, wouldn’t this be - nice? +Or maybe it just… doesn’t. Maybe impure, vaguely risky techniques are just a +net positive over time, and making everything fully explicit isn’t really +necessary? Now when I’m using other systems, I wonder - what if I could just +mention one of my React components and it would just… be there? Sure, the +system would have to complain if there were two components with the same name, +and it would have to make assumptions about directory structure, but overall, +wouldn’t this be nice? - This applies to a lot of other parts of the system too. Rails is famous - for doing pluralization - you name a model Post and you automatically - get an interface called posts. But what, you ask, of words with uneven - pluralization rules? Rails actually [22]does the right thing, almost - always. And when it fails, you can override it. It actually just saves - time, reliably. +This applies to a lot of other parts of the system too. Rails is famous for +doing pluralization - you name a model Post and you automatically get an +interface called posts. But what, you ask, of words with uneven pluralization +rules? Rails actually [20]does the right thing, almost always. And when it +fails, you can override it. It actually just saves time, reliably. Testing works - I’ve tried to test front-end applications. I’ve set up [23]nightwatch, - [24]jest, [25]enzyme, [26]cypress, and probably 5-10 other frameworks. - Front-end testing is universally terrible. Projects like Cypress are - throwing untold hours into making it less terrible, taking on massive - amounts of complexity to abstract away from fickle browser behavior and - complex interactions. +I’ve tried to test front-end applications. I’ve set up [21]nightwatch, [22]jest +, [23]enzyme, [24]cypress, and probably 5-10 other frameworks. Front-end +testing is universally terrible. Projects like Cypress are throwing untold +hours into making it less terrible, taking on massive amounts of complexity to +abstract away from fickle browser behavior and complex interactions. - But it still sucks. Frontend testing has no good attributes: it’s - unreliable, hard to automate, hard to debug when it fails, and often - doesn’t even assert for important behaviors, so it doesn’t actually - identify regressions. Running frontend tests in CI is resource-heavy, - requiring you to set up headless X windows environments on servers or - use specialized CI services that produce screencasts of test runs. +But it still sucks. Frontend testing has no good attributes: it’s unreliable, +hard to automate, hard to debug when it fails, and often doesn’t even assert +for important behaviors, so it doesn’t actually identify regressions. Running +frontend tests in CI is resource-heavy, requiring you to set up headless X +windows environments on servers or use specialized CI services that produce +screencasts of test runs. - Testing fully-server-rendered applications, on the other hand, is - amazing. A vanilla testing setup with Rails & [27]RSpec can give you - fast, stable, concise, and actually-useful test coverage. You can - actually assert for behavior and navigate through an application like a - user would. These tests are solving a simpler problem - making requests - and parsing responses, without the need for a full browser or headless - browser, without multiple kinds of state to track. +Testing fully-server-rendered applications, on the other hand, is amazing. A +vanilla testing setup with Rails & [25]RSpec can give you fast, stable, +concise, and actually-useful test coverage. You can actually assert for +behavior and navigate through an application like a user would. These tests are +solving a simpler problem - making requests and parsing responses, without the +need for a full browser or headless browser, without multiple kinds of state to +track. - Not only do the tests work better, the testing culture is a completely - different universe. There are entire books written about how to write - RSpec tests that catch bugs, allow software evolution, and aren’t - filled with boilerplate. +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. Gems are so powerful - Powerful and dangerous. +Powerful and dangerous. - I’m used to modules as they work in other systems - Python, Node, Elm, - and so on. They provide objects, functions, and variables that you can - import and combine into your code explicitly. Usually they sit on some - specific level of abstraction - it’s a utility for connecting to - servers or a React component you can use. +I’m used to modules as they work in other systems - Python, Node, Elm, and so +on. They provide objects, functions, and variables that you can import and +combine into your code explicitly. Usually they sit on some specific level of +abstraction - it’s a utility for connecting to servers or a React component you +can use. - Gems can do so much more. You install something like [28]Devise into - your system and it adds views, routes, methods, utilities, you name it. - It’s not like “loading some functions”, it’s more like composing a - whole different app into your app, implicitly. +Gems can do so much more. You install something like [26]Devise into your +system and it adds views, routes, methods, utilities, you name it. It’s not +like “loading some functions”, it’s more like composing a whole different app +into your app, implicitly. - This is obviously terrifying. It means that you can’t look at your - directories of views and your file of routes.rb and know what exists at - a glance. There are other layers, lurking in the ephemeral space of - third-party code. They interact in serious but uncertain ways. +This is obviously terrifying. It means that you can’t look at your directories +of views and your file of routes.rb and know what exists at a glance. There are +other layers, lurking in the ephemeral space of third-party code. They interact +in serious but uncertain ways. - But it’s also pretty incredible - the idea that something like - [29]passport, Node’s middleware, could instead be a full-fledged - authentication system. It means that you have to write a lot less code, - and it also means that the people who use that code have a lot more - code in common. That gems can work on a higher level of abstraction, - making it possible to cobble together software faster, to write less - ‘glue code.’ +But it’s also pretty incredible - the idea that something like [27]passport, +Node’s middleware, could instead be a full-fledged authentication system. It +means that you have to write a lot less code, and it also means that the people +who use that code have a lot more code in common. That gems can work on a +higher level of abstraction, making it possible to cobble together software +faster, to write less ‘glue code.’ There’s so much good writing about Rails - Even if you don’t write Ruby, you should pay attention to [30]Sandi - Metz. She’s incredibly wise and has so many incredible ideas to share. +Even if you don’t write Ruby, you should pay attention to [28]Sandi Metz. She’s +incredibly wise and has so many incredible ideas to share. - And then there’s [31]arkency, [32]ThoughtBot, and so many other - thoughtful writers with years of experience in Rails. Sometimes it’s a - little shocking to google for some obscure problem and see a decade of - discussion about it. +And then there’s [29]arkency, [30]ThoughtBot, and so many other thoughtful +writers with years of experience in Rails. Sometimes it’s a little shocking to +google for some obscure problem and see a decade of discussion about it. - The best practices are also formalized into tools like [33]Code Climate - and [34]reek. I’ve never seen so many actually-useful suggestions come - out of automated systems as I did in the world of Ruby and Rails. +The best practices are also formalized into tools like [31]Code Climate and +[32]reek. I’ve never seen so many actually-useful suggestions come out of +automated systems as I did in the world of Ruby and Rails. Ruby - Ruby is a pretty pleasant language to work in. Sure, it has a lot of - syntax and a sprawling standard library, but you don’t have to use all - of that if you don’t want to. It took me a while to adjust to the - object-oriented way of doing things - in particular, the idea that you - can’t just have a free-range function floating out there, unassociated - with a class or module, like you can in JavaScript. And you can’t just - create an arbitrary one-off object - you either need to define a class - to create an object, or use a Hash to store data. +Ruby is a pretty pleasant language to work in. Sure, it has a lot of syntax and +a sprawling standard library, but you don’t have to use all of that if you +don’t want to. It took me a while to adjust to the object-oriented way of doing +things - in particular, the idea that you can’t just have a free-range function +floating out there, unassociated with a class or module, like you can in +JavaScript. And you can’t just create an arbitrary one-off object - you either +need to define a class to create an object, or use a Hash to store data. - But Ruby’s standard library isn’t that huge. I’ve seen JavaScript’s - ‘standard library’ grow a lot too, and frankly it’s nice to have - methods like [35]String.prototype.padStart instead of having every - little thing in userspace. The only part that felt actively weird was - [36]activesupport - a gem that extends Ruby’s core objects, but is part - of Rails. It felt weird to have string methods that would only work if - your environment was Rails. +But Ruby’s standard library isn’t that huge. I’ve seen JavaScript’s ‘standard +library’ grow a lot too, and frankly it’s nice to have methods like [33] +String.prototype.padStart instead of having every little thing in userspace. +The only part that felt actively weird was [34]activesupport - a gem that +extends Ruby’s core objects, but is part of Rails. It felt weird to have string +methods that would only work if your environment was Rails. - The [37]Dash app for documentation rocketed from my pile of unused - tools to an absolute must-have. In the world of Ruby and Rails, with - most gems having pretty good, semi-standard documentation, you can - search for, and get answers, super fast. The Ruby language - documentation and the Rails documentation is absolutely great. The - JavaScript equivalent - [38]MDN - pales in comparison. +The [35]Dash app for documentation rocketed from my pile of unused tools to an +absolute must-have. In the world of Ruby and Rails, with most gems having +pretty good, semi-standard documentation, you can search for, and get answers, +super fast. The Ruby language documentation and the Rails documentation is +absolutely great. The JavaScript equivalent - [36]MDN - pales in comparison. The bad The asset pipeline - Remember SASS and the YUI Compressor? These are, unfortunately, - defaults in the [39]asset pipeline. There’s [40]Webpacker too, which - has a parallel approach to CSS and images as the asset pipeline. It has - [41]opinionated integrations with stuff like React. Ah, and I should - mention that Rails’s [42]JavaScript utilities are written in… - CoffeeScript. +Remember SASS and the YUI Compressor? These are, unfortunately, defaults in the +[37]asset pipeline. There’s [38]Webpacker too, which has a parallel approach to +CSS and images as the asset pipeline. It has [39]opinionated integrations with +stuff like React. Ah, and I should mention that Rails’s [40]JavaScript +utilities are written in… CoffeeScript. - I get it - it’s hard to keep up with the latest trends in frontend. But - this is one area where Rails’s strong backwards compatibility feels - iffy. I wish that Rails was more opinionated about the frontend, and - that it had better opinions. +I get it - it’s hard to keep up with the latest trends in frontend. But this is +one area where Rails’s strong backwards compatibility feels iffy. I wish that +Rails was more opinionated about the frontend, and that it had better opinions. Best practice churn - In Smalltalk, everything happens somewhere else. - [43]Adele - Goldberg + In Smalltalk, everything happens somewhere else. - [41]Adele Goldberg - Ruby, as today’s Smalltalk, has the same issue. The community venerates - small - that methods should be short, files should be small, complexity - should be controlled. This begs the question of where it all goes - - certainly not in controllers, which should be skinny, and not in views, - which should have very little logic at all, and maybe [44]not in models - either. Maybe in [45]Service Objects, or policies, or decorators? +Ruby, as today’s Smalltalk, has the same issue. The community venerates small - +that methods should be short, files should be small, complexity should be +controlled. This begs the question of where it all goes - certainly not in +controllers, which should be skinny, and not in views, which should have very +little logic at all, and maybe [42]not in models either. Maybe in [43]Service +Objects, or policies, or decorators? - I found myself falling victim to this. I’d try to win CodeClimate’s - approval by moving code around, perfecting the art of making everything - small or at most medium-sized, extracting concerns until most files - looked okay. This was time well-spent on learning, but I have to admit - that it doesn’t actually matter for an early-stage startup’s product. +I found myself falling victim to this. I’d try to win CodeClimate’s approval by +moving code around, perfecting the art of making everything small or at most +medium-sized, extracting concerns until most files looked okay. This was time +well-spent on learning, but I have to admit that it doesn’t actually matter for +an early-stage startup’s product. - In stark contrast to the folks who say that Rails is for prototypes, - there’s a lot of attention paid to long-lived engineering efforts - - adopting patterns that let many team work on the same ‘monolith’, - identifying [46]shotgun surgery - a term I first heard from Sandi Metz. +In stark contrast to the folks who say that Rails is for prototypes, there’s a +lot of attention paid to long-lived engineering efforts - adopting patterns +that let many team work on the same ‘monolith’, identifying [44]shotgun surgery +- a term I first heard from Sandi Metz. ActiveRecord is great, except when it isn’t - One of the hardest bugs we encountered happened with ActiveRecord. We - were creating a set of changes to apply to a model, using their - in-memory instances to do some stuff, and then finally applying them. - This broke because one of the ActiveRecord methods automatically - ‘committed’ those changes, quietly. +One of the hardest bugs we encountered happened with ActiveRecord. We were +creating a set of changes to apply to a model, using their in-memory instances +to do some stuff, and then finally applying them. This broke because one of the +ActiveRecord methods automatically ‘committed’ those changes, quietly. - ActiveRecord is kind of like this - a lot of the times it’s pleasantly - implicit, letting you just assign a value and automatically saving that - to the database. But then it’ll do something implicitly that you don’t - want to happen, and figuring out why this happened and how to stop it - from happening is a real challenge. +ActiveRecord is kind of like this - a lot of the times it’s pleasantly +implicit, letting you just assign a value and automatically saving that to the +database. But then it’ll do something implicitly that you don’t want to happen, +and figuring out why this happened and how to stop it from happening is a real +challenge. - Most of the time, to be clear - it’s a really great system. It provides - lots of ways to generate efficient-enough queries, knowing full well - that SQL performance is often the bottleneck of web applications. Most - of the time it’s really nice that it automatically casts and - deserializes query results. But when it goes bad, the diagnosis and the - cure can be pretty ugly. +Most of the time, to be clear - it’s a really great system. It provides lots of +ways to generate efficient-enough queries, knowing full well that SQL +performance is often the bottleneck of web applications. Most of the time it’s +really nice that it automatically casts and deserializes query results. But +when it goes bad, the diagnosis and the cure can be pretty ugly. + +The other issue with ActiveRecord is that it has efficient methods and +inefficient methods right next to each other, because it automatically turns +your ‘query builder’ into an array when you call array-like methods. So, for +example: - 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: Dogs.all.max_by(&:height) - Is wildly inefficient. It might fetch and deserialized a million - records just to sort them and give you the first. On the other hand, +Is wildly inefficient. It might fetch and deserialized a million records just +to sort them and give you the first. On the other hand, + Dogs.order(height: :desc).first - Is fast - it sorts in the database and fetches a single record. Rails - is both offering smart and easy ways to write optimized code, but also - making it really easy to write inefficient code. - __________________________________________________________________ +Is fast - it sorts in the database and fetches a single record. Rails is both +offering smart and easy ways to write optimized code, but also making it really +easy to write inefficient code. - A Rails-like framework is a really good thing to have in your toolbox, - and there’s a lot to learn from the Ruby community. My hope is that we - see these sorts of abstractions in new languages and frameworks, and - see more of the Ruby community’s culture filter into the programming - world. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - February 18, 2021 [47]Tom MacWright ([48]@tmcw, - [49]@tmcw@mastodon.social) +A Rails-like framework is a really good thing to have in your toolbox, and +there’s a lot to learn from the Ruby community. My hope is that we see these +sorts of abstractions in new languages and frameworks, and see more of the Ruby +community’s culture filter into the programming world. -References +February 18, 2021  [45]Tom MacWright ([46]@tmcw, [47]@tmcw@mastodon.social) - 1. https://macwright.com/micro/rss.xml - 2. https://macwright.com/micro/atom.xml - 3. https://macwright.com/ - 4. https://macwright.com/reading/ - 5. https://macwright.com/photos/ - 6. https://macwright.com/projects/ - 7. https://macwright.com/drawings/ - 8. https://macwright.com/micro/ - 9. https://macwright.com/about/ - 10. https://rubyonrails.org/ - 11. https://nextjs.org/ - 12. https://www.rust-lang.org/ - 13. https://macwright.com/2020/05/10/spa-fatigue - 14. http://boringtechnology.club/ - 15. https://macwright.com/2020/10/28/if-not-spas - 16. https://twitter.com/tmcw/status/1321133460501585922 - 17. https://developers.google.com/web/updates/2015/05/automatically-pause-on-any-exception - 18. https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/ - 19. https://github.com/facebook/regenerator - 20. https://github.com/deivid-rodriguez/byebug - 21. https://github.com/fxn/zeitwerk - 22. https://weblog.rubyonrails.org/2005/8/25/10-reasons-rails-does-pluralization/ - 23. https://nightwatchjs.org/ - 24. https://jestjs.io/ - 25. https://enzymejs.github.io/enzyme/ - 26. https://www.cypress.io/ - 27. https://rspec.info/ - 28. https://github.com/heartcombo/devise - 29. http://www.passportjs.org/ - 30. https://sandimetz.com/ - 31. https://blog.arkency.com/ - 32. https://thoughtbot.com/blog/ - 33. https://codeclimate.com/ - 34. https://github.com/troessner/reek - 35. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart - 36. https://web.archive.org/web/https://rubygems.org/gems/activesupport/versions/6.1.1 - 37. https://kapeli.com/dash - 38. https://developer.mozilla.org/en-US/ - 39. https://guides.rubyonrails.org/asset_pipeline.html - 40. https://edgeguides.rubyonrails.org/webpacker.html - 41. https://github.com/rails/webpacker#integrations - 42. https://github.com/rails/rails/tree/main/actionview/app/assets/javascripts - 43. https://en.wikipedia.org/wiki/Adele_Goldberg_(computer_scientist) - 44. https://thoughtbot.com/blog/skinny-controllers-skinny-models - 45. https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/ - 46. https://en.wikipedia.org/wiki/Shotgun_surgery - 47. https://macwright.com/about/ - 48. https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271 - 49. https://mastodon.social/@tmcw + +References: + +[1] https://macwright.com/ +[2] https://macwright.com/reading/ +[3] https://macwright.com/photos/ +[4] https://macwright.com/projects/ +[5] https://macwright.com/drawings/ +[6] https://macwright.com/micro/ +[7] https://macwright.com/about/ +[8] https://rubyonrails.org/ +[9] https://nextjs.org/ +[10] https://www.rust-lang.org/ +[11] https://macwright.com/2020/05/10/spa-fatigue +[12] http://boringtechnology.club/ +[13] https://macwright.com/2020/10/28/if-not-spas +[14] https://twitter.com/tmcw/status/1321133460501585922 +[15] https://developers.google.com/web/updates/2015/05/automatically-pause-on-any-exception +[16] https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/ +[17] https://github.com/facebook/regenerator +[18] https://github.com/deivid-rodriguez/byebug +[19] https://github.com/fxn/zeitwerk +[20] https://weblog.rubyonrails.org/2005/8/25/10-reasons-rails-does-pluralization/ +[21] https://nightwatchjs.org/ +[22] https://jestjs.io/ +[23] https://enzymejs.github.io/enzyme/ +[24] https://www.cypress.io/ +[25] https://rspec.info/ +[26] https://github.com/heartcombo/devise +[27] http://www.passportjs.org/ +[28] https://sandimetz.com/ +[29] https://blog.arkency.com/ +[30] https://thoughtbot.com/blog/ +[31] https://codeclimate.com/ +[32] https://github.com/troessner/reek +[33] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart +[34] https://web.archive.org/web/https://rubygems.org/gems/activesupport/versions/6.1.1 +[35] https://kapeli.com/dash +[36] https://developer.mozilla.org/en-US/ +[37] https://guides.rubyonrails.org/asset_pipeline.html +[38] https://edgeguides.rubyonrails.org/webpacker.html +[39] https://github.com/rails/webpacker#integrations +[40] https://github.com/rails/rails/tree/main/actionview/app/assets/javascripts +[41] https://en.wikipedia.org/wiki/Adele_Goldberg_%28computer_scientist%29 +[42] https://thoughtbot.com/blog/skinny-controllers-skinny-models +[43] https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/ +[44] https://en.wikipedia.org/wiki/Shotgun_surgery +[45] https://macwright.com/about/ +[46] https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271 +[47] https://mastodon.social/@tmcw diff --git a/static/archive/macwright-com-vvkegs.txt b/static/archive/macwright-com-vvkegs.txt index 972db5b..97b9c00 100644 --- a/static/archive/macwright-com-vvkegs.txt +++ b/static/archive/macwright-com-vvkegs.txt @@ -1,288 +1,267 @@ - #[1]macwright.com - Micro [2]macwright.com - Micro +Tom MacWright + +tom@macwright.com 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. - 2. The backend is an API that that application makes requests against. +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: - 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. + 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. - I’m increasingly skeptical of it. +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. - 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. +I’m increasingly skeptical of it. - But there’s a lot on either side of that sweet spot. +There is a sweet spot of React: in moderately interactive interfaces. Complex +forms that require immediate feedback, UIs that need to move around and react +instantly. That’s where it excels. I helped build the editors in [8]Mapbox +Studio and [9]Observable and for the most part, React was a great choice. - 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. +But there’s a lot on either side of that sweet spot. - 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 high performance parts aren’t React. [10]Mapbox GL, for example, is vanilla +JavaScript and probably should be forever. The level of abstraction that React +works on is too high, and the cost of using React - in payload, parse time, and +so on - is too much for any company to include it as part of an SDK. Same with +the [11]Observable runtime, the juicy center of that product: it’s very +performance-intensive and would barely benefit from a port. - And they’re kind of messy optimizations. Here are some examples. +The less interactive parts don’t benefit much from React. Listing pages, static +pages, blogs - these things are increasingly built in React, but the benefits +they accrue are extremely narrow. A lot of the optimizations we’re deploying to +speed up these things, things like bundle splitting, server-side rendering, and +prerendering, are triangulating what we had before the rise of React. + +And they’re kind of messy optimizations. Here are some examples. Bundle splitting. - As your React application grows, the application bundle grows. Unlike - with a traditional multi-page app, that growth affects every visitor: - you download the whole app the first time that you visit it. At some - point, this becomes a real problem. Someone who lands on the About page - is also downloading 20 other pages in the same application bundle. - Bundle splitting ‘solves’ this problem by creating many JavaScript - bundles that can lazily load each other. So you load the About page and - what your browser downloads is an ‘index’ bundle, and then that ‘index’ - bundle loads the ‘about page’ bundle. +As your React application grows, the application bundle grows. Unlike with a +traditional multi-page app, that growth affects every visitor: you download the +whole app the first time that you visit it. At some point, this becomes a real +problem. Someone who lands on the About page is also downloading 20 other pages +in the same application bundle. Bundle splitting ‘solves’ this problem by +creating many JavaScript bundles that can lazily load each other. So you load +the About page and what your browser downloads is an ‘index’ bundle, and then +that ‘index’ bundle loads the ‘about page’ bundle. - This sort of solves the problem, but it’s not great. Most bundle - splitting techniques require you to load that ‘index bundle’, and then - only once that JavaScript is loaded and executed does your browser know - which ‘page bundle’ it needs. So you need two round-trips to start - rendering. +This sort of solves the problem, but it’s not great. Most bundle splitting +techniques require you to load that ‘index bundle’, and then only once that +JavaScript is loaded and executed does your browser know which ‘page bundle’ it +needs. So you need two round-trips to start rendering. - And then there’s the question of updating code-split bundles. User - sessions are surprisingly long: someone might have your website open in - a tab for weeks at a time. I’ve seen it happen. So if they open the - ‘about page’, keep the tab open for a week, and then request the ‘home - page’, then the home page that they request is dictated by the index - bundle that they downloaded last week. This is a deeply weird and - under-discussed situation. There are essentially two solutions to it: - 1. You keep all generated JavaScript around, forever, and people will - see the version of the site that was live at the time of their - first page request. - 2. You create a system that alerts users when you’ve deployed a new - version of the site, and prompt them to reload. +And then there’s the question of updating code-split bundles. User sessions are +surprisingly long: someone might have your website open in a tab for weeks at a +time. I’ve seen it happen. So if they open the ‘about page’, keep the tab open +for a week, and then request the ‘home page’, then the home page that they +request is dictated by the index bundle that they downloaded last week. This is +a deeply weird and under-discussed situation. There are essentially two +solutions to it: - The first solution has a drawback that might not be immediately - obvious. In those intervening weeks between loading the site and - clicking a link, you might’ve deployed a new API version. So the user - will be using an old version of your JavaScript frontend with a new - version of your API backend, and they’ll trigger errors that none of - your testing knows about, because you’ll usually be testing current - versions of each. + 1. You keep all generated JavaScript around, forever, and people will see the + version of the site that was live at the time of their first page request. + 2. You create a system that alerts users when you’ve deployed a new version of + the site, and prompt them to reload. - And the second solution, while it works (and is what we implemented for - Mapbox Studio), is a bizarre way for a web application to behave. - Prompting users to ‘update’ is something from the bad old days of - desktop software, not from the shiny new days of the web. +The first solution has a drawback that might not be immediately obvious. In +those intervening weeks between loading the site and clicking a link, you +might’ve deployed a new API version. So the user will be using an old version +of your JavaScript frontend with a new version of your API backend, and they’ll +trigger errors that none of your testing knows about, because you’ll usually be +testing current versions of each. - Sure: traditional non-SPA websites are not immune to this pitfall. - Someone might load your website, have a form open for many weeks, and - then submit it after their session expired or the API changed. But - that’s a much more limited exposure to failure than in the SPA case. +And the second solution, while it works (and is what we implemented for Mapbox +Studio), is a bizarre way for a web application to behave. Prompting users to +‘update’ is something from the bad old days of desktop software, not from the +shiny new days of the web. + +Sure: traditional non-SPA websites are not immune to this pitfall. Someone +might load your website, have a form open for many weeks, and then submit it +after their session expired or the API changed. But that’s a much more limited +exposure to failure than in the SPA case. Server-Side Rendering - Okay, so the theory here is that SPAs are initially a blank page, which - is then filled out by React & JavaScript. That’s bad for performance: - HTML pages don’t need to be blank initially. So, Server-Side Rendering - runs your JavaScript frontend code on the backend, creating a - filled-out HTML page. The user loads the page, which now has - pre-rendered content, and then the JavaScript loads and makes the page - interactive. +Okay, so the theory here is that SPAs are initially a blank page, which is then +filled out by React & JavaScript. That’s bad for performance: HTML pages don’t +need to be blank initially. So, Server-Side Rendering runs your JavaScript +frontend code on the backend, creating a filled-out HTML page. The user loads +the page, which now has pre-rendered content, and then the JavaScript loads and +makes the page interactive. - A great optimization, but again, caveats. +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” button, but until the JavaScript loads, that button - doesn’t do anything. So you need to compensate. Either you omit some - interactive elements on load, or you try really hard to make sure that - the JavaScript loads faster than users will click, or you make some - elements not require JavaScript to work - like making them normal links - or forms. Or some combination of those. +The first is that the page you initially render is dead: you’ve created the +[12]Time To Interactive metric. It’s your startup’s homepage, and it has a +“Sign up” button, but until the JavaScript loads, that button doesn’t do +anything. So you need to compensate. Either you omit some interactive elements +on load, or you try really hard to make sure that the JavaScript loads faster +than users will click, or you make some elements not require JavaScript to work +- like making them normal links or forms. Or some combination of those. - And then there’s the authentication story. If you do SSR on any pages - that are custom to the user, then you need to forward any cookies or - authentication-relevant information to your API backend and make sure - that you never cache the server-rendered result. Your - formerly-lightweight application server is now doing quite a bit of - labor, running React & making API requests in order to do this - pre-rendering. +And then there’s the authentication story. If you do SSR on any pages that are +custom to the user, then you need to forward any cookies or +authentication-relevant information to your API backend and make sure that you +never cache the server-rendered result. Your formerly-lightweight application +server is now doing quite a bit of labor, running React & making API requests +in order to do this pre-rendering. APIs - The dream of APIs is that you have generic, flexible endpoints upon - which you can build any web application. That idea breaks down pretty - fast. +The dream of APIs is that you have generic, flexible endpoints upon which you +can build any web application. That idea breaks down pretty fast. - Most interactive web applications start to triangulate on “one query - per page.” 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” application will just, well, try to write some good queries. +For example: a generically-designed REST API that tries not to mix ‘concerns’ +will produce a frontend application that has to make lots of requests to +display a page. And then a new-age GraphQL application will suffer under the +[13]N+1 query problem at the database level until an optimization arrives. And +a traditional “make a query and put it on a page” application will just, well, +try to write some good queries. - None of these solutions are silver bullets: I’ve worked with - overly-strict REST APIs, optimization-hungry GraphQL APIs, and - hand-crafted SQL APIs. But no option really lets a web app be careless - about its data-fetching layer. Web applications can’t sit on top of - independently-designed APIs: to have a chance at performance, the - application and its datasource need to be designed as one. +None of these solutions are silver bullets: I’ve worked with overly-strict REST +APIs, optimization-hungry GraphQL APIs, and hand-crafted SQL APIs. But no +option really lets a web app be careless about its data-fetching layer. Web +applications can’t sit on top of independently-designed APIs: to have a chance +at performance, the application and its datasource need to be designed as one. Data fetching - Speaking of data fetching. It’s really important and really bizarre in - React land. Years ago, I expected that some good patterns would emerge. - Frankly, they didn’t. +Speaking of data fetching. It’s really important and really bizarre in React +land. Years ago, I expected that some good patterns would emerge. Frankly, they +didn’t. - There are decent patterns in the form of GraphQL, but for a React - component that loads data with fetch from an API, the solutions have - only gotten weirder. There’s great documentation for everything else, - but old-fashioned data loading is relegated to one example of how to - mock out ‘fetch’ for testing, and lots of Medium posts of varying - quality. - __________________________________________________________________ +There are decent patterns in the form of GraphQL, but for a React component +that loads data with fetch from an API, the solutions have only gotten weirder. +There’s great documentation for everything else, but old-fashioned data loading +is relegated to one example of how to mock out ‘fetch’ for testing, and lots of +Medium posts of varying quality. - Don’t read this as anti-React. I still think React is pretty great, and - for a particular set of use cases it’s the best tool you can find. And - I explicitly want to say that – from what I’ve seen – most other - Single-Page-Application tools share most of these problems. They’re - issues with the pattern, not the specific frameworks used to implement - it. React alternatives have some great ideas, and they might be better, - but they are ultimately really similar. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - But I’m at the point where I look at where the field is and what the - alternative patterns are – taking a second look at unloved, unpopular, - uncool things like Django, Rails, Laravel – and think what the heck is - happening. We’re layering optimizations upon optimizations in order to - get the SPA-like pattern to fit every use case, and I’m not sure that - it is, well, worth it. +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. - And it should be easy to do a good job. +But I’m at the point where I look at where the field is and what the +alternative patterns are – taking a second look at unloved, unpopular, uncool +things like Django, Rails, Laravel – and think what the heck is happening. +We’re layering optimizations upon optimizations in order to get the SPA-like +pattern to fit every use case, and I’m not sure that it is, well, worth it. - Frameworks should lure people into the [16]pit of success, where - following the normal rules and using normal techniques is the winning - approach. +And it should be easy to do a good job. - 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. +Frameworks should lure people into the [14]pit of success, where following the +normal rules and using normal techniques is the winning approach. - 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. +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. - 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. +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. - 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. - __________________________________________________________________ +And for what? Again - there is a swath of use cases which would be hard without +React and which aren’t complicated enough to push beyond React’s limits. But +there are also a lot of problems for which I can’t see any concrete benefit to +using React. Those are things like blogs, shopping-cart-websites, mostly-[15] +CRUD-and-forms-websites. For these things, all of the fancy optimizations are +trying to get you closer to the performance you would’ve gotten if you just +hadn’t used so much technology. - But the cultural tides are strong. Building a company on Django in 2020 - seems like the equivalent of driving a PT Cruiser and blasting Faith - Hill’s “Breathe” on a CD while your friends are listening to The Weeknd - in their Teslas. Swimming against this current isn’t easy, and not in a - trendy contrarian way. +I 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 don’t think that everyone’s using the SPA pattern for no reason. For - large corporations, it allows teams to work independently: the - “frontend engineers” can “consume” “APIs” from teams that probably work - in a different language and can only communicate through the hierarchy. - For heavily interactive applications, it has real benefits in - modularity, performance, and structure. And it’s beneficial for - companies to shift computing requirements from their servers to their - customers browsers: a real win for reducing their spend on - infrastructure. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - But I think there are a lot of problems that are better solved some - other way. There’s no category winner like React as an alternative. - Ironically, backends are churning through technology even faster than - frontends, which have been loyal to one programming language for - decades. There are some age-old technologies like Rails, Django, and - Laravel, and there are a few halfhearted attempts to do templating and - “serve web pages” 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 the cultural tides are strong. Building a company on Django in 2020 seems +like the equivalent of driving a PT Cruiser and blasting Faith Hill’s “Breathe” +on a CD while your friends are listening to The Weeknd in their Teslas. +Swimming against this current isn’t easy, and not in a trendy contrarian way. - What if everyone’s wrong? We’ve been wrong before. - Follow-ups & commmentary - * [18]"In defense of the modern web", Rich Harris - * [19]Friday Night Deploys (Podcast) #22: A Brief Discussion On The - State Of The Modern Web - * [20]Frontend First (Podcast): Read & Discuss - * [21]A Ready-To-Try Concept in Response to “Second-guessing the - modern web” +I don’t think that everyone’s using the SPA pattern for no reason. For large +corporations, it allows teams to work independently: the “frontend engineers” +can “consume” “APIs” from teams that probably work in a different language and +can only communicate through the hierarchy. For heavily interactive +applications, it has real benefits in modularity, performance, and structure. +And it’s beneficial for companies to shift computing requirements from their +servers to their customers browsers: a real win for reducing their spend on +infrastructure. - May 10, 2020 [22]Tom MacWright ([23]@tmcw, [24]@tmcw@mastodon.social) +But I think there are a lot of problems that are better solved some other way. +There’s no category winner like React as an alternative. Ironically, backends +are churning through technology even faster than frontends, which have been +loyal to one programming language for decades. There are some age-old +technologies like Rails, Django, and Laravel, and there are a few halfhearted +attempts to do templating and “serve web pages” from Go, Node, and other new +languages. If you go this way, you’re beset by the cognitive dissonance of +following in the footsteps of enormous projects - Wikipedia rendering web pages +in PHP, Craigslist rendering webpages in Perl - but being far outside the norms +of modern web development. If Wikipedia were started today, it’d be React. +Maybe? -References +What if everyone’s wrong? We’ve been wrong before. - 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 +Follow-ups & commmentary + + • [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” + +May 10, 2020  [20]Tom MacWright ([21]@tmcw, [22]@tmcw@mastodon.social) + + +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 diff --git a/static/archive/maggieappleton-com-7am49k.txt b/static/archive/maggieappleton-com-7am49k.txt index 9925cfb..beee885 100644 --- a/static/archive/maggieappleton-com-7am49k.txt +++ b/static/archive/maggieappleton-com-7am49k.txt @@ -1,150 +1,145 @@ - #[1]Main RSS Feed +[1]Home +The Garden +[3]Now +[4]About +notes - [2]Home - The Garden (BUTTON) - [3]Now - [4]About - (BUTTON) - - notes - - evergreen +evergreen What App is That? - A guide to the apps and tools I use to create illustrations - * [5]How to Illustrate +A guide to the apps and tools I use to create illustrations - Planted over 3 years agoLast tended over 2 years ago + • [6]How to Illustrate - (BUTTON) Back To Top +Planted over 3 years agoLast tended over 2 years ago +Back To Top - "What app is that?" - [6] + "What app is that?" + +[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... +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 - And here's a couple of my common workflows for different styles of - illustrations and visuals... +And here's a couple of my common workflows for different styles of +illustrations and visuals... 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... +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. +Illustrations that look more “polished” are made primarily in Adobe +Illustrator, with a touch of Photoshop at the end for lighting effects and +texture. - Pieces like these... +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 Why You Own an iPad and Still Can't Draw - The failure of drawing materials without mediums and meat +The failure of drawing materials without mediums and meat Frequently Asked Questions - Questions I am often asked to answer +Questions I am often asked to answer 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 - Tomiwa 😃 - Maggie Appleton - indieweb.social/@maggie - 2 Likes and Retweets +Tomiwa 😃 +Maggie Appleton - indieweb.social/@maggie +2 Likes and Retweets Want to stay up to date? - (BUTTON) Subscribe via RSS Feed - © 2024 Maggie Appleton - * [8]The Garden - * [9]Essays - * [10]About - * [11]Notes - * [12]Now - * [13]Patterns - * [14]Library - * [15]Projects - * [16]Colophon +Subscribe via RSS Feed +[12][13][14][15][16] +© 2024 Maggie Appleton -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 diff --git a/static/archive/maggieappleton-com-fube9k.txt b/static/archive/maggieappleton-com-fube9k.txt index aa2b115..81bd7a3 100644 --- a/static/archive/maggieappleton-com-fube9k.txt +++ b/static/archive/maggieappleton-com-fube9k.txt @@ -1,135 +1,128 @@ - #[1]Main RSS Feed +[1]Home +The Garden +[3]Now +[4]About +Essays - [2]Home - The Garden (BUTTON) - [3]Now - [4]About - (BUTTON) - - Essays - - budding +budding Why You Own an iPad and Still Can't Draw - The failure of drawing materials without mediums and meat - * [5]How to Illustrate +The failure of drawing materials without mediums and meat - Planted over 3 years agoLast tended over 3 years ago + • [6]How to Illustrate - (BUTTON) Back To Top +Planted over 3 years agoLast tended over 3 years ago +Back To Top +Assumed Audience - Assumed Audience +Anyone who thinks they can't draw, but would like to learn - Anyone who thinks they can't draw, but would like to learn +They message me a lot. - 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. - 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 +[8]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 - [6]What App is That? +How are you supposed to draw if you don't also have these fancy tools? - How are you supposed to draw if you don't also have these fancy tools? +This is the tricky bit. - 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. - 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] +[9] What you have is Material without the Medium or the Meat - What on earth do I mean by material, medium, and 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. +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. - That's the goal. Don't let the shiny iPad reflection blind you. +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. +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 - Tomiwa 😃 - Maggie Appleton - indieweb.social/@maggie - 2 Likes and Retweets +Tomiwa 😃 +Maggie Appleton - indieweb.social/@maggie +2 Likes and Retweets Want to stay up to date? - (BUTTON) Subscribe via RSS Feed - © 2024 Maggie Appleton - * [9]The Garden - * [10]Essays - * [11]About - * [12]Notes - * [13]Now - * [14]Patterns - * [15]Library - * [16]Projects - * [17]Colophon +Subscribe via RSS Feed +[13][14][15][16][17] +© 2024 Maggie Appleton -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 diff --git a/static/archive/maggieappleton-com-n6xsqa.txt b/static/archive/maggieappleton-com-n6xsqa.txt index 7cce61a..0ae8ac1 100644 --- a/static/archive/maggieappleton-com-n6xsqa.txt +++ b/static/archive/maggieappleton-com-n6xsqa.txt @@ -1,772 +1,738 @@ - #[1]Main RSS Feed +[1]Home +The Garden +[3]Now +[4]About +Essays - [2]Home - The Garden (BUTTON) - [3]Now - [4]About - (BUTTON) - - Essays - - evergreen +evergreen A Brief History & Ethos of the Digital Garden - A newly revived philosophy for publishing personal knowledge on the web - * [5]Digital Gardening - * [6]Personal Knowledge - * [7]The Web +A newly revived philosophy for publishing personal knowledge on the web - Planted over 3 years agoLast tended over 2 years ago + • [6]Digital Gardening + • [7]Personal Knowledge + • [8]The Web - (BUTTON) Back To Top +Planted over 3 years agoLast tended over 2 years ago +Back To Top Table of Contents - [8]A Brief History of Digital Gardens[9]The Early Gardens of - Hypertext[10]Digital Puttering on Twitter[11]Gardens, Streams, and - Caufield's Metaphors[12]Carrying on Caufield[13]Digital Gardening's - Fertile Soil[14]Developer-led Gardening[15]The Six Patterns of - Gardening[16]1. Topography over Timelines[17]2. Continuous Growth[18]3. - Imperfection & Learning in Public[19]4. Playful, Personal, and - Experimental[20]5. Intercropping & Content Diversity[21]6. Independent - Ownership +[10]A Brief History of Digital Gardens[11]The Early Gardens of Hypertext[12] +Digital Puttering on Twitter[13]Gardens, Streams, and Caufield's Metaphors[14] +Carrying on Caufield[15]Digital Gardening's Fertile Soil[16]Developer-led +Gardening[17]The Six Patterns of Gardening[18]1. Topography over Timelines[19] +2. Continuous Growth[20]3. Imperfection & Learning in Public[21]4. Playful, +Personal, and Experimental[22]5. Intercropping & Content Diversity[23]6. +Independent Ownership Table of Contents - [22]A Brief History of Digital Gardens[23]The Early Gardens of - Hypertext[24]Digital Puttering on Twitter[25]Gardens, Streams, and - Caufield's Metaphors[26]Carrying on Caufield[27]Digital Gardening's - Fertile Soil[28]Developer-led Gardening[29]The Six Patterns of - Gardening[30]1. Topography over Timelines[31]2. Continuous Growth[32]3. - Imperfection & Learning in Public[33]4. Playful, Personal, and - Experimental[34]5. Intercropping & Content Diversity[35]6. Independent - Ownership - Loading... +[24]A Brief History of Digital Gardens[25]The Early Gardens of Hypertext[26] +Digital Puttering on Twitter[27]Gardens, Streams, and Caufield's Metaphors[28] +Carrying on Caufield[29]Digital Gardening's Fertile Soil[30]Developer-led +Gardening[31]The Six Patterns of Gardening[32]1. Topography over Timelines[33] +2. Continuous Growth[34]3. Imperfection & Learning in Public[35]4. Playful, +Personal, and Experimental[36]5. Intercropping & Content Diversity[37]6. +Independent Ownership +Loading... - My highlighted a number of sites that are taking a new approach to the - way we publish personal knowledge on the web. +My highlighted a number of sites that are taking a new approach to the way we +publish personal knowledge on the web. - They're not following the conventions of the "personal blog," as we've - come to know it. Rather than presenting a set of polished articles, - displayed in reverse chronological order, these sites act more like - free form, work-in-progress wikis. +They're not following the conventions of the "personal blog," as we've come to +know it. Rather than presenting a set of polished articles, displayed in +reverse chronological order, these sites act more like free form, +work-in-progress wikis. - A garden is a collection of evolving ideas that aren't strictly - organised by their publication date. They're inherently exploratory – - notes are linked through contextual associations. They aren't refined - or complete - notes are published as half-finished thoughts that will - grow and evolve over time. They're less rigid, less performative, and - less perfect than the personal websites we're used to seeing. +A garden is a collection of evolving ideas that aren't strictly organised by +their publication date. They're inherently exploratory – notes are linked +through contextual associations. They aren't refined or complete - notes are +published as half-finished thoughts that will grow and evolve over time. +They're less rigid, less performative, and less perfect than the personal +websites we're used to seeing. - It harkens back to the early days of the web when people had fewer - notions of how websites "should be.” It's an ethos that is both - classically old and newly imagined. - __________________________________________________________________ +It harkens back to the early days of the web when people had fewer notions of +how websites "should be.” It's an ethos that is both classically old and newly +imagined. - [36] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[38] A Brief History of Digital Gardens - Let's go on a short journey to the origin of this word. The notion of a - digital garden is not a 2020 invention. It's been floating around for - over two decades. However, it's passed through a couple of semantic - shifts in that time, meaning different things to different people - across the years. As words tend to do. +Let's go on a short journey to the origin of this word. The notion of a digital +garden is not a 2020 invention. It's been floating around for over two decades. +However, it's passed through a couple of semantic shifts in that time, meaning +different things to different people across the years. As words tend to do. - Tracing back how - [37]Neologisms - are born helps us understand why anyone needed this word in the first - place. Language is always a response to the evolving world around us – - we expand it when our current vocabulary fails to capture what we're - observing, or have a particular desire for how we'd like the future to - unfold. Naming is a political act as much as a poetic one. +Tracing back how +[39]Neologisms +are born helps us understand why anyone needed this word in the first place. +Language is always a response to the evolving world around us – we expand it +when our current vocabulary fails to capture what we're observing, or have a +particular desire for how we'd like the future to unfold. Naming is a political +act as much as a poetic one. The Early Gardens of Hypertext - Mark Bernstein's 1998 essay appears to be the first recorded mention of - the term. Mark was part of the early hypertext crowd – the developers - figuring out how to arrange and present this new medium. +Mark Bernstein's 1998 essay appears to be the first recorded mention of the +term. Mark was part of the early hypertext crowd – the developers figuring out +how to arrange and present this new medium. - While the essay is a beautiful ode to free-wheeling internet - exploration, it's less about building personal internet spaces, and - more of a manifesto on user experience flows and content organisation. +While the essay is a beautiful ode to free-wheeling internet exploration, it's +less about building personal internet spaces, and more of a manifesto on user +experience flows and content organisation. - Let's note that Mark's graphics are to die for +Let's note that Mark's graphics are to die for - To put this in its historical context, Mark's writing was part of a - larger conversation happening throughout the nineties around hypertext - and its metaphorical framing. +To put this in its historical context, Mark's writing was part of a larger +conversation happening throughout the nineties around hypertext and its +metaphorical framing. - The early web-adopters were caught up in the idea of The Web as a - labyrinth-esque community landscape tended by and These creators wanted - to enable pick-your-own-path experiences, while also providing enough - signposts that people didn't feel lost in their new, strange medium. +The early web-adopters were caught up in the idea of The Web as a +labyrinth-esque community landscape tended by and These creators wanted to +enable pick-your-own-path experiences, while also providing enough signposts +that people didn't feel lost in their new, strange medium. - The early web debates around this became known as – the issue of how to - give web users just enough guidance to freely explore the web, without - forcing them into pre-defined browsing experiences. The eternal - struggle to find the right balance of chaos and structure. +The early web debates around this became known as – the issue of how to give +web users just enough guidance to freely explore the web, without forcing them +into pre-defined browsing experiences. The eternal struggle to find the right +balance of chaos and structure. - "Unplanned hypertext sprawl is wilderness: complex and interesting, - but uninviting. Interesting things await us in the thickets, but we - may be reluctant to plough through the brush, subject to thorns and - mosquitoes" + "Unplanned hypertext sprawl is wilderness: complex and interesting, but + uninviting. Interesting things await us in the thickets, but we may be + reluctant to plough through the brush, subject to thorns and mosquitoes" - While Mark's essay was concerned with different problems to the ones we - face on the web today, its core ethos feels aligned with our emerging - understanding of digital gardening. It captures the desire for - exploratory experiences, a welcoming of digital weirdness, and a - healthy amount of resistance to top-down structures. +While Mark's essay was concerned with different problems to the ones we face on +the web today, its core ethos feels aligned with our emerging understanding of +digital gardening. It captures the desire for exploratory experiences, a +welcoming of digital weirdness, and a healthy amount of resistance to top-down +structures. - After Mark's essay the term digital gardening goes quiet for nearly a - decade. +After Mark's essay the term digital gardening goes quiet for nearly a decade. Digital Puttering on Twitter - In April of 2007 when Tweets first started ringing through the internet - airwaves, Rory Sutherland (oddly, the vice president of Ogilvy Group) - used the term "digital gardening", but defined it as "faffing about - syncing things, defragging - like pruning for young people" - Loading... +In April of 2007 when Tweets first started ringing through the internet +airwaves, Rory Sutherland (oddly, the vice president of Ogilvy Group) used the +term "digital gardening", but defined it as "faffing about syncing things, +defragging - like pruning for young people" - The next dozen mentions on Twitter all followed this sentiment – people - were using the term as a way to describe digital maintenance - the act - of cleaning up one's digital space. The focus was on sorting, weeding, - pruning, and decluttering, rather than growing and cultivating. People - mentioned cleaning out private folders, codebases, and photo albums as - the focus of their gardening efforts. +Loading... - These people were digital puttering more than gardening. - Loading... - Loading... - Loading... +The next dozen mentions on Twitter all followed this sentiment – people were +using the term as a way to describe digital maintenance - the act of cleaning +up one's digital space. The focus was on sorting, weeding, pruning, and +decluttering, rather than growing and cultivating. People mentioned cleaning +out private folders, codebases, and photo albums as the focus of their +gardening efforts. - Since none of these folks reference to the earlier nineties notion of - digital gardening, or mention issues of hypertext navigation, this use - of the word feels like a brief tangent. Given the tiny size of Twitter - in the early days, these people probably belonged to the same social - flocks and were riffing off one another. It's not necessarily part of - the mainstream narrative we're tracking, but shows there's not one - strict meaning to the term. +These people were digital puttering more than gardening. - That said, some degree of faffing about, sorting, and pruning are - certainly part of the practice of digital gardening. Though best - enjoyed in moderation. +Loading... +Loading... +Loading... + +Since none of these folks reference to the earlier nineties notion of digital +gardening, or mention issues of hypertext navigation, this use of the word +feels like a brief tangent. Given the tiny size of Twitter in the early days, +these people probably belonged to the same social flocks and were riffing off +one another. It's not necessarily part of the mainstream narrative we're +tracking, but shows there's not one strict meaning to the term. + +That said, some degree of faffing about, sorting, and pruning are certainly +part of the practice of digital gardening. Though best enjoyed in moderation. Gardens, Streams, and Caufield's Metaphors - At the 2015 Digital Learning Research Network, Mike Caufield delivered - a keynote on . It later becomes that lays the foundations for our - current understanding of the term. If anyone should be considered the - original source of digital gardening, it's Caufield. They are the first - to lay out this whole idea in poetic, coherent words. +At the 2015 Digital Learning Research Network, Mike Caufield delivered a +keynote on . It later becomes that lays the foundations for our current +understanding of the term. If anyone should be considered the original source +of digital gardening, it's Caufield. They are the first to lay out this whole +idea in poetic, coherent words. - Caufield makes clear digital gardening is not about specific tools – - it's not a Wordpress plugin, Gastby theme, or Jekyll template. It's a - different way of thinking about our online behaviour around information - - one that accumulates personal knowledge over time in an explorable - space. +Caufield makes clear digital gardening is not about specific tools – it's not a +Wordpress plugin, Gastby theme, or Jekyll template. It's a different way of +thinking about our online behaviour around information - one that accumulates +personal knowledge over time in an explorable space. - Caufield's main argument was that we have become swept away by streams - – the collapse of information into single-track timelines of events. - The conversational feed design of email inboxes, group chats, and - InstaTwitBook is fleeting – they're only concerned with self-assertive - immediate thoughts that rush by us in a few moments. +Caufield's main argument was that we have become swept away by streams – the +collapse of information into single-track timelines of events. The +conversational feed design of email inboxes, group chats, and InstaTwitBook is +fleeting – they're only concerned with self-assertive immediate thoughts that +rush by us in a few moments. - This is not inherently bad. Streams have their time and place. Twitter - is a force-multiplier for exploratory thoughts and delightful - encounters once you fall in with the right crowd and learn to play the - game. +This is not inherently bad. Streams have their time and place. Twitter is a +force-multiplier for exploratory thoughts and delightful encounters once you +fall in with the right crowd and learn to play the game. - But streams only surface the Zeitgeisty ideas of the last 24 hours. - They are not designed to accumulate knowledge, connect disparate - information, or mature over time. +But streams only surface the Zeitgeisty ideas of the last 24 hours. They are +not designed to accumulate knowledge, connect disparate information, or mature +over time. - The garden is our counterbalance. Gardens present information in a - richly linked landscape that grows slowly over time. Everything is - arranged and connected in ways that allow you to explore. Think about - the way Wikipedia works when you're hopping from to to . It's - hyperlinking at it's best. You get to actively choose which curiosity - trail to follow, rather than defaulting to the algorithmically-filtered - ephemeral stream. The garden helps us move away from time-bound streams - and into contextual knowledge spaces. - "The Garden is the web as topology. The web as space. It’s the - integrative web, the iterative web, the web as an arrangement and - rearrangement of things to one another." +The garden is our counterbalance. Gardens present information in a richly +linked landscape that grows slowly over time. Everything is arranged and +connected in ways that allow you to explore. Think about the way Wikipedia +works when you're hopping from to to . It's hyperlinking at it's best. You get +to actively choose which curiosity trail to follow, rather than defaulting to +the algorithmically-filtered ephemeral stream. The garden helps us move away +from time-bound streams and into contextual knowledge spaces. + + "The Garden is the web as topology. The web as space. It’s the integrative + web, the iterative web, the web as an arrangement and rearrangement of + things to one another." Carrying on Caufield - Good ideas take time to germinate, and Caufield's vision of the - personal garden didn't reach critical mass right off the bat. It lay - dormant, waiting for the right time and the right people to find it. +Good ideas take time to germinate, and Caufield's vision of the personal garden +didn't reach critical mass right off the bat. It lay dormant, waiting for the +right time and the right people to find it. - In late 2018 the corner of Twitter I hang out in began using the term - more regularly – folks began passing around Caufield's original article - and experimenting with ways to turn their chronological blogs into - exploratory, interlinked gardens. +In late 2018 the corner of Twitter I hang out in began using the term more +regularly – folks began passing around Caufield's original article and +experimenting with ways to turn their chronological blogs into exploratory, +interlinked gardens. - Tom Critchlow's 2018 article was one of the main kick-off points. Tom - read Caufield's essay and began speculating on alternative metaphors to - frame the way we consume and produce information. They suggested we add - campfires to the idea of streams and gardens – the private Slack - groups, casual blog rings, and - [38]Cozy Web - areas where people write in response to one another. While gardens - present the ideas of an individual, campfires are conversational spaces - to exchange ideas that aren't yet fully formed. +Tom Critchlow's 2018 article was one of the main kick-off points. Tom read +Caufield's essay and began speculating on alternative metaphors to frame the +way we consume and produce information. They suggested we add campfires to the +idea of streams and gardens – the private Slack groups, casual blog rings, and +[40]Cozy Web +areas where people write in response to one another. While gardens present the +ideas of an individual, campfires are conversational spaces to exchange ideas +that aren't yet fully formed. - Tom piece was shortly followed by Joel Hooks' in early 2019. Joel - focused on the process of digital gardening, emphasising the slow - growth of ideas through writing, rewriting, editing, and revising - thoughts in public. Instead of slapping Fully Formed Opinions up on the - web and never changing them. +Tom piece was shortly followed by Joel Hooks' in early 2019. Joel focused on +the process of digital gardening, emphasising the slow growth of ideas through +writing, rewriting, editing, and revising thoughts in public. Instead of +slapping Fully Formed Opinions up on the web and never changing them. - Joel also added Amy Hoy's post to the pile of influential ideas that - led to our current gardening infatuation. While not specifically about - gardening, Amy's piece gives us a lot of good historical context. In - it, she explores the history of blogs over the last three decades, and - pinpoints exactly when we all became fixated on publishing our thoughts - in reverse chronological order (spoiler: around 2001 with the launch of - ). +Joel also added Amy Hoy's post to the pile of influential ideas that led to our +current gardening infatuation. While not specifically about gardening, Amy's +piece gives us a lot of good historical context. In it, she explores the +history of blogs over the last three decades, and pinpoints exactly when we all +became fixated on publishing our thoughts in reverse chronological order +(spoiler: around 2001 with the launch of ). - Amy argues that Moveable Type didn't just launch us into the - "Chronological Sort Era". It also killed the wild, diverse, hodge-podge - personalisation of websites that characterised the early web. Instead - of hand-coding your own layout and deciding exactly how to arrange the - digital furniture, we began to enter the age of standardised layouts. - Plug n' play templates that you drop content into became the norm. It - became harder and more technically involved to edit the HTML & CSS - yourself. +Amy argues that Moveable Type didn't just launch us into the "Chronological +Sort Era". It also killed the wild, diverse, hodge-podge personalisation of +websites that characterised the early web. Instead of hand-coding your own +layout and deciding exactly how to arrange the digital furniture, we began to +enter the age of standardised layouts. Plug n' play templates that you drop +content into became the norm. It became harder and more technically involved to +edit the HTML & CSS yourself. - "Suddenly people weren’t creating homepages or even web pages... - they were writing web content in form fields and text areas inside a - web page." + "Suddenly people weren’t creating homepages or even web pages... they were + writing web content in form fields and text areas inside a web page." - Many people have lamented the web's slow transition from unique - homepages to a bland ocean of generic Wordpress themes. Digital - gardening is part of the pushback against the limited range of vanilla - web formats and layouts we now for granted. +Many people have lamented the web's slow transition from unique homepages to a +bland ocean of generic Wordpress themes. Digital gardening is part of the +pushback against the limited range of vanilla web formats and layouts we now +for granted. - Over the course 2019 and early 2020, more and more people began riffing - on the concept. Shaun Wang compiled the . Anne-Laure Le Cunff published - a popular guide to setting up . The IndieWeb community hosted a to - discuss the history of commonplace books, personal wikis, and memory - palaces. +Over the course 2019 and early 2020, more and more people began riffing on the +concept. Shaun Wang compiled the . Anne-Laure Le Cunff published a popular +guide to setting up . The IndieWeb community hosted a to discuss the history of +commonplace books, personal wikis, and memory palaces. - By late 2020 this whole concept had attracted enough attention for the - MIT Tech Review to write on it. Perhaps this is the watershed moment - when a Twitter buzzword has "made it." +By late 2020 this whole concept had attracted enough attention for the MIT Tech +Review to write on it. Perhaps this is the watershed moment when a Twitter +buzzword has "made it." Digital Gardening's Fertile Soil - What made our current historical moment the right time for digital - gardening to take off? +What made our current historical moment the right time for digital gardening to +take off? - The timing coincided with a few complimentary ideas and communities - rallying around personal knowledge systems, note-taking practices, and - reimagining tools for blogging. The scene was ripe for new ideas around - curating and sharing personal knowledge online. +The timing coincided with a few complimentary ideas and communities rallying +around personal knowledge systems, note-taking practices, and reimagining tools +for blogging. The scene was ripe for new ideas around curating and sharing +personal knowledge online. - Many of the people who jumped on the early digital gardening bandwagon - were part of communities like... - * The collective – a group that has been championing independent web - spaces outside the walled gardens of Instatwitbook for nearly a - decade. - * Users of the note-taking app – Roam pioneered new ways of - interlinking content and strongly appeals to people trying to build - sprawling knowledge graphs. - * Followers of Tiago Forte's course which popularised the idea of - actively curating personal knowledge. - * People rallying around the ethos that encourages continuously - creating 'learning exhaust' in the form of notes and summaries. +Many of the people who jumped on the early digital gardening bandwagon were +part of communities like... + + • The collective – a group that has been championing independent web spaces + outside the walled gardens of Instatwitbook for nearly a decade. + • Users of the note-taking app – Roam pioneered new ways of interlinking + content and strongly appeals to people trying to build sprawling knowledge + graphs. + • Followers of Tiago Forte's course which popularised the idea of actively + curating personal knowledge. + • People rallying around the ethos that encourages continuously creating + 'learning exhaust' in the form of notes and summaries. Developer-led Gardening - Many of these early adopters were people who understood how to build - websites – either professional developers or enthusiastic hobbyists. - Any kind of novel experimentation with the web requires knowing a - non-trivial amount of HTML, CSS, and JS. Not to mention all the - surrounding infrastructure required actually to get a site live. - Developers took to the idea because they already had the technical - ability to jump in play around with what garden-esque websites might - look like. +Many of these early adopters were people who understood how to build websites – +either professional developers or enthusiastic hobbyists. Any kind of novel +experimentation with the web requires knowing a non-trivial amount of HTML, +CSS, and JS. Not to mention all the surrounding infrastructure required +actually to get a site live. Developers took to the idea because they already +had the technical ability to jump in play around with what garden-esque +websites might look like. - The current state of web development helped here too. While it feels - like we've been in a slow descent into a horrifyingly complex and - bloated web development process, a number of recent tools have made it - easier to get a fully customised website up and running. Services like - and have taken the pain out of deployment. Static site generators like - , , and make it easier to build sophisticated websites that - auto-generate pages, and take care of grunt work like optimising load - time, images, and SEO. These services are trying to find a happy middle - ground between tediously hand-coding solutions, and being trapped in - the restrictions of Wordpress or Squarespace. +The current state of web development helped here too. While it feels like we've +been in a slow descent into a horrifyingly complex and bloated web development +process, a number of recent tools have made it easier to get a fully customised +website up and running. Services like and have taken the pain out of +deployment. Static site generators like , , and make it easier to build +sophisticated websites that auto-generate pages, and take care of grunt work +like optimising load time, images, and SEO. These services are trying to find a +happy middle ground between tediously hand-coding solutions, and being trapped +in the restrictions of Wordpress or Squarespace. - While developers were the first on the scene, plenty of writers, - researchers, and note-taking enthusiasts have been drawn to the idea of - digital gardening. To help folks without programming skills join in, - there's been a surge in templates and platforms that allow people to - build their own digital gardens without touching a ton of code. I've - written an entire guide to - [39]Digital Gardening for Non-Technical Folks - if you fall into that category. +While developers were the first on the scene, plenty of writers, researchers, +and note-taking enthusiasts have been drawn to the idea of digital gardening. +To help folks without programming skills join in, there's been a surge in +templates and platforms that allow people to build their own digital gardens +without touching a ton of code. I've written an entire guide to +[41]Digital Gardening for Non-Technical Folks +if you fall into that category. - Tools like , , and are all great options. Many of them offer fancy - features like nested folders, - [40]Bi-Directional Links - , footnotes, and visual graphs. +Tools like , , and are all great options. Many of them offer fancy features +like nested folders, +[42]Bi-Directional Links +, footnotes, and visual graphs. - However, many of these no-code tools still feel like cookie-cutter - solutions. Rather than allowing people to design the and spatial - layouts of their gardens, they inevitably force people into pre-made - arrangements. This doesn't meant they don't "count,” as "real” gardens, - but simply that they limit their gardeners to some extent. You can't - design different types of links, novel features, experimental layouts, - or custom architecture. They're pre-fab houses instead of raw building - materials. - __________________________________________________________________ +However, many of these no-code tools still feel like cookie-cutter solutions. +Rather than allowing people to design the and spatial layouts of their gardens, +they inevitably force people into pre-made arrangements. This doesn't meant +they don't "count,” as "real” gardens, but simply that they limit their +gardeners to some extent. You can't design different types of links, novel +features, experimental layouts, or custom architecture. They're pre-fab houses +instead of raw building materials. - [41] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[43] The Six Patterns of Gardening - In all the recent gardening flurry, we've run into the inevitable - confusion around how to define the term. - Loading... +In all the recent gardening flurry, we've run into the inevitable confusion +around how to define the term. - There are contested ideas about what qualifies as a garden, what the - core ethos should focus on, and whether it's worthy of a new label at - all. What exactly makes a website a digital garden as opposed to just - another blog? +Loading... - After reading all the existing takes on the term, observing a wide - variety of gardens, and collecting some of the , I've identified a few - key qualities they all share. +There are contested ideas about what qualifies as a garden, what the core ethos +should focus on, and whether it's worthy of a new label at all. What exactly +makes a website a digital garden as opposed to just another blog? - There are a few guiding principles, design patterns and structures - people are rallying around. This amounts to a kind of digital gardening - [42]Pattern Language - . +After reading all the existing takes on the term, observing a wide variety of +gardens, and collecting some of the , I've identified a few key qualities they +all share. + +There are a few guiding principles, design patterns and structures people are +rallying around. This amounts to a kind of digital gardening +[44]Pattern Language +. 1. Topography over Timelines - Gardens are organised around contextual relationships and associative - links; the concepts and themes within each note determine how it's - connected to others. +Gardens are organised around contextual relationships and associative links; +the concepts and themes within each note determine how it's connected to +others. - This runs counter to the time-based structure of traditional blogs: - posts presented in reverse chronological order based on publication - date. +This runs counter to the time-based structure of traditional blogs: posts +presented in reverse chronological order based on publication date. - Gardens don't consider publication dates the most important detail of a - piece of writing. Dates might be included on posts, but they aren't the - structural basis of how you navigate around the garden. Posts are - connected to other by posts through related themes, topics, and shared - context. +Gardens don't consider publication dates the most important detail of a piece +of writing. Dates might be included on posts, but they aren't the structural +basis of how you navigate around the garden. Posts are connected to other by +posts through related themes, topics, and shared context. - One of the best ways to do this is through - [43]Bi-Directional Links - – links that make both the destination page and the source page visible - to the reader. This makes it easy to move between related content. +One of the best ways to do this is through +[45]Bi-Directional Links +– links that make both the destination page and the source page visible to the +reader. This makes it easy to move between related content. - Because garden notes are densely linked, a garden explorer can enter at - any location and follow any trail they link through the content, rather - than being dumped into a "most recent” feed. +Because garden notes are densely linked, a garden explorer can enter at any +location and follow any trail they link through the content, rather than being +dumped into a "most recent” feed. - Dense links are essential, but gardeners often layer on other ways of - exploring their knowledge base. They might have , , tags and filtering - functionality, , , or listing notable and popular content. +Dense links are essential, but gardeners often layer on other ways of exploring +their knowledge base. They might have , , tags and filtering functionality, , , +or listing notable and popular content. - Many entry points but no prescribed pathways. +Many entry points but no prescribed pathways. 2. Continuous Growth - Gardens are never finished, they're constantly growing, evolving, and - changing. Just like a real soil, carrot, and cabbage garden. +Gardens are never finished, they're constantly growing, evolving, and changing. +Just like a real soil, carrot, and cabbage garden. - The isn't how we usually think about writing on the web. Over the last - decade, we've moved away from casual live journal entries and - formalised our writing into articles and essays. These are carefully - crafted, edited, revised, and published with a timestamp. When it's - done, it's done. We act like tiny magazines, sending our writing off to - the printer. +The isn't how we usually think about writing on the web. Over the last decade, +we've moved away from casual live journal entries and formalised our writing +into articles and essays. These are carefully crafted, edited, revised, and +published with a timestamp. When it's done, it's done. We act like tiny +magazines, sending our writing off to the printer. - This is odd considering editability is one of the main selling points - of the web. Gardens lean into this – there is no "final version” on a - garden. What you publish is always open to revision and expansion. +This is odd considering editability is one of the main selling points of the +web. Gardens lean into this – there is no "final version” on a garden. What you +publish is always open to revision and expansion. - Gardens are designed to evolve alongside your thoughts. When you first - have an idea, it's fuzzy and unrefined. You might notice a pattern in - your corner of the world, but need to collect evidence, consider - counter-arguments, spot similar trends, and research who else has thunk - such thoughts before you. In short, you need to do your homework and - critically think about it over time. +Gardens are designed to evolve alongside your thoughts. When you first have an +idea, it's fuzzy and unrefined. You might notice a pattern in your corner of +the world, but need to collect evidence, consider counter-arguments, spot +similar trends, and research who else has thunk such thoughts before you. In +short, you need to do your homework and critically think about it over time. - In performance-blog-land you do that thinking and researching - privately, then shove it out at the final moment. A grand flourish that - hides the process. +In performance-blog-land you do that thinking and researching privately, then +shove it out at the final moment. A grand flourish that hides the process. - In garden-land, that process of researching and refining happens on the - open internet. You post ideas while they're still "seedlings,” and tend - them regularly until they're fully grown, respectable opinions. +In garden-land, that process of researching and refining happens on the open +internet. You post ideas while they're still "seedlings,” and tend them +regularly until they're fully grown, respectable opinions. - This has a number of benefits: - * You're freed from the pressure to get everything right immediately. - You can test ideas, get feedback, and revise your opinions like a - good internet citizen. - * It's low friction. Gardening your thoughts becomes a daily ritual - that only takes a small amount of effort. Over time, big things - grow. - * It gives readers an insight into your writing and thinking process. - They come to realise you are not a magical idea machine banging out - perfectly formed thoughts, but instead an equally mediocre human - doing The Work of trying to understand the world and make sense of - it alongside you. +This has a number of benefits: - This all comes with an important caveat; gardens make their - imperfection known to readers. Which brings us to the next pattern... + • You're freed from the pressure to get everything right immediately. You can + test ideas, get feedback, and revise your opinions like a good internet + citizen. + • It's low friction. Gardening your thoughts becomes a daily ritual that only + takes a small amount of effort. Over time, big things grow. + • It gives readers an insight into your writing and thinking process. They + come to realise you are not a magical idea machine banging out perfectly + formed thoughts, but instead an equally mediocre human doing The Work of + trying to understand the world and make sense of it alongside you. + +This all comes with an important caveat; gardens make their imperfection known +to readers. Which brings us to the next pattern... 3. Imperfection & Learning in Public - Gardens are imperfect by design. They don't hide their rough edges or - claim to be a permanent source of truth. +Gardens are imperfect by design. They don't hide their rough edges or claim to +be a permanent source of truth. - Putting anything imperfect and half-written on an "official website” - may feel strange. We have all been trained to behave like tiny, - performative corporations when it comes to presenting ourselves in - digital space. Blogging evolved in the culture of Millenialism as a way - to Promote Your Personal Brand™ and market your SEO-optimized Content. +Putting anything imperfect and half-written on an "official website” may feel +strange. We have all been trained to behave like tiny, performative +corporations when it comes to presenting ourselves in digital space. Blogging +evolved in the culture of Millenialism as a way to Promote Your Personal Brand™ +and market your SEO-optimized Content. - Weird, quirky personal blogs of the early 2000's turned into cleanly - crafted brands with publishing strategies and media campaigns. Everyone - now has a modern minimalist logo and an LLC. +Weird, quirky personal blogs of the early 2000's turned into cleanly crafted +brands with publishing strategies and media campaigns. Everyone now has a +modern minimalist logo and an LLC. - Digital gardening is the response to the professional personal blog; - it's both intimate and public, weird and welcoming. It's less - performative than a blog, but more intentional and thoughtful than a - Twitter feed. It wants to build personal knowledge over time, rather - than engage in banter and quippy conversations. +Digital gardening is the response to the professional personal blog; it's both +intimate and public, weird and welcoming. It's less performative than a blog, +but more intentional and thoughtful than a Twitter feed. It wants to build +personal knowledge over time, rather than engage in banter and quippy +conversations. - Think of it as a spectrum. Things we dump into private WhatsApp group - chats, DMs, and cavalier Tweet threads are part of our chaos streams - - a continuous flow of high noise / low signal ideas. On the other end we - have highly performative and cultivated artefacts like published books - that you prune and tend for years. +Think of it as a spectrum. Things we dump into private WhatsApp group chats, +DMs, and cavalier Tweet threads are part of our chaos streams - a continuous +flow of high noise / low signal ideas. On the other end we have highly +performative and cultivated artefacts like published books that you prune and +tend for years. - Gardening sits in the middle. It's the perfect balance of chaos and - cultivation. +Gardening sits in the middle. It's the perfect balance of chaos and +cultivation. - This ethos of imperfection opens up a world of possibility that - performative blogging shut down. First, it enables you to ; the - practice of sharing what you learn as you're learning it, not a decade - later once you're an "expert.” +This ethos of imperfection opens up a world of possibility that performative +blogging shut down. First, it enables you to ; the practice of sharing what you +learn as you're learning it, not a decade later once you're an "expert.” - This freedom of course comes with great responsibility. Publishing - imperfect and early ideas requires that we make the status of our notes - clear to readers. You should include some indicator of how "done” they - are, and how much effort you've invested in them. +This freedom of course comes with great responsibility. Publishing imperfect +and early ideas requires that we make the status of our notes clear to readers. +You should include some indicator of how "done” they are, and how much effort +you've invested in them. - This could be with a simple categorisation system. I personally use an - overly horticultural metaphor: - * 🌱 Seedlings for very rough and early ideas - * 🌿 Budding for work I've cleaned up and clarified - * 🌳 Evergreen for work that is reasonably complete (though I still - tend these over time). +This could be with a simple categorisation system. I personally use an overly +horticultural metaphor: - I also include the dates I planted and last tended a post so people get - a sense of how long I've been growing it. + • 🌱 Seedlings for very rough and early ideas + • 🌿 Budding for work I've cleaned up and clarified + • 🌳 Evergreen for work that is reasonably complete (though I still tend these + over time). - Other gardeners include an epistemic status on their posts – a short - statement that makes clear how they know what they know, and how much - time they've invested in researching it. +I also include the dates I planted and last tended a post so people get a sense +of how long I've been growing it. - was one of the earliest and most consistent gardeners to offer - meta-reflections on their work. Each entry comes with: - * topic tags - * start and end date - * a stage tag: draft, in progress, or finished - * a certainty tag: impossible, unlikely, certain, etc. - * 1-10 importance tag +Other gardeners include an epistemic status on their posts – a short statement +that makes clear how they know what they know, and how much time they've +invested in researching it. - These are all explained in their , which is worth reading if you're - designing your own epistemological system. +was one of the earliest and most consistent gardeners to offer meta-reflections +on their work. Each entry comes with: - Devon Zuegal is another notable gardener who has epistemic status and - epistemic effort on their posts, indicating both their certainty level - about the material, and how much effort went into making it. They also - make a strong case for as a feature, not a bug. + • topic tags + • start and end date + • a stage tag: draft, in progress, or finished + • a certainty tag: impossible, unlikely, certain, etc. + • 1-10 importance tag - In a similar vein, Shawn Wang has written the Digital Gardening which I - adore and ascribe to. They ask the reader to allow the writer to be - wrong, offer constructive criticism, and attribute their work. They ask - gardeners to be considerate of others (don't share private information - or name and shame), offer epistemic disclosure, and respond to - feedback. - The digital gardening terms of service – Source: Shawn Wang, swyx.io +These are all explained in their , which is worth reading if you're designing +your own epistemological system. - All of these design patterns feed our growing desire for transparency, - meta information, and breadcrumbs back to the source of ideas. +Devon Zuegal is another notable gardener who has epistemic status and epistemic +effort on their posts, indicating both their certainty level about the +material, and how much effort went into making it. They also make a strong case +for as a feature, not a bug. + +In a similar vein, Shawn Wang has written the Digital Gardening which I adore +and ascribe to. They ask the reader to allow the writer to be wrong, offer +constructive criticism, and attribute their work. They ask gardeners to be +considerate of others (don't share private information or name and shame), +offer epistemic disclosure, and respond to feedback. + +The digital gardening terms of service – Source: Shawn Wang, swyx.io + +All of these design patterns feed our growing desire for transparency, meta +information, and breadcrumbs back to the source of ideas. 4. Playful, Personal, and Experimental - Gardens are non-homogenous by nature. You can plant the same seeds as - your neighbour, but you'll always end up with a different arrangement - of plants. +Gardens are non-homogenous by nature. You can plant the same seeds as your +neighbour, but you'll always end up with a different arrangement of plants. - Digital gardens should be just as unique and particular as their - vegetative counterparts. The point of a garden is that it's a personal - playspace. You organise the garden around the ideas and mediums that - match your way of thinking, rather than off someone else's standardised - template. +Digital gardens should be just as unique and particular as their vegetative +counterparts. The point of a garden is that it's a personal playspace. You +organise the garden around the ideas and mediums that match your way of +thinking, rather than off someone else's standardised template. - Ideally, this involves experimenting with the native languages of the - web – HTML, CSS, and JavaScript. They're the most flexible and robust - tools we have for building interconnected knowledge online. Gardens are - a chance to question the established norms of a 'personal website', and - make space for weirder, wilder experiments. +Ideally, this involves experimenting with the native languages of the web – +HTML, CSS, and JavaScript. They're the most flexible and robust tools we have +for building interconnected knowledge online. Gardens are a chance to question +the established norms of a 'personal website', and make space for weirder, +wilder experiments. - That said, I should acknowledge that jumping into full-on web - development is simply beyond the abilities and interests of many - people. There is still room for personalisation and play if you're - using a pre-made template or service – it'll just be within the - constraints of that system. +That said, I should acknowledge that jumping into full-on web development is +simply beyond the abilities and interests of many people. There is still room +for personalisation and play if you're using a pre-made template or service – +it'll just be within the constraints of that system. - One goal of these hyper-personalised gardens is deep contextualisation. - The overwhelming lesson of the Web 2.0 social media age is that dumping - millions of people together into decontextualised social spaces is a - shit show. Devoid of any established social norms and abstracted from - our specific cultural identities, we end up in awkward, aggravating - exchanges with people who are socially incoherent to us. We know - nothing of their lives, backgrounds, or belief systems, and have to - assume the worst. Twitter only offers us a 240 character bio. Facebook - pre-selects the categories it deems important about you – relationship - status, gender, hometown. +One goal of these hyper-personalised gardens is deep contextualisation. The +overwhelming lesson of the Web 2.0 social media age is that dumping millions of +people together into decontextualised social spaces is a shit show. Devoid of +any established social norms and abstracted from our specific cultural +identities, we end up in awkward, aggravating exchanges with people who are +socially incoherent to us. We know nothing of their lives, backgrounds, or +belief systems, and have to assume the worst. Twitter only offers us a 240 +character bio. Facebook pre-selects the categories it deems important about you +– relationship status, gender, hometown. - Gardens offer us the ability to present ourselves in forms that aren't - cookie cutter profiles. They're the higher-fidelity version, complete - with quirks, contradictions, and complexity. +Gardens offer us the ability to present ourselves in forms that aren't cookie +cutter profiles. They're the higher-fidelity version, complete with quirks, +contradictions, and complexity. 5. Intercropping & Content Diversity - Gardens are not just a collection of interlinked words. While linear - writing is an incredible medium that has served us well for a little - over 5000 years, it is daft to pretend working in a single medium is a - sufficient way to explore complex ideas. +Gardens are not just a collection of interlinked words. While linear writing is +an incredible medium that has served us well for a little over 5000 years, it +is daft to pretend working in a single medium is a sufficient way to explore +complex ideas. - It is also absurd to ignore the fact we're living in an audio-visual - cornucopia that the web makes possible. Podcasts, videos, diagrams, - illustrations, interactive web animations, academic papers, tweets, - rough sketches, and code snippets should all live and grow in the - garden. - [intercropping-garden_shrink_mx6nx8.png] +It is also absurd to ignore the fact we're living in an audio-visual cornucopia +that the web makes possible. Podcasts, videos, diagrams, illustrations, +interactive web animations, academic papers, tweets, rough sketches, and code +snippets should all live and grow in the garden. - Historically, monocropping has been the quickest route to starvation, - pests, and famine. Don't be a lumper potato farmer while everyone else - is sustainably intercropping. +[intercropping-garden_shrink_mx6nx8] + +Historically, monocropping has been the quickest route to starvation, pests, +and famine. Don't be a lumper potato farmer while everyone else is sustainably +intercropping. 6. Independent Ownership - Gardening is about claiming a small patch of the web for yourself, one - you fully own and control. +Gardening is about claiming a small patch of the web for yourself, one you +fully own and control. - This patch should not live on the servers of Facebook, LinkedIn, - Twitter, Instagram (aka. also Facebook), or Medium. None of these - platforms are designed to help you slowly build and weave personal - knowledge. Most of them actively fight against it. +This patch should not live on the servers of Facebook, LinkedIn, Twitter, +Instagram (aka. also Facebook), or Medium. None of these platforms are designed +to help you slowly build and weave personal knowledge. Most of them actively +fight against it. - If any of those services go under, your writing and creations sink with - it (crazier things have happened in the span of humanity). None of them - have an easy export button. And they certainly won't hand you your data - in a transferable format. - A set of walled gardens with the Twitter, Medium, and Facebook logos - next to an open garden built on HTML, CSS, and Markdown +If any of those services go under, your writing and creations sink with it +(crazier things have happened in the span of humanity). None of them have an +easy export button. And they certainly won't hand you your data in a +transferable format. - Independently owning your garden helps you plan for long-term change. - You should think about how you want your space to grow over the next - few decades, not just the next few months. +A set of walled gardens with the Twitter, Medium, and Facebook logos next to an +open garden built on HTML, CSS, and Markdown - If you give it a bit of forethought, you can build your garden in a way - that makes it easy to transfer and adapt. Platforms and technologies - will inevitably change. Using old-school, reliable, and widely used web - native formats like HTML/CSS is a safe bet. Backing up your notes as - flat markdown files won't hurt either. +Independently owning your garden helps you plan for long-term change. You +should think about how you want your space to grow over the next few decades, +not just the next few months. - Keeping your garden on the open web also sets you up to take part in - the future of gardening. At the moment our gardens are rather solo - affairs. We haven't figure out how to make them multi-player. But - there's an enthusiastic community of developers and designers trying to - fix that. It's hard to say what kind of libraries, frameworks, and - design patterns might emerge out of that effort, but it certainly isn't - going to happen behind a Medium paywall. - A set of gardens with plant life moving between them - __________________________________________________________________ +If you give it a bit of forethought, you can build your garden in a way that +makes it easy to transfer and adapt. Platforms and technologies will inevitably +change. Using old-school, reliable, and widely used web native formats like +HTML/CSS is a safe bet. Backing up your notes as flat markdown files won't hurt +either. - This is all my take on gardening, but knowledge and neologisms always - live within communities. No one owns The Official Definition of digital - gardening. Numerous people have contributed to the growing conversation - and you should read their thoughts as well. +Keeping your garden on the open web also sets you up to take part in the future +of gardening. At the moment our gardens are rather solo affairs. We haven't +figure out how to make them multi-player. But there's an enthusiastic community +of developers and designers trying to fix that. It's hard to say what kind of +libraries, frameworks, and design patterns might emerge out of that effort, but +it certainly isn't going to happen behind a Medium paywall. - Want to share? (BUTTON) Tell Twitter About It +A set of gardens with plant life moving between them +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +This is all my take on gardening, but knowledge and neologisms always live +within communities. No one owns The Official Definition of digital gardening. +Numerous people have contributed to the growing conversation and you should +read their thoughts as well. + +Want to share?Tell Twitter About It 8 Backlinks The Expanding Dark Forest and Generative AI - Proving you're a human on a web flooded with generative AI content +Proving you're a human on a web flooded with generative AI content A Short History of Bi-Directional Links - Seventy years ago we dreamed up links that would allow us to create - two-way, contextual conversations. Why don't we use them on the web? +Seventy years ago we dreamed up links that would allow us to create two-way, +contextual conversations. Why don't we use them on the web? Digital Gardening for Non-Technical Folks - How to build a digital garden without touching code +How to build a digital garden without touching code Transclusion and Transcopyright Dreams - The lost permissioning and copyright system of the Web +The lost permissioning and copyright system of the Web The Pattern Language of Project Xanadu - Project Xanadu as a pattern language, rather than a failed software - project +Project Xanadu as a pattern language, rather than a failed software project Growing the Evergreens - Illustrated notes on the concept of 'Evergreen notes' and how to write - them +Illustrated notes on the concept of 'Evergreen notes' and how to write them A Meta-Tour of This Site - A video tour through how I build the old version of this site +A video tour through how I build the old version of this site Tending Evergreen Notes in Roam Research - A walkthrough of how I manage and tend Evergreen notes in Roam +A walkthrough of how I manage and tend Evergreen notes in Roam Mentions around the web - subterraneanwebZ - a new hope - with-heart - Winson Tang - Hacker News - Abra Tusz - King | "OG" Zettelkasten 🧠 2nd Brain 🚢 - HN Front Page - ⎯ΘωΘ⟶ - lqdev - Evgeny Kuznetsov - Brad - Brad - Chris Aldrich - DixOnGE - talyssa - Chris Krycho - márcio moreira - 84 Likes and Retweets - [44]wildrye.commentionedMarch 10, 2023 - Image by Pallangor, How to Make a Beautiful Minecraft GardenGarden of - Infinite Possibilities Jorge Luis Borges’ story the “Garden of Forking - Paths” is set in an elaborate garden, but the real garden is a book - that is structured in such a way as to allow infinite possibilities. - [45]wildrye.commentionedMarch 09, 2023 - Mike Caufield talks about his collection of notes in his wiki and how - they work together as a rich network of ideas. Part of his method is to - very carefully describe the relationship between two ideas when he - builds his links. These descriptions become ideas in their own right. - [46]Cristinamentionedin What the heck is a digital garden?March 04, - 2023 - Digital gardens are a relatively new concept that are gaining - popularity online. They are often described as a cross between a blog - and a personal wiki. At its core, a digital garden is a place for - someone to share their thoughts, ideas, and learning experiences in a - more casual - Whatdefang - [47]WhatdefangmentionedFebruary 28, 2023 - Naming is a political act as much as a poetic one. - (BUTTON) Show 33 more +subterraneanwebZ +a new hope +with-heart +Winson Tang +Hacker News +Abra Tusz +King | "OG" Zettelkasten 🧠 2nd Brain 🚢 +HN Front Page +⎯ΘωΘ⟶ +lqdev +Evgeny Kuznetsov +Brad +Brad +Chris Aldrich +DixOnGE +talyssa +Chris Krycho +márcio moreira +84 Likes and Retweets +[47]wildrye.commentionedMarch 10, 2023 +Image by Pallangor, How to Make a Beautiful Minecraft GardenGarden of Infinite +Possibilities Jorge Luis Borges’ story the “Garden of Forking Paths” is set in +an elaborate garden, but the real garden is a book that is structured in such a +way as to allow infinite possibilities. +[48]wildrye.commentionedMarch 09, 2023 +Mike Caufield talks about his collection of notes in his wiki and how they work +together as a rich network of ideas. Part of his method is to very carefully +describe the relationship between two ideas when he builds his links. These +descriptions become ideas in their own right. +[49]Cristinamentionedin What the heck is a digital garden?March 04, 2023 +Digital gardens are a relatively new concept that are gaining popularity +online. They are often described as a cross between a blog and a personal wiki. +At its core, a digital garden is a place for someone to share their thoughts, +ideas, and learning experiences in a more casual +Whatdefang +[50]WhatdefangmentionedFebruary 28, 2023 +Naming is a political act as much as a poetic one. +Show 33 more Want to stay up to date? - (BUTTON) Subscribe via RSS Feed - © 2024 Maggie Appleton - * [48]The Garden - * [49]Essays - * [50]About - * [51]Notes - * [52]Now - * [53]Patterns - * [54]Library - * [55]Projects - * [56]Colophon +Subscribe via RSS Feed +[53][54][55][56][57] +© 2024 Maggie Appleton -References + • [58]The Garden + • [59]Essays + • [60]About + • [61]Notes + • [62]Now + • [63]Patterns + • [64]Library + • [65]Projects + • [66]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/digital-gardening - 6. https://maggieappleton.com/topics/personal-knowledge - 7. https://maggieappleton.com/topics/the-web - 8. https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens - 9. https://maggieappleton.com/garden-history#the-early-gardens-of-hypertext - 10. https://maggieappleton.com/garden-history#digital-puttering-on-twitter - 11. https://maggieappleton.com/garden-history#gardens-streams-and-caufield's-metaphors - 12. https://maggieappleton.com/garden-history#carrying-on-caufield - 13. https://maggieappleton.com/garden-history#digital-gardening's-fertile-soil - 14. https://maggieappleton.com/garden-history#developer-led-gardening - 15. https://maggieappleton.com/garden-history#the-six-patterns-of-gardening - 16. https://maggieappleton.com/garden-history#1-topography-over-timelines - 17. https://maggieappleton.com/garden-history#2-continuous-growth - 18. https://maggieappleton.com/garden-history#3-imperfection-&-learning-in-public - 19. https://maggieappleton.com/garden-history#4-playful-personal-and-experimental - 20. https://maggieappleton.com/garden-history#5-intercropping-&-content-diversity - 21. https://maggieappleton.com/garden-history#6-independent-ownership - 22. https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens - 23. https://maggieappleton.com/garden-history#the-early-gardens-of-hypertext - 24. https://maggieappleton.com/garden-history#digital-puttering-on-twitter - 25. https://maggieappleton.com/garden-history#gardens-streams-and-caufield's-metaphors - 26. https://maggieappleton.com/garden-history#carrying-on-caufield - 27. https://maggieappleton.com/garden-history#digital-gardening's-fertile-soil - 28. https://maggieappleton.com/garden-history#developer-led-gardening - 29. https://maggieappleton.com/garden-history#the-six-patterns-of-gardening - 30. https://maggieappleton.com/garden-history#1-topography-over-timelines - 31. https://maggieappleton.com/garden-history#2-continuous-growth - 32. https://maggieappleton.com/garden-history#3-imperfection-&-learning-in-public - 33. https://maggieappleton.com/garden-history#4-playful-personal-and-experimental - 34. https://maggieappleton.com/garden-history#5-intercropping-&-content-diversity - 35. https://maggieappleton.com/garden-history#6-independent-ownership - 36. https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens - 37. https://maggieappleton.com/neologisms - 38. https://maggieappleton.com/cozy-web - 39. https://maggieappleton.com/nontechnical-gardening - 40. https://maggieappleton.com/bidirectionals - 41. https://maggieappleton.com/garden-history#the-six-patterns-of-gardening - 42. https://maggieappleton.com/pattern-languages - 43. https://maggieappleton.com/bidirectionals - 44. https://wildrye.com/what-is-a-digital-garden/ - 45. https://wildrye.com/the-digital-garden-as-an-experience-generator/ - 46. https://embersonthehearth.com/2023/03/04/what-the-heck-is-a-digital-garden/ - 47. https://twitter.com/whatdefang/status/1630464510740815872 - 48. https://maggieappleton.com/garden - 49. https://maggieappleton.com/essays - 50. https://maggieappleton.com/about - 51. https://maggieappleton.com/notes - 52. https://maggieappleton.com/now - 53. https://maggieappleton.com/patterns - 54. https://maggieappleton.com/library - 55. https://maggieappleton.com/projects - 56. https://maggieappleton.com/colophon - Hidden links: - 58. https://github.com/MaggieAppleton - 59. https://uk.linkedin.com/in/maggieappleton - 60. https://dribbble.com/mappleton - 61. https://twitter.com/Mappletons - 62. https://indieweb.social/@maggie +References: + +[1] https://maggieappleton.com/ +[3] https://maggieappleton.com/now +[4] https://maggieappleton.com/about +[6] https://maggieappleton.com/topics/digital-gardening +[7] https://maggieappleton.com/topics/personal-knowledge +[8] https://maggieappleton.com/topics/the-web +[10] https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens +[11] https://maggieappleton.com/garden-history#the-early-gardens-of-hypertext +[12] https://maggieappleton.com/garden-history#digital-puttering-on-twitter +[13] https://maggieappleton.com/garden-history#gardens-streams-and-caufield's-metaphors +[14] https://maggieappleton.com/garden-history#carrying-on-caufield +[15] https://maggieappleton.com/garden-history#digital-gardening's-fertile-soil +[16] https://maggieappleton.com/garden-history#developer-led-gardening +[17] https://maggieappleton.com/garden-history#the-six-patterns-of-gardening +[18] https://maggieappleton.com/garden-history#1-topography-over-timelines +[19] https://maggieappleton.com/garden-history#2-continuous-growth +[20] https://maggieappleton.com/garden-history#3-imperfection-&-learning-in-public +[21] https://maggieappleton.com/garden-history#4-playful-personal-and-experimental +[22] https://maggieappleton.com/garden-history#5-intercropping-&-content-diversity +[23] https://maggieappleton.com/garden-history#6-independent-ownership +[24] https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens +[25] https://maggieappleton.com/garden-history#the-early-gardens-of-hypertext +[26] https://maggieappleton.com/garden-history#digital-puttering-on-twitter +[27] https://maggieappleton.com/garden-history#gardens-streams-and-caufield's-metaphors +[28] https://maggieappleton.com/garden-history#carrying-on-caufield +[29] https://maggieappleton.com/garden-history#digital-gardening's-fertile-soil +[30] https://maggieappleton.com/garden-history#developer-led-gardening +[31] https://maggieappleton.com/garden-history#the-six-patterns-of-gardening +[32] https://maggieappleton.com/garden-history#1-topography-over-timelines +[33] https://maggieappleton.com/garden-history#2-continuous-growth +[34] https://maggieappleton.com/garden-history#3-imperfection-&-learning-in-public +[35] https://maggieappleton.com/garden-history#4-playful-personal-and-experimental +[36] https://maggieappleton.com/garden-history#5-intercropping-&-content-diversity +[37] https://maggieappleton.com/garden-history#6-independent-ownership +[38] https://maggieappleton.com/garden-history#a-brief-history-of-digital-gardens +[39] https://maggieappleton.com/neologisms +[40] https://maggieappleton.com/cozy-web +[41] https://maggieappleton.com/nontechnical-gardening +[42] https://maggieappleton.com/bidirectionals +[43] https://maggieappleton.com/garden-history#the-six-patterns-of-gardening +[44] https://maggieappleton.com/pattern-languages +[45] https://maggieappleton.com/bidirectionals +[47] https://wildrye.com/what-is-a-digital-garden/ +[48] https://wildrye.com/the-digital-garden-as-an-experience-generator/ +[49] https://embersonthehearth.com/2023/03/04/what-the-heck-is-a-digital-garden/ +[50] https://twitter.com/whatdefang/status/1630464510740815872 +[53] https://github.com/MaggieAppleton +[54] https://uk.linkedin.com/in/maggieappleton +[55] https://dribbble.com/mappleton +[56] https://twitter.com/Mappletons +[57] https://indieweb.social/@maggie +[58] https://maggieappleton.com/garden +[59] https://maggieappleton.com/essays +[60] https://maggieappleton.com/about +[61] https://maggieappleton.com/notes +[62] https://maggieappleton.com/now +[63] https://maggieappleton.com/patterns +[64] https://maggieappleton.com/library +[65] https://maggieappleton.com/projects +[66] https://maggieappleton.com/colophon diff --git a/static/archive/mcfunley-com-5myzcq.txt b/static/archive/mcfunley-com-5myzcq.txt index 4e448f7..26a25d2 100644 --- a/static/archive/mcfunley-com-5myzcq.txt +++ b/static/archive/mcfunley-com-5myzcq.txt @@ -1,260 +1,247 @@ - #[1]alternate +[1] - [2] +Dan McKinley +Math, Programming, and Minority Reports - Dan McKinley - Math, Programming, and Minority Reports +[2] Tweet [3] Follow @mcfunley - [3]Tweet [4]Follow @mcfunley +[4]Choose Boring Technology +March 30th, 2015 - [5]Choose Boring Technology - March 30th, 2015 +Probably the single best thing to happen to me in my career was having had [5] +Kellan placed in charge of me. I stuck around long enough to see Kellan’s +technical decisionmaking start to bear fruit. I learned a great deal from this, +but I also learned a great deal as a result of this. I would not have been free +to become the engineer that wrote [6]Data Driven Products Now! if Kellan had +not been there to so thoroughly stick the landing on technology choices. - Probably the single best thing to happen to me in my career was having - had [6]Kellan placed in charge of me. I stuck around long enough to see - Kellan’s technical decisionmaking start to bear fruit. I learned a - great deal from this, but I also learned a great deal as a result of - this. I would not have been free to become the engineer that wrote - [7]Data Driven Products Now! if Kellan had not been there to so - thoroughly stick the landing on technology choices. - [FRQKLCy.jpg] Being inspirational as always. +[FRQKLCy] Being inspirational as always. - In the year since leaving Etsy, I’ve resurrected my ability to care - about technology. And my thoughts have crystallized to the point where - I can write them down coherently. What follows is a distillation of the - Kellan gestalt, which will hopefully serve to horrify him only - slightly. +In the year since leaving Etsy, I’ve resurrected my ability to care about +technology. And my thoughts have crystallized to the point where I can write +them down coherently. What follows is a distillation of the Kellan gestalt, +which will hopefully serve to horrify him only slightly. - Embrace Boredom. +Embrace Boredom. - Let’s say every company gets about three innovation tokens. You can - spend these however you want, but the supply is fixed for a long while. - You might get a few more after you achieve a [8]certain level of - stability and maturity, but the general tendency is to overestimate the - contents of your wallet. Clearly this model is approximate, but I think - it helps. +Let’s say every company gets about three innovation tokens. You can spend these +however you want, but the supply is fixed for a long while. You might get a few +more after you achieve a [7]certain level of stability and maturity, but the +general tendency is to overestimate the contents of your wallet. Clearly this +model is approximate, but I think it helps. - If you choose to write your website in NodeJS, you just spent one of - your innovation tokens. If you choose to use [9]MongoDB, you just spent - one of your innovation tokens. If you choose to use [10]service - discovery tech that’s existed for a year or less, you just spent one of - your innovation tokens. If you choose to write your own database, oh - god, you’re in trouble. +If you choose to write your website in NodeJS, you just spent one of your +innovation tokens. If you choose to use [8]MongoDB, you just spent one of your +innovation tokens. If you choose to use [9]service discovery tech that’s +existed for a year or less, you just spent one of your innovation tokens. If +you choose to write your own database, oh god, you’re in trouble. - Any of those choices might be sensible if you’re a javascript - consultancy, or a database company. But you’re probably not. You’re - probably working for a company that is at least ostensibly - [11]rethinking global commerce or [12]reinventing payments on the web - or pursuing some other suitably epic mission. In that context, devoting - any of your limited attention to innovating ssh is an excellent way to - fail. Or at best, delay success [13][1]. +Any of those choices might be sensible if you’re a javascript consultancy, or a +database company. But you’re probably not. You’re probably working for a +company that is at least ostensibly [10]rethinking global commerce or [11] +reinventing payments on the web or pursuing some other suitably epic mission. +In that context, devoting any of your limited attention to innovating ssh is an +excellent way to fail. Or at best, delay success [12][1]. - What counts as boring? That’s a little tricky. “Boring” should not be - conflated with “bad.” There is technology out there that is both boring - and bad [14][2]. You should not use any of that. But there are many - choices of technology that are boring and good, or at least good - enough. MySQL is boring. Postgres is boring. PHP is boring. Python is - boring. Memcached is boring. Squid is boring. Cron is boring. +What counts as boring? That’s a little tricky. “Boring” should not be conflated +with “bad.” There is technology out there that is both boring and bad [13][2]. +You should not use any of that. But there are many choices of technology that +are boring and good, or at least good enough. MySQL is boring. Postgres is +boring. PHP is boring. Python is boring. Memcached is boring. Squid is boring. +Cron is boring. - The nice thing about boringness (so constrained) is that the - capabilities of these things are well understood. But more importantly, - their failure modes are well understood. Anyone who knows me well will - understand that it’s only with a overwhelming sense of malaise that I - now invoke the spectre of Don Rumsfeld, but I must. - [n8ElWr3.jpg] To be clear, fuck this guy. +The nice thing about boringness (so constrained) is that the capabilities of +these things are well understood. But more importantly, their failure modes are +well understood. Anyone who knows me well will understand that it’s only with a +overwhelming sense of malaise that I now invoke the spectre of Don Rumsfeld, +but I must. - When choosing technology, you have both known unknowns and unknown - unknowns [15][3]. - * A known unknown is something like: we don’t know what happens when - this database hits 100% CPU. - * An unknown unknown is something like: geez it didn’t even occur to - us that [16]writing stats would cause GC pauses. +[n8ElWr3] To be clear, fuck this guy. - Both sets are typically non-empty, even for tech that’s existed for - decades. But for shiny new technology the magnitude of unknown unknowns - is significantly larger, and this is important. +When choosing technology, you have both known unknowns and unknown unknowns +[14][3]. - Optimize Globally. + • A known unknown is something like: we don’t know what happens when this + database hits 100% CPU. + • An unknown unknown is something like: geez it didn’t even occur to us that + [15]writing stats would cause GC pauses. - I unapologetically think a bias in favor of boring technology is a good - thing, but it’s not the only factor that needs to be considered. - Technology choices don’t happen in isolation. They have a scope that - touches your entire team, organization, and the system that emerges - from the sum total of your choices. +Both sets are typically non-empty, even for tech that’s existed for decades. +But for shiny new technology the magnitude of unknown unknowns is significantly +larger, and this is important. - Adding technology to your company comes with a cost. As an abstract - statement this is obvious: if we’re already using Ruby, adding Python - to the mix doesn’t feel sensible because the resulting complexity would - outweigh Python’s marginal utility. But somehow when we’re talking - about Python and Scala or MySQL and Redis people [17]lose their minds, - discard all constraints, and start raving about using the best tool for - the job. +Optimize Globally. - [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." +I unapologetically think a bias in favor of boring technology is a good thing, +but it’s not the only factor that needs to be considered. Technology choices +don’t happen in isolation. They have a scope that touches your entire team, +organization, and the system that emerges from the sum total of your choices. - 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"). +Adding technology to your company comes with a cost. As an abstract statement +this is obvious: if we’re already using Ruby, adding Python to the mix doesn’t +feel sensible because the resulting complexity would outweigh Python’s marginal +utility. But somehow when we’re talking about Python and Scala or MySQL and +Redis people [16]lose their minds, discard all constraints, and start raving +about using the best tool for the job. - 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. +[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. - 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 might choose +technology in a world where choices are cheap: "pick the right tool for the +job." - Choose New Technology, Sometimes. +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. - 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. +Created with Sketch. Problems Technical Solutions The way you choose technology +in the world where operations are a serious concern (i.e., "reality"). - 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. +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. - 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. +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. - It can be amazing how far a small set of technology choices can go. The - answer to this question in practice is almost never “we can’t do it,” - it’s usually just somewhere on the spectrum of “well, we could do it, - but it would be too hard” [20][4]. If you think you can’t accomplish - your goals with what you’ve got now, you are probably just not thinking - creatively enough. +Choose New Technology, Sometimes. - It’s helpful to write down exactly what it is about the current stack - that makes solving the problem prohibitively expensive and difficult. - This is related to the previous exercise, but it’s subtly different. +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. - New technology choices might be purely additive (for example: “we don’t - have caching yet, so let’s add memcached”). But they might also overlap - or replace things you are already using. If that’s the case, you should - set clear expectations about migrating old functionality to the new - system. The policy should typically be “we’re committed to migrating,” - with a proposed timeline. The intention of this step is to keep - wreckage at manageable levels, and to avoid proliferating - locally-optimal solutions. +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 [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. - This process is not daunting, and it’s not much of a hassle. It’s a - handful of questions to fill out as homework, followed by a meeting to - talk about it. I think that if a new technology (or a new service to be - created on your infrastructure) can pass through this gauntlet - unscathed, adding it is fine. +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. - Just Ship. +[rmdSx] I just watched a webinar about this graph database, we should try it +out. - 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. +It can be amazing how far a small set of technology choices can go. The answer +to this question in practice is almost never “we can’t do it,” it’s usually +just somewhere on the spectrum of “well, we could do it, but it would be too +hard” [19][4]. If you think you can’t accomplish your goals with what you’ve +got now, you are probably just not thinking creatively enough. - Mindful choice of technology gives engineering minds real freedom: the - freedom to [22]contemplate bigger questions. Technology for its own - sake is snake oil. +It’s helpful to write down exactly what it is about the current stack that +makes solving the problem prohibitively expensive and difficult. This is +related to the previous exercise, but it’s subtly different. - Update, July 27th 2015: I wrote a talk based on this article. You can - see it [23]here. - __________________________________________________________________ +New technology choices might be purely additive (for example: “we don’t have +caching yet, so let’s add memcached”). But they might also overlap or replace +things you are already using. If that’s the case, you should set clear +expectations about migrating old functionality to the new system. The policy +should typically be “we’re committed to migrating,” with a proposed timeline. +The intention of this step is to keep wreckage at manageable levels, and to +avoid proliferating locally-optimal solutions. - 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. - 2. We often casually refer to the boring/bad intersection of doom as - “enterprise software,” but that terminology may be imprecise. - 3. In saying this Rumsfeld was either intentionally or unintentionally - alluding to [26]the Socratic Paradox. Socrates was by all accounts - a thoughtful individual in a number of ways that Rumsfeld is not. - 4. A good example of this from my experience is [27]Etsy’s activity - feeds. When we built this feature, we were working pretty hard to - consolidate most of Etsy onto PHP, MySQL, Memcached, and Gearman (a - PHP job server). It was much more complicated to implement the - feature on that stack than it might have been with something like - Redis (or [28]maybe not). But it is absolutely possible to build - activity feeds on that stack. - An amazing thing happened with that project: our attention turned - elsewhere for several years. During that time, activity feeds - scaled up 20x while nobody was watching it at all. We made no - changes whatsoever specifically targeted at activity feeds, but - everything worked out fine as usage exploded because we were using - a shared platform. This is the long-term benefit of restraint in - technology choices in a nutshell. - This isn’t an absolutist position--while activity feeds stored in - memcached was judged to be practical, implementing full text search - with faceting in raw PHP wasn't. So Etsy used Solr. +This process is not daunting, and it’s not much of a hassle. It’s a handful of +questions to fill out as homework, followed by a meeting to talk about it. I +think that if a new technology (or a new service to be created on your +infrastructure) can pass through this gauntlet unscathed, adding it is fine. - [29]Back home +Just Ship. - [30]Tweet [31]Follow @mcfunley +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. - * [32]GitHub - * [33]LinkedIn +Mindful choice of technology gives engineering minds real freedom: the freedom +to [21]contemplate bigger questions. Technology for its own sake is snake oil. - [34]Feed | Copyright © 2004-2023 Dan McKinley. +Update, July 27th 2015: I wrote a talk based on this article. You can see it +[22]here. -References +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 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 + 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 [25]the Socratic Paradox. Socrates was by all accounts a + thoughtful individual in a number of ways that Rumsfeld is not. + 4. A good example of this from my experience is [26]Etsy’s activity feeds. + When we built this feature, we were working pretty hard to consolidate most + of Etsy onto PHP, MySQL, Memcached, and Gearman (a PHP job server). It was + much more complicated to implement the feature on that stack than it might + have been with something like Redis (or [27]maybe not). But it is + absolutely possible to build activity feeds on that stack. + + An amazing thing happened with that project: our attention turned elsewhere + for several years. During that time, activity feeds scaled up 20x while + nobody was watching it at all. We made no changes whatsoever specifically + targeted at activity feeds, but everything worked out fine as usage + exploded because we were using a shared platform. This is the long-term + benefit of restraint in technology choices in a nutshell. + + This isn’t an absolutist position--while activity feeds stored in memcached + was judged to be practical, implementing full text search with faceting in + raw PHP wasn't. So Etsy used Solr. + +[28]Back home +[29] Tweet [30] Follow @mcfunley + + • [31]GitHub + • [32]LinkedIn + +[33]Feed | Copyright © 2004-2023 Dan McKinley. + +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 diff --git a/static/archive/medium-com-efpmux.txt b/static/archive/medium-com-efpmux.txt index d0e5467..0f4004b 100644 --- a/static/archive/medium-com-efpmux.txt +++ b/static/archive/medium-com-efpmux.txt @@ -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 - ____________________ - Write +[4] +[5][ ] +[6] +Write +[7] - (BUTTON) Sign up +Sign up - [5]Sign in - (BUTTON) +[9]Sign in + +[1] Go Project Layout - Kyle C. Quest (Q) - golang-learn +[11] +Kyle C. Quest (Q) +[12] +golang-learn - [6]Kyle C. Quest (Q) - · +[13]Kyle C. Quest (Q) - [7]Follow - Published in - [8] +· - golang-learn - · - 5 min read - · - Sep 11, 2017 +[14]Follow - -- - (BUTTON) +Published in +[15] - 11 - (BUTTON) +golang-learn - Listen - (BUTTON) +· +5 min read +· +Sep 11, 2017 - Share +-- - You went through the ‘[9]Tour of Go’, played with - [10]https://play.golang.org/ and you feel you are ready to write some - code. Great! However, you are not sure how to structure your projects. - Can you put your code anywhere you want? Is there a standard way to - organize your code? What if you need to have multiple application - binaries? What does it mean to be ‘go gettable’? These are some of the - questions you’ll be asking yourself. +11 - First, you have to understand Go workspaces. ‘[11]How to Write Go Code’ - is a good place to start. By default, Go keeps and expects all code in - a single workspace. This place is identified by the GOPATH environment - variable. What does it mean for you? It means you have to put your code - in the default workspace or you have to change the GOPATH variable to - point to your own location. Either way the actual source code for your - project needs to be placed in the src subdirectory (e.g., - $GOPATH/src/your_project or - $GOPATH/src/github.com/your_github_username/your_project). Technically - your project doesn’t have to be in a workspace if you don’t import - external packages and you use relative imports for your own code, but - it’s not recommended. It’s fine for a toy project or a PoC though. Go - v1.11 does introduce the concept of [12]modules that allows you to have - your project code outside of your GOPATHwithout the import restrictions - mentioned above, but it’s still an experimental feature at this point - in time. +Listen - You have your project directory in the right place. What’s next? +Share - For a PoC or a very small project where you are the only one writing - the code using a single main.go file in the root directory for your - project is enough. If you know your project will be large enough or - it’ll go into production and others will be contributing to it you - should consider adopting, at least, some of the project layout patterns - outlined here. +You went through the ‘[19]Tour of Go’, played with [20]https://play.golang.org/ +and you feel you are ready to write some code. Great! However, you are not sure +how to structure your projects. Can you put your code anywhere you want? Is +there a standard way to organize your code? What if you need to have multiple +application binaries? What does it mean to be ‘go gettable’? These are some of +the questions you’ll be asking yourself. - 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. +First, you have to understand Go workspaces. ‘[21]How to Write Go Code’ is a +good place to start. By default, Go keeps and expects all code in a single +workspace. This place is identified by the GOPATH environment variable. What +does it mean for you? It means you have to put your code in the default +workspace or you have to change the GOPATH variable to point to your own +location. Either way the actual source code for your project needs to be placed +in the src subdirectory (e.g., $GOPATH/src/your_project or $GOPATH/src/ +github.com/your_github_username/your_project). Technically your project doesn’t +have to be in a workspace if you don’t import external packages and you use +relative imports for your own code, but it’s not recommended. It’s fine for a +toy project or a PoC though. Go v1.11 does introduce the concept of [22]modules +that allows you to have your project code outside of your GOPATHwithout the +import restrictions mentioned above, but it’s still an experimental feature at +this point in time. - The cmd layout pattern is very useful when you need to have more than - one application binary. Each binary gets a subdirectory (e.g., - your_project/cmd/your_app). This patterns also helps you keep your - project/package ‘go gettable’. What does it mean? It means you can use - the go get command to fetch (and install) your project, its - applications and its libraries (e.g., go get - github.com/your_github_username/your_project/cmd/appxg). You don’t have - to separate the application files. You’ll be able to build each - application with the right set of go build flags, but go get will no - longer work because it will not know which application code to build. - The official [13]Go tools is one example of the cmd layout patter. A - number of other well known projects use the same pattern: - [14]Kubernetes, [15]Docker, [16]Prometheus, [17]Influxdb. +You have your project directory in the right place. What’s next? - The pkg layout pattern is also pretty popular. For new Go developers - it’s one of the most confusing package structure concepts because Go - workspaces have a directory with the same name and that directory has a - different purpose (it’s used to store object files for the packages the - Go compiler builds). The pkg directory is where you put your public - libraries. They can be used internally by your application. They can - also be used by external projects. This is an informal contract between - you and other external users of your code. Other projects will import - these libraries expecting them to work, so think twice before you put - something here. Many well known projects use this pattern: - [18]Kubernetes, [19]Docker, [20]Grafana, [21]Influxdb, [22]Etcd. +For a PoC or a very small project where you are the only one writing the code +using a single main.go file in the root directory for your project is enough. +If you know your project will be large enough or it’ll go into production and +others will be contributing to it you should consider adopting, at least, some +of the project layout patterns outlined here. - Some of the libraries in the pkg directory are not always for public - use. Why is that? It happens because many existing Go projects predate - the ability to hide internal packages. Some projects put those internal - libraries in the pkg directory to be consistent with the rest of their - code structure. Other projects put their internal libraries into - separate directories outside of the pkg directory. [23]Go 1.4 introduce - an ability to hide code using internal directories. What does it mean? - If you put your code in an ‘internal’ directory no external project - will be able to import that code. Even other code in your project won’t - be able to access this internal code if it lives outside of its parent - directory. This feature is not widely used yet because it’s relatively - new; however, it’s extremely valuable as an additional layer of control - (in addition to the lowercase and uppercase function visibility rules - in Go). A number of new and well known projects use this pattern: - [24]Dep, [25]Docker, [26]Nsq, [27]Go Ethereal, [28]Contour. +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 internal directory is the place to put your private packages. You - can optionally add additional structure by separating your internally - shared libraries (e.g., your_project/internal/pkg/your_private_lib) and - the application code you don’t want others to import (e.g., - your_project/internal/app/your_app). When you put all of you private - code in the ‘internal’ directory the application code in the cmd - directory will be limited to small files that define the ‘main’ - function for the corresponding application binaries. Everything else - will be imported from the internal or pkg directories ([29]ark, from - Heptio, and [30]loki, from Grafana, are good examples of this tiny main - package pattern). +The cmd layout pattern is very useful when you need to have more than one +application binary. Each binary gets a subdirectory (e.g., your_project/cmd/ +your_app). This patterns also helps you keep your project/package ‘go +gettable’. What does it mean? It means you can use the go get command to fetch +(and install) your project, its applications and its libraries (e.g., go get +github.com/your_github_username/your_project/cmd/appxg). You don’t have to +separate the application files. You’ll be able to build each application with +the right set of go build flags, but go get will no longer work because it will +not know which application code to build. The official [23]Go tools is one +example of the cmd layout patter. A number of other well known projects use the +same pattern: [24]Kubernetes, [25]Docker, [26]Prometheus, [27]Influxdb. - What if you forked and modified a piece of an external project? Some - projects put that code in the pkg directory, but it’s better to put it - in the third_party top level directory to keep your code separate from - the code you borrowed from others. +The pkg layout pattern is also pretty popular. For new Go developers it’s one +of the most confusing package structure concepts because Go workspaces have a +directory with the same name and that directory has a different purpose (it’s +used to store object files for the packages the Go compiler builds). The pkg +directory is where you put your public libraries. They can be used internally +by your application. They can also be used by external projects. This is an +informal contract between you and other external users of your code. Other +projects will import these libraries expecting them to work, so think twice +before you put something here. Many well known projects use this pattern: [28] +Kubernetes, [29]Docker, [30]Grafana, [31]Influxdb, [32]Etcd. - 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. +Some of the libraries in the pkg directory are not always for public use. Why +is that? It happens because many existing Go projects predate the ability to +hide internal packages. Some projects put those internal libraries in the pkg +directory to be consistent with the rest of their code structure. Other +projects put their internal libraries into separate directories outside of the +pkg directory. [33]Go 1.4 introduce an ability to hide code using internal +directories. What does it mean? If you put your code in an ‘internal’ directory +no external project will be able to import that code. Even other code in your +project won’t be able to access this internal code if it lives outside of its +parent directory. This feature is not widely used yet because it’s relatively +new; however, it’s extremely valuable as an additional layer of control (in +addition to the lowercase and uppercase function visibility rules in Go). A +number of new and well known projects use this pattern: [34]Dep, [35]Docker, +[36]Nsq, [37]Go Ethereal, [38]Contour. - If you want to learn more about the project structure used by other Go - projects read the ‘[32]Analysis of the Top 1000 Go Repositories’. It’s - a little dated, but it’s still useful. +The internal directory is the place to put your private packages. You can +optionally add additional structure by separating your internally shared +libraries (e.g., your_project/internal/pkg/your_private_lib) and the +application code you don’t want others to import (e.g., your_project/internal/ +app/your_app). When you put all of you private code in the ‘internal’ directory +the application code in the cmd directory will be limited to small files that +define the ‘main’ function for the corresponding application binaries. +Everything else will be imported from the internal or pkg directories ([39]ark, +from Heptio, and [40]loki, from Grafana, are good examples of this tiny main +package pattern). - A real project will have additional directories too. You can use this - layout template as a starting point for your Go projects: - [33]https://github.com/golang-standards/project-layout. It covers the - Go project layout patterns described in this blog post and it includes - a number of supporting directories you’ll need to have. +What if you forked and modified a piece of an external project? Some projects +put that code in the pkg directory, but it’s better to put it in the +third_party top level directory to keep your code separate from the code you +borrowed from others. - Now it’s time to write some code! If you don’t have Go installed take a - look at this [34]quick setup guide for Mac OS X (setup on other - platforms is similar). Go through the ‘[35]Tour of Go’ if you haven’t - done it yet and then read ’[36]50 Shades of Go’ to learn about the most - common gotchas in Go, which will save you quite a bit of time when you - start writing and debugging code. - Golang - Go - Standards - Project Structure +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 ‘[42]Analysis of the Top 1000 Go Repositories’. It’s a little dated, +but it’s still useful. - -- - (BUTTON) +A real project will have additional directories too. You can use this layout +template as a starting point for your Go projects: [43]https://github.com/ +golang-standards/project-layout. It covers the Go project layout patterns +described in this blog post and it includes a number of supporting directories +you’ll need to have. - 11 - (BUTTON) - Kyle C. Quest (Q) - golang-learn - (BUTTON) Follow - [37](BUTTON) - [38] +Now it’s time to write some code! If you don’t have Go installed take a look at +this [44]quick setup guide for Mac OS X (setup on other platforms is similar). +Go through the ‘[45]Tour of Go’ if you haven’t done it yet and then read ’[46] +50 Shades of Go’ to learn about the most common gotchas in Go, which will save +you quite a bit of time when you start writing and debugging code. + +[47] +Golang +[48] +Go +[49] +Standards +[50] +Project Structure + +-- + +-- + +11 + +[53] +Kyle C. Quest (Q) +[54] +golang-learn +Follow +[56] +[58] Written by Kyle C. Quest (Q) - [39]358 Followers - ·Editor for - [40] +[59]358 Followers +·Editor for +[60] - golang-learn +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 - Help - [43] +Follow +[62] +[64] - Status - [44] +Help - About - [45] +[65] - Careers - [46] +Status - Blog - [47] +[66] - Privacy - [48] +About - Terms - [49] +[67] - Text to speech - [50] +Careers - Teams +[68] -References +Blog - 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-------------------------------- +[69] - 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-------------------------------- +Privacy + +[70] + +Terms + +[71] + +Text to speech + +[72] + +Teams + + +References: + +[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-------------------------------- diff --git a/static/archive/mike-puddingtime-org-svf0ua.txt b/static/archive/mike-puddingtime-org-svf0ua.txt index 14541ef..cb0feb8 100644 --- a/static/archive/mike-puddingtime-org-svf0ua.txt +++ b/static/archive/mike-puddingtime-org-svf0ua.txt @@ -1,183 +1,169 @@ - [1]←Home [2]Archive [3]Tags [4]About +[1] ←Home [2]Archive [3]Tags [4]About - Daily notes for 2023-07-17 +Daily notes for 2023-07-17 - Jul 17, 2023 · 1447 words · 7 minute read +Jul 17, 2023 · 1447 words · 7 minute read +Table of Contents - 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.” - —Shunryu Suzuki + When my master and I were walking in the rain, he would say, “Do not walk + so fast, the rain is everywhere.” + —Shunryu Suzuki - For a very long time — too much of my life — I thought conflict was a - sign that there was a problem. I didn’t like disagreeing with people - about much of anything. I’m using “conflict” in a broad sense: Over - resources, points of view, vision, beliefs, tastes. +For a very long time — too much of my life — I thought conflict was a sign that +there was a problem. I didn’t like disagreeing with people about much of +anything. I’m using “conflict” in a broad sense: Over resources, points of +view, vision, beliefs, tastes. - Over time I shifted on the matter a little, but when I look back on it - I realize I wasn’t really evolving my attitude toward conflict, I was - just evolving my response to its existence, while still believing that - being in a state of conflict is a problem. I just got better at keeping - my blood pressure low and gritting through it. I think I was looking at - conflict as a thing that you have to acknowledge exists, but that you - need to get through as quickly as possible, because it’s a bad place to - be. +Over time I shifted on the matter a little, but when I look back on it I +realize I wasn’t really evolving my attitude toward conflict, I was just +evolving my response to its existence, while still believing that being in a +state of conflict is a problem. I just got better at keeping my blood pressure +low and gritting through it. I think I was looking at conflict as a thing that +you have to acknowledge exists, but that you need to get through as quickly as +possible, because it’s a bad place to be. - That attitude created some problems: - * When you’re bad at being in conflict, you’re at a disadvantage with - people who are good at it and mean you harm; and you’re annoying - people who are good at it and mean you no harm. - * When you look at conflict as a thing to grit through and end - quickly it’s hard to maintain your integrity. (See above: The - people who don’t want what’s best for you (or the business, or the - world, or etc.) understand this, and the ones who are really good - at it and a little indifferent toward what’s best for you are - counting on you to do all the work to get out of conflict.) - * When you’d rather do anything than admit that you’re in a state of - conflict, you will eventually do something about your problem that - is less skillful for having waited than if you’d admitted it to - yourself (and whoever you’re in conflict with) sooner. Or, as one - of my past managers put it to me, “don’t be that guy who - hockey-sticks.” (I nodded then kind of hockey-sticked.) - * When you’re bad at being in conflict, and you’re willing to be set - aside your integrity or do other things to get out of it quickly, - you’ll eventually get tired of “losing” and figure out ways to - “win” that cause others to see you as, at best, baffling and - frustrating, and at worst Machiavellian and treacherous. +That attitude created some problems: - That, anyhow, is a rough categorization of my many hundreds of - mishandlings of conflict. Maybe the most interesting thing to me about - all those mishandlings is that over time I managed to convince myself - that failing to be in conflict well was a sign of virtue. Moral - sophistication. “Taking the high road.” “Not worth the stress.” - “Learning how to play the game.” “Protecting the team.” + • When you’re bad at being in conflict, you’re at a disadvantage with people + who are good at it and mean you harm; and you’re annoying people who are + good at it and mean you no harm. + • When you look at conflict as a thing to grit through and end quickly it’s + hard to maintain your integrity. (See above: The people who don’t want + what’s best for you (or the business, or the world, or etc.) understand + this, and the ones who are really good at it and a little indifferent + toward what’s best for you are counting on you to do all the work to get + out of conflict.) + • When you’d rather do anything than admit that you’re in a state of + conflict, you will eventually do something about your problem that is less + skillful for having waited than if you’d admitted it to yourself (and + whoever you’re in conflict with) sooner. Or, as one of my past managers put + it to me, “don’t be that guy who hockey-sticks.” (I nodded then kind of + hockey-sticked.) + • When you’re bad at being in conflict, and you’re willing to be set aside + your integrity or do other things to get out of it quickly, you’ll + eventually get tired of “losing” and figure out ways to “win” that cause + others to see you as, at best, baffling and frustrating, and at worst + Machiavellian and treacherous. - Over the past few years, I’ve changed on the matter: On balance, I - definitely don’t think its existence is a sign there’s a problem. It’s - just a sign that there’s a conflict. +That, anyhow, is a rough categorization of my many hundreds of mishandlings of +conflict. Maybe the most interesting thing to me about all those mishandlings +is that over time I managed to convince myself that failing to be in conflict +well was a sign of virtue. Moral sophistication. “Taking the high road.” “Not +worth the stress.” “Learning how to play the game.” “Protecting the team.” - I still feel a little cautious about conflict when I don’t know the - person I’m in conflict with very well. Caution is useful, because - people who are bad at being in conflict but mean well — people who are - “good eggs” — can still sort of mess things up, because if I have to - bet on whether someone hates “losing” or just grinning and bearing it - more, my money is on them hating losing more. When things get to a - place where it feels existential to them, even good eggs can act sort - of rotten. So you have to take time and attend to the interaction so - they can be in conflict and feel safe about it. +Over the past few years, I’ve changed on the matter: On balance, I definitely +don’t think its existence is a sign there’s a problem. It’s just a sign that +there’s a conflict. - I still think I have a responsibility to introduce the existence of - conflict with kindness, or receive the news that I’ve entered into a - state of conflict in a manner that invites a full airing. “Relaxed and - possibly delighted curiosity,” I suppose I’d call it, rather than a - furrowing of the brow and assurances that I want to restore harmony at - once. Because I don’t want to restore harmony at once. I want to - understand why we want different things, then figure out how we can - both behave with integrity while we sort that out. +I still feel a little cautious about conflict when I don’t know the person I’m +in conflict with very well. Caution is useful, because people who are bad at +being in conflict but mean well — people who are “good eggs” — can still sort +of mess things up, because if I have to bet on whether someone hates “losing” +or just grinning and bearing it more, my money is on them hating losing more. +When things get to a place where it feels existential to them, even good eggs +can act sort of rotten. So you have to take time and attend to the interaction +so they can be in conflict and feel safe about it. + +I still think I have a responsibility to introduce the existence of conflict +with kindness, or receive the news that I’ve entered into a state of conflict +in a manner that invites a full airing. “Relaxed and possibly delighted +curiosity,” I suppose I’d call it, rather than a furrowing of the brow and +assurances that I want to restore harmony at once. Because I don’t want to +restore harmony at once. I want to understand why we want different things, +then figure out how we can both behave with integrity while we sort that out. The INT650 [8]🔗 - I finally quit waffling on what to do with the Royal Enfield Himalayan. - I took it up to [9]Sabatino Moto in St. Johns and traded it in for - another Royal Enfield: An INT650 (“Interceptor” everywhere else in the - world, but not in North America where Honda owns the rights to the - name.) +[f4d4087a00284d89b3cedd2720a3b117] - It’s a pretty night and day difference. The Himalayan is a mountain - goat, and the INT650 is … something a little prettier and a little less - rough. I was never going to ride the Himalayan the way it was meant to - be ridden — fire roads, gravel, dirt — and I didn’t have the patience - for the very “work in progress” attitude Royal Enfield took toward it. - One thing you learn from all the Himalayan videos on YouTube is that - the people who love them best don’t mind fiddling, tweaking, and - wrenching. After reading hundreds of owners talk about their - experiences, I have come to realize I lost the factory QA lottery on - mine, and that engendered a lack of confidence in it that I never - recovered from. +I finally quit waffling on what to do with the Royal Enfield Himalayan. I took +it up to [9]Sabatino Moto in St. Johns and traded it in for another Royal +Enfield: An INT650 (“Interceptor” everywhere else in the world, but not in +North America where Honda owns the rights to the name.) - Also turns out, I think, that I had a bad dealer: +It’s a pretty night and day difference. The Himalayan is a mountain goat, and +the INT650 is … something a little prettier and a little less rough. I was +never going to ride the Himalayan the way it was meant to be ridden — fire +roads, gravel, dirt — and I didn’t have the patience for the very “work in +progress” attitude Royal Enfield took toward it. One thing you learn from all +the Himalayan videos on YouTube is that the people who love them best don’t +mind fiddling, tweaking, and wrenching. After reading hundreds of owners talk +about their experiences, I have come to realize I lost the factory QA lottery +on mine, and that engendered a lack of confidence in it that I never recovered +from. - The first RE dealer in the Portland area doesn’t really want to sell - them, and it really does not want to do anything other than the most - basic service. I think I’ve documented that elsewhere, so I won’t go - into it more here, but I’ll just offer the observation that RE’s - strategy of linking up with Harley dealers to build out its US - distribution network did its customers no favors. +Also turns out, I think, that I had a bad dealer: - The folks at Sabatino, on the other hand, seem to have a genuine - appreciation for the bikes, that extends all the way to acknowledging - that RE has some QA challenges. Sabatino addresses that by doing their - own QA when they uncrate a new bike. And they’re willing to talk about - the ups and downs of each model. My head was briefly turned by another - model, and I got a reasoned, balanced, discussion of why maybe that one - wouldn’t work for me. +The first RE dealer in the Portland area doesn’t really want to sell them, and +it really does not want to do anything other than the most basic service. I +think I’ve documented that elsewhere, so I won’t go into it more here, but I’ll +just offer the observation that RE’s strategy of linking up with Harley dealers +to build out its US distribution network did its customers no favors. - They also offer test rides. I can name one dealership that grudgingly - made me sign a waiver and write a check for the full amount to test - ride a Grom for five laps around their parking lot, and they only did - that because it was a two-year-old model and they’d sold the newer one - they promised me out from under me. Sabatino made me do the waiver, - share my insurance information, and hand over my license, but then they - tossed me the keys and told me they’d see me when they saw me. +The folks at Sabatino, on the other hand, seem to have a genuine appreciation +for the bikes, that extends all the way to acknowledging that RE has some QA +challenges. Sabatino addresses that by doing their own QA when they uncrate a +new bike. And they’re willing to talk about the ups and downs of each model. My +head was briefly turned by another model, and I got a reasoned, balanced, +discussion of why maybe that one wouldn’t work for me. - Anyhow, the test ride sold me. I’ve been through several configurations - of motorcycle and scooter since getting my motorcycle endorsement — - maxiscoots, normal scoots, mini-moto, cruiser, trail bike, dual-sport — - and none of them have been the thing I first imagined myself riding - when I finally decided to learn how to ride. Well, learn how to ride as - an adult, anyhow. The twin 650 runs and sounds nice, the bike handles - more comfortably than the Himalayan despite there being 40 pounds more - of it, and the super-simple analog speedo and tach are just sort of - pleasant. I ran it around St. Johns for a while, was struck by how - immediately comfortable it was (and how confident I felt on it), and - that was that. +They also offer test rides. I can name one dealership that grudgingly made me +sign a waiver and write a check for the full amount to test ride a Grom for +five laps around their parking lot, and they only did that because it was a +two-year-old model and they’d sold the newer one they promised me out from +under me. Sabatino made me do the waiver, share my insurance information, and +hand over my license, but then they tossed me the keys and told me they’d see +me when they saw me. - Yesterday I took it on a ride out Foster Road toward Damascus. There’s - a side road I head out onto that eventually rejoins on the other side - of Damascus, close to a back road that joins the highway down to - Estacada. So I headed out past Estacada, to see how it did on a small - back highway. There was a little bit of buffeting — no fairings — but - it ran and handled well. I felt more confident on the little back roads - coming back than I did heading out as I got to know the bike better. I - did decide to detract from its vintage purity a little by ordering a - Dart flyscreen when I got back: People say it helps clean up the - turbulence at highway speeds, and keeps the bugs off the pretty silver - cans. +Anyhow, the test ride sold me. I’ve been through several configurations of +motorcycle and scooter since getting my motorcycle endorsement — maxiscoots, +normal scoots, mini-moto, cruiser, trail bike, dual-sport — and none of them +have been the thing I first imagined myself riding when I finally decided to +learn how to ride. Well, learn how to ride as an adult, anyhow. The twin 650 +runs and sounds nice, the bike handles more comfortably than the Himalayan +despite there being 40 pounds more of it, and the super-simple analog speedo +and tach are just sort of pleasant. I ran it around St. Johns for a while, was +struck by how immediately comfortable it was (and how confident I felt on it), +and that was that. - Anyhow, glad I’ve got it in the driveway with so much of the riding - season left, and I can wholeheartedly recommend Sabatino Moto if you’re - looking to buy one for yourself. +Yesterday I took it on a ride out Foster Road toward Damascus. There’s a side +road I head out onto that eventually rejoins on the other side of Damascus, +close to a back road that joins the highway down to Estacada. So I headed out +past Estacada, to see how it did on a small back highway. There was a little +bit of buffeting — no fairings — but it ran and handled well. I felt more +confident on the little back roads coming back than I did heading out as I got +to know the bike better. I did decide to detract from its vintage purity a +little by ordering a Dart flyscreen when I got back: People say it helps clean +up the turbulence at highway speeds, and keeps the bugs off the pretty silver +cans. - [10]journal [11]conflict +Anyhow, glad I’ve got it in the driveway with so much of the riding season +left, and I can wholeheartedly recommend Sabatino Moto if you’re looking to buy +one for yourself. - Created with Sketch. +[10]journal [11]conflict +[12] Created with Sketch. +© Copyright 2024 mph +Powered by [13]Hugo Theme By [14]nodejh - © Copyright 2024 mph +References: - Powered by [12]Hugo Theme By [13]nodejh - -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 diff --git a/static/archive/samkriss-substack-com-5indyq.txt b/static/archive/samkriss-substack-com-5indyq.txt index 05235de..f5df513 100644 --- a/static/archive/samkriss-substack-com-5indyq.txt +++ b/static/archive/samkriss-substack-com-5indyq.txt @@ -1,761 +1,701 @@ - #[1]Numb at the Lodge +[1][https] - [2][https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.ama - zonaws.com%2Fpublic%2Fimages%2F75fb5a16-c295-4898-b7e3-9ab295cd3530_378 - x378.png] +[2]Numb at the Lodge -[3]Numb at the Lodge - - (BUTTON) - Subscribe - (BUTTON) Sign in - - (BUTTON) - Share this post +Subscribe +Sign in +Share this post +[https] The internet is already over - samkriss.substack.com - (BUTTON) - Copy link - (BUTTON) - Facebook - (BUTTON) - Email - (BUTTON) - Note - (BUTTON) - Other +samkriss.substack.com +Copy link +Facebook +Email +Note +Other The internet is already over Our God is a devourer, who makes things only for the swallowing. - [4]Sam Kriss - Sep 18, 2022 - (BUTTON) - Share this post - -The internet is already over - - samkriss.substack.com - (BUTTON) - Copy link - (BUTTON) - Facebook - (BUTTON) - Email - (BUTTON) - Note - (BUTTON) - Other +[12][https] +[13]Sam Kriss +Sep 18, 2022 +[14] +Share A sort of preface - There’s a phrase that’s been living inside my head lately, a brain - parasite, some burrowing larva covered in thorns and barbs of words. - When it moves around in there it churns at the soft tissues like - someone’s stuck a very small hand blender in my skull. It repeats - itself inside the wormy cave system that used to be my thoughts. It - says you will not survive. You will not survive. You will not survive. +[15] +[https] - Earlier this year, an article in the Cut reported that the cool thing - now is to have messy hair and smoke cigarettes again. You might - remember it; the piece was widely mocked for a day or two, and then it - vanished without a trace, which is how these things tend to go. But the - headline was incredible, and it stuck with me. [5]A Vibe Shift Is - Coming. Will Any Of Us Survive It? Everyone else seemed to focus on the - ‘vibe shift’ stuff, but the second part was much more interesting. To - talk about survival—what extraordinary stakes, for a piece that was, in - essence, about how young people are wearing different types of shoes - from the shoes that you, as a slightly older person who still wants to - think of themselves as young, wear. Everything is stripped back to the - rawest truth: that you are a fragile creature perishing in time. And - all you need to do is apply Betteridge’s Law for the real content to - shine through. No. None of you will survive. +There’s a phrase that’s been living inside my head lately, a brain parasite, +some burrowing larva covered in thorns and barbs of words. When it moves around +in there it churns at the soft tissues like someone’s stuck a very small hand +blender in my skull. It repeats itself inside the wormy cave system that used +to be my thoughts. It says you will not survive. You will not survive. You will +not survive. - There was an ancient thought: that Zeus feeds on the world. ‘The - universe is cyclically consumed by the fire that engendered it.’ Our - God is a devourer, who makes things only for the swallowing. As it - happens, this was the first thought, the first ever written down in a - book of philosophy, the first to survive: that nothing survives, and - the blankness that birthed you will be the same hole you crawl into - again. Anaximander: ‘Whence things have their origin, thence also their - destruction lies…’ In the Polynesian version, Maui tried to achieve - immortality by taking the form of a worm and slithering into the vagina - of Hine-nui-te-po, goddess of night and death.[6]1 He failed. - Hine-nui-te-po’s pussy is full of obsidian teeth; when she stirred in - the night those teeth sliced clean through his body. He dribbled out - again, a loose mulch of the hero who conquered the Sun. +Earlier this year, an article in the Cut reported that the cool thing now is to +have messy hair and smoke cigarettes again. You might remember it; the piece +was widely mocked for a day or two, and then it vanished without a trace, which +is how these things tend to go. But the headline was incredible, and it stuck +with me. [16]A Vibe Shift Is Coming. Will Any Of Us Survive It? Everyone else +seemed to focus on the ‘vibe shift’ stuff, but the second part was much more +interesting. To talk about survival—what extraordinary stakes, for a piece that +was, in essence, about how young people are wearing different types of shoes +from the shoes that you, as a slightly older person who still wants to think of +themselves as young, wear. Everything is stripped back to the rawest truth: +that you are a fragile creature perishing in time. And all you need to do is +apply Betteridge’s Law for the real content to shine through. No. None of you +will survive. - You will not survive is not only a frightening idea. The things I hope - for are doomed, and everything I try to create will be a failure, but - so will everything I despise.[7]2 These days, it repeats itself - whenever I see something that’s trying its hardest to make me angry and - upset. There’s a whole class of these objects: they’re never - particularly interesting or important; they just exist to jab you into - thinking that the world is going in a particular direction, away from - wherever you are. One-Third Of Newborn Infants Now Describe Themselves - As Polyamorous—Here’s Why That’s A Good Thing. Should I get upset about - this? Should I be concerned? Why bother? It will not survive.[8]3 Meet - The Edgy Influencers Making Holocaust Denial Hip Again. Are we in - trouble? Maybe, but even trouble is ending. Everyone That Matters Has - Started Wearing Jeans Over Their Heads With Their Arms Down The Leg - Holes And Their Faces All Cramped Up In The Sweaty Groin Region, And - They Walk Down The Street Like This, Bumping Into Things, And When They - Sit Down To Eat They Just Pour Their Subscription-Service - Meal-Replacement Slurry Over The Crotch Of Their Jeans And Lick At The - Dribblings From The Inside, And They’re Covered In Flies And Smell Bad - And Also They’re Naked From The Waist Down Because Their Trousers Are - On Their Heads, That’s Part Of It Too—We Show You How To Get The Look! - How proud they are of their new thing. ‘The strong iron-hearted - man-slaying Achilles, who would not live long.’ +There was an ancient thought: that Zeus feeds on the world. ‘The universe is +cyclically consumed by the fire that engendered it.’ Our God is a devourer, who +makes things only for the swallowing. As it happens, this was the first +thought, the first ever written down in a book of philosophy, the first to +survive: that nothing survives, and the blankness that birthed you will be the +same hole you crawl into again. Anaximander: ‘Whence things have their origin, +thence also their destruction lies…’ In the Polynesian version, Maui tried to +achieve immortality by taking the form of a worm and slithering into the vagina +of Hine-nui-te-po, goddess of night and death.[17]1 He failed. Hine-nui-te-po’s +pussy is full of obsidian teeth; when she stirred in the night those teeth +sliced clean through his body. He dribbled out again, a loose mulch of the hero +who conquered the Sun. - In fact, one of the things that will not survive is novelty itself: - trends, fads, fashions, scenes, vibes. We are thrown back into cyclical - time; what’s growing old is the cruel demand to make things new. It’s - already trite to notice that all our films are franchises now, all our - bestselling novelists have the same mass-produced non-style, and all - our pop music sounds like a tribute act.[9]4 But consider that the - cultural shift that had all those thirtysomething Cut writers so - worried about their survival is simply the return of a vague Y2K - sensibility, which was itself just an echo of the early 1980s. Angular - guitar music again, flash photography, plaid. We’re on a twenty-year - loop: the time it takes for a new generation to be born, kick around - for a while, and then settle into the rhythm of the spheres. +You will not survive is not only a frightening idea. The things I hope for are +doomed, and everything I try to create will be a failure, but so will +everything I despise.[18]2 These days, it repeats itself whenever I see +something that’s trying its hardest to make me angry and upset. There’s a whole +class of these objects: they’re never particularly interesting or important; +they just exist to jab you into thinking that the world is going in a +particular direction, away from wherever you are. One-Third Of Newborn Infants +Now Describe Themselves As Polyamorous—Here’s Why That’s A Good Thing. Should I +get upset about this? Should I be concerned? Why bother? It will not survive. +[19]3 Meet The Edgy Influencers Making Holocaust Denial Hip Again. Are we in +trouble? Maybe, but even trouble is ending. Everyone That Matters Has Started +Wearing Jeans Over Their Heads With Their Arms Down The Leg Holes And Their +Faces All Cramped Up In The Sweaty Groin Region, And They Walk Down The Street +Like This, Bumping Into Things, And When They Sit Down To Eat They Just Pour +Their Subscription-Service Meal-Replacement Slurry Over The Crotch Of Their +Jeans And Lick At The Dribblings From The Inside, And They’re Covered In Flies +And Smell Bad And Also They’re Naked From The Waist Down Because Their Trousers +Are On Their Heads, That’s Part Of It Too—We Show You How To Get The Look! How +proud they are of their new thing. ‘The strong iron-hearted man-slaying +Achilles, who would not live long.’ - Every time this happens, it coincides with a synodic conjunction of - Jupiter and Saturn. Jupiter, the triumphant present; Saturn, - senescence, decline. The son who castrates his father, the father who - devours his sons: once every twenty years, they are indistinguishable - in the sky. Astrologers call this the Great Chronocrator. The last one - was at the end of 2020, and it’ll occur twice more in my lifetime: when - these witless trendwatchers finally shuffle off, they’ll be tended on - their deathbeds by a nurse with messy black eyeshadow and low-rise - scrubs. Jupiter and Saturn will burn above you as a single point, and - with your last rattling breaths you’ll still be asking if she thinks - you’re cool. You don’t get it. ‘For oute of olde feldes, as men seith, - cometh al this newe corn fro yeer to yere.’ We are entering a blissful - new Middle Ages, where you simply soak in a static world until the - waters finally close in over your head. +In fact, one of the things that will not survive is novelty itself: trends, +fads, fashions, scenes, vibes. We are thrown back into cyclical time; what’s +growing old is the cruel demand to make things new. It’s already trite to +notice that all our films are franchises now, all our bestselling novelists +have the same mass-produced non-style, and all our pop music sounds like a +tribute act.[20]4 But consider that the cultural shift that had all those +thirtysomething Cut writers so worried about their survival is simply the +return of a vague Y2K sensibility, which was itself just an echo of the early +1980s. Angular guitar music again, flash photography, plaid. We’re on a +twenty-year loop: the time it takes for a new generation to be born, kick +around for a while, and then settle into the rhythm of the spheres. - The things that will survive are the things that are already in some - sense endless. The sea; the night; the word. Things with deep fathoms - of darkness in them. +Every time this happens, it coincides with a synodic conjunction of Jupiter and +Saturn. Jupiter, the triumphant present; Saturn, senescence, decline. The son +who castrates his father, the father who devours his sons: once every twenty +years, they are indistinguishable in the sky. Astrologers call this the Great +Chronocrator. The last one was at the end of 2020, and it’ll occur twice more +in my lifetime: when these witless trendwatchers finally shuffle off, they’ll +be tended on their deathbeds by a nurse with messy black eyeshadow and low-rise +scrubs. Jupiter and Saturn will burn above you as a single point, and with your +last rattling breaths you’ll still be asking if she thinks you’re cool. You +don’t get it. ‘For oute of olde feldes, as men seith, cometh al this newe corn +fro yeer to yere.’ We are entering a blissful new Middle Ages, where you simply +soak in a static world until the waters finally close in over your head. - The internet will not survive. +The things that will survive are the things that are already in some sense +endless. The sea; the night; the word. Things with deep fathoms of darkness in +them. + +The internet will not survive. The argument +[21] +[https] + 1. That it’s easier to imagine the end of the world than the end of the internet - In 1977, Ken Olsen declared that ‘there is no reason for any individual - to have a computer in his home.’ In 1995, Robert Metcalfe predicted in - InfoWorld that the internet would go ‘spectacularly supernova’ and then - collapse within a year. In 2000, the Daily Mail reported that the - ‘Internet may be just a passing fad,’ adding that ‘predictions that the - Internet would revolutionise the way society works have proved wildly - inaccurate.’ Any day now, the millions of internet users would simply - stop, either bored or frustrated, and rejoin the real world. +In 1977, Ken Olsen declared that ‘there is no reason for any individual to have +a computer in his home.’ In 1995, Robert Metcalfe predicted in InfoWorld that +the internet would go ‘spectacularly supernova’ and then collapse within a +year. In 2000, the Daily Mail reported that the ‘Internet may be just a passing +fad,’ adding that ‘predictions that the Internet would revolutionise the way +society works have proved wildly inaccurate.’ Any day now, the millions of +internet users would simply stop, either bored or frustrated, and rejoin the +real world. - Funny, isn’t it? You can laugh at these people now, from your high - perch one quarter of the way into the twenty-first century. Look at - these morons, stuck in their grubby little past, who couldn’t even - correctly identify the shape of the year 2022. You can see it - perfectly, because you’re smart. You know that the internet has changed - everything, forever. +Funny, isn’t it? You can laugh at these people now, from your high perch one +quarter of the way into the twenty-first century. Look at these morons, stuck +in their grubby little past, who couldn’t even correctly identify the shape of +the year 2022. You can see it perfectly, because you’re smart. You know that +the internet has changed everything, forever. - If you like the internet, you’ll point out that it’s given us all of - human knowledge and art and music, instantly accessible from anywhere - in the world; that you can arrive in a foreign city and immediately - guide yourself to a restaurant and translate the menu and also find out - about the interesting historical massacres that took place nearby, all - with a few lazy swipes of your finger. So many interesting little - blogs! So many bizarre subcultures! It’s opened up our experience of - the world: now, nothing is out of reach. +If you like the internet, you’ll point out that it’s given us all of human +knowledge and art and music, instantly accessible from anywhere in the world; +that you can arrive in a foreign city and immediately guide yourself to a +restaurant and translate the menu and also find out about the interesting +historical massacres that took place nearby, all with a few lazy swipes of your +finger. So many interesting little blogs! So many bizarre subcultures! It’s +opened up our experience of the world: now, nothing is out of reach. - To be honest, it’s difficult to reconstruct what the unbridled - techno-optimists think; there’s so few of them left. Still, those who - don’t like the internet usually agree with them on all the basics—they - just argue that we’re now in touch with the wrong sort of thing: bad - kids’ cartoons, bad political opinions, bad ways of relating to your - own body and others. Which is why it’s so important to get all this - unpleasant stuff off the system, and turn the algorithm towards what is - good and true. +To be honest, it’s difficult to reconstruct what the unbridled techno-optimists +think; there’s so few of them left. Still, those who don’t like the internet +usually agree with them on all the basics—they just argue that we’re now in +touch with the wrong sort of thing: bad kids’ cartoons, bad political opinions, +bad ways of relating to your own body and others. Which is why it’s so +important to get all this unpleasant stuff off the system, and turn the +algorithm towards what is good and true. - They might be right, but you could go deeper. The internet has enabled - us to live, for the first time, entirely apart from other people. It - replaces everything good in life with a low-resolution [10]simulation. - A handful of sugar instead of a meal: addictive but empty, just enough - to keep you alive. It even seems to be killing off sex, replacing it - with more cheap, synthetic [11]ersatz. Our most basic biological drives - simply wither in its cold blue light. People will cheerfully admit that - the internet has destroyed their attention spans, but what it’s really - done away with is your ability to think. Usually, when I’m doing - something boring but necessary—the washing up, or walking to the post - office—I’ll constantly interrupt myself; there’s a little Joycean - warbling from the back of my brain. ‘Boredom is the dream bird that - broods the egg of experience.’ But when I’m listlessly killing time on - the internet, there is nothing. The mind does not wander. I am not - there. That rectangular hole spews out war crimes and cutesy comedies - and affirmations and porn, all of it mixed together into one - general-purpose informational goo, and I remain in its trance, the - lifeless scroll, twitching against the screen until the sky goes dark - and I’m one day closer to the end. You lose hours to—what? An endless - slideshow of barely interesting images and actively unpleasant text. - Oh, cool—more memes! You know it’s all very boring, brooding nothing, - but the internet addicts you to your own boredom. I’ve tried heroin: - this is worse. More numb, more blank, more nowhere. A portable suicide - booth; a device for turning off your entire existence. Death is no - longer waiting for you at the far end of life. It eats away at your - short span from the inside out. +They might be right, but you could go deeper. The internet has enabled us to +live, for the first time, entirely apart from other people. It replaces +everything good in life with a low-resolution [22]simulation. A handful of +sugar instead of a meal: addictive but empty, just enough to keep you alive. It +even seems to be killing off sex, replacing it with more cheap, synthetic [23] +ersatz. Our most basic biological drives simply wither in its cold blue light. +People will cheerfully admit that the internet has destroyed their attention +spans, but what it’s really done away with is your ability to think. Usually, +when I’m doing something boring but necessary—the washing up, or walking to the +post office—I’ll constantly interrupt myself; there’s a little Joycean warbling +from the back of my brain. ‘Boredom is the dream bird that broods the egg of +experience.’ But when I’m listlessly killing time on the internet, there is +nothing. The mind does not wander. I am not there. That rectangular hole spews +out war crimes and cutesy comedies and affirmations and porn, all of it mixed +together into one general-purpose informational goo, and I remain in its +trance, the lifeless scroll, twitching against the screen until the sky goes +dark and I’m one day closer to the end. You lose hours to—what? An endless +slideshow of barely interesting images and actively unpleasant text. Oh, +cool—more memes! You know it’s all very boring, brooding nothing, but the +internet addicts you to your own boredom. I’ve tried heroin: this is worse. +More numb, more blank, more nowhere. A portable suicide booth; a device for +turning off your entire existence. Death is no longer waiting for you at the +far end of life. It eats away at your short span from the inside out. - But lately I’m starting to think that the last thing the internet - destroys might be itself. I think they might be vindicated, Ken Olson - and Robert Metcalfe and even, God forgive me, the Daily Mail. +But lately I’m starting to think that the last thing the internet destroys +might be itself. I think they might be vindicated, Ken Olson and Robert +Metcalfe and even, God forgive me, the Daily Mail. - In the future—not the distant future, but ten years, five—people will - remember the internet as a brief dumb enthusiasm, like phrenology or - the dirigible. They might still use computer networks to send an email - or manage their bank accounts, but those networks will not be where - culture or politics happens. The idea of spending all day online will - seem as ridiculous as sitting down in front of a nice fire to read the - phone book. Soon, people will find it incredible that for several - decades all our art was obsessed with digital computers: all those - novels and films and exhibitions about tin cans that make beeping - noises, handy if you need to multiply two big numbers together, but so - lifeless, so sexless, so grey synthetic glassy bugeyed spreadsheet - plastic drab. And all your smug chortling over the people who failed to - predict our internetty present—if anyone remembers it, it’ll be with - exactly the same laugh.[12]5 +In the future—not the distant future, but ten years, five—people will remember +the internet as a brief dumb enthusiasm, like phrenology or the dirigible. They +might still use computer networks to send an email or manage their bank +accounts, but those networks will not be where culture or politics happens. The +idea of spending all day online will seem as ridiculous as sitting down in +front of a nice fire to read the phone book. Soon, people will find it +incredible that for several decades all our art was obsessed with digital +computers: all those novels and films and exhibitions about tin cans that make +beeping noises, handy if you need to multiply two big numbers together, but so +lifeless, so sexless, so grey synthetic glassy bugeyed spreadsheet plastic +drab. And all your smug chortling over the people who failed to predict our +internetty present—if anyone remembers it, it’ll be with exactly the same +laugh.[24]5 2. That exhausted is a whole lot more than tired - You know, secretly, even if you’re pretending not to, that this thing - is nearing exhaustion. There is simply nothing there online. All - language has become rote, a halfarsed performance: even the outraged - mobs are screaming on autopilot. Even genuine crises can’t interrupt - the tedium of it all, the bad jokes and predictable thinkpieces, - spat-out enzymes to digest the world. ‘Leopards break into the temple - and drink all the sacrificial vessels dry; it keeps happening; in the - end, it can be calculated in advance and is incorporated into the - ritual.’ Online is not where people meaningfully express themselves; - that still happens in the remaining scraps of the nonnetworked world. - It’s a parcel of time you give over to the machine. Make the motions, - chant its dusty liturgy. The newest apps even [13]literalise this: - everyone has to post a selfie at exactly the same time, an inaudible - call to prayer ringing out across the world. Recently, at a bar, I saw - the room go bright as half the patrons suddenly started posing with - their negronis. This is called being real. +You know, secretly, even if you’re pretending not to, that this thing is +nearing exhaustion. There is simply nothing there online. All language has +become rote, a halfarsed performance: even the outraged mobs are screaming on +autopilot. Even genuine crises can’t interrupt the tedium of it all, the bad +jokes and predictable thinkpieces, spat-out enzymes to digest the world. +‘Leopards break into the temple and drink all the sacrificial vessels dry; it +keeps happening; in the end, it can be calculated in advance and is +incorporated into the ritual.’ Online is not where people meaningfully express +themselves; that still happens in the remaining scraps of the nonnetworked +world. It’s a parcel of time you give over to the machine. Make the motions, +chant its dusty liturgy. The newest apps even [25]literalise this: everyone has +to post a selfie at exactly the same time, an inaudible call to prayer ringing +out across the world. Recently, at a bar, I saw the room go bright as half the +patrons suddenly started posing with their negronis. This is called being real. - Whoever you are, a role is already waiting for you. All those pouty - nineteen-year-old lowercase nymphets, so fluent in their borrowed - boredom, flatly reciting don’t just choke me i want someone to cut off - my entire head. All those wide-eyed video creeps, their inhuman - enthusiasm, hi guys! hi guys!! so today we’re going to talk about—don’t - forget to like and subscribe!! hi guys!!! Even on the deranged fringes, - a dead grammar has set in. The people who fake Tourette’s for TikTok - and the people who fake schizophrenia for no reason at all. VOICES HAVE - REVEALED TO ME THAT YOUR MAILMAN IS A DEMONIC ARCHON SPAT FROM - BABYLON’S SPINNING PIGMOUTH, GOD WANTS YOU TO KILL HIM WITH A ROCKET - LAUNCHER. Without even passing out of date, every mode of - internet-speak already sounds antiquated. Aren’t you embarrassed? Can’t - you hear, under the chatter of these empty forms, a long low ancient - whine, the last mewl of that cat who wants to haz cheezburger? +Whoever you are, a role is already waiting for you. All those pouty +nineteen-year-old lowercase nymphets, so fluent in their borrowed boredom, +flatly reciting don’t just choke me i want someone to cut off my entire head. +All those wide-eyed video creeps, their inhuman enthusiasm, hi guys! hi guys!! +so today we’re going to talk about—don’t forget to like and subscribe!! hi +guys!!! Even on the deranged fringes, a dead grammar has set in. The people who +fake Tourette’s for TikTok and the people who fake schizophrenia for no reason +at all. VOICES HAVE REVEALED TO ME THAT YOUR MAILMAN IS A DEMONIC ARCHON SPAT +FROM BABYLON’S SPINNING PIGMOUTH, GOD WANTS YOU TO KILL HIM WITH A ROCKET +LAUNCHER. Without even passing out of date, every mode of internet-speak +already sounds antiquated. Aren’t you embarrassed? Can’t you hear, under the +chatter of these empty forms, a long low ancient whine, the last mewl of that +cat who wants to haz cheezburger? - When I say the internet is running dry, I am not just basing this off - vibes. The exhaustion is measurable and real. 2020 saw a grand, mostly - unnoticed shift in online behaviour: the [14]clickhogs all went - catatonic, thick tongues lolling in the muck. On Facebook, the average - engagement rate—the number of likes, comments, and shares per - follower—fell by 34%, from 0.086 to 0.057. Well, everyone knows that - the mushrooms are spreading over Facebook, hundreds of thousands of - users [15]liquefying out of its corpse every year. But the same pattern - is everywhere. Engagement fell 28% on Instagram and 15% on Twitter. - (It’s [16]kept falling since.) Even on TikTok, the terrifying brainhole - of tomorrow, the walls are closing in. Until 2020, the average daily - time spent on the app kept rising in line with its growing user base; - since then the number of users has kept growing, but the thing is - capturing [17]less and less of their lives. +When I say the internet is running dry, I am not just basing this off vibes. +The exhaustion is measurable and real. 2020 saw a grand, mostly unnoticed shift +in online behaviour: the [26]clickhogs all went catatonic, thick tongues +lolling in the muck. On Facebook, the average engagement rate—the number of +likes, comments, and shares per follower—fell by 34%, from 0.086 to 0.057. +Well, everyone knows that the mushrooms are spreading over Facebook, hundreds +of thousands of users [27]liquefying out of its corpse every year. But the same +pattern is everywhere. Engagement fell 28% on Instagram and 15% on Twitter. +(It’s [28]kept falling since.) Even on TikTok, the terrifying brainhole of +tomorrow, the walls are closing in. Until 2020, the average daily time spent on +the app kept rising in line with its growing user base; since then the number +of users has kept growing, but the thing is capturing [29]less and less of +their lives. - And this was, remember, a year in which millions of people had nothing - to do except engage with great content online—and in which, for a few - months, liking and sharing the right content became an urgent moral - duty. Back then, I thought the pandemic and the protests had - permanently hauled our collective human semi-consciousness over to the - machine. Like most of us, I couldn’t see what was really happening, but - there were some people who could. Around the same time, strange new - conspiracy theories started doing the rounds: that [18]the internet is - empty, that all the human beings you used to talk to have been replaced - by bots and drones. ‘The internet of today is entirely sterile… the - internet may seem gigantic, but it’s like a hot air balloon with - nothing inside.’ They weren’t wrong. +And this was, remember, a year in which millions of people had nothing to do +except engage with great content online—and in which, for a few months, liking +and sharing the right content became an urgent moral duty. Back then, I thought +the pandemic and the protests had permanently hauled our collective human +semi-consciousness over to the machine. Like most of us, I couldn’t see what +was really happening, but there were some people who could. Around the same +time, strange new conspiracy theories started doing the rounds: that [30]the +internet is empty, that all the human beings you used to talk to have been +replaced by bots and drones. ‘The internet of today is entirely sterile… the +internet may seem gigantic, but it’s like a hot air balloon with nothing +inside.’ They weren’t wrong. - What’s happening?[19]6 Here’s a story from the very early days of the - internet. In the 90s, someone I know started a collaborative online - zine, a mishmash text file of barely lucid thoughts and theories. It - was deeply weird and, in some strange corners, very popular. Years - passed and technology improved: soon, they could break the text file - into different posts, and see exactly how many people were reading each - one. They started optimising their output: the most popular posts - became the model for everything else; they found a style and voice that - worked. The result, of course, was that the entire thing became rote - and lifeless and rapidly collapsed. Much of the media is currently - going down the same path, refining itself out of existence. Aside from - the New Yorker’s fussy umlauts, there’s simply nothing to distinguish - any one publication from any other. (And platforms like this one are - not an alternative to the crisis-stricken media, just a further - acceleration in the process.) The same thing is happening everywhere, - to everyone. The more you relentlessly optimise your network-facing - self, the more you chase the last globs of loose attention, the more - frazzled we all become, and the less anyone will be able to sustain any - interest at all.[20]7 +What’s happening?[31]6 Here’s a story from the very early days of the internet. +In the 90s, someone I know started a collaborative online zine, a mishmash text +file of barely lucid thoughts and theories. It was deeply weird and, in some +strange corners, very popular. Years passed and technology improved: soon, they +could break the text file into different posts, and see exactly how many people +were reading each one. They started optimising their output: the most popular +posts became the model for everything else; they found a style and voice that +worked. The result, of course, was that the entire thing became rote and +lifeless and rapidly collapsed. Much of the media is currently going down the +same path, refining itself out of existence. Aside from the New Yorker’s fussy +umlauts, there’s simply nothing to distinguish any one publication from any +other. (And platforms like this one are not an alternative to the +crisis-stricken media, just a further acceleration in the process.) The same +thing is happening everywhere, to everyone. The more you relentlessly optimise +your network-facing self, the more you chase the last globs of loose attention, +the more frazzled we all become, and the less anyone will be able to sustain +any interest at all.[32]7 - Everything that depends on the internet for its propagation will die. - What survives will survive in conditions of low transparency, in the - sensuous murk proper to human life. +Everything that depends on the internet for its propagation will die. What +survives will survive in conditions of low transparency, in the sensuous murk +proper to human life. 3. That you have been plugged into a grave - For a while, it was possible to live your entire life online. The world - teemed with new services: simply dab at an app, and the machine would - summon some other slumping creature with a skin condition to deliver - your groceries, or drive you in pointless circles around town, or meet - you for overpriced drinks and awkward sex and vanish. Like everyone, I - thought this was the inevitable shape of the future. ‘You’ll own - nothing, and you’ll be happy.’ We’d all be reduced to a life spent - swapping small services for the last linty coins in our pockets. It’s - Uber for dogs! It’s Uber for dogshit! It’s picking up a fresh, creamy - pile of dogshit with your bare hands—on your phone! But this was not a - necessary result of new technologies. The internet was not - subordinating every aspect of our lives by itself, under its own power. - The online economy is an energy sink; it’s only survived this far as a - parasite, in the bowels of something else. +For a while, it was possible to live your entire life online. The world teemed +with new services: simply dab at an app, and the machine would summon some +other slumping creature with a skin condition to deliver your groceries, or +drive you in pointless circles around town, or meet you for overpriced drinks +and awkward sex and vanish. Like everyone, I thought this was the inevitable +shape of the future. ‘You’ll own nothing, and you’ll be happy.’ We’d all be +reduced to a life spent swapping small services for the last linty coins in our +pockets. It’s Uber for dogs! It’s Uber for dogshit! It’s picking up a fresh, +creamy pile of dogshit with your bare hands—on your phone! But this was not a +necessary result of new technologies. The internet was not subordinating every +aspect of our lives by itself, under its own power. The online economy is an +energy sink; it’s only survived this far as a parasite, in the bowels of +something else. - That something else is a vast underground cavern of the dead, billions - of years old. +That something else is a vast underground cavern of the dead, billions of years +old. - The Vision Fund is an investment vehicle headquartered in London and - founded by Japan’s SoftBank to manage some $150 billion, mostly from - the sovereign wealth funds of Saudi Arabia and the UAE, which it’s - poured into Uber and DoorDash and WeWork and Klarna and Slack. It - provides the money that [21]effectively subsidises your autistic - digital life. These firms could take over the market because they were - so much cheaper than the traditional competitors—but most of them were - never profitable; they survived on Saudi largesse. +The Vision Fund is an investment vehicle headquartered in London and founded by +Japan’s SoftBank to manage some $150 billion, mostly from the sovereign wealth +funds of Saudi Arabia and the UAE, which it’s poured into Uber and DoorDash and +WeWork and Klarna and Slack. It provides the money that [33]effectively +subsidises your autistic digital life. These firms could take over the market +because they were so much cheaper than the traditional competitors—but most of +them were never profitable; they survived on Saudi largesse. - Investors were willing to sit on these losses; it’s not as if there - were many alternatives. Capital is no longer capable of effectively - reproducing itself in the usual way, through the production of - commodities. Twenty-five years ago manufacturing represented a - [22]fifth of global GDP; in 2020 it was down to 16%. Interest rates - have hovered near zero for well over a decade as economies struggle to - grow. Until this year, governments were still issuing negative-yield - bonds, and [23]people were buying them—a predictable loss looked like - the least bad option. The only reliable source of profits is in the - extraction of raw materials: chiefly, pulling the black corpses of - trillions of prehistoric organisms out of the ground so they can be set - on fire. Which means that the feudal rulers of those corpselands—men - like King Salman, Custodian of the Two Holy Mosques—ended up sitting on - a vast reservoir of capital without many productive industries through - which it could be valorised. So, as a temporary solution, they stuck it - in the tech sector. +Investors were willing to sit on these losses; it’s not as if there were many +alternatives. Capital is no longer capable of effectively reproducing itself in +the usual way, through the production of commodities. Twenty-five years ago +manufacturing represented a [34]fifth of global GDP; in 2020 it was down to +16%. Interest rates have hovered near zero for well over a decade as economies +struggle to grow. Until this year, governments were still issuing +negative-yield bonds, and [35]people were buying them—a predictable loss looked +like the least bad option. The only reliable source of profits is in the +extraction of raw materials: chiefly, pulling the black corpses of trillions of +prehistoric organisms out of the ground so they can be set on fire. Which means +that the feudal rulers of those corpselands—men like King Salman, Custodian of +the Two Holy Mosques—ended up sitting on a vast reservoir of capital without +many productive industries through which it could be valorised. So, as a +temporary solution, they stuck it in the tech sector. - It didn’t matter that these firms couldn’t turn a profit. The real - function was not to make money in the short term; it was to suck up - vast quantities of user data. Where you go, what you buy; a perfect - snapshot of millions of ordinary lives. They were betting that this - would be the currency of the future, as fundamental as oil: the stuff - that rules the world.[24]8 +It didn’t matter that these firms couldn’t turn a profit. The real function was +not to make money in the short term; it was to suck up vast quantities of user +data. Where you go, what you buy; a perfect snapshot of millions of ordinary +lives. They were betting that this would be the currency of the future, as +fundamental as oil: the stuff that rules the world.[36]8 - They were wrong, but in the process of being wrong, they created a - monster. Your frictionless digital future, your very important culture - wars, your entire sense of self—it’s just a waste byproduct of the - perfectly ordinary, centuries-old global circulation of fuel, capital, - and Islam. It turns out that if these three elements are arranged in - one particular way, people will start behaving strangely. They’ll - pretend that by spending all day on the computer they’re actually - fighting fascism, or standing up for women’s sex-based rights, as if - the entire terrain of combat wasn’t provided by a nightmare - head-chopping theocratic state.[25]9 They’ll pretend that it’s normal - to dance alone in silence for a front-facing camera, or that the - intersection of art and technology is somehow an interesting place to - be. For a brief minute, you’ll get the sociocultural Boltzmann entity - we call the internet. ‘But nevertheless, it was only a minute. After - nature had drawn a few breaths, the star cooled and congealed, and the - clever beasts had to die.’ +They were wrong, but in the process of being wrong, they created a monster. +Your frictionless digital future, your very important culture wars, your entire +sense of self—it’s just a waste byproduct of the perfectly ordinary, +centuries-old global circulation of fuel, capital, and Islam. It turns out that +if these three elements are arranged in one particular way, people will start +behaving strangely. They’ll pretend that by spending all day on the computer +they’re actually fighting fascism, or standing up for women’s sex-based rights, +as if the entire terrain of combat wasn’t provided by a nightmare head-chopping +theocratic state.[37]9 They’ll pretend that it’s normal to dance alone in +silence for a front-facing camera, or that the intersection of art and +technology is somehow an interesting place to be. For a brief minute, you’ll +get the sociocultural Boltzmann entity we call the internet. ‘But nevertheless, +it was only a minute. After nature had drawn a few breaths, the star cooled and +congealed, and the clever beasts had to die.’ - The tables are already being cleared at the great tech-sector - chow-down.[26]10 Online services are reverting to market prices. The - Vision Fund is the worst performing fund in SoftBank’s history; in the - last quarter alone it’s [27]lost over $20 billion. Most of all, it’s - now impossible to ignore that the promise propping up the entire - networked economy—that user data could power a system of terrifyingly - precise targeted advertising—was a lie. It simply does not work. ‘It - sees that you bought a [28]ticket to Budapest, so you get more tickets - to Budapest…All they really know about you is your shopping.’ Now, - large companies are cutting out their online advertising budgets - entirely, and seeing [29]no change whatsoever to their bottom line. One - study found that algorithmically targeted advertising performed worse - than ads [30]selected at random. This is what [31]sustains the entire - media, provides 80% of Google’s income and 99% of Facebook’s, and it’s - made of magic beans. +The tables are already being cleared at the great tech-sector chow-down.[38]10 +Online services are reverting to market prices. The Vision Fund is the worst +performing fund in SoftBank’s history; in the last quarter alone it’s [39]lost +over $20 billion. Most of all, it’s now impossible to ignore that the promise +propping up the entire networked economy—that user data could power a system of +terrifyingly precise targeted advertising—was a lie. It simply does not work. +‘It sees that you bought a [40]ticket to Budapest, so you get more tickets to +Budapest…All they really know about you is your shopping.’ Now, large companies +are cutting out their online advertising budgets entirely, and seeing [41]no +change whatsoever to their bottom line. One study found that algorithmically +targeted advertising performed worse than ads [42]selected at random. This is +what [43]sustains the entire media, provides 80% of Google’s income and 99% of +Facebook’s, and it’s made of magic beans. - A dying animal still makes its last few spastic kicks: hence the recent - flurry of strange and stillborn ideas. Remember the Internet of Things? - Your own lightbulbs blinking out ads in seizure-inducing Morse code, - your own coffee machine calling the police if you try to feed it some - unlicensed beans. Remember the Metaverse? The grisly pink avatar of - Mark Zuckerberg, bobbing around like the ghost of someone’s foreskin - through the scene of the recent genocides. Wow! It’s so cool to - immersively experience these bloodmires in VR! More recent attempts to - squeeze some kind of profit out of this carcass are, somehow, worse. - Here’s how web3 is about to disrupt the meat industry. Every time you - buy a pound of tripe, your physical offal will be bundled with a - dedicated TripeToken, which maintains its value and rarity even after - the tripe has been eaten, thanks to a unique blockchain signature - indexed to the intestinal microbiome of the slaughtered cattle! By - eating large amounts of undercooked offal while trading TripeTokens on - secondary markets, you can incentivise the spread of your favourite - cattle diseases—and if one of the pathogens you own jumps the species - barrier to start infecting humans, you’ve successfully monetised the - next pandemic! Once you get sick, you can rent out portions of your own - intestinal tract to an industrial meat DAO in exchange for - SlaughterCoins. Because SlaughterCoins are linked via blockchain to the - progressive disintegration of your body, they’re guaranteed to increase - in value! And when your suffering becomes unbearable, local abattoirs - will bid to buy up your SlaughterCoin wallet in exchange for putting - you out of your misery with a bolt gun to the head! Yes, the future is - always capable of getting worse. But this future is simply never going - to happen. Not the next generation of anything, just a short-term - grift: the ship’s rats stripping the galley of all its silverware on - their way out. +A dying animal still makes its last few spastic kicks: hence the recent flurry +of strange and stillborn ideas. Remember the Internet of Things? Your own +lightbulbs blinking out ads in seizure-inducing Morse code, your own coffee +machine calling the police if you try to feed it some unlicensed beans. +Remember the Metaverse? The grisly pink avatar of Mark Zuckerberg, bobbing +around like the ghost of someone’s foreskin through the scene of the recent +genocides. Wow! It’s so cool to immersively experience these bloodmires in VR! +More recent attempts to squeeze some kind of profit out of this carcass are, +somehow, worse. Here’s how web3 is about to disrupt the meat industry. Every +time you buy a pound of tripe, your physical offal will be bundled with a +dedicated TripeToken, which maintains its value and rarity even after the tripe +has been eaten, thanks to a unique blockchain signature indexed to the +intestinal microbiome of the slaughtered cattle! By eating large amounts of +undercooked offal while trading TripeTokens on secondary markets, you can +incentivise the spread of your favourite cattle diseases—and if one of the +pathogens you own jumps the species barrier to start infecting humans, you’ve +successfully monetised the next pandemic! Once you get sick, you can rent out +portions of your own intestinal tract to an industrial meat DAO in exchange for +SlaughterCoins. Because SlaughterCoins are linked via blockchain to the +progressive disintegration of your body, they’re guaranteed to increase in +value! And when your suffering becomes unbearable, local abattoirs will bid to +buy up your SlaughterCoin wallet in exchange for putting you out of your misery +with a bolt gun to the head! Yes, the future is always capable of getting +worse. But this future is simply never going to happen. Not the next generation +of anything, just a short-term grift: the ship’s rats stripping the galley of +all its silverware on their way out. 4. That the revolution can not be digitised - If you really want to see how impotent the internet is, though, you - only have to look at politics. +If you really want to see how impotent the internet is, though, you only have +to look at politics. - Everyone agrees that the internet has [32]swallowed our entire - political discourse whole. When politicians debate, they trade crap - one-liners to be turned into gifs. Their strategists seem to think - elections are won or lost [33]on memes. Entire movements emerge out of - flatulent little echo chambers; elected representatives giddy over the - evils of seed oils or babbling about how it’s not their job to educate - you. And it’s true that the internet has changed some things: mostly, - it’s helped break apart the cohesive working-class communities that - produce a strong left, and turned them into vague swarms of monads. But - as a political instrument, all it can do is destroy anyone who tries to - pick it up—because everything that reproduces itself through the - internet is doomed. +Everyone agrees that the internet has [44]swallowed our entire political +discourse whole. When politicians debate, they trade crap one-liners to be +turned into gifs. Their strategists seem to think elections are won or lost +[45]on memes. Entire movements emerge out of flatulent little echo chambers; +elected representatives giddy over the evils of seed oils or babbling about how +it’s not their job to educate you. And it’s true that the internet has changed +some things: mostly, it’s helped break apart the cohesive working-class +communities that produce a strong left, and turned them into vague swarms of +monads. But as a political instrument, all it can do is destroy anyone who +tries to pick it up—because everything that reproduces itself through the +internet is doomed. - Occasionally, online social movements do make something happen. A hand - emerges from out of the cloud to squish some minor individual. Let’s - get her friends to denounce her! Let’s find out where she lives! You - can have your sadistic fun and your righteous justice at the same time: - doesn’t it feel good to be good? But these movements build no - institutions, create no collective subjects, and produce no meaningful - change. Their only power is punishment—and this game only works within - the internet, and only when everyone involved agrees to play by the - internet’s rules.[34]11 As soon as they run up against anything with a - separate set of values—say, a Republican Party that wants to put its - guy on the Supreme Court, #MeToo or no #MeToo—they instantly crumble. - And if, like much of the contemporary left, you're left with nothing on - which to build your political movement except a hodgepodge of online - frenzies, you will crumble too. +Occasionally, online social movements do make something happen. A hand emerges +from out of the cloud to squish some minor individual. Let’s get her friends to +denounce her! Let’s find out where she lives! You can have your sadistic fun +and your righteous justice at the same time: doesn’t it feel good to be good? +But these movements build no institutions, create no collective subjects, and +produce no meaningful change. Their only power is punishment—and this game only +works within the internet, and only when everyone involved agrees to play by +the internet’s rules.[46]11 As soon as they run up against anything with a +separate set of values—say, a Republican Party that wants to put its guy on the +Supreme Court, #MeToo or no #MeToo—they instantly crumble. And if, like much of +the contemporary left, you're left with nothing on which to build your +political movement except a hodgepodge of online frenzies, you will crumble +too. - The post-George Floyd demonstrations might be our era’s greatest - tragedy: tens of millions of people mobilised in (possibly) the largest - protest movement in human history, all for an urgent and necessary - cause—and achieving precisely nothing. [35]At the time, I worried that - the mass street movement risked being consumed by the sterile politics - of online; this is exactly what happened. Now, even that vague cultural - halo is spent. Whatever wokeness was, as of 2022 it’s so utterly burned - out as a cultural force that anyone still grousing about it 24/7 is a - guaranteed hack. More recently, there’s been worry about the rise of - the ‘[36]new right’—a oozingly digitised political current whose - effective proposition is that people should welcome a total - dictatorship to prevent corporations posting rainbow flags on the - internet. You can guess what I think of its prospects. +The post-George Floyd demonstrations might be our era’s greatest tragedy: tens +of millions of people mobilised in (possibly) the largest protest movement in +human history, all for an urgent and necessary cause—and achieving precisely +nothing. [47]At the time, I worried that the mass street movement risked being +consumed by the sterile politics of online; this is exactly what happened. Now, +even that vague cultural halo is spent. Whatever wokeness was, as of 2022 it’s +so utterly burned out as a cultural force that anyone still grousing about it +24/7 is a guaranteed hack. More recently, there’s been worry about the rise of +the ‘[48]new right’—a oozingly digitised political current whose effective +proposition is that people should welcome a total dictatorship to prevent +corporations posting rainbow flags on the internet. You can guess what I think +of its prospects. 5. That this is the word - Things will survive in proportion to how well they’ve managed to - insulate themselves from the internet and its demands. The Financial - Times will outlive the Guardian. Paintings will outlive NFTs. Print - magazines will outlive Substack. You will, if you play your cards - right, outlive me. If anything interesting ever happens again, it will - not be online. You will not get it delivered to your inbox. It will not - have a podcast. This machine has never produced anything of note, and - it never will. +Things will survive in proportion to how well they’ve managed to insulate +themselves from the internet and its demands. The Financial Times will outlive +the Guardian. Paintings will outlive NFTs. Print magazines will outlive +Substack. You will, if you play your cards right, outlive me. If anything +interesting ever happens again, it will not be online. You will not get it +delivered to your inbox. It will not have a podcast. This machine has never +produced anything of note, and it never will. - A sword is against the internet, against those who live online, and - against its officials and wise men. A sword is against its false - prophets, and they will become fools. A sword is against its - commentators, and they will be filled with exhaustion. A sword is - against its trends and fashions and against all the posturers in its - midst, and they will become out of touch. A sword is against its - cryptocoins, and they will be worthless. A drought is upon its waters, - and they will be dried up. For it is a place of graven images, and the - people go mad over idols. So the desert creatures and hyenas will live - there and ostriches will dwell there. The bots will chatter at its - threshold, and dead links will litter the river bed. It will never - again be inhabited or lived in from generation to generation. +A sword is against the internet, against those who live online, and against its +officials and wise men. A sword is against its false prophets, and they will +become fools. A sword is against its commentators, and they will be filled with +exhaustion. A sword is against its trends and fashions and against all the +posturers in its midst, and they will become out of touch. A sword is against +its cryptocoins, and they will be worthless. A drought is upon its waters, and +they will be dried up. For it is a place of graven images, and the people go +mad over idols. So the desert creatures and hyenas will live there and +ostriches will dwell there. The bots will chatter at its threshold, and dead +links will litter the river bed. It will never again be inhabited or lived in +from generation to generation. A conclusion, or, where I’m going with all this - I am aware that I’m writing this on the internet. +[49] +[https] - Whatever it is I’m doing here, you should not be part of it. Do not - click the button below this paragraph, do not type in your email - address to receive new posts straight to your inbox, and for the love - of God, if you have any self-respect, do not even think about giving me - any money. There is still time for you to do something else. You can - still unchain yourself from this world that will soon, very soon, mean - absolutely nothing. - ____________________ - (BUTTON) Subscribe +I am aware that I’m writing this on the internet. - As far as I can tell, Substack mostly functions as a kind of - meta-discourse for Twitter. (At least, this is the part I’ve seen—there - are also, apparently, recipes.) Graham Linehan posts fifty times a day - on this platform, and all of it is just replying to tweets. This does - not strike me as particularly sustainable. I have no idea what kind of - demented pervert is actually reading this stuff, when you could be - lying in a meadow by a glassy stream, rien faire comme une bête, eyes - melting into the sky. According to the very helpful Substack employees - I’ve spoken to, there are a set of handy best practices for this - particular region of the machine: have regular open threads, chitchat - with your subscribers, post humanising updates about your life. Form a - community. I’m told that the most successful writing on here is - friendly, frequent, and fast. Apparently, readers should know exactly - what you’re getting at within the first three sentences. I do not plan - on doing any of these things. +Whatever it is I’m doing here, you should not be part of it. Do not click the +button below this paragraph, do not type in your email address to receive new +posts straight to your inbox, and for the love of God, if you have any +self-respect, do not even think about giving me any money. There is still time +for you to do something else. You can still unchain yourself from this world +that will soon, very soon, mean absolutely nothing. - This is what I would like to do. I would like to see if, in the belly - of the dying internet, it’s possible to create something that is not - like the internet. I want to see if I can poke at the outlines of - whatever is coming next. In a previous life, I was a sort of mildly - infamous online opinion gremlin, best known for being extravagantly - mean about other opinion writers whose writing or whose opinions I - didn’t like. These days, I find most of that stuff very, very dull. I - wonder if it’s possible to talk about things differently. Not - rationally or calmly, away from the cheap point-scoring of online - discourse—that would also be boring—but with a better, less sterile - kind of derangement. I’m interested in the forms of writing that were - here long before the internet, and which will be here long after it’s - gone. Not thinkpieces or blogs, but the essay, the manifesto, the - satyr, and the screed. Ludibria, pseudepigrapha, quodlibets. Or - folktales. Prophecy. Dreams. - [37]1 +[58][ ] +Subscribe +As far as I can tell, Substack mostly functions as a kind of meta-discourse for +Twitter. (At least, this is the part I’ve seen—there are also, apparently, +recipes.) Graham Linehan posts fifty times a day on this platform, and all of +it is just replying to tweets. This does not strike me as particularly +sustainable. I have no idea what kind of demented pervert is actually reading +this stuff, when you could be lying in a meadow by a glassy stream, rien faire +comme une bête, eyes melting into the sky. According to the very helpful +Substack employees I’ve spoken to, there are a set of handy best practices for +this particular region of the machine: have regular open threads, chitchat with +your subscribers, post humanising updates about your life. Form a community. +I’m told that the most successful writing on here is friendly, frequent, and +fast. Apparently, readers should know exactly what you’re getting at within the +first three sentences. I do not plan on doing any of these things. - I am very disappointed that this scene never appears in Disney’s Moana. - [38]2 +This is what I would like to do. I would like to see if, in the belly of the +dying internet, it’s possible to create something that is not like the +internet. I want to see if I can poke at the outlines of whatever is coming +next. In a previous life, I was a sort of mildly infamous online opinion +gremlin, best known for being extravagantly mean about other opinion writers +whose writing or whose opinions I didn’t like. These days, I find most of that +stuff very, very dull. I wonder if it’s possible to talk about things +differently. Not rationally or calmly, away from the cheap point-scoring of +online discourse—that would also be boring—but with a better, less sterile kind +of derangement. I’m interested in the forms of writing that were here long +before the internet, and which will be here long after it’s gone. Not +thinkpieces or blogs, but the essay, the manifesto, the satyr, and the screed. +Ludibria, pseudepigrapha, quodlibets. Or folktales. Prophecy. Dreams. - It’s the same thought that, in Marx’s 1873 postface to Capital, Volume - I, ‘includes in its positive understanding of what exists a - simultaneous recognition of its negation, its inevitable destruction.’ - Or Hegel’s famous line on the flight habits of nocturnal birds. Or - Baudrillard after the orgy, sticky and spent, announcing that the - revolution has already happened and the Messiah has already been and - gone. - [39]3 +[60]1 - As a general rule: by the time you hear about any of this stuff, by the - time it’s in general discursive circulation, whatever was motive and - real in the phenomenon has already died. Every culture warrior spends - their life raging at the light of a very distant, long-exploded star. - [40]4 +I am very disappointed that this scene never appears in Disney’s Moana. - Every few weeks, there are ads for some new band plastered over the - Tube. The acid, whipsmart voice of twenty-first century youth! Then you - listen, and they’re just ripping off the Fall again. ‘You think your - haircut is distinguished, when it’s a blot on the English landscape.’ - [41]5 +[61]2 - Chances are, though, that it won’t be remembered at all. Gregory of - Tours was a Roman aristocrat, the son of a Senator, raised on Virgil - and Sallust, but in his dense ten-volume History he never bothers to - even mention the collapse of the Western Roman Empire. The old imperial - world had ended so decisively that its passing wasn’t even considered - particularly important; the new world of barbarian kings (governing - through a system of ecclesiastical administration inherited from the - empire, and that still functioned, if haphazardly, with only the most - nominal connections to central authority in Italy or the Bosporus) had - become the only possible world order, even as the cities shrank and - Mediterranean trade vanished. Syagrius, magister militum in the Roman - rump state around Noviodunum, becomes the King of the Romans; his - imperial holdout becomes the Kingdom of Soissons. It took several - centuries for people to decide that anything particularly significant - had happened when Odoacer overthrew the teenaged Romulus Augustulus in - 476 AD. This is why the internet has not been a true revolution: - everyone online is still obsessing over how much has changed, and - fondly remembering the time before we all spent all our waking hours - staring at phones. - [42]6 +It’s the same thought that, in Marx’s 1873 postface to Capital, Volume I, +‘includes in its positive understanding of what exists a simultaneous +recognition of its negation, its inevitable destruction.’ Or Hegel’s famous +line on the flight habits of nocturnal birds. Or Baudrillard after the orgy, +sticky and spent, announcing that the revolution has already happened and the +Messiah has already been and gone. - Actually, I have two slightly overlapping theories on what might be - happening. The main one is above; the second, which is weirder and - makes less sense, has been shoved down here. Samuel Beckett describes a - version of the internet and its exhaustion, one made of small pebbles. - Here is Molloy on the beach, this limping old bird in his shabby - overcoat, rolling in the sand. ‘Much of my life has ebbed away before - this shivering expanse, to the sound of waves in storm and calm, and - the claws of the surf.’ He has sixteen stones in his pocket, and every - so often he puts one in his mouth to suck on it for a while. ‘A little - pebble in your mouth, round and smooth, appeases, soothes, makes you - forget your hunger, forget your thirst.’ The problem: how to make sure - that when he next reaches into his pocket, he doesn’t take out the - stone he’s just sucked? How to make sure he’s getting the full - enjoyment out of each of his sixteen stones? Novelty is mysteriously - important, even though ‘deep down it was all the same to me whether I - sucked a different stone each time or always the same stone, until the - end of time. For they all tasted exactly the same.’ For a while, his - coat and his trousers and his mouth are turned into a series of - machines for creating sequences of stones. Supply pockets and store - pockets, modes of circulation: curated algorithms, organising the world - and its information. Beckett spends half a dozen pages (in my edition) - describing these systems, as each of them arrives in a flash of divine - inspiration and fails in turn. Eventually, Molloy has exhausted every - possible arrangement of atoms and voids. ‘The solution to which I - rallied in the end was to throw away all the stones but one, which I - kept now in one pocket, now in another, and which of course I soon - lost, or threw away, or gave away, or swallowed. It was a wild part of - the coast.’ In The Exhausted, his grand study of Beckett, Deleuze - comments on the distinction between the exhausted and the merely tired. - ‘The tired has only exhausted realisation, while the exhausted exhausts - all of the possible.’ To exhaust the world as it is you only need to - experience it: wander through reality, and get bored. But for true - exhaustion, you need to know that everything that could be is as empty - as everything that is. To reach exhaustion, you need some kind of - device, made of ‘tables and programmes,’ a technics. Something like - Molloy’s overcoat. ‘The combinatorial is the art or science of - exhausting the possible, through inclusive disjunctions.’ The ars - combinatoria is also the system of formal logic, revealed in holy - visions to Ramon Llull in his cave on Puig de Ronda in 1274, eventually - refined by Gottfried Leibniz, that powers the device you’re using to - read this now. Exhaustion is the mode of life integral to a - computerised society; the internet comes to us already long worn out, - combining and recombining stale elements, shambling through the dead - zones of itself. - [43]7 +[62]3 - You could compare this process to Marx’s law of the tendency of the - rate of profit to fall: as each individual actor, follows its - incentives and inflates the organic composition, the entire system ends - up stumbling into crisis. - [44]8 +As a general rule: by the time you hear about any of this stuff, by the time +it’s in general discursive circulation, whatever was motive and real in the +phenomenon has already died. Every culture warrior spends their life raging at +the light of a very distant, long-exploded star. - People claim to be deeply worried by this stuff, but I think you - secretly like it. You like the idea that your attention is what creates - the world. You like the idea that the entire global economy is - predicated on getting to know you, finding out what you like and - dislike, your taste in music and your frankly insane political opinions - and the gooey little treats you buy. Global capitalism as one vast - Buzzfeed personality quiz. The faceless empire of yourself. - [45]9 +[63]4 - One of the largest shareholders in Twitter is the Kingdom Holding - Company, chaired by Prince al-Waleed bin Talal bin Abdulaziz al-Saud. - For some reason, people seemed to think that replacing him with Elon - Musk would shift the tenor of the site to the right. - [46]10 +Every few weeks, there are ads for some new band plastered over the Tube. The +acid, whipsmart voice of twenty-first century youth! Then you listen, and +they’re just ripping off the Fall again. ‘You think your haircut is +distinguished, when it’s a blot on the English landscape.’ - When I was younger, my brother and I had a running joke about a lemon - that could connect to the internet. Not for any particular reason: a - light would blink just below the lemon’s skin, and it would do nothing, - just slowly rot in your fruitbowl. A few years ago, that lemon would - have immediately secured half a billion dollars in first-round funding. - Now, not so much. - [47]11 +[64]5 - The ‘cancelled’ always participate in the theatre of their own - cancellation. In Greco-Roman sacrifices, the animal was expected to nod - before being led to the altar; the victim had to consent to its - slaughter. And that nod always happened, even if a priest had to induce - it by pouring a vase of water over the animal’s head. - Share - Next - Top - New +Chances are, though, that it won’t be remembered at all. Gregory of Tours was a +Roman aristocrat, the son of a Senator, raised on Virgil and Sallust, but in +his dense ten-volume History he never bothers to even mention the collapse of +the Western Roman Empire. The old imperial world had ended so decisively that +its passing wasn’t even considered particularly important; the new world of +barbarian kings (governing through a system of ecclesiastical administration +inherited from the empire, and that still functioned, if haphazardly, with only +the most nominal connections to central authority in Italy or the Bosporus) had +become the only possible world order, even as the cities shrank and +Mediterranean trade vanished. Syagrius, magister militum in the Roman rump +state around Noviodunum, becomes the King of the Romans; his imperial holdout +becomes the Kingdom of Soissons. It took several centuries for people to decide +that anything particularly significant had happened when Odoacer overthrew the +teenaged Romulus Augustulus in 476 AD. This is why the internet has not been a +true revolution: everyone online is still obsessing over how much has changed, +and fondly remembering the time before we all spent all our waking hours +staring at phones. - No posts +[65]6 - Ready for more? - ____________________ - (BUTTON) Subscribe +Actually, I have two slightly overlapping theories on what might be happening. +The main one is above; the second, which is weirder and makes less sense, has +been shoved down here. Samuel Beckett describes a version of the internet and +its exhaustion, one made of small pebbles. Here is Molloy on the beach, this +limping old bird in his shabby overcoat, rolling in the sand. ‘Much of my life +has ebbed away before this shivering expanse, to the sound of waves in storm +and calm, and the claws of the surf.’ He has sixteen stones in his pocket, and +every so often he puts one in his mouth to suck on it for a while. ‘A little +pebble in your mouth, round and smooth, appeases, soothes, makes you forget +your hunger, forget your thirst.’ The problem: how to make sure that when he +next reaches into his pocket, he doesn’t take out the stone he’s just sucked? +How to make sure he’s getting the full enjoyment out of each of his sixteen +stones? Novelty is mysteriously important, even though ‘deep down it was all +the same to me whether I sucked a different stone each time or always the same +stone, until the end of time. For they all tasted exactly the same.’ For a +while, his coat and his trousers and his mouth are turned into a series of +machines for creating sequences of stones. Supply pockets and store pockets, +modes of circulation: curated algorithms, organising the world and its +information. Beckett spends half a dozen pages (in my edition) describing these +systems, as each of them arrives in a flash of divine inspiration and fails in +turn. Eventually, Molloy has exhausted every possible arrangement of atoms and +voids. ‘The solution to which I rallied in the end was to throw away all the +stones but one, which I kept now in one pocket, now in another, and which of +course I soon lost, or threw away, or gave away, or swallowed. It was a wild +part of the coast.’ In The Exhausted, his grand study of Beckett, Deleuze +comments on the distinction between the exhausted and the merely tired. ‘The +tired has only exhausted realisation, while the exhausted exhausts all of the +possible.’ To exhaust the world as it is you only need to experience it: wander +through reality, and get bored. But for true exhaustion, you need to know that +everything that could be is as empty as everything that is. To reach +exhaustion, you need some kind of device, made of ‘tables and programmes,’ a +technics. Something like Molloy’s overcoat. ‘The combinatorial is the art or +science of exhausting the possible, through inclusive disjunctions.’ The ars +combinatoria is also the system of formal logic, revealed in holy visions to +Ramon Llull in his cave on Puig de Ronda in 1274, eventually refined by +Gottfried Leibniz, that powers the device you’re using to read this now. +Exhaustion is the mode of life integral to a computerised society; the internet +comes to us already long worn out, combining and recombining stale elements, +shambling through the dead zones of itself. - © 2024 Sam Kriss - [48]Privacy ∙ [49]Terms ∙ [50]Collection notice - Start Writing[51]Get the app - [52]Substack is the home for great writing +[66]7 - This site requires JavaScript to run correctly. Please [53]turn on - JavaScript or unblock scripts +You could compare this process to Marx’s law of the tendency of the rate of +profit to fall: as each individual actor, follows its incentives and inflates +the organic composition, the entire system ends up stumbling into crisis. -References +[67]8 - Visible links: - 1. https://samkriss.substack.com/feed - 2. https://samkriss.substack.com/ - 3. https://samkriss.substack.com/ - 4. https://substack.com/@samkriss - 5. https://www.thecut.com/2022/02/a-vibe-shift-is-coming.html - 6. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-1-71503638 - 7. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-2-71503638 - 8. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-3-71503638 - 9. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-4-71503638 - 10. https://damagemag.com/2022/04/21/the-internet-is-made-of-demons/ - 11. https://onlyfans.com/ - 12. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-5-71503638 - 13. https://www.theguardian.com/media/2022/aug/21/its-a-modern-day-facebook-how-bereal-became-gen-zs-favourite-app - 14. https://www.rivaliq.com/blog/social-engagement-benchmark-trends-2020/ - 15. https://www.vox.com/recode/2022/2/2/22915110/facebook-meta-user-growth-decline-first-time-metaverse-mark-zuckerberg-tiktok-competition-earnings - 16. https://www.digitalinformationworld.com/2022/03/this-new-report-reveals-surprising.html - 17. https://www.insiderintelligence.com/content/time-spent-tiktok-decline - 18. https://forum.agoraroad.com/index.php?threads/dead-internet-theory-most-of-the-internet-is-fake.3011/ - 19. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-6-71503638 - 20. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-7-71503638 - 21. https://www.theatlantic.com/ideas/archive/2019/10/say-goodbye-millennial-urban-lifestyle/599839/ - 22. https://data.worldbank.org/indicator/NV.IND.MANF.ZS - 23. https://www.bloomberg.com/news/articles/2021-08-01/trillions-of-negative-yielding-debt-redeem-europe-s-bond-bulls - 24. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-8-71503638 - 25. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-9-71503638 - 26. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-10-71503638 - 27. https://www.bloomberg.com/news/articles/2022-05-12/softbank-vision-fund-posts-a-record-loss-as-son-s-bets-fail - 28. https://www.idler.co.uk/article/adam-curtis-social-media-is-a-scam/ - 29. https://marketinginsidergroup.com/marketing-strategy/digital-ads-dont-work-and-everyone-knows-it/ - 30. https://pubsonline.informs.org/doi/pdf/10.1287/mksc.2019.1188 - 31. https://www.lrb.co.uk/the-paper/v44/n09/donald-mackenzie/blink-bid-buy - 32. https://www.theatlantic.com/magazine/archive/2022/05/social-media-democracy-trust-babel/629369/ - 33. https://thehill.com/opinion/white-house/3632191-the-dark-brandon-rises/ - 34. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-11-71503638 - 35. https://samkriss.com/2020/06/10/white-skin-black-squares/ - 36. https://www.vanityfair.com/news/2022/04/inside-the-new-right-where-peter-thiel-is-placing-his-biggest-bets - 37. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-1-71503638 - 38. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-2-71503638 - 39. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-3-71503638 - 40. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-4-71503638 - 41. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-5-71503638 - 42. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-6-71503638 - 43. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-7-71503638 - 44. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-8-71503638 - 45. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-9-71503638 - 46. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-10-71503638 - 47. https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-11-71503638 - 48. https://substack.com/privacy - 49. https://substack.com/tos - 50. https://substack.com/ccpa#personal-data-collected - 51. https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button - 52. https://substack.com/ - 53. https://enable-javascript.com/ +People claim to be deeply worried by this stuff, but I think you secretly like +it. You like the idea that your attention is what creates the world. You like +the idea that the entire global economy is predicated on getting to know you, +finding out what you like and dislike, your taste in music and your frankly +insane political opinions and the gooey little treats you buy. Global +capitalism as one vast Buzzfeed personality quiz. The faceless empire of +yourself. - Hidden links: - 55. https://substack.com/profile/14289667-sam-kriss - 56. javascript:void(0) - 57. https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F19221e8d-a9aa-4143-b9a6-1e6f951faa44_1368x1156.png - 58. https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51b61a9-059d-45ed-8104-eaa81b678cd5_1536x1099.jpeg - 59. https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3debefc-91c1-4a45-8509-fa16b752a687_1100x781.jpeg - 60. javascript:void(0) - 61. https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer +[68]9 + +One of the largest shareholders in Twitter is the Kingdom Holding Company, +chaired by Prince al-Waleed bin Talal bin Abdulaziz al-Saud. For some reason, +people seemed to think that replacing him with Elon Musk would shift the tenor +of the site to the right. + +[69]10 + +When I was younger, my brother and I had a running joke about a lemon that +could connect to the internet. Not for any particular reason: a light would +blink just below the lemon’s skin, and it would do nothing, just slowly rot in +your fruitbowl. A few years ago, that lemon would have immediately secured half +a billion dollars in first-round funding. Now, not so much. + +[70]11 + +The ‘cancelled’ always participate in the theatre of their own cancellation. In +Greco-Roman sacrifices, the animal was expected to nod before being led to the +altar; the victim had to consent to its slaughter. And that nod always +happened, even if a priest had to induce it by pouring a vase of water over the +animal’s head. + +[71] +Share +Next +Top +New + +No posts + +Ready for more? + +[80][ ] +Subscribe +© 2024 Sam Kriss +[82]Privacy ∙ [83]Terms ∙ [84]Collection notice +[85] Start Writing[86]Get the app +[87]Substack is the home for great writing +This site requires JavaScript to run correctly. Please [88]turn on JavaScript +or unblock scripts + +References: + +[1] https://samkriss.substack.com/ +[2] https://samkriss.substack.com/ +[12] https://substack.com/profile/14289667-sam-kriss +[13] https://substack.com/@samkriss +[14] javascript:void(0) +[15] https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F19221e8d-a9aa-4143-b9a6-1e6f951faa44_1368x1156.png +[16] https://www.thecut.com/2022/02/a-vibe-shift-is-coming.html +[17] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-1-71503638 +[18] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-2-71503638 +[19] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-3-71503638 +[20] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-4-71503638 +[21] https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51b61a9-059d-45ed-8104-eaa81b678cd5_1536x1099.jpeg +[22] https://damagemag.com/2022/04/21/the-internet-is-made-of-demons/ +[23] https://onlyfans.com/ +[24] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-5-71503638 +[25] https://www.theguardian.com/media/2022/aug/21/its-a-modern-day-facebook-how-bereal-became-gen-zs-favourite-app +[26] https://www.rivaliq.com/blog/social-engagement-benchmark-trends-2020/ +[27] https://www.vox.com/recode/2022/2/2/22915110/facebook-meta-user-growth-decline-first-time-metaverse-mark-zuckerberg-tiktok-competition-earnings +[28] https://www.digitalinformationworld.com/2022/03/this-new-report-reveals-surprising.html +[29] https://www.insiderintelligence.com/content/time-spent-tiktok-decline +[30] https://forum.agoraroad.com/index.php?threads/dead-internet-theory-most-of-the-internet-is-fake.3011/ +[31] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-6-71503638 +[32] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-7-71503638 +[33] https://www.theatlantic.com/ideas/archive/2019/10/say-goodbye-millennial-urban-lifestyle/599839/ +[34] https://data.worldbank.org/indicator/NV.IND.MANF.ZS +[35] https://www.bloomberg.com/news/articles/2021-08-01/trillions-of-negative-yielding-debt-redeem-europe-s-bond-bulls +[36] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-8-71503638 +[37] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-9-71503638 +[38] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-10-71503638 +[39] https://www.bloomberg.com/news/articles/2022-05-12/softbank-vision-fund-posts-a-record-loss-as-son-s-bets-fail +[40] https://www.idler.co.uk/article/adam-curtis-social-media-is-a-scam/ +[41] https://marketinginsidergroup.com/marketing-strategy/digital-ads-dont-work-and-everyone-knows-it/ +[42] https://pubsonline.informs.org/doi/pdf/10.1287/mksc.2019.1188 +[43] https://www.lrb.co.uk/the-paper/v44/n09/donald-mackenzie/blink-bid-buy +[44] https://www.theatlantic.com/magazine/archive/2022/05/social-media-democracy-trust-babel/629369/ +[45] https://thehill.com/opinion/white-house/3632191-the-dark-brandon-rises/ +[46] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-11-71503638 +[47] https://samkriss.com/2020/06/10/white-skin-black-squares/ +[48] https://www.vanityfair.com/news/2022/04/inside-the-new-right-where-peter-thiel-is-placing-his-biggest-bets +[49] https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3debefc-91c1-4a45-8509-fa16b752a687_1100x781.jpeg +[60] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-1-71503638 +[61] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-2-71503638 +[62] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-3-71503638 +[63] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-4-71503638 +[64] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-5-71503638 +[65] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-6-71503638 +[66] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-7-71503638 +[67] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-8-71503638 +[68] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-9-71503638 +[69] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-10-71503638 +[70] https://samkriss.substack.com/p/the-internet-is-already-over#footnote-anchor-11-71503638 +[71] javascript:void(0) +[82] https://substack.com/privacy +[83] https://substack.com/tos +[84] https://substack.com/ccpa#personal-data-collected +[85] https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer +[86] https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button +[87] https://substack.com/ +[88] https://enable-javascript.com/ diff --git a/static/archive/sive-rs-ssi9lg.txt b/static/archive/sive-rs-ssi9lg.txt index fffaa2b..6981fc6 100644 --- a/static/archive/sive-rs-ssi9lg.txt +++ b/static/archive/sive-rs-ssi9lg.txt @@ -1,703 +1,677 @@ - #[1]alternate +[1]Derek Sivers - [2]Derek Sivers - - Tech Independence +Tech Independence Contents: - 0. [3]What? - 1. [4]Register a domain - 2. [5]Change DNS nameservers - 3. [6]Create storage - 4. [7]Create an SSH key - 5. [8]Create your server - 6. [9]SSH into root - 7. [10]Customize these instructions - 8. [11]Use your storage - 9. [12]Contacts and Calendar - 10. [13]Email sending - 11. [14]Email settings - 12. [15]Simple website - 13. [16]File sharing in /pub/ - 14. [17]More indie tips - 15. [18]More storage? - 16. [19]Mutt = email in terminal - 17. [20]Upkeep - 18. [21]Certificate expired? - 19. [22]Trouble? Start over - 20. [23]Questions? Additions? - __________________________________________________________________ + 0. [2]What? + 1. [3]Register a domain + 2. [4]Change DNS nameservers + 3. [5]Create storage + 4. [6]Create an SSH key + 5. [7]Create your server + 6. [8]SSH into root + 7. [9]Customize these instructions + 8. [10]Use your storage + 9. [11]Contacts and Calendar +10. [12]Email sending +11. [13]Email settings +12. [14]Simple website +13. [15]File sharing in /pub/ +14. [16]More indie tips +15. [17]More storage? +16. [18]Mutt = email in terminal +17. [19]Upkeep +18. [20]Certificate expired? +19. [21]Trouble? Start over +20. [22]Questions? Additions? + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ What? - Tech independence is not depending on any particular company or - software. - - The only tools you need are the common open source basics built into - any Linux or BSD operating system — free public-domain tools that are - not owned by anyone, and can run on any computer. - - Learn a few of these basic tools, and you can run your own private - server on any computer forever, for the rest of your life. Host your - own website and email. Keep your own contacts and calendars synced with - your phone. Back up and sync your photos, movies, and music to your own - private storage. No more subscriptions needed. - - You can ignore all the companies offering “solutions”, even if they are - free, because they take away self-reliance. The point is to know how to - do it yourself, not to have somebody do it for you. It’s worth a little - up-front work, like learning how to drive. - - Below are simple step-by-step instructions that work. Instead of - drowning you in options, it uses an operating system called [24]OpenBSD - and a hosting company called [25]Vultr because I’ve used them for years - and I know they are good and trustworthy. But you could do this same - setup with any free Linux or BSD operating system, with any hosting - company that gives you “root” access to your own private server. You - could even do it on an old laptop in your closet. - - So if a company turns evil or goes out of business, no problem! You can - set up a new server anywhere else in an hour, point your domain name to - the new IP address, and it’s done. That’s tech independence — never - dependent on any particular provider or software. It’s very empowering. - The instructions below will show you how. - - Register a domain - - 1. Go to [26]Porkbun.com. - 2. Search for a domain name you like until you find one that’s - available. - 3. Create a new account, and pay. - 4. Congratulations. You’ll use this domain name in many of the steps - below. - - Change DNS nameservers to vultr - - 1. Wherever you registered your domain name, log in there to change - your domain’s DNS nameservers. - 2. It’s usually set by default to the company where you registered. So - for example a domain registered at GoDaddy will have default - nameservers of something.godaddy.com. - 3. Replace those defaults with these two: - + ns1.vultr.com - + ns2.vultr.com - - Create storage - - 1. Go to [27]Vultr.com. - 2. Create an account and give it your credit card. - 3. [28]Click here for the “[29]Add Block Storage” page. - 4. Click “Block Storage (HDD)”, which says “Globally Available” - 5. Below that, a list of cities. Click the one closest to you. - 6. Below that, a slider lets you choose how much storage you need. If - not sure, just leave it as $1 for 40 GB. - 7. Below that, in a subtle box that says “label” type the word - encrypted. - 8. Below that, click the “Add Block Storage” button. - - Create an SSH key - - 1. Open a terminal. - + Windows? Start → Windows PowerShell → Windows PowerShell - + Mac? Applications → Utilities → Terminal - 2. Type ssh-keygen -t ed25519 and hit [enter] or [return]. - 3. When it says, “Enter file in which to save the key - (/Users/yourname/.ssh/id_ed25519):”, hit [enter] or [return]. - 4. When it says, “Enter passphrase (empty for no passphrase):”, hit - [enter] or [return]. - 5. When it says, “Enter same passphrase again:”, hit [enter] or - [return]. - 6. See the line that starts, “Your public key has been saved in” and - ends in “id_ed25519.pub”? That’s the file you need for the next - step. - 7. In a text editor, open “id_ed25519.pub”. - + Windows? Type notepad .ssh/id_ed25519.pub - + Mac? Type open -e .ssh/id_ed25519.pub - 8. It should be a single line like this: - ssh-ed25519 AAAAC3Nz5AAAAIPIXO5icj4LUpqa2baqYQRmCZ1+NV4sBDr you@com - puter - 9. You’ll use this in the next step: “[30]Create your server”. - - Create your server - - 1. In your [31]Vultr.com account: - 2. [32]Click here for the “[33]Deploy New Instance” page. - 3. Click “Cloud Compute” (NOT “Optimized Cloud Compute”) - 4. Below that, click “Intel Regular Performance” - 5. Below that, IMPORTANT: click the same city you chose for your - encrypted storage in the previous step. - 6. Below that, click “OpenBSD” (the yellow blowfish) then inside its - box, click “7.4 x64” - 7. Below that, under Server Size, click “25 GB SSD $5/month” - 8. A blue pop-up appears underneath, up-selling “For only $1.00 more - you can...”. Click “No thanks”. - 9. Scroll down to “SSH Keys”, click “Add New”, then under “Name” type - mykey. - 10. From [34]the previous section, step 3, copy (⌘-C or Ctrl-C) the - contents of “id_ed25519.pub” and paste it into this box called “SSH - Key”. It should be a single line like this: - ssh-ed25519 AAAAC3NzaC1XO5iclCcrHbGRPoj4LUpqa2baqYQRmCZ1+NV4sBDr - you@computer - 11. After pasting it into the box, click [Add SSH Key]. - 12. Under SSH Keys, click the box with the picture of the key called - “mykey” to give it a tick mark in the top-right corner. - 13. Scroll up to “Enable Auto Backups”, click the “on” toggle button to - turn it OFF. - 14. A scary pop-up says “Are you sure....”. Tick the box next to “I - understand the risks”, then click the red button “Disable Auto - Backups”. - 15. Under “Additional Features”, untick the box next to “Enable IPv6”, - to disable it. - 16. Under “Server Hostname & Label”, type your domain name in both - “server hostname” and “server label”. - 17. At the bottom, click the big blue button [“Deploy Now”]. - 18. Stretch your legs for a minute while waiting for your server status - to change from “Installing” to “Running”. - 19. Copy and save its IP Address on your computer. - - SSH into root, and get my script - - 1. Copy (⌘-C or Ctrl-C) the IP Address from the last step of - [35]Create Your Server. - 2. Open your terminal from the [36]Create an SSH key section. - 3. Whenever I say to type something into the terminal, hit your - [return] or [enter] key afterwards. - 4. Type into the terminal: ssh root@YOUR-IP-ADDRESS. So for example: - ssh root@123.45.67.89 - 5. It should say something like: -The authenticity of host '123.45.67.78 (123.45.67.89)' can’t be established. -ED25519 key fingerprint is SHA256:OyiqVsjRX8U2f0UTUY4D0erdl6855YNRXyQk2D. -This key is not known by any other names -Are you sure you want to continue connecting (yes/no/[fingerprint])? - 6. Type yes - 7. It should say something like: -Warning: Permanently added '123.45.67.89' (ED25519) to the list of known hosts. -OpenBSD 7.4 (GENERIC.MP) #1396: Sun Oct 8 09:20:40 MDT 2023 -Welcome to OpenBSD: The proactively secure Unix-like operating system. - 8. Congratulations! You’re inside a remote computer! - 9. Type ftp https://sive.rs/ti.sh - 10. Type sh ti.sh - 11. Watch it install, answer its questions, and do what it says. - 12. Be ready to open a new terminal window, so you can leave this one - logged-in. - 13. See below for help with its prompts. - - Customize these instructions - - Enter your domain name and the username that you create, below, and - this will customize all following instructions for you. - Your domain name? ____________________ Your username? - ____________________ customize - - Now when you see this button: (BUTTON) 📋 click it to copy that line so - you can paste it into your terminal, without error. - - Use your encrypted storage - - The [37]ti.sh script will eventually prompt you, “Now upload anything - while I wait...”. Here’s how. - - Mac - - Type rsync -avz Documents yourusername@yourdomain.name:/mnt/ and you - will see it uploading your Documents folder to your private encrypted - storage. Use this same format to upload any other folders, replacing - “Documents” in the command. If you are happy synchronizing on the - command line like this, you can skip over the next FreeFileSync - section. - - [38]FreeFileSync - - Everyone using Windows should use [39]FreeFileSync. Here’s how: - 1. [40]Download FreeFileSync and please give an optional donation - there if you can afford to. Donating also unlocks more features. - Thanks to Jon Lis for the recommendation. - 2. Install and open FreeFileSync. - 3. Top-center: click the grey [Browse] button and find the folder with - the stuff you want to upload. - 4. Top-far-right: click the white cloud icon then SFTP at the top. - 5. Server name or IP address: yourdomain.name - 6. Left side: click (*) Key File - 7. Username: yourusername - 8. Browse to find your private key, called id_ed25519 from the - “[41]Create an SSH key” section. (Not the file that ends in “.pub”, - but the one next to it.) NOTE: Because the /Users/yourusername/.ssh - directory is “hidden” by Windows and Mac by default, I find it - easier to just type the path directly, like this: - + The username, for this next line, should be your username on - your home computer, not your remote server. - + Windows? Type (BUTTON) 📋C:\Users\yourusername\.ssh\id_ed25519 - + Mac? Type (BUTTON) 📋/Users/yourusername/.ssh/id_ed25519 - 9. Directory on server: /mnt - 10. Click OK to go back to the main screen. - 11. Top-right: click the green gear wheel. - 12. Left button: click “MIRROR →” - 13. Click OK to go back to the main screen. - 14. Top-center: click “COMPARE”, and make sure your files are there. - 15. Top-right: click “SYNCHRONIZE Mirror →” then [Start] - - Verify and unmount - - 1. When it’s done uploading, log in to your server again, from your - terminal. - 2. Type find /mnt - 3. You should see a long list of the files you uploaded. - 4. Type m-x to detach your encrypted storage. - 5. Type find /mnt again, and now you should see nothing there! - Congratulations! You now see how this will work in the future: - 1. Log in and type “m” to attach your encrypted storage. - 2. Upload your files with rsync or FreeFileSync. - 3. Log in and type “m-x” to detach the storage, for security. - - Contacts and Calendar - - Your phone currently keeps its contacts and calendars with Google or - Apple. Now you can get them off the cloud and keep them privately on - your own server. - - My [42]ti.sh setup script installs a [43]CardDAV server for contacts, - and [44]CalDAV server for calendars. - - Here’s how to connect your phone. - - Android phone - - You need an app called “[45]DAVx⁵”, so [46]install it first. Then… - 1. Open the DAVx⁵ app - 2. Click the orange (+) in the bottom-right - 3. Click (·) “Login with URL and user name” - 4. Base URL: https://dav.yourdomain.name/ - 5. User name: yourusername - 6. Password: the “easy to type on your phone” password you made - 7. Click “LOGIN” in the bottom-right corner. - 8. It should work and bring you to the “Create account” page, where - “Account name” will be yourusername. Leave everything as-is and - click “CREATE ACCOUNT” in the bottom-right corner. - 9. It brings you to the “CARDDAV” header. Tick the toggle to turn on - next to your domain name. - 10. Click the ♻ arrows in the bottom-right corner to synchronize your - contacts. - 11. Click the “CALDAV” header up top. Tick the toggle to turn on next - to your domain name. - 12. Click the ♻ arrows in the bottom-right corner to synchronize your - calendar. - 13. Go to your Calendar app, and in the top-right corner, click the - round icon there. (Might be your face or a letter.) Then change it - to the one with yourusername. After changing it, click the X in the - top-left corner. - 14. To add a new Event, Click [+] in the bottom-right corner, and - choose “Event” from the popup menu. - 15. There might be a warning, “Switch to a Google Account to take - advantage blah blah…”. Click “dismiss”. - 16. Title this event something like “Test Delete”, and notice it should - be saving to the calendar with your domain name and username. Click - (Save) in the top-right corner. - 17. Check the terminal window where it should say “Calendar entry - added!” - 18. Go to your Contacts app, and in the bottom-right corner, click “Fix - & manage”. - 19. Click “Settings” - 20. Near the bottom, click “Default account for new contacts”, and - change it to the DAVx⁵ Address book with your domain name. - 21. Click “< Settings” in the top-left corner. - 22. In the top-right corner, click the round icon there. (Might be your - face or a letter.) Then change it to the DAVx⁵ Address book with - your domain name. Then click X in the top-left corner. - 23. Click “Contacts” in the bottom-left corner. It should say “No - contacts in this account”. - 24. Click + in the bottom-right corner to Create contact. Top of the - next page should say “Save to” then your domain name. - 25. Add a New Contact with a name like “Test Delete”. Then click “Save” - in the top-right corner. - 26. Check the terminal window where it should say “Contact added! Both - work. Congratulations.” - - Apple iPhone - - 1. Settings → Contacts → Accounts → Add Account → Other → (under - “CONTACTS”:) Add CardDAV Account - 2. Server: dav.yourdomain.name - 3. User Name: yourusername - 4. Password: the “easy to type on your phone” password you made - 5. Click “next” in the top right corner, and it should bring you to - your “Accounts” page, where you see it listed, saying “Contacts” - underneath. - 6. Click Add Account → Other → (under “CALENDARS”:) Add CalDAV Account - 7. Server: dav.yourdomain.name - 8. User Name: yourusername - 9. Password: the “easy to type on your phone” password you made - 10. Click “next” in the top right corner, and it should bring you to a - “CalDAV” page, showing Calendars and Reminders. Un-tick Reminders. - 11. Click “save” in the top right corner, and it should bring you to - your “Accounts” page, where you see it listed, saying “Calendars” - underneath. - 12. Click “< Contacts” in the top-left corner, to go back to settings - for your Contacts app. - 13. At the bottom change Default Account to the one with - yourdomain.name. - 14. Click “< Contacts” then “< Settings”, both in the top-left corner, - then scroll down to Calendar settings and click it. - 15. In Calendar settings, 2nd from the bottom should say “Default - Calendar”. Tap to change it to the one with yourdomain.name. - 16. Go to your Calendar app and click the + in the top-right corner. - 17. Add a New Event with a Title like “Test Delete”. Then click “Add” - in the top-right corner. - 18. Check the terminal window where it should say “Calendar entry - added!” - 19. Go to your Contacts app and click the + in the top-right corner. - 20. Add a New Contact with a name like “Test Delete”. Then click “Done” - in the top-right corner. - 21. Check the terminal window where it should say “Contact added! Both - work. Congratulations.” - - Email sending - - 1. Go to [47]Mailjet.com and sign up for their free account. - 2. Go to [48]this page for API keys and [Generate secret key] - 3. Give the [49]ti.sh script your API key and Secret key, and it will - do the rest. - - Email settings - - To do email from your phone, computer, or anywhere else, you now have - an [50]IMAP server, called [51]Dovecot. So on any device, you can add a - new IMAP Mail account, with these settings: - * Account type: IMAP - * Email address: yourusername@yourdomain.name - * Username: yourusername - * Password: the password you made for your username on your server - * Incoming mail server: yourdomain.name - * Outgoing mail server: yourdomain.name - * Connection security: SSL - * Authentication type: Basic authentication - - Simple website - - 1. On your home computer, in your main home directory, make a - directory/folder called “htdocs” - 2. [52]Download this file called “template.html” and save it in your - “htdocs” directory. - 3. [53]Download this file called “style.css” and also save it in your - “htdocs” directory. - 4. Make a copy of the “template.html” file, and name the copy - “index.html”. This will be your home page. - 5. Edit the index.html file in a text editor (NotePad or TextEdit) and - change my default text to whatever you want. - 6. When you need to add a new page, just copy the template again, call - it “about.html” or whatever, and make a link to it from the home - page. The header of each page will link back to index.html : your - home page. - 7. If you want to change the look of your site, just edit the - style.css file. [54]Search the web for “CSS tutorial” if needed. - 8. To upload it to your public server, do one of the next two steps: - 9. Apple Mac? Open a new terminal window on your computer, type - rsync -avz htdocs yourusername@yourdomain.name:/var/www/ - 10. Windows? [55]FreeFileSync again, but now change the “Directory on - server” to /var/www/ (you can find it by clicking [browse] or - typing it directly) then upload this htdocs directory there. - 11. Go to https://yourdomain.name in your web browser, refresh the - page, and you should see your updated website. - 12. Any trouble, just know that the goal is to get that index.html file - into this location on your server: /var/www/htdocs/index.html - because that’s where the web server is expecting it to be. That’s - where we put the original test file, so your new index.html file - should replace that one. - 13. If you want [56]short URLs, without the .html, you can (for - everything except index.html) because I set the default type to be - HTML. Just remove the “.html” from your HTML filenames, update your - links, and voilà! - - It’s important to know how to make a simple website by hand, and not - let people sell you on complex solutions that are the equivalent of - saying you need a jumbo jet when you really need a bicycle. For real - tech independence, start by typing your HTML files yourself. Only - later, after you have many many pages, consider a more complicated - solution. - - File sharing in /pub/ - - Your website is configured to list all files in the /pub/ directory of - your website. So basically anything in /var/www/htdocs/pub/ is public. - Upload any files you want to share. - - It replaces Dropbox and similar services for sending big files. Just - upload the file to /var/www/htdocs/pub/ then find it in your web - browser, copy its URL, and send someone the URL. - - If the files you want to share are already on your computer, then just - make a pub/ directory inside htdocs/ (so, htdocs/pub/), put your files - in there, then use FreeFileSync or rsync to upload them as you did in - the previous section called “[57]Simple website”. Consider them part of - your website. - - Or if you have a URL from somewhere else online that you want to - download to your server, just do it as we did in the numbered steps - above. Then use FreeFileSync or rsync to download from your server to - your computer first, before your next upload sync. - - More indie tips - - 1. Use [58]Firefox. - 2. Install [59]uBlock Origin in Firefox and Chrome. - 3. In Firefox settings, under “Privacy and Security”, choose “[X] - Delete cookies and site data when Firefox is closed”, then close - Firefox often to erase all your cookies and logins. Browse the web - anonymously, not logged-in. - 4. Replace Google Authenticator with [60]Aegis on Android or [61]Raivo - on iPhone. - 5. If you use Windows, replace it with [62]Ubuntu Linux. (Use both at - first, then slowly transition.) - 6. Keep your new email address as a [63]private email account that you - only give to those few people who you really want to hear from. - Then your old gmail/yahoo/outlook/etc address can be just - low-priority junk, and your new private email account won’t need - spam protection. - 7. Or if you don’t want to run your own email server, use - [64]Mailbox.org or [65]Fastmail but only by using your own domain - name. Be yourusername@yourdomain.name from now on. Don’t depend on - anyone else’s domain for your email or you’ll be stuck with them. - - More storage? - - If you need hundreds of gigabytes, or even terabytes of storage, I - recommend Hetzner’s “[66]Storage Box”. It’s the best storage value I’ve - found. Also consider [67]Backblaze Personal Backup. - - I personally use Vultr’s storage (as described above) for sensitive - information I definitely want completely encrypted. Then I use - Hetzner’s Storage Box for all my photos, videos, music, and other big - files that don’t absolutely need to be encrypted. - - Mutt = email in the terminal - - Unless you want to read email directly on your server, skip this step. - 1. ssh in to your server, then type mutt - 2. You should see the subject headers, with the first email - highlighted. Type j and k a few times to go down and up the list of - emails. - 3. To read an email, hit [enter] or [return] when it is highlighted. - 4. To go back to the list, type i (for “index”) - 5. To reply, hit r then: - + It shows “To:” so you can edit or add recipients. Hit [enter] - or [return] to leave it. - + It shows “Subject:” so you can edit the subject. Hit [enter] - or [return] to leave it. - + It asks “Include message in reply? ([yes]/no/?):”. Hit [enter] - or [return] for the usual norm of echoing someone’s email back - at them below your reply. Or n for not. - + Now you are inside the [68]vi text editor which is not - self-explanatory, so I’ll walk you through a simple reply: - + Hit i (no [return] or [enter]) to go into “insert mode” and - type your message. You’ll notice it’s on the same line as some - other text, so you might want to start by hitting [return] or - [enter] a few times, then up-arrow to go back to the first - line again. - + When done typing your message, hit your [esc] key in the very - top-left corner of your keyboard. Nothing will change on the - screen, yet. - + Type :wq (the “:” at the beginning is important) then [enter] - or [return]. - + Then you’ll see the “Compose Menu” which I think of as the - “last chance before sending” screen. Hit y to send it. - 6. To send a new email, hit m then repeat those steps like you did for - a reply, except now the “To:” and “Subject:” are blank and waiting - for you to create. (For “To:”, type the email address of the person - you’re emailing.) - 7. To quit, hit q - - [69]Mutt is a great program for reading and sending email on the - command line. It’s been my email client for 20 years. [70]Read its - manual here if you want to go deeper. It does everything. - - The [71]vi text editor is a useful tool to edit text on a server. It - takes a few minutes to learn, but it’s worth learning because it’s - installed by default on every Linux/BSD server. - - Upkeep - - You honestly don’t have to do anything to maintain your server. It will - just work as-is for decades! But if you like to keep it up-to-date, it - only takes a minute, so run these next steps any time. - 1. Log in to your server, if you are not already. - 2. Type (BUTTON) 📋doas su - 3. Type (BUTTON) 📋syspatch - 4. Type (BUTTON) 📋fw_update - 5. Type (BUTTON) 📋pkg_add -u - 6. Type (BUTTON) 📋sysupgrade - 7. Type exit; exit to log out. - - If that last “sysupgrade” step did not give an “Error retrieving … 404 - Not Found” error, that means your OpenBSD operating system is upgrading - itself. They release an upgrade every 6 months. In that case, [72]go to - this OpenBSD page and follow the link at the top that says “Upgrading - to (7.4, etc)” to see if there’s anything else you should know. - - If the “sysupgrade” step updated your operating system and your server - rebooted, then there is just one more step: - 1. Log in to your server, if you are not already. - 2. Type (BUTTON) 📋doas su - 3. Type (BUTTON) 📋sysmerge - 4. Follow any instructions. Don’t worry about messing up because you - can always start over, as described below. - 5. Re-do the syspatch ; fw_update ; pkg_add -u steps, above. - 6. Type exit; exit to log out. - - Secure certificate expired? - - 1. Log in to your server, if you are not already. - 2. Type (BUTTON) 📋doas su - 3. Type (BUTTON) 📋domain=yourdomain.name - 4. Type (BUTTON) 📋acme-client -v $domain - 5. Type (BUTTON) 📋rcctl restart relayd - 6. That should fix it. Confirm it in your web browser. [73]Let me know - if not. - 7. IMPORTANT: Copy-paste this next line to make it renew automatically - from now on: - 8. (BUTTON) 📋(crontab -l 2>/dev/null; echo - "11\t3\t*\t*\t5\tacme-client $domain \&\& rcctl reload relayd") | - crontab - - 9. Hit [enter]. Type exit; exit to log out. - 10. [74]Let me know if it happens again. (It shouldn’t.) - - Trouble? Start over - - I’ve tested the steps above very carefully and repeatedly. They work. - So if you hit a major problem, something not happening like it says it - should, please do this: - 1. Type “cd ; m-x ; exit” in any terminals you still have open, until - they are all closed. - 2. Go to [75]your Vultr account. - 3. See your server instance? See to the far right, a subtle ···? Click - that. - 4. From its pop-up menu, click the last option: “Server Destroy”. - 5. Tick the box next to “[X] Yes, destroy this server.” - 6. Click the big red [Destroy Server] button. - 7. This will not destroy your encrypted storage. That’s another reason - we kept it separate from the start. So if you already uploaded a - bunch of your files and want to save them, they should still be - there. - 8. On your own computer, in the terminal, type: rm .ssh/known_hosts - 9. Go back to the section called “[76]Create your server” and try - again. - - Questions? Additions? - - To learn more about your new server, just log in and type: [77]help - It will teach you the basics. Then for each command or file you want to - know more about, type [78]man followed by the command or filename. So - for example, log in and type… - * man [79]adduser - * man [80]ssh - * man [81]doas - * man [82]rcctl - * man [83]pkg_add - * man [84]ftp - * man [85]httpd.conf - - Hit your [space] bar to scroll the page, then q to quit. - - It’s one of the most wonderful things about OpenBSD: everything you - need to know is in those man pages! No need for YouTube, Google, - ChatGPT, or any other advertising-driven sources of information. - - I will constantly improve this page, so [86]get on my private email - list for updates. - - Until then, ask any questions. If something went wrong, please give me - a very specific description of exactly what went wrong at what step, - what it was supposed to do, and what exactly it actually did. [87]Click - here to email me. - - Requests for what to add? Again, just [88]email me. - -References - - 1. https://sive.rs/en.atom - 2. https://sive.rs/ - 3. https://sive.rs/ti#why - 4. https://sive.rs/ti#register - 5. https://sive.rs/ti#dns0 - 6. https://sive.rs/ti#storage1 - 7. https://sive.rs/ti#ssh - 8. https://sive.rs/ti#server1 - 9. https://sive.rs/ti#server2 - 10. https://sive.rs/ti#custom - 11. https://sive.rs/ti#storage4 - 12. https://sive.rs/ti#radicale - 13. https://sive.rs/ti#mailjet - 14. https://sive.rs/ti#mail3 - 15. https://sive.rs/ti#web1 - 16. https://sive.rs/ti#web2 - 17. https://sive.rs/ti#indie - 18. https://sive.rs/ti#storage5 - 19. https://sive.rs/ti#mutt - 20. https://sive.rs/ti#upkeep - 21. https://sive.rs/ti#cert - 22. https://sive.rs/ti#redo - 23. https://sive.rs/ti#questions - 24. https://sive.rs/openbsd - 25. https://www.vultr.com/?ref=9541378-8H - 26. https://porkbun.com/ - 27. https://www.vultr.com/?ref=6930328 - 28. https://my.vultr.com/blockstorage/add/ - 29. https://my.vultr.com/blockstorage/add/ - 30. https://sive.rs/ti#server1 - 31. https://www.vultr.com/?ref=6930328 - 32. https://my.vultr.com/deploy/ - 33. https://my.vultr.com/deploy/ - 34. https://sive.rs/ti#ssh - 35. https://sive.rs/ti#server1 - 36. https://sive.rs/ti#ssh - 37. https://sive.rs/ti.sh - 38. https://freefilesync.org/ - 39. https://freefilesync.org/ - 40. https://freefilesync.org/download.php - 41. https://sive.rs/ti#ssh - 42. https://sive.rs/ti.sh - 43. https://en.wikipedia.org/wiki/CardDAV - 44. https://en.wikipedia.org/wiki/CalDAV - 45. https://www.davx5.com/ - 46. https://www.davx5.com/download - 47. https://app.mailjet.com/signup?lang=en_US - 48. https://app.mailjet.com/account/apikeys - 49. https://sive.rs/ti.sh - 50. https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol - 51. https://www.dovecot.org/ - 52. https://sive.rs/file/template.html - 53. https://sive.rs/file/style.css - 54. https://duckduckgo.com/?q=css+tutorial - 55. https://freefilesync.org/ - 56. https://sive.rs/su - 57. https://sive.rs/ti#web1 - 58. https://www.mozilla.org/firefox/ - 59. https://ublockorigin.com/ - 60. https://getaegis.app/ - 61. https://raivo-otp.com/ - 62. https://ubuntu.com/desktop - 63. https://sive.rs/pe - 64. https://mailbox.org/ - 65. https://www.fastmail.com/ - 66. https://www.hetzner.com/storage/storage-box - 67. https://www.backblaze.com/cloud-backup/personal - 68. https://duckduckgo.com/?q=vi+editor - 69. http://mutt.org/ - 70. http://mutt.org/doc/manual/ - 71. https://duckduckgo.com/?q=vi+editor - 72. https://www.openbsd.org/faq/ - 73. https://sive.rs/contact - 74. https://sive.rs/contact - 75. https://my.vultr.com/ - 76. https://sive.rs/ti#server1 - 77. https://man.openbsd.org/help - 78. https://man.openbsd.org/man.1 - 79. https://man.openbsd.org/adduser.8 - 80. https://man.openbsd.org/ssh.1 - 81. https://man.openbsd.org/doas.1 - 82. https://man.openbsd.org/rcctl.8 - 83. https://man.openbsd.org/pkg_add.1 - 84. https://man.openbsd.org/ftp.1 - 85. https://man.openbsd.org/httpd.conf.5 - 86. https://sive.rs/contact - 87. https://sive.rs/contact - 88. https://sive.rs/contact +Tech independence is not depending on any particular company or software. + +The only tools you need are the common open source basics built into any Linux +or BSD operating system — free public-domain tools that are not owned by anyone +, and can run on any computer. + +Learn a few of these basic tools, and you can run your own private server on +any computer forever, for the rest of your life. Host your own website and +email. Keep your own contacts and calendars synced with your phone. Back up and +sync your photos, movies, and music to your own private storage. No more +subscriptions needed. + +You can ignore all the companies offering “solutions”, even if they are free, +because they take away self-reliance. The point is to know how to do it +yourself, not to have somebody do it for you. It’s worth a little up-front +work, like learning how to drive. + +Below are simple step-by-step instructions that work. Instead of drowning you +in options, it uses an operating system called [23]OpenBSD and a hosting +company called [24]Vultr because I’ve used them for years and I know they are +good and trustworthy. But you could do this same setup with any free Linux or +BSD operating system, with any hosting company that gives you “root” access to +your own private server. You could even do it on an old laptop in your closet. + +So if a company turns evil or goes out of business, no problem! You can set up +a new server anywhere else in an hour, point your domain name to the new IP +address, and it’s done. That’s tech independence — never dependent on any +particular provider or software. It’s very empowering. The instructions below +will show you how. + +Register a domain + + 1. Go to [25]Porkbun.com. + 2. Search for a domain name you like until you find one that’s available. + 3. Create a new account, and pay. + 4. Congratulations. You’ll use this domain name in many of the steps below. + +Change DNS nameservers to vultr + + 1. Wherever you registered your domain name, log in there to change your + domain’s DNS nameservers. + 2. It’s usually set by default to the company where you registered. So for + example a domain registered at GoDaddy will have default nameservers of + something.godaddy.com. + 3. Replace those defaults with these two: + □ ns1.vultr.com + □ ns2.vultr.com + +Create storage + + 1. Go to [26]Vultr.com. + 2. Create an account and give it your credit card. + 3. [27]Click here for the “[28]Add Block Storage” page. + 4. Click “Block Storage (HDD)”, which says “Globally Available” + 5. Below that, a list of cities. Click the one closest to you. + 6. Below that, a slider lets you choose how much storage you need. If not + sure, just leave it as $1 for 40 GB. + 7. Below that, in a subtle box that says “label” type the word encrypted. + 8. Below that, click the “Add Block Storage” button. + +Create an SSH key + + 1. Open a terminal. + □ Windows? Start → Windows PowerShell → Windows PowerShell + □ Mac? Applications → Utilities → Terminal + 2. Type ssh-keygen -t ed25519 and hit [enter] or [return]. + 3. When it says, “Enter file in which to save the key (/Users/yourname/.ssh/ + id_ed25519):”, hit [enter] or [return]. + 4. When it says, “Enter passphrase (empty for no passphrase):”, hit [enter] or + [return]. + 5. When it says, “Enter same passphrase again:”, hit [enter] or [return]. + 6. See the line that starts, “Your public key has been saved in” and ends in + “id_ed25519.pub”? That’s the file you need for the next step. + 7. In a text editor, open “id_ed25519.pub”. + □ Windows? Type notepad .ssh/id_ed25519.pub + □ Mac? Type open -e .ssh/id_ed25519.pub + 8. It should be a single line like this: + ssh-ed25519 AAAAC3Nz5AAAAIPIXO5icj4LUpqa2baqYQRmCZ1+NV4sBDr you@computer + 9. You’ll use this in the next step: “[29]Create your server”. + +Create your server + + 1. In your [30]Vultr.com account: + 2. [31]Click here for the “[32]Deploy New Instance” page. + 3. Click “Cloud Compute” (NOT “Optimized Cloud Compute”) + 4. Below that, click “Intel Regular Performance” + 5. Below that, IMPORTANT: click the same city you chose for your encrypted + storage in the previous step. + 6. Below that, click “OpenBSD” (the yellow blowfish) then inside its box, + click “7.4 x64” + 7. Below that, under Server Size, click “25 GB SSD $5/month” + 8. A blue pop-up appears underneath, up-selling “For only $1.00 more you + can...”. Click “No thanks”. + 9. Scroll down to “SSH Keys”, click “Add New”, then under “Name” type mykey. +10. From [33]the previous section, step 3, copy (⌘-C or Ctrl-C) the contents of + “id_ed25519.pub” and paste it into this box called “SSH Key”. It should be + a single line like this: + ssh-ed25519 AAAAC3NzaC1XO5iclCcrHbGRPoj4LUpqa2baqYQRmCZ1+NV4sBDr + you@computer +11. After pasting it into the box, click [Add SSH Key]. +12. Under SSH Keys, click the box with the picture of the key called “mykey” to + give it a tick mark in the top-right corner. +13. Scroll up to “Enable Auto Backups”, click the “on” toggle button to turn it + OFF. +14. A scary pop-up says “Are you sure....”. Tick the box next to “I understand + the risks”, then click the red button “Disable Auto Backups”. +15. Under “Additional Features”, untick the box next to “Enable IPv6”, to + disable it. +16. Under “Server Hostname & Label”, type your domain name in both “server + hostname” and “server label”. +17. At the bottom, click the big blue button [“Deploy Now”]. +18. Stretch your legs for a minute while waiting for your server status to + change from “Installing” to “Running”. +19. Copy and save its IP Address on your computer. + +SSH into root, and get my script + + 1. Copy (⌘-C or Ctrl-C) the IP Address from the last step of [34]Create Your + Server. + 2. Open your terminal from the [35]Create an SSH key section. + 3. Whenever I say to type something into the terminal, hit your [return] or + [enter] key afterwards. + 4. Type into the terminal: ssh root@YOUR-IP-ADDRESS. So for example: + ssh root@123.45.67.89 + 5. It should say something like: + + The authenticity of host '123.45.67.78 (123.45.67.89)' can’t be established. + ED25519 key fingerprint is SHA256:OyiqVsjRX8U2f0UTUY4D0erdl6855YNRXyQk2D. + This key is not known by any other names + Are you sure you want to continue connecting (yes/no/[fingerprint])? + + 6. Type yes + 7. It should say something like: + + Warning: Permanently added '123.45.67.89' (ED25519) to the list of known hosts. + OpenBSD 7.4 (GENERIC.MP) #1396: Sun Oct 8 09:20:40 MDT 2023 + Welcome to OpenBSD: The proactively secure Unix-like operating system. + + 8. Congratulations! You’re inside a remote computer! + 9. Type ftp https://sive.rs/ti.sh +10. Type sh ti.sh +11. Watch it install, answer its questions, and do what it says. +12. Be ready to open a new terminal window, so you can leave this one + logged-in. +13. See below for help with its prompts. + +Customize these instructions + +Enter your domain name and the username that you create, below, and this will +customize all following instructions for you. + +Your domain name? [36][ ] Your username? +[37][ ] [38][customize] +Now when you see this button: 📋 click it to copy that line so you can paste it +into your terminal, without error. + +Use your encrypted storage + +The [40]ti.sh script will eventually prompt you, “Now upload anything while I +wait...”. Here’s how. + +Mac + +Type rsync -avz Documents yourusername@yourdomain.name:/mnt/ and you will see +it uploading your Documents folder to your private encrypted storage. Use this +same format to upload any other folders, replacing “Documents” in the command. +If you are happy synchronizing on the command line like this, you can skip over +the next FreeFileSync section. + +[41]FreeFileSync + +Everyone using Windows should use [42]FreeFileSync. Here’s how: + + 1. [43]Download FreeFileSync and please give an optional donation there if you + can afford to. Donating also unlocks more features. Thanks to Jon Lis for + the recommendation. + 2. Install and open FreeFileSync. + 3. Top-center: click the grey [Browse] button and find the folder with the + stuff you want to upload. + 4. Top-far-right: click the white cloud icon then SFTP at the top. + 5. Server name or IP address: yourdomain.name + 6. Left side: click (*) Key File + 7. Username: yourusername + 8. Browse to find your private key, called id_ed25519 from the “[44]Create an + SSH key” section. (Not the file that ends in “.pub”, but the one next to + it.) NOTE: Because the /Users/yourusername/.ssh directory is “hidden” by + Windows and Mac by default, I find it easier to just type the path + directly, like this: + □ The username, for this next line, should be your username on your home + computer, not your remote server. + □ Windows? Type 📋C:\Users\yourusername\.ssh\id_ed25519 + □ Mac? Type 📋/Users/yourusername/.ssh/id_ed25519 + 9. Directory on server: /mnt +10. Click OK to go back to the main screen. +11. Top-right: click the green gear wheel. +12. Left button: click “MIRROR →” +13. Click OK to go back to the main screen. +14. Top-center: click “COMPARE”, and make sure your files are there. +15. Top-right: click “SYNCHRONIZE Mirror →” then [Start] + +Verify and unmount + + 1. When it’s done uploading, log in to your server again, from your terminal. + 2. Type find /mnt + 3. You should see a long list of the files you uploaded. + 4. Type m-x to detach your encrypted storage. + 5. Type find /mnt again, and now you should see nothing there! + Congratulations! You now see how this will work in the future: + 1. Log in and type “m” to attach your encrypted storage. + 2. Upload your files with rsync or FreeFileSync. + 3. Log in and type “m-x” to detach the storage, for security. + +Contacts and Calendar + +Your phone currently keeps its contacts and calendars with Google or Apple. Now +you can get them off the cloud and keep them privately on your own server. + +My [47]ti.sh setup script installs a [48]CardDAV server for contacts, and [49] +CalDAV server for calendars. + +Here’s how to connect your phone. + +Android phone + +You need an app called “[50]DAVx⁵”, so [51]install it first. Then… + + 1. Open the DAVx⁵ app + 2. Click the orange (+) in the bottom-right + 3. Click (·) “Login with URL and user name” + 4. Base URL: https://dav.yourdomain.name/ + 5. User name: yourusername + 6. Password: the “easy to type on your phone” password you made + 7. Click “LOGIN” in the bottom-right corner. + 8. It should work and bring you to the “Create account” page, where “Account + name” will be yourusername. Leave everything as-is and click “CREATE + ACCOUNT” in the bottom-right corner. + 9. It brings you to the “CARDDAV” header. Tick the toggle to turn on next to + your domain name. +10. Click the ♻ arrows in the bottom-right corner to synchronize your contacts. +11. Click the “CALDAV” header up top. Tick the toggle to turn on next to your + domain name. +12. Click the ♻ arrows in the bottom-right corner to synchronize your calendar. +13. Go to your Calendar app, and in the top-right corner, click the round icon + there. (Might be your face or a letter.) Then change it to the one with + yourusername. After changing it, click the X in the top-left corner. +14. To add a new Event, Click [+] in the bottom-right corner, and choose “Event + ” from the popup menu. +15. There might be a warning, “Switch to a Google Account to take advantage + blah blah…”. Click “dismiss”. +16. Title this event something like “Test Delete”, and notice it should be + saving to the calendar with your domain name and username. Click (Save) in + the top-right corner. +17. Check the terminal window where it should say “Calendar entry added!” +18. Go to your Contacts app, and in the bottom-right corner, click “Fix & + manage”. +19. Click “Settings” +20. Near the bottom, click “Default account for new contacts”, and change it to + the DAVx⁵ Address book with your domain name. +21. Click “< Settings” in the top-left corner. +22. In the top-right corner, click the round icon there. (Might be your face or + a letter.) Then change it to the DAVx⁵ Address book with your domain name. + Then click X in the top-left corner. +23. Click “Contacts” in the bottom-left corner. It should say “No contacts in + this account”. +24. Click + in the bottom-right corner to Create contact. Top of the next page + should say “Save to” then your domain name. +25. Add a New Contact with a name like “Test Delete”. Then click “Save” in the + top-right corner. +26. Check the terminal window where it should say “Contact added! Both work. + Congratulations.” + +Apple iPhone + + 1. Settings → Contacts → Accounts → Add Account → Other → (under “CONTACTS”:) + Add CardDAV Account + 2. Server: dav.yourdomain.name + 3. User Name: yourusername + 4. Password: the “easy to type on your phone” password you made + 5. Click “next” in the top right corner, and it should bring you to your + “Accounts” page, where you see it listed, saying “Contacts” underneath. + 6. Click Add Account → Other → (under “CALENDARS”:) Add CalDAV Account + 7. Server: dav.yourdomain.name + 8. User Name: yourusername + 9. Password: the “easy to type on your phone” password you made +10. Click “next” in the top right corner, and it should bring you to a “CalDAV” + page, showing Calendars and Reminders. Un-tick Reminders. +11. Click “save” in the top right corner, and it should bring you to your + “Accounts” page, where you see it listed, saying “Calendars” underneath. +12. Click “< Contacts” in the top-left corner, to go back to settings for your + Contacts app. +13. At the bottom change Default Account to the one with yourdomain.name. +14. Click “< Contacts” then “< Settings”, both in the top-left corner, then + scroll down to Calendar settings and click it. +15. In Calendar settings, 2nd from the bottom should say “Default Calendar”. + Tap to change it to the one with yourdomain.name. +16. Go to your Calendar app and click the + in the top-right corner. +17. Add a New Event with a Title like “Test Delete”. Then click “Add” in the + top-right corner. +18. Check the terminal window where it should say “Calendar entry added!” +19. Go to your Contacts app and click the + in the top-right corner. +20. Add a New Contact with a name like “Test Delete”. Then click “Done” in the + top-right corner. +21. Check the terminal window where it should say “Contact added! Both work. + Congratulations.” + +Email sending + + 1. Go to [52]Mailjet.com and sign up for their free account. + 2. Go to [53]this page for API keys and [Generate secret key] + 3. Give the [54]ti.sh script your API key and Secret key, and it will do the + rest. + +Email settings + +To do email from your phone, computer, or anywhere else, you now have an [55] +IMAP server, called [56]Dovecot. So on any device, you can add a new IMAP Mail +account, with these settings: + + • Account type: IMAP + • Email address: yourusername@yourdomain.name + • Username: yourusername + • Password: the password you made for your username on your server + • Incoming mail server: yourdomain.name + • Outgoing mail server: yourdomain.name + • Connection security: SSL + • Authentication type: Basic authentication + +Simple website + + 1. On your home computer, in your main home directory, make a directory/folder + called “htdocs” + 2. [57]Download this file called “template.html” and save it in your “htdocs” + directory. + 3. [58]Download this file called “style.css” and also save it in your “htdocs” + directory. + 4. Make a copy of the “template.html” file, and name the copy “index.html”. + This will be your home page. + 5. Edit the index.html file in a text editor (NotePad or TextEdit) and change + my default text to whatever you want. + 6. When you need to add a new page, just copy the template again, call it + “about.html” or whatever, and make a link to it from the home page. The + header of each page will link back to index.html : your home page. + 7. If you want to change the look of your site, just edit the style.css file. + [59]Search the web for “CSS tutorial” if needed. + 8. To upload it to your public server, do one of the next two steps: + 9. Apple Mac? Open a new terminal window on your computer, type + rsync -avz htdocs yourusername@yourdomain.name:/var/www/ +10. Windows? [60]FreeFileSync again, but now change the “Directory on server” + to /var/www/ (you can find it by clicking [browse] or typing it directly) + then upload this htdocs directory there. +11. Go to https://yourdomain.name in your web browser, refresh the page, and + you should see your updated website. +12. Any trouble, just know that the goal is to get that index.html file into + this location on your server: /var/www/htdocs/index.html because that’s + where the web server is expecting it to be. That’s where we put the + original test file, so your new index.html file should replace that one. +13. If you want [61]short URLs, without the .html, you can (for everything + except index.html) because I set the default type to be HTML. Just remove + the “.html” from your HTML filenames, update your links, and voilà! + +It’s important to know how to make a simple website by hand, and not let people +sell you on complex solutions that are the equivalent of saying you need a +jumbo jet when you really need a bicycle. For real tech independence, start by +typing your HTML files yourself. Only later, after you have many many pages, +consider a more complicated solution. + +File sharing in /pub/ + +Your website is configured to list all files in the /pub/ directory of your +website. So basically anything in /var/www/htdocs/pub/ is public. Upload any +files you want to share. + +It replaces Dropbox and similar services for sending big files. Just upload the +file to /var/www/htdocs/pub/ then find it in your web browser, copy its URL, +and send someone the URL. + +If the files you want to share are already on your computer, then just make a +pub/ directory inside htdocs/ (so, htdocs/pub/), put your files in there, then +use FreeFileSync or rsync to upload them as you did in the previous section +called “[62]Simple website”. Consider them part of your website. + +Or if you have a URL from somewhere else online that you want to download to +your server, just do it as we did in the numbered steps above. Then use +FreeFileSync or rsync to download from your server to your computer first, +before your next upload sync. + +More indie tips + + 1. Use [63]Firefox. + 2. Install [64]uBlock Origin in Firefox and Chrome. + 3. In Firefox settings, under “Privacy and Security”, choose “[X] Delete + cookies and site data when Firefox is closed”, then close Firefox often to + erase all your cookies and logins. Browse the web anonymously, not + logged-in. + 4. Replace Google Authenticator with [65]Aegis on Android or [66]Raivo on + iPhone. + 5. If you use Windows, replace it with [67]Ubuntu Linux. (Use both at first, + then slowly transition.) + 6. Keep your new email address as a [68]private email account that you only + give to those few people who you really want to hear from. Then your old + gmail/yahoo/outlook/etc address can be just low-priority junk, and your new + private email account won’t need spam protection. + 7. Or if you don’t want to run your own email server, use [69]Mailbox.org or + [70]Fastmail but only by using your own domain name. Be yourusername@ + yourdomain.name from now on. Don’t depend on anyone else’s domain for your + email or you’ll be stuck with them. + +More storage? + +If you need hundreds of gigabytes, or even terabytes of storage, I recommend +Hetzner’s “[71]Storage Box”. It’s the best storage value I’ve found. Also +consider [72]Backblaze Personal Backup. + +I personally use Vultr’s storage (as described above) for sensitive information +I definitely want completely encrypted. Then I use Hetzner’s Storage Box for +all my photos, videos, music, and other big files that don’t absolutely need to +be encrypted. + +Mutt = email in the terminal + +Unless you want to read email directly on your server, skip this step. + + 1. ssh in to your server, then type mutt + 2. You should see the subject headers, with the first email highlighted. Type + j and k a few times to go down and up the list of emails. + 3. To read an email, hit [enter] or [return] when it is highlighted. + 4. To go back to the list, type i (for “index”) + 5. To reply, hit r then: + □ It shows “To:” so you can edit or add recipients. Hit [enter] or + [return] to leave it. + □ It shows “Subject:” so you can edit the subject. Hit [enter] or + [return] to leave it. + □ It asks “Include message in reply? ([yes]/no/?):”. Hit [enter] or + [return] for the usual norm of echoing someone’s email back at them + below your reply. Or n for not. + □ Now you are inside the [73]vi text editor which is not + self-explanatory, so I’ll walk you through a simple reply: + □ Hit i (no [return] or [enter]) to go into “insert mode” and type your + message. You’ll notice it’s on the same line as some other text, so you + might want to start by hitting [return] or [enter] a few times, then + up-arrow to go back to the first line again. + □ When done typing your message, hit your [esc] key in the very top-left + corner of your keyboard. Nothing will change on the screen, yet. + □ Type :wq (the “:” at the beginning is important) then [enter] or + [return]. + □ Then you’ll see the “Compose Menu” which I think of as the “last chance + before sending” screen. Hit y to send it. + 6. To send a new email, hit m then repeat those steps like you did for a + reply, except now the “To:” and “Subject:” are blank and waiting for you to + create. (For “To:”, type the email address of the person you’re emailing.) + 7. To quit, hit q + +[74]Mutt is a great program for reading and sending email on the command line. +It’s been my email client for 20 years. [75]Read its manual here if you want to +go deeper. It does everything. + +The [76]vi text editor is a useful tool to edit text on a server. It takes a +few minutes to learn, but it’s worth learning because it’s installed by default +on every Linux/BSD server. + +Upkeep + +You honestly don’t have to do anything to maintain your server. It will just +work as-is for decades! But if you like to keep it up-to-date, it only takes a +minute, so run these next steps any time. + + 1. Log in to your server, if you are not already. + 2. Type 📋doas su + 3. Type 📋syspatch + 4. Type 📋fw_update + 5. Type 📋pkg_add -u + 6. Type 📋sysupgrade + 7. Type exit; exit to log out. + +If that last “sysupgrade” step did not give an “Error retrieving … 404 Not +Found” error, that means your OpenBSD operating system is upgrading itself. +They release an upgrade every 6 months. In that case, [82]go to this OpenBSD +page and follow the link at the top that says “Upgrading to (7.4, etc)” to see +if there’s anything else you should know. + +If the “sysupgrade” step updated your operating system and your server +rebooted, then there is just one more step: + + 1. Log in to your server, if you are not already. + 2. Type 📋doas su + 3. Type 📋sysmerge + 4. Follow any instructions. Don’t worry about messing up because you can + always start over, as described below. + 5. Re-do the syspatch ; fw_update ; pkg_add -u steps, above. + 6. Type exit; exit to log out. + +Secure certificate expired? + + 1. Log in to your server, if you are not already. + 2. Type 📋doas su + 3. Type 📋domain=yourdomain.name + 4. Type 📋acme-client -v $domain + 5. Type 📋rcctl restart relayd + 6. That should fix it. Confirm it in your web browser. [89]Let me know if not. + 7. IMPORTANT: Copy-paste this next line to make it renew automatically from + now on: + 8. 📋(crontab -l 2>/dev/null; echo "11\t3\t*\t*\t5\tacme-client $domain \&\& + rcctl reload relayd") | crontab - + 9. Hit [enter]. Type exit; exit to log out. +10. [91]Let me know if it happens again. (It shouldn’t.) + +Trouble? Start over + +I’ve tested the steps above very carefully and repeatedly. They work. So if you +hit a major problem, something not happening like it says it should, please do +this: + + 1. Type “cd ; m-x ; exit” in any terminals you still have open, until they are + all closed. + 2. Go to [92]your Vultr account. + 3. See your server instance? See to the far right, a subtle ···? Click that. + 4. From its pop-up menu, click the last option: “Server Destroy”. + 5. Tick the box next to “[X] Yes, destroy this server.” + 6. Click the big red [Destroy Server] button. + 7. This will not destroy your encrypted storage. That’s another reason we kept + it separate from the start. So if you already uploaded a bunch of your + files and want to save them, they should still be there. + 8. On your own computer, in the terminal, type: rm .ssh/known_hosts + 9. Go back to the section called “[93]Create your server” and try again. + +Questions? Additions? + +To learn more about your new server, just log in and type: [94]help +It will teach you the basics. Then for each command or file you want to know +more about, type [95]man followed by the command or filename. So for example, +log in and type… + + • man [96]adduser + • man [97]ssh + • man [98]doas + • man [99]rcctl + • man [100]pkg_add + • man [101]ftp + • man [102]httpd.conf + +Hit your [space] bar to scroll the page, then q to quit. + +It’s one of the most wonderful things about OpenBSD: everything you need to +know is in those man pages! No need for YouTube, Google, ChatGPT, or any other +advertising-driven sources of information. + +I will constantly improve this page, so [103]get on my private email list for +updates. + +Until then, ask any questions. If something went wrong, please give me a very +specific description of exactly what went wrong at what step, what it was +supposed to do, and what exactly it actually did. [104]Click here to email me. + +Requests for what to add? Again, just [105]email me. + + +References: + +[1] https://sive.rs/ +[2] https://sive.rs/ti#why +[3] https://sive.rs/ti#register +[4] https://sive.rs/ti#dns0 +[5] https://sive.rs/ti#storage1 +[6] https://sive.rs/ti#ssh +[7] https://sive.rs/ti#server1 +[8] https://sive.rs/ti#server2 +[9] https://sive.rs/ti#custom +[10] https://sive.rs/ti#storage4 +[11] https://sive.rs/ti#radicale +[12] https://sive.rs/ti#mailjet +[13] https://sive.rs/ti#mail3 +[14] https://sive.rs/ti#web1 +[15] https://sive.rs/ti#web2 +[16] https://sive.rs/ti#indie +[17] https://sive.rs/ti#storage5 +[18] https://sive.rs/ti#mutt +[19] https://sive.rs/ti#upkeep +[20] https://sive.rs/ti#cert +[21] https://sive.rs/ti#redo +[22] https://sive.rs/ti#questions +[23] https://sive.rs/openbsd +[24] https://www.vultr.com/?ref=9541378-8H +[25] https://porkbun.com/ +[26] https://www.vultr.com/?ref=6930328 +[27] https://my.vultr.com/blockstorage/add/ +[28] https://my.vultr.com/blockstorage/add/ +[29] https://sive.rs/ti#server1 +[30] https://www.vultr.com/?ref=6930328 +[31] https://my.vultr.com/deploy/ +[32] https://my.vultr.com/deploy/ +[33] https://sive.rs/ti#ssh +[34] https://sive.rs/ti#server1 +[35] https://sive.rs/ti#ssh +[40] https://sive.rs/ti.sh +[41] https://freefilesync.org/ +[42] https://freefilesync.org/ +[43] https://freefilesync.org/download.php +[44] https://sive.rs/ti#ssh +[47] https://sive.rs/ti.sh +[48] https://en.wikipedia.org/wiki/CardDAV +[49] https://en.wikipedia.org/wiki/CalDAV +[50] https://www.davx5.com/ +[51] https://www.davx5.com/download +[52] https://app.mailjet.com/signup?lang=en_US +[53] https://app.mailjet.com/account/apikeys +[54] https://sive.rs/ti.sh +[55] https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol +[56] https://www.dovecot.org/ +[57] https://sive.rs/file/template.html +[58] https://sive.rs/file/style.css +[59] https://duckduckgo.com/?q=css+tutorial +[60] https://freefilesync.org/ +[61] https://sive.rs/su +[62] https://sive.rs/ti#web1 +[63] https://www.mozilla.org/firefox/ +[64] https://ublockorigin.com/ +[65] https://getaegis.app/ +[66] https://raivo-otp.com/ +[67] https://ubuntu.com/desktop +[68] https://sive.rs/pe +[69] https://mailbox.org/ +[70] https://www.fastmail.com/ +[71] https://www.hetzner.com/storage/storage-box +[72] https://www.backblaze.com/cloud-backup/personal +[73] https://duckduckgo.com/?q=vi+editor +[74] http://mutt.org/ +[75] http://mutt.org/doc/manual/ +[76] https://duckduckgo.com/?q=vi+editor +[82] https://www.openbsd.org/faq/ +[89] https://sive.rs/contact +[91] https://sive.rs/contact +[92] https://my.vultr.com/ +[93] https://sive.rs/ti#server1 +[94] https://man.openbsd.org/help +[95] https://man.openbsd.org/man.1 +[96] https://man.openbsd.org/adduser.8 +[97] https://man.openbsd.org/ssh.1 +[98] https://man.openbsd.org/doas.1 +[99] https://man.openbsd.org/rcctl.8 +[100] https://man.openbsd.org/pkg_add.1 +[101] https://man.openbsd.org/ftp.1 +[102] https://man.openbsd.org/httpd.conf.5 +[103] https://sive.rs/contact +[104] https://sive.rs/contact +[105] https://sive.rs/contact diff --git a/static/archive/softwarecrisis-dev-7c7z9g.txt b/static/archive/softwarecrisis-dev-7c7z9g.txt index a37f57e..d24a8b5 100644 --- a/static/archive/softwarecrisis-dev-7c7z9g.txt +++ b/static/archive/softwarecrisis-dev-7c7z9g.txt @@ -1,1068 +1,1022 @@ - #[1]Out of the Software Crisis (Newsletter) [2]Out of the Software - Crisis (Newsletter) - - [3]Out of the Software Crisis - - Bird flying logo [4]Newsletter [5]Book [6]AI Book [7]Archive [8]Author +[1]Out of the Software Crisis Bird flying logo [2]Newsletter [3]Book [4]AI Book +[5]Archive [6]Author Modern software quality, or why I think using language models for programming is a bad idea - By Baldur Bjarnason, - May 30th, 2023 +By Baldur Bjarnason, +May 30th, 2023 - This essay is based on a talk I gave at [9]Hakkavélin, a hackerspace in - Reykjavík. I had a wonderful time presenting to a lovely crowd, full of - inquisitive and critically-minded people. Their questions and the - discussion afterwards led to a number of improvements and - clarifications as I turned my notes into this letter. This resulted in - a substantial expansion of this essay. Many of the expanded points, - such as the ones surrounding language model security, come directly - from these discussions. +This essay is based on a talk I gave at [7]Hakkavélin, a hackerspace in +Reykjavík. I had a wonderful time presenting to a lovely crowd, full of +inquisitive and critically-minded people. Their questions and the discussion +afterwards led to a number of improvements and clarifications as I turned my +notes into this letter. This resulted in a substantial expansion of this essay. +Many of the expanded points, such as the ones surrounding language model +security, come directly from these discussions. - Many thanks to all of those who attended. The references for the - presentation are also the references for this essay, which you can find - all the way down in the footnotes section. +Many thanks to all of those who attended. The references for the presentation +are also the references for this essay, which you can find all the way down in +the footnotes section. - The best way to support this newsletter or my blog is to buy one of my - books, [10]The Intelligence Illusion: a practical guide to the business - risks of Generative AI or [11]Out of the Software Crisis. Or, you can - buy them both [12]as a bundle. +The best way to support this newsletter or my blog is to buy one of my books, +[8]The Intelligence Illusion: a practical guide to the business risks of +Generative AI or [9]Out of the Software Crisis. Or, you can buy them both [10] +as a bundle. The software industry is very bad at software - Here’s a true story. Names withheld to protect the innocent. +Here’s a true story. Names withheld to protect the innocent. - A chain of stores here in Iceland recently upgraded their point-of-sale - terminals to use new software. +A chain of stores here in Iceland recently upgraded their point-of-sale +terminals to use new software. - Disaster, obviously, ensued. The barcode scanner stopped working - properly, leading customer to be either overcharged or undercharged. - Everything was extremely slow. The terminals started to lock up - regularly. The new invoice printer sucked. A process that had been - working smoothly was now harder and took more time. +Disaster, obviously, ensued. The barcode scanner stopped working properly, +leading customer to be either overcharged or undercharged. Everything was +extremely slow. The terminals started to lock up regularly. The new invoice +printer sucked. A process that had been working smoothly was now harder and +took more time. - The store, where my “informant” is a manager, deals with a lot of - businesses, many of them stores. When they explain to their customers - why everything is taking so long, their answer is generally the same: +The store, where my “informant” is a manager, deals with a lot of businesses, +many of them stores. When they explain to their customers why everything is +taking so long, their answer is generally the same: - “Ah, software upgrade. The same happened to us when we upgraded our - terminals.” +“Ah, software upgrade. The same happened to us when we upgraded our terminals.” - This is the norm. +This is the norm. - The new software is worse in every way than what it’s replacing. - Despite having a more cluttered UI, it seems to have omitted a bunch of - important features. Despite being new and “optimised”, it’s - considerably slower than what it’s replacing. +The new software is worse in every way than what it’s replacing. Despite having +a more cluttered UI, it seems to have omitted a bunch of important features. +Despite being new and “optimised”, it’s considerably slower than what it’s +replacing. - This is also the norm. +This is also the norm. - Switching costs are, more often than not, massive for business - software, and purchases are not decided by anybody who actually uses - it. The quality of the software disconnects from sales performance very - quickly in a growing software company. The company ends up “owning” the - customer and no longer has any incentive to improve the software. In - fact, because adding features is a key marketing and sales tactic, the - software development cycle becomes an act of intentional, controlled - deterioration. +Switching costs are, more often than not, massive for business software, and +purchases are not decided by anybody who actually uses it. The quality of the +software disconnects from sales performance very quickly in a growing software +company. The company ends up “owning” the customer and no longer has any +incentive to improve the software. In fact, because adding features is a key +marketing and sales tactic, the software development cycle becomes an act of +intentional, controlled deterioration. - Enormous engineering resources go into finding new ways to minimise the - deterioration—witness Microsoft’s “ribbon menu”, a widget invented - entirely to manage the feature escalation mandated by marketing. +Enormous engineering resources go into finding new ways to minimise the +deterioration—witness Microsoft’s “ribbon menu”, a widget invented entirely to +manage the feature escalation mandated by marketing. - This is the norm. +This is the norm. - This has always been the norm, from the early days of software. +This has always been the norm, from the early days of software. - The software industry is bad at software. Great at shipping features - and selling software. Bad at the software itself. +The software industry is bad at software. Great at shipping features and +selling software. Bad at the software itself. Why I started researching “AI” for programming - In most sectors of the software industry, sales performance and product - quality are disconnected. +In most sectors of the software industry, sales performance and product quality +are disconnected. - By its nature software has enormous margins which further cushion it - from the effect of delivering bad products. +By its nature software has enormous margins which further cushion it from the +effect of delivering bad products. - The objective impact of poor software quality on the bottom lines of - companies like Microsoft, Google, Apple, Facebook, or the retail side - of Amazon is a rounding error. The rest only need to deliver usable - early versions, but once you have an established customer base and an - experienced sales team, you can coast for a long, long time without - improving your product in any meaningful way. +The objective impact of poor software quality on the bottom lines of companies +like Microsoft, Google, Apple, Facebook, or the retail side of Amazon is a +rounding error. The rest only need to deliver usable early versions, but once +you have an established customer base and an experienced sales team, you can +coast for a long, long time without improving your product in any meaningful +way. - You only need to show change. Improvements don’t sell, it’s freshness - that moves product. It’s like store tomatoes. Needs to look good and be - fresh. They’re only going to taste it after they’ve paid, so who cares - about the actual quality. +You only need to show change. Improvements don’t sell, it’s freshness that +moves product. It’s like store tomatoes. Needs to look good and be fresh. +They’re only going to taste it after they’ve paid, so who cares about the +actual quality. - Uptime reliability is the only quality measurement with a real impact - on ad revenue or the success of enterprise contracts, so that’s the - only quality measurement that ultimately matters to them. +Uptime reliability is the only quality measurement with a real impact on ad +revenue or the success of enterprise contracts, so that’s the only quality +measurement that ultimately matters to them. - Bugs, shoddy UX, poor accessibility—even when accessibility is required - by law—are non-factors in modern software management, especially at - larger software companies. +Bugs, shoddy UX, poor accessibility—even when accessibility is required by +law—are non-factors in modern software management, especially at larger +software companies. - The rest of us in the industry then copy their practices, and we mostly - get away with it. Our margins may not be as enormous as Google’s, but - they are still quite good compared to non-software industries. +The rest of us in the industry then copy their practices, and we mostly get +away with it. Our margins may not be as enormous as Google’s, but they are +still quite good compared to non-software industries. - We have an industry that’s largely disconnected from the consequences - of making bad products, which means that we have a lot of successful - but bad products. +We have an industry that’s largely disconnected from the consequences of making +bad products, which means that we have a lot of successful but bad products. - The software crisis +The software crisis - Research bears this out. I pointed out in my 2021 essay [13]Software - Crisis 2.0 that very few non-trivial software projects are successful, - even when your benchmarks are fundamentally conservative and short - term. +Research bears this out. I pointed out in my 2021 essay [11]Software Crisis 2.0 +that very few non-trivial software projects are successful, even when your +benchmarks are fundamentally conservative and short term. - For example, the following table is from [14]a 2015 report by the - Standish Group on their long term study in software project success: +For example, the following table is from [12]a 2015 report by the Standish +Group on their long term study in software project success: - SUCCESSFUL CHALLENGED FAILED TOTAL - Grand 6% 51% 43% 100% - Large 11% 59% 30% 100% - Medium 12% 62% 26% 100% - Moderate 24% 64% 12% 100% - Small 61% 32% 7% 100% + SUCCESSFUL CHALLENGED FAILED TOTAL + Grand 6% 51% 43% 100% + Large 11% 59% 30% 100% + Medium 12% 62% 26% 100% +Moderate 24% 64% 12% 100% + Small 61% 32% 7% 100% - The Chaos Report 2015 resolution by project size +The Chaos Report 2015 resolution by project size - This is based on data that’s collected and anonymised from a number of - organisations in a variety of industries. You’ll note that very few - projects outright succeed. Most of them go over budget or don’t deliver - the functionality they were supposed to. A frightening number of large - projects outright fail to ship anything usable. +This is based on data that’s collected and anonymised from a number of +organisations in a variety of industries. You’ll note that very few projects +outright succeed. Most of them go over budget or don’t deliver the +functionality they were supposed to. A frightening number of large projects +outright fail to ship anything usable. - In my book [15]Out of the Software Crisis, I expanded on this by - pointing out that there are many classes and types of bugs and defects - that we don’t measure at all, many of them catastrophic, which means - that these estimates are conservative. Software project failure is - substantially higher than commonly estimated, and success if much rarer - than the numbers would indicate. +In my book [13]Out of the Software Crisis, I expanded on this by pointing out +that there are many classes and types of bugs and defects that we don’t measure +at all, many of them catastrophic, which means that these estimates are +conservative. Software project failure is substantially higher than commonly +estimated, and success if much rarer than the numbers would indicate. - The true percentage of large software projects that are genuinely - successful in the long term—that don’t have any catastrophic bugs, - don’t suffer from UX deterioration, don’t end up having core issues - that degrade their business value—is probably closer to 1–3%. +The true percentage of large software projects that are genuinely successful in +the long term—that don’t have any catastrophic bugs, don’t suffer from UX +deterioration, don’t end up having core issues that degrade their business +value—is probably closer to 1–3%. - The management crisis +The management crisis - We also have a management crisis. +We also have a management crisis. - The methods of top-down-control taught to managers are - counterproductive for software development. - * Managers think design is about decoration when it’s the key to - making software that generates value. - * Trying to prevent projects that are likely to fail is harmful for - your career, even if the potential failure is wide-ranging and - potentially catastrophic. - * When projects fail, it’s the critics who tried to prevent disaster - who are blamed, not the people who ran it into the ground. - * Supporting a project that is guaranteed to fail is likely to - benefit your career, establish you as a “team player”, and protects - you from harmful consequences when the project crashes. - * Teams and staff management in the software industry commonly - ignores every innovation and discovery in organisational - psychology, management, and systems-thinking since the early - sixties and operate mostly on management ideas that Henry Ford - considered outdated in the 1920s. +The methods of top-down-control taught to managers are counterproductive for +software development. - We are a mismanaged industry that habitually fails to deliver usable - software that actually solves the problems it’s supposed to. + • Managers think design is about decoration when it’s the key to making + software that generates value. + • Trying to prevent projects that are likely to fail is harmful for your + career, even if the potential failure is wide-ranging and potentially + catastrophic. + • When projects fail, it’s the critics who tried to prevent disaster who are + blamed, not the people who ran it into the ground. + • Supporting a project that is guaranteed to fail is likely to benefit your + career, establish you as a “team player”, and protects you from harmful + consequences when the project crashes. + • Teams and staff management in the software industry commonly ignores every + innovation and discovery in organisational psychology, management, and + systems-thinking since the early sixties and operate mostly on management + ideas that Henry Ford considered outdated in the 1920s. - Thus, [16]Weinberg’s Law: +We are a mismanaged industry that habitually fails to deliver usable software +that actually solves the problems it’s supposed to. - If builders built buildings the way programmers wrote programs, then - the first woodpecker that came along would destroy civilization. +Thus, [14]Weinberg’s Law: - It’s into this environment that “AI” software development tools appear. + If builders built buildings the way programmers wrote programs, then the + first woodpecker that came along would destroy civilization. - The punditry presented it as a revolutionary improvement in how we make - software. It’s supposed to fix everything. +It’s into this environment that “AI” software development tools appear. - —This time the silver bullet will work! +The punditry presented it as a revolutionary improvement in how we make +software. It’s supposed to fix everything. - Because, of course, we have had such a great track record with - [17]silver bullets. +—This time the silver bullet will work! - So, I had to dive into it, research it, and figure out how it really - worked. I needed to understand how generative AI works, as a system. I - haven’t researched any single topic to this degree since I finished my - PhD in 2006. +Because, of course, we have had such a great track record with [15]silver +bullets. - This research led me to write my book [18]The Intelligence Illusion: a - practical guide to the business risks of Generative AI. In it, I take a - broader view and go over the risks I discovered that come with business - use of generative AI. +So, I had to dive into it, research it, and figure out how it really worked. I +needed to understand how generative AI works, as a system. I haven’t researched +any single topic to this degree since I finished my PhD in 2006. - But, ultimately, all that work was to answer the one question that I - was ultimately interested in: +This research led me to write my book [16]The Intelligence Illusion: a +practical guide to the business risks of Generative AI. In it, I take a broader +view and go over the risks I discovered that come with business use of +generative AI. - Is generative AI good or bad for software development? +But, ultimately, all that work was to answer the one question that I was +ultimately interested in: - To even have a hope of answering this, we first need to define our - terms, because the conclusion is likely to vary a lot depending on how - you define “AI” or even "software development. +Is generative AI good or bad for software development? - A theory of software development as an inclusive system +To even have a hope of answering this, we first need to define our terms, +because the conclusion is likely to vary a lot depending on how you define “AI” +or even "software development. - Software development is the entire system of creating, delivering, and - using a software project, from idea to end-user. +A theory of software development as an inclusive system - That includes the entire process on the development side—the idea, - planning, management, design, collaboration, programming, testing, - prototyping—as well as the value created by the system when it has been - shipped and is being used. +Software development is the entire system of creating, delivering, and using a +software project, from idea to end-user. - My model is that of [19]theory-building. From my essay on - theory-building, which itself is an excerpt from [20]Out of the - Software Crisis: +That includes the entire process on the development side—the idea, planning, +management, design, collaboration, programming, testing, prototyping—as well as +the value created by the system when it has been shipped and is being used. - Beyond that, software is a theory. It’s a theory about a particular - solution to a problem. Like the proverbial garden, it is composed of - a microscopic ecosystem of artefacts, each of whom has to be treated - like a living thing. The gardener develops a sense of how the parts - connect and affect each other, what makes them thrive, what kills - them off, and how you prompt them to grow. The software project and - its programmers are an indivisible and organic entity that our - industry treats like a toy model made of easily replaceable lego - blocks. They believe a software project and its developers can be - broken apart and reassembled without dying. +My model is that of [17]theory-building. From my essay on theory-building, +which itself is an excerpt from [18]Out of the Software Crisis: - What keeps the software alive are the programmers who have an - accurate mental model (theory) of how it is built and works. That - mental model can only be learned by having worked on the project - while it grew or by working alongside somebody who did, who can help - you absorb the theory. Replace enough of the programmers, and their - mental models become disconnected from the reality of the code, and - the code dies. That dead code can only be replaced by new code that - has been ‘grown’ by the current programmers. + Beyond that, software is a theory. It’s a theory about a particular + solution to a problem. Like the proverbial garden, it is composed of a + microscopic ecosystem of artefacts, each of whom has to be treated like a + living thing. The gardener develops a sense of how the parts connect and + affect each other, what makes them thrive, what kills them off, and how you + prompt them to grow. The software project and its programmers are an + indivisible and organic entity that our industry treats like a toy model + made of easily replaceable lego blocks. They believe a software project and + its developers can be broken apart and reassembled without dying. - Design and user research is an integral part of the mental model the - programmer needs to build, because none of the software components - ultimately make sense without the end-user. + What keeps the software alive are the programmers who have an accurate + mental model (theory) of how it is built and works. That mental model can + only be learned by having worked on the project while it grew or by working + alongside somebody who did, who can help you absorb the theory. Replace + enough of the programmers, and their mental models become disconnected from + the reality of the code, and the code dies. That dead code can only be + replaced by new code that has been ‘grown’ by the current programmers. - But, design is also vital because it is, to reuse Donald G. - Reinertsen’s definition from Managing the Design Factory (p. 11), - design is economically useful information that generally only becomes - useful information through validation of some sort. Otherwise it’s just - a guess. +Design and user research is an integral part of the mental model the programmer +needs to build, because none of the software components ultimately make sense +without the end-user. - The economic part usually comes from the end-user in some way. +But, design is also vital because it is, to reuse Donald G. Reinertsen’s +definition from Managing the Design Factory (p. 11), design is economically +useful information that generally only becomes useful information through +validation of some sort. Otherwise it’s just a guess. - This systemic view is inclusive by design as you can’t accurately - measure the productivity or quality of a software project unless you - look at it end to end, from idea to end-user. - * If it doesn’t work for the end-user, then it’s a failure. - * If the management is dysfunctional, then the entire system is - dysfunctional. - * If you keep starting projects based on unworkable ideas, then your - programmer productivity doesn’t matter. +The economic part usually comes from the end-user in some way. - Lines of code isn’t software development. Working software, - productively used, understood by the developers, is software - development. +This systemic view is inclusive by design as you can’t accurately measure the +productivity or quality of a software project unless you look at it end to end, +from idea to end-user. + + • If it doesn’t work for the end-user, then it’s a failure. + • If the management is dysfunctional, then the entire system is + dysfunctional. + • If you keep starting projects based on unworkable ideas, then your + programmer productivity doesn’t matter. + +Lines of code isn’t software development. Working software, productively used, +understood by the developers, is software development. A high-level crash course in language models - Language models, small or large, are today either used as autocomplete - copilots or as chatbots. Some of these language model tools would be - used by the developer, some by the manager or other staff. +Language models, small or large, are today either used as autocomplete copilots +or as chatbots. Some of these language model tools would be used by the +developer, some by the manager or other staff. - I’m treating generative media and image models as a separate topic, - even when they’re used by people in the software industry to generate - icons, graphics, or even UIs. They matter as well, but don’t have the - same direct impact on software quality. +I’m treating generative media and image models as a separate topic, even when +they’re used by people in the software industry to generate icons, graphics, or +even UIs. They matter as well, but don’t have the same direct impact on +software quality. - To understand the role these systems could play in software - development, we need a little bit more detail on what language models - are, how they are made, and how they work. +To understand the role these systems could play in software development, we +need a little bit more detail on what language models are, how they are made, +and how they work. - Most modern machine learning models are layered networks of parameters, - each representing its connection to its neighbouring parameters. In a - modern transformer-based language model most of these parameters are - floating point numbers—weights—that describe the connection. Positive - numbers are an excitatory connection. Negative numbers are inhibitory. +Most modern machine learning models are layered networks of parameters, each +representing its connection to its neighbouring parameters. In a modern +transformer-based language model most of these parameters are floating point +numbers—weights—that describe the connection. Positive numbers are an +excitatory connection. Negative numbers are inhibitory. - These models are built by feeding data through a tokeniser that breaks - text into tokens—often one word per token—that are ultimately fed into - an algorithm. That algorithm constructs the network, node by node, - layer by layer, based on the relationships it calculates between the - tokens/words. This is done in several runs and, usually, the developer - of the model will evaluate after each run that the model is progressing - in the right direction, with some doing more thorough evaluation at - specific checkpoints. +These models are built by feeding data through a tokeniser that breaks text +into tokens—often one word per token—that are ultimately fed into an algorithm. +That algorithm constructs the network, node by node, layer by layer, based on +the relationships it calculates between the tokens/words. This is done in +several runs and, usually, the developer of the model will evaluate after each +run that the model is progressing in the right direction, with some doing more +thorough evaluation at specific checkpoints. - The network is, in a very fundamental way, a mathematical derivation of - the language in the data. +The network is, in a very fundamental way, a mathematical derivation of the +language in the data. - A language model is constructed from the data. The transformer code - regulates and guides the process, but the distributions within the data - set are what defines the network. +A language model is constructed from the data. The transformer code regulates +and guides the process, but the distributions within the data set are what +defines the network. - This process takes time—both collecting and managing the data set and - the build process itself—which inevitably introduces a cut-off point - for the data set. For OpenAI and Anthropic, that cut-off point is in - 2021. For Google’s PaLM2 it’s early 2023. - __________________________________________________________________ +This process takes time—both collecting and managing the data set and the build +process itself—which inevitably introduces a cut-off point for the data set. +For OpenAI and Anthropic, that cut-off point is in 2021. For Google’s PaLM2 +it’s early 2023. - Aside: not a brain +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - This is very, very different from how a biological neural network - interacts with data. A biological brain is modified by input and - data—its environment—but its construction is derived from nutrition, - its chemical environment, and genetics. +Aside: not a brain - The data set, conversely, is a deep and fundamental part of the - language model. The algorithm’s code provides the process while the - weights themselves are derived from the data, and the model itself is - dead and static during input and output. +This is very, very different from how a biological neural network interacts +with data. A biological brain is modified by input and data—its environment—but +its construction is derived from nutrition, its chemical environment, and +genetics. - The construction process of a neural network is called “training”, - which is yet another incredibly inaccurate term used by the industry. - * A pregnant mother isn’t “training” the fetus. - * A language model isn’t “trained” from the data, but constructed. +The data set, conversely, is a deep and fundamental part of the language model. +The algorithm’s code provides the process while the weights themselves are +derived from the data, and the model itself is dead and static during input and +output. - This is nonsense. +The construction process of a neural network is called “training”, which is yet +another incredibly inaccurate term used by the industry. - But this is the term that the AI industry uses, so we’re stuck with it. + • A pregnant mother isn’t “training” the fetus. + • A language model isn’t “trained” from the data, but constructed. - A language model is a mathematical model built as a derivation of its - training data. There is no actual training, only construction. +This is nonsense. - This is also why it’s inaccurate to say that these systems are inspired - by their training data. Even though genes and nutrition make an - artist’s mind they are not in what any reasonable person would call - “their inspiration”. Even when they are sought out for study and - genuine inspiration, it’s our representations of our understanding of - the genes that are the true source of inspiration. Nobody sticks their - hand in a gelatinous puddle of DNA and spontaneously gets inspired by - the data it encodes. +But this is the term that the AI industry uses, so we’re stuck with it. - Training data are construction materials for a language models. A - language model can never be inspired. It is itself a cultural artefact - derived from other cultural artefacts. +A language model is a mathematical model built as a derivation of its training +data. There is no actual training, only construction. - The machine learning process is loosely based on decades-old grossly - simplified models of how brains work. +This is also why it’s inaccurate to say that these systems are inspired by +their training data. Even though genes and nutrition make an artist’s mind they +are not in what any reasonable person would call “their inspiration”. Even when +they are sought out for study and genuine inspiration, it’s our representations +of our understanding of the genes that are the true source of inspiration. +Nobody sticks their hand in a gelatinous puddle of DNA and spontaneously gets +inspired by the data it encodes. - A biological neuron is a complex system in its own right—one of the - more complex cells in an animal’s body. In a living brain, a biological - neuron will use electricity, multiple different classes of - neurotransmitters, and timing to accomplish its function in ways that - we still don’t fully understand. It even has its own [21]built-in - engine for chemical energy. +Training data are construction materials for a language models. A language +model can never be inspired. It is itself a cultural artefact derived from +other cultural artefacts. - The brain as a whole is composed of not just a massive neural network, - but also layers of hormonal chemical networks that dynamically modify - its function, both granularly and as a whole. +The machine learning process is loosely based on decades-old grossly simplified +models of how brains work. - The digital neuron—a single signed floating point number—is to a - biological neuron what a flat-head screwdriver is to a Tesla. +A biological neuron is a complex system in its own right—one of the more +complex cells in an animal’s body. In a living brain, a biological neuron will +use electricity, multiple different classes of neurotransmitters, and timing to +accomplish its function in ways that we still don’t fully understand. It even +has its own [19]built-in engine for chemical energy. - They both contain metal and that’s about the extent of their - similarity. +The brain as a whole is composed of not just a massive neural network, but also +layers of hormonal chemical networks that dynamically modify its function, both +granularly and as a whole. - The human brain contains roughly 100 billion neuron cells, a layered - chemical network, and a cerebrovascular system that all integrate as a - whole to create a functioning, self-aware system capable of general - reasoning and autonomous behaviour. This system is multiple orders of - magnitude more complex than even the largest language model to date, - both in terms of individual neuron structure, and taken as a whole. +The digital neuron—a single signed floating point number—is to a biological +neuron what a flat-head screwdriver is to a Tesla. - It’s important to remember this so that we don’t fall for marketing - claims that constantly imply that these tools are fully functioning - assistants. - __________________________________________________________________ +They both contain metal and that’s about the extent of their similarity. - The prompt +The human brain contains roughly 100 billion neuron cells, a layered chemical +network, and a cerebrovascular system that all integrate as a whole to create a +functioning, self-aware system capable of general reasoning and autonomous +behaviour. This system is multiple orders of magnitude more complex than even +the largest language model to date, both in terms of individual neuron +structure, and taken as a whole. - After all of this, we have a data set which can be used to generate - text in response to prompts. +It’s important to remember this so that we don’t fall for marketing claims that +constantly imply that these tools are fully functioning assistants. - Prompts such as: +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Who was the first man on the moon? +The prompt - The input phrase, or prompt, has no structure beyond the linguistic. - It’s just a blob of text. You can’t give the model commands or - parameters separately from other input. Because of this, if your model - lets a third party enter text, an attacker will always be able to - bypass whatever restrictions you put on it. Control prompts or prefixes - will be discovered and countermanded. Delimiters don’t work. - Fine-tuning the model only limits the harm, but doesn’t prevent it. +After all of this, we have a data set which can be used to generate text in +response to prompts. - This is called a prompt injection and what it means is that model input - can’t be secured. You have to assume that anybody that can send text to - the model has full access to it. +Prompts such as: - Language models need to be treated like an unsecured client and only - very carefully integrated into other systems. + Who was the first man on the moon? - The response +The input phrase, or prompt, has no structure beyond the linguistic. It’s just +a blob of text. You can’t give the model commands or parameters separately from +other input. Because of this, if your model lets a third party enter text, an +attacker will always be able to bypass whatever restrictions you put on it. +Control prompts or prefixes will be discovered and countermanded. Delimiters +don’t work. Fine-tuning the model only limits the harm, but doesn’t prevent it. - What you’re likely to get back from that prompt would be something - like: +This is called a prompt injection and what it means is that model input can’t +be secured. You have to assume that anybody that can send text to the model has +full access to it. - On July 20, 1969, Neil Armstrong became the first human to step on - the moon. +Language models need to be treated like an unsecured client and only very +carefully integrated into other systems. - This is NASA’s own phrasing. Most answers on the web are likely to be - variations on this, so the answer from a language model is likely to be - so too. - * The moon landing happens to be a fact, but the language model only - knows it as a text. +The response - The prompt we provided is strongly associated in the training data set - with other sentences that are all variations of NASA’s phrasing of the - answer. The model won’t answer with just “Neil Armstrong” because it - isn’t actually answering the question, it’s responding with the text - that correlates with the question. It doesn’t “know” anything. - * The language model is fabricating a mathematically plausible - response, based on word distributions in the training data. - * There are no facts in a language model or its output. Only - memorised text. +What you’re likely to get back from that prompt would be something like: - It only fabricates. It’s all “hallucinations” all the way down. + On July 20, 1969, Neil Armstrong became the first human to step on the + moon. - Occasionally those fabrications correlate with facts, but that is a - mathematical quirk resulting from the fact that, on average, what - people write roughly correlates with their understanding of a factual - reality, which in turn roughly correlates with a factual reality. +This is NASA’s own phrasing. Most answers on the web are likely to be +variations on this, so the answer from a language model is likely to be so too. - A knowledge system? + • The moon landing happens to be a fact, but the language model only knows it + as a text. - To be able to answer that question and pass as a knowledge system, the - model needs to memorise the answer, or at least parts of the phrase. +The prompt we provided is strongly associated in the training data set with +other sentences that are all variations of NASA’s phrasing of the answer. The +model won’t answer with just “Neil Armstrong” because it isn’t actually +answering the question, it’s responding with the text that correlates with the +question. It doesn’t “know” anything. - Because “AI” vendors are performing a sleight-of-hand here and - presenting statistical language synthesis engines as knowledge - retrieval systems, their focus in training and testing is on “facts” - and minimising “falsehoods”. The model has no notion of either, as it’s - entirely a language model, so the only way to square this circle is for - the model to memorise it all. - * To be able to answer a question factually, not “hallucinate”, and - pass as a knowledge system, the model needs to memorise the answer. - * The model doesn’t know facts, only text. - * If you want a fact from it, the model will need to memorise text - that correlates with that fact. + • The language model is fabricating a mathematically plausible response, + based on word distributions in the training data. + • There are no facts in a language model or its output. Only memorised text. - “Dr. AI”? +It only fabricates. It’s all “hallucinations” all the way down. - Vendors then compound this by using human exams as benchmarks for - reasoning performance. The problem is that bar exams, medical exams, - and diagnosis tests are specifically designed to mostly test rote - memorisation. That’s what they’re for. +Occasionally those fabrications correlate with facts, but that is a +mathematical quirk resulting from the fact that, on average, what people write +roughly correlates with their understanding of a factual reality, which in turn +roughly correlates with a factual reality. - The human brain is bad at rote memorisation and generally it only - happens with intensive work and practice. If you want to design a test - that’s specifically intended to verify that somebody has spent a large - amount of time studying a subject, you test for rote memorisation. +A knowledge system? - Many other benchmarks they use, such as those related to programming - languages also require memorisation, otherwise the systems would just - constantly make up APIs. - * Vendors use human exams as benchmarks. - * These are specifically designed to test rote memorisation, because - that’s hard for humans. - * Programming benchmarks also require memorisation. Otherwise, you’d - only get pseudocode. +To be able to answer that question and pass as a knowledge system, the model +needs to memorise the answer, or at least parts of the phrase. - Between the tailoring of these systems for knowledge retrieval, and the - use of rote memorisation exams and code generation as benchmarks, the - tech industry has created systems where memorisation is a core part of - how they function. In all research to date, memorisation has been key - to language model performance in a range of benchmarks.^[22][1] +Because “AI” vendors are performing a sleight-of-hand here and presenting +statistical language synthesis engines as knowledge retrieval systems, their +focus in training and testing is on “facts” and minimising “falsehoods”. The +model has no notion of either, as it’s entirely a language model, so the only +way to square this circle is for the model to memorise it all. - If you’re familiar with storytelling devices, this here would be a - [23]Chekhov’s gun. Observe! The gun is above the mantelpiece: + • To be able to answer a question factually, not “hallucinate”, and pass as a + knowledge system, the model needs to memorise the answer. + • The model doesn’t know facts, only text. + • If you want a fact from it, the model will need to memorise text that + correlates with that fact. - 👉🏻👉🏻 memorisation! +“Dr. AI”? - Make a note of it, because those finger guns are going to be fired - later. +Vendors then compound this by using human exams as benchmarks for reasoning +performance. The problem is that bar exams, medical exams, and diagnosis tests +are specifically designed to mostly test rote memorisation. That’s what they’re +for. - Biases +The human brain is bad at rote memorisation and generally it only happens with +intensive work and practice. If you want to design a test that’s specifically +intended to verify that somebody has spent a large amount of time studying a +subject, you test for rote memorisation. - Beyond question and answer, these systems are great at generating the - averagely plausible text for a given prompt. In prose, current system - output smells vaguely of sweaty-but-quiet LinkedIn desperation and - over-enthusiastic social media. The general style will vary, but it’s - always going to be the most plausible style and response based on the - training data. +Many other benchmarks they use, such as those related to programming languages +also require memorisation, otherwise the systems would just constantly make up +APIs. - One consequence of how these systems are made is that they are - constantly backwards-facing. Where brains are focused on the present, - often to their detriment, “AI” models are built using historical data. + • Vendors use human exams as benchmarks. + • These are specifically designed to test rote memorisation, because that’s + hard for humans. + • Programming benchmarks also require memorisation. Otherwise, you’d only get + pseudocode. - The training data encompasses thousands of diverse voices, styles, - structures, and tones, but some word distributions will be more common - in the set than others and those will end up dominating the output. As - a result, language models tend to lean towards the “racist grandpa who - has learned to speak fluent LinkedIn” end of the spectrum.^[24][2] +Between the tailoring of these systems for knowledge retrieval, and the use of +rote memorisation exams and code generation as benchmarks, the tech industry +has created systems where memorisation is a core part of how they function. In +all research to date, memorisation has been key to language model performance +in a range of benchmarks.^[20][1] - This has implications for a whole host of use cases: - * Generated text is going to skew conservative in content and - marketing copy in structure and vocabulary. (Bigoted, prejudiced, - but polite and inoffensively phrased.) - * Even when the cut-off date for the data set is recent, it’s still - going to skew historical because what’s new is also comparatively - smaller than the old. - * Language models will always skew towards the more common, middling, - mediocre, and predictable. - * Because most of these models are trained on the web, much of which - is unhinged, violent, pornographic, and abusive, some of that - language will be represented in the output. +If you’re familiar with storytelling devices, this here would be a [21] +Chekhov’s gun. Observe! The gun is above the mantelpiece: - Modify, summarise, and “reason” + 👉🏻👉🏻 memorisation! - The superpower that these systems provide is conversion or - modification. They can, generally, take text and convert it to another - style or structure. Take this note and turn it into a formal prose, and - it will! That’s amazing. I don’t think that’s a trillion-dollar - industry, but it’s a neat feature that will definitely be useful. +Make a note of it, because those finger guns are going to be fired later. - They can summarise text too, but that’s much less reliable than you’d - expect. It unsurprisingly works best with text that already provides - its own summary, such as a newspaper article (first paragraphs always - summarise the story), academic paper (the abstract), or corporate - writing (executive summary). Anything that’s a mix of styles, voices, - or has an unusual structure won’t work as well. +Biases - What little reasoning they do is entirely based on finding through - correlation and re-enacting prior textual descriptions of reasoning. - They fail utterly when confronted with adversarial or novel examples. - They also fail if you rephrase the question so that it no longer - correlates with the phrasing in the data set.^[25][3] +Beyond question and answer, these systems are great at generating the averagely +plausible text for a given prompt. In prose, current system output smells +vaguely of sweaty-but-quiet LinkedIn desperation and over-enthusiastic social +media. The general style will vary, but it’s always going to be the most +plausible style and response based on the training data. - So, not actual reasoning. “Reasoning”, if you will. In other “AI” model - genres these correlations are often called “shortcuts”, which feels - apt. +One consequence of how these systems are made is that they are constantly +backwards-facing. Where brains are focused on the present, often to their +detriment, “AI” models are built using historical data. - To summarise: - * Language models are a mathematical expression of the training data - set. - * Have very little in common with human brains. - * Rely on inputs that can’t be secured. - * Lie. Everything they output is a fabrication. - * Memorise heavily. - * Great for modifying text. No sarcasm. Genuinely good at this. - * Occasionally useful for summarisation if you don’t mind being lied - to regularly. - * Don’t actually reason. +The training data encompasses thousands of diverse voices, styles, structures, +and tones, but some word distributions will be more common in the set than +others and those will end up dominating the output. As a result, language +models tend to lean towards the “racist grandpa who has learned to speak fluent +LinkedIn” end of the spectrum.^[22][2] + +This has implications for a whole host of use cases: + + • Generated text is going to skew conservative in content and marketing copy + in structure and vocabulary. (Bigoted, prejudiced, but polite and + inoffensively phrased.) + • Even when the cut-off date for the data set is recent, it’s still going to + skew historical because what’s new is also comparatively smaller than the + old. + • Language models will always skew towards the more common, middling, + mediocre, and predictable. + • Because most of these models are trained on the web, much of which is + unhinged, violent, pornographic, and abusive, some of that language will be + represented in the output. + +Modify, summarise, and “reason” + +The superpower that these systems provide is conversion or modification. They +can, generally, take text and convert it to another style or structure. Take +this note and turn it into a formal prose, and it will! That’s amazing. I don’t +think that’s a trillion-dollar industry, but it’s a neat feature that will +definitely be useful. + +They can summarise text too, but that’s much less reliable than you’d expect. +It unsurprisingly works best with text that already provides its own summary, +such as a newspaper article (first paragraphs always summarise the story), +academic paper (the abstract), or corporate writing (executive summary). +Anything that’s a mix of styles, voices, or has an unusual structure won’t work +as well. + +What little reasoning they do is entirely based on finding through correlation +and re-enacting prior textual descriptions of reasoning. They fail utterly when +confronted with adversarial or novel examples. They also fail if you rephrase +the question so that it no longer correlates with the phrasing in the data set. +^[23][3] + +So, not actual reasoning. “Reasoning”, if you will. In other “AI” model genres +these correlations are often called “shortcuts”, which feels apt. + +To summarise: + + • Language models are a mathematical expression of the training data set. + • Have very little in common with human brains. + • Rely on inputs that can’t be secured. + • Lie. Everything they output is a fabrication. + • Memorise heavily. + • Great for modifying text. No sarcasm. Genuinely good at this. + • Occasionally useful for summarisation if you don’t mind being lied to + regularly. + • Don’t actually reason. Why I believe “AI” for programming is a bad idea - If you recall from the start of this essay, I began my research into - machine learning and language models because I was curious to see if - they could help fix or improve the mess that is modern software - development. +If you recall from the start of this essay, I began my research into machine +learning and language models because I was curious to see if they could help +fix or improve the mess that is modern software development. - There was reason to be hopeful. Programming languages are more uniform - and structured than prose, so it’s not too unreasonable to expect that - they might lend themselves to language models. Programming language - output can often be tested directly, which might help with the - evaluation of each training run. +There was reason to be hopeful. Programming languages are more uniform and +structured than prose, so it’s not too unreasonable to expect that they might +lend themselves to language models. Programming language output can often be +tested directly, which might help with the evaluation of each training run. - Training a language model on code also seems to benefit the model. - Models that include substantial code in their data set tend to be - better at correlative “reasoning” (to a point, still not actual - reasoning), which makes sense since code is all about representing - structured logic in text. +Training a language model on code also seems to benefit the model. Models that +include substantial code in their data set tend to be better at correlative +“reasoning” (to a point, still not actual reasoning), which makes sense since +code is all about representing structured logic in text. - But, there is an inherent [26]Catch 22 to any attempt at fixing - software industry dysfunction with more software. The structure of the - industry depends entirely on variables that everybody pretends are - proxies for end user value, but generally aren’t. This will always tend - to sabotage our efforts at industrial self-improvement. +But, there is an inherent [24]Catch 22 to any attempt at fixing software +industry dysfunction with more software. The structure of the industry depends +entirely on variables that everybody pretends are proxies for end user value, +but generally aren’t. This will always tend to sabotage our efforts at +industrial self-improvement. - The more I studied language models as a technology the more flaws I - found until it became clear to me that odds are that the overall effect - on software development will be harmful. The problem starts with the - models themselves. +The more I studied language models as a technology the more flaws I found until +it became clear to me that odds are that the overall effect on software +development will be harmful. The problem starts with the models themselves. - 1. Language models can’t be secured +1. Language models can’t be secured - This first issue has less to do with the use of language models for - software development and more to do with their use in software - products, which is likely to be a priority for many software companies - over the next few years. +This first issue has less to do with the use of language models for software +development and more to do with their use in software products, which is likely +to be a priority for many software companies over the next few years. - Prompt injections are not a solved problem. OpenAI has come up with a - few “solutions” in the past, but none of them actually worked. - Everybody expects this to be fixed, but nobody has a clue how. +Prompt injections are not a solved problem. OpenAI has come up with a few +“solutions” in the past, but none of them actually worked. Everybody expects +this to be fixed, but nobody has a clue how. - Language models are fundamentally based on the idea that you give it - text as input and get text as output. It’s entirely possible that the - only way to completely fix this is to invent a completely new kind of - language model and spend a few years training it from scratch. - * A language model needs to be treated like an unsecured client. It’s - about as secure as a web page form. It’s vulnerable to a new - generation of injection vulnerabilities, both direct and indirect, - that we still don’t quite understand.^[27][4] +Language models are fundamentally based on the idea that you give it text as +input and get text as output. It’s entirely possible that the only way to +completely fix this is to invent a completely new kind of language model and +spend a few years training it from scratch. - The training data set itself is also a security hazard. I’ve gone into - this in more detail elsewhere^[28][5], but the short version is that - training data set is vulnerable to keyword manipulation, both in terms - of altering sentiment and censorship. + • A language model needs to be treated like an unsecured client. It’s about + as secure as a web page form. It’s vulnerable to a new generation of + injection vulnerabilities, both direct and indirect, that we still don’t + quite understand.^[25][4] - Again, fully defending against this kind of attack would seem to - require inventing a completely new kind of language model. +The training data set itself is also a security hazard. I’ve gone into this in +more detail elsewhere^[26][5], but the short version is that training data set +is vulnerable to keyword manipulation, both in terms of altering sentiment and +censorship. - Neither of these issues affect the use of language models for software - development, but it does affect our work because we’re the ones who - will be expected to integrate these systems into existing websites and - products. +Again, fully defending against this kind of attack would seem to require +inventing a completely new kind of language model. - 2. It encourages the worst of our management and development practices +Neither of these issues affect the use of language models for software +development, but it does affect our work because we’re the ones who will be +expected to integrate these systems into existing websites and products. - A language model will never question, push back, doubt, hesitate, or - waver. +2. It encourages the worst of our management and development practices - Your managers are going to use it to flesh out and describe unworkable - ideas, and it won’t complain. The resulting spec won’t have any bearing - with reality. +A language model will never question, push back, doubt, hesitate, or waver. - People on your team will do “user research” by asking a language model, - which it will do even though the resulting research will be fiction and - entirely useless. +Your managers are going to use it to flesh out and describe unworkable ideas, +and it won’t complain. The resulting spec won’t have any bearing with reality. - It’ll let you implement the worst ideas ever in your code without - protest. Ask a copilot “how can I roll my own cryptography?” and it’ll - regurgitate a half-baked expression of sha1 in PHP for you. +People on your team will do “user research” by asking a language model, which +it will do even though the resulting research will be fiction and entirely +useless. - Think of all the times you’ve had an idea for an approach, looked up - how to do it on the web, and found out that, no, this was a really bad - idea? I have a couple of those every week when I’m in the middle of a - project. +It’ll let you implement the worst ideas ever in your code without protest. Ask +a copilot “how can I roll my own cryptography?” and it’ll regurgitate a +half-baked expression of sha1 in PHP for you. - Language models don’t deliver productivity improvements. They increase - the volume, unchecked by reason. +Think of all the times you’ve had an idea for an approach, looked up how to do +it on the web, and found out that, no, this was a really bad idea? I have a +couple of those every week when I’m in the middle of a project. - A core aspect of the theory-building model of software development is - code that developers don’t understand is a liability. It means your - mental model of the software is inaccurate which will lead you to - create bugs as you modify it or add other components that interact with - pieces you don’t understand. +Language models don’t deliver productivity improvements. They increase the +volume, unchecked by reason. - Language model tools for software development are specifically designed - to create large volumes of code that the programmer doesn’t understand. - They are liability engines for all but the most experienced developer. - You can’t solve this problem by having the “AI” understand the codebase - and how its various components interact with each other because a - language model isn’t a mind. It can’t have a mental model of anything. - It only works through correlation. +A core aspect of the theory-building model of software development is code that +developers don’t understand is a liability. It means your mental model of the +software is inaccurate which will lead you to create bugs as you modify it or +add other components that interact with pieces you don’t understand. - These tools will indeed make you go faster, but it’s going to be - accelerating in the wrong direction. That is objectively worse than - just standing still. +Language model tools for software development are specifically designed to +create large volumes of code that the programmer doesn’t understand. They are +liability engines for all but the most experienced developer. You can’t solve +this problem by having the “AI” understand the codebase and how its various +components interact with each other because a language model isn’t a mind. It +can’t have a mental model of anything. It only works through correlation. - 3. Its User Interfaces do not work, and we haven’t found interfaces that do - work +These tools will indeed make you go faster, but it’s going to be accelerating +in the wrong direction. That is objectively worse than just standing still. - Human factors studies, the field responsible for designing cockpits and - the like, discovered that humans suffer from an automation bias. +3. Its User Interfaces do not work, and we haven’t found interfaces that do +work - What it means is that when you have cognitive automation—something that - helps you think less—you inevitably think less. That means that you are - less critical of the output than if you were doing it yourself. That’s - potentially catastrophic when the output is code, especially since the - quality of the generated code is, understandably considering how the - system works, broadly on the level of a novice developer.^[29][6] +Human factors studies, the field responsible for designing cockpits and the +like, discovered that humans suffer from an automation bias. - Copilots and chatbots—exacerbated by anthropomorphism—seem to trigger - our automation biases. +What it means is that when you have cognitive automation—something that helps +you think less—you inevitably think less. That means that you are less critical +of the output than if you were doing it yourself. That’s potentially +catastrophic when the output is code, especially since the quality of the +generated code is, understandably considering how the system works, broadly on +the level of a novice developer.^[27][6] - Microsoft themselves have said that 40% of GitHub Copilot’s output is - committed unchanged.^[30][7] +Copilots and chatbots—exacerbated by anthropomorphism—seem to trigger our +automation biases. - Let’s not get into the question of how we, as an industry, put - ourselves in the position where Microsoft can follow a line of code - from their language model, through your text editor, and into your - supposedly decentralised version control system. +Microsoft themselves have said that 40% of GitHub Copilot’s output is committed +unchanged.^[28][7] - People overwhelmingly seem to trust the output of a language model. +Let’s not get into the question of how we, as an industry, put ourselves in the +position where Microsoft can follow a line of code from their language model, +through your text editor, and into your supposedly decentralised version +control system. - If it runs without errors, it must be fine. +People overwhelmingly seem to trust the output of a language model. - But that’s never the case. We all know this. We’ve all seen running - code turn out to be buggy as hell. But something in our mind switches - off when we use tools for cognitive automation. +If it runs without errors, it must be fine. - 4. It’s biased towards the stale and popular +But that’s never the case. We all know this. We’ve all seen running code turn +out to be buggy as hell. But something in our mind switches off when we use +tools for cognitive automation. - The biases inherent in these language models are bad enough when it - comes to prose, but they become a functional problem in code. - * Its JS code will lean towards React and node, most of it several - versions old, and away from the less popular corners of the JS - ecosystem. - * The code is, inevitably, more likely to be built around CommonJS - modules instead of the modern ESM modules. - * It won’t know much about Deno or Cloudflare Workers. - * It’ll always prefer older APIs over new. Most of these models won’t - know about any API or module released after 2021. This is going to - be an issue for languages such as Swift. - * New platforms and languages don’t exist to it. - * Existing data will outweigh deprecations and security issues. - * Popular but obsolete or outdated open source projects will always - win out over the up-to-date equivalent. +4. It’s biased towards the stale and popular - These systems live in the popular past, like the middle-aged man who - doesn’t realise he isn’t the popular kid at school any more. Everything - he thinks is cool is actually very much not cool. More the other thing. +The biases inherent in these language models are bad enough when it comes to +prose, but they become a functional problem in code. - This is an issue for software because our industry is entirely - structured around constant change. Software security hinges on it. All - of our practices are based on constant march towards the new and fancy. - We go from framework to framework to try and find the magic solution - that will solve everything. In some cases language models might help - push back against that, but it’ll also push back against all the very - many changes that are necessary because the old stuff turned out to be - broken. - * The software industry is built on change. - * Language models are built on a static past. + • Its JS code will lean towards React and node, most of it several versions + old, and away from the less popular corners of the JS ecosystem. + • The code is, inevitably, more likely to be built around CommonJS modules + instead of the modern ESM modules. + • It won’t know much about Deno or Cloudflare Workers. + • It’ll always prefer older APIs over new. Most of these models won’t know + about any API or module released after 2021. This is going to be an issue + for languages such as Swift. + • New platforms and languages don’t exist to it. + • Existing data will outweigh deprecations and security issues. + • Popular but obsolete or outdated open source projects will always win out + over the up-to-date equivalent. - 5. No matter how the lawsuits go, this threatens the existence of free and - open source software +These systems live in the popular past, like the middle-aged man who doesn’t +realise he isn’t the popular kid at school any more. Everything he thinks is +cool is actually very much not cool. More the other thing. - Many AI vendors are mired in lawsuits.^[31][8] +This is an issue for software because our industry is entirely structured +around constant change. Software security hinges on it. All of our practices +are based on constant march towards the new and fancy. We go from framework to +framework to try and find the magic solution that will solve everything. In +some cases language models might help push back against that, but it’ll also +push back against all the very many changes that are necessary because the old +stuff turned out to be broken. - These lawsuits all concentrate on the relationship between the training - data set and the model and they do so from a variety of angles. Some - are based on contract and licensing law. Others are claiming that the - models violate fair use. It’s hard to predict how they will go. They - might not all go the same way, as laws will vary across industries and - jurisdictions. + • The software industry is built on change. + • Language models are built on a static past. - No matter the result, we’re likely to be facing a major decline in the - free and open source ecosystem. - 1. All of these models are trained on open source code without payment - or even acknowledgement, which is a major disincentive for - contributors and maintainers. That large corporations might benefit - from your code is a fixture of open source, but they do - occasionally give back to the community. - 2. Language models—built on open source code—commonly replace that - code. Instead of importing a module to do a thing, you prompt your - Copilot. The code generated is almost certainly based on the open - source module, at least partially, but it has been laundered - through the language model, disconnecting the programmer from the - community, recognition, and what little reward there was. +5. No matter how the lawsuits go, this threatens the existence of free and open +source software - Language models demotivate maintainers and drain away both resources - and users. What you’re likely to be left with are those who are - building core infrastructure or end-user software out of principle. The - “free software” side of the community is more likely to survive than - the rest. The Linux kernel, Gnome, KDE—that sort of thing. +Many AI vendors are mired in lawsuits.^[29][8] - The “open source” ecosystem, especially that surrounding the web and - node, is likely to be hit the hardest. The more driven the open source - project was by its proximity to either an employed contributor or - actively dependent business, the bigger the impact from a shift to - language models will be. +These lawsuits all concentrate on the relationship between the training data +set and the model and they do so from a variety of angles. Some are based on +contract and licensing law. Others are claiming that the models violate fair +use. It’s hard to predict how they will go. They might not all go the same way, +as laws will vary across industries and jurisdictions. - This is a serious problem for the software industry as arguably much of - the economic value the industry has provided over the past decade comes - from strip-mining open source and free software. +No matter the result, we’re likely to be facing a major decline in the free and +open source ecosystem. - 6. Licence contamination + 1. All of these models are trained on open source code without payment or even + acknowledgement, which is a major disincentive for contributors and + maintainers. That large corporations might benefit from your code is a + fixture of open source, but they do occasionally give back to the + community. + 2. Language models—built on open source code—commonly replace that code. + Instead of importing a module to do a thing, you prompt your Copilot. The + code generated is almost certainly based on the open source module, at + least partially, but it has been laundered through the language model, + disconnecting the programmer from the community, recognition, and what + little reward there was. - Microsoft and Google don’t train their language models on their own - code. GitHub’s Copilot isn’t trained on code from Microsoft’s office - suite, even though many of its products are likely to be some of the - largest React Native projects in existence. There aren’t many C++ code - bases as big as Windows. Google’s repository is probably one of the - biggest collection of python and java code you can find. +Language models demotivate maintainers and drain away both resources and users. +What you’re likely to be left with are those who are building core +infrastructure or end-user software out of principle. The “free software” side +of the community is more likely to survive than the rest. The Linux kernel, +Gnome, KDE—that sort of thing. - They don’t seem to use it for training, but instead train on - collections of open source code that contain both permissive and - copyleft licences. +The “open source” ecosystem, especially that surrounding the web and node, is +likely to be hit the hardest. The more driven the open source project was by +its proximity to either an employed contributor or actively dependent business, +the bigger the impact from a shift to language models will be. - Copyleft licences, if used, force you to release your own project under - their licence. Many of them, even non-copyleft, have patent clauses, - which is poison for quite a few employers. Even permissive licences - require attribution, and you can absolutely get sued if you’re caught - copying open source code without attribution. +This is a serious problem for the software industry as arguably much of the +economic value the industry has provided over the past decade comes from +strip-mining open source and free software. - Remember our Chekhov’s gun? +6. Licence contamination - 👉🏻👉🏻 memorisation! +Microsoft and Google don’t train their language models on their own code. +GitHub’s Copilot isn’t trained on code from Microsoft’s office suite, even +though many of its products are likely to be some of the largest React Native +projects in existence. There aren’t many C++ code bases as big as Windows. +Google’s repository is probably one of the biggest collection of python and +java code you can find. - Well, 👉🏻👉🏻 pewpew!!! +They don’t seem to use it for training, but instead train on collections of +open source code that contain both permissive and copyleft licences. - Turns out blindly copying open source code is problematic. - Whodathunkit? +Copyleft licences, if used, force you to release your own project under their +licence. Many of them, even non-copyleft, have patent clauses, which is poison +for quite a few employers. Even permissive licences require attribution, and +you can absolutely get sued if you’re caught copying open source code without +attribution. - These models all memorise a lot, and they tend to copy what they - memorise into their output. [32]GitHub’s own numbers peg verbatim - copies of code that’s at least 150 characters at 1%^[33][9], which is - roughly the same, in terms of verbatim copying, as what you seem to get - in other language models. +Remember our Chekhov’s gun? - For context, that means that if you use a language model for - development, a copilot or chatbot, three or four times a day, you’re - going to get a verbatim copy of open source code injected into your - project about once a month. If every team member uses one, then - multiply that by the size of the team. + 👉🏻👉🏻 memorisation! - GitHub’s Copilot has a feature that lets you block verbatim copies. - This obviously requires both a check, which slows the result down, and - it will throw out a bunch of useful results, making the language model - less useful. It’s already not as useful as it’s made out to be and - pretty darn slow so many people are going to turn off the “please don’t - plagiarise” checkbox. +Well, 👉🏻👉🏻 pewpew!!! - But even GitHub’s checks are insufficient. The keyword there is - “verbatim”, because language models have a tendency to rephrase their - output. If GitHub Copilot copies a GPLed implementation of an algorithm - into your project but changes all the variable names, Copilot won’t - detect it, it’ll still be plagiarism and the copied code is still under - the GPL. This isn’t unlikely as this is how language models work. - Memorisation and then copying with light rephrasing is what they do. +Turns out blindly copying open source code is problematic. Whodathunkit? - Training the system only on permissively licensed code doesn’t solve - the problem. It won’t force your project to adopt an MIT licence or - anything like that, but you can still be sued if it’s discovered. +These models all memorise a lot, and they tend to copy what they memorise into +their output. [30]GitHub’s own numbers peg verbatim copies of code that’s at +least 150 characters at 1%^[31][9], which is roughly the same, in terms of +verbatim copying, as what you seem to get in other language models. - This would seem to give Microsoft and GitHub a good reason not to train - on the Office code base, for example. If they did, there’s a good - chance that a prompt to generate DOCX parsing code might “generate” a - verbatim copy of the DOCX parsing code from Microsoft Word. +For context, that means that if you use a language model for development, a +copilot or chatbot, three or four times a day, you’re going to get a verbatim +copy of open source code injected into your project about once a month. If +every team member uses one, then multiply that by the size of the team. - And they can’t have that, can they? This would both undercut their own - strategic advantage, and it would break the illusion that these systems - are generating novel code from scratch. +GitHub’s Copilot has a feature that lets you block verbatim copies. This +obviously requires both a check, which slows the result down, and it will throw +out a bunch of useful results, making the language model less useful. It’s +already not as useful as it’s made out to be and pretty darn slow so many +people are going to turn off the “please don’t plagiarise” checkbox. - This should make it clear that what they’re actually doing is - strip-mine the free and open source software ecosystem. +But even GitHub’s checks are insufficient. The keyword there is “verbatim”, +because language models have a tendency to rephrase their output. If GitHub +Copilot copies a GPLed implementation of an algorithm into your project but +changes all the variable names, Copilot won’t detect it, it’ll still be +plagiarism and the copied code is still under the GPL. This isn’t unlikely as +this is how language models work. Memorisation and then copying with light +rephrasing is what they do. - How much of a problem is this? +Training the system only on permissively licensed code doesn’t solve the +problem. It won’t force your project to adopt an MIT licence or anything like +that, but you can still be sued if it’s discovered. - —It won’t matter. I won’t get caught. +This would seem to give Microsoft and GitHub a good reason not to train on the +Office code base, for example. If they did, there’s a good chance that a prompt +to generate DOCX parsing code might “generate” a verbatim copy of the DOCX +parsing code from Microsoft Word. - You personally won’t get caught, but your employer might, and - Intellectual Property scans or similar code audits tend to come up at - the absolute worst moments in the history of any given organisation: - * During due diligence for an acquisition. Could cost the company and - managers a fortune. - * In discovery for an unrelated lawsuit. Again, could cost the - company a fortune. - * During hacks and other security incidents. Could. Cost. A. Fortune. +And they can’t have that, can they? This would both undercut their own +strategic advantage, and it would break the illusion that these systems are +generating novel code from scratch. - “AI” vendors won’t take any responsibility for this risk. I doubt your - business insurance covers “automated language model plagiarism” - lawsuits. +This should make it clear that what they’re actually doing is strip-mine the +free and open source software ecosystem. - Language models for software development are a lawsuit waiting to - happen. +How much of a problem is this? - Unless they are completely reinvented from scratch, language model code - generators are, in my opinion, unsuitable for anything except for - prototypes and throwaway projects. +—It won’t matter. I won’t get caught. + +You personally won’t get caught, but your employer might, and Intellectual +Property scans or similar code audits tend to come up at the absolute worst +moments in the history of any given organisation: + + • During due diligence for an acquisition. Could cost the company and + managers a fortune. + • In discovery for an unrelated lawsuit. Again, could cost the company a + fortune. + • During hacks and other security incidents. Could. Cost. A. Fortune. + +“AI” vendors won’t take any responsibility for this risk. I doubt your business +insurance covers “automated language model plagiarism” lawsuits. + +Language models for software development are a lawsuit waiting to happen. + +Unless they are completely reinvented from scratch, language model code +generators are, in my opinion, unsuitable for anything except for prototypes +and throwaway projects. So, obviously, everybody’s going to use them - * All the potentially bad stuff happens later. Unlikely to affect - your bonuses or employment. - * It’ll be years before the first licence contamination lawsuits - happen. - * Most employees will be long gone before anybody realises just how - much of a bad idea it was. - * But you’ll still get that nice “AI” bump in the stock market. + • All the potentially bad stuff happens later. Unlikely to affect your + bonuses or employment. + • It’ll be years before the first licence contamination lawsuits happen. + • Most employees will be long gone before anybody realises just how much of a + bad idea it was. + • But you’ll still get that nice “AI” bump in the stock market. - What all of these problems have in common is that their impact is - delayed and most of them will only appear in the form of increased - frequency of bugs and other defects and general project chaos. +What all of these problems have in common is that their impact is delayed and +most of them will only appear in the form of increased frequency of bugs and +other defects and general project chaos. - The biggest issue, licence contamination, will likely take years before - it starts to hit the industry, and is likely to be mitigated by virtue - of the fact that many of the heaviest users of “AI”-generated code will - have folded due to general mismanagement long before anybody cares - enough to check their code. +The biggest issue, licence contamination, will likely take years before it +starts to hit the industry, and is likely to be mitigated by virtue of the fact +that many of the heaviest users of “AI”-generated code will have folded due to +general mismanagement long before anybody cares enough to check their code. - If you were ever wondering if we, as an industry, were capable of - coming up with a systemic issue to rival the Y2K bug in scale and - stupidity? Well, here you go. +If you were ever wondering if we, as an industry, were capable of coming up +with a systemic issue to rival the Y2K bug in scale and stupidity? Well, here +you go. - You can start using a language model, get the stock market bump, - present the short term increase in volume as productivity, and be long - gone before anybody connects the dots between language model use and - the jump in defects. +You can start using a language model, get the stock market bump, present the +short term increase in volume as productivity, and be long gone before anybody +connects the dots between language model use and the jump in defects. - Even if you purposefully tried to come up with a technology that played - directly into and magnified the software industry’s dysfunctions you - wouldn’t be able to come up with anything as perfectly imperfect as - these language models. +Even if you purposefully tried to come up with a technology that played +directly into and magnified the software industry’s dysfunctions you wouldn’t +be able to come up with anything as perfectly imperfect as these language +models. - It’s nonsense without consequence. +It’s nonsense without consequence. - Counterproductive novelty that you can indulge in without harming your - career. +Counterproductive novelty that you can indulge in without harming your career. - It might even do your career some good. Show that you’re embracing the - future. +It might even do your career some good. Show that you’re embracing the future. - But… +But… - The best is yet to come +The best is yet to come - In a few years’ time, once the effects of the “AI” bubble finally - dissipates… +In a few years’ time, once the effects of the “AI” bubble finally dissipates… - Somebody’s going to get paid to fix the crap it left behind. +Somebody’s going to get paid to fix the crap it left behind. - The best way to support this newsletter or my blog is to buy one of my - books, [34]The Intelligence Illusion: a practical guide to the business - risks of Generative AI or [35]Out of the Software Crisis. Or, you can - buy them both [36]as a bundle. - __________________________________________________________________ +The best way to support this newsletter or my blog is to buy one of my books, +[32]The Intelligence Illusion: a practical guide to the business risks of +Generative AI or [33]Out of the Software Crisis. Or, you can buy them both [34] +as a bundle. - 1. There’s quite a bit of papers that either highlight the tendency to - memorise or demonstrate a strong relationship between that tendency - and eventual performance. - + [37]An Empirical Study of Memorization in NLP (Zheng & Jiang, - ACL 2022) - + [38]Does learning require memorization? a short tale about a - long tail. (Feldman, 2020) - + [39]When is memorization of irrelevant training data necessary - for high-accuracy learning? (Brown et al. 2021) - + [40]What Neural Networks Memorize and Why: Discovering the - Long Tail via Influence Estimation (Feldman & Zhang, 2020) - + [41]Question and Answer Test-Train Overlap in Open-Domain - Question Answering Datasets (Lewis et al., EACL 2021) - + [42]Quantifying Memorization Across Neural Language Models - (Carlini et al. 2022) - + [43]On Training Sample Memorization: Lessons from Benchmarking - Generative Modeling with a Large-scale Competition (Bai et al. - 2021) - [44]↩︎ - 2. See the [45]Bias & Safety card at [46]needtoknow.fyi for - references. [47]↩︎ - 3. See the [48]Shortcut “Reasoning” card at [49]needtoknow.fyi for - references. [50]↩︎ - 4. Simon Willison has been covering this issue [51]in a series of blog - posts. [52]↩︎ - 5. - + [53]The poisoning of ChatGPT - + [54]Google Bard is a glorious reinvention of black-hat SEO - spam and keyword-stuffing - [55]↩︎ - 6. See, for example: - + [56]Asleep at the Keyboard? Assessing the Security of GitHub - Copilot’s Code Contributions (Hammond Pearce et al., December - 2021) - + [57]Do Users Write More Insecure Code with AI Assistants? - (Neil Perry et al., December 2022) - [58]↩︎ - 7. This came out [59]during an investor event and was presented as - evidence of the high quality of Copilot’s output. [60]↩︎ - 8. - + [61]Getty Images v. Stability AI - Complaint - + [62]Getty Images is suing the creators of AI art tool Stable - Diffusion for scraping its content - + [63]The Wave of AI Lawsuits Have Begun - + [64]Copyright lawsuits pose a serious threat to generative AI - + [65]GitHub Copilot litigation - + [66]Stable Diffusion litigation - [67]↩︎ - 9. Archived link of the [68]GitHub Copilot feature page. [69]↩︎ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 1. There’s quite a bit of papers that either highlight the tendency to + memorise or demonstrate a strong relationship between that tendency and + eventual performance. + + □ [35]An Empirical Study of Memorization in NLP (Zheng & Jiang, ACL 2022) + □ [36]Does learning require memorization? a short tale about a long tail. + (Feldman, 2020) + □ [37]When is memorization of irrelevant training data necessary for + high-accuracy learning? (Brown et al. 2021) + □ [38]What Neural Networks Memorize and Why: Discovering the Long Tail + via Influence Estimation (Feldman & Zhang, 2020) + □ [39]Question and Answer Test-Train Overlap in Open-Domain Question + Answering Datasets (Lewis et al., EACL 2021) + □ [40]Quantifying Memorization Across Neural Language Models (Carlini et + al. 2022) + □ [41]On Training Sample Memorization: Lessons from Benchmarking + Generative Modeling with a Large-scale Competition (Bai et al. 2021) + [42]↩︎ + 2. See the [43]Bias & Safety card at [44]needtoknow.fyi for references. [45]↩︎ + + 3. See the [46]Shortcut “Reasoning” card at [47]needtoknow.fyi for references. + [48]↩︎ + + 4. Simon Willison has been covering this issue [49]in a series of blog posts. + [50]↩︎ + + 5. + □ [51]The poisoning of ChatGPT + □ [52]Google Bard is a glorious reinvention of black-hat SEO spam and + keyword-stuffing + [53]↩︎ + 6. See, for example: + + □ [54]Asleep at the Keyboard? Assessing the Security of GitHub Copilot’s + Code Contributions (Hammond Pearce et al., December 2021) + □ [55]Do Users Write More Insecure Code with AI Assistants? (Neil Perry + et al., December 2022) + [56]↩︎ + 7. This came out [57]during an investor event and was presented as evidence of + the high quality of Copilot’s output. [58]↩︎ + + 8. + □ [59]Getty Images v. Stability AI - Complaint + □ [60]Getty Images is suing the creators of AI art tool Stable Diffusion + for scraping its content + □ [61]The Wave of AI Lawsuits Have Begun + □ [62]Copyright lawsuits pose a serious threat to generative AI + □ [63]GitHub Copilot litigation + □ [64]Stable Diffusion litigation + [65]↩︎ + 9. Archived link of the [66]GitHub Copilot feature page. [67]↩︎ Join the Newsletter - Subscribe to the 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 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) - Subscribe +[68][ ] +Subscribe - We respect your privacy. +We respect your privacy. - Unsubscribe at any time. +Unsubscribe at any time. - [70]Mastodon [71]Twitter [72]GitHub [73]Feed +[70]Mastodon [71]Twitter [72]GitHub [73]Feed -References +References: - 1. https://softwarecrisis.dev/index.xml - 2. https://softwarecrisis.dev/feed.json - 3. https://softwarecrisis.dev/ - 4. https://softwarecrisis.dev/ - 5. https://softwarecrisis.baldurbjarnason.com/ - 6. https://illusion.baldurbjarnason.com/ - 7. https://softwarecrisis.dev/archive/ - 8. https://softwarecrisis.dev/author/ - 9. https://www.hakkavelin.is/ - 10. https://illusion.baldurbjarnason.com/ - 11. https://softwarecrisis.baldurbjarnason.com/ - 12. https://baldurbjarnason.lemonsqueezy.com/checkout/buy/cfc2f2c6-34af-436f-91c1-cb2e47283c40 - 13. https://www.baldurbjarnason.com/2021/software-crisis-2/ - 14. https://standishgroup.com/sample_research_files/CHAOSReport2015-Final.pdf - 15. https://softwarecrisis.baldurbjarnason.com/ - 16. https://quoteinvestigator.com/2019/09/19/woodpecker/ - 17. http://worrydream.com/refs/Brooks-NoSilverBullet.pdf - 18. https://illusion.baldurbjarnason.com/ - 19. https://www.baldurbjarnason.com/2022/theory-building/ - 20. https://softwarecrisis.baldurbjarnason.com/ - 21. https://en.wikipedia.org/wiki/Mitochondrion - 22. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn1 - 23. https://en.wikipedia.org/wiki/Chekhov's_gun - 24. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn2 - 25. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn3 - 26. https://en.wikipedia.org/wiki/Catch-22_(logic) - 27. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn4 - 28. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn5 - 29. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn6 - 30. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn7 - 31. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn8 - 32. https://archive.ph/2023.01.11-224507/https://github.com/features/copilot#selection-19063.298-19063.462:~:text=Our latest internal research shows that about 1% of the time, a suggestion may contain some code snippets longer than ~150 characters that matches the training set. - 33. https://softwarecrisis.dev/letters/ai-and-software-quality/#fn9 - 34. https://illusion.baldurbjarnason.com/ - 35. https://softwarecrisis.baldurbjarnason.com/ - 36. https://baldurbjarnason.lemonsqueezy.com/checkout/buy/cfc2f2c6-34af-436f-91c1-cb2e47283c40 - 37. https://aclanthology.org/2022.acl-long.434 - 38. https://doi.org/10.1145/3357713.3384290 - 39. https://doi.org/10.1145/3406325.3451131 - 40. https://papers.nips.cc/paper/2020/hash/1e14bfe2714193e7af5abc64ecbd6b46-Abstract.html - 41. https://aclanthology.org/2021.eacl-main.86 - 42. https://arxiv.org/abs/2202.07646 - 43. https://dl.acm.org/doi/10.1145/3447548.3467198 - 44. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref1 - 45. https://needtoknow.fyi/card/bias/ - 46. https://needtoknow.fyi/ - 47. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref2 - 48. https://needtoknow.fyi/card/shortcut-reasoning/ - 49. https://needtoknow.fyi/ - 50. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref3 - 51. https://simonwillison.net/series/prompt-injection/ - 52. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref4 - 53. https://softwarecrisis.dev/letters/the-poisoning-of-chatgpt/ - 54. https://softwarecrisis.dev/letters/google-bard-seo/ - 55. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref5 - 56. https://doi.org/10.48550/arXiv.2108.09293 - 57. https://doi.org/10.48550/arXiv.2211.03622 - 58. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref6 - 59. https://www.microsoft.com/en-us/Investor/events/FY-2023/Morgan-Stanley-TMT-Conference#:~:text=Scott Guthrie: I think you're,is now AI-generated and unmodified - 60. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref7 - 61. https://copyrightlately.com/pdfviewer/getty-images-v-stability-ai-complaint/?auto_viewer=true#page=&zoom=auto&pagemode=none - 62. https://www.theverge.com/2023/1/17/23558516/ai-art-copyright-stable-diffusion-getty-images-lawsuit - 63. https://www.plagiarismtoday.com/2023/01/17/the-wave-of-ai-lawsuits-have-begun/ - 64. https://www.understandingai.org/p/copyright-lawsuits-pose-a-serious - 65. https://githubcopilotlitigation.com/ - 66. https://stablediffusionlitigation.com/ - 67. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref8 - 68. https://archive.ph/2023.01.11-224507/https://github.com/features/copilot#selection-19063.298-19063.462:~:text=Our latest internal research shows that about 1% of the time, a suggestion may contain some code snippets longer than ~150 characters that matches the training set. - 69. https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref9 - 70. https://toot.cafe/@baldur - 71. https://twitter.com/fakebaldur - 72. https://github.com/baldurbjarnason - 73. https://softwarecrisis.dev/feed.xml +[1] https://softwarecrisis.dev/ +[2] https://softwarecrisis.dev/ +[3] https://softwarecrisis.baldurbjarnason.com/ +[4] https://illusion.baldurbjarnason.com/ +[5] https://softwarecrisis.dev/archive/ +[6] https://softwarecrisis.dev/author/ +[7] https://www.hakkavelin.is/ +[8] https://illusion.baldurbjarnason.com/ +[9] https://softwarecrisis.baldurbjarnason.com/ +[10] https://baldurbjarnason.lemonsqueezy.com/checkout/buy/cfc2f2c6-34af-436f-91c1-cb2e47283c40 +[11] https://www.baldurbjarnason.com/2021/software-crisis-2/ +[12] https://standishgroup.com/sample_research_files/CHAOSReport2015-Final.pdf +[13] https://softwarecrisis.baldurbjarnason.com/ +[14] https://quoteinvestigator.com/2019/09/19/woodpecker/ +[15] http://worrydream.com/refs/Brooks-NoSilverBullet.pdf +[16] https://illusion.baldurbjarnason.com/ +[17] https://www.baldurbjarnason.com/2022/theory-building/ +[18] https://softwarecrisis.baldurbjarnason.com/ +[19] https://en.wikipedia.org/wiki/Mitochondrion +[20] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn1 +[21] https://en.wikipedia.org/wiki/Chekhov's_gun +[22] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn2 +[23] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn3 +[24] https://en.wikipedia.org/wiki/Catch-22_(logic) +[25] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn4 +[26] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn5 +[27] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn6 +[28] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn7 +[29] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn8 +[30] https://archive.ph/2023.01.11-224507/https://github.com/features/copilot#selection-19063.298-19063.462:~:text=Our%20latest%20internal%20research%20shows%20that%20about%201%25%20of%20the%20time%2C%20a%20suggestion%20may%20contain%20some%20code%20snippets%20longer%20than%20~150%20characters%20that%20matches%20the%20training%20set. +[31] https://softwarecrisis.dev/letters/ai-and-software-quality/#fn9 +[32] https://illusion.baldurbjarnason.com/ +[33] https://softwarecrisis.baldurbjarnason.com/ +[34] https://baldurbjarnason.lemonsqueezy.com/checkout/buy/cfc2f2c6-34af-436f-91c1-cb2e47283c40 +[35] https://aclanthology.org/2022.acl-long.434 +[36] https://doi.org/10.1145/3357713.3384290 +[37] https://doi.org/10.1145/3406325.3451131 +[38] https://papers.nips.cc/paper/2020/hash/1e14bfe2714193e7af5abc64ecbd6b46-Abstract.html +[39] https://aclanthology.org/2021.eacl-main.86 +[40] https://arxiv.org/abs/2202.07646 +[41] https://dl.acm.org/doi/10.1145/3447548.3467198 +[42] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref1 +[43] https://needtoknow.fyi/card/bias/ +[44] https://needtoknow.fyi/ +[45] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref2 +[46] https://needtoknow.fyi/card/shortcut-reasoning/ +[47] https://needtoknow.fyi/ +[48] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref3 +[49] https://simonwillison.net/series/prompt-injection/ +[50] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref4 +[51] https://softwarecrisis.dev/letters/the-poisoning-of-chatgpt/ +[52] https://softwarecrisis.dev/letters/google-bard-seo/ +[53] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref5 +[54] https://doi.org/10.48550/arXiv.2108.09293 +[55] https://doi.org/10.48550/arXiv.2211.03622 +[56] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref6 +[57] https://www.microsoft.com/en-us/Investor/events/FY-2023/Morgan-Stanley-TMT-Conference#:~:text=Scott%20Guthrie%3A%20I%20think%20you%27re,is%20now%20AI%2Dgenerated%20and%20unmodified +[58] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref7 +[59] https://copyrightlately.com/pdfviewer/getty-images-v-stability-ai-complaint/?auto_viewer=true#page=&zoom=auto&pagemode=none +[60] https://www.theverge.com/2023/1/17/23558516/ai-art-copyright-stable-diffusion-getty-images-lawsuit +[61] https://www.plagiarismtoday.com/2023/01/17/the-wave-of-ai-lawsuits-have-begun/ +[62] https://www.understandingai.org/p/copyright-lawsuits-pose-a-serious +[63] https://githubcopilotlitigation.com/ +[64] https://stablediffusionlitigation.com/ +[65] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref8 +[66] https://archive.ph/2023.01.11-224507/https://github.com/features/copilot#selection-19063.298-19063.462:~:text=Our%20latest%20internal%20research%20shows%20that%20about%201%25%20of%20the%20time%2C%20a%20suggestion%20may%20contain%20some%20code%20snippets%20longer%20than%20~150%20characters%20that%20matches%20the%20training%20set. +[67] https://softwarecrisis.dev/letters/ai-and-software-quality/#fnref9 +[70] https://toot.cafe/@baldur +[71] https://twitter.com/fakebaldur +[72] https://github.com/baldurbjarnason +[73] https://softwarecrisis.dev/feed.xml diff --git a/static/archive/stationery-pizza-93ey2p.txt b/static/archive/stationery-pizza-93ey2p.txt index 48a1b98..6c63733 100644 --- a/static/archive/stationery-pizza-93ey2p.txt +++ b/static/archive/stationery-pizza-93ey2p.txt @@ -1,86 +1,82 @@ - #[1]Stationery🍕 +[1] - [2] +Stationery🍕 - Stationery🍕 +[2]Home [3]Favourites [4]Philosophy [5]Pen & Inks [6]About [7]Contact [8] +Colophon [9]Feed [10]Archives - [3]Home [4]Favourites [5]Philosophy [6]Pen & Inks [7]About [8]Contact - [9]Colophon [10]Feed [11]Archives +[11] Task management system: Analog Calendar -[12]Task management system: Analog Calendar +2023-05-25 00:00 - 2023-05-25 00:00 +My current analog calendar is a Hobonichi Cousin A5. - My current analog calendar is a Hobonichi Cousin A5. - - I use it part for planning, and part for setting goals on different - levels. Yearly, monthly, weekly and daily. I find it very useful - process to do in order to see how busy things will be and setting - realistic goals. +I use it part for planning, and part for setting goals on different levels. +Yearly, monthly, weekly and daily. I find it very useful process to do in order +to see how busy things will be and setting realistic goals. Yearly - I use on of the graph pages in the back to define some goals I hope to - achieve during the year. +I use on of the graph pages in the back to define some goals I hope to achieve +during the year. Monthly - On the monthly pages I make a note of the most important dates like - birthdates and pay day and things like that. Plus that I use the empty - area left of the calendar to define some goals and things I’d like to - complete during the month. +On the monthly pages I make a note of the most important dates like birthdates +and pay day and things like that. Plus that I use the empty area left of the +calendar to define some goals and things I’d like to complete during the month. Weekly - In the weekly page I do a lot of the same. I define some goals for the - week and usually write down a few things I really should get done that - week. And in the week spread I write down appointments that involve - others or require me to go somewhere plus where I am working from and - if I have my daughter. +In the weekly page I do a lot of the same. I define some goals for the week and +usually write down a few things I really should get done that week. And in the +week spread I write down appointments that involve others or require me to go +somewhere plus where I am working from and if I have my daughter. - Makes it really easy to plan and check how much time I have for stuff - that show up . +Makes it really easy to plan and check how much time I have for stuff that show +up . Daily - The daily page is probably the thing that change the most. In some - periods it have been where I do my bullet journaling. These days I use - them more to define the focus of the day. +The daily page is probably the thing that change the most. In some periods it +have been where I do my bullet journaling. These days I use them more to define +the focus of the day. - So the page laypit it is kind of split into two sections, one taking - 1/3 and the other taking 2/3. +So the page laypit it is kind of split into two sections, one taking 1/3 and +the other taking 2/3. - The first section I use to outline all the stuff I’m doing that day. It - typically looks something like this: - * Get up & dressed - * Walk the dog - * Pack my bag - * Skateboard to work - * Work - + Work meetings - + Lunch - * Skateboard home - * Walk the dog - * Eat dinner - * Etc +The first section I use to outline all the stuff I’m doing that day. It +typically looks something like this: - Then on the big section I first define three areas that I’m going to - focus on when I get home from work. After that I use the focus areas to - define 2-3 goals/bigger tasks for each of them. + • Get up & dressed + • Walk the dog + • Pack my bag + • Skateboard to work + • Work + □ Work meetings + □ Lunch + • Skateboard home + • Walk the dog + • Eat dinner + • Etc - Made with ❤️ in Bergen, Norway by Eivind Hjertnes +Then on the big section I first define three areas that I’m going to focus on +when I get home from work. After that I use the focus areas to define 2-3 goals +/bigger tasks for each of them. -References +Made with ❤️ in Bergen, Norway by Eivind Hjertnes - 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 diff --git a/static/archive/stationery-pizza-vxksey.txt b/static/archive/stationery-pizza-vxksey.txt index 2fd26c4..543de89 100644 --- a/static/archive/stationery-pizza-vxksey.txt +++ b/static/archive/stationery-pizza-vxksey.txt @@ -1,104 +1,100 @@ - #[1]Stationery🍕 +[1] - [2] +Stationery🍕 - Stationery🍕 +[2]Home [3]Favourites [4]Philosophy [5]Pen & Inks [6]About [7]Contact [8] +Colophon [9]Feed [10]Archives - [3]Home [4]Favourites [5]Philosophy [6]Pen & Inks [7]About [8]Contact - [9]Colophon [10]Feed [11]Archives +[11] Bullet Journal -[12]Bullet Journal - - 2023-05-27 00:00 +2023-05-27 00:00 The nerdy pen bits - I use Leuchtturm1917 A5 dot grid notebooks for it at the moment. - Sometimes the Bullet Journal versions sometimes the regular. It all - depends on what is in stock and if I find a color that is cooler than - the dull crap they have for the Bullet Journal versions. +I use Leuchtturm1917 A5 dot grid notebooks for it at the moment. Sometimes the +Bullet Journal versions sometimes the regular. It all depends on what is in +stock and if I find a color that is cooler than the dull crap they have for the +Bullet Journal versions. - Most of the time I use fountain pens. Usually a finer nibbed one for - writing and broad stub to underline headings. +Most of the time I use fountain pens. Usually a finer nibbed one for writing +and broad stub to underline headings. How I use it - I usually re-collect things when the number of pages from first to last - go beyond 20-30 pages, mostly because I find it easier to deal with. - Plus that I often need to replace at least some of the goals every 3-5 - days anyways. +I usually re-collect things when the number of pages from first to last go +beyond 20-30 pages, mostly because I find it easier to deal with. Plus that I +often need to replace at least some of the goals every 3-5 days anyways. - On the first two pages I write down my current “yearly” theme, and then - I write down some goals I have on some areas of my life. Usually weight - and fitness goals are there. Plus some things I focus on improving. +On the first two pages I write down my current “yearly” theme, and then I write +down some goals I have on some areas of my life. Usually weight and fitness +goals are there. Plus some things I focus on improving. - Then I put a marker there. Then I turn the page and make a daily page. - I make one every day. And move over whatever was left on the day - before. +Then I put a marker there. Then I turn the page and make a daily page. I make +one every day. And move over whatever was left on the day before. - I just write down the day of the week and the date. And start adding - stuff. I usually start by adding auto generated check lists from things - that kind of keep my life together. +I just write down the day of the week and the date. And start adding stuff. I +usually start by adding auto generated check lists from things that kind of +keep my life together. - Usually first work stuff, then my personal daily stuff. I often start - with the most important stuff. And then things I have to carry over - from the day before. And then I put a marker on the start of the daily - page and one marker at the first page with free space to write things. +Usually first work stuff, then my personal daily stuff. I often start with the +most important stuff. And then things I have to carry over from the day before. +And then I put a marker on the start of the daily page and one marker at the +first page with free space to write things. - The first marker is always on the “status / goal page” the second is - always at the first page with tasks I haven’t checked off and the last - one is always at the first page with available space. +The first marker is always on the “status / goal page” the second is always at +the first page with tasks I haven’t checked off and the last one is always at +the first page with available space. - As I complete things and run out of tasks I start refilling it. Usually - start with Daily tasks, move over to weekly and monthly if there are - anything there I need to do. And after that over to projects that are - in focus. First the ones outlined in the Hobonichi and then later - anything not hidden in my task manager. +As I complete things and run out of tasks I start refilling it. Usually start +with Daily tasks, move over to weekly and monthly if there are anything there I +need to do. And after that over to projects that are in focus. First the ones +outlined in the Hobonichi and then later anything not hidden in my task +manager. Formatting - I don’t use the official Bullet Journal formatting, I’ve tried a few - times but after many years of using [13]Dash/Plus as my task management - on paper formatting system I’ve never been able to change it. +I don’t use the official Bullet Journal formatting, I’ve tried a few times but +after many years of using [12]Dash/Plus as my task management on paper +formatting system I’ve never been able to change it. - The way I do things is that I use one pen and color for writing and - another pen and color for underlining things. +The way I do things is that I use one pen and color for writing and another pen +and color for underlining things. - I usually only have two levels of headings. One is the day, and then - one for the “collection”, when things go deeper than that I typically - will do it as sub-tasks and sub-sub-tasks etc. Anything that has tasks - under it will be underlined. To make it easy to spot. +I usually only have two levels of headings. One is the day, and then one for +the “collection”, when things go deeper than that I typically will do it as +sub-tasks and sub-sub-tasks etc. Anything that has tasks under it will be +underlined. To make it easy to spot. - In addition to this I also often will write a + between different - areas. Like when I move from “Work” related tasks to “Daily” tasks etc. +In addition to this I also often will write a + between different areas. Like +when I move from “Work” related tasks to “Daily” tasks etc. Page layout - My page layout is usually that I align the top level heading (the day - and date) to the left written larger than the rest. +My page layout is usually that I align the top level heading (the day and date) +to the left written larger than the rest. - The collection I typically center. +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 +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/ diff --git a/static/archive/stephango-com-tiumoc.txt b/static/archive/stephango-com-tiumoc.txt index 7e471fd..ec5208f 100644 --- a/static/archive/stephango-com-tiumoc.txt +++ b/static/archive/stephango-com-tiumoc.txt @@ -1,161 +1,157 @@ - #[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 - September 3, 2023 · 2 minute read +Oscar Wilde once said: - Oscar Wilde once said: + “Consistency is the last refuge of the unimaginative.” - “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. - Style is a set of constraints that you stick to. +You can explore many types of constraints: colors, shapes, materials, textures, +fonts, language, clothing, decor, beliefs, flavors, sounds, scents, rituals. +Your style doesn’t have to please anyone else. Play by your own rules. +Everything you do is open to stylistic interpretation. - You can explore many types of constraints: colors, shapes, materials, - textures, fonts, language, clothing, decor, beliefs, flavors, sounds, - scents, rituals. Your style doesn’t have to please anyone else. Play by - your own rules. Everything you do is open to stylistic interpretation. +A style can be a system, a pattern, a set of personal guidelines. Here are a +few of mine: - 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 + • 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 - Collect constraints you enjoy. Unusual constraints make things more - fun. You can always change them later. This is your style, after all. - It’s not a life commitment, it’s just the way you do things. For now. +Collect constraints you enjoy. Unusual constraints make things more fun. You +can always change them later. This is your style, after all. It’s not a life +commitment, it’s just the way you do things. For now. - Having a style collapses hundreds of future decisions into one, and - gives you focus. I always pluralize tags so I never have to wonder what - to name new tags. +Having a style collapses hundreds of future decisions into one, and gives you +focus. I always pluralize tags so I never have to wonder what to name new tags. - Style gives you leverage. Every time you reuse your style you save - time. A durable style is a great investment. +Style gives you leverage. Every time you reuse your style you save time. A +durable style is a great investment. - Style helps you know when you’re breaking your constraints. Sometimes - you have to. And if you want to edit your constraints, you can. It will - be easier to adopt the new constraints if you already had some clearly - defined. +Style helps you know when you’re breaking your constraints. Sometimes you have +to. And if you want to edit your constraints, you can. It will be easier to +adopt the new constraints if you already had some clearly defined. - You don’t need a style for everything. Make a deliberate choice about - what needs consistency and what doesn’t. +You don’t need a style for everything. Make a deliberate choice about what +needs consistency and what doesn’t. - If you stick with your constraints long enough, your style becomes a - cohesive and recognizable [10]point of view. - __________________________________________________________________ +If you stick with your constraints long enough, your style becomes a cohesive +and recognizable [8]point of view. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Appendix - I am starting a collection of interesting personal style choices. - Please [11]send me examples and I’ll add them to the list. - * [12]Scott Yu-Jan [13]paints all his tools white. - * [14]2ynthetic uses a [15]limited palette for outfits and [16]office - decor. - * [17]Johnny Decimal is a system to organize digital data. - * [18]Casey Neistat labels everything [19]in his studio with paint - markers. - * Ryan Hoover [20]never changes his profile picture. - * Wes Anderson uses [21]the typeface Futura in many of his films. - * [22]Steve Jobs wore the same Issey Miyake black turtleneck and New - Balance 991 shoes every day. - * George R.R. Martin writes his novels on the 40 year old DOS - operating system - * Beethoven always counted exactly 60 coffee beans to make coffee, - especially for visitors. - * Jesper Kouthoofd of [23]Teenage Engineering [24]only uses lowercase - because uppercase communicates too much authority - * Osvaldo Cavandoli created the cartoon [25]La Linea using an - animated white line, colored backgrounds, and unintelligible - vocalizations +I am starting a collection of interesting personal style choices. Please [9] +send me examples and I’ll add them to the list. - Linked mentions - Don't specialize, hybridize - Specialization is too heavily encouraged as a career path. The world - needs more hybrid people. - Buy wisely - Whenever I buy things I try to prioritize cost per use. Sometimes I - consider other priorities such as cost per smile, cost... - Obsidian Vault Template - My personal Obsidian vault template. A bottom-up approach to - note-taking and organizing things I am interested in. - Flexoki - An inky color scheme for prose and code. + • [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 - You might also enjoy - * [26]Buy wisely - * [27]Concise explanations accelerate progress - * [28]Scars are beautiful - * [29]Choose optimism - * [30]Quality software deserves your hard‑earned cash - * [31]Don't delegate understanding - * [32]Nibble and your appetite will grow - * [33]How I do my to-dos - * [34]Calmness is a superpower +Linked mentions +[24] +Don't specialize, hybridize +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... +[26] +Obsidian Vault Template +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. - [35]Receive my updates +You might also enjoy - Follow me via email, [36]RSS, [37]Twitter, and [38]other options - ____________________ Sign up + • [28]Buy wisely + • [29]Concise explanations accelerate progress + • [30]Scars are beautiful + • [31]Choose optimism + • [32]Quality software deserves your hard‑earned cash + • [33]Don't delegate understanding + • [34]Nibble and your appetite will grow + • [35]How I do my to-dos + • [36]Calmness is a superpower - [39]Mastodon +[37]Receive my updates -References +Follow me via email, [38]RSS, [39]Twitter, and [40]other options - 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 +[41][ ] [44][Sign up] +[45] [46]Mastodon - 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 +References: + +[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 diff --git a/static/archive/stephenn-com-kbiijs.txt b/static/archive/stephenn-com-kbiijs.txt index 6664a3c..bcd0f3d 100644 --- a/static/archive/stephenn-com-kbiijs.txt +++ b/static/archive/stephenn-com-kbiijs.txt @@ -1,71 +1,65 @@ - [1]Stephen's Tech Blog +[1]Stephen's Tech Blog - * [2]Webhook Wizard 🧙‍♂️ + • [2]Webhook Wizard 🧙‍♂️ - Gopher Wrangling. Effective error handling in Go +Gopher Wrangling. Effective error handling in Go - June 19, 2023 · 4 min · Stephen Nancekivell +June 19, 2023 · 4 min · Stephen Nancekivell +Table of Contents - Table of Contents + □ [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 - * [3]Guiding principle +When programming in Go, the amount of error handling is something that slaps +you in the face. Most API’s you deal with will expose errors. It can become +overwhelming, but with a few tips and a guiding principle we can make handling +errors easy, keep our code clean and give you the confidence that nothing is +breaking in production. - [4]1. Always handle errors +A cartoon of a crazy stressed programmer pulling their hair out in front of +lots of screens showing a error exclamation marks - [5]2. Log errors in one layer - - [6]3. Returning async errors - - [7]4. Wrapping errors - - [8]5. Downgrade errors Warnings - - When programming in Go, the amount of error handling is something that - slaps you in the face. Most API’s you deal with will expose errors. It - can become overwhelming, but with a few tips and a guiding principle we - can make handling errors easy, keep our code clean and give you the - confidence that nothing is breaking in production. - - A cartoon of a crazy stressed programmer pulling their hair out in - front of lots of screens showing a error exclamation marks - - A cartoon of a crazy stressed programmer pulling their hair out in - front of lots of screens showing a error exclamation marks + A cartoon of a crazy stressed programmer pulling their hair out in front of + lots of screens showing a error exclamation marks Guiding principle[9]# - The goal for our error handling strategy is that it should require - minimal effort and provide an easy way to debug any errors that do - occur. +The goal for our error handling strategy is that it should require minimal +effort and provide an easy way to debug any errors that do occur. - We wont cover strategies like retrying because they are less common and - also expose errors. +We wont cover strategies like retrying because they are less common and also +expose errors. 1. Always handle errors[10]# - Always handle errors. Sometimes it’s tempting to skip one, you might - not expect that error to ever happen. But that’s why it’s an exception! - You need to handle it so that you can find out clearly if it ever does - happen. +Always handle errors. Sometimes it’s tempting to skip one, you might not expect +that error to ever happen. But that’s why it’s an exception! You need to handle +it so that you can find out clearly if it ever does happen. - If you don’t handle the error, the expected value will be something - else and just lead to another error that will be harder to debug, or - worse it could lead to data corruption. +If you don’t handle the error, the expected value will be something else and +just lead to another error that will be harder to debug, or worse it could lead +to data corruption. - In most cases to handle the error all you need to do is return it to - the caller of your method, where they can log it. +In most cases to handle the error all you need to do is return it to the caller +of your method, where they can log it. - For example, when refreshing some data you might load it, then save it. - If you skip the error handling it could overwrite potentially useful - data with corrupt data. +For example, when refreshing some data you might load it, then save it. If you +skip the error handling it could overwrite potentially useful data with corrupt +data. + +👎 Bad error handling - 👎 Bad error handling func refresh() { bytes, _ := loadData() saveData(bytes) } - 👍 Good error handling +👍 Good error handling + func refresh() error { bytes, err := loadData() if err != nil { @@ -76,19 +70,19 @@ func refresh() error { 2. Log errors in one layer[11]# - You always want to log your errors, ideally to something that will - notify you about the error, so you can fix it. There is no point - logging the error multiple times at every layer. Make it the top - layer’s responsibility and don’t log in any services or lower level - code. +You always want to log your errors, ideally to something that will notify you +about the error, so you can fix it. There is no point logging the error +multiple times at every layer. Make it the top layer’s responsibility and don’t +log in any services or lower level code. - Make sure your logging framework is including stack traces so you can - trace the error to its cause. +Make sure your logging framework is including stack traces so you can trace the +error to its cause. - For example in a web app you would log the error in the http handler - when returning the Internal Server status code. +For example in a web app you would log the error in the http handler when +returning the Internal Server status code. + +👍 Good error handling - 👍 Good error handling func refresh() error { bytes, err := loadData() if err != nil { @@ -97,8 +91,7 @@ func refresh() error { saveData(bytes) } -func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) -{ +func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) { err := refresh() if err != nil { log.Error("unexpected error processing request %w", err) @@ -111,12 +104,12 @@ func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) 3. Returning async errors[12]# - When processing data concurrently using a go-func’s, it can be annoying - to return the error. But if you don’t your app will be less - maintainable. To handle async errors, return them via a channel to the - calling thread. +When processing data concurrently using a go-func’s, it can be annoying to +return the error. But if you don’t your app will be less maintainable. To +handle async errors, return them via a channel to the calling thread. + +👎 Bad error handling - 👎 Bad error handling func refreshManyConcurrently() { go func(){ refresh(1) @@ -127,7 +120,8 @@ func refreshManyConcurrently() { }() } - 👍 Good error handling +👍 Good error handling + func refreshManyConcurrently() error { errors := make(chan error, 2) go func(){ @@ -140,8 +134,9 @@ func refreshManyConcurrently() error { return multierror.Combine(<-errors, <- errors) } - When calling functions that return a value and a possible error using a - type like Result[T], to wrap the response to pass on the channel. +When calling functions that return a value and a possible error using a type +like Result[T], to wrap the response to pass on the channel. + type Result[T any] struct { Value T Error error @@ -149,29 +144,27 @@ type Result[T any] struct { 4. Wrapping errors[13]# - Sometimes you want to add additional context to an error message. Eg to - include the id of the request that caused the error. You can use - fmt.error for this. +Sometimes you want to add additional context to an error message. Eg to include +the id of the request that caused the error. You can use fmt.error for this. + err := saveToDb(user) if err != nil { - return fmt.errorf("unexpected error saving user. userId=%v error=%w", user.I -d, err) + return fmt.errorf("unexpected error saving user. userId=%v error=%w", user.Id, err) } - Usually this isn’t necessary and its better to just return the error - unwrapped. +Usually this isn’t necessary and its better to just return the error unwrapped. 5. Downgrade errors Warnings[14]# - There are types of errors that regularly occur during normal operation. - The system might not be able to prevent them all the time, but they - don’t need to investigate every time. It is better to treat them as - warnings rather than errors. These might be for things like timeouts or - intermittent connection errors. +There are types of errors that regularly occur during normal operation. The +system might not be able to prevent them all the time, but they don’t need to +investigate every time. It is better to treat them as warnings rather than +errors. These might be for things like timeouts or intermittent connection +errors. - 👍 Good error handling -func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) -{ +👍 Good error handling + +func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) { err := refresh() if err != nil { if err == context.DeadlineExceeded { @@ -187,43 +180,40 @@ func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) w.WriteHeader(http.StatusOK) } - [15]« Prev - PDFs on the Fly: Programmatically Transforming Webpages into PDFs - [16]Next » - How to Serve Web Sockets with Http4s +[15]« Prev +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 diff --git a/static/archive/taylor-town-5siv9a.txt b/static/archive/taylor-town-5siv9a.txt index 8cbba07..88f2b27 100644 --- a/static/archive/taylor-town-5siv9a.txt +++ b/static/archive/taylor-town-5siv9a.txt @@ -1,191 +1,182 @@ - [1]taylor.town +[1]taylor.town +[2]about [3]now [4]spam [5]rss [6]hire - [2]about [3]now [4]spam [5]rss [6]hire +cloaca maxima - cloaca maxima +When to Build Millennia Sewers - 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. - 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. +For comparison, Rome’s [10]Cloaca Maxima (“Greatest Sewer”) is still in-use +after 2,400 years. - For comparison, Rome’s [10]Cloaca Maxima (“Greatest Sewer”) is still - in-use after 2,400 years. +So why didn’t Chicago just build it right the first time? - So why didn’t Chicago just build it right the first time? - * [11]Irreversible Decisions - * [12]Unintended vs. Unforeseen - * [13]Always Scale Down - * [14]Labor & Materials - * [15]Awful Architecture + • [11]Irreversible Decisions + • [12]Unintended vs. Unforeseen + • [13]Always Scale Down + • [14]Labor & Materials + • [15]Awful Architecture Irreversible Decisions - Some decisions are consequential and irreversible or nearly - irreversible – one-way doors – and these decisions must be made - methodically, carefully, slowly, with great deliberation and - consultation. If you walk through and don’t like what you see on the - other side, you can’t get back to where you were before. We can call - these Type 1 decisions. But most decisions aren’t like that – they - are changeable, reversible – they’re two-way doors. If you’ve made a - suboptimal Type 2 decision, you don’t have to live with the - consequences for that long. You can reopen the door and go back - through. Type 2 decisions can and should be made quickly by high - judgment individuals or small groups. + Some decisions are consequential and irreversible or nearly irreversible – + one-way doors – and these decisions must be made methodically, carefully, + slowly, with great deliberation and consultation. If you walk through and + don’t like what you see on the other side, you can’t get back to where you + were before. We can call these Type 1 decisions. But most decisions aren’t + like that – they are changeable, reversible – they’re two-way doors. If + you’ve made a suboptimal Type 2 decision, you don’t have to live with the + consequences for that long. You can reopen the door and go back through. + Type 2 decisions can and should be made quickly by high judgment + individuals or small groups. - As organizations get larger, there seems to be a tendency to use the - heavy-weight Type 1 decision-making process on most decisions, - including many Type 2 decisions. The end result of this is slowness, - unthoughtful risk aversion, failure to experiment sufficiently, and - consequently diminished invention. We’ll have to figure out how to - fight that tendency. + As organizations get larger, there seems to be a tendency to use the + heavy-weight Type 1 decision-making process on most decisions, including + many Type 2 decisions. The end result of this is slowness, unthoughtful + risk aversion, failure to experiment sufficiently, and consequently + diminished invention. We’ll have to figure out how to fight that tendency. - – [16]Jeff Bezos + – [16]Jeff Bezos - The Cloaca Maxima didn’t magically start out as the Greatest Sewer. It - began as an open-air canal, then was modified and renovated and - connected to the aqueducts. +The Cloaca Maxima didn’t magically start out as the Greatest Sewer. It began as +an open-air canal, then was modified and renovated and connected to the +aqueducts. - The Romans probably made mistakes, but they didn’t make any wrong - irreversible decisions. To build something that lasts, make sure the - architecture is correct where it counts. +The Romans probably made mistakes, but they didn’t make any wrong irreversible +decisions. To build something that lasts, make sure the architecture is correct +where it counts. - The Chicago sewage disaster was technically reversible, but extremely - expensive and painful. +The Chicago sewage disaster was technically reversible, but extremely expensive +and painful. - Put “wiggle-room” in your architecture. Plan for repairs. Add - backdoors, engine-hoods, seams, and spaces. Emergency plans are - generally cheap to include in early phases of design. +Put “wiggle-room” in your architecture. Plan for repairs. Add backdoors, +engine-hoods, seams, and spaces. Emergency plans are generally cheap to include +in early phases of design. Unintented vs. Unforeseen - [17]Exxon executives knew that CO₂ emissions would harm Earth. +[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. +Prophets are silenced when apocalypses seem bad for business. - But remember – all apocalypses are opportunities for entrepeneurship. - Exxon could’ve made billions by diversifying themselves with renewable - energy. They acted against their own self-interest by ignoring their - facts. +But remember – all apocalypses are opportunities for entrepeneurship. Exxon +could’ve made billions by diversifying themselves with renewable energy. They +acted against their own self-interest by ignoring their facts. - To prevent long-term disaster, solve the hard problem of aligning - incentives. Build systems so that all constituents predict and prevent - impending doom. +To prevent long-term disaster, solve the hard problem of aligning incentives. +Build systems so that all constituents predict and prevent impending doom. - Transparency thwarts [18]own goals. It’s difficult to do stupid things - when you do stupid things publicly. +Transparency thwarts [18]own goals. It’s difficult to do stupid things when you +do stupid things publicly. Always Scale Down - There’s really two ways to design things. You can either sort of - start with small things and scale them up or you could start with - big things and scale them down… + There’s really two ways to design things. You can either sort of start with + small things and scale them up or you could start with big things and scale + them down… - So suppose you want to build a system for like 10,000 people to use - simultaneously. One way of doing it would be to start with the - system, design it for 10 people and test it like that and scale it - up 10,000. The other way would be to design it for like 100,000,000 - people – I mean do the design for that – and then scale it down to - tens of thousands. You might not get the same architecture. You - might get a completely different architecture. In fact, you would - get a different architecture. + 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. - And I think it’s a really bad idea to start at a design for 10 or - 100 things and scale it up. It’s better to start with an - architecture that you know will work for a few trillion things and - scale it down. It will actually be less efficient when you’ve got - your 10,000 things than when you scaled up, but you’ll know that - you’ll be able to scale it up later. So it’s good. + And I think it’s a really bad idea to start at a design for 10 or 100 + things and scale it up. It’s better to start with an architecture that you + know will work for a few trillion things and scale it down. It will + actually be less efficient when you’ve got your 10,000 things than when you + scaled up, but you’ll know that you’ll be able to scale it up later. So + it’s good. - So rather than ask, “how do we get to five nines?”, let’s make it - more interesting! Let’s start at 9,999 nines reliability and scale - it down. + So rather than ask, “how do we get to five nines?”, let’s make it more + interesting! Let’s start at 9,999 nines reliability and scale it down. - – Joe Armstrong from [19]Systems that run forever and self-heal and - scale + – Joe Armstrong from [19]Systems that run forever and self-heal and scale - If you can afford it, throw a few extra zeroes on your designs. +If you can afford it, throw a few extra zeroes on your designs. Labor & Materials - Carefully compare lifetime, labor, and materials. +Carefully compare lifetime, labor, and materials. - lifetime repair labor materials - asphalt 20 years moderate $ $ - concrete 30 years difficult $ $$ - stone 100+ years easy $$$$ $$$ + lifetime repair labor materials +asphalt 20 years moderate $ $ +concrete 30 years difficult $ $$ +stone 100+ years easy $$$$ $$$ - Pay particular attention to labor – 9 women can’t make a baby in 1 - month. +Pay particular attention to labor – 9 women can’t make a baby in 1 month. - Exercise for the reader: Which is cheaper, a Nespresso machine or a - [20]percolator? +Exercise for the reader: Which is cheaper, a Nespresso machine or a [20] +percolator? Awful Architecture - Sometimes there are no tradeoffs. +Sometimes there are no tradeoffs. - Some decisions are awful in every dimension. +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: +[22]Juicero famously launched a high-tech product that was inferior to +traditional juicers [23]in every comparable way: - After taking apart the device, venture capitalist Ben Einstein - considered the press to be “an incredibly complicated piece of - engineering”, but that the complexity was unnecessary and likely - arose from a lack of cost constraints during the design process. A - simpler and cheaper implementation, suggested Einstein, would likely - have produced much the same quality of juice at a price several - hundred dollars cheaper. + After taking apart the device, venture capitalist Ben Einstein considered + the press to be “an incredibly complicated piece of engineering”, but that + the complexity was unnecessary and likely arose from a lack of cost + constraints during the design process. A simpler and cheaper + implementation, suggested Einstein, would likely have produced much the + same quality of juice at a price several hundred dollars cheaper. - If you want to create lasting sewers, study sewer architecture and its - impacts. What do good sewers have in common? What do bad sewers look - like? What tradeoffs exist with sewage systems? Are there any - promising-yet-untested sewer designs? Why do sewers go into disrepair? - What societal factors prevent sewers from being made in the first - place? Who truly controls the sewers? +If you want to create lasting sewers, study sewer architecture and its impacts. +What do good sewers have in common? What do bad sewers look like? What +tradeoffs exist with sewage systems? Are there any promising-yet-untested sewer +designs? Why do sewers go into disrepair? What societal factors prevent sewers +from being made in the first place? Who truly controls the sewers? - Great architects think ahead, but don’t let ambitions run amok. They - anticipate irreversible changes and second-order effects. They consider - all the costs – labor and materials and maintenance and environmental - impact. They always stay ahead-of-schedule and within their budget. And - despite the overwhelming constraints, great architects build millennia - sewers whenever and wherever they can. +Great architects think ahead, but don’t let ambitions run amok. They anticipate +irreversible changes and second-order effects. They consider all the costs – +labor and materials and maintenance and environmental impact. They always stay +ahead-of-schedule and within their budget. And despite the overwhelming +constraints, great architects build millennia sewers whenever and wherever they +can. -References - 1. https://taylor.town/ - 2. https://taylor.town/about - 3. https://taylor.town/now - 4. https://newsletter.taylor.town/ - 5. https://taylor.town/feed.xml - 6. https://taylor.town/hire-me - 7. https://en.wikipedia.org/wiki/Raising_of_Chicago - 8. https://en.wikipedia.org/wiki/Jack_(device)#House_jack - 9. https://www.reddit.com/r/ProgrammerHumor/comments/blhec6/fixing_bugs_in_production/ - 10. https://en.wikipedia.org/wiki/Cloaca_Maxima - 11. https://taylor.town/millennium-sewer#irreversible - 12. https://taylor.town/millennium-sewer#unintended - 13. https://taylor.town/millennium-sewer#scale-down - 14. https://taylor.town/millennium-sewer#labor-materials - 15. https://taylor.town/millennium-sewer#awful - 16. https://www.sec.gov/Archives/edgar/data/1018724/000119312516530910/d168744dex991.htm - 17. https://en.wikipedia.org/wiki/ExxonMobil_climate_change_denial - 18. https://en.wikipedia.org/wiki/Own_goal - 19. https://www.youtube-nocookie.com/embed/cNICGEwmXLU?start=433 - 20. https://en.wikipedia.org/wiki/Coffee_percolator - 21. https://en.wikipedia.org/wiki/Dvorak_keyboard_layout - 22. https://en.wikipedia.org/wiki/Juicero - 23. https://en.wikipedia.org/wiki/Juicero#Criticism +References: + +[1] https://taylor.town/ +[2] https://taylor.town/about +[3] https://taylor.town/now +[4] https://newsletter.taylor.town/ +[5] https://taylor.town/feed.xml +[6] https://taylor.town/hire-me +[7] https://en.wikipedia.org/wiki/Raising_of_Chicago +[8] https://en.wikipedia.org/wiki/Jack_%28device%29#House_jack +[9] https://www.reddit.com/r/ProgrammerHumor/comments/blhec6/fixing_bugs_in_production/ +[10] https://en.wikipedia.org/wiki/Cloaca_Maxima +[11] https://taylor.town/millennium-sewer#irreversible +[12] https://taylor.town/millennium-sewer#unintended +[13] https://taylor.town/millennium-sewer#scale-down +[14] https://taylor.town/millennium-sewer#labor-materials +[15] https://taylor.town/millennium-sewer#awful +[16] https://www.sec.gov/Archives/edgar/data/1018724/000119312516530910/d168744dex991.htm +[17] https://en.wikipedia.org/wiki/ExxonMobil_climate_change_denial +[18] https://en.wikipedia.org/wiki/Own_goal +[19] https://www.youtube-nocookie.com/embed/cNICGEwmXLU?start=433 +[20] https://en.wikipedia.org/wiki/Coffee_percolator +[21] https://en.wikipedia.org/wiki/Dvorak_keyboard_layout +[22] https://en.wikipedia.org/wiki/Juicero +[23] https://en.wikipedia.org/wiki/Juicero#Criticism diff --git a/static/archive/techxplore-com-8o7hmu.txt b/static/archive/techxplore-com-8o7hmu.txt index 10d7d9a..a480c27 100644 --- a/static/archive/techxplore-com-8o7hmu.txt +++ b/static/archive/techxplore-com-8o7hmu.txt @@ -1,629 +1,674 @@ - #[1]top [2]search [3]All news stories [4]Spotlight news only +[1] logotype +Topics - [5]logotype - (BUTTON) Topics - * [6]Week's top - * [7]Latest news - * [8]Unread news - * [9]Subscribe + • [3]Week's top + • [4]Latest news + • [5]Unread news + • [6]Subscribe - ____________________ (BUTTON) - - (BUTTON) +[7][ ] +[10] Science X Account - ____________________ - ____________________ - [X] Remember me - (BUTTON) Sign In +[14][ ] +[15][ ] +[16][*] Remember me +Sign In - [10]Click here to sign in with or +[18] Click here to sign in with or - [11]Forget Password? - [12]Not a member? Sign up +[19]Forget Password? - [13]Learn more +[20]Not a member? Sign up - * [14]Automotive - * [15]Business - * [16]Computer Sciences - * [17]Consumer & Gadgets - * [18]Electronics & Semiconductors - * [19]Energy & Green Tech - * [20]Engineering - * [21]Hardware - * [22]Hi Tech & Innovation - * [23]Internet - * [24]Machine learning & AI - * [25]Other - * [26]Robotics - * [27]Security - * [28]Software - * [29]Telecom +[21]Learn more - [INS: :INS] - * (BUTTON) - * share this! - * [30]114 - * [31]32 - * [32]Share - * [33]Email + • [22]Automotive + • [23]Business + • [24]Computer Sciences + • [25]Consumer & Gadgets + • [26]Electronics & Semiconductors + • [27]Energy & Green Tech + • [28]Engineering + • [29]Hardware + • [30]Hi Tech & Innovation + • [31]Internet + • [32]Machine learning & AI + • [33]Other + • [34]Robotics + • [35]Security + • [36]Software + • [37]Telecom - 1. [34]Home - 2. [35]Consumer & Gadgets +[INS::INS] - 1. [36]Home - 2. [37]Computer Sciences + • + • share this! - * - * - * - __________________________________________________________________ + • [39] - June 29, 2023 - [38]Editors' notes + 114 - This article has been reviewed according to Science X's [39]editorial - process and [40]policies. [41]Editors have highlighted the following - attributes while ensuring the content's credibility: + • [40] - fact-checked + 32 - trusted source + • [41] - proofread + Share + + • [42] + + Email + + 1. [43]Home + 2. [44] Consumer & Gadgets + + 1. [45]Home + 2. [46] Computer Sciences + + • [47] + • [48] + • [49] + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[50] + +June 29, 2023 + +[51] Editors' notes + +This article has been reviewed according to Science X's [52]editorial process +and [53]policies. [54]Editors have highlighted the following attributes while +ensuring the content's credibility: + +fact-checked + +trusted source + +proofread We are wasting up to 20% of our time on computer problems, says study - by [42]University of Copenhagen - computer Credit: Unsplash/CC0 Public Domain +by [55]University of Copenhagen - Even though our computers are now better than 15 years ago, they still - malfunction 11%–20% of the time, a new study from the University of - Copenhagen and Roskilde University concludes. The researchers behind - the study therefore find that there are major gains to be achieved for - society by rethinking the systems and involving users more in their - development. +computer Credit: Unsplash/CC0 Public Domain - An endlessly rotating beach ball, a program that [43]crashes without - saving data or systems that require illogical procedures or simply do - not work: Unfortunately, struggling with computers is still a familiar - situation for most of us. Tearing your hair out over computers that do - not work remains very common among users, according to new Danish - research. +Even though our computers are now better than 15 years ago, they still +malfunction 11%–20% of the time, a new study from the University of Copenhagen +and Roskilde University concludes. The researchers behind the study therefore +find that there are major gains to be achieved for society by rethinking the +systems and involving users more in their development. - In fact, so much that on average, we waste 11%–20% of our time in front - of our computers on systems that do not work or that are so difficult - to understand that we cannot perform the task we want to. And this is - far from being good enough, says Professor Kasper Hornbæk, one of the - researchers behind the study. +An endlessly rotating beach ball, a program that [56]crashes without saving +data or systems that require illogical procedures or simply do not work: +Unfortunately, struggling with computers is still a familiar situation for most +of us. Tearing your hair out over computers that do not work remains very +common among users, according to new Danish research. - "It's incredible that the figure is so high. However, most people - experience frustration when using computers and can tell a horror story - about an important PowerPoint presentation that was not saved or a - system that crashed at a critical moment. Everyone knows that it is - difficult to create IT systems that match people's needs, but the - figure should be much lower, and one thing that it shows is that - [44]ordinary people aren't involved enough when the systems are - developed," he says. +In fact, so much that on average, we waste 11%–20% of our time in front of our +computers on systems that do not work or that are so difficult to understand +that we cannot perform the task we want to. And this is far from being good +enough, says Professor Kasper Hornbæk, one of the researchers behind the study. - Professor Morten Hertzum, the other researcher behind the study, - emphasizes that most frustrations are experienced in connection with - the performance of completely ordinary tasks. +"It's incredible that the figure is so high. However, most people experience +frustration when using computers and can tell a horror story about an important +PowerPoint presentation that was not saved or a system that crashed at a +critical moment. Everyone knows that it is difficult to create IT systems that +match people's needs, but the figure should be much lower, and one thing that +it shows is that [57]ordinary people aren't involved enough when the systems +are developed," he says. - "The frustrations are not due to people using their computers for - something highly advanced, but because they experience problems in - their performance of everyday tasks. This makes it easier to involve - users in identifying problems. But it also means that problems that are - not identified and solved will probably frustrate a large number of - users," says Morten Hertzum. - [INS: :INS] +Professor Morten Hertzum, the other researcher behind the study, emphasizes +that most frustrations are experienced in connection with the performance of +completely ordinary tasks. + +"The frustrations are not due to people using their computers for something +highly advanced, but because they experience problems in their performance of +everyday tasks. This makes it easier to involve users in identifying problems. +But it also means that problems that are not identified and solved will +probably frustrate a large number of users," says Morten Hertzum. + +[INS::INS] The problems are only too recognizable - To examine this issue, the researchers have been assisted by 234 - participants who spend between six and eight hours in front of a - computer in their day-to-day work. +To examine this issue, the researchers have been assisted by 234 participants +who spend between six and eight hours in front of a computer in their +day-to-day work. - During one hour, the researchers told them to report the situations in - which the computer would not work properly, or where the participants - were frustrated about not being able to perform the task they wanted. +During one hour, the researchers told them to report the situations in which +the computer would not work properly, or where the participants were frustrated +about not being able to perform the task they wanted. - The problems most often experienced by the participants included: "the - system was slow," "the system froze temporarily," "the system crashed," - "it is difficult to find things." The participants had backgrounds such - as student, accountant, consultant, but several of them actually worked - in the IT industry. +The problems most often experienced by the participants included: "the system +was slow," "the system froze temporarily," "the system crashed," "it is +difficult to find things." The participants had backgrounds such as student, +accountant, consultant, but several of them actually worked in the IT industry. - "A number of the participants in the survey were IT professionals, - while most of the other participants were highly competent IT and - computer users. Nevertheless, they encountered these problems, and it - turns out that this involves some fundamental functions," says Kasper - Hornbæk. +"A number of the participants in the survey were IT professionals, while most +of the other participants were highly competent IT and computer users. +Nevertheless, they encountered these problems, and it turns out that this +involves some fundamental functions," says Kasper Hornbæk. - The participants in the survey also responded that 84% of the episodes - had occurred before and that 87% of the episodes could happen again. - And, according to Kasper Hornbæk, we are having the same fundamental - problems today that we had 15–20 years ago. +The participants in the survey also responded that 84% of the episodes had +occurred before and that 87% of the episodes could happen again. And, according +to Kasper Hornbæk, we are having the same fundamental problems today that we +had 15–20 years ago. - "The two biggest categories of problems are still about insufficient - performance and lack of user-friendliness," he says. +"The two biggest categories of problems are still about insufficient +performance and lack of user-friendliness," he says. - Morten Hertzum adds, "Our technology can do more today, and it has also - become better, but at the same time, we expect more from it. Even - though downloads are faster now, they are often still experienced as - frustratingly slow. " +Morten Hertzum adds, "Our technology can do more today, and it has also become +better, but at the same time, we expect more from it. Even though downloads are +faster now, they are often still experienced as frustratingly slow. " 88% use a computer at work - According to Statistics Denmark, 88% of Danes used computers, laptops, - smartphones, tablets or other mobile devices at work in 2018. In this - context, the new study indicates that a half to a whole day of a normal - working week may be wasted on computer problems. +According to Statistics Denmark, 88% of Danes used computers, laptops, +smartphones, tablets or other mobile devices at work in 2018. In this context, +the new study indicates that a half to a whole day of a normal working week may +be wasted on computer problems. - "There is a lot of productivity lost in workplaces throughout Denmark - because people are unable to perform their ordinary work because the - computer is not running as it should. It also causes a lot of - frustrations for the individual user," says Kasper Hornbæk. +"There is a lot of productivity lost in workplaces throughout Denmark because +people are unable to perform their ordinary work because the computer is not +running as it should. It also causes a lot of frustrations for the individual +user," says Kasper Hornbæk. - This means that there are major benefits to be gained for society if we - experienced fewer problems in front of our computers. According to - Kasper Hornbæk, the gains can, for example, be achieved if more - resources are invested in rethinking how faults are presented to us on - the computer. +This means that there are major benefits to be gained for society if we +experienced fewer problems in front of our computers. According to Kasper +Hornbæk, the gains can, for example, be achieved if more resources are invested +in rethinking how faults are presented to us on the computer. - "Part of the solution may be to shield us from knowing that the - computer is working to solve a problem. In reality, there is no reason - why we need to look at an incomprehensible box with commands or a - frozen computer. The [45]computer could easily solve the problems - without displaying this, while it provided a back-up version of the - system for us, so that we could continue to work with our tasks - undisturbed," says Kasper Hornbæk. +"Part of the solution may be to shield us from knowing that the computer is +working to solve a problem. In reality, there is no reason why we need to look +at an incomprehensible box with commands or a frozen computer. The [58]computer +could easily solve the problems without displaying this, while it provided a +back-up version of the system for us, so that we could continue to work with +our tasks undisturbed," says Kasper Hornbæk. - At the same time, IT developers should involve the users even more when - designing the systems to make them as easy to use—and understand—as - possible, because according to the researcher, there are no poor IT - users, only poor systems. +At the same time, IT developers should involve the users even more when +designing the systems to make them as easy to use—and understand—as possible, +because according to the researcher, there are no poor IT users, only poor +systems. - "When we're all surrounded by IT systems that we're cursing, it's very - healthy to ascertain that it's probably not the [46]users that are the - problem, but those who make the systems. The study clearly shows that - there is still much room for improvement, and we therefore hope that it - can create more focus on making more user-friendly systems in the - future," concludes Kasper Hornbæk. +"When we're all surrounded by IT systems that we're cursing, it's very healthy +to ascertain that it's probably not the [59]users that are the problem, but +those who make the systems. The study clearly shows that there is still much +room for improvement, and we therefore hope that it can create more focus on +making more user-friendly systems in the future," concludes Kasper Hornbæk. - More information: Morten Hertzum et al, Frustration: Still a Common - User Experience, ACM Transactions on Computer-Human Interaction (2023). - [47]DOI: 10.1145/3582432 - Provided by [48]University of Copenhagen - Citation: We are wasting up to 20% of our time on computer problems, - says study (2023, June 29) retrieved 16 January 2024 from - https://techxplore.com/news/2023-06-problems.html - This document is subject to copyright. Apart from any fair dealing for - the purpose of private study or research, no part may be reproduced - without the written permission. The content is provided for information - purposes only. - __________________________________________________________________ +More information: Morten Hertzum et al, Frustration: Still a Common User +Experience, ACM Transactions on Computer-Human Interaction (2023). [60]DOI: +10.1145/3582432 +Provided by [61]University of Copenhagen [62] +Citation: We are wasting up to 20% of our time on computer problems, says study +(2023, June 29) retrieved 17 January 2024 from https://techxplore.com/news/ +2023-06-problems.html +This document is subject to copyright. Apart from any fair dealing for the +purpose of private study or research, no part may be reproduced without the +written permission. The content is provided for information purposes only. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Explore further - [49]Computer 'brains' solving mysteries of human behaviour - __________________________________________________________________ +Explore further - [50]148 shares - * [51]Facebook - * [52]Twitter - * [53]Email +[63]Computer 'brains' solving mysteries of human behaviour +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[64]148 shares - [54] + • [65] - Feedback to editors + Facebook - * [55]Featured - * [56]Last Comments - * [57]Popular + • [66] -[58]Team at Anthropic finds LLMs can be made to engage in deceptive behaviors + Twitter - 11 hours ago + • [67] - 0 + Email -[59]Model outlines how ionic blockades influence energy recovery in forward +[68] + +Feedback to editors + + • [69]Featured + • [70]Last Comments + • [71]Popular + +[72]Using AI to develop a battery that uses less lithium + +1 hour ago + +0 + +[73]The solution space of the spherical negative perceptron model is +star-shaped, researchers find + +4 hours ago + +0 + +[74]Team at Anthropic finds LLMs can be made to engage in deceptive behaviors + +23 hours ago + +1 + +[75]Model outlines how ionic blockades influence energy recovery in forward bias bipolar membranes - Jan 15, 2024 +Jan 15, 2024 - 0 +0 -[60]A new method to develop recyclable, organic and flexible electronics +[76]A new method to develop recyclable, organic and flexible electronics - Jan 10, 2024 +Jan 10, 2024 - 0 +0 -[61]Light-emitting textiles for diverse flexible and wearable displays +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[77] [gif] - Jan 9, 2024 +Smart devices' ambient light sensors pose imaging privacy risk - 0 +1 hour ago -[62]A robot that can play video games with humans +[78] [gif] - Jan 9, 2024 +New tech addresses augmented reality's privacy problem - 1 - __________________________________________________________________ +1 hour ago + +[79] [gif] + +Using AI to develop a battery that uses less lithium + +1 hour ago + +[80] [gif] + +The solution space of the spherical negative perceptron model is star-shaped, +researchers find + +4 hours ago + +[81] [gif] Team develops a new deepfake detector designed to be less biased - 8 hours ago +21 hours ago + +[82] [gif] From cannabis harvest to flexible solar panels: Using organic electronics to develop next-gen devices - 11 hours ago +23 hours ago + +[83] [gif] Team at Anthropic finds LLMs can be made to engage in deceptive behaviors - 11 hours ago +23 hours ago + +[84] [gif] Volocopter flying taxi seeks to seduce Paris - 12 hours ago +Jan 16, 2024 -Engineers propose hybrid urban water sourcing model using reclaimed -wastewater +[85] [gif] - 12 hours ago +Engineers propose hybrid urban water sourcing model using reclaimed wastewater + +Jan 16, 2024 + +[86] [gif] Africa's chance for green electricity - 12 hours ago +Jan 16, 2024 -Squishy, metal-free magnets to power robots and guide medical implants +[INS::INS] - 13 hours ago + • Related Stories -Material science advance could lead to airplanes that optimize their shape in -flight + [87] [gif] - 13 hours ago + Computer 'brains' solving mysteries of human behaviour -Discovery enables cost-effective and eco-friendly green hydrogen production + Oct 14, 2016 - 13 hours ago + [88] [gif] -Advancement in thermoelectricity could light up the Internet of Things + The quantum computer already exists, but is not all that powerful - 18 hours ago - [INS: :INS] + May 16, 2023 - * + [89] [gif] -Related Stories + Q&A: Expert discusses how to realistically achieve quantum speedups beyond + the hype -Computer 'brains' solving mysteries of human behaviour - Oct 14, 2016 + May 26, 2023 -The quantum computer already exists, but is not all that powerful - May 16, 2023 + [90] [gif] -Q&A: Expert discusses how to realistically achieve quantum speedups beyond -the hype - May 26, 2023 + Tiny quantum computer solves real optimization problem -Tiny quantum computer solves real optimization problem - Dec 17, 2020 + Dec 17, 2020 -New software allows nonspecialists to intuitively train machines using -gestures - Oct 31, 2022 + [91] [gif] -Scalable photonic computer solves the subset sum problem - Feb 3, 2020 - * + New software allows nonspecialists to intuitively train machines using + gestures -Recommended for you + Oct 31, 2022 -Team develops a new deepfake detector designed to be less biased - 8 hours ago + [92] [gif] -Zeroing in on the origins of bias in large language models - Jan 15, 2024 + Scalable photonic computer solves the subset sum problem -Robot baristas and AI chefs caused a stir at CES 2024 as casino union workers -fear for their jobs - Jan 14, 2024 + Feb 3, 2020 -At CES, gadgets to make everyday life easier - Jan 13, 2024 + • Recommended for you -Scientists show how shallow learning mechanism used by the brain can compete -with deep learning - Jan 12, 2024 + [93] [gif] -Novel AI framework generates images from nothing - Jan 11, 2024 + Smart devices' ambient light sensors pose imaging privacy risk - IFRAME: - [63]//js.trendmd.com/trendmd.amp.html?title=We%20are%20wasting%20up%20t - o%2020%25%20of%20our%20time%20on%20computer%20problems%2C%20says%20stud - y&url=https%3A%2F%2Ftechxplore.com%2Fnews%2F2023-06-problems.html&journ - alId=73746 + 1 hour ago - [64]Load comments (0) + [94] [gif] + + New tech addresses augmented reality's privacy problem + + 1 hour ago + + [95] [gif] + + The solution space of the spherical negative perceptron model is + star-shaped, researchers find + + 4 hours ago + + [96] [gif] + + Team develops a new deepfake detector designed to be less biased + + 21 hours ago + + [97] [gif] + + Zeroing in on the origins of bias in large language models + + Jan 15, 2024 + + [98] [gif] + + Robot baristas and AI chefs caused a stir at CES 2024 as casino union + workers fear for their jobs + + Jan 14, 2024 + +[99] Load comments (0) Let us know if there is a problem with our content - (BUTTON) +Use this form if you have come across a typo, inaccuracy or would like to send +an edit request for the content on this page. For general inquiries, please use +our [101]contact form. For general feedback, use the public comments section +below (please [102]adhere to guidelines). - Use this form if you have come across a typo, inaccuracy or would like - to send an edit request for the content on this page. For general - inquiries, please use our [65]contact form. For general feedback, use - the public comments section below (please [66]adhere to guidelines). +Please select the most appropriate category to facilitate processing of your +request - Please select the most appropriate category to facilitate processing of - your request - [-- please select one --______] - Your message to the editors - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - Your email (only if you want to be contacted back) ____________________ - (BUTTON) Send Feedback +[103][-- please select one -- ] + [ ] + [ ] + [ ] + [ ] + [ ] +Your message to the editors [ ] +Your email (only if you want to be contacted back) [105][ ] +Send Feedback - Thank you for taking time to provide your feedback to the editors. +Thank you for taking time to provide your feedback to the editors. - Your feedback is important to us. However, we do not guarantee - individual replies due to the high volume of messages. +Your feedback is important to us. However, we do not guarantee individual +replies due to the high volume of messages. E-mail the story We are wasting up to 20% of our time on computer problems, says study - (BUTTON) - Your friend's email ____________________ - Your email ____________________ - [ ] I would like to subscribe to Science X Newsletter. [67]Learn more - Your name ____________________ +Your friend's email [108][ ] +Your email [109][ ] +[110][ ] I would like to subscribe to Science X Newsletter. [111]Learn more +Your name [112][ ] Note - Your email address is used only to let the recipient know who sent the - email. Neither your address nor the recipient's address will be used - for any other purpose. The information you enter will appear in your - e-mail message and is not retained by Tech Xplore in any form. - Your message - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - (BUTTON) Send +Your email address is used only to let the recipient know who sent the email. +Neither your address nor the recipient's address will be used for any other +purpose. The information you enter will appear in your e-mail message and is +not retained by Tech Xplore in any form. - (BUTTON) - - Phys.org logotype + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] + [ ] +Your message [ ] +Send +[116] Phys.org logotype Phys.org - Daily science news on research developments and the latest scientific - innovations - MedicalXpress logotype +Daily science news on research developments and the latest scientific +innovations + +[117] MedicalXpress logotype Medical Xpress - Medical research advances and health news - ScienceX logotype +Medical research advances and health news + +[118] ScienceX logotype Science X - The most comprehensive sci-tech news coverage on the web +The most comprehensive sci-tech news coverage on the web Newsletters - ____________________ - (BUTTON) Subscribe - Science X Daily and the Weekly Email Newsletter are free features that - allow you to receive your favorite sci-tech news updates in your email - inbox - +[119][ ] +Subscribe +Science X Daily and the Weekly Email Newsletter are free features that allow +you to receive your favorite sci-tech news updates in your email inbox Follow us - * - * - * - * + • [122] + • [123] + • [124] + • [125] - * [68]Top - * [69]Home - * [70]Search - * [71]Mobile version + • [126]Top + • [127]Home + • [128]Search + • [129]Mobile version - * [72]Help - * [73]FAQ - * [74]About - * [75]Contact + • [130]Help + • [131]FAQ + • [132]About + • [133]Contact - * [76]Science X Account - * [77]Premium Account - * [78]Newsletter - * [79]Archive + • [134]Science X Account + • [135]Premium Account + • [136]Newsletter + • [137]Archive - * [80]Android app - * [81]iOS app - * [82]RSS feeds - * [83]Push notification + • [138]Android app + • [139]iOS app + • [140]RSS feeds + • [141]Push notification - © Tech Xplore 2014 - 2024 powered by [84]Science X Network - [85]Privacy policy [86]Terms of use +© Tech Xplore 2014 - 2024 powered by [142]Science X Network +[143]Privacy policy [144]Terms of use Your Privacy - This site uses cookies to assist with navigation, analyse your use of - our services, collect data for ads personalisation and provide content - from third parties. By using our site, you acknowledge that you have - read and understand our [87]Privacy Policy and [88]Terms of Use. - [89]I'm OK with that [90]Cookie options +This site uses cookies to assist with navigation, analyse your use of our +services, collect data for ads personalisation and provide content from third +parties. By using our site, you acknowledge that you have read and understand +our [145]Privacy Policy and [146]Terms of Use. - (BUTTON) +[147]I'm OK with that [148]Cookie options E-mail newsletter - ____________________ - (BUTTON) Subscribe - +[150][ ] +Subscribe Follow us - * - * - * - * + • [153] + • [154] + • [155] + • [156] - [91]It appears that you are currently using Ad Blocking software. What - are the consequences? (BUTTON) × +[157] It appears that you are currently using Ad Blocking software. What are +the consequences? × +Quantcast - Quantcast +References: -References - - Visible links: - 1. https://techxplore.com/ - 2. https://techxplore.com/search/ - 3. https://techxplore.com/rss-feed/ - 4. https://techxplore.com/rss-feed/breaking/ - 5. https://techxplore.com/ - 6. https://techxplore.com/weekly-news/ - 7. https://techxplore.com/latest-news/ - 8. https://techxplore.com/unread-news/ - 9. https://techxplore.com/news/2023-06-problems.html - 10. https://sciencex.com/profile/login/ - 11. https://sciencex.com/profile/pwdreset/ - 12. https://sciencex.com/profile/register/ - 13. https://sciencex.com/help/account/ - 14. https://techxplore.com/automotive-news/ - 15. https://techxplore.com/business-tech-news/ - 16. https://techxplore.com/computer-sciences-news/ - 17. https://techxplore.com/consumer-gadgets-news/ - 18. https://techxplore.com/semiconductors-news/ - 19. https://techxplore.com/energy-green-tech-news/ - 20. https://techxplore.com/engineering-news/ - 21. https://techxplore.com/hardware-news/ - 22. https://techxplore.com/hi-tech-news/ - 23. https://techxplore.com/internet-news/ - 24. https://techxplore.com/machine-learning-ai-news/ - 25. https://techxplore.com/other-news/ - 26. https://techxplore.com/robotics-news/ - 27. https://techxplore.com/security-news/ - 28. https://techxplore.com/software-news/ - 29. https://techxplore.com/telecom-news/ - 30. javascript:void(0) - 31. https://techxplore.com/news/2023-06-problems.html - 32. https://techxplore.com/news/2023-06-problems.html - 33. mailto:/ - 34. https://techxplore.com/ - 35. https://techxplore.com/consumer-gadgets-news/ - 36. https://techxplore.com/ - 37. https://techxplore.com/computer-sciences-news/ - 38. javascript:void(0) - 39. https://sciencex.com/help/editorial-process/ - 40. https://sciencex.com/help/editorial-standards/ - 41. https://sciencex.com/help/editorial-team/ - 42. http://www.ku.dk/english/ - 43. https://techxplore.com/tags/crashes/ - 44. https://techxplore.com/tags/ordinary+people/ - 45. https://techxplore.com/tags/computer/ - 46. https://techxplore.com/tags/users/ - 47. https://dx.doi.org/10.1145/3582432 - 48. https://techxplore.com/partners/university-of-copenhagen/ - 49. https://techxplore.com/news/2016-10-brains-mysteries-human-behaviour.html - 50. javascript:void(0) - 51. javascript:void(0) - 52. https://techxplore.com/news/2023-06-problems.html - 53. https://techxplore.com/news/2023-06-problems.html - 54. https://techxplore.com/news/2023-06-problems.html - 55. https://techxplore.com/news/2023-06-problems.html#nav-featured - 56. https://techxplore.com/news/2023-06-problems.html#nav-commented - 57. https://techxplore.com/news/2023-06-problems.html#nav-popular - 58. https://techxplore.com/news/2024-01-team-anthropic-llms-engage-deceptive.html - 59. https://techxplore.com/news/2024-01-outlines-ionic-blockades-energy-recovery.html - 60. https://techxplore.com/news/2024-01-method-recyclable-flexible-electronics.html - 61. https://techxplore.com/news/2024-01-emitting-textiles-diverse-flexible-wearable.html - 62. https://techxplore.com/news/2024-01-robot-play-video-games-humans.html - 63. https://js.trendmd.com/trendmd.amp.html?title=We are wasting up to 20% of our time on computer problems, says study&url=https://techxplore.com/news/2023-06-problems.html&journalId=73746 - 64. Javascript:void(0); - 65. https://sciencex.com/help/feedback/ - 66. https://sciencex.com/help/comments/ - 67. https://sciencex.com/help/newsletter/ - 68. https://techxplore.com/news/2023-06-problems.html - 69. https://techxplore.com/ - 70. https://techxplore.com/search/ - 71. https://techxplore.com/news/2023-06-problems.html?deviceType=mobile - 72. https://sciencex.com/help/ - 73. https://sciencex.com/help/contactus/ - 74. https://sciencex.com/help/about-us/ - 75. https://sciencex.com/help/feedback/ - 76. https://sciencex.com/profile/ - 77. https://sciencex.com/help/donate/ - 78. https://sciencex.com/help/newsletter/ - 79. https://techxplore.com/archive/ - 80. https://play.google.com/store/apps/details?id=com.PhysOrg.TechXplore - 81. https://itunes.apple.com/us/app/tech-xplore/id1154953172?mt=8 - 82. https://techxplore.com/feeds/ - 83. javascript:void(0) - 84. https://sciencex.com/ - 85. https://sciencex.com/help/privacy/ - 86. https://sciencex.com/help/terms/ - 87. https://sciencex.com/help/privacy/ - 88. https://sciencex.com/help/terms/ - 89. https://techxplore.com/news/2023-06-problems.html - 90. https://sciencex.com/help/cookies/ - 91. https://sciencex.com/help/adblock/ - - Hidden links: - 93. https://techxplore.com/news/2023-06-problems.html - 94. javascript:void(0) - 95. https://techxplore.com/news/2023-06-problems.pdf - 96. javascript:window.print() - 97. https://techxplore.com/archive/29-06-2023/ - 98. http://www.ku.dk/english/ - 99. https://techxplore.com/news/2024-01-team-deepfake-detector-biased.html - 100. https://techxplore.com/news/2024-01-cannabis-harvest-flexible-solar-panels.html - 101. https://techxplore.com/news/2024-01-team-anthropic-llms-engage-deceptive.html - 102. https://techxplore.com/news/2024-01-volocopter-flying-taxi-seduce-paris.html - 103. https://techxplore.com/news/2024-01-hybrid-urban-sourcing-reclaimed-wastewater.html - 104. https://techxplore.com/news/2024-01-africa-chance-green-electricity.html - 105. https://techxplore.com/news/2024-01-squishy-metal-free-magnets-power.html - 106. https://techxplore.com/news/2024-01-material-science-advance-airplanes-optimize.html - 107. https://techxplore.com/news/2024-01-discovery-enables-effective-eco-friendly.html - 108. https://techxplore.com/news/2024-01-advancement-thermoelectricity-internet.html - 109. https://techxplore.com/news/2016-10-brains-mysteries-human-behaviour.html - 110. https://techxplore.com/news/2023-05-quantum-powerful.html - 111. https://techxplore.com/news/2023-05-qa-expert-discusses-realistically-quantum.html - 112. https://phys.org/news/2020-12-tiny-quantum-real-optimization-problem.html - 113. https://techxplore.com/news/2022-10-software-nonspecialists-intuitively-machines-gestures.html - 114. https://phys.org/news/2020-02-scalable-photonic-subset-sum-problem.html - 115. https://techxplore.com/news/2024-01-team-deepfake-detector-biased.html - 116. https://techxplore.com/news/2024-01-zeroing-bias-large-language.html - 117. https://techxplore.com/news/2024-01-robot-baristas-ai-chefs-ces.html - 118. https://techxplore.com/news/2024-01-ces-gadgets-everyday-life-easier.html - 119. https://techxplore.com/news/2024-01-scientists-shallow-mechanism-brain-deep.html - 120. https://techxplore.com/news/2024-01-ai-framework-generates-images.html - 121. https://phys.org/ - 122. https://medicalxpress.com/ - 123. https://sciencex.com/ - 124. https://www.facebook.com/TechxploreCom - 125. https://twitter.com/techxplore_com - 126. https://www.linkedin.com/company/tech-xplore/ - 127. https://techxplore.com/feeds/ - 128. https://www.facebook.com/TechxploreCom - 129. https://twitter.com/techxplore_com - 130. https://www.linkedin.com/company/tech-xplore/ - 131. https://techxplore.com/feeds/ +[1] https://techxplore.com/ +[3] https://techxplore.com/weekly-news/ +[4] https://techxplore.com/latest-news/ +[5] https://techxplore.com/unread-news/ +[6] https://techxplore.com/news/2023-06-problems.html# +[10] https://techxplore.com/news/2023-06-problems.html# +[18] https://sciencex.com/profile/login/ +[19] https://sciencex.com/profile/pwdreset/ +[20] https://sciencex.com/profile/register/ +[21] https://sciencex.com/help/account/ +[22] https://techxplore.com/automotive-news/ +[23] https://techxplore.com/business-tech-news/ +[24] https://techxplore.com/computer-sciences-news/ +[25] https://techxplore.com/consumer-gadgets-news/ +[26] https://techxplore.com/semiconductors-news/ +[27] https://techxplore.com/energy-green-tech-news/ +[28] https://techxplore.com/engineering-news/ +[29] https://techxplore.com/hardware-news/ +[30] https://techxplore.com/hi-tech-news/ +[31] https://techxplore.com/internet-news/ +[32] https://techxplore.com/machine-learning-ai-news/ +[33] https://techxplore.com/other-news/ +[34] https://techxplore.com/robotics-news/ +[35] https://techxplore.com/security-news/ +[36] https://techxplore.com/software-news/ +[37] https://techxplore.com/telecom-news/ +[39] javascript:void(0) +[40] https://techxplore.com/news/2023-06-problems.html# +[41] https://techxplore.com/news/2023-06-problems.html# +[42] mailto: +[43] https://techxplore.com/ +[44] https://techxplore.com/consumer-gadgets-news/ +[45] https://techxplore.com/ +[46] https://techxplore.com/computer-sciences-news/ +[47] javascript:void(0) +[48] https://techxplore.com/news/2023-06-problems.pdf +[49] javascript:window.print() +[50] https://techxplore.com/archive/29-06-2023/ +[51] javascript:void(0) +[52] https://sciencex.com/help/editorial-process/ +[53] https://sciencex.com/help/editorial-standards/ +[54] https://sciencex.com/help/editorial-team/ +[55] http://www.ku.dk/english/ +[56] https://techxplore.com/tags/crashes/ +[57] https://techxplore.com/tags/ordinary+people/ +[58] https://techxplore.com/tags/computer/ +[59] https://techxplore.com/tags/users/ +[60] https://dx.doi.org/10.1145/3582432 +[61] https://techxplore.com/partners/university-of-copenhagen/ +[62] http://www.ku.dk/english/ +[63] https://techxplore.com/news/2016-10-brains-mysteries-human-behaviour.html +[64] javascript:void(0) +[65] javascript:void(0) +[66] https://techxplore.com/news/2023-06-problems.html# +[67] https://techxplore.com/news/2023-06-problems.html# +[68] https://techxplore.com/news/2023-06-problems.html# +[69] https://techxplore.com/news/2023-06-problems.html#nav-featured +[70] https://techxplore.com/news/2023-06-problems.html#nav-commented +[71] https://techxplore.com/news/2023-06-problems.html#nav-popular +[72] https://techxplore.com/news/2024-01-ai-battery-lithium.html +[73] https://techxplore.com/news/2024-01-solution-space-spherical-negative-perceptron.html +[74] https://techxplore.com/news/2024-01-team-anthropic-llms-engage-deceptive.html +[75] https://techxplore.com/news/2024-01-outlines-ionic-blockades-energy-recovery.html +[76] https://techxplore.com/news/2024-01-method-recyclable-flexible-electronics.html +[77] https://techxplore.com/news/2024-01-smart-devices-ambient-sensors-pose.html +[78] https://techxplore.com/news/2024-01-tech-augmented-reality-privacy-problem.html +[79] https://techxplore.com/news/2024-01-ai-battery-lithium.html +[80] https://techxplore.com/news/2024-01-solution-space-spherical-negative-perceptron.html +[81] https://techxplore.com/news/2024-01-team-deepfake-detector-biased.html +[82] https://techxplore.com/news/2024-01-cannabis-harvest-flexible-solar-panels.html +[83] https://techxplore.com/news/2024-01-team-anthropic-llms-engage-deceptive.html +[84] https://techxplore.com/news/2024-01-volocopter-flying-taxi-seduce-paris.html +[85] https://techxplore.com/news/2024-01-hybrid-urban-sourcing-reclaimed-wastewater.html +[86] https://techxplore.com/news/2024-01-africa-chance-green-electricity.html +[87] https://techxplore.com/news/2016-10-brains-mysteries-human-behaviour.html +[88] https://techxplore.com/news/2023-05-quantum-powerful.html +[89] https://techxplore.com/news/2023-05-qa-expert-discusses-realistically-quantum.html +[90] https://phys.org/news/2020-12-tiny-quantum-real-optimization-problem.html +[91] https://techxplore.com/news/2022-10-software-nonspecialists-intuitively-machines-gestures.html +[92] https://phys.org/news/2020-02-scalable-photonic-subset-sum-problem.html +[93] https://techxplore.com/news/2024-01-smart-devices-ambient-sensors-pose.html +[94] https://techxplore.com/news/2024-01-tech-augmented-reality-privacy-problem.html +[95] https://techxplore.com/news/2024-01-solution-space-spherical-negative-perceptron.html +[96] https://techxplore.com/news/2024-01-team-deepfake-detector-biased.html +[97] https://techxplore.com/news/2024-01-zeroing-bias-large-language.html +[98] https://techxplore.com/news/2024-01-robot-baristas-ai-chefs-ces.html +[99] Javascript:void(0); +[101] https://sciencex.com/help/feedback/ +[102] https://sciencex.com/help/comments/ +[111] https://sciencex.com/help/newsletter/ +[116] https://phys.org/ +[117] https://medicalxpress.com/ +[118] https://sciencex.com/ +[122] https://www.facebook.com/TechxploreCom +[123] https://twitter.com/techxplore_com +[124] https://www.linkedin.com/company/tech-xplore/ +[125] https://techxplore.com/feeds/ +[126] https://techxplore.com/news/2023-06-problems.html# +[127] https://techxplore.com/ +[128] https://techxplore.com/search/ +[129] https://techxplore.com/news/2023-06-problems.html?deviceType=mobile +[130] https://sciencex.com/help/ +[131] https://sciencex.com/help/contactus/ +[132] https://sciencex.com/help/about-us/ +[133] https://sciencex.com/help/feedback/ +[134] https://sciencex.com/profile/ +[135] https://sciencex.com/help/donate/ +[136] https://sciencex.com/help/newsletter/ +[137] https://techxplore.com/archive/ +[138] https://play.google.com/store/apps/details?id=com.PhysOrg.TechXplore +[139] https://itunes.apple.com/us/app/tech-xplore/id1154953172?mt=8 +[140] https://techxplore.com/feeds/ +[141] javascript:void(0) +[142] https://sciencex.com/ +[143] https://sciencex.com/help/privacy/ +[144] https://sciencex.com/help/terms/ +[145] https://sciencex.com/help/privacy/ +[146] https://sciencex.com/help/terms/ +[147] https://techxplore.com/news/2023-06-problems.html# +[148] https://sciencex.com/help/cookies/ +[153] https://www.facebook.com/TechxploreCom +[154] https://twitter.com/techxplore_com +[155] https://www.linkedin.com/company/tech-xplore/ +[156] https://techxplore.com/feeds/ +[157] https://sciencex.com/help/adblock/ diff --git a/static/archive/thesweetsetup-com-99zpkj.txt b/static/archive/thesweetsetup-com-99zpkj.txt index b640c90..dca82ad 100644 --- a/static/archive/thesweetsetup-com-99zpkj.txt +++ b/static/archive/thesweetsetup-com-99zpkj.txt @@ -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]Categories + □ [7]Mindfulness + □ [8]Workflows + □ [9]Setups + □ [10]Quick Tips - [6]The Sweet Setup The Sweet Setup - [7]ABOUT [8]COURSES [9]BLOG - [10]Sign In +[11] +[12][ ] [13][Go] +How to Create an Effective Weekly Schedule - * [11]Categories - + [12]Mindfulness - + [13]Workflows - + [14]Setups - + [15]Quick Tips +April 24, 2023 +by [14]Isaac Smith - ____________________ Go +HeroHero How to Create an Effective Weekly Schedule - April 24, 2023 - by [16]Isaac Smith +Have you ever finished a week feeling like your to-do list got longer with each +passing day? - Hero Hero +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. -How to Create an Effective Weekly Schedule +But it’s been a while since I’ve had one of those weeks. And as a whole, they +have become a lot less common. I would attribute much of this due to my weekly +and daily planning process. - Have you ever finished a week feeling like your to-do list got longer - with each passing day? +Every Monday for the past 5 years, I’ve taken the first 15 minutes to plan the +week ahead. - 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. +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. - But it’s been a while since I’ve had one of those weeks. And as a - whole, they have become a lot less common. I would attribute much of - this due to my weekly and daily planning process. +Part of this planning process includes accounting for the unmovable rocks in my +schedule. Meetings, errands, when the kids need picking up, the things I know +are going to happen on a specific day and time. These events act as guardrails +in my schedule. Hard stopping points in which I know I’ll have to transition +out of “get things done” mode. - Every Monday for the past 5 years, I’ve taken the first 15 minutes to - plan the week ahead. - - For me, this has been my single greatest productivity routine. Before - being sucked in to the myriad of inboxes and notifications, I take a - brief moment to identify and plan what is truly important for the week - ahead. - - Part of this planning process includes accounting for the unmovable - rocks in my schedule. Meetings, errands, when the kids need picking up, - the things I know are going to happen on a specific day and time. These - events act as guardrails in my schedule. Hard stopping points in which - I know I’ll have to transition out of “get things done” mode. - - With a framework of my week sketched out, I set myself to the task of - painting what done or progress looks like. First, what two or three - projects do I need to push forward? Second, what are the two to four - tasks associated with each project? And what does “done” mean? The more - specific the better. +With a framework of my week sketched out, I set myself to the task of painting +what done or progress looks like. First, what two or three projects do I need +to push forward? Second, what are the two to four tasks associated with each +project? And what does “done” mean? The more specific the better. Targets - In every sport, there is a clear objective — get the ball into the - basket, hit the target, get to home base, etc. Strategy and tactics may - differ, but ultimately there is clarity on what it means to win. That - clarity allows for an endless number of ways to achieve success. The - rules and boundaries actually cause creativity to thrive within their - confines. +In every sport, there is a clear objective — get the ball into the basket, hit +the target, get to home base, etc. Strategy and tactics may differ, but +ultimately there is clarity on what it means to win. That clarity allows for an +endless number of ways to achieve success. The rules and boundaries actually +cause creativity to thrive within their confines. - When we give ourselves clear objectives (targets) to aim for through - planning, we increase our ability to be creative. A lack of clarity - leads to confusion, inefficiency, and ultimately, frustration. +When we give ourselves clear objectives (targets) to aim for through planning, +we increase our ability to be creative. A lack of clarity leads to confusion, +inefficiency, and ultimately, frustration. - When there is a lack of clarity, people waste time and energy on the - trivial many. When they have sufficient levels of clarity, they are - capable of greater breakthroughs and innovations—greater than people - even realize they ought to have—in those areas that are truly vital. - —Greg McKeown + 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 - For me, the planning process gives me time and space to identify what - is truly important. This results in clarity of what needs to be done. - That clarity moves me to precise action. +For me, the planning process gives me time and space to identify what is truly +important. This results in clarity of what needs to be done. That clarity moves +me to precise action. Winning Each Day - Once I’ve outlined my weekly plan, I turn my attention to the day - ahead. +Once I’ve outlined my weekly plan, I turn my attention to the day ahead. - Weekly plan Weekly plan +Weekly planWeekly plan - The same principles that guide my weekly plan are also true for daily - planning. Greater clarity on what I’m trying to accomplish leads to - taking action. +The same principles that guide my weekly plan are also true for daily planning. +Greater clarity on what I’m trying to accomplish leads to taking action. - This does not mean my tasks do not involve any level of ambiguity. - Often in the doing of something, greater clarity comes as a result. I - try to remove any guesswork for myself in planning out my tasks. +This does not mean my tasks do not involve any level of ambiguity. Often in the +doing of something, greater clarity comes as a result. I try to remove any +guesswork for myself in planning out my tasks. - Instead of assigning myself the task, “write weekly newsletter” I may - start with instead “outline weekly newsletter on restoring margin.” A - smaller, bite-size, specific task. +Instead of assigning myself the task, “write weekly newsletter” I may start +with instead “outline weekly newsletter on restoring margin.” A smaller, +bite-size, specific task. - I’ve found my limit is typically three important tasks (MITs) for each - day. And usually I only have enough brain power for two deep work - tasks. Things that require a large chunk of un-interrupted focus and - creativity. If I assign myself five deep work tasks in a single day, - it’s unlikely I’ll get through three of them, and I’ll finish the day - feeling behind. +I’ve found my limit is typically three important tasks (MITs) for each day. And +usually I only have enough brain power for two deep work tasks. Things that +require a large chunk of un-interrupted focus and creativity. If I assign +myself five deep work tasks in a single day, it’s unlikely I’ll get through +three of them, and I’ll finish the day feeling behind. - The real secret to winning each day has been planning my three MITs the - day before. +The real secret to winning each day has been planning my three MITs the day +before. - At the end of each day I review what I accomplished and compare that to - my plan for the week. Then, I look at my schedule for the next day and - plan the two to three tasks I will tackle. +At the end of each day I review what I accomplished and compare that to my plan +for the week. Then, I look at my schedule for the next day and plan the two to +three tasks I will tackle. - * * * +* * * - All of this leads to a remarkable level of calm and responsiveness to - my work, rather than feeling frantic and reactive. +All of this leads to a remarkable level of calm and responsiveness to my work, +rather than feeling frantic and reactive. - I’m able to be proactive in managing my workload rather than just - surviving the dog-pile nature of incoming requests. +I’m able to be proactive in managing my workload rather than just surviving the +dog-pile nature of incoming requests. - The more I lean into the 4-Focus Method, the more I find it working for - me. +The more I lean into the 4-Focus Method, the more I find it working for me. - IDENTIFY → PLAN → ACT → CELEBRATE +IDENTIFY → PLAN → ACT → CELEBRATE - Studio spread Studio spread +Studio spreadStudio spread - My 15-minute planning session on Monday mornings has changed the way I - get work done. And thankfully, it’s rare to find myself absolutely - buried on Friday as I wrap up my week. +My 15-minute planning session on Monday mornings has changed the way I get work +done. And thankfully, it’s rare to find myself absolutely buried on Friday as I +wrap up my week. - There will always be more work to do, but I know I’ll be able to plan - for it when I’m back in the saddle on Monday. +There will always be more work to do, but I know I’ll be able to plan for it +when I’m back in the saddle on Monday. - (P.S. We’re re-launching our task and time management course All the - Things next month (May). 🙌 In which we cover weekly and daily planning - extensively.) +(P.S. We’re re-launching our task and time management course All the Things +next month (May). 🙌 In which we cover weekly and daily planning extensively.) -Follow us +Follow us [15] [16] [17]Get App Picks, Guides, & More - Get workflow tips, app recommendations, how-to guides, stories, and - more delivered to your inbox. Plus we'll send you our productivity - guide for free! +Get workflow tips, app recommendations, how-to guides, stories, and more +delivered to your inbox. Plus we'll send you our productivity guide for free! - ____________________ +[25][ ] - Sweet! + [26][Sweet!] -[18]Best-Selling Courses +[27]Best-Selling Courses -[19]🎟 All Access Pass 🎟 +[28]🎟 All Access Pass 🎟 - Join the Focus Accelerator to get instant access to the entire course - library, resource vault, and more. [20]» +Join the Focus Accelerator to get instant access to the entire course library, +resource vault, and more. [29]» -[21]NEW: All the Things +[30]NEW: All the Things - Best-selling productivity course. Stop being managed by your task list. - [22]» +Best-selling productivity course. Stop being managed by your task list. [31]» -[23]Full Course List +[32]Full Course List - Serving 15,000 customers since 2013, we have a library full of in-depth - courses to help you be more productive, creative, and focused. [24]View - all courses » +Serving 15,000 customers since 2013, we have a library full of in-depth courses +to help you be more productive, creative, and focused. [33]View all courses » -[25]The Latest Posts +[34]The Latest Posts -[26]Our First Look at Apple’s New Journal App +[35]Our First Look at Apple’s New Journal App - Let’s take a look at Apple’s new Journal app for iPhone and how it - stacks up to one of the perennial apps on the App Store. The app has a - long way to go, but it has some very intriguing elements to start. - [27]» +Let’s take a look at Apple’s new Journal app for iPhone and how it stacks up to +one of the perennial apps on the App Store. The app has a long way to go, but +it has some very intriguing elements to start. [36]» -[28]Tracking Important Events with Up Ahead, Time Blocking Methods, and More +[37]Tracking Important Events with Up Ahead, Time Blocking Methods, and More - Catch up on what we published this week, including a look at Up Ahead - for tracking upcoming events you're looking forward to, a guide to - effectively using time blocking for productivity, and more. [29]» +Catch up on what we published this week, including a look at Up Ahead for +tracking upcoming events you're looking forward to, a guide to effectively +using time blocking for productivity, and more. [38]» -[30]Up Ahead Lets You Track the Important Things in Life +[39]Up Ahead Lets You Track the Important Things in Life - How many days is it until your next trip? How about until your - anniversary? Or maybe that movie you’ve been waiting to see comes out? - You can of course put all of these events on a calendar and find them - that way, but that doesn’t really make it easy to see how long it is - until that thing happens. That's where Up Ahead comes in. [31]» +How many days is it until your next trip? How about until your anniversary? Or +maybe that movie you’ve been waiting to see comes out? You can of course put +all of these events on a calendar and find them that way, but that doesn’t +really make it easy to see how long it is until that thing happens. That's +where Up Ahead comes in. [40]» -[32]The Power of Focus Themes +[41]The Power of Focus Themes - One of the most important concepts to learn as you figure out your 2024 - plans comes from David Allen: "You can do anything you want, but you - can’t do everything you want." [Free Workshop this Monday] [33]» +One of the most important concepts to learn as you figure out your 2024 plans +comes from David Allen: "You can do anything you want, but you can’t do +everything you want." [Free Workshop this Monday] [42]» -[34]The CEO Who Had No Goals (Video) +[43]The CEO Who Had No Goals (Video) - I recently heard a surprising admission from a very successful CEO. - [35]» +I recently heard a surprising admission from a very successful CEO. [44]» - * [36]Home - * [37]About - * [38]Products - * [39]Contact - * [40]Blog - * [41]Newsletter - * [42]Sign In + • [45]Home + • [46]About + • [47]Products + • [48]Contact + • [49]Blog + • [50]Newsletter + • [51]Sign In - A website by [43]Shawn Blanc and friends. See also: [44]The Focus - Course | [45]Tools & Toys - © 2024 Blanc Media, LLC - [46]Design by Ink Blot Media Group • [47]Dev by Jonathan Christopher +A website by [52]Shawn Blanc and friends. See also: [53]The Focus Course | +[54]Tools & Toys +© 2024 Blanc Media, LLC +[55]Design by Ink Blot Media Group • [56]Dev by Jonathan Christopher +fbpx - 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/ diff --git a/static/archive/thesweetsetup-com-x9nbdv.txt b/static/archive/thesweetsetup-com-x9nbdv.txt index e5db8ce..b4204a9 100644 --- a/static/archive/thesweetsetup-com-x9nbdv.txt +++ b/static/archive/thesweetsetup-com-x9nbdv.txt @@ -1,390 +1,385 @@ - #[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 +October 24, 2022 +by [14]Mike Schmitz - NaNoWriMo (National Novel Writing Month) is right around the corner, - and if you’re looking for a great tool to help you hit your writing - goals, there are lots of great options available. +NaNoWriMo (National Novel Writing Month) is right around the corner, and if +you’re looking for a great tool to help you hit your writing goals, there are +lots of great options available. - In this article, I want to make the case for using [17]Obsidian by - showing you how to turn it into a powerful writing environment using a - few essential plugins. +In this article, I want to make the case for using [15]Obsidian by showing you +how to turn it into a powerful writing environment using a few essential +plugins. + +[svg][obsidianwr] But Isn’t Obsidian a Notes App? - That’s what I thought when I first started using it a couple of years - ago. I was hoping it would help me make connections between my notes - and help inspire some new ideas. But over time, I fell in love with it - as a writing tool. In fact, every article I’ve written in the last 2 - years has been written in Obsidian. +That’s what I thought when I first started using it a couple of years ago. I +was hoping it would help me make connections between my notes and help inspire +some new ideas. But over time, I fell in love with it as a writing tool. In +fact, every article I’ve written in the last 2 years has been written in +Obsidian. - What makes Obsidian great as a writing tool is how much you can - customize it using third-party plugins. The number of plugins continues - to grow (676 as of this writing), and with Obsidian recently launching - version 1.0, the app shows no signs of slowing down any time soon. +What makes Obsidian great as a writing tool is how much you can customize it +using third-party plugins. The number of plugins continues to grow (676 as of +this writing), and with Obsidian recently launching version 1.0, the app shows +no signs of slowing down any time soon. My Journey Away from Ulysses - Let me get this out right now: Ulysses is an incredible writing app. +Let me get this out right now: Ulysses is an incredible writing app. - It’s just not for me for a couple of specific reasons. +It’s just not for me for a couple of specific reasons. - First, publishing to the web isn’t quite as easy as it should be with - Ulysses. It does give you the ability to publish straight to WordPress, - and you can even update blog posts from Ulysses now — if you can get it - to connect to your custom WordPress blog. +First, publishing to the web isn’t quite as easy as it should be with Ulysses. +It does give you the ability to publish straight to WordPress, and you can even +update blog posts from Ulysses now — if you can get it to connect to your +custom WordPress blog. - When this broke for me, I started digging in to how to fix it and - quickly came across weird plugins and settings for modifying XMLRPC. - And unfortunately, I could never get it functioning again. I fully - understand it’s something on my domains, but the “simple instructions” - didn’t work for me, and even as a web developer I didn’t feel - comfortable digging too far into this. +When this broke for me, I started digging in to how to fix it and quickly came +across weird plugins and settings for modifying XMLRPC. And unfortunately, I +could never get it functioning again. I fully understand it’s something on my +domains, but the “simple instructions” didn’t work for me, and even as a web +developer I didn’t feel comfortable digging too far into this. - Which meant I was stuck copying and pasting into WordPress. +Which meant I was stuck copying and pasting into WordPress. - And because Ulysses doesn’t use standard Markdown, that meant I had to - “export” my text first. This works, but adds a few extra clicks (or - taps in iOS) in order to get my text out of my writing app. Combine - that with the fact that Ulysses has some weird Markdown formatting that - never quite clicked for me in the first place, and I was left looking - for a straight Markdown-based text editor. +And because Ulysses doesn’t use standard Markdown, that meant I had to “export” +my text first. This works, but adds a few extra clicks (or taps in iOS) in +order to get my text out of my writing app. Combine that with the fact that +Ulysses has some weird Markdown formatting that never quite clicked for me in +the first place, and I was left looking for a straight Markdown-based text +editor. - Obsidian fits that description perfectly. It’s simple, uses plain text - files, provides inline formatting, and supports standard Markdown. It’s - everything I’ve ever wanted in a plain text editor. +Obsidian fits that description perfectly. It’s simple, uses plain text files, +provides inline formatting, and supports standard Markdown. It’s everything +I’ve ever wanted in a plain text editor. - But there are a few additional settings and plugins you can use to make - it even better as a writing app. +But there are a few additional settings and plugins you can use to make it even +better as a writing app. Obsidian Settings - First, let’s look at some of the settings. +First, let’s look at some of the settings. - To access these settings, click the gear icon in the lower-left corner - and then select Editor from the Settings sidebar. +To access these settings, click the gear icon in the lower-left corner and then +select Editor from the Settings sidebar. - The defaults are actually pretty good, but here’s the key settings you - want if you’re going to use Obsidian for writing: - * Make sure that Auto pair Markdown syntax is toggled ON. This - creates both symbols and places the cursor in the middle, making it - easier to create italicized or emphasized text. - * Make sure Smart indent lists is toggled ON. This makes it easier to - create bulleted and numbered lists quickly, automatically adding - the next bullet when you hit the Return key. - * Make sure that Fold heading and Fold indent are toggled ON. This - creates carats for Markdown headers as well as indented text, - adding some cool outliner-inspired features that make it easy to - fold up text in large files and focus on the text you want. +The defaults are actually pretty good, but here’s the key settings you want if +you’re going to use Obsidian for writing: - There are a bunch of other settings you can customize, but many of them - are simply personal preference. These are the important ones. + • Make sure that Auto pair Markdown syntax is toggled ON. This creates both + symbols and places the cursor in the middle, making it easier to create + italicized or emphasized text. + • Make sure Smart indent lists is toggled ON. This makes it easier to create + bulleted and numbered lists quickly, automatically adding the next bullet + when you hit the Return key. + • Make sure that Fold heading and Fold indent are toggled ON. This creates + carats for Markdown headers as well as indented text, adding some cool + outliner-inspired features that make it easy to fold up text in large files + and focus on the text you want. - Once you have your settings, it’s time to move on to the plugins. +There are a bunch of other settings you can customize, but many of them are +simply personal preference. These are the important ones. + +Once you have your settings, it’s time to move on to the plugins. Obsidian Core Plugin Settings - There are two types of plugins in Obsidian: Core plugins that ship with - the app, and Community plugins that you can install to extend the - functionality of Obsidian. We’re going to look at the Core plugins - first. +There are two types of plugins in Obsidian: Core plugins that ship with the +app, and Community plugins that you can install to extend the functionality of +Obsidian. We’re going to look at the Core plugins first. - Here are my recommendations for modifying the Core plugins: - * Make sure that Backlinks and Outgoing Links are both toggled ON. - These are sections available in the right sidebar that show all of - the notes that link to the active note and all of the notes linked - to from the active note respectively. (If you’re new to the concept - of connected notes, check out [18]this article on using the local - graph.) - * Make sure that Outline is toggled ON. This adds a tab in the right - sidebar that creates a table of contents for your note based on the - Markdown headers. This is helpful when you need to jump to a - specific section of a longer text as you can do so simply by - clicking on the appropriate header title. - * Turn the Word Count setting OFF. Word counts are important, but - there’s a Community plugin that does this much better than the - built-in word count tool here. +Here are my recommendations for modifying the Core plugins: - Again, there are a bunch of options here that are personal preference, - but these are the important ones. Once you have these Core plugins set, - it’s time to really make Obsidian dance by adding some Community - plugins. + • Make sure that Backlinks and Outgoing Links are both toggled ON. These are + sections available in the right sidebar that show all of the notes that + link to the active note and all of the notes linked to from the active note + respectively. (If you’re new to the concept of connected notes, check out + [16]this article on using the local graph.) + • Make sure that Outline is toggled ON. This adds a tab in the right sidebar + that creates a table of contents for your note based on the Markdown + headers. This is helpful when you need to jump to a specific section of a + longer text as you can do so simply by clicking on the appropriate header + title. + • Turn the Word Count setting OFF. Word counts are important, but there’s a + Community plugin that does this much better than the built-in word count + tool here. + +Again, there are a bunch of options here that are personal preference, but +these are the important ones. Once you have these Core plugins set, it’s time +to really make Obsidian dance by adding some Community plugins. Obsidian Community Plugins for an Upgraded Writing Experience - You can access the Community plugins public directory by going to - Settings → Community plugins → Browse once you’ve toggled off Safe - Mode. From there, you can find plugins for just about anything, from - [19]embedding tasks from Todoist to [20]creating timeblocked daily - plans to [21]creating kanban boards — all based on your locally-stored - plain text files using standard Markdown. +You can access the Community plugins public directory by going to Settings → +Community plugins → Browse once you’ve toggled off Safe Mode. From there, you +can find plugins for just about anything, from [17]embedding tasks from Todoist +to [18]creating timeblocked daily plans to [19]creating kanban boards — all +based on your locally-stored plain text files using standard Markdown. - All of the plugin links I share below are Obsidian links - (obsidian://link-adress) that will open straight to the plug-in page if - you have Obsidian installed and running on your device. +[svg][obsidianpl] - Note that many of the plugins I will share here are 1:1 replacements - for standard features in Ulysses, so if you don’t mind non-standard - Markdown formatting and don’t run into the publishing issues that I - did, maybe try that instead. But if you’re all in with Obsidian, here - are the plugins I use to make Obsidian my perfect writing app. +All of the plugin links I share below are Obsidian links (obsidian:// +link-adress) that will open straight to the plug-in page if you have Obsidian +installed and running on your device. + +Note that many of the plugins I will share here are 1:1 replacements for +standard features in Ulysses, so if you don’t mind non-standard Markdown +formatting and don’t run into the publishing issues that I did, maybe try that +instead. But if you’re all in with Obsidian, here are the plugins I use to make +Obsidian my perfect writing app. Better Word Count - The first plugin is called [22]Better Word Count. This replaces the - built-in word count core plugin, and it functions largely the same with - one key addition: when you highlight text, it shows the - words/characters of the highlighted text instead of the whole document. +The first plugin is called [20]Better Word Count. This replaces the built-in +word count core plugin, and it functions largely the same with one key +addition: when you highlight text, it shows the words/characters of the +highlighted text instead of the whole document. - It’s not as good as the writing stats in Ulysses, but it’s good enough - for me. +[svg][obsidianbw] + +It’s not as good as the writing stats in Ulysses, but it’s good enough for me. cMenu - If you’re uncomfortable relying on your memory for Markdown formatting, - [23]cMenu is a third-party plugin that gives you a minimal text editor - modal that allows you to do things like bold, italicize, strikethrough, - underline, and toggle blockquotes. +If you’re uncomfortable relying on your memory for Markdown formatting, [21] +cMenu is a third-party plugin that gives you a minimal text editor modal that +allows you to do things like bold, italicize, strikethrough, underline, and +toggle blockquotes. - If you don’t like the default options, you can customize what shows up - in the modal by adding any of the Commands in your Obsidian library. +[svg][obsidiancm] + +If you don’t like the default options, you can customize what shows up in the +modal by adding any of the Commands in your Obsidian library. Reading Time - Another handy Ulysses feature is being able to see how long it will - take to read the text in the selected file. But you can add this - feature to the status bar using the [24]Reading Time plugin. +Another handy Ulysses feature is being able to see how long it will take to +read the text in the selected file. But you can add this feature to the status +bar using the [22]Reading Time plugin. - This one is pretty straightforward — just install it and turn it on and - you’ll see the reading time at the bottom of your Obsidian window. You - can customize your reading speed in the settings for the plugin. +[svg][obsidianre] + +This one is pretty straightforward — just install it and turn it on and you’ll +see the reading time at the bottom of your Obsidian window. You can customize +your reading speed in the settings for the plugin. Footnote Shortcut - If you use footnotes a lot, they can be a bit of a pain to create with - standard Markdown. It’s a lot easier with the [25]Obsidian Footnotes - plugin.^[26]1 +If you use footnotes a lot, they can be a bit of a pain to create with standard +Markdown. It’s a lot easier with the [23]Obsidian Footnotes plugin.^[24]1 - Once installed, you can find it in the Command Palette and with the - hotkey: Footnote Shortcut: Insert and Navigate Footnote. You can - customize the hotkey by going to Settings → Hotkey and searching for - Footnote, which will then insert the appropriate Markdown and navigate - to the bottom of the note where you can insert the text for your - footnote. +[svg][obsidianfo] + +Once installed, you can find it in the Command Palette and with the hotkey: +Footnote Shortcut: Insert and Navigate Footnote. You can customize the hotkey +by going to Settings → Hotkey and searching for Footnote, which will then +insert the appropriate Markdown and navigate to the bottom of the note where +you can insert the text for your footnote. Focus Mode - The Obsidian interface can be a little distracting when you’re trying - to focus on your words. Fortunately, the [27]Focus Mode plugin allows - you to remove all the distractions and focus on what you’re writing. +The Obsidian interface can be a little distracting when you’re trying to focus +on your words. Fortunately, the [25]Focus Mode plugin allows you to remove all +the distractions and focus on what you’re writing. - Once the plugin is installed and active, just click the Toggle Focus - Mode button to hide the sidebars and status bar, and you can - shift-click the button to hide everything but the active writing pane. +[svg][obsidianfo] + +Once the plugin is installed and active, just click the Toggle Focus Mode +button to hide the sidebars and status bar, and you can shift-click the button +to hide everything but the active writing pane. Typewriter Scroll - [28]This plugin keeps the currently selected line in the middle of the - screen as you type. As you type, the focus moves from the current - section to the next section by moving the rest of the page in the - background, much like an old-fashioned typewriter. +[26]This plugin keeps the currently selected line in the middle of the screen +as you type. As you type, the focus moves from the current section to the next +section by moving the rest of the page in the background, much like an +old-fashioned typewriter. - There’s even a Zen Mode option that grays out the background text to - help you focus on the line that you are currently writing. +[svg][obsidianty] + +There’s even a Zen Mode option that grays out the background text to help you +focus on the line that you are currently writing. Novel Word Count - If you are aiming to write a book (fiction or non-fiction), you - probably have a total word count in mind. [29]Novel Word Count shows - you the number of words that a document or folder contains in the - sidebar so you can keep track of your long-form writing progress. +If you are aiming to write a book (fiction or non-fiction), you probably have a +total word count in mind. [27]Novel Word Count shows you the number of words +that a document or folder contains in the sidebar so you can keep track of your +long-form writing progress. - You can also use pages, characters, date created, and date updated (as - well as a few different combinations) that can be configured in the - plugin settings once you turn it on. +[svg][obsidianno] + +You can also use pages, characters, date created, and date updated (as well as +a few different combinations) that can be configured in the plugin settings +once you turn it on. Conclusion - Obsidian is much more than just a notes app, and might be the perfect - writing tool for you if you want to: - 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 is much more than just a notes app, and might be the perfect writing +tool for you if you want to: - Obsidian may not be for everyone, but since it’s completely free to - start, there’s no reason not to give it a spin. - __________________________________________________________________ + 1. Store your plain text files locally + 2. Use something that supports standard Markdown + 3. Gives you the flexibility to craft your writing environment - 1. Since it’s an Obsidian Command, you could also add this as a button - to the cMenu plugin mentioned above. [30]↩ +Obsidian may not be for everyone, but since it’s completely free to start, +there’s no reason not to give it a spin. -Follow us +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 1. Since it’s an Obsidian Command, you could also add this as a button to the + cMenu plugin mentioned above. [28]↩ + +Follow us [29] [30] [31]Get App Picks, Guides, & More - Get workflow tips, app recommendations, how-to guides, stories, and - more delivered to your inbox. Plus we'll send you our productivity - guide for free! +Get workflow tips, app recommendations, how-to guides, stories, and more +delivered to your inbox. Plus we'll send you our productivity guide for free! - ____________________ +[39][ ] - Sweet! + [40][Sweet!] -[32]Best-Selling Courses +[41]Best-Selling Courses -[33]🎟 All Access Pass 🎟 +[42]🎟 All Access Pass 🎟 - Join the Focus Accelerator to get instant access to the entire course - library, resource vault, and more. [34]» +Join the Focus Accelerator to get instant access to the entire course library, +resource vault, and more. [43]» -[35]NEW: All the Things +[44]NEW: All the Things - Best-selling productivity course. Stop being managed by your task list. - [36]» +Best-selling productivity course. Stop being managed by your task list. [45]» -[37]Full Course List +[46]Full Course List - Serving 15,000 customers since 2013, we have a library full of in-depth - courses to help you be more productive, creative, and focused. [38]View - all courses » +Serving 15,000 customers since 2013, we have a library full of in-depth courses +to help you be more productive, creative, and focused. [47]View all courses » -[39]The Latest Posts +[48]The Latest Posts -[40]Our First Look at Apple’s New Journal App +[49]Our First Look at Apple’s New Journal App - Let’s take a look at Apple’s new Journal app for iPhone and how it - stacks up to one of the perennial apps on the App Store. The app has a - long way to go, but it has some very intriguing elements to start. - [41]» +Let’s take a look at Apple’s new Journal app for iPhone and how it stacks up to +one of the perennial apps on the App Store. The app has a long way to go, but +it has some very intriguing elements to start. [50]» -[42]Tracking Important Events with Up Ahead, Time Blocking Methods, and More +[51]Tracking Important Events with Up Ahead, Time Blocking Methods, and More - Catch up on what we published this week, including a look at Up Ahead - for tracking upcoming events you're looking forward to, a guide to - effectively using time blocking for productivity, and more. [43]» +Catch up on what we published this week, including a look at Up Ahead for +tracking upcoming events you're looking forward to, a guide to effectively +using time blocking for productivity, and more. [52]» -[44]Up Ahead Lets You Track the Important Things in Life +[53]Up Ahead Lets You Track the Important Things in Life - How many days is it until your next trip? How about until your - anniversary? Or maybe that movie you’ve been waiting to see comes out? - You can of course put all of these events on a calendar and find them - that way, but that doesn’t really make it easy to see how long it is - until that thing happens. That's where Up Ahead comes in. [45]» +How many days is it until your next trip? How about until your anniversary? Or +maybe that movie you’ve been waiting to see comes out? You can of course put +all of these events on a calendar and find them that way, but that doesn’t +really make it easy to see how long it is until that thing happens. That's +where Up Ahead comes in. [54]» -[46]The Power of Focus Themes +[55]The Power of Focus Themes - One of the most important concepts to learn as you figure out your 2024 - plans comes from David Allen: "You can do anything you want, but you - can’t do everything you want." [Free Workshop this Monday] [47]» +One of the most important concepts to learn as you figure out your 2024 plans +comes from David Allen: "You can do anything you want, but you can’t do +everything you want." [Free Workshop this Monday] [56]» -[48]The CEO Who Had No Goals (Video) +[57]The CEO Who Had No Goals (Video) - I recently heard a surprising admission from a very successful CEO. - [49]» +I recently heard a surprising admission from a very successful CEO. [58]» - * [50]Home - * [51]About - * [52]Products - * [53]Contact - * [54]Blog - * [55]Newsletter - * [56]Sign In + • [59]Home + • [60]About + • [61]Products + • [62]Contact + • [63]Blog + • [64]Newsletter + • [65]Sign In - A website by [57]Shawn Blanc and friends. See also: [58]The Focus - Course | [59]Tools & Toys - © 2024 Blanc Media, LLC - [60]Design by Ink Blot Media Group • [61]Dev by Jonathan Christopher +A website by [66]Shawn Blanc and friends. See also: [67]The Focus Course | +[68]Tools & Toys +© 2024 Blanc Media, LLC +[69]Design by Ink Blot Media Group • [70]Dev by Jonathan Christopher +fbpx - 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/ diff --git a/static/archive/timharek-no-ah7ilz.txt b/static/archive/timharek-no-ah7ilz.txt index 83cf368..92270f0 100644 --- a/static/archive/timharek-no-ah7ilz.txt +++ b/static/archive/timharek-no-ah7ilz.txt @@ -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 +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 - just (). +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. +Helix is fun and easy! I highly recommend Helix if you: - 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 +[20]Reply via email +Last deploy: 2024-01-10 - Last deploy: 2024-01-10 + • [21]Stats + • [22]Privacy + • [23]Connect + • [24]Subscribe - * [21]Stats - * [22]Privacy - * [23]Connect - * [24]Subscribe -References +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 - - 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 diff --git a/static/archive/twonerds-net-pv4a04.txt b/static/archive/twonerds-net-pv4a04.txt index 92c57e1..165ddce 100644 --- a/static/archive/twonerds-net-pv4a04.txt +++ b/static/archive/twonerds-net-pv4a04.txt @@ -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 +[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! +FullSizeRender.jpg +FullSizeRender.jpg - 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 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! - 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_0459.JPG +IMG_0461.JPG +IMG_0457.JPG +IMG_0460.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! +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 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_0456.JPG +IMG_0361.JPG +IMG_0349.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! +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). - Stay tuned for Monday's ride to San Gimignano! +IMG_0411.JPG +IMG_0451.JPG +IMG_0415.JPG - Bike Route: 29.4 miles // 2,711 ft of elevation - gain. [10]https://www.strava.com/activities/986032513 +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! - [11]May 15, 2017 /[12]Claire +IMG_0454.JPG +IMG_0453.JPG - * [13]Newer - * [14]Older + 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. - 2017 © Two Nerds Dot Net. All Rights Reserved. No content from this - site may be used without written permission. +IMG_0422.JPG -References + 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! - 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 +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 + +[11]May 15, 2017 /[12]Claire + + • [13]Newer + • [14]Older + +2017 © Two Nerds Dot Net. All Rights Reserved. No content from this site may be +used without written permission. + + +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 diff --git a/static/archive/vladh-net-lmumqo.txt b/static/archive/vladh-net-lmumqo.txt index ad25e42..17c7998 100644 --- a/static/archive/vladh-net-lmumqo.txt +++ b/static/archive/vladh-net-lmumqo.txt @@ -1,359 +1,349 @@ - A logo showing a blue circle - Vlad-Stefan Harbuz - Menu - * [1]About - * [2]Music - * [3]Photos - * [4]Books - * [5]RSS +[1] +A logo showing a blue circle +Vlad-Stefan Harbuz +Menu - 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 + • [2]About + • [3]Music + • [4]Photos + • [5]Books + • [6]RSS - 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 +Philosophy - Languages - * [22]Japanese Recommendations - * [23]German Noun Genders + • [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 - Fun - * [24]Most Minimal UK Address +Programming - * [25]About - * [26]Music - * [27]Photos - * [28]Books - * [29]RSS + • [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 - 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 +Languages - 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 + • [23]Japanese Recommendations + • [24]German Noun Genders - Languages - * [46]Japanese Recommendations - * [47]German Noun Genders +Fun - Fun - * [48]Most Minimal UK Address + • [25]Most Minimal UK Address + + • [26]About + • [27]Music + • [28]Photos + • [29]Books + • [30]RSS + +Philosophy + + • [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 + + • [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 + + • [47]Japanese Recommendations + • [48]German Noun Genders + +Fun + + • [49]Most Minimal UK Address Resources on the Philosophy of Work - 04 August 2022 +04 August 2022 - Wage labour is when you get paid a salary by a company to do work, - thereby renting out your time. It’s not a good system because it forces - employees to be exploited by manager-owners. This exploitation can be - financial, for example if you get paid less than you produce, but it - can also be something more than that. One often ends up in a situation - where one finds one’s work meaningless, because one cannot connect to, - own and direct one’s work in a hierarchical managerial workplace. - Additionally, because wage labour is by far the most widespread method - of organising work, one might feel powerless to attempt to connect to - their work without having someone else own and direct it. +Wage labour is when you get paid a salary by a company to do work, thereby +renting out your time. It’s not a good system because it forces employees to be +exploited by manager-owners. This exploitation can be financial, for example if +you get paid less than you produce, but it can also be something more than +that. One often ends up in a situation where one finds one’s work meaningless, +because one cannot connect to, own and direct one’s work in a hierarchical +managerial workplace. Additionally, because wage labour is by far the most +widespread method of organising work, one might feel powerless to attempt to +connect to their work without having someone else own and direct it. - Worse, even when one works 8 hours per day, the remaining hours are - often dedicated to recovering from work and restoring one’s energy so - that one may be productive on the next workday. All of these things - come together to form something called “alienation” — our work is - important to us, and we should have a positive connection to it, but we - end up having a deficient and corrupted connection to it, which is an - injustice. +Worse, even when one works 8 hours per day, the remaining hours are often +dedicated to recovering from work and restoring one’s energy so that one may be +productive on the next workday. All of these things come together to form +something called “alienation” — our work is important to us, and we should have +a positive connection to it, but we end up having a deficient and corrupted +connection to it, which is an injustice. - Some might say that this is unavoidable, but this is not true. In fact, - the very idea of this system being unavoidable is a result of a bad way - of looking at things called “reification”, which means taking something - that us humans have made up, such as our economic system, and saying - that it is actually real and inevitably has power over us. This is not - the case because it is us who structured society in this way, and we - could have done it any other way. +Some might say that this is unavoidable, but this is not true. In fact, the +very idea of this system being unavoidable is a result of a bad way of looking +at things called “reification”, which means taking something that us humans +have made up, such as our economic system, and saying that it is actually real +and inevitably has power over us. This is not the case because it is us who +structured society in this way, and we could have done it any other way. - Indeed, we know that it is possible to be creative without being - oppressed. Most people can contrast alienated wage labour (what some - simply sweepingly call “work”) with playful creation, where someone is - compelled by passion and interest to put a lot of effort into creating - something. In fact, we know that, ironically, we are usually more - productive in this passionate state, than when we are managed and - disciplined into doing something we do not care about. +Indeed, we know that it is possible to be creative without being oppressed. +Most people can contrast alienated wage labour (what some simply sweepingly +call “work”) with playful creation, where someone is compelled by passion and +interest to put a lot of effort into creating something. In fact, we know that, +ironically, we are usually more productive in this passionate state, than when +we are managed and disciplined into doing something we do not care about. - One might object that this view is naïve because it is not possible to - simply do what we’re passionate about — there are many jobs that must - be done and that are simply not fun. But the fact of the matter is that - a very large amount of today’s jobs are entirely pointless and - unneccesary. Instead, they only exist to provide a reason to perpetuate - the status quo of wage labour. +One might object that this view is naïve because it is not possible to simply +do what we’re passionate about — there are many jobs that must be done and that +are simply not fun. But the fact of the matter is that a very large amount of +today’s jobs are entirely pointless and unneccesary. Instead, they only exist +to provide a reason to perpetuate the status quo of wage labour. - Imagine someone doing a job we knew to be completely useless, and - receiving a salary for it every month. How would we respond to the - proposal of paying this person their salary, but allowing them to - simply stop doing their work? Many would react negatively and say that - this person would be getting paid for nothing. But is it not concerning - that we would want someone to waste their life away doing something - which is never useful to anyone, just so that we can feel that they - have thereby somehow earned their right to exist? +Imagine someone doing a job we knew to be completely useless, and receiving a +salary for it every month. How would we respond to the proposal of paying this +person their salary, but allowing them to simply stop doing their work? Many +would react negatively and say that this person would be getting paid for +nothing. But is it not concerning that we would want someone to waste their +life away doing something which is never useful to anyone, just so that we can +feel that they have thereby somehow earned their right to exist? - Gradual change is possible, and a big part of this change is cultural. - This means first realising all the harmful things that gross inequality - of income and power does, then changing our values to say that everyone - deserves to direct their own life and earn a fair living. This does not - necessarily mean that everyone actually will be able to do these - things, but the first step is recognising the current state of affairs - as unjustifiable. +Gradual change is possible, and a big part of this change is cultural. This +means first realising all the harmful things that gross inequality of income +and power does, then changing our values to say that everyone deserves to +direct their own life and earn a fair living. This does not necessarily mean +that everyone actually will be able to do these things, but the first step is +recognising the current state of affairs as unjustifiable. - Here are some beginner-friendly books and articles on this topic that I - have loved, and are both eloquent and fun to read. I have also included - some quotes that I feel explain these concepts well. +Here are some beginner-friendly books and articles on this topic that I have +loved, and are both eloquent and fun to read. I have also included some quotes +that I feel explain these concepts well. Introductory Essays and Books - [49]“In Praise of Idleness” Bertrand Russell [50]“Bullshit Jobs” David - Graeber [51]“The Tyranny of Merit” Michael J. Sandel [52]“The Abolition - of Work” Bob Black +[50] “In Praise of Idleness” Bertrand Russell [51] “Bullshit Jobs” David +Graeber [52] “The Tyranny of Merit” Michael J. Sandel [53] “The Abolition of +Work” Bob Black - The absolute best place to start is “In Praise of Idleness”, a short - and very accessible essay by Russell that explains some of the most - basic problems with our conception of work. “Bullshit Jobs” is a - classic in which Graeber describes how many of the jobs we are - currently doing are simply not useful to anyone. In “The Tyranny of - Merit”, which I have found life-changing, Sandel describes how our - conceptions of “merit” do not align with reality, and that our - blindness to this affects our lives significantly. Lastly, “The - Abolition of Work” is a classic and emotionally powerful essay by Bob - Black in which he very clearly describes many of the problems with - “work”, but this essay can also be too polemical and antagonising. +The absolute best place to start is “In Praise of Idleness”, a short and very +accessible essay by Russell that explains some of the most basic problems with +our conception of work. “Bullshit Jobs” is a classic in which Graeber describes +how many of the jobs we are currently doing are simply not useful to anyone. In +“The Tyranny of Merit”, which I have found life-changing, Sandel describes how +our conceptions of “merit” do not align with reality, and that our blindness to +this affects our lives significantly. Lastly, “The Abolition of Work” is a +classic and emotionally powerful essay by Bob Black in which he very clearly +describes many of the problems with “work”, but this essay can also be too +polemical and antagonising. More In-Depth Books - [53]“Another Now” Yanis Varoufakis [54]“Talking to my Daughter About - the Economy” Yanis Varoufakis +[54] “Another Now” Yanis Varoufakis [55] “Talking to my Daughter About the +Economy” Yanis Varoufakis - People often ask me what a system that abolishes wage labour and - capitalism would look like. In “Another Now”, former Greek finance - minister Yanis Varoufakis tells a fictional story that describes what - such a parallel world would look like, and he goes into significant - economic detail. Similarly, “Talking to my Daughter About the Economy” - is an easy to read and light-hearted description of today’s economy. +People often ask me what a system that abolishes wage labour and capitalism +would look like. In “Another Now”, former Greek finance minister Yanis +Varoufakis tells a fictional story that describes what such a parallel world +would look like, and he goes into significant economic detail. Similarly, +“Talking to my Daughter About the Economy” is an easy to read and light-hearted +description of today’s economy. Philosophical Background - [55]“Alienation” Rahel Jaeggi [56]“Free Time” Theodor W. Adorno +[56] “Alienation” Rahel Jaeggi [57] “Free Time” Theodor W. Adorno - Perhaps you have read the more accessible material above, but would - like to get more into the philosophical details. In “Alienation”, Rahel - Jaeggi describes the history of the concept of alienation, and - describes a modern and analytic way to look at it, which I find very - useful. Her description really makes one wonder about the aspects of - alienation that transcend the financial, such as its impact on our - epistemic agency. Adorno’s “Free Time” is an amazingly insightful look - at how work has profound effects on us not only during our time at the - workplace, but also during our so-called “free time”, which the - employer nonetheless deeply affects and controls. +Perhaps you have read the more accessible material above, but would like to get +more into the philosophical details. In “Alienation”, Rahel Jaeggi describes +the history of the concept of alienation, and describes a modern and analytic +way to look at it, which I find very useful. Her description really makes one +wonder about the aspects of alienation that transcend the financial, such as +its impact on our epistemic agency. Adorno’s “Free Time” is an amazingly +insightful look at how work has profound effects on us not only during our time +at the workplace, but also during our so-called “free time”, which the employer +nonetheless deeply affects and controls. - You can also read my somewhat amateurish essay, [57]“Alternatives to - Wage Labour”. +You can also read my somewhat amateurish essay, [58]“Alternatives to Wage +Labour”. Explanatory quotes - Here are some quotes that I feel explain the ideas I have referenced - above quite well. I do not necessarily directly endorse all of these - perspectives, but rather find it useful to illustrate how philosophers - describe these issues. +Here are some quotes that I feel explain the ideas I have referenced above +quite well. I do not necessarily directly endorse all of these perspectives, +but rather find it useful to illustrate how philosophers describe these issues. - We should do away with the absolutely specious notion that everybody - has to earn a living. It is a fact today that one in ten thousand of - us can make a technological breakthrough capable of supporting all - the rest. The youth of today are absolutely right in recognizing - this nonsense of earning a living. We keep inventing jobs because of - this false idea that everybody has to be employed at some kind of - drudgery because, according to Malthusian Darwinian theory he must - justify his right to exist. So we have inspectors of inspectors and - people making instruments for inspectors to inspect inspectors. The - true business of people should be to go back to school and think - about whatever it was they were thinking about before somebody came - along and told them they had to earn a living. + We should do away with the absolutely specious notion that everybody has to + earn a living. It is a fact today that one in ten thousand of us can make a + technological breakthrough capable of supporting all the rest. The youth of + today are absolutely right in recognizing this nonsense of earning a + living. We keep inventing jobs because of this false idea that everybody + has to be employed at some kind of drudgery because, according to + Malthusian Darwinian theory he must justify his right to exist. So we have + inspectors of inspectors and people making instruments for inspectors to + inspect inspectors. The true business of people should be to go back to + school and think about whatever it was they were thinking about before + somebody came along and told them they had to earn a living. - — Buckminster Fuller + — Buckminster Fuller - The ‘positive’ sense of the word ‘liberty’ derives from the wish on - the part of the individual to be his own master. I wish my life and - decisions to depend on myself, not on external forces of whatever - kind. I wish to be the instrument of my own, not of other men’s, - acts of will. I wish to be a subject, not an object; to be moved by - reasons, by conscious purposes, which are my own, not by causes - which affect me, as it were, from outside. I wish to be somebody, - not nobody; a doer—deciding, not being decided for, self-directed - and not acted upon by external nature or by other men as if I were a - thing, or an animal, or a slave incapable of playing a human role, - that is, of conceiving goals and policies of my own and realizing - them. (…) I wish, above all, to be conscious of myself as a - thinking, willing, active being, bearing responsibility for my - choices and able to explain them by references to my own ideas and - purposes. I feel free to the degree that I believe this to be true, - and enslaved to the degree that I am made to realize that it is not. + The ‘positive’ sense of the word ‘liberty’ derives from the wish on the + part of the individual to be his own master. I wish my life and decisions + to depend on myself, not on external forces of whatever kind. I wish to be + the instrument of my own, not of other men’s, acts of will. I wish to be a + subject, not an object; to be moved by reasons, by conscious purposes, + which are my own, not by causes which affect me, as it were, from outside. + I wish to be somebody, not nobody; a doer—deciding, not being decided for, + self-directed and not acted upon by external nature or by other men as if I + were a thing, or an animal, or a slave incapable of playing a human role, + that is, of conceiving goals and policies of my own and realizing them. (…) + I wish, above all, to be conscious of myself as a thinking, willing, active + being, bearing responsibility for my choices and able to explain them by + references to my own ideas and purposes. I feel free to the degree that I + believe this to be true, and enslaved to the degree that I am made to + realize that it is not. - — Isaiah Berlin + — 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 + — 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. + 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. - — 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 - this life that he leads, alienated from himself? + 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” + — 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/ diff --git a/static/archive/warpspire-com-bhv7lv.txt b/static/archive/warpspire-com-bhv7lv.txt index 66cda09..a02404a 100644 --- a/static/archive/warpspire-com-bhv7lv.txt +++ b/static/archive/warpspire-com-bhv7lv.txt @@ -1,333 +1,323 @@ - #[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 +January 15, 2023 - Another year, and another [6]blog post (singular). Oh well. I always - have aspirations to publish more! But you know, one of the joys of - being semi-retired is not having to do anything. You know, it’s been a - hard few years. So I tried to take it easy on myself in 2022. I spent a - lot of time exploring, a lot of time reflecting, and a good bit of time - just doing whatever felt right at the time. +Another year, and another [6]blog post (singular). Oh well. I always have +aspirations to publish more! But you know, one of the joys of being +semi-retired is not having to do anything. You know, it’s been a hard few +years. So I tried to take it easy on myself in 2022. I spent a lot of time +exploring, a lot of time reflecting, and a good bit of time just doing whatever +felt right at the time. - For example, going on a road trip with my mountain bike +For example, going on a road trip with my mountain bike - Recently I’ve been reflecting on some of my favorite things from last - year. Maybe as a way to focus on the positive. Maybe as a way to keep - track of time in our time sick world. Maybe just to get back into the - habit of writing. So here’s some of my favorite reads of 2022. - __________________________________________________________________ +Recently I’ve been reflecting on some of my favorite things from last year. +Maybe as a way to focus on the positive. Maybe as a way to keep track of time +in our time sick world. Maybe just to get back into the habit of writing. So +here’s some of my favorite reads of 2022. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Books - I really enjoy reading, but this year I kind of gave myself a pass on - anything too serious — mostly sticking to my trusty home base - of science fiction. - * [7][this-is-how-you-lose-the-time-war.jpg] +I really enjoy reading, but this year I kind of gave myself a pass on anything +too serious — mostly sticking to my trusty home base of science fiction. -This is How You Lose The Time War - * [8][rendevous-with-rama.jpg] + • [7] [this-is-ho] -Rendevous with Rama - * [9][elder-race.jpg] + This is How You Lose The Time War -Elder Race - * [10][artifact-space.jpg] + • [8] [rendevous-] -Artifact Space + Rendevous with Rama + + • [9] [elder-race] + + Elder Race + + • [10] [artifact-s] + + Artifact Space Amal El-Mohtar and Max Gladstone’s [11]This is How You Lose the Time War - From the publisher: +From the publisher: - Among the ashes of a dying world, an agent of the Commandment finds - a letter. It reads: Burn before reading. + Among the ashes of a dying world, an agent of the Commandment finds a + letter. It reads: Burn before reading. - Thus begins an unlikely correspondence between two rival agents - hellbent on securing the best possible future for their warring - factions. Now, what began as a taunt, a battlefield boast, becomes - something more. Something epic. Something romantic. Something that - could change the past and the future. + Thus begins an unlikely correspondence between two rival agents hellbent on + securing the best possible future for their warring factions. Now, what + began as a taunt, a battlefield boast, becomes something more. Something + epic. Something romantic. Something that could change the past and the + future. - I fucking loved this book. I started it based on a recommendation from - a friend, and didn’t really look into it much before I started. This - book is much less about the plot (which is a play off The End of - Eternity) and more about the writing and world building. The best way I - could describe it is a spy story told through love letters in a poetic - universe. +I fucking loved this book. I started it based on a recommendation from a +friend, and didn’t really look into it much before I started. This book is much +less about the plot (which is a play off The End of Eternity) and more about +the writing and world building. The best way I could describe it is a spy story +told through love letters in a poetic universe. - Think of birds as a comms channel I can open and close seasonally; - fellow operatives relate their work to me at the equinoxes; Garden - blooms more brightly in my belly. There’s enough traffic that it’s a - simple matter to disguise incoming and outgoing correspondence, - misdirect, hide in plain sight. + Think of birds as a comms channel I can open and close seasonally; fellow + operatives relate their work to me at the equinoxes; Garden blooms more + brightly in my belly. There’s enough traffic that it’s a simple matter to + disguise incoming and outgoing correspondence, misdirect, hide in plain + sight. - It’s also a short read, which was a nice breath of fresh air after - finishing off the Dune series prior to picking this one up. I have a - feeling this is going to be one of my most recommended books going - forward. +It’s also a short read, which was a nice breath of fresh air after finishing +off the Dune series prior to picking this one up. I have a feeling this is +going to be one of my most recommended books going forward. Arthur C. Clarke’s [12]Rendevous with Rama - From the publisher: +From the publisher: - An enormous cylindrical object has entered Earth’s solar system on a - collision course with the sun. A team of astronauts are sent to - explore the mysterious craft, which the denizens of the solar system - name Rama. What they find is astonishing evidence of a civilization - far more advanced than ours. They find an interior stretching over - fifty kilometers; a forbidding cylindrical sea; mysterious and - inaccessible buildings; and strange machine-animal hybrids, or - “biots,” that inhabit the ship. But what they don’t find is an alien - presence. So who–and where–are the Ramans? + An enormous cylindrical object has entered Earth’s solar system on a + collision course with the sun. A team of astronauts are sent to explore the + mysterious craft, which the denizens of the solar system name Rama. What + they find is astonishing evidence of a civilization far more advanced than + ours. They find an interior stretching over fifty kilometers; a forbidding + cylindrical sea; mysterious and inaccessible buildings; and strange + machine-animal hybrids, or “biots,” that inhabit the ship. But what they + don’t find is an alien presence. So who–and where–are the Ramans? - I’d never read the Rama books before, so when I heard that Denis - Villeneuve was going to be [13]tackling Rendevous with Rama, I took the - opportunity to read the whole series (Rendevous with Rama, Rama II, The - Garden of Rama, and Rama Revealed). +I’d never read the Rama books before, so when I heard that Denis Villeneuve was +going to be [13]tackling Rendevous with Rama, I took the opportunity to read +the whole series (Rendevous with Rama, Rama II, The Garden of Rama, and Rama +Revealed). - Rendevous with Rama is a fantastically Clarke book. A team of highly - trained professionals all work together to explore a mysterious object - in space. Does much more need to be said? This book went down like a - peanut butter and jelly sandwich. My only criticism is that it left me - wanting for was more. +Rendevous with Rama is a fantastically Clarke book. A team of highly trained +professionals all work together to explore a mysterious object in space. Does +much more need to be said? This book went down like a peanut butter and jelly +sandwich. My only criticism is that it left me wanting for was more. - Rama is a cosmic egg, being warmed by the fires of the Sun. It may - hatch at any moment. + Rama is a cosmic egg, being warmed by the fires of the Sun. It may hatch at + any moment. - And unfortunately, there is more. +And unfortunately, there is more. - Clarke teamed up with Gentry Lee to write three more novels — Rama II, - The Garden of Rama, and Rama Revealed and I all I can say is: I do not - recommend them. They are upsetting in very odd child-bride wedding - night kinds of ways. +Clarke teamed up with Gentry Lee to write three more novels — Rama II, The +Garden of Rama, and Rama Revealed and I all I can say is: I do not recommend +them. They are upsetting in very odd child-bride wedding night kinds of ways. Adrian Tchaikovsky’s [14]Elder Race - From the publisher: +From the publisher: - A junior anthropologist on a distant planet must help the locals he - has sworn to study to save a planet from an unbeatable foe. + A junior anthropologist on a distant planet must help the locals he has + sworn to study to save a planet from an unbeatable foe. - I loved Tchaikovsky’s Children of Time, so when I heard Jason Snell - offer up Elder Race on The Incomperable, I decided to give it a go. I - absolutely love the premise of this book. It’s a singular story told - from two different viewpoints, one of them science fiction, and the - other fantasy — both happening in parallel — because the two main - characters don’t share enough dialect to explain themselves to each - other. +I loved Tchaikovsky’s Children of Time, so when I heard Jason Snell offer up +Elder Race on The Incomperable, I decided to give it a go. I absolutely love +the premise of this book. It’s a singular story told from two different +viewpoints, one of them science fiction, and the other fantasy — both happening +in parallel — because the two main characters don’t share enough dialect to +explain themselves to each other. - They think I’m a wizard. They think I’m a fucking wizard. That’s - what I am to them, some weird goblin man from another time with - magic powers. And I literally do not have the language to tell them - otherwise. I say, “scientist,” “scholar,” but when I speak to them, - in their language, these are both cognates for “wizard.” I imagine - myself standing there speaking to Lyn and saying, “I’m not a wizard; - I’m a wizard, or at best a wizard.” It’s not funny. + They think I’m a wizard. They think I’m a fucking wizard. That’s what I am + to them, some weird goblin man from another time with magic powers. And I + literally do not have the language to tell them otherwise. I say, + “scientist,” “scholar,” but when I speak to them, in their language, these + are both cognates for “wizard.” I imagine myself standing there speaking to + Lyn and saying, “I’m not a wizard; I’m a wizard, or at best a wizard.” It’s + not funny. - And who doesn’t love an old, cranky wizard anthropologist? +And who doesn’t love an old, cranky wizard anthropologist? Miles Cameron’s [15]Artifact Space - From the publisher: +From the publisher: - Out in the darkness of space, something is targeting the Greatships. + 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. + 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. - This was another recommendation from a friend, and I’m glad I picked it - up. At it’s core, it’s about highly competent people all working - together, pushing their limits, and achieving success. It’s the kind of - genre someone once described to me as competency porn — Star Trek: The - Next Generation being the ultimate example. +This was another recommendation from a friend, and I’m glad I picked it up. At +it’s core, it’s about highly competent people all working together, pushing +their limits, and achieving success. It’s the kind of genre someone once +described to me as competency porn — Star Trek: The Next Generation being the +ultimate example. - There was very little drama in Space Operations. In fact, every - station projected an elaborate aura of calm, as if they were - competing to be dry and emotionless. No one swore, no one spat, no - one was angry or afraid. Nbaro loved it. + There was very little drama in Space Operations. In fact, every station + projected an elaborate aura of calm, as if they were competing to be dry + and emotionless. No one swore, no one spat, no one was angry or afraid. + Nbaro loved it. - This book pulls from a lot of familiar ideas — the Greatships are an - obvious call back to Battlestars, while a lot of the socialist themes - call back to Star Trek’s economy. My biggest criticism of this book is - the maddening way Cameron switches back and forth between using - character’s first and last names — even within the same scene! It makes - it incredibly difficult to keep track of who is who with such a large - cast, and toward the end I caught myself not even remembering who a - certain person was. +This book pulls from a lot of familiar ideas — the Greatships are an obvious +call back to Battlestars, while a lot of the socialist themes call back to Star +Trek’s economy. My biggest criticism of this book is the maddening way Cameron +switches back and forth between using character’s first and last names — even +within the same scene! It makes it incredibly difficult to keep track of who is +who with such a large cast, and toward the end I caught myself not even +remembering who a certain person was. Dennis E. Taylor’s [16]Heaven’s River (Audiobook) - From the publisher: +From the publisher: - More than a hundred years ago, Bender set out for the stars and was - never heard from again. There has been no trace of him despite - numerous searches by his clone-mates. Now Bob is determined to - organize an expedition to learn Bender’s fate—whatever the cost. + More than a hundred years ago, Bender set out for the stars and was never + heard from again. There has been no trace of him despite numerous searches + by his clone-mates. Now Bob is determined to organize an expedition to + learn Bender’s fate—whatever the cost. - The Bobiverse is probably my favorite audiobook series of all time. - It’s all a part of a grand space opera spanning the galaxy… but also - pretty sarcastic and silly? Ray Porter does an amazing job of narrating - these books, and is a large part of why I enjoy them so much. +The Bobiverse is probably my favorite audiobook series of all time. It’s all a +part of a grand space opera spanning the galaxy… but also pretty sarcastic and +silly? Ray Porter does an amazing job of narrating these books, and is a large +part of why I enjoy them so much. - Heaven’s River finds a way to pull the series back from the infinite - and focuses back down on a single planet for a great little beaver - adventure. +Heaven’s River finds a way to pull the series back from the infinite and +focuses back down on a single planet for a great little beaver adventure. - Well, space beavers. - __________________________________________________________________ +Well, space beavers. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Even More Books - Neal Stephenson’s [17]Termination Shock: Okay, I actually like - Stephenson, and this is a very good book about the inevitable future of - Geoengineering and it’s political consequences. Coupled with a very - weird Queen fetish. It’s weird. Weird enough to take away from the - story line. But if the climate angle of the book interests you — I - highly recommend [18]After Geoengineering as a follow-up. +Neal Stephenson’s [17]Termination Shock: Okay, I actually like Stephenson, and +this is a very good book about the inevitable future of Geoengineering and it’s +political consequences. Coupled with a very weird Queen fetish. It’s weird. +Weird enough to take away from the story line. But if the climate angle of the +book interests you — I highly recommend [18]After Geoengineering as a +follow-up. - Baoshu’s [19]The Redemption of Time: A semi-official 4th book of the - Three Body Problem. This is a great continuation of the series, and a - good way to answer some lingering questions about the Trisolarians. +Baoshu’s [19]The Redemption of Time: A semi-official 4th book of the Three Body +Problem. This is a great continuation of the series, and a good way to answer +some lingering questions about the Trisolarians. - Frank Herbert’s [20]Heretics of Dune (Dune 5): I was a little shocked - at how much I loved this book. I mean, I love Dune. But this one ended - up being one of my favorites of the series. Great new characters, new - technologies, and a whole new set of powers for the Atreides genetics. +Frank Herbert’s [20]Heretics of Dune (Dune 5): I was a little shocked at how +much I loved this book. I mean, I love Dune. But this one ended up being one of +my favorites of the series. Great new characters, new technologies, and a whole +new set of powers for the Atreides genetics. - Adrian Tchaikovsky’s [21]Children of Time: This was actually a re-read - in preparation of reading Children of Ruin and the upcoming Children of - Memory. What can I say? It’s one of my favorite science fiction books - of all time — even if only for the worldbuilding. Sentient spiders? - Sentient spiders! - __________________________________________________________________ +Adrian Tchaikovsky’s [21]Children of Time: This was actually a re-read in +preparation of reading Children of Ruin and the upcoming Children of Memory. +What can I say? It’s one of my favorite science fiction books of all time — +even if only for the worldbuilding. Sentient spiders? Sentient spiders! + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Newsletters Alex Steffen’s [22]The Snap Forward - From [23]Discontinuity is the Job: +From [23]Discontinuity is the Job: - To be alive right now is to find ourselves flattened against the - fact that the entire human world—our cities and infrastructure, our - economy and education system, our farms and factories, our laws and - politics—was built for a different planet. + To be alive right now is to find ourselves flattened against the fact that + the entire human world—our cities and infrastructure, our economy and + education system, our farms and factories, our laws and politics—was built + for a different planet. - I can’t remember exactly how I stumbled on Alex Steffen’s The Snap - Forward but the idea instantly clicked with me. His newsletter focuses - on how climate has affected our infrastructure, our society, and our - relationship to the world. I love his newsletter because it makes me - feel more sane in a world that keeps trying to sell a new carbon offset - marketplace as the solution. +I can’t remember exactly how I stumbled on Alex Steffen’s The Snap Forward but +the idea instantly clicked with me. His newsletter focuses on how climate has +affected our infrastructure, our society, and our relationship to the world. I +love his newsletter because it makes me feel more sane in a world that keeps +trying to sell a new carbon offset marketplace as the solution. - From [24]Tempo, Timing, and the Translucence of the Future +From [24]Tempo, Timing, and the Translucence of the Future - The tempo of change, and our refusal to acknowledge its - acceleration, has turned our visions of continuity, stability and - value into fantasy worlds. We’re cosplaying people who live in past - decades before discontinuity ate our societies. + The tempo of change, and our refusal to acknowledge its acceleration, has + turned our visions of continuity, stability and value into fantasy worlds. + We’re cosplaying people who live in past decades before discontinuity ate + our societies. - I wouldn’t classify The Snap Forward as doomerism, either. It’s a focus - on accepting the world as it is and looking for solutions within that - framework. Even if all emissions were cut to zero tomorrow, we’d still - be facing a myriad of very challenging futures. What do we do with that - knowledge? How do we prepare for the transapocalyptic now? +I wouldn’t classify The Snap Forward as doomerism, either. It’s a focus on +accepting the world as it is and looking for solutions within that framework. +Even if all emissions were cut to zero tomorrow, we’d still be facing a myriad +of very challenging futures. What do we do with that knowledge? How do we +prepare for the transapocalyptic now? Matt Levine’s [25]Money Stuff - I’ve been reading Money Stuff for a few years now, and I can’t really - put my thumb on why I love it so much. Sure, it’s about finance… but - kind of the weird stuff in finance. More about the cogs of the - machinery and the weird personalities in the news than it is about - whether the S&P 500 is going to go up or down next week. +I’ve been reading Money Stuff for a few years now, and I can’t really put my +thumb on why I love it so much. Sure, it’s about finance… but kind of the weird +stuff in finance. More about the cogs of the machinery and the weird +personalities in the news than it is about whether the S&P 500 is going to go +up or down next week. - From [26]FTX’s Balance Sheet Was Bad: +From [26]FTX’s Balance Sheet Was Bad: - But then there is the “Hidden, poorly internally labeled ‘fiat@’ - account,” with a balance of negative $8 billion. I don’t actually - think that you’re supposed to subtract that number from net equity — - though I do not know how this balance sheet is supposed to work! — - but it doesn’t matter. If you try to calculate the equity of a - balance sheet with an entry for HIDDEN POORLY INTERNALLY LABELED - ACCOUNT, Microsoft Clippy will appear before you in the flesh, - bloodshot and staggering, with a knife in his little paper-clip - hand, saying “just what do you think you’re doing Dave?” You cannot - apply ordinary arithmetic to numbers in a cell labeled “HIDDEN - POORLY INTERNALLY LABELED ACCOUNT.” The result of adding or - subtracting those numbers with ordinary numbers is not a number; it - is prison. + But then there is the “Hidden, poorly internally labeled ‘fiat@’ account,” + with a balance of negative $8 billion.  I don’t actually think that you’re + supposed to subtract that number from net equity — though I do not know how + this balance sheet is supposed to work! — but it doesn’t matter. If you try + to calculate the equity of a balance sheet with an entry for HIDDEN POORLY + INTERNALLY LABELED ACCOUNT, Microsoft Clippy will appear before you in the + flesh, bloodshot and staggering, with a knife in his little paper-clip + hand, saying “just what do you think you’re doing Dave?” You cannot apply + ordinary arithmetic to numbers in a cell labeled “HIDDEN POORLY INTERNALLY + LABELED ACCOUNT.” The result of adding or subtracting those numbers with + ordinary numbers is not a number; it is prison. - It’s an understatement to say I don’t love finance, but I do enjoy me - some Money Stuff. - __________________________________________________________________ +It’s an understatement to say I don’t love finance, but I do enjoy me some +Money Stuff. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ What’s Next? - I’ve really been enjoying re-visiting some of my favorite authors and - finishing off big series I never quite got around to. Last year I - finally finished off the whole of Frank Herbert’s Dune (never having - read 5 & 6 before), and this year I’m getting the itch to do the same - for Foundation. To be frank, I don’t even remember where I ended with - that series. But it does feel like a good opportunity to maybe just - re-visit the entirety of the Asimov Universe… [27]in chronological - order. I’m also getting a terrible itch to revisit a bunch of - Vonnegut’s work after watching the excellent [28]Unstuck in Time. But I - like new authors too! +I’ve really been enjoying re-visiting some of my favorite authors and finishing +off big series I never quite got around to. Last year I finally finished off +the whole of Frank Herbert’s Dune (never having read 5 & 6 before), and this +year I’m getting the itch to do the same for Foundation. To be frank, I don’t +even remember where I ended with that series. But it does feel like a good +opportunity to maybe just re-visit the entirety of the Asimov Universe… [27]in +chronological order. I’m also getting a terrible itch to revisit a bunch of +Vonnegut’s work after watching the excellent [28]Unstuck in Time. But I like +new authors too! - I’m also interested in finding more books and newsletters about… I - guess you’d call it urban design. Stuff like [29]Strong Towns and other - sources of how to adapt our cities into resilient communities. I - actually have background in city planning from my Civil Engineering - days, but I feel like there’s been a big surge in new thinking that - goes farther than the YIMBY/NIMBY noise of the past decade. +I’m also interested in finding more books and newsletters about… I guess you’d +call it urban design. Stuff like [29]Strong Towns and other sources of how to +adapt our cities into resilient communities. I actually have background in city +planning from my Civil Engineering days, but I feel like there’s been a big +surge in new thinking that goes farther than the YIMBY/NIMBY noise of the past +decade. - Have some recommendations? Hit me up on Mastadon: - [30]@kneath@indieweb.social. +Have some recommendations? Hit me up on Mastadon: [30]@kneath@indieweb.social. - Est. 2003 • Do Hard Things • Build. Learn. Explore. +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 diff --git a/static/archive/world-hey-com-ivvqlb.txt b/static/archive/world-hey-com-ivvqlb.txt index 117fc2f..ae14a77 100644 --- a/static/archive/world-hey-com-ivvqlb.txt +++ b/static/archive/world-hey-com-ivvqlb.txt @@ -1,103 +1,104 @@ - #[1]Feed +[1] [avatar-fb3] - [2][avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244] +David Heinemeier Hansson - David Heinemeier Hansson - - May 4, 2023 +May 4, 2023 Even Amazon can't make sense of serverless or microservices - The Prime Video team at Amazon has published a rather [3]remarkable - case study on their decision to dump their serverless, microservices - architecture and replace it with a monolith instead. This move saved - them a staggering 90%(!!) on operating costs, and simplified the system - too. What a win! - But beyond celebrating their good sense, I think there's a bigger point - here that applies to our entire industry. Here's the telling bit: +The Prime Video team at Amazon has published a rather [2]remarkable case study +on their decision to dump their serverless, microservices architecture and +replace it with a monolith instead. This move saved them a staggering 90%(!!) +on operating costs, and simplified the system too. What a win! - "We designed our initial solution as a distributed system using - serverless components... In theory, this would allow us to scale - each service component independently. However, the way we used some - components caused us to hit a hard scaling limit at around 5% of the - expected load." +But beyond celebrating their good sense, I think there's a bigger point here +that applies to our entire industry. Here's the telling bit: - That really sums up so much of the microservices craze that was tearing - through the tech industry for a while: IN THEORY. Now the real-world - results of all this theory are finally in, and it's clear that in - practice, microservices pose perhaps the biggest siren song for - needlessly complicating your system. And serverless only makes it - worse. - What makes this story unique is that Amazon was the original poster - child for service-oriented architectures. The far more reasonable prior - to microservices. An organizational pattern for dealing with - intra-company communication at crazy scale when API calls beat - scheduling coordination meetings. - SOA makes perfect sense at the scale of Amazon. No single team could - ever hope to know or understand everything needed to steer such a fleet - of supertankers. Making teams coordinate via published APIs was a - stroke of genius. - But, as with many good ideas, this pattern turned toxic as soon as it - was adopted outside its original context, and wreaked havoc once it got - pushed into the internals of single-application architectures. That's - how we got microservices. - In many ways, microservices is a zombie architecture. Another strain of - an intellectual contagion that just refuses to die. It's been eating - brains since the dark days of J2EE (remote server beans, anyone??) - through the [4]WS-Deathstar nonsense, and now in the form of - microservices and serverless. - But this third wave seems finally to have crested. I wrote an ode to - [5]The Majestic Monolith way back in 2016. Kelsey Hightower, one of the - leading voices behind Kubernetes, [6]put it beautifully in 2020: - "We’re gonna break [the monolith] up and somehow find the - engineering discipline we never had in the first place... Now you - went from writing bad code to building bad infrastructure. - Because it drives a lot of new spend, it drives a lot of new hiring… - So a lot of people get addicted to all the flourishment of money, - and marketing, and it’s just a lot of buzz that people are attaching - their assignment to, when honestly it’s not gonna necessarily solve - their problem." + "We designed our initial solution as a distributed system using serverless + components... In theory, this would allow us to scale each service + component independently. However, the way we used some components caused us + to hit a hard scaling limit at around 5% of the expected load." - Bingo. Replacing method calls and module separations with network - invocations and service partitioning within a single, coherent team and - application is madness in almost all cases. - I'm happy that we beat back the zombie onslaught of that terrible idea - for the third time in my living memory, but we still need to stay - vigilant that we'll eventually have to do it again. Some bad ideas - simply refuse to die no matter how many times you kill them. All you - can do is recognize when they rise from the dead once more, and keep - your retorical shotgun locked and loaded. - 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. +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. - Subscribe to get future posts via email (or grab the [17]RSS feed) - ____________________ (BUTTON) Subscribe +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. - [18]Sent to the world with HEY +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. -References +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. - 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 +In many ways, microservices is a zombie architecture. Another strain of an +intellectual contagion that just refuses to die. It's been eating brains since +the dark days of J2EE (remote server beans, anyone??) through the [3] +WS-Deathstar nonsense, and now in the form of microservices and serverless. + +But this third wave seems finally to have crested. I wrote an ode to [4]The +Majestic Monolith way back in 2016. Kelsey Hightower, one of the leading voices +behind Kubernetes, [5]put it beautifully in 2020: + + + "We’re gonna break [the monolith] up and somehow find the engineering + discipline we never had in the first place... Now you went from writing bad + code to building bad infrastructure.   + + Because it drives a lot of new spend, it drives a lot of new hiring… So a + lot of people get addicted to all the flourishment of money, and marketing, + and it’s just a lot of buzz that people are attaching their assignment to, + when honestly it’s not gonna necessarily solve their problem." + + +Bingo. Replacing method calls and module separations with network invocations +and service partitioning within a single, coherent team and application is +madness in almost all cases.  + +I'm happy that we beat back the zombie onslaught of that terrible idea for the +third time in my living memory, but we still need to stay vigilant that we'll +eventually have to do it again. Some bad ideas simply refuse to die no matter +how many times you kill them. All you can do is recognize when they rise from +the dead once more, and keep your retorical shotgun locked and loaded. + +About David Heinemeier Hansson + +Made [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 + + +References: + +[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 diff --git a/static/archive/www-annahavron-com-34fw9w.txt b/static/archive/www-annahavron-com-34fw9w.txt index 7a821ec..2bba9e0 100644 --- a/static/archive/www-annahavron-com-34fw9w.txt +++ b/static/archive/www-annahavron-com-34fw9w.txt @@ -1,287 +1,284 @@ - #[1]RSS Feed - - [2] - 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 - [14]Anna Havron - - [15]Articles - [16]Blog - [17]Articles by Topic - [18]Sort Your Signals - [19]About - [20]Subscribe - [21]Site Notes - [22]About this site - [23]Privacy Policy - (BUTTON) Open Menu Close Menu - - Folder: Articles - [24]Back - Blog - Articles by Topic - Sort Your Signals - About - Subscribe - Folder: Site Notes - [25]Back - About this site - Privacy Policy +[1] +0 +[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 +[18] Sort Your Signals +[19] About +[20] Subscribe +[21] Site Notes +[22] About this site +[23] Privacy Policy +Open Menu Close Menu +[25] +Folder: Articles +[26] Back +[27] +Blog +[28] +Articles by Topic +[29] +Sort Your Signals +[30] +About +[31] +Subscribe +[32] +Folder: Site Notes +[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 +Mar 29 +Written By [36]Anna Havron - Often the question that drives people’s initial interest in - productivity is: “How am I going to get everything done?” +Often the question that drives people’s initial interest in productivity is: +“How am I going to get everything done?” - For me, at least, that was true: I got to a point where my life was too - complicated for me to manage it without a productivity system. And so I - learned about systems for managing time and information and tasks and - goals and projects. +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. - These systems have allowed me to get a lot more done, than I could have - without them. +These systems have allowed me to get a lot more done, than I could have without +them. - But the danger is that we might too easily substitute getting things - done — checking off tasks, chores, projects — for living a life of - depth and resonance. +But the danger is that we might too easily substitute getting things done — +checking off tasks, chores, projects — for living a life of depth and +resonance. - For example, I want to take a couple of hours [27]for an adventure to - visit a heron rookery nearby, so I can see dozens of Great Blue herons - nesting. +For example, I want to take a couple of hours [37]for an adventure to visit a +heron rookery nearby, so I can see dozens of Great Blue herons nesting. - But nesting season for herons coincides with my busiest time of the - year. +But nesting season for herons coincides with my busiest time of the year. - If I tell myself that I need to get everything done before I take time - to see this, nesting season will be over. I will miss the experience of - seeing them. (And I still won’t get everything done; I can always think - of more that I would like to have done, than I can actually do.) +If I tell myself that I need to get everything done before I take time to see +this, nesting season will be over. I will miss the experience of seeing them. +(And I still won’t get everything done; I can always think of more that I would +like to have done, than I can actually do.) Stop Asking Yourself How You’ll Get Everything Done - Most productivity and organizational systems are geared toward the - world of work, paid or unpaid. +Most productivity and organizational systems are geared toward the world of +work, paid or unpaid. - Few talk about managing your time so that you can pursue important - relationships and activities that feed your spirit, but not your bank - account. (Laura Vanderkam’s recent book, Tranquility by Tuesday, is one - exception to this.) +Few talk about managing your time so that you can pursue important +relationships and activities that feed your spirit, but not your bank account. +(Laura Vanderkam’s recent book, Tranquility by Tuesday, is one exception to +this.) - But what we call “leisure activities,” non-work or chore activities, - non-productive activities in the economic sense, are the very - activities you might look back on as the most important to cultivating - a well-lived life: a life where you’ve had rich relationships, where - you’ve taken time to create things that gave you pleasure to create, - where you’ve taken time to contribute your energy and efforts to make - this world a better place. +But what we call “leisure activities,” non-work or chore activities, +non-productive activities in the economic sense, are the very activities you +might look back on as the most important to cultivating a well-lived life: a +life where you’ve had rich relationships, where you’ve taken time to create +things that gave you pleasure to create, where you’ve taken time to contribute +your energy and efforts to make this world a better place. - Sometimes the belief that you must finish everything on the list, - whether it’s paid work tasks or chores around the house, robs you of - leisure time: “But I can’t stop working until I get everything done!” +Sometimes the belief that you must finish everything on the list, whether it’s +paid work tasks or chores around the house, robs you of leisure time: “But I +can’t stop working until I get everything done!” - Part of the solution for this is using time management techniques such - as [28]paying yourself first. +Part of the solution for this is using time management techniques such as [38] +paying yourself first. - But part of it is also reframing the question. +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 make real? - What do you want to bring from your imagination, into real life? +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? +What do I want to make real, today? - This can be very small! The other day what I most wanted to make real, - was some clean socks. (Doing the laundry, a care task I dislike, is - much more satisfying for me when I cheer myself on, saying, “You go, - Anna, giving yourself clean socks, good for you!”) +This can be very small! The other day what I most wanted to make real, was some +clean socks. (Doing the laundry, a care task I dislike, is much more satisfying +for me when I cheer myself on, saying, “You go, Anna, giving yourself clean +socks, good for you!”) - I also want to write a book, which is a lot more work than throwing a - load of wash into a machine. +I also want to write a book, which is a lot more work than throwing a load of +wash into a machine. - To make my book real in the world, I’m going to have to put in - consistent thought and effort over time. The same is true for making - things real like starting your own business, learning a trade, - socializing a dog to become a beloved part of the family. +To make my book real in the world, I’m going to have to put in consistent +thought and effort over time. The same is true for making things real like +starting your own business, learning a trade, socializing a dog to become a +beloved part of the family. - But some things that are important to you, and that bring you a lot of - joy, you can make real without much trouble at all. +But some things that are important to you, and that bring you a lot of joy, you +can make real without much trouble at all. Making Things Real is About Responding to Opportunities - When I was a child, I lived in the Southwest of the U.S., and in - northern New England: places where cherry blossom trees don’t grow. +When I was a child, I lived in the Southwest of the U.S., and in northern New +England: places where cherry blossom trees don’t grow. - Every year during the spring I would see the Cherry Blossom Festival - pictures in Washington, DC, and I thought that those trees looked like - blooming clouds, banks of flowering clouds, on the banks of the - Potomac. I dreamed of seeing them in real life. +Every year during the spring I would see the Cherry Blossom Festival pictures +in Washington, DC, and I thought that those trees looked like blooming clouds, +banks of flowering clouds, on the banks of the Potomac. I dreamed of seeing +them in real life. - It wasn’t until my thirties that I got to experience the Cherry Blossom - Festival in Washington, DC, in real life rather than in my imagination. +It wasn’t until my thirties that I got to experience the Cherry Blossom +Festival in Washington, DC, in real life rather than in my imagination. - That memory of walking under hundreds of flowering cherry trees, with - dark rain clouds overhead playing up the lightness of those short-lived - blossoms, remains one of the most vividly piercing things I have ever - experienced. +That memory of walking under hundreds of flowering cherry trees, with dark rain +clouds overhead playing up the lightness of those short-lived blossoms, remains +one of the most vividly piercing things I have ever experienced. - By that time, we lived in an area where cherry trees could grow. - However, our house already had such a large old maple shading the yard - that we couldn’t plant other trees. +By that time, we lived in an area where cherry trees could grow. However, our +house already had such a large old maple shading the yard that we couldn’t +plant other trees. - One day, a storm came and toppled our maple tree. +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. +And so we did. - Here it is! +cherry blossom branches with a blue sky behind them - It took less than a day to plant it. That was fourteen years ago. +Here it is! - Now, it is full grown. +It took less than a day to plant it. That was fourteen years ago. - 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. +Now, it is full grown. - 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. +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. - And it was hardly any work at all. - __________________________________________________________________ +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. - Copy and share - [30]the link is here. Never miss a post from - annahavron.com! [31]Subscribe here to get blog posts via email. - __________________________________________________________________ +And it was hardly any work at all. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +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 - Previous - Previous +[42] Anna Havron +[43] +Previous +Previous City Hawk - Next - Next +[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 diff --git a/static/archive/www-annahavron-com-8hj07z.txt b/static/archive/www-annahavron-com-8hj07z.txt index 21e9169..e46739e 100644 --- a/static/archive/www-annahavron-com-8hj07z.txt +++ b/static/archive/www-annahavron-com-8hj07z.txt @@ -1,130 +1,134 @@ - #[1]RSS Feed - - [2] - 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 - [14]Anna Havron - - [15]Articles - [16]Blog - [17]Articles by Topic - [18]Sort Your Signals - [19]About - [20]Subscribe - [21]Site Notes - [22]About this site - [23]Privacy Policy - (BUTTON) Open Menu Close Menu - - Folder: Articles - [24]Back - Blog - Articles by Topic - Sort Your Signals - About - Subscribe - Folder: Site Notes - [25]Back - About this site - Privacy Policy +[1] +0 +[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 +[18] Sort Your Signals +[19] About +[20] Subscribe +[21] Site Notes +[22] About this site +[23] Privacy Policy +Open Menu Close Menu +[25] +Folder: Articles +[26] Back +[27] +Blog +[28] +Articles by Topic +[29] +Sort Your Signals +[30] +About +[31] +Subscribe +[32] +Folder: Site Notes +[33] Back +[34] +About this site +[35] +Privacy Policy Why Have a Values Plan? - May 26 - Written By [26]Anna Havron +May 26 +Written By [36]Anna Havron - Sharing [27]a talk I gave last week, as one of the presenters at - [28]micro.blog’s annual [29]Micro Camp. +Sharing [37]a talk I gave last week, as one of the presenters at [38] +micro.blog’s annual [39]Micro Camp. - Bonus: for those of you who like to make cocktails at home, find out - the real reason behind the Chartreuse shortage! +Bonus: for those of you who like to make cocktails at home, find out the real +reason behind the Chartreuse shortage! - Yes, this is the sine qua non of a first world problem. +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: +Extra bonus: a drawing I just made now, to go with the talk: - Bonus to the bonus bonus: +[project] - Here’s [30]the handout I made to go with the talk. +Bonus to the bonus bonus: - [31]Anna Havron +Here’s [40]the handout I made to go with the talk. - Previous - Previous + + +[41] Anna Havron +[42] +Previous +Previous Holding the Space - Next - Next +[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 diff --git a/static/archive/www-artofmanliness-com-6lxmwc.txt b/static/archive/www-artofmanliness-com-6lxmwc.txt index 4b7c606..552fb08 100644 --- a/static/archive/www-artofmanliness-com-6lxmwc.txt +++ b/static/archive/www-artofmanliness-com-6lxmwc.txt @@ -1,550 +1,475 @@ - #[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: + + 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 + +[36] [lazy] [37]3 Ways to Wear a Henley Shirt [38] [lazy] [39]A Man’s Guide to +the Oxford Shirt [40] [lazy] [41]Skill of the Week: Instantly Recognize a +Quality Suit [42] [lazy] [43]How to Get the Stink Out of Synthetic Workout +Shirts +[44] [lazy] [45]Did Commandos Go Commando? [46] [lazy] [47]A Man’s Guide to +Fragrance: How to Choose and Wear Cologne [48] [lazy] [49]My Go-To Sunglasses +for Summer [50] [lazy] [51]How to Pick the Perfect Men’s Wedding Ring +[52] [lazy] [53]Your No-Nonsense Guide to Choosing the Right Beard Style [54] +[lazy] [55]How to Grow a Beard: The One and True Guide [56] [lazy] [57]Beard +Oil FAQs: Answering All Your Pressing Beardly Questions [58] [lazy] [59]Beard +Grooming 101: The Lowdown on Products and Routine +[60] [lazy] [61]Skill of the Week: Tie a Scarf 5 Different Ways [62] * [63]How +to Tie a Tie [64] [lazy] [65]Skill of the Week: Tie the Half-Windsor Necktie +Knot [66] [lazy] [67]How to Match a Shirt and Tie + +[68]Browse all Get Style + + • [69] Fitness + • [70] Health + • [71] Program Review + +[72] [lazy] [73]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot +[74] [lazy] [75]Podcast #767: Fat Loss Made Simple [76] [lazy] [77]Legendary +Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum Muscle Growth [78] +[lazy] [79]Podcast #939: What Lifting Ancient Stones Can Teach You About Being +a Man +[80] [lazy] [81]What You Can Learn About Shedding Pounds From the Vacation +Weight Loss Paradox [82] [lazy] [83]You Need to Eat More Fiber [84] [lazy] [85] +Silencing the Ring: Proven Strategies for Tinnitus Relief [86] [lazy] [87] +Podcast #947: Turn Your Anxiety Into a Strength +[88] [lazy] [89]The Insanely Difficult Standards of History’s Hardest P.E. +Program [90] [lazy] [91]Which Fitness Program Is Right for You? [92] [lazy] +[93]A Review of the MovNat Workshop [94] [lazy] [95]Strengthen Your Tribe: A +Report on the Atomic Athlete Vanguard + +[96]Browse all Get Strong + + • [97] Family + • [98] Fatherhood + • [99] Relationships + • [100] Social Skills + +[101] [lazy] [102]Podcast #946: Counterintuitive Ideas About Marriage, Family, +and Kids [103] [lazy] [104]The Best Riddles for Kids (With Answers!) [105] +[lazy] [106]Podcast #858: The Affectionate, Ambiguous, and Surprisingly +Ambivalent Relationship Between Siblings [107] [lazy] [108]How to Fight +Entitlement and Develop Gratitude in Your Kids +[109] [lazy] [110]How to Parent-Teacher Conference [111] [lazy] [112]5 Ways +Fathers Hugely Influence Their Daughters [113] [lazy] [114]Sunday Firesides: We +Shouldn’t (and Should) Be Friends With Our Kids [115] [lazy] [116]What to Do +When Your Kid Lies to You +[117] [lazy] [118]Sunday Firesides: Can We Finally Stop Blaming the Puritans? +[119] [lazy] [120]Sunday Firesides: The Sit-in-Silence Relationship Test [121] +[lazy] [122]Sunday Firesides: Treat People as Ends, Not Means [123] [lazy] +[124]Podcast #919: Advice on Making Love Last . . . From a Divorce Lawyer +[125] [lazy] [126]Podcast #957: How Curiosity Conversations Can Supercharge +Your Success [127] [lazy] [128]Podcast #837: The Cues That Make You Charismatic +[129] [lazy] [130]Podcast #938: Social Skills as the Road to Character [131] +[lazy] [132]Podcast #915: Finally Learn to Say No + +[133]Browse all Get Social + + • [134] How To + • [135] Manly Know-How + • [136] Outdoor/Survival + +[137] [lazy] [138]Skill of the Week: Wrap a Gift [139] [lazy] [140]How to +De-Ice Your Windshield Easily and Effectively [141] [lazy] [142]Skill of the +Week: Paint a Room [143] [lazy] [144]Skill of the Week: Store and Stack +Firewood +[145] [lazy] [146]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t +Make Your House Smoky) [147] [lazy] [148]How to Adjust Your Car Mirrors to +Eliminate Blind Spots [149] [lazy] [150]Skill of the Week: Throw a Perfect +Football Spiral [151] [lazy] [152]What’s the Difference Between Gas Octanes? +[153] [lazy] [154]Skill of the Week: How to Build a Quinzee Snow Shelter [155] +[lazy] [156]Skill of the Week: Survive an Earthquake [157] [lazy] [158]Two +Things You Should Be Doing to Take Better Care of Your Camping Gear [159] +[lazy] [160]Skill of the Week: How to Emergency Rappel + +[161]Browse all Get Skilled + +in: [167]Advice, [168]Character, [169]Sunday Firesides + +Brett & Kate McKay • October 29, 2022 + +Sunday Firesides: To-Dos, the Rent We Pay For Living + +[To-Dos-Rent-for-Living-3] + +[170] [171] [172] [173] [174] + +You probably brushed your teeth this morning. And will do so tonight. And 730 +more times in the year to come. + +As soon as the last load of laundry is folded, it’s time to put in another +wash. As soon as you’re done eating and cleaning up one meal, it’s time to +start making the next. + +There is a constantly replenishing supply of new texts and emails to answer, +bills to pay, stuff to buy, bookings to make, forms to fill out. + +Whenever you cross one to-do off the list, you add a couple more on. + +Whatever you did the day before, you have to wake up and do it all over again. + +The relentless slog of life’s maintenance work can feel tiresome, burdensome, +annoying. + +It can feel like you’re Sisyphus, pushing a boulder up a hill, only to have it +roll back down, ready to be pushed up once more. - IFRAME: [4]https://www.googletagmanager.com/ns.html?id=GTM-KXJGHMC +Yet we should be glad to continually find this boulder resting at our feet. - Menu [5]logo [6]podcast ____________________ - Submit +Drudgery and chores are the rent we pay for living. - * [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 - Search +While we inhabit mortal existence, this rent is due every day. - * [32]Clothing - * [33]Accessories - * [34]Facial Hair - * [35]Ties +It’s not a fine, but a fee. - [36]3 Ways to Wear a Henley Shirt +A ticket to continue to ride. - [37]A Man’s Guide to the Oxford Shirt +To-dos keep our world spinning, and signal that we continue to exist on a +spinning world. - [38]Skill of the Week: Instantly Recognize a Quality Suit +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. - [39]How to Get the Stink Out of Synthetic Workout Shirts - - [40]Did Commandos Go Commando? - - [41]A Man’s Guide to Fragrance: How to Choose and Wear Cologne - - [42]My Go-To Sunglasses for Summer - - [43]How to Pick the Perfect Men’s Wedding Ring - - [44]Your No-Nonsense Guide to Choosing the Right Beard Style - - [45]How to Grow a Beard: The One and True Guide - - [46]Beard Oil FAQs: Answering All Your Pressing Beardly Questions - - [47]Beard Grooming 101: The Lowdown on Products and Routine - - [48]Skill of the Week: Tie a Scarf 5 Different Ways - - [49]How to Tie a Tie - - [50]Skill of the Week: Tie the Half-Windsor Necktie Knot - - [51]How to Match a Shirt and Tie - - [52]Browse all Get Style - * [53]Fitness - * [54]Health - * [55]Program Review - - [56]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot - - [57]Podcast #767: Fat Loss Made Simple - - [58]Legendary Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum - Muscle Growth - - [59]Podcast #939: What Lifting Ancient Stones Can Teach You About Being - a Man - - [60]What You Can Learn About Shedding Pounds From the Vacation Weight - Loss Paradox - - [61]You Need to Eat More Fiber - - [62]Silencing the Ring: Proven Strategies for Tinnitus Relief - - [63]Podcast #947: Turn Your Anxiety Into a Strength - - [64]The Insanely Difficult Standards of History’s Hardest P.E. Program - - [65]Which Fitness Program Is Right for You? - - [66]A Review of the MovNat Workshop - - [67]Strengthen Your Tribe: A Report on the Atomic Athlete Vanguard - - [68]Browse all Get Strong - * [69]Family - * [70]Fatherhood - * [71]Relationships - * [72]Social Skills - - [73]Podcast #946: Counterintuitive Ideas About Marriage, Family, and - Kids - - [74]The Best Riddles for Kids (With Answers!) - - [75]Podcast #858: The Affectionate, Ambiguous, and Surprisingly - Ambivalent Relationship Between Siblings - - [76]How to Fight Entitlement and Develop Gratitude in Your Kids - - [77]How to Parent-Teacher Conference - - [78]5 Ways Fathers Hugely Influence Their Daughters - - [79]Sunday Firesides: We Shouldn’t (and Should) Be Friends With Our - Kids - - [80]What to Do When Your Kid Lies to You - - [81]Sunday Firesides: Can We Finally Stop Blaming the Puritans? - - [82]Sunday Firesides: The Sit-in-Silence Relationship Test - - [83]Sunday Firesides: Treat People as Ends, Not Means - - [84]Podcast #919: Advice on Making Love Last . . . From a Divorce - Lawyer - - [85]Podcast #957: How Curiosity Conversations Can Supercharge Your - Success - - [86]Podcast #837: The Cues That Make You Charismatic - - [87]Podcast #938: Social Skills as the Road to Character - - [88]Podcast #915: Finally Learn to Say No - - [89]Browse all Get Social - * [90]How To - * [91]Manly Know-How - * [92]Outdoor/Survival - - [93]Skill of the Week: Wrap a Gift - - [94]How to De-Ice Your Windshield Easily and Effectively - - [95]Skill of the Week: Paint a Room - - [96]Skill of the Week: Store and Stack Firewood - - [97]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t Make - Your House Smoky) - - [98]How to Adjust Your Car Mirrors to Eliminate Blind Spots - - [99]Skill of the Week: Throw a Perfect Football Spiral - - [100]What’s the Difference Between Gas Octanes? - - [101]Skill of the Week: How to Build a Quinzee Snow Shelter - - [102]Skill of the Week: Survive an Earthquake - - [103]Two Things You Should Be Doing to Take Better Care of Your Camping - Gear - - [104]Skill of the Week: How to Emergency Rappel - - [105]Browse all Get Skilled - - in: [106]Advice, [107]Character, [108]Sunday Firesides - - 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. - - As soon as the last load of laundry is folded, it’s time to put in - another wash. As soon as you’re done eating and cleaning up one meal, - it’s time to start making the next. - - There is a constantly replenishing supply of new texts and emails to - answer, bills to pay, stuff to buy, bookings to make, forms to fill - out. - - Whenever you cross one to-do off the list, you add a couple more on. - - Whatever you did the day before, you have to wake up and do it all over - again. - - The relentless slog of life’s maintenance work can feel tiresome, - burdensome, annoying. - - It can feel like you’re Sisyphus, pushing a boulder up a hill, only to - have it roll back down, ready to be pushed up once more. - - Yet we should be glad to continually find this boulder resting at our - feet. - - Drudgery and chores are the rent we pay for living. - - While we inhabit mortal existence, this rent is due every day. - - It’s not a fine, but a fee. - - A ticket to continue to ride. - - 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. - - 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 + • [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 - [115]Previous [116]Next +[187] Previous [188]Next +document - document +Never miss an update - Never miss an update +Subscribe to the AoM Newsletter - Subscribe to the AoM Newsletter - ____________________ - ____________________ - Daily [ ] Weekly [ ] - I agree to the [117]privacy policy terms. [ ] - Subscribe +[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? - teddy teddy icon +[197]Join the Strenuous Life +[198]Learn More +document - Want to start taking action on the content you read on AoM? - [118]Join the Strenuous Life - [119]Learn More +Never miss an update - document +Subscribe to the AoM Newsletter - Never miss an update +[199][ ] +[200][ ] +Daily [201][ ] Weekly [202][ ] +I agree to the [203]privacy policy terms. [204][ ] +[206][Subscribe] +podcast [207] podcast icon [208] Podcast #959 - Subscribe to the AoM Newsletter - ____________________ - ____________________ - Daily [ ] Weekly [ ] - I agree to the [120]privacy policy terms. [ ] - Subscribe +Come Alive Again by Having More Fun - podcast - - [121]podcast icon - - [122]Podcast #958 +[209] podcast icon [210] Podcast #958 An Insider’s Guide to the Rise of the American Mafia - [123]podcast icon - - [124]Podcast #957 +[211] podcast icon [212] Podcast #957 How Curiosity Conversations Can Supercharge Your Success - [125]podcast icon - - [126]Podcast #956 +[213] podcast icon [214] Podcast #956 Feeling Depressed and Discombobulated? Social Acceleration May Be to Blame - [127]podcast icon +[215]View all - [128]Podcast #955 +Related -The Power of NEAT — Move a Little to Lose a Lot +Articles/// - [129]View all - - Related - - Articles/// - [130] +[216] Podcast #958: An Insider’s Guide to the Rise of the American Mafia - [131] +[217] Sunday Firesides: First Day, Worst Day - [132] +[218] Rage, Rage Against the Dying Back of the Brain - [133] +[219] -Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May -Be to Blame +Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May Be +to Blame - [134]View all +[220]View all - Get Daily Updates - [135]Text MANLY to (918) 393-3049 +Get Daily Updates +[221]Text MANLY to (918) 393-3049 +The Art of Manliness +Copyright © 2024 All Rights Reserved - The Art of Manliness - Copyright © 2024 All Rights Reserved + • [222]Contact + • [223]Legal + • [224]About + • [225]All Topics + • [226]Archives - * [136]Contact - * [137]Legal - * [138]About - * [139]All Topics - * [140]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 +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/ - - 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/ diff --git a/static/archive/www-artofmanliness-com-rx8ary.txt b/static/archive/www-artofmanliness-com-rx8ary.txt index 735869c..b79aef8 100644 --- a/static/archive/www-artofmanliness-com-rx8ary.txt +++ b/static/archive/www-artofmanliness-com-rx8ary.txt @@ -1,880 +1,784 @@ - #[1]alternate [2]alternate [3]alternate - - 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 - Search - - * [32]Clothing - * [33]Accessories - * [34]Facial Hair - * [35]Ties - - [36]3 Ways to Wear a Henley Shirt - - [37]A Man’s Guide to the Oxford Shirt - - [38]Skill of the Week: Instantly Recognize a Quality Suit - - [39]How to Get the Stink Out of Synthetic Workout Shirts - - [40]Did Commandos Go Commando? - - [41]A Man’s Guide to Fragrance: How to Choose and Wear Cologne - - [42]My Go-To Sunglasses for Summer - - [43]How to Pick the Perfect Men’s Wedding Ring - - [44]Your No-Nonsense Guide to Choosing the Right Beard Style - - [45]How to Grow a Beard: The One and True Guide - - [46]Beard Oil FAQs: Answering All Your Pressing Beardly Questions - - [47]Beard Grooming 101: The Lowdown on Products and Routine - - [48]Skill of the Week: Tie a Scarf 5 Different Ways - - [49]How to Tie a Tie - - [50]Skill of the Week: Tie the Half-Windsor Necktie Knot - - [51]How to Match a Shirt and Tie - - [52]Browse all Get Style - * [53]Fitness - * [54]Health - * [55]Program Review - - [56]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot - - [57]Podcast #767: Fat Loss Made Simple - - [58]Legendary Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum - Muscle Growth - - [59]Podcast #939: What Lifting Ancient Stones Can Teach You About Being - a Man - - [60]What You Can Learn About Shedding Pounds From the Vacation Weight - Loss Paradox - - [61]You Need to Eat More Fiber - - [62]Silencing the Ring: Proven Strategies for Tinnitus Relief - - [63]Podcast #947: Turn Your Anxiety Into a Strength - - [64]The Insanely Difficult Standards of History’s Hardest P.E. Program - - [65]Which Fitness Program Is Right for You? - - [66]A Review of the MovNat Workshop - - [67]Strengthen Your Tribe: A Report on the Atomic Athlete Vanguard - - [68]Browse all Get Strong - * [69]Family - * [70]Fatherhood - * [71]Relationships - * [72]Social Skills - - [73]Podcast #946: Counterintuitive Ideas About Marriage, Family, and - Kids - - [74]The Best Riddles for Kids (With Answers!) - - [75]Podcast #858: The Affectionate, Ambiguous, and Surprisingly - Ambivalent Relationship Between Siblings - - [76]How to Fight Entitlement and Develop Gratitude in Your Kids - - [77]How to Parent-Teacher Conference - - [78]5 Ways Fathers Hugely Influence Their Daughters - - [79]Sunday Firesides: We Shouldn’t (and Should) Be Friends With Our - Kids - - [80]What to Do When Your Kid Lies to You - - [81]Sunday Firesides: Can We Finally Stop Blaming the Puritans? - - [82]Sunday Firesides: The Sit-in-Silence Relationship Test - - [83]Sunday Firesides: Treat People as Ends, Not Means - - [84]Podcast #919: Advice on Making Love Last . . . From a Divorce - Lawyer - - [85]Podcast #957: How Curiosity Conversations Can Supercharge Your - Success - - [86]Podcast #837: The Cues That Make You Charismatic - - [87]Podcast #938: Social Skills as the Road to Character - - [88]Podcast #915: Finally Learn to Say No - - [89]Browse all Get Social - * [90]How To - * [91]Manly Know-How - * [92]Outdoor/Survival - - [93]Skill of the Week: Wrap a Gift - - [94]How to De-Ice Your Windshield Easily and Effectively - - [95]Skill of the Week: Paint a Room - - [96]Skill of the Week: Store and Stack Firewood - - [97]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t Make - Your House Smoky) - - [98]How to Adjust Your Car Mirrors to Eliminate Blind Spots - - [99]Skill of the Week: Throw a Perfect Football Spiral - - [100]What’s the Difference Between Gas Octanes? - - [101]Skill of the Week: How to Build a Quinzee Snow Shelter - - [102]Skill of the Week: Survive an Earthquake - - [103]Two Things You Should Be Doing to Take Better Care of Your Camping - Gear - - [104]Skill of the Week: How to Emergency Rappel - - [105]Browse all Get Skilled - - in: [106]Behavior, [107]Character - - Brett & Kate McKay • September 5, 2023 • Last updated: September 9, - 2023 - - Exit, Voice, Loyalty, Neglect: Why People Leave, Stay, or Try to Burn It All - Down - - When someone is dissatisfied with a product, group, or relationship, - how do they remedy that dissatisfaction? - - A German economist and political scientist, Albert Hirschman, laid out - a theory of how people respond to dissatisfaction in his influential - treatise [108]Exit, Voice, Loyalty: Responses to Decline in Firms, - Organizations, and States. - - Hirschman observed that people who find themselves in diminishing, - less-than-ideal circumstances have three options: 1) leave the - declining group, company, or relationship (exit), 2) express discontent - to improve the situation (voice), or 3) stay in the organization and - passively hope things get better (loyalty). - - Since the initial publication of Exit, Voice, Loyalty in 1970, other - social scientists have added a fourth option to Hirschman’s framework: - neglect. - - Which option a person exercises will depend on many factors, and the - path they choose can help reverse, stem, or exacerbate a group’s - deterioration. - - The exit, voice, loyalty, neglect (EVLN) framework will help you - understand why people stay in or leave a relationship (including - friendships), why people stay in or leave a job, why people stay in or - leave a church, and many more of life’s interpersonal and institutional - dynamics. - - Let’s unpack it. +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: + + 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 + +[36] [lazy] [37]3 Ways to Wear a Henley Shirt [38] [lazy] [39]A Man’s Guide to +the Oxford Shirt [40] [lazy] [41]Skill of the Week: Instantly Recognize a +Quality Suit [42] [lazy] [43]How to Get the Stink Out of Synthetic Workout +Shirts +[44] [lazy] [45]Did Commandos Go Commando? [46] [lazy] [47]A Man’s Guide to +Fragrance: How to Choose and Wear Cologne [48] [lazy] [49]My Go-To Sunglasses +for Summer [50] [lazy] [51]How to Pick the Perfect Men’s Wedding Ring +[52] [lazy] [53]Your No-Nonsense Guide to Choosing the Right Beard Style [54] +[lazy] [55]How to Grow a Beard: The One and True Guide [56] [lazy] [57]Beard +Oil FAQs: Answering All Your Pressing Beardly Questions [58] [lazy] [59]Beard +Grooming 101: The Lowdown on Products and Routine +[60] [lazy] [61]Skill of the Week: Tie a Scarf 5 Different Ways [62] * [63]How +to Tie a Tie [64] [lazy] [65]Skill of the Week: Tie the Half-Windsor Necktie +Knot [66] [lazy] [67]How to Match a Shirt and Tie + +[68]Browse all Get Style + + • [69] Fitness + • [70] Health + • [71] Program Review + +[72] [lazy] [73]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot +[74] [lazy] [75]Podcast #767: Fat Loss Made Simple [76] [lazy] [77]Legendary +Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum Muscle Growth [78] +[lazy] [79]Podcast #939: What Lifting Ancient Stones Can Teach You About Being +a Man +[80] [lazy] [81]What You Can Learn About Shedding Pounds From the Vacation +Weight Loss Paradox [82] [lazy] [83]You Need to Eat More Fiber [84] [lazy] [85] +Silencing the Ring: Proven Strategies for Tinnitus Relief [86] [lazy] [87] +Podcast #947: Turn Your Anxiety Into a Strength +[88] [lazy] [89]The Insanely Difficult Standards of History’s Hardest P.E. +Program [90] [lazy] [91]Which Fitness Program Is Right for You? [92] [lazy] +[93]A Review of the MovNat Workshop [94] [lazy] [95]Strengthen Your Tribe: A +Report on the Atomic Athlete Vanguard + +[96]Browse all Get Strong + + • [97] Family + • [98] Fatherhood + • [99] Relationships + • [100] Social Skills + +[101] [lazy] [102]Podcast #946: Counterintuitive Ideas About Marriage, Family, +and Kids [103] [lazy] [104]The Best Riddles for Kids (With Answers!) [105] +[lazy] [106]Podcast #858: The Affectionate, Ambiguous, and Surprisingly +Ambivalent Relationship Between Siblings [107] [lazy] [108]How to Fight +Entitlement and Develop Gratitude in Your Kids +[109] [lazy] [110]How to Parent-Teacher Conference [111] [lazy] [112]5 Ways +Fathers Hugely Influence Their Daughters [113] [lazy] [114]Sunday Firesides: We +Shouldn’t (and Should) Be Friends With Our Kids [115] [lazy] [116]What to Do +When Your Kid Lies to You +[117] [lazy] [118]Sunday Firesides: Can We Finally Stop Blaming the Puritans? +[119] [lazy] [120]Sunday Firesides: The Sit-in-Silence Relationship Test [121] +[lazy] [122]Sunday Firesides: Treat People as Ends, Not Means [123] [lazy] +[124]Podcast #919: Advice on Making Love Last . . . From a Divorce Lawyer +[125] [lazy] [126]Podcast #957: How Curiosity Conversations Can Supercharge +Your Success [127] [lazy] [128]Podcast #837: The Cues That Make You Charismatic +[129] [lazy] [130]Podcast #938: Social Skills as the Road to Character [131] +[lazy] [132]Podcast #915: Finally Learn to Say No + +[133]Browse all Get Social + + • [134] How To + • [135] Manly Know-How + • [136] Outdoor/Survival + +[137] [lazy] [138]Skill of the Week: Wrap a Gift [139] [lazy] [140]How to +De-Ice Your Windshield Easily and Effectively [141] [lazy] [142]Skill of the +Week: Paint a Room [143] [lazy] [144]Skill of the Week: Store and Stack +Firewood +[145] [lazy] [146]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t +Make Your House Smoky) [147] [lazy] [148]How to Adjust Your Car Mirrors to +Eliminate Blind Spots [149] [lazy] [150]Skill of the Week: Throw a Perfect +Football Spiral [151] [lazy] [152]What’s the Difference Between Gas Octanes? +[153] [lazy] [154]Skill of the Week: How to Build a Quinzee Snow Shelter [155] +[lazy] [156]Skill of the Week: Survive an Earthquake [157] [lazy] [158]Two +Things You Should Be Doing to Take Better Care of Your Camping Gear [159] +[lazy] [160]Skill of the Week: How to Emergency Rappel + +[161]Browse all Get Skilled + +in: [167]Behavior, [168]Character + +Brett & Kate McKay • September 5, 2023 • Last updated: September 9, 2023 + +Exit, Voice, Loyalty, Neglect: Why People Leave, Stay, or Try to Burn It All +Down + +[evln] + +[169] [170] [171] [172] [173] + +When someone is dissatisfied with a product, group, or relationship, how do +they remedy that dissatisfaction? + +A German economist and political scientist, Albert Hirschman, laid out a theory +of how people respond to dissatisfaction in his influential treatise [174]Exit, +Voice, Loyalty: Responses to Decline in Firms, Organizations, and States. + +Hirschman observed that people who find themselves in diminishing, +less-than-ideal circumstances have three options: 1) leave the declining group, +company, or relationship (exit), 2) express discontent to improve the situation +(voice), or 3) stay in the organization and passively hope things get better +(loyalty). + +Since the initial publication of Exit, Voice, Loyalty in 1970, other social +scientists have added a fourth option to Hirschman’s framework: neglect. + +Which option a person exercises will depend on many factors, and the path they +choose can help reverse, stem, or exacerbate a group’s deterioration. + +The exit, voice, loyalty, neglect (EVLN) framework will help you understand why +people stay in or leave a relationship (including friendships), why people stay +in or leave a job, why people stay in or leave a church, and many more of +life’s interpersonal and institutional dynamics. + +Let’s unpack it. Exit, Voice, Loyalty, Neglect - I read Hirschman’s book a few months ago and went on a deep dive into - related research that’s been done since it was published. The EVLN - framework has become a fundamental mental model in my brain. It’s a - decidedly simple paradigm and is something people already intuitively - know, but once you see it spelled out explicitly, you start to see it - everywhere. +I read Hirschman’s book a few months ago and went on a deep dive into related +research that’s been done since it was published. The EVLN framework has become +a fundamental mental model in my brain. It’s a decidedly simple paradigm and is +something people already intuitively know, but once you see it spelled out +explicitly, you start to see it everywhere. Exit - The exit option is exercised when an individual is dissatisfied with - something and decides to quit it altogether. +The exit option is exercised when an individual is dissatisfied with something +and decides to quit it altogether. - You use the exit option all the time as a consumer. If you’re - dissatisfied with shaving cream brand A, you stop using it and start - using shaving cream brand B. +You use the exit option all the time as a consumer. If you’re dissatisfied with +shaving cream brand A, you stop using it and start using shaving cream brand +B. - You can also use the exit option when dissatisfied with a job, - relationship, or group. +You can also use the exit option when dissatisfied with a job, relationship, or +group. - Not happy with your job? You can quit it. +Not happy with your job? You can quit it. - Not happy with your relationship? You can break up. +Not happy with your relationship? You can break up. - Not happy with the state of your congregation? You can stop going to - that church and start going to another. +Not happy with the state of your congregation? You can stop going to that +church and start going to another. - What’s interesting about the exit option is that it often accelerates - decline in groups. According to Hirschman, the people most sensitive to - a decrease in quality are typically those with the most resources, - skills, and talents that could be used to effectuate improvement. The - people who are the least sensitive to quality usually have fewer - resources, skills, and talents. When the people who have resources - leave, it results in a “brain drain.” With fewer well-resourced - members, the quality of the group further declines; it thus has even - more trouble attracting new members (especially well-resourced ones); - as a result, even more people leave. Things go from bad to worse, and - the group or organization enters a death spiral that can be difficult - or impossible to recover from. +What’s interesting about the exit option is that it often accelerates decline +in groups. According to Hirschman, the people most sensitive to a decrease in +quality are typically those with the most resources, skills, and talents that +could be used to effectuate improvement. The people who are the least sensitive +to quality usually have fewer resources, skills, and talents. When the people +who have resources leave, it results in a “brain drain.” With fewer +well-resourced members, the quality of the group further declines; it thus has +even more trouble attracting new members (especially well-resourced ones); as a +result, even more people leave. Things go from bad to worse, and the group or +organization enters a death spiral that can be difficult or impossible to +recover from. - To illustrate this phenomenon, Hirschman uses the example of parents - pulling their kids out of public schools and putting them into private - schools. According to Hirschman, affluent parents are much more - sensitive to education quality than less affluent parents. It’s not - that less affluent parents don’t care about their children’s education; - they just don’t have the luxury of being hyper-sensitive to deficits in - quality. Because they know that private school isn’t an option for - them, they don’t spend as much time wondering if the grass is greener - at another school as affluent parents do. +To illustrate this phenomenon, Hirschman uses the example of parents pulling +their kids out of public schools and putting them into private schools. +According to Hirschman, affluent parents are much more sensitive to education +quality than less affluent parents. It’s not that less affluent parents don’t +care about their children’s education; they just don’t have the luxury of being +hyper-sensitive to deficits in quality. Because they know that private school +isn’t an option for them, they don’t spend as much time wondering if the grass +is greener at another school as affluent parents do. - Because school is a matter of optionality for wealthy parents, they - notice perceived flaws in their children’s education more acutely. If - these parents become dissatisfied with the education being offered in a - public school, they’ll switch their child over to a private school. - When these affluent families leave a public school, they take their - resources, and their possibly greater propensity to push for - improvement, with them. As a result, the struggles of the public school - deepen. +Because school is a matter of optionality for wealthy parents, they notice +perceived flaws in their children’s education more acutely. If these parents +become dissatisfied with the education being offered in a public school, +they’ll switch their child over to a private school. When these affluent +families leave a public school, they take their resources, and their possibly +greater propensity to push for improvement, with them. As a result, the +struggles of the public school deepen. Voice - Sometimes people find themselves in a situation where they’re - dissatisfied with a group or relationship, but they don’t want to leave - it. They still see good in it. It’s still working for them on some - level, or they see potential for how it could work if things were done - differently. They may feel they can do more good being an agent on the - inside than being a critic on the outside. +Sometimes people find themselves in a situation where they’re dissatisfied with +a group or relationship, but they don’t want to leave it. They still see good +in it. It’s still working for them on some level, or they see potential for how +it could work if things were done differently. They may feel they can do more +good being an agent on the inside than being a critic on the outside. - In these cases, people may decide to stay around and exercise the voice - option — complaining, offering feedback, and agitating for change to - improve things. +In these cases, people may decide to stay around and exercise the voice option +— complaining, offering feedback, and agitating for change to improve things. - An unhappy employee can talk to his boss about changing the company’s - culture. +An unhappy employee can talk to his boss about changing the company’s culture. - An unhappy husband can tell his wife about his concerns for the - relationship, or together they can talk to a therapist. +An unhappy husband can tell his wife about his concerns for the relationship, +or together they can talk to a therapist. - An unhappy customer can contact customer support to raise concerns and - seek redress. +An unhappy customer can contact customer support to raise concerns and seek +redress. - Unhappy parents can talk to their child’s teacher about an issue with - their kid or join the PTA to advocate for broader changes. +Unhappy parents can talk to their child’s teacher about an issue with their kid +or join the PTA to advocate for broader changes. Loyalty - While Hirschman clearly defined exit and voice, he was ambiguous about - loyalty. It’s one of the biggest criticisms he received for his work. - Many social scientists since Hirschman have described loyalty as a - “passively positive” response in the face of dissatisfaction. Instead - of taking action (exit or voice), the loyal customer, employee, spouse, - or church member will stay aboard and not raise a stink, hoping things - will get better on their own if they wait long enough. +While Hirschman clearly defined exit and voice, he was ambiguous about loyalty. +It’s one of the biggest criticisms he received for his work. Many social +scientists since Hirschman have described loyalty as a “passively positive” +response in the face of dissatisfaction. Instead of taking action (exit or +voice), the loyal customer, employee, spouse, or church member will stay aboard +and not raise a stink, hoping things will get better on their own if they wait +long enough. - Take an employee dissatisfied with his job. Maybe he’s decided he can’t - quit, and perhaps he’s also decided that voicing his concerns to his - boss will only increase the animosity between them. So he chooses to - stay with the company, thinking, “Well, maybe things will improve. - Maybe we’ll get a new supervisor. Maybe I’ll get moved to a new - division. I’ll just keep working and wait and see.” +Take an employee dissatisfied with his job. Maybe he’s decided he can’t quit, +and perhaps he’s also decided that voicing his concerns to his boss will only +increase the animosity between them. So he chooses to stay with the company, +thinking, “Well, maybe things will improve. Maybe we’ll get a new supervisor. +Maybe I’ll get moved to a new division. I’ll just keep working and wait and +see.” Neglect - Social scientist [109]Carly Rusbult added a fourth option to - Hirschman’s exit/voice/loyalty options for dealing with - dissatisfaction: neglect. +Social scientist [175]Carly Rusbult added a fourth option to Hirschman’s exit/ +voice/loyalty options for dealing with dissatisfaction: neglect. - Neglect is similar to loyalty in that the dissatisfied person decides - to stay on board with the declining job, relationship, or group, but - instead of thinking things might improve if they’re patient, the person - who adopts the neglect option has decided things won’t get better and - chooses to take a “negative passive” approach to the situation by - putting in less effort or not taking action to prevent the relationship - or group from further falling apart. +Neglect is similar to loyalty in that the dissatisfied person decides to stay +on board with the declining job, relationship, or group, but instead of +thinking things might improve if they’re patient, the person who adopts the +neglect option has decided things won’t get better and chooses to take a +“negative passive” approach to the situation by putting in less effort or not +taking action to prevent the relationship or group from further falling apart. - Rather than helping an ineffectual organization continue to limp feebly - along, this individual stays but withdraws their support, with the idea - that by letting the group collapse, its leadership will finally be - forced to take action to change and improve it. The neglect approach - is: “I’m not going to actively put out fires. I’m just going to let - this thing burn to the ground so we can start fresh.” +Rather than helping an ineffectual organization continue to limp feebly along, +this individual stays but withdraws their support, with the idea that by +letting the group collapse, its leadership will finally be forced to take +action to change and improve it. The neglect approach is: “I’m not going to +actively put out fires. I’m just going to let this thing burn to the ground so +we can start fresh.” - Consider the overworked church member in a struggling congregation. - He’s juggling multiple roles and dealing with a cadre of difficult - people. Leaving isn’t an option because his wife grew up in that church - and would never consider it. He knows raising his concerns to - leadership would be ineffective because he tried that in the past. So - exit and voice are off the table. +Consider the overworked church member in a struggling congregation. He’s +juggling multiple roles and dealing with a cadre of difficult people. Leaving +isn’t an option because his wife grew up in that church and would never +consider it. He knows raising his concerns to leadership would be ineffective +because he tried that in the past. So exit and voice are off the table. - He also doesn’t think things will get better if he sticks around and - just keeps plugging away. Goodbye loyalty. +He also doesn’t think things will get better if he sticks around and just keeps +plugging away. Goodbye loyalty. - Hello, neglect. +Hello, neglect. - This burned-out church member may start doing the bare minimum in his - responsibilities, if that. He’ll say no to requests for his time, - money, and talent. If he sees an issue or problem, he won’t do anything - to correct it. He thinks that those who remain loyal are only - perpetuating a state of dysfunction. By withholding his help, he hopes - to push the congregation to a critical level of failure, which will - require the leadership to fix the underlying issues. +This burned-out church member may start doing the bare minimum in his +responsibilities, if that. He’ll say no to requests for his time, money, and +talent. If he sees an issue or problem, he won’t do anything to correct it. He +thinks that those who remain loyal are only perpetuating a state of +dysfunction. By withholding his help, he hopes to push the congregation to a +critical level of failure, which will require the leadership to fix the +underlying issues. Predictors of Response to Dissatisfaction - So, in the face of dissatisfaction, people can respond with exit, - voice, loyalty, or neglect. +So, in the face of dissatisfaction, people can respond with exit, voice, +loyalty, or neglect. - A person in declining circumstances conducts an explicit or implicit - cost/benefit analysis in figuring out which path to take. +A person in declining circumstances conducts an explicit or implicit cost/ +benefit analysis in figuring out which path to take. - In [110]Predicting Exit, Voice, Loyalty, and Neglect, researchers - Michael Withey and William Cooper fleshed out the factors that go into - this analysis when people consider how to respond to dissatisfaction: +In [176]Predicting Exit, Voice, Loyalty, and Neglect, researchers Michael +Withey and William Cooper fleshed out the factors that go into this analysis +when people consider how to respond to dissatisfaction: Cost of the Action - Exit, voice, loyalty, and neglect all come with costs, both direct and - indirect. +Exit, voice, loyalty, and neglect all come with costs, both direct and +indirect. - Exiting a job can result in the loss of income and health benefits; - divorcing a spouse can result in emotional and financial distress; - leaving a church can result in spiritual and social isolation. +Exiting a job can result in the loss of income and health benefits; divorcing a +spouse can result in emotional and financial distress; leaving a church can +result in spiritual and social isolation. - Raising your voice at work could create rancor with your boss; speaking - up in a marriage could create resentment with your spouse. +Raising your voice at work could create rancor with your boss; speaking up in a +marriage could create resentment with your spouse. - Whether you’re exiting or using your voice, there can also be a loss in - the thing humans hold most dear: status. In leaving or dissenting, you - risk jeopardizing your identity. +Whether you’re exiting or using your voice, there can also be a loss in the +thing humans hold most dear: status. In leaving or dissenting, you risk +jeopardizing your identity. - Staying loyal to a relationship or organization comes with costs, too. - If you keep your job in a toxic office, you’ll have to continue to - weather the stress and debasement that comes with going to work each - day. Same thing with staying in a struggling, conflict-ridden marriage - or church. +Staying loyal to a relationship or organization comes with costs, too. If you +keep your job in a toxic office, you’ll have to continue to weather the stress +and debasement that comes with going to work each day. Same thing with staying +in a struggling, conflict-ridden marriage or church. - If you decide to be neglectful in your job, it could result in - discipline or blocked opportunities. Neglect in a marriage will only - lead to increased resentment and tension. +If you decide to be neglectful in your job, it could result in discipline or +blocked opportunities. Neglect in a marriage will only lead to increased +resentment and tension. - The exit option tends to have the most dramatic consequences, and is - thus much more reluctantly exercised and typically used as a last - resort. +The exit option tends to have the most dramatic consequences, and is thus much +more reluctantly exercised and typically used as a last resort. - But there’s no option in the EVLN framework that doesn’t carry - downsides; each has its own pros and cons, and part of how people weigh - their choices comes down to which path they think has more of the - former and less of the latter. +But there’s no option in the EVLN framework that doesn’t carry downsides; each +has its own pros and cons, and part of how people weigh their choices comes +down to which path they think has more of the former and less of the latter. Efficacy of the Response - In deciding between exit, voice, loyalty, and neglect, people will also - consider which response will be the most effective at resolving their - dissatisfaction. +In deciding between exit, voice, loyalty, and neglect, people will also +consider which response will be the most effective at resolving their +dissatisfaction. - A big factor in whether someone thinks a particular response will be - effective is whether they believe there’s hope for improvement. If - someone has this hope, they’re more likely to choose voice or loyalty; - if they don’t, they’re more likely to choose exit or neglect. If an - unhappy employee thinks things would be a lot better at work if their - supervisor moved on, and there’s a rumor they’ll soon be replaced, the - employee is more likely to stick around. If a church member thinks - their concerns will be listened to and addressed, they’re more likely - to stay and raise their voice; if they think their concerns will be - dismissed, they’re more likely to leave. +A big factor in whether someone thinks a particular response will be effective +is whether they believe there’s hope for improvement. If someone has this hope, +they’re more likely to choose voice or loyalty; if they don’t, they’re more +likely to choose exit or neglect. If an unhappy employee thinks things would be +a lot better at work if their supervisor moved on, and there’s a rumor they’ll +soon be replaced, the employee is more likely to stick around. If a church +member thinks their concerns will be listened to and addressed, they’re more +likely to stay and raise their voice; if they think their concerns will be +dismissed, they’re more likely to leave. - A significant element in whether someone has hope for a better future - is their prior satisfaction with the group or relationship. If - someone’s marriage is struggling now, but was great for the first - decade, they’re more apt to keep working on it and believe there’s a - chance of returning to those happier times. If someone’s marriage was - rocky from the start, they’re more likely to choose divorce. +A significant element in whether someone has hope for a better future is their +prior satisfaction with the group or relationship. If someone’s marriage is +struggling now, but was great for the first decade, they’re more apt to keep +working on it and believe there’s a chance of returning to those happier times. +If someone’s marriage was rocky from the start, they’re more likely to choose +divorce. Internal vs. External Locus of Control - If an individual has an internal locus of control, they’re more likely - to choose a response that’s proactive. That is, if they believe they - have control over their actions and outcomes, they’re more likely to - use voice or exit. +If an individual has an internal locus of control, they’re more likely to +choose a response that’s proactive. That is, if they believe they have control +over their actions and outcomes, they’re more likely to use voice or exit. - Someone who has an external locus of control — a belief that their life - is controlled by external circumstances — is more likely to passively - endure a bad situation (loyalty or neglect). +Someone who has an external locus of control — a belief that their life is +controlled by external circumstances — is more likely to passively endure a bad +situation (loyalty or neglect). Attractiveness of Alternatives - If someone feels like there are better options outside their current - job/relationship/church, they’re more likely to leave. +If someone feels like there are better options outside their current job/ +relationship/church, they’re more likely to leave. - If someone’s in a job they dislike and has been fielding hiring - interest from another employer, they’re more likely to quit. +If someone’s in a job they dislike and has been fielding hiring interest from +another employer, they’re more likely to quit. - If, on the other hand, someone feels they won’t be able to do much - better in an alternate situation, they’re more likely to exercise the - options of voice, loyalty, and neglect. +If, on the other hand, someone feels they won’t be able to do much better in an +alternate situation, they’re more likely to exercise the options of voice, +loyalty, and neglect. - An individual who’s sixty and in a so-so marriage may not feel bullish - about their prospects of finding another partner and decide they’d - rather be with someone, anyone, than alone. +An individual who’s sixty and in a so-so marriage may not feel bullish about +their prospects of finding another partner and decide they’d rather be with +someone, anyone, than alone. Commitment - The decision to go, stay, or otherwise is also rooted in one’s inner - values. +The decision to go, stay, or otherwise is also rooted in one’s inner values. - Someone in an unhappy marriage who’s deeply committed to the sanctity - of the marriage vow is more likely to choose therapy over divorce. +Someone in an unhappy marriage who’s deeply committed to the sanctity of the +marriage vow is more likely to choose therapy over divorce. - Someone who is disturbed by recent trends in their church but deeply - believes in the tenets of their faith is more likely to stay than - exit. +Someone who is disturbed by recent trends in their church but deeply believes +in the tenets of their faith is more likely to stay than exit. - Someone who prizes loyalty will stay longer in a job they dislike than - someone who doesn’t. +Someone who prizes loyalty will stay longer in a job they dislike than someone +who doesn’t. Will Someone Choose Exit, Voice, Loyalty, or Neglect? - In a series of studies, Withey and Cooper used the above factors to - create a rubric that helps predict which response a dissatisfied - employee will use. It likely carries over to people dissatisfied with - other situations as well: +In a series of studies, Withey and Cooper used the above factors to create a +rubric that helps predict which response a dissatisfied employee will use. It +likely carries over to people dissatisfied with other situations as well: - Exit More Likely When: - * costs of exit are low - * costs of voice are high - * prior satisfaction is low - * belief in improvement is low - * commitment is low - * attractive alternatives are available - * individual has an internal locus of control +Exit More Likely When: - Voice More Likely When: - * costs of exit are high - * costs of voice are low - * prior satisfaction is high - * belief in improvement is high - * commitment is high - * attractive alternatives are not available - * individual has an internal locus of control + • costs of exit are low + • costs of voice are high + • prior satisfaction is low + • belief in improvement is low + • commitment is low + • attractive alternatives are available + • individual has an internal locus of control - Loyalty More Likely When: - * costs of exit are high - * costs of voice are high - * prior satisfaction is high - * belief in the likelihood of improvement is high - * commitment is high - * attractive alternatives are not available - * individual has an external locus of control +Voice More Likely When: - Neglect More Likely When: - * costs of exit are high - * costs of voice are high - * prior satisfaction is low - * belief in the likelihood of improvement is low - * commitment is low - * attractive alternatives are not available - * individual has an external locus of control + • costs of exit are high + • costs of voice are low + • prior satisfaction is high + • belief in improvement is high + • commitment is high + • attractive alternatives are not available + • individual has an internal locus of control - Something that Withey and Cooper didn’t explore, but Hirschman did, is - the phenomenon of people who exercise the option of exit and voice. +Loyalty More Likely When: - Hirschman argued that you see people use both exit and voice in - situations where even if they leave a group due to dissatisfaction, - they’re still affected by the group’s actions. + • costs of exit are high + • costs of voice are high + • prior satisfaction is high + • belief in the likelihood of improvement is high + • commitment is high + • attractive alternatives are not available + • individual has an external locus of control - You see this phenomenon with people who become disaffected with a - church or religion. They may leave a faith, but they still have friends - and family members who belong to it. Because the disaffected individual - still interacts with these people, whose faith informs these - interactions, the disaffected person is still impacted by the faith, - even if they no longer practice it. At the same time, an individual who - leaves a religion may feel that the religion damaged them somehow, and, - though they have removed themselves from its direct influence, they - don’t want to see other people get hurt in the same way. +Neglect More Likely When: - Consequently, people who leave a religion sometimes become its most - vocal critics. + • costs of exit are high + • costs of voice are high + • prior satisfaction is low + • belief in the likelihood of improvement is low + • commitment is low + • attractive alternatives are not available + • individual has an external locus of control + +Something that Withey and Cooper didn’t explore, but Hirschman did, is the +phenomenon of people who exercise the option of exit and voice. + +Hirschman argued that you see people use both exit and voice in situations +where even if they leave a group due to dissatisfaction, they’re still affected +by the group’s actions. + +You see this phenomenon with people who become disaffected with a church or +religion. They may leave a faith, but they still have friends and family +members who belong to it. Because the disaffected individual still interacts +with these people, whose faith informs these interactions, the disaffected +person is still impacted by the faith, even if they no longer practice it. At +the same time, an individual who leaves a religion may feel that the religion +damaged them somehow, and, though they have removed themselves from its direct +influence, they don’t want to see other people get hurt in the same way. + +Consequently, people who leave a religion sometimes become its most vocal +critics. Conclusion - As I mentioned at the start, once I learned about the exit, voice, - loyalty, and neglect paradigm, I started to see it everywhere. If - you’re a business owner, it can help explain why customers react to a - dissatisfying experience the way they do. If you’re in a bad - relationship, it can help you think about what action you want to take. - If you’re a leader in a church, it can help you figure out why some - people leave your congregation while others stick around. +As I mentioned at the start, once I learned about the exit, voice, loyalty, and +neglect paradigm, I started to see it everywhere. If you’re a business owner, +it can help explain why customers react to a dissatisfying experience the way +they do. If you’re in a bad relationship, it can help you think about what +action you want to take. If you’re a leader in a church, it can help you figure +out why some people leave your congregation while others stick around. - It can also help you understand why struggling groups often continue to - struggle: If a group loses enough good people, it’s apt to enter a - death spiral. +It can also help you understand why struggling groups often continue to +struggle: If a group loses enough good people, it’s apt to enter a death +spiral. - As you go about dealing with people in all kinds of situations, the - ELVN framework is one mental model you’ll want to keep in your back - pocket. +As you go about dealing with people in all kinds of situations, the ELVN +framework is one mental model you’ll want to keep in your back pocket. Related Posts - * [111]Manvotional: The Right Kind of People - * [112]How to Develop a Manly Voice [VIDEO] - * [113]Podcast #506: How to Improve Your Speaking Voice - * [114]Develop a Strong He-Man Voice by Using the Voice Nature Gave - You - * [115]Sunday Firesides: You Are Not Responsible for Other People's - Feelings - * [116]Sunday Firesides: Why Bad Things Happen to Good People - (According to a Stoic) + • [177][man] + [178]Manvotional: The Right Kind of People + • [179][manly-voice] + [180]How to Develop a Manly Voice [VIDEO] + • [181][voice] + [182]Podcast #506: How to Improve Your Speaking Voice + • [183][he7] + [184]Develop a Strong He-Man Voice by Using the Voice Nature Gave You + • [185][Other-Peoples-Feelings-Header-BLANK] + [186]Sunday Firesides: You Are Not Responsible for Other People's Feelings + • [187][Bad-to-Good-BLANK] + [188]Sunday Firesides: Why Bad Things Happen to Good People (According to a + Stoic) - [117]Previous [118]Next +[189] Previous [190]Next +document - document +Never miss an update - Never miss an update +Subscribe to the AoM Newsletter - Subscribe to the AoM Newsletter - ____________________ - ____________________ - Daily [ ] Weekly [ ] - I agree to the [119]privacy policy terms. [ ] - Subscribe +[191][ ] +[192][ ] +Daily [193][ ] Weekly [194][ ] +I agree to the [195]privacy policy terms. [196][ ] +[198][Subscribe] +Want to start taking action on the content you read on AoM? - teddy teddy icon +[199]Join the Strenuous Life +[200]Learn More +document - Want to start taking action on the content you read on AoM? - [120]Join the Strenuous Life - [121]Learn More +Never miss an update - document +Subscribe to the AoM Newsletter - Never miss an update +[201][ ] +[202][ ] +Daily [203][ ] Weekly [204][ ] +I agree to the [205]privacy policy terms. [206][ ] +[208][Subscribe] +podcast [209] podcast icon [210] Podcast #959 - Subscribe to the AoM Newsletter - ____________________ - ____________________ - Daily [ ] Weekly [ ] - I agree to the [122]privacy policy terms. [ ] - Subscribe +Come Alive Again by Having More Fun - podcast - - [123]podcast icon - - [124]Podcast #958 +[211] podcast icon [212] Podcast #958 An Insider’s Guide to the Rise of the American Mafia - [125]podcast icon - - [126]Podcast #957 +[213] podcast icon [214] Podcast #957 How Curiosity Conversations Can Supercharge Your Success - [127]podcast icon - - [128]Podcast #956 +[215] podcast icon [216] Podcast #956 Feeling Depressed and Discombobulated? Social Acceleration May Be to Blame - [129]podcast icon +[217]View all - [130]Podcast #955 +Related -The Power of NEAT — Move a Little to Lose a Lot +Articles/// - [131]View all - - Related - - Articles/// - [132] +[218] Podcast #958: An Insider’s Guide to the Rise of the American Mafia - [133] +[219] Sunday Firesides: First Day, Worst Day - [134] +[220] Rage, Rage Against the Dying Back of the Brain - [135] +[221] -Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May -Be to Blame +Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May Be +to Blame - [136]View all +[222]View all - Get Daily Updates - [137]Text MANLY to (918) 393-3049 +Get Daily Updates +[223]Text MANLY to (918) 393-3049 +The Art of Manliness +Copyright © 2024 All Rights Reserved - The Art of Manliness - Copyright © 2024 All Rights Reserved + • [224]Contact + • [225]Legal + • [226]About + • [227]All Topics + • [228]Archives - * [138]Contact - * [139]Legal - * [140]About - * [141]All Topics - * [142]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 +References: - Visible links: - 1. https://www.artofmanliness.com/app-json/wp/v2/posts/178403 - 2. https://www.artofmanliness.com/app-json/oembed/1.0/embed?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 3. https://www.artofmanliness.com/app-json/oembed/1.0/embed?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/&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/behavior/ - 107. https://www.artofmanliness.com/character/ - 108. https://amzn.to/3Prv3ox - 109. https://text2fa.ir/wp-content/uploads/Text2fa.ir-Exit-Voice-Loyalty-and-Neglect-1.pdf - 110. https://www.jstor.org/stable/2393565 - 111. https://www.artofmanliness.com/character/manly-lessons/manvotional-the-right-kind-of-people/ - 112. https://www.artofmanliness.com/skills/how-to/how-to-develop-a-manly-voice-video/ - 113. https://www.artofmanliness.com/character/behavior/improve-your-speaking-voice/ - 114. https://www.artofmanliness.com/skills/how-to/masculine-voice/ - 115. https://www.artofmanliness.com/character/advice/sunday-firesides-you-are-not-responsible-for-other-peoples-feelings/ - 116. https://www.artofmanliness.com/character/sunday-firesides-why-bad-things-happen-to-good-people-according-to-a-stoic/ - 117. https://www.artofmanliness.com/character/advice/podcast-753-take-back-the-weekend/ - 118. https://www.artofmanliness.com/character/advice/podcast-924-how-to-develop-rugged-flexibility/ - 119. https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 120. https://strenuouslife.co/ - 121. https://strenuouslife.co/ - 122. https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 123. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ - 124. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ - 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/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ - 128. https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ - 129. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/ - 130. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/ - 131. https://www.artofmanliness.com/podcast/ - 132. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ - 133. https://www.artofmanliness.com/character/advice/sunday-firesides-first-day-worst-day/ - 134. https://www.artofmanliness.com/character/knowledge-of-men/rage-rage-against-the-dying-back-of-the-brain/ - 135. https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ - 136. https://www.artofmanliness.com/character/behavior/ - 137. https://my.community.com/artofmanliness?t=manly - 138. https://www.artofmanliness.com/contact/ - 139. https://www.artofmanliness.com/privacy-policy/ - 140. https://www.artofmanliness.com/about-2/ - 141. https://www.artofmanliness.com/all-topics/ - 142. https://www.artofmanliness.com/archives/ - - Hidden links: - 144. https://www.artofmanliness.com/style/clothing/3-ways-to-wear-a-henley-shirt/ - 145. https://www.artofmanliness.com/style/clothing/a-mans-guide-to-the-oxford-shirt/ - 146. https://www.artofmanliness.com/style/clothing/30-second-suit-quality-test/ - 147. https://www.artofmanliness.com/style/clothing/how-to-get-the-stink-out-of-workout-shirts/ - 148. https://www.artofmanliness.com/style/did-commandos-go-commando/ - 149. https://www.artofmanliness.com/style/accessories/guide-to-fragrance/ - 150. https://www.artofmanliness.com/style/accessories/huckberry-weekender-sunglasses/ - 151. https://www.artofmanliness.com/style/accessories/how-to-pick-mens-wedding-ring/ - 152. https://www.artofmanliness.com/style/facial-hair/your-no-nonsense-guide-to-choosing-the-right-beard-style/ - 153. https://www.artofmanliness.com/style/facial-hair/growing-a-manly-beard/ - 154. https://www.artofmanliness.com/style/facial-hair/beard-oil-faq/ - 155. https://www.artofmanliness.com/style/facial-hair/beard-grooming-products-routine/ - 156. https://www.artofmanliness.com/style/ties/5-ways-to-tie-a-scarf-your-60-second-visual-guide/ - 157. https://www.artofmanliness.com/style/ties/how-to-tie-a-tie/ - 158. https://www.artofmanliness.com/style/ties/how-to-tie-a-half-windsor-knot/ - 159. https://www.artofmanliness.com/style/ties/how-to-match-a-shirt-and-tie/ - 160. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/ - 161. https://www.artofmanliness.com/health-fitness/fitness/podcast-767-fat-loss-made-simple/ - 162. https://www.artofmanliness.com/health-fitness/fitness/mike-mentzer-heavy-duty/ - 163. https://www.artofmanliness.com/health-fitness/fitness/podcast-939-what-lifting-ancient-stones-can-teach-you-about-being-a-man/ - 164. https://www.artofmanliness.com/health-fitness/health/what-you-can-learn-about-shedding-pounds-from-the-vacation-weight-loss-paradox/ - 165. https://www.artofmanliness.com/health-fitness/health/you-need-to-eat-more-fiber/ - 166. https://www.artofmanliness.com/health-fitness/health/silencing-the-ring-proven-strategies-for-tinnitus-relief/ - 167. https://www.artofmanliness.com/health-fitness/health/podcast-947-turn-your-anxiety-into-a-strength/ - 168. https://www.artofmanliness.com/health-fitness/program-review/the-insanely-difficult-standards-of-historys-hardest-p-e-program/ - 169. https://www.artofmanliness.com/health-fitness/program-review/fitness-program-right/ - 170. https://www.artofmanliness.com/health-fitness/program-review/a-review-of-the-movnat-workshop/ - 171. https://www.artofmanliness.com/health-fitness/program-review/atomic-athlete-vanguard/ - 172. https://www.artofmanliness.com/people/family/podcast-946-counterintuitive-ideas-about-marriage-family-and-kids/ - 173. https://www.artofmanliness.com/people/family/riddles-for-kids/ - 174. https://www.artofmanliness.com/people/family/podcast-sibling-ambivalent/ - 175. https://www.artofmanliness.com/people/family/how-to-develop-gratitude-in-your-kids/ - 176. https://www.artofmanliness.com/people/fatherhood/how-to-parent-teacher-conference/ - 177. https://www.artofmanliness.com/people/fatherhood/5-ways-fathers-hugely-influence-on-their-daughters/ - 178. https://www.artofmanliness.com/people/fatherhood/sunday-firesides-we-shouldnt-and-should-be-friends-with-our-kids/ - 179. https://www.artofmanliness.com/people/fatherhood/what-to-do-when-your-kid-lies-to-you/ - 180. https://www.artofmanliness.com/people/relationships/sunday-firesides-can-we-finally-stop-blaming-the-puritans/ - 181. https://www.artofmanliness.com/people/relationships/sunday-firesides-the-sit-in-silence-relationship-test/ - 182. https://www.artofmanliness.com/people/relationships/sunday-firesides-treat-people-as-ends-not-means/ - 183. https://www.artofmanliness.com/people/relationships/podcast-920-advice-on-making-love-last-from-a-divorce-lawyer/ - 184. https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/ - 185. https://www.artofmanliness.com/people/social-skills/podcast-837-the-cues-that-make-you-charismatic/ - 186. https://www.artofmanliness.com/people/social-skills/podcast-938-social-skills-as-the-road-to-character/ - 187. https://www.artofmanliness.com/people/social-skills/podcast-915-finally-learn-to-say-no/ - 188. https://www.artofmanliness.com/skills/how-to/how-to-wrap-a-gift-an-illustrated-guide/ - 189. https://www.artofmanliness.com/skills/how-to/how-to-de-ice-your-windshield-easily-and-effectively/ - 190. https://www.artofmanliness.com/skills/how-to/how-to-paint-a-room/ - 191. https://www.artofmanliness.com/skills/how-to/store-stack-firewood/ - 192. https://www.artofmanliness.com/skills/manly-know-how/build-cozy-fireplace-fire-wont-get-smoky/ - 193. https://www.artofmanliness.com/skills/manly-know-how/how-to-adjust-your-car-mirrors-to-eliminate-blind-spots/ - 194. https://www.artofmanliness.com/skills/manly-know-how/how-throw-a-spiral-football/ - 195. https://www.artofmanliness.com/skills/manly-know-how/whats-the-difference-between-gas-octanes/ - 196. https://www.artofmanliness.com/skills/outdoor-survival/how-to-build-a-quinzee-snow-shelter-illustrated-guide/ - 197. https://www.artofmanliness.com/skills/outdoor-survival/how-to-survive-an-earthquake/ - 198. https://www.artofmanliness.com/skills/outdoor-survival/two-things-you-should-be-doing-to-take-better-care-of-your-camping-gear/ - 199. https://www.artofmanliness.com/skills/outdoor-survival/how-to-emergency-rappel/ - 200. https://getpocket.com/edit?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 201. https://www.facebook.com/sharer.php?u=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 202. https://pinterest.com/pin/create/link/?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 203. https://twitter.com/intent/tweet?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ - 204. https://www.artofmanliness.com/cdn-cgi/l/email-protection#142b767b706d297c606064672e3b3b6363633a7566607b7279757a787d7a7167673a777b793b777c756675776071663b76717c75627d7b663b716c7d6039627b7d777139787b6d7578606d397a71737871776039637c6d3964717b647871397871756271396760756d397b663960666d39607b397661667a397d603975787839707b637a3b - 205. https://www.artofmanliness.com/character/manly-lessons/manvotional-the-right-kind-of-people/ - 206. https://www.artofmanliness.com/skills/how-to/how-to-develop-a-manly-voice-video/ - 207. https://www.artofmanliness.com/character/behavior/improve-your-speaking-voice/ - 208. https://www.artofmanliness.com/skills/how-to/masculine-voice/ - 209. https://www.artofmanliness.com/character/advice/sunday-firesides-you-are-not-responsible-for-other-peoples-feelings/ - 210. https://www.artofmanliness.com/character/sunday-firesides-why-bad-things-happen-to-good-people-according-to-a-stoic/ +[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/behavior/ +[168] https://www.artofmanliness.com/character/ +[169] https://getpocket.com/edit?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ +[170] https://www.facebook.com/sharer.php?u=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ +[171] https://pinterest.com/pin/create/link/?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ +[172] https://twitter.com/intent/tweet?url=https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/ +[173] https://www.artofmanliness.com/cdn-cgi/l/email-protection#26194449425f1b4e525256551c09095151510847545249404b47484a4f484355550845494b09454e475447455243540944434e47504f495409435e4f520b50494f45430b4a495f474a525f0b4843414a4345520b514e5f0b564349564a430b4a434750430b5552475f0b49540b52545f0b52490b445354480b4f520b474a4a0b4249514809 +[174] https://amzn.to/3Prv3ox +[175] https://text2fa.ir/wp-content/uploads/Text2fa.ir-Exit-Voice-Loyalty-and-Neglect-1.pdf +[176] https://www.jstor.org/stable/2393565 +[177] https://www.artofmanliness.com/character/manly-lessons/manvotional-the-right-kind-of-people/ +[178] https://www.artofmanliness.com/character/manly-lessons/manvotional-the-right-kind-of-people/ +[179] https://www.artofmanliness.com/skills/how-to/how-to-develop-a-manly-voice-video/ +[180] https://www.artofmanliness.com/skills/how-to/how-to-develop-a-manly-voice-video/ +[181] https://www.artofmanliness.com/character/behavior/improve-your-speaking-voice/ +[182] https://www.artofmanliness.com/character/behavior/improve-your-speaking-voice/ +[183] https://www.artofmanliness.com/skills/how-to/masculine-voice/ +[184] https://www.artofmanliness.com/skills/how-to/masculine-voice/ +[185] https://www.artofmanliness.com/character/advice/sunday-firesides-you-are-not-responsible-for-other-peoples-feelings/ +[186] https://www.artofmanliness.com/character/advice/sunday-firesides-you-are-not-responsible-for-other-peoples-feelings/ +[187] https://www.artofmanliness.com/character/sunday-firesides-why-bad-things-happen-to-good-people-according-to-a-stoic/ +[188] https://www.artofmanliness.com/character/sunday-firesides-why-bad-things-happen-to-good-people-according-to-a-stoic/ +[189] https://www.artofmanliness.com/character/advice/podcast-753-take-back-the-weekend/ +[190] https://www.artofmanliness.com/character/advice/podcast-924-how-to-develop-rugged-flexibility/ +[195] https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/# +[199] https://strenuouslife.co/ +[200] https://strenuouslife.co/ +[205] https://www.artofmanliness.com/character/behavior/exit-voice-loyalty-neglect-why-people-leave-stay-or-try-to-burn-it-all-down/# +[209] https://www.artofmanliness.com/living/leisure/podcast-959-come-alive-again-by-having-more-fun/ +[210] https://www.artofmanliness.com/living/leisure/podcast-959-come-alive-again-by-having-more-fun/ +[211] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ +[212] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ +[213] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/ +[214] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/ +[215] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ +[216] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ +[217] https://www.artofmanliness.com/podcast/ +[218] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/ +[219] https://www.artofmanliness.com/character/advice/sunday-firesides-first-day-worst-day/ +[220] https://www.artofmanliness.com/character/knowledge-of-men/rage-rage-against-the-dying-back-of-the-brain/ +[221] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/ +[222] https://www.artofmanliness.com/character/behavior/ +[223] https://my.community.com/artofmanliness?t=manly +[224] https://www.artofmanliness.com/contact/ +[225] https://www.artofmanliness.com/privacy-policy/ +[226] https://www.artofmanliness.com/about-2/ +[227] https://www.artofmanliness.com/all-topics/ +[228] https://www.artofmanliness.com/archives/ diff --git a/static/archive/www-baldurbjarnason-com-uaaq9d.txt b/static/archive/www-baldurbjarnason-com-uaaq9d.txt index 100b4a1..4193e40 100644 --- a/static/archive/www-baldurbjarnason-com-uaaq9d.txt +++ b/static/archive/www-baldurbjarnason-com-uaaq9d.txt @@ -1,222 +1,210 @@ - #[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 +[6]Baldur Bjarnason - [7]Baldur Bjarnason +Web dev at the end of the world, from Hveragerði, Iceland - Web dev at the end of the world, from Hveragerði, Iceland - - 21 November 2022 +21 November 2022 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, Cicero once wrote: 'He who knows only his own generation remains - forever a child.' + 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. - [9]Programming and Scaling (Alan Kay, 2011) + 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. - The programming pop culture defines change—any change—as progress. Most - developers, myself included, have a fascination with novelty. If it’s - new, then it must be an improvement. You even hear this stated outright - as an argument by developers: it’s newer and therefore better. Trends - in software development are rarely based on objective observation or - sensible practice. This endless chasing of trends leads to projects - being needlessly rewritten, code being abandoned, and new projects - being started when fixing the bugs in an old project would have done - the same. The stocks of the software development system are flushed out - at a moment’s notice simply because the developers found something - shinier. + So, Cicero once wrote: 'He who knows only his own generation remains + forever a child.' - 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. +[8]Programming and Scaling (Alan Kay, 2011) - Pop cultures favour the visual aesthetic of the day. We all know what - sort of aesthetic designers commonly favour. Small, low-contrast text, - lots of whitespace, no pure whites or pure blacks (just greys). The - details vary with fashion, but each generation of designers has a - preferred visual aesthetic. That aesthetic tests poorly; the text is - illegible; the layout doesn’t have enough contrast. The information - density is so sparse it’s effectively non-existent. +The programming pop culture defines change—any change—as progress. Most +developers, myself included, have a fascination with novelty. If it’s new, then +it must be an improvement. You even hear this stated outright as an argument by +developers: it’s newer and therefore better. Trends in software development are +rarely based on objective observation or sensible practice. This endless +chasing of trends leads to projects being needlessly rewritten, code being +abandoned, and new projects being started when fixing the bugs in an old +project would have done the same. The stocks of the software development system +are flushed out at a moment’s notice simply because the developers found +something shinier. - Looks pretty, though. +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. - Coders have a similar tendency, their preferred aesthetic is just a bit - different, but as with designers, it tests horribly when put in front - of genuine users. The exact details of the preferred aesthetic tend to - vary from generation to generation. One group prefers light-on-dark - text (despite not suffering from conditions that benefit from dark - mode) and unusable hyper-complex layouts where everything is - configurable. Another group goes for ultra-minimalism where nothing is - shown by default. You constantly scrub around and hunt for a button, a - widget—anything that even vaguely resembles an affordance. This is - usually not an issue if you have designers on the team. If you’re - letting the programmers design the user interface or are a programmer - designing a user interface, you need to be aware of it. +Pop cultures favour the visual aesthetic of the day. We all know what sort of +aesthetic designers commonly favour. Small, low-contrast text, lots of +whitespace, no pure whites or pure blacks (just greys). The details vary with +fashion, but each generation of designers has a preferred visual aesthetic. +That aesthetic tests poorly; the text is illegible; the layout doesn’t have +enough contrast. The information density is so sparse it’s effectively +non-existent. - But this adherence to a specific aesthetic isn’t limited to designs. - It’s also an issue when it comes to the code itself. +Looks pretty, though. - The programming pop culture favours specific code aesthetics based on - the trends of the day. I’m not talking about code style or formatting. - The code in a project should adhere to a single style, simple as that. - The issue is that the programming pop culture demands that code exhibit - the latest popular aesthetics of rigour, formality, and cleverness. - Whether the code actually is rigorous, formal, or clever matters less. - A few years ago, as the popularity of the Ruby programming language - peaked, a certain dynamism and trickery were en vogue. It didn’t matter - if you were writing in Ruby, JavaScript, or Objective-C. Your code had - to have a level of “magic” to it. Metaprogramming, syntax-hacking - languages to create ad hoc Domain-Specific Languages, tricks with - extreme late binding, and more were frequent topics on developer - weblogs and forums. Even a phrase like “objective-c runtime - metaprogramming” will date you to a specific generation of native app - developers almost down to a single year. +Coders have a similar tendency, their preferred aesthetic is just a bit +different, but as with designers, it tests horribly when put in front of +genuine users. The exact details of the preferred aesthetic tend to vary from +generation to generation. One group prefers light-on-dark text (despite not +suffering from conditions that benefit from dark mode) and unusable +hyper-complex layouts where everything is configurable. Another group goes for +ultra-minimalism where nothing is shown by default. You constantly scrub around +and hunt for a button, a widget—anything that even vaguely resembles an +affordance. This is usually not an issue if you have designers on the team. If +you’re letting the programmers design the user interface or are a programmer +designing a user interface, you need to be aware of it. - 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. +But this adherence to a specific aesthetic isn’t limited to designs. It’s also +an issue when it comes to the code itself. - The current trend is towards the aesthetics of correctness. Everything - has to look like it has strong or static typing. It doesn’t have to - really have static typing. That can all be made up after the fact in a - declaration file. It merely needs to have the aesthetics of types. Type - annotations everywhere, implementing logic through type system - trickery, and forcing any and all dynamism out of the system in the - name of correctness is the name of the game. +The programming pop culture favours specific code aesthetics based on the +trends of the day. I’m not talking about code style or formatting. The code in +a project should adhere to a single style, simple as that. The issue is that +the programming pop culture demands that code exhibit the latest popular +aesthetics of rigour, formality, and cleverness. Whether the code actually is +rigorous, formal, or clever matters less. A few years ago, as the popularity of +the Ruby programming language peaked, a certain dynamism and trickery were en +vogue. It didn’t matter if you were writing in Ruby, JavaScript, or +Objective-C. Your code had to have a level of “magic” to it. Metaprogramming, +syntax-hacking languages to create ad hoc Domain-Specific Languages, tricks +with extreme late binding, and more were frequent topics on developer weblogs +and forums. Even a phrase like “objective-c runtime metaprogramming” will date +you to a specific generation of native app developers almost down to a single +year. - 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. +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. - It’s a fashion industry. Trends come; trends go. The lack of historical - awareness is considered by most to be a feature. +The current trend is towards the aesthetics of correctness. Everything has to +look like it has strong or static typing. It doesn’t have to really have static +typing. That can all be made up after the fact in a declaration file. It merely +needs to have the aesthetics of types. Type annotations everywhere, +implementing logic through type system trickery, and forcing any and all +dynamism out of the system in the name of correctness is the name of the game. - This rigour is useful in moderation. Static typing does prevent bugs. - Usually, they are the same sort of bugs unit testing prevents. Both - have immense value as tools to manage your software development. - Currently, the fashion is to favour static typing over unit testing for - establishing a certain base level of correctness in your code. At some - point, they are likely to switch again. They have a couple of times in - the past. That you could use both at the same time and get the benefits - of both doesn’t enter the discourse. Static typing with compile-time - correctness checks has its uses. So do dynamism, extreme late binding, - and metaprogramming. Most of these approaches can be used together, but - that isn’t how pop culture works. Pop culture demands there be only one - winner at a time. Choose one, not whichever works the best at each - time. +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. - Product development can’t indulge in being pop culture. Be wary of - these popularity contests. +It’s a fashion industry. Trends come; trends go. The lack of historical +awareness is considered by most to be a feature. - These issues with programming culture aren’t new. +This rigour is useful in moderation. Static typing does prevent bugs. Usually, +they are the same sort of bugs unit testing prevents. Both have immense value +as tools to manage your software development. Currently, the fashion is to +favour static typing over unit testing for establishing a certain base level of +correctness in your code. At some point, they are likely to switch again. They +have a couple of times in the past. That you could use both at the same time +and get the benefits of both doesn’t enter the discourse. Static typing with +compile-time correctness checks has its uses. So do dynamism, extreme late +binding, and metaprogramming. Most of these approaches can be used together, +but that isn’t how pop culture works. Pop culture demands there be only one +winner at a time. Choose one, not whichever works the best at each time. - Jamie Zawinski calls it the [10]“Cascade of Attention-Deficit - Teenagers” model. We can’t do much to change the nature of the field by - now—Alan Kay has certainly tried—but we can mitigate the harm done by - the trend-seeking. We can work to ensure that everybody on the team, - programmers and designers, is aligned, and have the same understanding - of what matters and how to accomplish it. +Product development can’t indulge in being pop culture. Be wary of these +popularity contests. - 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. +These issues with programming culture aren’t new. - You need research. - __________________________________________________________________ +Jamie Zawinski calls it the [9]“Cascade of Attention-Deficit Teenagers” model. +We can’t do much to change the nature of the field by now—Alan Kay has +certainly tried—but we can mitigate the harm done by the trend-seeking. We can +work to ensure that everybody on the team, programmers and designers, is +aligned, and have the same understanding of what matters and how to accomplish +it. - Bonus Alan Kay quote on programming as a pop culture that I didn’t - include in the book: +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. - But pop culture holds a disdain for history. Pop culture is all - about identity and feeling like you’re participating. It has nothing - to do with cooperation, the past or the future—it’s living in the - present. I think the same is true of most people who write code for - money. They have no idea where [their culture came from]—and the - Internet was done so well that most people think of it as a natural - resource like the Pacific Ocean, rather than something that was - man-made. +You need research. - Alan Kay, [11]Dr. Dobb’s Interview with Alan Kay - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -[12]Out of the Software Crisis +Bonus Alan Kay quote on programming as a pop culture that I didn’t include in +the book: - [13]Out of the Software Crisis by Baldur Bjarnason + But pop culture holds a disdain for history. Pop culture is all about + identity and feeling like you’re participating. It has nothing to do with + cooperation, the past or the future—it’s living in the present. I think the + same is true of most people who write code for money. They have no idea + where [their culture came from]—and the Internet was done so well that most + people think of it as a natural resource like the Pacific Ocean, rather + than something that was man-made. - Software projects keep failing, not because we don’t have the right - team or tools but because our software development system is broken. - Out of the Software Crisis is a guide to fixing your software projects - with systems-thinking making them more resilient to change and less - likely to fail. +Alan Kay, [10]Dr. Dobb’s Interview with Alan Kay - [14]Systems-Thinking For Software Projects +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - [15]WTF is a Framework? +[11]Out of the Software Crisis - [16]The response to Out of the Software Crisis has been amazing +[12]Out of the Software Crisis by Baldur Bjarnason + +Software projects keep failing, not because we don’t have the right team or +tools but because our software development system is broken. Out of the +Software Crisis is a guide to fixing your software projects with +systems-thinking making them more resilient to change and less likely to fail. + +[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) - Subscribe +[17][ ] +Subscribe - We respect your privacy. +We respect your privacy. - Unsubscribe at any time. +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 diff --git a/static/archive/www-chrbutler-com-294dnz.txt b/static/archive/www-chrbutler-com-294dnz.txt index 3d4d07a..e4fd1af 100644 --- a/static/archive/www-chrbutler-com-294dnz.txt +++ b/static/archive/www-chrbutler-com-294dnz.txt @@ -1,399 +1,392 @@ - #[1]Christopher Butler ☼ +[1] Christopher Butler ☼ - [2]Christopher Butler ☼ +[2]Archive -[3]Archive +[3]Info -[4]Info +[4]Now -[5]Now - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -Organization — Office +Organization — Office -After the kitchen, the office is the most used room in our home. This is how -we keep it organized. +After the kitchen, the office is the most used room in our home. This is how we +keep it organized. - [eaf01f24-61dc-4bef-8166-2f08c81b856a.jpg] +[eaf01f24-61dc-4bef-8166-2f08c81b856a] - This is the office. +This is the office. - My wife and I work here, Monday through Friday, 9 to 5. Our children - play and create in here just as often. It’s where we maintain several - workspaces, store supplies, house a portion of our library, and keep a - guest bed. To make things even more complicated, I also exercise in - here nearly every day. All in this 10’ x 12’ space with two windows. - Since we began working from home, I estimate that we’ve spent around - 8,000 hours in here. +My wife and I work here, Monday through Friday, 9 to 5. Our children play and +create in here just as often. It’s where we maintain several workspaces, store +supplies, house a portion of our library, and keep a guest bed. To make things +even more complicated, I also exercise in here nearly every day. All in this +10’ x 12’ space with two windows. Since we began working from home, I estimate +that we’ve spent around 8,000 hours in here. - Organization — at an almost obsessive level — is what keeps this space - a functional and enjoyable place to spend time. Minimalism, though, is - not. We have a lot of gear in here. Most of it gets used every single - day. +Organization — at an almost obsessive level — is what keeps this space a +functional and enjoyable place to spend time. Minimalism, though, is not. We +have a lot of gear in here. Most of it gets used every single day. - I’m about to share an unnecessary amount of detail on what makes this - space work. I’ve divided this into three main sections: +I’m about to share an unnecessary amount of detail on what makes this space +work. I’ve divided this into three main sections: - 1. On and Under the Desk - 2. On the Walls - 3. In Books + 1. On and Under the Desk + 2. On the Walls + 3. In Books - At the end of each section, I’ll include a list of all the gear that I - have either mentioned or captured in pictures. +At the end of each section, I’ll include a list of all the gear that I have +either mentioned or captured in pictures. On and Under the Desk - I prefer to keep my desktop as free from infrastructure as possible. +I prefer to keep my desktop as free from infrastructure as possible. - My general rule is that if I need it within reach, in view, or audible, - it’s on the desk. If I don’t, it’s under the desk. That means that my - desktop is still not as free of things as I’d like, but there is an - impressive amount of gear running my day-to-day underneath it. +My general rule is that if I need it within reach, in view, or audible, it’s on +the desk. If I don’t, it’s under the desk. That means that my desktop is still +not as free of things as I’d like, but there is an impressive amount of gear +running my day-to-day underneath it. - [9b3325cc-7028-4d54-b0c0-9000877e3c2b.jpg] +[9b3325cc-7028-4d54-b0c0-9000877e3c2b] - [745ee5c9-f738-4677-b266-ff5708036077.jpg] +[745ee5c9-f738-4677-b266-ff5708036077] - On the desk is: - * an [6]LG 32” UltraFine 4k HDR10 Ergo Display mounted on an - [7]Ergotron LX Single Monitor Arm rather than the arm it ships with - * an [8]Elgato Key Light - * a [9]Sure SM7B Microphone mounted on an [10]Elgato Wave Mic Arm - * a [11]Sony A7C Full Frame Camera with [12]Sony FE 35mm F1.4 GM lens - mounted with a [13]ULANZI Camera Desk Mount Stand - * a pair of [14]Audioengine HD3 speakers - * the [15]awesome lamp I made twenty years ago by duo-tac’ing a strip - of wax paper onto an industrial plastic tube and placing a - trash-picked light inside — it still holds up! - * the desk is a [16]Floyd dining table. I added a [17]sliding - under-desk drawer. +On the desk is: - Underneath the desk I use a simple rack on wheels to stack two - computers, an input hub, three different external storage drives, an - audio interface, a battery backup and even my old minidisc player. All - of it is humming all day, but out of sight. + • an [5]LG 32” UltraFine 4k HDR10 Ergo Display mounted on an [6]Ergotron LX + Single Monitor Arm rather than the arm it ships with + • an [7]Elgato Key Light + • a [8]Sure SM7B Microphone mounted on an [9]Elgato Wave Mic Arm + • a [10]Sony A7C Full Frame Camera with [11]Sony FE 35mm F1.4 GM lens mounted + with a [12]ULANZI Camera Desk Mount Stand + • a pair of [13]Audioengine HD3 speakers + • the [14]awesome lamp I made twenty years ago by duo-tac’ing a strip of wax + paper onto an industrial plastic tube and placing a trash-picked light + inside — it still holds up! + • the desk is a [15]Floyd dining table. I added a [16]sliding under-desk + drawer. - All the lights, knobs, and buttons are irresistible to my nearly - two-year old son, so I made custom covers out of half-inch black foam - board that slide in between the rack’s supports and the shelf contents - to keep him from exploring. You can see how they look on the right side - of the split image below — covers out on the left, in on the right. +Underneath the desk I use a simple rack on wheels to stack two computers, an +input hub, three different external storage drives, an audio interface, a +battery backup and even my old minidisc player. All of it is humming all day, +but out of sight. - [58507484-e94a-4aa0-ad71-72c58427649c.jpg] +All the lights, knobs, and buttons are irresistible to my nearly two-year old +son, so I made custom covers out of half-inch black foam board that slide in +between the rack’s supports and the shelf contents to keep him from exploring. +You can see how they look on the right side of the split image below — covers +out on the left, in on the right. - While I’m here, let me take a moment to urge those who have not to - acquire an uninterruptible power supply (UPS) system. +[58507484-e94a-4aa0-ad71-72c58427649c] - We have two [18]CyberPower CP1500 backups running in our office. Each - has six battery backup and surge protected outlets as well as six - additional surge protected outlets, network inputs, and USB inputs. - (It’s the thing on the bottom shelf peeking out a bit from behind one - of my covers.) +While I’m here, let me take a moment to urge those who have not to acquire an +uninterruptible power supply (UPS) system. - Just this week, we had a freak storm descend upon our city and in the - span of just 35 minutes knock out power for hundreds of thousands and - fell more trees than any other storm I’ve experienced in the time I’ve - lived here. Because I do my work on a Mac Mini, having a UPS that kicks - in when the power goes out saves me from losing work. But it can also - keep the lights on, fans going, music playing, the works. +We have two [17]CyberPower CP1500 backups running in our office. Each has six +battery backup and surge protected outlets as well as six additional surge +protected outlets, network inputs, and USB inputs. (It’s the thing on the +bottom shelf peeking out a bit from behind one of my covers.) - Keen eyes will notice that the cables behind everything are relatively - tidy. The thing about cables is that the greater they are in number, - the more difficult they are to tame! +Just this week, we had a freak storm descend upon our city and in the span of +just 35 minutes knock out power for hundreds of thousands and fell more trees +than any other storm I’ve experienced in the time I’ve lived here. Because I do +my work on a Mac Mini, having a UPS that kicks in when the power goes out saves +me from losing work. But it can also keep the lights on, fans going, music +playing, the works. - [1e9e3fa0-247a-421b-b63c-34229c2fcad3.jpg] +Keen eyes will notice that the cables behind everything are relatively tidy. +The thing about cables is that the greater they are in number, the more +difficult they are to tame! - Rather than completely hiding them — and making it more difficult to - access or alter them later — I prioritize labeling. I coil and bunch - any excess cable, but I don’t clip or enclose them. I do label them at - both ends so I can easily identify what’s what no matter where I’m - looking. +[1e9e3fa0-247a-421b-b63c-34229c2fcad3] - Every time I find myself writing a label with sharpie on blue tape, I - know I’m doing my future self a favor. +Rather than completely hiding them — and making it more difficult to access or +alter them later — I prioritize labeling. I coil and bunch any excess cable, +but I don’t clip or enclose them. I do label them at both ends so I can easily +identify what’s what no matter where I’m looking. - 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 +Every time I find myself writing a label with sharpie on blue tape, I know I’m +doing my future self a favor. + +Under the desk is: + + • an [18]IKEA KORNSJÖ side table + • two Apple M1 Mac minis + • a [19]CalDigit Thunderbolt Station 4 hub + • two DIY External SSDs — using [20]ACASIS 40gbps Enclosures, [21]WD 1TB NVMe + SSD Solid State drives, and [22]4’ Thunderbolt 4 Cables + • a [23]LaCie 2big RAID 8TB External Hard Drive + • a Cloud Microphone [24]Cloudlifter + • a [25]Focusrite Scarlet 2i2 audio interface + • a [26]Sony MXD-D40 + • a [27]CyberPower CP1500PFCLCD UPS System On the Walls - My wife and I keep a lot of books and magazines. We’re by no means at a - hoarder level, but we do like our printed media and that takes up - space. We have most of our library in another room, but in here, we - have many magazines, all our design books, and all my books about the - paranormal and other weirdness. +My wife and I keep a lot of books and magazines. We’re by no means at a hoarder +level, but we do like our printed media and that takes up space. We have most +of our library in another room, but in here, we have many magazines, all our +design books, and all my books about the paranormal and other weirdness. - To keep them organized, we need shelves. I have found that the best - shelves are the ones you create yourself. +To keep them organized, we need shelves. I have found that the best shelves are +the ones you create yourself. - Other than the racks under our desks, all the shelves in this room — - there are many — were made by measuring and hanging custom rack or - ledge shelving. It’s inexpensive, very strong (by god use a stud - finder), and requires very few tools. I made mine with steel racks, - half-inch poplar, a hand saw, a level, a pencil, and a few different - straightedges. +Other than the racks under our desks, all the shelves in this room — there are +many — were made by measuring and hanging custom rack or ledge shelving. It’s +inexpensive, very strong (by god use a stud finder), and requires very few +tools. I made mine with steel racks, half-inch poplar, a hand saw, a level, a +pencil, and a few different straightedges. - [4e6fc669-65a5-45e9-bbe6-fde0ef2a7d78.jpg] +[4e6fc669-65a5-45e9-bbe6-fde0ef2a7d78] - [32d1e14f-eb6c-46b9-bf52-31c8b5d90e93.jpg] +[32d1e14f-eb6c-46b9-bf52-31c8b5d90e93] - I strongly recommend [29]library-grade bookends, which you can see at - the edges of the shelf pictured above. These are the kind that won’t - tip over, won’t bend, and won’t slide off the edge of floating shelves. - They are very, very good. +I strongly recommend [28]library-grade bookends, which you can see at the edges +of the shelf pictured above. These are the kind that won’t tip over, won’t +bend, and won’t slide off the edge of floating shelves. They are very, very +good. - Most of the stuff we keep on the shelves needs to be easy to retrieve. - The best way to do this is to create kits. Find a container that works - best for you in multiples and gather like items, put them in, and label - them clearly. (I like the [30]iDesign 29847, which was designed to hold - toilet paper.) +Most of the stuff we keep on the shelves needs to be easy to retrieve. The best +way to do this is to create kits. Find a container that works best for you in +multiples and gather like items, put them in, and label them clearly. (I like +the [29]iDesign 29847, which was designed to hold toilet paper.) - [65617d4c-8d78-4a6a-b71d-6141f6a2b5b1.jpg] +[65617d4c-8d78-4a6a-b71d-6141f6a2b5b1] - The shelf pictured above has nearly every frequently used office or - creative supply in our home. Each box is large enough to hold quite a - bit, but small enough to be manageable by our kids. +The shelf pictured above has nearly every frequently used office or creative +supply in our home. Each box is large enough to hold quite a bit, but small +enough to be manageable by our kids. - This room also has a closet. I lined it with shelving to store - household supplies, paper, tools, and emergency equipment and to make - it easy to retrieve anything without having to root around. Most of - this stuff is also in kits stored in [31]IRIS USA Weatherpro latching - boxes. We are ready for a disaster! +This room also has a closet. I lined it with shelving to store household +supplies, paper, tools, and emergency equipment and to make it easy to retrieve +anything without having to root around. Most of this stuff is also in kits +stored in [30]IRIS USA Weatherpro latching boxes. We are ready for a disaster! - [7b5fb987-19be-43c3-8e59-abbcdf37baec.jpg] +[7b5fb987-19be-43c3-8e59-abbcdf37baec] - I’m particularly pleased that I can store a collapsible exercise bench - on the inside of the door. +I’m particularly pleased that I can store a collapsible exercise bench on the +inside of the door. - Other exercise equipment, like my kettlebells, sit under the supply - shelving on the left — I even rigged up cables to hang rolled up yoga - mats under the bottom shelf. 👌 It’s the little things. +Other exercise equipment, like my kettlebells, sit under the supply shelving on +the left — I even rigged up cables to hang rolled up yoga mats under the bottom +shelf. 👌 It’s the little things. - [5909fae1-cc3b-462c-b1f0-142aa56e322f.jpg] +[5909fae1-cc3b-462c-b1f0-142aa56e322f] - [7f8971b1-0e00-4699-8e16-af9bad1dfa7b.jpg] +[7f8971b1-0e00-4699-8e16-af9bad1dfa7b] - I keep my dumbbells in a neat line under the sofa/guest bed. +I keep my dumbbells in a neat line under the sofa/guest bed. - Good organization optimizes for storage and retrieval. These things are - all very helpful: - * [32]Floating Ledge steel shelves - * Proect Source [33]double track strips and [34]brackets - * [35]The Library Store Bear Hug bookends - * [36]iDesign 29847 storage bins - * [37]IRIS USA Weatherpro latching boxes - * [38]Craftsman Tradestack tool chests - * [39]Viesso Dublexo Sofa Bed +Good organization optimizes for storage and retrieval. These things are all +very helpful: + + • [31]Floating Ledge steel shelves + • Proect Source [32]double track strips and [33]brackets + • [34]The Library Store Bear Hug bookends + • [35]iDesign 29847 storage bins + • [36]IRIS USA Weatherpro latching boxes + • [37]Craftsman Tradestack tool chests + • [38]Viesso Dublexo Sofa Bed In Books - I’m as obsessive with how I organize information as I am objects and - spaces. At this point in my life, I’ve tried dozens and dozens of - digital organization tools. While I used some of them for a long time — - I used Todoist for several years — none have ever felt as useful to me - as pen and paper. +I’m as obsessive with how I organize information as I am objects and spaces. At +this point in my life, I’ve tried dozens and dozens of digital organization +tools. While I used some of them for a long time — I used Todoist for several +years — none have ever felt as useful to me as pen and paper. - I’ve kept a notebook of some kind — as a sketchbook, an art journal, a - log — for decades. I mostly maintained one at a time, and so there was - always a mixture of things in it: notes and lists on one page, drawings - and collages on the next. +I’ve kept a notebook of some kind — as a sketchbook, an art journal, a +log — for decades. I mostly maintained one at a time, and so there was always a +mixture of things in it: notes and lists on one page, drawings and collages on +the next. - But over the last few years, I’ve been formulating a more intentional - and systematic use of my notebooks. Now, I maintain two books at the - same time: one for visual exploration and the other for note-taking and - list-making. +But over the last few years, I’ve been formulating a more intentional and +systematic use of my notebooks. Now, I maintain two books at the same time: one +for visual exploration and the other for note-taking and list-making. - [6ea49f4f-861b-408d-85eb-f8c9d7e1c95f.jpg] +[6ea49f4f-861b-408d-85eb-f8c9d7e1c95f] - [3d557cb6-2c42-48c3-84ed-950cbafee775.jpg] +[3d557cb6-2c42-48c3-84ed-950cbafee775] - [bd52173f-ef6c-4bb7-a15f-a99cefb63011.jpg] +[bd52173f-ef6c-4bb7-a15f-a99cefb63011] - Just having two books helps, but the key to making this work as a - productivity system is to maintain a specific habit of use. While I do - find writing to-do lists on paper inherently better — for me — than - using some kind of digital app because I can focus on the information - outside of the digital space, it’s how I use them that makes them - actually deliver results for me. +Just having two books helps, but the key to making this work as a productivity +system is to maintain a specific habit of use. While I do find writing to-do +lists on paper inherently better — for me — than using some kind of digital app +because I can focus on the information outside of the digital space, it’s how I +use them that makes them actually deliver results for me. - Here’s how it works: - 1. I end the day by making a to-do list for the next one. - This is probably the most important work/life hack I can offer to - anyone who doesn’t already do this. It’s a great idea to start your - day with a prioritized list of the things you need to do. But I end - my day by making that list so that I can also use it as a tool for - clearing my mind and letting me make a meaningful mental break from - work. I have also found that when my days are very busy, if I don’t - end them with making a list for the next day, I am likely to forget - details by the next morning. This is especially true if I let my - inbox determine my day; if I don’t have a to-do list, my inbox - becomes one. - 2. I mark my to-do list with a bright, yellow sticky note. - This is a very small detail, but it lets me shut my notebook and - set it aside. The next morning, I can open it directly to the day’s - list. Then I move the sticky note to the next page. When I am - stressed, tiny investments in my future self really pay off. Giving - myself an immediate sense of place is one of them. - 3. If a task is longer-term and has many sub-tasks, I create an index - card to contain it. - I might transpose some of the sub-tasks from the card to my book so - I can keep track of things in one place throughout the day, but - doing this lets me think through how I’m going to achieve a larger - goal over a longer period of time. I keep these index cards in a - small box on my desk. - 4. There are no analytics, and that’s a feature. - Back when I used Todoist, I found its analytics intriguing and - motivating. I initially liked being able to pore over my - productivity statistics. And Todoist set it up to “reward” you as - you completed more tasks. Ithink I worked my way up to some absurd - number of tasks complete, which the app always displayed front and - center, and some ridiculous classification like “Master Overlord” - or something. It worked for me, until it didn’t. Analytics in this - context create their own layer of stress. I’d find that if my - numbers dropped, it felt wrong, even if that was because I was less - busy — which is probably a good thing now and again! I found that I - was thinking about my “performance” as often as my productivity. I - didn’t need that. +Here’s how it works: - [2e6d6ea8-930f-4297-9662-d55905f31808.jpg] + 1. I end the day by making a to-do list for the next one. + This is probably the most important work/life hack I can offer to anyone + who doesn’t already do this. It’s a great idea to start your day with a + prioritized list of the things you need to do. But I end my day by making + that list so that I can also use it as a tool for clearing my mind and + letting me make a meaningful mental break from work. I have also found that + when my days are very busy, if I don’t end them with making a list for the + next day, I am likely to forget details by the next morning. This is + especially true if I let my inbox determine my day; if I don’t have a to-do + list, my inbox becomes one. + 2. I mark my to-do list with a bright, yellow sticky note. + This is a very small detail, but it lets me shut my notebook and set it + aside. The next morning, I can open it directly to the day’s list. Then I + move the sticky note to the next page. When I am stressed, tiny investments + in my future self really pay off. Giving myself an immediate sense of place + is one of them. + 3. If a task is longer-term and has many sub-tasks, I create an index card to + contain it. + I might transpose some of the sub-tasks from the card to my book so I can + keep track of things in one place throughout the day, but doing this lets + me think through how I’m going to achieve a larger goal over a longer + period of time. I keep these index cards in a small box on my desk. + 4. There are no analytics, and that’s a feature. + Back when I used Todoist, I found its analytics intriguing and motivating. + I initially liked being able to pore over my productivity statistics. And + Todoist set it up to “reward” you as you completed more tasks. Ithink I + worked my way up to some absurd number of tasks complete, which the app + always displayed front and center, and some ridiculous classification like + “Master Overlord” or something. It worked for me, until it didn’t. + Analytics in this context create their own layer of stress. I’d find that + if my numbers dropped, it felt wrong, even if that was because I was less + busy — which is probably a good thing now and again! I found that I was + thinking about my “performance” as often as my productivity. I didn’t need + that. - This is what works for me. I’d never assume it would work for everyone, - or that everyone would have the same trouble with an app like Todoist - that I eventually did. But if you’ve tried apps of various kinds and - still don’t feel the benefits of organizing your work, I’d suggest - taking it offline. One point of a system like this is to help you get - things done. The other is to help you feel more at ease. +[2e6d6ea8-930f-4297-9662-d55905f31808] - Now, this doesn’t mean I never use a computer for notes and lists. If I - write a note or have an idea that I want to transpose to a digital file - so that it can become something else — like an article or a message to - someone — I use a blue post-it note to mark it and keep it there until - I’ve copied it over. (Many of my blue bookmarks are for dream entries - that I like to store digitally so I can search them later. Maybe I’ll - write something on dream journaling some day…) +This is what works for me. I’d never assume it would work for everyone, or that +everyone would have the same trouble with an app like Todoist that I eventually +did. But if you’ve tried apps of various kinds and still don’t feel the +benefits of organizing your work, I’d suggest taking it offline. One point of a +system like this is to help you get things done. The other is to help you feel +more at ease. - [0bc93018-95c3-4df0-9185-f89156dcbd19.jpg] +Now, this doesn’t mean I never use a computer for notes and lists. If I write a +note or have an idea that I want to transpose to a digital file so that it can +become something else — like an article or a message to someone — I use a blue +post-it note to mark it and keep it there until I’ve copied it over. (Many of +my blue bookmarks are for dream entries that I like to store digitally so I can +search them later. Maybe I’ll write something on dream journaling some day…) - These timeless office supplies are very useful to me and I don’t want - to live in a world without them: - * [40]Stillman & Birn Epsilon sketchbooks - * [41]Pilot G2 pens - * [42]Electric Yellow Post-it Notes - * [43]Oxford Blank Index Cards - * binder clips — you can get them anywhere +[0bc93018-95c3-4df0-9185-f89156dcbd19] + +These timeless office supplies are very useful to me and I don’t want to live +in a world without them: + + • [39]Stillman & Birn Epsilon sketchbooks + • [40]Pilot G2 pens + • [41]Electric Yellow Post-it Notes + • [42]Oxford Blank Index Cards + • binder clips — you can get them anywhere Why, though? - I am on a continuous quest for organization. +I am on a continuous quest for organization. - For most of my life, order has been something of an obsession. - Everywhere I look, I see chaos and entropy creeping in. I see a new - surface and anticipate wear and tear. I see a functioning system and - look for where it will break. +For most of my life, order has been something of an obsession. Everywhere I +look, I see chaos and entropy creeping in. I see a new surface and anticipate +wear and tear. I see a functioning system and look for where it will break. - That may sound like an exaggeration and more than a bit unpleasant, but - I’ve come to understand that it’s neither. Life is, paradoxically, both - order and disorder. +That may sound like an exaggeration and more than a bit unpleasant, but I’ve +come to understand that it’s neither. Life is, paradoxically, both order and +disorder. - The very possibility of life presumes order — the coherence of biology - at the atomic level — and yet, the act of living tends toward disorder. - As we live and breathe and move about this world we and it push and - pull against one another; words against wind, towers and tides, edifice - and erosion. Given the broadest and longest view, all created order is - futile. We simply don’t live long enough to maintain it. +The very possibility of life presumes order — the coherence of biology at the +atomic level — and yet, the act of living tends toward disorder. As we live and +breathe and move about this world we and it push and pull against one another; +words against wind, towers and tides, edifice and erosion. Given the broadest +and longest view, all created order is futile. We simply don’t live long enough +to maintain it. - But zoomed in, at the closer range of living day by day, created order - is, literally, the fabric of functional living. Roofs are order. - Clothing is order. Order puts food on the table. +But zoomed in, at the closer range of living day by day, created order is, +literally, the fabric of functional living. Roofs are order. Clothing is order. +Order puts food on the table. - I find the challenge of creating and maintaining functional systems, - well, kind of fun. It is a creative act. And, it never ends. No system - can last forever, and no system should. Situations change, needs - change, we change. So the things we depend upon to exist well need to - change, too. That means we have to continually look for things to make - and ways to optimize them. That sounds good to me! - __________________________________________________________________ +I find the challenge of creating and maintaining functional systems, well, kind +of fun. It is a creative act. And, it never ends. No system can last forever, +and no system should. Situations change, needs change, we change. So the things +we depend upon to exist well need to change, too. That means we have to +continually look for things to make and ways to optimize them. That sounds good +to me! + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + +Written by [43]Christopher Butler on August 18, 2023, In [44]Essays + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -Written by [44]Christopher Butler on August 18, 2023, In [45]Essays - __________________________________________________________________ Next Entry - [46]The Internet's Greatest Potential It seems that the internet’s - greatest potential is to create intimacy across distance. Which means - we still have a long way to go +[45] The Internet's Greatest Potential It seems that the internet’s greatest +potential is to create intimacy across distance. Which means we still have a +long way to go Previous Entry - [47]The Internet is Already a Social Network Make it easier for anyone - to have a website. Make syndication easier and better. That’s all that - is needed to reclaim the power we’ve ceded to the - __________________________________________________________________ +[46] The Internet is Already a Social Network Make it easier for anyone to have +a website. Make syndication easier and better. That’s all that is needed to +reclaim the power we’ve ceded to the +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -⌨ Keep up via [48]Email or [49]RSS +⌨ Keep up via [47]Email or [48]RSS -✺ [50]Impressum +✺ [49]Impressum © Christopher Butler. All rights reserved -References - 1. https://www.chrbutler.com/feed.rss - 2. https://www.chrbutler.com/ - 3. https://www.chrbutler.com/archives - 4. https://www.chrbutler.com/information - 5. https://www.chrbutler.com/now/2024-01-06 - 6. https://www.lg.com/us/monitors/lg-32un880-b-4k-uhd-led-monitor - 7. https://www.ergotron.com/en-us/products/product-details/45-241#?color=black&attachment option=2-Piece Clamp - 8. https://www.elgato.com/en/key-light - 9. https://www.shure.com/en-US/products/microphones/sm7b?variant=SM7B - 10. https://www.elgato.com/en/wave-mic-arm-lp - 11. https://electronics.sony.com/imaging/interchangeable-lens-cameras/all-interchangeable-lens-cameras/p/ilce7c-b - 12. https://electronics.sony.com/imaging/lenses/all-e-mount/p/sel35f14gm - 13. https://www.amazon.com/dp/B08LV7GZVB?psc=1&ref=ppx_yo2ov_dt_b_product_details - 14. https://audioengine.com/shop/wirelessspeakers/hd3-wireless-speakers/ - 15. https://www.chrbutler.com/2023-04-24 - 16. https://floydhome.com/products/the-floyd-table?variant=36527968321698 - 17. https://www.standupdeskstore.com/sliding-under-desk-pencil-drawer - 18. https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/ - 19. https://www.ikea.com/gb/en/p/kornsjoe-side-table-black-70455412/ - 20. https://www.caldigit.com/thunderbolt-station-4/ - 21. https://www.amazon.com/dp/B0BBZT42HC?ref=ppx_yo2ov_dt_b_product_details&th=1 - 22. https://www.amazon.com/dp/B09QV692XY?ref=ppx_yo2ov_dt_b_product_details&th=1 - 23. https://www.amazon.com/dp/B08ZY48D8M?ref=ppx_yo2ov_dt_b_product_details&th=1 - 24. https://www.lacie.com/products/big/2big/ - 25. https://www.cloudmicrophones.com/cloudlifter-cl-1?gclid=CjwKCAjw_YShBhAiEiwAMomsENVjS7OaiiBgaZkiAqqDGiUd74Ln6BUrZxcpHovOibPqJUAtNN6weBoCzzkQAvD_BwE - 26. https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-2i2 - 27. https://www.minidisc.org/part_Sony_MXD-D40.html - 28. https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/ - 29. https://www.thelibrarystore.com/product/cn66-02050/bookends - 30. https://g.co/kgs/cfKCBZ - 31. https://www.irisusainc.com/products/weathertight-storage-box-30-quart - 32. https://www.etsy.com/listing/120787781/35-extra-deep-4-ft-floating-ledge-for - 33. https://www.lowes.com/pd/Style-Selections-70-5-in-Black-Shelf-Upright/4640257 - 34. https://www.lowes.com/pd/Style-Selections-2-in-Shelf-Bracket/4640145 - 35. https://www.thelibrarystore.com/product/cn66-02050/bookends - 36. https://g.co/kgs/cfKCBZ - 37. https://www.irisusainc.com/products/weathertight-storage-box-30-quart - 38. https://www.craftsman.com/collections/tradestack - 39. https://viesso.com/products/dublexo-black-pin-sofa-bed?variant=42181265522844 - 40. https://www.stillmanandbirn.com/products_epsilon_hardbound.php - 41. https://g.co/kgs/7ot9aS - 42. https://www.post-it.com/3M/en_US/post-it/products/~/Post-it-Super-Sticky-Notes-3-in-x-3-in-Electric-Yellow-12-Pads-Pack-90-Sheets-Pad/?N=4327+3289961157+3294529207&rt=rud - 43. https://www.tops-products.com/oxfordtm-blank-index-cards-white-3-x-5-100-per-pack-4.html - 44. https://www.chrbutler.com/information - 45. https://www.chrbutler.com/tagged/essays - 46. https://www.chrbutler.com/2023-08-21 - 47. https://www.chrbutler.com/2023-07-19 - 48. https://dontthinkaboutthefuture.eo.page/8y4tg - 49. http://chrbutler.com/feed.rss - 50. https://www.chrbutler.com/impressum + +References: + +[1] https://www.chrbutler.com/ +[2] https://www.chrbutler.com/archives +[3] https://www.chrbutler.com/information +[4] https://www.chrbutler.com/now/2024-01-06 +[5] https://www.lg.com/us/monitors/lg-32un880-b-4k-uhd-led-monitor +[6] https://www.ergotron.com/en-us/products/product-details/45-241#?color=black&attachment%20option=2-Piece%20Clamp +[7] https://www.elgato.com/en/key-light +[8] https://www.shure.com/en-US/products/microphones/sm7b?variant=SM7B +[9] https://www.elgato.com/en/wave-mic-arm-lp +[10] https://electronics.sony.com/imaging/interchangeable-lens-cameras/all-interchangeable-lens-cameras/p/ilce7c-b +[11] https://electronics.sony.com/imaging/lenses/all-e-mount/p/sel35f14gm +[12] https://www.amazon.com/dp/B08LV7GZVB?psc=1&ref=ppx_yo2ov_dt_b_product_details +[13] https://audioengine.com/shop/wirelessspeakers/hd3-wireless-speakers/ +[14] https://www.chrbutler.com/2023-04-24 +[15] https://floydhome.com/products/the-floyd-table?variant=36527968321698 +[16] https://www.standupdeskstore.com/sliding-under-desk-pencil-drawer +[17] https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/ +[18] https://www.ikea.com/gb/en/p/kornsjoe-side-table-black-70455412/ +[19] https://www.caldigit.com/thunderbolt-station-4/ +[20] https://www.amazon.com/dp/B0BBZT42HC?ref=ppx_yo2ov_dt_b_product_details&th=1 +[21] https://www.amazon.com/dp/B09QV692XY?ref=ppx_yo2ov_dt_b_product_details&th=1 +[22] https://www.amazon.com/dp/B08ZY48D8M?ref=ppx_yo2ov_dt_b_product_details&th=1 +[23] https://www.lacie.com/products/big/2big/ +[24] https://www.cloudmicrophones.com/cloudlifter-cl-1?gclid=CjwKCAjw_YShBhAiEiwAMomsENVjS7OaiiBgaZkiAqqDGiUd74Ln6BUrZxcpHovOibPqJUAtNN6weBoCzzkQAvD_BwE +[25] https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-2i2 +[26] https://www.minidisc.org/part_Sony_MXD-D40.html +[27] https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/ +[28] https://www.thelibrarystore.com/product/cn66-02050/bookends +[29] https://g.co/kgs/cfKCBZ +[30] https://www.irisusainc.com/products/weathertight-storage-box-30-quart +[31] https://www.etsy.com/listing/120787781/35-extra-deep-4-ft-floating-ledge-for +[32] https://www.lowes.com/pd/Style-Selections-70-5-in-Black-Shelf-Upright/4640257 +[33] https://www.lowes.com/pd/Style-Selections-2-in-Shelf-Bracket/4640145 +[34] https://www.thelibrarystore.com/product/cn66-02050/bookends +[35] https://g.co/kgs/cfKCBZ +[36] https://www.irisusainc.com/products/weathertight-storage-box-30-quart +[37] https://www.craftsman.com/collections/tradestack +[38] https://viesso.com/products/dublexo-black-pin-sofa-bed?variant=42181265522844 +[39] https://www.stillmanandbirn.com/products_epsilon_hardbound.php +[40] https://g.co/kgs/7ot9aS +[41] https://www.post-it.com/3M/en_US/post-it/products/~/Post-it-Super-Sticky-Notes-3-in-x-3-in-Electric-Yellow-12-Pads-Pack-90-Sheets-Pad/?N=4327+3289961157+3294529207&rt=rud +[42] https://www.tops-products.com/oxfordtm-blank-index-cards-white-3-x-5-100-per-pack-4.html +[43] https://www.chrbutler.com/information +[44] https://www.chrbutler.com/tagged/essays +[45] https://www.chrbutler.com/2023-08-21 +[46] https://www.chrbutler.com/2023-07-19 +[47] https://dontthinkaboutthefuture.eo.page/8y4tg +[48] http://chrbutler.com/feed.rss +[49] https://www.chrbutler.com/impressum diff --git a/static/archive/www-danstroot-com-wwjfi6.txt b/static/archive/www-danstroot-com-wwjfi6.txt index 19f9b11..77d6d07 100644 --- a/static/archive/www-danstroot-com-wwjfi6.txt +++ b/static/archive/www-danstroot-com-wwjfi6.txt @@ -1,717 +1,661 @@ - #[1]Blog Posts RSS - - IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-55JC288 - - [3]Dan Stroot - [4]Home[5]About[6]Archive[7]Snippets[8]Uses[9]Quotes - - (BUTTON) Toggle Menu +[1]Dan Stroot +[2]Home[3]About[4]Archive[5]Snippets[6]Uses[7]Quotes +[8] +Toggle Menu Making Software Last Forever - Hero image for Making Software Last Forever - 27 min read - Dan Stroot - Dan Stroot - May 25, 2023 +Hero image for Making Software Last Forever +27 min read +[10] +Dan Stroot +Dan Stroot +May 25, 2023 - How many of us have bought a new home because our prior home was not - quite meeting our needs? Maybe we needed an extra bedroom, or wanted a - bigger backyard? Now, as a thought experiment, assume you couldn't sell - your existing home. If you bought a new home, you'd have to "retire" or - "decommission" your prior home (and your investment in it). Does that - change your thinking? +How many of us have bought a new home because our prior home was not quite +meeting our needs? Maybe we needed an extra bedroom, or wanted a bigger +backyard? Now, as a thought experiment, assume you couldn't sell your existing +home. If you bought a new home, you'd have to "retire" or "decommission" your +prior home (and your investment in it). Does that change your thinking? - Further, imagine you had a team of five people maintaining your prior - home, improving it, and keeping it updated, for the last ten years. - You'd have a cumulative investment of 50 person/years in your existing - home (5 people x 10 years) just in maintenance, on top of the initial - investment. If each person was paid the equivalent of a software - developer (we'll use $200k to include benefits, office space, - leadership, etc.) you'd have an investment just in labor of $10 million - dollars (50 person/years x $200,000). Would you walk away from that - investment? +Further, imagine you had a team of five people maintaining your prior home, +improving it, and keeping it updated, for the last ten years. You'd have a +cumulative investment of 50 person/years in your existing home (5 people x 10 +years) just in maintenance, on top of the initial investment. If each person +was paid the equivalent of a software developer (we'll use $200k to include +benefits, office space, leadership, etc.) you'd have an investment just in +labor of $10 million dollars (50 person/years x $200,000). Would you walk away +from that investment? - When companies decide to re-write or replace an existing software - application, they are making a similar decision. Existing software is - "retired" or "decommissioned" (along with its cumulative investment). - Yet the belief that new code is always better than old is patently - absurd. Old code has weathered and withstood the test of time. It has - been battle-tested. You know it's failure modes. Bugs have been found, - and more importantly, fixed. +When companies decide to re-write or replace an existing software application, +they are making a similar decision. Existing software is "retired" or +"decommissioned" (along with its cumulative investment). Yet the belief that +new code is always better than old is patently absurd. Old code has weathered +and withstood the test of time. It has been battle-tested. You know it's +failure modes. Bugs have been found, and more importantly, fixed. - Joel Spolsky (of Fog Creek Software and Stack Overflow) describes - system re-writes in "[10]Things You Should Never Do, Part I" as “the - single worst strategic mistake that any software company can make.” +Joel Spolsky (of Fog Creek Software and Stack Overflow) describes system +re-writes in "[11]Things You Should Never Do, Part I" as “the single worst +strategic mistake that any software company can make.” - Continuing our home analogy, recent price increases for construction - materials like lumber, drywall, and wiring (and frankly everything - else) should, according to Economics 101, cause us to treat our current - homes more dearly. Similarly, price increases for quality software - engineers should force companies to treat existing software more - dearly. +Continuing our home analogy, recent price increases for construction materials +like lumber, drywall, and wiring (and frankly everything else) should, +according to Economics 101, cause us to treat our current homes more dearly. +Similarly, price increases for quality software engineers should force +companies to treat existing software more dearly. - Lots of current software started out as C software from the 1980s. - Engineers don't often write software with portability as a goal at the - beginning, but once something is relatively portable, it tends to stay - that way. Code that was well designed and written often migrated from - mini-computers to i386, from i386 to amd64, and now ARM and arch64, - with a minimum of redesign or effort. You can take large, complicated - programs from the 1980s written in C, and compile/run them on a modern - Linux computer - even when the modern computer is running architectures - which hadn't even been dreamt of when the software was originally - written. +Lots of current software started out as C software from the 1980s. Engineers +don't often write software with portability as a goal at the beginning, but +once something is relatively portable, it tends to stay that way. Code that was +well designed and written often migrated from mini-computers to i386, from i386 +to amd64, and now ARM and arch64, with a minimum of redesign or effort. You can +take large, complicated programs from the 1980s written in C, and compile/run +them on a modern Linux computer - even when the modern computer is running +architectures which hadn't even been dreamt of when the software was originally +written. - Why can't software last forever? It's not made of wood, concrete, or - steel. It doesn't "wear out", rot, weather, or rust. A working - algorithm is a working algorithm. Technology doesn’t need to be - beautiful, or impress other people, to be effective. Aren't - technologists ultimately in the business of producing cost effective - technology? +Why can't software last forever? It's not made of wood, concrete, or steel. It +doesn't "wear out", rot, weather, or rust. A working algorithm is a working +algorithm. Technology doesn’t need to be beautiful, or impress other people, to +be effective. Aren't technologists ultimately in the business of producing cost +effective technology? - I am going to attempt to convince you that maintaining your existing - systems is one the most cost-effective technology investments you can - make. +I am going to attempt to convince you that maintaining your existing systems is +one the most cost-effective technology investments you can make. The World's Oldest Software Systems - In 1958, the United States Department of Defense launched a new - computer-based contract management system called "Mechanization of - Contract Administration Services", or MOCAS (pronounced “MOH-cass”). In - 2015, [11]MIT Technology Review stated that MOCAS was the oldest - computer program in continuous use they could verify. At that time - MOCAS managed about $1.3 trillion in government obligations and 340,000 - contracts. +In 1958, the United States Department of Defense launched a new computer-based +contract management system called "Mechanization of Contract Administration +Services", or MOCAS (pronounced “MOH-cass”). In 2015, [12]MIT Technology Review +stated that MOCAS was the oldest computer program in continuous use they could +verify. At that time MOCAS managed about $1.3 trillion in government +obligations and 340,000 contracts. - According to the [12]Guinness Book of World Records, the oldest - software system in use today is either the [13]SABRE Airline - Reservation System (introduced in 1960), or the IRS Individual Master - File (IMF) and Business Master File (BMF) systems introduced in - 1962–63. +According to the [13]Guinness Book of World Records, the oldest software system +in use today is either the [14]SABRE Airline Reservation System (introduced in +1960), or the IRS Individual Master File (IMF) and Business Master File (BMF) +systems introduced in 1962–63. - SABRE went online in 1960. It had cost $40 million to develop and - install (about $400 million in 2022 dollars). The system took over all - American Airlines booking functions in 1964, and the system was - expanded to provide access to external travel agents in 1976. +SABRE went online in 1960. It had cost $40 million to develop and install +(about $400 million in 2022 dollars). The system took over all American +Airlines booking functions in 1964, and the system was expanded to provide +access to external travel agents in 1976. - What is the secret to the long lifespan of these systems? Shouldn't - companies with long-lived products (annuities, life insurance, etc.) - study these examples? After all, they need systems to support products - that last most of a human lifespan. However, shouldn't all companies - want to their investments in software to last as long as possible? +What is the secret to the long lifespan of these systems? Shouldn't companies +with long-lived products (annuities, life insurance, etc.) study these +examples? After all, they need systems to support products that last most of a +human lifespan. However, shouldn't all companies want to their investments in +software to last as long as possible? Maintenance is About Making Something Last - We spoke of SABRE above, and we know that airlines recognize the value - of maintenance. Commercial aircraft are inspected at least once every - two days. Engines, hydraulics, environmental, and electrical systems - all have additional maintenance schedules. A "heavy" maintenance - inspection occurs once every few years. This process maintains the - aircraft's service life over decades. +We spoke of SABRE above, and we know that airlines recognize the value of +maintenance. Commercial aircraft are inspected at least once every two days. +Engines, hydraulics, environmental, and electrical systems all have additional +maintenance schedules. A "heavy" maintenance inspection occurs once every few +years. This process maintains the aircraft's service life over decades. - On average, an aircraft is operable for about 30 years before it must - be retired. A Boeing 747 can endure 35,000 pressurization cycles — - roughly 135,000 to 165,000 flight hours — before metal fatigue sets in. - However, most older airframes are retired for fuel-efficiency reasons, - not because they're worn out. +On average, an aircraft is operable for about 30 years before it must be +retired. A Boeing 747 can endure 35,000 pressurization cycles — roughly 135,000 +to 165,000 flight hours — before metal fatigue sets in. However, most older +airframes are retired for fuel-efficiency reasons, not because they're worn +out. - Even stuctures made of grass can last indefinitely. [14]Inca rope - bridges were simple suspension bridges constructed by the Inca Empire. - The bridges were an integral part of the Inca road system were - constructed using ichu grass. +Even stuctures made of grass can last indefinitely. [15]Inca rope bridges were +simple suspension bridges constructed by the Inca Empire. The bridges were an +integral part of the Inca road system were constructed using ichu grass. - Inca Rope Bridge +Inca Rope Bridge - Even though they were made of grass, these bridges were maintained with - such regularity and attention they lasted centuries. The bridge's - strength and reliability came from the fact that each cable was - replaced every June. +Even though they were made of grass, these bridges were maintained with such +regularity and attention they lasted centuries. The bridge's strength and +reliability came from the fact that each cable was replaced every June. - The goal of maintenance is catching problems before they happen. That’s - the difference between maintenance and repair. Repair is about fixing - something that’s already broken. Maintenance is about making something - last. +The goal of maintenance is catching problems before they happen. That’s the +difference between maintenance and repair. Repair is about fixing something +that’s already broken. Maintenance is about making something last. Unfortunately, Maintenance is Chronically Undervalued - Maintenance is one of the easiest things to cut when budgets get tight. - Some legacy software systems have decades of underinvestment in - maintenance. This leads up to the inevitable "we have to replace it" - discussion - which somehow always sounds more persuasive (even though - it’s more expensive and riskier) than arguing to invest in system - rehabilitation and deferred system maintenance. +Maintenance is one of the easiest things to cut when budgets get tight. Some +legacy software systems have decades of underinvestment in maintenance. This +leads up to the inevitable "we have to replace it" discussion - which somehow +always sounds more persuasive (even though it’s more expensive and riskier) +than arguing to invest in system rehabilitation and deferred system +maintenance. - Executives generally can't refuse "repair" work because the system is - broken and must be fixed. However, maintenance is a tougher sell. It’s - not strictly necessary — or at least it doesn’t seem to be until things - start falling apart. It is so easy to divert maintenance budget into a - halo project that gets an executive noticed (and possibly promoted) - before the long-term effects of underinvestment in maintenance become - visible. Even worse, the executive is also admired for reducing the - costs of maintenance and switching costs from "run" to "grow" - while - they are torpedoing the company under the waterline. +Executives generally can't refuse "repair" work because the system is broken +and must be fixed. However, maintenance is a tougher sell. It’s not strictly +necessary — or at least it doesn’t seem to be until things start falling apart. +It is so easy to divert maintenance budget into a halo project that gets an +executive noticed (and possibly promoted) before the long-term effects of +underinvestment in maintenance become visible. Even worse, the executive is +also admired for reducing the costs of maintenance and switching costs from +"run" to "grow" - while they are torpedoing the company under the waterline. - The other challenge is conflating enhancement work with maintenance - work. Imagine you have $1,000 and you want to add a sunroof to your - car, but you also need new tires (which coincidentally also cost - $1,000). You have to replace the tires every so often, but a sunroof is - "forever" right? If you spend the money on the sunroof the tires could - get replaced next month, or maybe the month after - they'll last a - couple more months, won't they? +The other challenge is conflating enhancement work with maintenance work. +Imagine you have $1,000 and you want to add a sunroof to your car, but you also +need new tires (which coincidentally also cost $1,000). You have to replace the +tires every so often, but a sunroof is "forever" right? If you spend the money +on the sunroof the tires could get replaced next month, or maybe the month +after - they'll last a couple more months, won't they? - With software, users can't see "the bald tires" - they only thing they - see, or experience (and value), are new features and capabilities. - Pressure is always present to cut costs and to add new features. The - result is budget always swings away from maintenance work towards - enhancements. +With software, users can't see "the bald tires" - they only thing they see, or +experience (and value), are new features and capabilities. Pressure is always +present to cut costs and to add new features. The result is budget always +swings away from maintenance work towards enhancements. - Finally, maintenance work is typically an operational cost, yet - building a new system, or a significant new feature, can often be - capitalized - making the future costs someone else's problem. +Finally, maintenance work is typically an operational cost, yet building a new +system, or a significant new feature, can often be capitalized - making the +future costs someone else's problem. Risks of Replacing Software Systems - It's usually not the design or the age of a system that causes it to - fail but rather neglect. People fail to maintain software systems - because they are not given the time, incentives, or resources to - maintain them. +It's usually not the design or the age of a system that causes it to fail but +rather neglect. People fail to maintain software systems because they are not +given the time, incentives, or resources to maintain them. - "Most of the systems I work on rescuing are not badly built. They - are badly maintained." - — Marianne Bellotti, Kill it With Fire + "Most of the systems I work on rescuing are not badly built. They are badly + maintained." - Once a system degrades it is an enormous challenge to fund deferred - maintenance (or "technical debt"). No one plans for it, no one wants to - pay for it, and no engineer wants to do it. Initiatives to restore - operational excellence, much the way one would fix up an old house, - tend to have few volunteers among engineering teams. No one gets - noticed doing maintenance. No one ever gets promoted because of - maintenance. + — Marianne Bellotti, Kill it With Fire - It should be clear why engineers prefer to re-write a system rather - than maintain it. They get to "write a new story" rather than edit - someone else's. They will attempt to convince a senior executive to - fund a project to replace a problematic system by describing all the - new features and capabilities that could be added as well as how "bad" - the existing, unmaintained, system has become. Further, they will get - to use modern technology that makes them much more valuable in the - market. +Once a system degrades it is an enormous challenge to fund deferred maintenance +(or "technical debt"). No one plans for it, no one wants to pay for it, and no +engineer wants to do it. Initiatives to restore operational excellence, much +the way one would fix up an old house, tend to have few volunteers among +engineering teams. No one gets noticed doing maintenance. No one ever gets +promoted because of maintenance. - Incentives aside, engineering teams tend to gravitate toward system - rewrites because they incorrectly think of old systems as specs. They - assume that since an old system works, the functional risks have been - eliminated. They can focus on adding more features to the new system or - make changes to the underlying architecture without worry. Either they - do not perceive the ambiguity these changes introduce, or they see such - ambiguity positively, imagining only gains in performance and the - potential for innovation. +It should be clear why engineers prefer to re-write a system rather than +maintain it. They get to "write a new story" rather than edit someone else's. +They will attempt to convince a senior executive to fund a project to replace a +problematic system by describing all the new features and capabilities that +could be added as well as how "bad" the existing, unmaintained, system has +become. Further, they will get to use modern technology that makes them much +more valuable in the market. - Why not authorize that multimillion-dollar replacement if the engineers - convince management the existing system is doomed? Eventually a - "replacement" project will be funded (typically at a much higher - expenditure than rehabilitating the existing system). Even if the - executives are not listening to the engineers, they will be listening - to external consultants telling them they are falling behind. +Incentives aside, engineering teams tend to gravitate toward system rewrites +because they incorrectly think of old systems as specs. They assume that since +an old system works, the functional risks have been eliminated. They can focus +on adding more features to the new system or make changes to the underlying +architecture without worry. Either they do not perceive the ambiguity these +changes introduce, or they see such ambiguity positively, imagining only gains +in performance and the potential for innovation. - What do you do with the old system while you’re building the new one? - Most organizations put the old system on “life support” and give it - only the resources for patches and fixes necessary to keep it running. - This reduces maintenance even further and becomes a self-fulfilling - prophecy that the existing system will eventually fail. +Why not authorize that multimillion-dollar replacement if the engineers +convince management the existing system is doomed? Eventually a "replacement" +project will be funded (typically at a much higher expenditure than +rehabilitating the existing system). Even if the executives are not listening +to the engineers, they will be listening to external consultants telling them +they are falling behind. - Who gets to work on the new system, and who takes on the maintenance - tasks of the old system? If the old system is written in older - technology that the company is actively abandoning, the team - maintaining the old system is essentially sitting around waiting to be - fired. And don’t kid yourself, they know it. If the people maintaining - the old system are not participating in the creation of the new system, - you should expect that they are also looking for new jobs. If they - leave before your new system is operational, you lose both their - expertise and their institutional knowledge. +What do you do with the old system while you’re building the new one? Most +organizations put the old system on “life support” and give it only the +resources for patches and fixes necessary to keep it running. This reduces +maintenance even further and becomes a self-fulfilling prophecy that the +existing system will eventually fail. - If the new project falls behind schedule (and it almost certainly - will), the existing system continues to degrade, and knowledge - continues to walk out the door. If the new project fails and is - subsequently canceled, the gap between the legacy system and - operational excellence has widened significantly in the meantime. +Who gets to work on the new system, and who takes on the maintenance tasks of +the old system? If the old system is written in older technology that the +company is actively abandoning, the team maintaining the old system is +essentially sitting around waiting to be fired. And don’t kid yourself, they +know it. If the people maintaining the old system are not participating in the +creation of the new system, you should expect that they are also looking for +new jobs. If they leave before your new system is operational, you lose both +their expertise and their institutional knowledge. - This explains why executives are loathe to cancel system replacement - projects even when they are obviously years behind schedule and failing - to live up to expectations. Stopping the replacement project seems - impossible because the legacy system is now so degraded that restoring - it to operational excellence seems impossible. Plus, politically - canceling a marquee project can be career suicide for the sponsoring - executive(s). Much better to do "deep dives" and "assessments" on why - the project is failing and soldier on than cancel it. +If the new project falls behind schedule (and it almost certainly will), the +existing system continues to degrade, and knowledge continues to walk out the +door. If the new project fails and is subsequently canceled, the gap between +the legacy system and operational excellence has widened significantly in the +meantime. - The interim state is not pretty. The company now has two systems to - operate, much higher costs and new risks. - * The new system will have high costs, limited functionality, new and - unique errors/issues, and lower volumes (so the "per unit cost" of - the new system will be quite high). - * The older system will still be running most of the business, and - usually all of the complex business, while having lost its best - engineers and subject matter experts. Its maintenance budget will - have been whittled down to nothing to redirect spending to - implement (save?) the new system. This system will be in grave - danger to significant system failure (which proponents of the new - system will use to justify the investment in the new system, not - admitting to a self-fulfilling prophecy). +This explains why executives are loathe to cancel system replacement projects +even when they are obviously years behind schedule and failing to live up to +expectations. Stopping the replacement project seems impossible because the +legacy system is now so degraded that restoring it to operational excellence +seems impossible. Plus, politically canceling a marquee project can be career +suicide for the sponsoring executive(s). Much better to do "deep dives" and +"assessments" on why the project is failing and soldier on than cancel it. - Neither system will exhibit operational excellence, and both put the - organization at significant risk in addition to the higher costs and - complexity of running two systems. +The interim state is not pretty. The company now has two systems to operate, +much higher costs and new risks. + + • The new system will have high costs, limited functionality, new and unique + errors/issues, and lower volumes (so the "per unit cost" of the new system + will be quite high). + • The older system will still be running most of the business, and usually + all of the complex business, while having lost its best engineers and + subject matter experts. Its maintenance budget will have been whittled down + to nothing to redirect spending to implement (save?) the new system. This + system will be in grave danger to significant system failure (which + proponents of the new system will use to justify the investment in the new + system, not admitting to a self-fulfilling prophecy). + +Neither system will exhibit operational excellence, and both put the +organization at significant risk in addition to the higher costs and complexity +of running two systems. Maintaining Software to Last Forever - As I discussed in [15]How Software Learns, software adapts over time - - as it is continually refined and reshaped by maintenance and - enhancements. Maintenance is crucial to software's lifespan and - business relevance/value. When software systems are first developed, - they are based on a prediction of the future - a prediction of the - future that we know is wrong even as we make it. No set of requirements - have ever been perfect. However, all new systems become "less wrong" as - time, experience, and knowledge are continually added (e.g., - maintenance). +As I discussed in [16]How Software Learns, software adapts over time - as it is +continually refined and reshaped by maintenance and enhancements. Maintenance +is crucial to software's lifespan and business relevance/value. When software +systems are first developed, they are based on a prediction of the future - a +prediction of the future that we know is wrong even as we make it. No set of +requirements have ever been perfect. However, all new systems become "less +wrong" as time, experience, and knowledge are continually added (e.g., +maintenance). - Futureproofing means constantly rethinking and iterating on the - existing system. We know from both research and experience that - iterating and maintaining existing solutions is a much more likely, and - less expensive, way to improve software's lifespan and functionality. +Futureproofing means constantly rethinking and iterating on the existing +system. We know from both research and experience that iterating and +maintaining existing solutions is a much more likely, and less expensive, way +to improve software's lifespan and functionality. - Before choosing to replace a system that needs deferred maintenance - remember it’s the lack of maintenance that create the impression that - failure is inevitable, and pushes otherwise rational engineers and - executives toward rewrites or replacements. What mechanisms will - prevent lack of maintenance from eventually dooming the brand-new - system? Has the true root problem been addressed? +Before choosing to replace a system that needs deferred maintenance remember +it’s the lack of maintenance that create the impression that failure is +inevitable, and pushes otherwise rational engineers and executives toward +rewrites or replacements. What mechanisms will prevent lack of maintenance from +eventually dooming the brand-new system? Has the true root problem been +addressed? - Robust maintenance practices could preserve software for decades, but - first maintenance must be valued, funded, and applied. To maintain - software properly we have to consider: - 1. How do you measure the overall health of a system? - 2. How do you define and manage maintenance work? - 3. How do you define a reasonable maintenance budget? How can you - protect that budget? - 4. How do you motivate engineers to perform maintenance? +Robust maintenance practices could preserve software for decades, but first +maintenance must be valued, funded, and applied. To maintain software properly +we have to consider: + + 1. How do you measure the overall health of a system? + 2. How do you define and manage maintenance work? + 3. How do you define a reasonable maintenance budget? How can you protect that + budget? + 4. How do you motivate engineers to perform maintenance? 1. How do you measure the overall health of a system? Objective measures - 1. Maintenance Backlog — If you added up all the open work requests, - including work the software engineers deem necessary to eliminate - technical debt, what is the total amount of effort? Now, divide - that by the team capacity. For example, imagine you have a total - amount of work of 560 days, and you have one person assigned to - support the system - they work approximately 200 days annually. The - backlog in days in 560, but in time it is 2.8 years (560 days / 200 - days/year = 2.8 years). What is a reasonable amount of backlog - time? - 2. System Reliability/Downtime — If you added up all the time the - system is down in a given period, what is the total amount? What is - the user or customer impact of that downtime? Conversely, what - would reducing that downtime be worth? What is the relationship of - maintenance and downtime? In other words, does the system need to - be taken down to maintain it (planned maintenance)? Does planned - maintenance reduce unplanned downtime? - 3. Capacity/Performance Constraints — Is the existing hitting capacity - constraints that will prevent future growth of the business? How - unpredictable are the system capacity demands? What is the customer - experience when the system capacity is breached? What is - relationship between hardware and software that constrains the - system? Is the software performant? Can hardware solve the problem? + 1. Maintenance Backlog — If you added up all the open work requests, including + work the software engineers deem necessary to eliminate technical debt, + what is the total amount of effort? Now, divide that by the team capacity. + For example, imagine you have a total amount of work of 560 days, and you + have one person assigned to support the system - they work approximately + 200 days annually. The backlog in days in 560, but in time it is 2.8 years + (560 days / 200 days/year = 2.8 years). What is a reasonable amount of + backlog time? + + 2. System Reliability/Downtime — If you added up all the time the system is + down in a given period, what is the total amount? What is the user or + customer impact of that downtime? Conversely, what would reducing that + downtime be worth? What is the relationship of maintenance and downtime? In + other words, does the system need to be taken down to maintain it (planned + maintenance)? Does planned maintenance reduce unplanned downtime? + + 3. Capacity/Performance Constraints — Is the existing hitting capacity + constraints that will prevent future growth of the business? How + unpredictable are the system capacity demands? What is the customer + experience when the system capacity is breached? What is relationship + between hardware and software that constrains the system? Is the software + performant? Can hardware solve the problem? Subjective measures - 1. User Satisfaction: User satisfaction includes both how happy your - employees are with the applications and/or how well those - applications meet your customer's needs. Many times I have found - the technology team and the business users arguing over "bug" vs. - "enhancement". It is a way of assigning blame. "Bug" means its - engineering's fault, "enhancement" means it was a missed - requirement. When emotions run hot it means that the maintenance - budget is insufficient. I always tell everyone they are both just - maintenance and the only important decision is which to prioritize - and fix first. - 2. “Shadow IT” — If you used applications in the past that didn’t meet - employees’ needs, and didn’t have a good governance plan to address - problems, you may have noticed employees found other solutions on - their own. This is an indication of underfunded maintenance. - 3. Adaptable Architecture — "The cloud", API-based integration, and - unlocking your data are no longer “nice to haves.” Your - architecture needs to adapt. If these are challenges, then the - architecture must be addressed. - 4. Governance — Healthy application architecture isn’t just about - technology—it’s also about having well-documented and - well-understood governance documents that guide technology - investments for your organization. Good governance helps create - adaptable architecture and avoid “shadow IT” applications. + 1. User Satisfaction: User satisfaction includes both how happy your employees + are with the applications and/or how well those applications meet your + customer's needs. Many times I have found the technology team and the + business users arguing over "bug" vs. "enhancement". It is a way of + assigning blame. "Bug" means its engineering's fault, "enhancement" means + it was a missed requirement. When emotions run hot it means that the + maintenance budget is insufficient. I always tell everyone they are both + just maintenance and the only important decision is which to prioritize and + fix first. + + 2. “Shadow IT” — If you used applications in the past that didn’t meet + employees’ needs, and didn’t have a good governance plan to address + problems, you may have noticed employees found other solutions on their + own. This is an indication of underfunded maintenance. + + 3. Adaptable Architecture — "The cloud", API-based integration, and unlocking + your data are no longer “nice to haves.” Your architecture needs to adapt. + If these are challenges, then the architecture must be addressed. + + 4. Governance — Healthy application architecture isn’t just about + technology—it’s also about having well-documented and well-understood + governance documents that guide technology investments for your + organization. Good governance helps create adaptable architecture and avoid + “shadow IT” applications. 2. How do you define maintenance work? - There are four general types of software maintenance. The first two - types take up the majority of most organizations' maintenance budget, - and may not even be considered maintenance - however, all four types - must be funded adequately for software to remain healthy. If you can't - fully address types three and four your maintenance budget is - inadequate. +There are four general types of software maintenance. The first two types take +up the majority of most organizations' maintenance budget, and may not even be +considered maintenance - however, all four types must be funded adequately for +software to remain healthy. If you can't fully address types three and four +your maintenance budget is inadequate. 1. Corrective Software Maintenance (more accurately called "repair") - Corrective software maintenance is necessary when something goes wrong - in a piece of software including faults and errors. These can have a - widespread impact on the functionality of the software in general and - therefore must be addressed as quickly as possible. However, it is - important to consider repair work separate from the other types of - maintenance because repair work must get done. Note: this is generally - the only type of work that happens when a system is put on "life - support". +Corrective software maintenance is necessary when something goes wrong in a +piece of software including faults and errors. These can have a widespread +impact on the functionality of the software in general and therefore must be +addressed as quickly as possible. However, it is important to consider repair +work separate from the other types of maintenance because repair work must get +done. Note: this is generally the only type of work that happens when a system +is put on "life support". 2. Perfective Software Maintenance (more accurately called "enhancements") - Once software is released and is being used new issues and ideas come - to the surface. Users will think up new features or requirements that - they would like to see. Perfective software maintenance aims to adjust - software by adding new features as necessary (and removing features - that are irrelevant or not effective). This process keeps software - relevant as the market, and user needs, evolve. It there is funding - beyond "life support" it usually is spent here. +Once software is released and is being used new issues and ideas come to the +surface. Users will think up new features or requirements that they would like +to see. Perfective software maintenance aims to adjust software by adding new +features as necessary (and removing features that are irrelevant or not +effective). This process keeps software relevant as the market, and user needs, +evolve. It there is funding beyond "life support" it usually is spent here. 3. Preventative Software Maintenance (true maintenance is catching problems before they happen.) - Preventative software maintenance is looking into the future so that - your software can keep working as desired for as long as possible. This - includes making necessary changes, upgrades, and adaptations. - Preventative software maintenance may address small issues which at the - given time may lack significance but may turn into larger problems in - the future. These are called latent faults which need to be detected - and corrected to make sure that they won’t turn into effective faults. - This type of maintenance is generally underfunded. +Preventative software maintenance is looking into the future so that your +software can keep working as desired for as long as possible. This includes +making necessary changes, upgrades, and adaptations. Preventative software +maintenance may address small issues which at the given time may lack +significance but may turn into larger problems in the future. These are called +latent faults which need to be detected and corrected to make sure that they +won’t turn into effective faults. This type of maintenance is generally +underfunded. 4. Adaptive Software Maintenance (true maintenance adapts to changes) - Adaptive software maintenance is responding to the changing technology - landscape, as well as new company policies and rules regarding your - software. These include operating system changes, using cloud - technology, security policies, hardware changes, etc. When these - changes are performed, your software (and possibly architecture) must - adapt to properly meet new requirements and meet current security and - other policies. +Adaptive software maintenance is responding to the changing technology +landscape, as well as new company policies and rules regarding your software. +These include operating system changes, using cloud technology, security +policies, hardware changes, etc. When these changes are performed, your +software (and possibly architecture) must adapt to properly meet new +requirements and meet current security and other policies. -3. How do you define a reasonable maintenance budget? How can you protect -that budget? +3. How do you define a reasonable maintenance budget? How can you protect that +budget? - In the case of the Inca rope bridges what was the cost of maintenance - annually? Let's assume some of the build work was site preparation and - building the stone anchors on each side, but most of the work was - constructing the bridge itself. Since the bridge was entirely replaced - each year, the maintenance costs could be as much as 80% of the initial - build effort, every year. +In the case of the Inca rope bridges what was the cost of maintenance annually? +Let's assume some of the build work was site preparation and building the stone +anchors on each side, but most of the work was constructing the bridge itself. +Since the bridge was entirely replaced each year, the maintenance costs could +be as much as 80% of the initial build effort, every year. - Comparing to "software as a service" (SaaS) vendors is difficult - because they have shifted to a subscription model that bundles - infrastructure, enhancements, and ongoing maintenance. Prior to SaaS - subscription-based pricing one would typically buy a perpetual license - plus maintenance at ~20-30% annual cost of the license to obtain - support and updates. +Comparing to "software as a service" (SaaS) vendors is difficult because they +have shifted to a subscription model that bundles infrastructure, enhancements, +and ongoing maintenance. Prior to SaaS subscription-based pricing one would +typically buy a perpetual license plus maintenance at ~20-30% annual cost of +the license to obtain support and updates. - Side note: Now that the SaaS annual costs are commingled, some - enterprises fall into the trap that “building it is cheaper because we - pay up front but then it will cost less in the long run” assuming the - "long run" almost always underprices infrastructure and assumes near - zero maintenance cost. In the case of a brand-new, internally designed - and developed software system - one that is well architected, well - designed, well built, and meets all reliability, scalability, and - performance needs (i.e., fantasy software) it's conceivable that there - is no maintenance necessary for some period of time - but very - unlikely. +Side note: Now that the SaaS annual costs are commingled, some enterprises fall +into the trap that “building it is cheaper because we pay up front but then it +will cost less in the long run” assuming the "long run" almost always +underprices infrastructure and assumes near zero maintenance cost. In the case +of a brand-new, internally designed and developed software system - one that is +well architected, well designed, well built, and meets all reliability, +scalability, and performance needs (i.e., fantasy software) it's conceivable +that there is no maintenance necessary for some period of time - but very +unlikely. - So, maintenance costs can have a very wide range. A general rule of - thumb is 20-30% of the initial build cost will be required for ongoing - maintenance work annually. However, maintenance costs usually start off - lower and increase over time. They are also unpredictable costs that - are hard to budget. +So, maintenance costs can have a very wide range. A general rule of thumb is +20-30% of the initial build cost will be required for ongoing maintenance work +annually. However, maintenance costs usually start off lower and increase over +time. They are also unpredictable costs that are hard to budget. - The challenges should be obvious. First, budgets in large organizations - tend be last year's budget plus 2-3%. If you start with a maintenance - budget of zero on a new system, how do you ever get to the point of a - healthy maintenance budget in the future? Second, maintenance costs are - unpredictable, and organizations hate unpredictable costs. It's - impossible to say when the next new hardware, or storage, or - programming construct will occur, or when the existing system will hit - a performance or scalability inflection point. +The challenges should be obvious. First, budgets in large organizations tend be +last year's budget plus 2-3%. If you start with a maintenance budget of zero on +a new system, how do you ever get to the point of a healthy maintenance budget +in the future? Second, maintenance costs are unpredictable, and organizations +hate unpredictable costs. It's impossible to say when the next new hardware, or +storage, or programming construct will occur, or when the existing system will +hit a performance or scalability inflection point. - This is like buying a brand-new car. The maintenance costs are - negligible in the first couple years, until they start to creep up. - Then things start to need maintenance, replacement, or repair. As the - car ages the maintenance costs continue to increase until at some point - it makes economic sense to buy another new car. Except none of us wait - that long. Most of us buy new cars before our old one is completely - worn out. As a counter-example, in Cuba some cars have been maintained - meticulously for 30-40 years and run better than new. +This is like buying a brand-new car. The maintenance costs are negligible in +the first couple years, until they start to creep up. Then things start to need +maintenance, replacement, or repair. As the car ages the maintenance costs +continue to increase until at some point it makes economic sense to buy another +new car. Except none of us wait that long. Most of us buy new cars before our +old one is completely worn out. As a counter-example, in Cuba some cars have +been maintained meticulously for 30-40 years and run better than new. Protecting your maintenance budget - creating a "maintenance fund" - We know that maintenance cost increase over time, and the costs of - proper maintenance are unpredictable. In addition, there is some amount - of management discretion that can be applied. When your house needs a - new roof it's reasonable to defer it through summer, but it probably - needs to be done before winter. +We know that maintenance cost increase over time, and the costs of proper +maintenance are unpredictable. In addition, there is some amount of management +discretion that can be applied. When your house needs a new roof it's +reasonable to defer it through summer, but it probably needs to be done before +winter. - Since business require predictability of costs, unpredictable - maintenance costs are easy to defer. "We didn't budget for that; we'll - have to put it in next year's budget." Except of course in the budget - process it will compete with other projects and enhancement work, where - it's again likely to be deprioritized. +Since business require predictability of costs, unpredictable maintenance costs +are easy to defer. "We didn't budget for that; we'll have to put it in next +year's budget." Except of course in the budget process it will compete with +other projects and enhancement work, where it's again likely to be +deprioritized. - What's the solution? Could it be possible to create some type of - maintenance fund where a predictable amount is budgeted each year, and - then spent "unpredictably" when/as needed? Could this also be a - solution to preventing executives from diverting maintenance budget - into pet projects by protecting this maintenance fund in some fashion? +What's the solution? Could it be possible to create some type of maintenance +fund where a predictable amount is budgeted each year, and then spent +"unpredictably" when/as needed? Could this also be a solution to preventing +executives from diverting maintenance budget into pet projects by protecting +this maintenance fund in some fashion? 4. How do you motivate software engineers to perform maintenance? - There is a Chinese proverb about a discussion between a king and a - famous doctor. The well-known doctor explains to the king that his - brother (who is also a doctor) is superior at medicine, but he is - unknown because he always successfully treats small illnesses, - preventing them from evolving into more serious or terminal ones. So, - people say "Oh he is a fine doctor, but he only treats minor - illnesses". It's true: [16]Nobody Ever Gets Credit for Fixing Problems - that Never Happened. +There is a Chinese proverb about a discussion between a king and a famous +doctor. The well-known doctor explains to the king that his brother (who is +also a doctor) is superior at medicine, but he is unknown because he always +successfully treats small illnesses, preventing them from evolving into more +serious or terminal ones. So, people say "Oh he is a fine doctor, but he only +treats minor illnesses". It's true: [17]Nobody Ever Gets Credit for Fixing +Problems that Never Happened. - To most software engineers, legacy systems seem like torturous dead-end - work, but the reality is systems that are not important get turned off. - Working on "estate" systems means working on some of the most critical - systems that exist — computers that govern millions of people’s lives - in enumerable ways. This is not the work of technical janitors, but - battlefield surgeons. +To most software engineers, legacy systems seem like torturous dead-end work, +but the reality is systems that are not important get turned off. Working on +"estate" systems means working on some of the most critical systems that exist +— computers that govern millions of people’s lives in enumerable ways. This is +not the work of technical janitors, but battlefield surgeons. - Engineering loves new technology. It gains the engineers attention and - industry marketability. [17]Boring technology on the other hand is - great for the company. The engineering cost is lower, and the skills - are easier to obtain and keep, because these engineers are not being - pulled out of your organization for double their salary by Amazon or - Google. +Engineering loves new technology. It gains the engineers attention and industry +marketability. [18]Boring technology on the other hand is great for the company +. The engineering cost is lower, and the skills are easier to obtain and keep, +because these engineers are not being pulled out of your organization for +double their salary by Amazon or Google. - Well-designed, high-functioning software that is easy to understand - usually blends in. Simple solutions do not do much to enhance one’s - personal brand. Therefore, when an organization provides limited - pathways to promotion for software engineers, they tend to make - technical decisions that emphasize their individual contribution and - technical prowess. You have to be very careful to reward what you want - from your engineering team. +Well-designed, high-functioning software that is easy to understand usually +blends in. Simple solutions do not do much to enhance one’s personal brand. +Therefore, when an organization provides limited pathways to promotion for +software engineers, they tend to make technical decisions that emphasize their +individual contribution and technical prowess. You have to be very careful to +reward what you want from your engineering team. - What earns them the acknowledgment of their peers? What gets people - seen is what they will ultimately prioritize, even if those behaviors - are in open conflict with the official direction they receive from - management. In most organizations shipping new code gets attention, - while technical debt accrues silently in the background. +What earns them the acknowledgment of their peers? What gets people seen is +what they will ultimately prioritize, even if those behaviors are in open +conflict with the official direction they receive from management. In most +organizations shipping new code gets attention, while technical debt accrues +silently in the background. - The specific form of acknowledgment also matters a lot. Positive - reinforcement in the form of social recognition tends to be a more - effective motivator than the traditional incentive structure of - promotions, raises, and bonuses. Behavioral economist Dan Ariely - attributes this to the difference between social markets and - traditional monetary-based markets. Social markets are governed by - social norms (read: peer pressure and social capital), and they often - inspire people to work harder and longer than much more expensive - incentives that represent the traditional work-for-pay exchange. In - other words, people will work really hard for positive reinforcement - from their peers. +The specific form of acknowledgment also matters a lot. Positive reinforcement +in the form of social recognition tends to be a more effective motivator than +the traditional incentive structure of promotions, raises, and bonuses. +Behavioral economist Dan Ariely attributes this to the difference between +social markets and traditional monetary-based markets. Social markets are +governed by social norms (read: peer pressure and social capital), and they +often inspire people to work harder and longer than much more expensive +incentives that represent the traditional work-for-pay exchange. In other +words, people will work really hard for positive reinforcement from their peers +. Legacy System Modernization - Unmaintained software will certainly die at some point. Due to factors - discussed above, software does not always receive the proper amount of - maintenance to remain healthy. Eventually a larger modernization effort - may become necessary to restore a system to operational and functional - excellence. +Unmaintained software will certainly die at some point. Due to factors +discussed above, software does not always receive the proper amount of +maintenance to remain healthy. Eventually a larger modernization effort may +become necessary to restore a system to operational and functional excellence. - Legacy modernization projects start off feeling easy. The organization - once had a reliable working system and kept it running for years. All - the modernizing team should need to do is simply reshape it using - better technology, better architecture, the benefit of hindsight, and - improved tooling. It should be simple. But, because people do not see - the hidden technical challenges they are about to uncover, they also - assume the work will be boring. There’s little glory to be had - re-implementing a solved problem. +Legacy modernization projects start off feeling easy. The organization once had +a reliable working system and kept it running for years. All the modernizing +team should need to do is simply reshape it using better technology, better +architecture, the benefit of hindsight, and improved tooling. It should be +simple. But, because people do not see the hidden technical challenges they are +about to uncover, they also assume the work will be boring. There’s little +glory to be had re-implementing a solved problem. - Modernization projects are also typically the ones organizations just - want to get out of the way, so they launch into them unprepared for the - time and resource commitments they require. Modernization projects take - months, if not years of work. Keeping a team of engineers focused, - inspired, and motivated from beginning to end is difficult. Keeping - their senior leadership prepared to invest in what is, in effect, - something they already have is a huge challenge. Creating momentum and - sustaining it are where most modernization projects fail. +Modernization projects are also typically the ones organizations just want to +get out of the way, so they launch into them unprepared for the time and +resource commitments they require. Modernization projects take months, if not +years of work. Keeping a team of engineers focused, inspired, and motivated +from beginning to end is difficult. Keeping their senior leadership prepared to +invest in what is, in effect, something they already have is a huge challenge. +Creating momentum and sustaining it are where most modernization projects fail. - The hard part about legacy modernization is the "system around the - system". The organization, its communication structures, its politics, - and its incentives are all intertwined with the technical product in - such a way that to improve the product, you must do it by turning the - gears of this other, complex, undocumented system. Pay attention to - politics and culture. Technology is at most only 50% of the legacy - problem, ways of working, organization structure and - leadership/sponsorship are just as important to success. +The hard part about legacy modernization is the "system around the system". The +organization, its communication structures, its politics, and its incentives +are all intertwined with the technical product in such a way that to improve +the product, you must do it by turning the gears of this other, complex, +undocumented system. Pay attention to politics and culture. Technology is at +most only 50% of the legacy problem, ways of working, organization structure +and leadership/sponsorship are just as important to success. - To do this, you need to overcome people’s natural skepticism and get - them to buy in. The important word in the phrase "proof of concept" is - proof. You need to prove to people that success is possible and worth - doing. It can't be just an MVP, because [18]MVPs are dangerous.. A red - flag is raised when companies talk about the phases of their - modernization plans in terms of which technologies they are going to - use rather than what value they will add. +To do this, you need to overcome people’s natural skepticism and get them to +buy in. The important word in the phrase "proof of concept" is proof. You need +to prove to people that success is possible and worth doing. It can't be just +an MVP, because [19]MVPs are dangerous.. A red flag is raised when companies +talk about the phases of their modernization plans in terms of which +technologies they are going to use rather than what value they will add. - For all that people talk about COBOL dying off, it is good at certain - tasks. The problem with most old COBOL systems is that they were - designed at a time when COBOL was the only option. Start by sorting - which parts of the system are in COBOL because COBOL is good at - performing that task, and which parts are in COBOL because there were - no other technologies available. Once you have that mapping, start by - pulling the latter off into separate services that are written and - designed using the technology we would choose for that task today. +For all that people talk about COBOL dying off, it is good at certain tasks. +The problem with most old COBOL systems is that they were designed at a time +when COBOL was the only option. Start by sorting which parts of the system are +in COBOL because COBOL is good at performing that task, and which parts are in +COBOL because there were no other technologies available. Once you have that +mapping, start by pulling the latter off into separate services that are +written and designed using the technology we would choose for that task today. - Going through the exercise of understanding what functionality is fit - for use for specific languages/technologies not only gives engineers a - way to keep building their skillsets but also is an opportunity to pair - with other engineers who have different/complimentary skills. This - exchange also has the benefit of diffusing the understanding of the - system to a broader group of people without needing to solely rely on - documentation (which never exists). +Going through the exercise of understanding what functionality is fit for use +for specific languages/technologies not only gives engineers a way to keep +building their skillsets but also is an opportunity to pair with other +engineers who have different/complimentary skills. This exchange also has the +benefit of diffusing the understanding of the system to a broader group of +people without needing to solely rely on documentation (which never exists). - Counterintuitively, SLAs/SLOs are valuable because they provide a - "failure budget". When organizations stop aiming for perfection and - accept that all systems will occasionally fail, they stop letting their - technology rot for fear of change. In most cases, mean time to recovery - (MTTR) is a more useful statistic to push than reliability. MTTR tracks - how long it takes the organization to recover from failure. Resilience - in engineering is all about recovering stronger from failure. That - means better monitoring, better documentation, and better processes for - restoring services, but you can’t improve any of that if you don’t - occasionally fail. +Counterintuitively, SLAs/SLOs are valuable because they provide a "failure +budget". When organizations stop aiming for perfection and accept that all +systems will occasionally fail, they stop letting their technology rot for fear +of change. In most cases, mean time to recovery (MTTR) is a more useful +statistic to push than reliability. MTTR tracks how long it takes the +organization to recover from failure. Resilience in engineering is all about +recovering stronger from failure. That means better monitoring, better +documentation, and better processes for restoring services, but you can’t +improve any of that if you don’t occasionally fail. - Although a system that constantly breaks, or that breaks in unexpected - ways without warning, will lose its users’ trust, the reverse isn’t - necessarily true. A system that never breaks doesn’t necessarily - inspire high degrees of trust - and its maintenance budget is even - easier to cut. +Although a system that constantly breaks, or that breaks in unexpected ways +without warning, will lose its users’ trust, the reverse isn’t necessarily +true. A system that never breaks doesn’t necessarily inspire high degrees of +trust - and its maintenance budget is even easier to cut. - People take systems that are too reliable for granted. Italian - researchers Cristiano Castelfranchi and Rino Falcone have been - advancing a general model of trust that postulates trust naturally - degrades over time, regardless of whether any action has been taken to - violate that trust. Under Castelfranchi and Falcone’s model, - maintaining trust doesn’t mean establishing a perfect record; it means - continuing to rack up observations of resilience. If a piece of - technology is so reliable it has been completely forgotten, it is not - creating those regular observations. Through no fault of the - technology, the user’s trust in it slowly deteriorates. +People take systems that are too reliable for granted. Italian researchers +Cristiano Castelfranchi and Rino Falcone have been advancing a general model of +trust that postulates trust naturally degrades over time, regardless of whether +any action has been taken to violate that trust. Under Castelfranchi and +Falcone’s model, maintaining trust doesn’t mean establishing a perfect record; +it means continuing to rack up observations of resilience. If a piece of +technology is so reliable it has been completely forgotten, it is not creating +those regular observations. Through no fault of the technology, the user’s +trust in it slowly deteriorates. - When both observability and testing are lacking on your legacy system, - observability comes first. Tests tell you only what shouldn’t fail; - monitoring tells you what is failing. Don’t forget: a perfect record - will always be broken, but resilience is an accomplishment that lasts. - Modern engineering teams use stats like service level objectives, error - budgets, and mean time to recovery to move the emphasis away from - avoiding failure and toward recovering quickly. +When both observability and testing are lacking on your legacy system, +observability comes first. Tests tell you only what shouldn’t fail; monitoring +tells you what is failing. Don’t forget: a perfect record will always be +broken, but resilience is an accomplishment that lasts. Modern engineering +teams use stats like service level objectives, error budgets, and mean time to +recovery to move the emphasis away from avoiding failure and toward recovering +quickly. Summary - Maintenance mostly happens out of sight, mysteriously. If we notice it, - it’s a nuisance. When road crews block off sections of highway to fix - cracks or potholes, we treat it as an obstruction, not a vital and - necessary process. This is especially true in the public sector: it’s - almost impossible to get governmental action on, or voter interest in, - spending on preventive maintenance, yet governments make seemly - unlimited funds available once we have a disaster. We are okay spending - a massive amount of money to fix a problem, but consistently resist - spending a much smaller amount of money to prevent it; as a business - strategy this makes no sense. +Maintenance mostly happens out of sight, mysteriously. If we notice it, it’s a +nuisance. When road crews block off sections of highway to fix cracks or +potholes, we treat it as an obstruction, not a vital and necessary process. +This is especially true in the public sector: it’s almost impossible to get +governmental action on, or voter interest in, spending on preventive +maintenance, yet governments make seemly unlimited funds available once we have +a disaster. We are okay spending a massive amount of money to fix a problem, +but consistently resist spending a much smaller amount of money to prevent it; +as a business strategy this makes no sense. - The [19]Open Mainframe Project estimates that there about 250 billion - lines of COBOL code running today in the world economy, and nearly all - COBOL code contains critical business logic. Companies should maintain - that software and make it last as long as possible. +The [20]Open Mainframe Project estimates that there about 250 billion lines of +COBOL code running today in the world economy, and nearly all COBOL code +contains critical business logic. Companies should maintain that software and +make it last as long as possible. References - * [20]Things You Should Never Do, Part I - * [21]Patterns of Legacy Displacement - * [22]Kill It with Fire: Manage Aging Computer Systems (and Future - Proof Modern Ones) - * [23]Building software to last forever - * [24]The Disappearing Art Of Maintenance - * [25]Inca rope bridge - * [26]How Often Do Commercial Airplanes Need Maintenance? - * [27]Nobody Ever Gets Credit for Fixing Problems that Never Happened - * [28]Boring Technology Club - * [29]Open Mainframe Project 2021 Annual Report - * [30]How Popular is COBOL? - __________________________________________________________________ + • [21]Things You Should Never Do, Part I + • [22]Patterns of Legacy Displacement + • [23]Kill It with Fire: Manage Aging Computer Systems (and Future Proof + Modern Ones) + • [24]Building software to last forever + • [25]The Disappearing Art Of Maintenance + • [26]Inca rope bridge + • [27]How Often Do Commercial Airplanes Need Maintenance? + • [28]Nobody Ever Gets Credit for Fixing Problems that Never Happened + • [29]Boring Technology Club + • [30]Open Mainframe Project 2021 Annual Report + • [31]How Popular is COBOL? - Image Credit: Bill Gates, CEO of Microsoft, holds Windows 1.0 floppy - discs. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - (Photo by Deborah Feingold/Corbis via Getty Images) This was the - release of Windows 1.0. The beginning. Computers evolve. The underlying - hardware, CPU, memory, and storage evolves. The operating system - evolves. Of course, the software we use must evolve as well. +Image Credit: Bill Gates, CEO of Microsoft, holds Windows 1.0 floppy discs. + +(Photo by Deborah Feingold/Corbis via Getty Images) This was the release of +Windows 1.0. The beginning. Computers evolve. The underlying hardware, CPU, +memory, and storage evolves. The operating system evolves. Of course, the +software we use must evolve as well. Sharing is Caring - (BUTTON) (BUTTON) (BUTTON) +[35]Edit this page - [31]Edit this page +Dan Stroot · Blog +I love building things. Made in California. Family man, technologist and Hacker +News aficionado. Eternally curious. +[36]Join me on Twitter.[37]Join me on LinkedIn.[38]Join me on GitHub. +Crafted with ♥️ in California. © 2024, [39]Dan Stroot - Dan Stroot · Blog - I love building things. Made in California. Family man, technologist - and Hacker News aficionado. Eternally curious. - [32]Join me on Twitter.[33]Join me on LinkedIn.[34]Join me on GitHub. - Crafted with ♥️ in California. © 2024, [35]Dan Stroot +References: -References - - Visible links: - 1. https://www.danstroot.com/feed.xml - 2. https://www.googletagmanager.com/ns.html?id=GTM-55JC288 - 3. https://www.danstroot.com/ - 4. https://www.danstroot.com/ - 5. https://www.danstroot.com/about - 6. https://www.danstroot.com/archive - 7. https://www.danstroot.com/snippets - 8. https://www.danstroot.com/uses - 9. https://www.danstroot.com/quotes - 10. https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ - 11. https://www.technologyreview.com/2015/08/06/166822/what-is-the-oldest-computer-program-still-in-use/ - 12. https://www.guinnessworldrecords.com/world-records/636196-oldest-software-system-in-continuous-use - 13. https://en.wikipedia.org/wiki/Sabre_(travel_reservation_system) - 14. https://en.wikipedia.org/wiki/Inca_rope_bridge - 15. https://www.danstroot.com/posts/2022-06-05-how-software-learns - 16. https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf - 17. https://engineering.atspotify.com/2013/02/in-praise-of-boring-technology/ - 18. https://www.danstroot.com/posts/2021-12-27-dangerous-mvps - 19. https://www.openmainframeproject.org/ - 20. https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ - 21. https://martinfowler.com/articles/patterns-legacy-displacement/ - 22. https://www.amazon.com/Kill-Fire-Manage-Computer-Systems/dp/1718501188 - 23. https://herman.bearblog.dev/building-software-to-last-forever/ - 24. https://www.noemamag.com/the-disappearing-art-of-maintenance/ - 25. https://en.wikipedia.org/wiki/Inca_rope_bridge - 26. https://monroeaerospace.com/blog/how-often-do-commercial-airplanes-need-maintenance/#:~:text=Commercial airplanes require frequent maintenance,inspection once every few years. - 27. https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf - 28. https://boringtechnology.club/ - 29. https://www.openmainframeproject.org/wp-content/uploads/sites/11/2022/04/OMP_Annual_Report_2021_040622.pdf - 30. https://news.ycombinator.com/item?id=33999718 - 31. https://github.com/dstroot/blog-next-13/blob/master/content/posts/2023-05-25-making_software_last_forever.mdx - 32. https://twitter.com/danstroot - 33. https://www.linkedin.com/in/danstroot - 34. https://github.com/dstroot/blog-next - 35. https://www.danstroot.com/analytics - - Hidden links: - 37. https://www.danstroot.com/search - 38. https://www.danstroot.com/about +[1] https://www.danstroot.com/ +[2] https://www.danstroot.com/ +[3] https://www.danstroot.com/about +[4] https://www.danstroot.com/archive +[5] https://www.danstroot.com/snippets +[6] https://www.danstroot.com/uses +[7] https://www.danstroot.com/quotes +[8] https://www.danstroot.com/search +[10] https://www.danstroot.com/about +[11] https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ +[12] https://www.technologyreview.com/2015/08/06/166822/what-is-the-oldest-computer-program-still-in-use/ +[13] https://www.guinnessworldrecords.com/world-records/636196-oldest-software-system-in-continuous-use +[14] https://en.wikipedia.org/wiki/Sabre_(travel_reservation_system) +[15] https://en.wikipedia.org/wiki/Inca_rope_bridge +[16] https://www.danstroot.com/posts/2022-06-05-how-software-learns +[17] https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf +[18] https://engineering.atspotify.com/2013/02/in-praise-of-boring-technology/ +[19] https://www.danstroot.com/posts/2021-12-27-dangerous-mvps +[20] https://www.openmainframeproject.org/ +[21] https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ +[22] https://martinfowler.com/articles/patterns-legacy-displacement/ +[23] https://www.amazon.com/Kill-Fire-Manage-Computer-Systems/dp/1718501188 +[24] https://herman.bearblog.dev/building-software-to-last-forever/ +[25] https://www.noemamag.com/the-disappearing-art-of-maintenance/ +[26] https://en.wikipedia.org/wiki/Inca_rope_bridge +[27] https://monroeaerospace.com/blog/how-often-do-commercial-airplanes-need-maintenance/#:~:text=Commercial%20airplanes%20require%20frequent%20maintenance,inspection%20once%20every%20few%20years. +[28] https://web.mit.edu/nelsonr/www/Repenning=Sterman_CMR_su01_.pdf +[29] https://boringtechnology.club/ +[30] https://www.openmainframeproject.org/wp-content/uploads/sites/11/2022/04/OMP_Annual_Report_2021_040622.pdf +[31] https://news.ycombinator.com/item?id=33999718 +[35] https://github.com/dstroot/blog-next-13/blob/master/content/posts/2023-05-25-making_software_last_forever.mdx +[36] https://twitter.com/danstroot +[37] https://www.linkedin.com/in/danstroot +[38] https://github.com/dstroot/blog-next +[39] https://www.danstroot.com/analytics diff --git a/static/archive/www-gearpatrol-com-6mp4nk.txt b/static/archive/www-gearpatrol-com-6mp4nk.txt index 8a56a79..cf0abaf 100644 --- a/static/archive/www-gearpatrol-com-6mp4nk.txt +++ b/static/archive/www-gearpatrol-com-6mp4nk.txt @@ -1,568 +1,587 @@ - #[1]home +[1] Search +[2] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - [2]Search - __________________________________________________________________ + • [3]Today in Gear + • [4]Deals + • [5]Holiday Gift Ideas + • [6]Gear Awards + □ [7]The 2023 Style Awards + □ [8]The 2023 Tech Awards + □ [9]The 2023 Home Awards + □ [10]The 2023 Outdoor Awards + □ [11]The 2023 Fitness Awards + □ [12]The 2023 Cannabis Awards + • [13]Buying Guides + □ [14]Watch Buying Guides + □ [15]Drink Buying Guides + □ [16]Home Buying Guides + □ [17]Tech Buying Guides + □ [18]Car and Motorcycle Guides + □ [19]Fitness Buying Guides + □ [20]Style and Grooming Guides + □ [21]Outdoor Buying Guides + • [22]Reviews + □ [23]Deep Dive + □ [24]Kind of Obsessed + □ [25]Head to Head + • [26]How-Tos and Explainers + □ [27]Counterpoint + □ [28]Further Details + □ [29]Product Support + • [30]Watches + □ [31]Watches You Should Know + □ [32]Dive Watches + □ [33]Dress Watches + □ [34]Vintage Watches + □ [35]Tool Watches + □ [36]Watch Accessories + • [37]Motoring + □ [38]Motorcycles + □ [39]Classic Cars + □ [40]SUVs and Trucks + □ [41]Adventure Vehicles + □ [42]Electric Vehicles + • [43]Food and Drink + □ [44]Whiskey + □ [45]Cocktails + □ [46]Beer + □ [47]Coffee + • [48]Home + □ [49]Kitchenware + □ [50]Office + □ [51]Weed + • [52]Style + □ [53]Grooming + □ [54]Style Spotting + □ [55]Bags and Luggage + □ [56]Style Accessories + • [57]Tech + □ [58]Audio + □ [59]Computers and Laptops + □ [60]Cameras and Photography + □ [61]Televisions + □ [62]Smartphones + • [63]Outdoors + □ [64]Knives and Multitools + □ [65]Camping + □ [66]Hiking and Climbing + □ [67]Skiing and Snowboarding + • [68]Fitness + □ [69]Wellness + □ [70]Training and Recovery + □ [71]Running + □ [72]Cycling + • [73]Follow + □ [74]Instagram + □ [75]Facebook + □ [76]Twitter + □ [77]YouTube + □ [78]Flipboard + • [79]Newsletter + • [80]Gear Patrol Magazine + • [81]Gear Patrol Studios + • [82]Videos + • [83]Library of Pursuits + • [84]About Gear Patrol + • [85]Advertise with Us - * [3]Today in Gear - * [4]Deals - * [5]Holiday Gift Ideas - * [6]Gear Awards - + [7]The 2023 Style Awards - + [8]The 2023 Tech Awards - + [9]The 2023 Home Awards - + [10]The 2023 Outdoor Awards - + [11]The 2023 Fitness Awards - + [12]The 2023 Cannabis Awards - * [13]Buying Guides - + [14]Watch Buying Guides - + [15]Drink Buying Guides - + [16]Home Buying Guides - + [17]Tech Buying Guides - + [18]Car and Motorcycle Guides - + [19]Fitness Buying Guides - + [20]Style and Grooming Guides - + [21]Outdoor Buying Guides - * [22]Reviews - + [23]Deep Dive - + [24]Kind of Obsessed - + [25]Head to Head - * [26]How-Tos and Explainers - + [27]Counterpoint - + [28]Further Details - + [29]Product Support - * [30]Watches - + [31]Watches You Should Know - + [32]Dive Watches - + [33]Dress Watches - + [34]Vintage Watches - + [35]Tool Watches - + [36]Watch Accessories - * [37]Motoring - + [38]Motorcycles - + [39]Classic Cars - + [40]SUVs and Trucks - + [41]Adventure Vehicles - + [42]Electric Vehicles - * [43]Food and Drink - + [44]Whiskey - + [45]Cocktails - + [46]Beer - + [47]Coffee - * [48]Home - + [49]Kitchenware - + [50]Office - + [51]Weed - * [52]Style - + [53]Grooming - + [54]Style Spotting - + [55]Bags and Luggage - + [56]Style Accessories - * [57]Tech - + [58]Audio - + [59]Computers and Laptops - + [60]Cameras and Photography - + [61]Televisions - + [62]Smartphones - * [63]Outdoors - + [64]Knives and Multitools - + [65]Camping - + [66]Hiking and Climbing - + [67]Skiing and Snowboarding - * [68]Fitness - + [69]Wellness - + [70]Training and Recovery - + [71]Running - + [72]Cycling - * [73]Follow - + [74]Instagram - + [75]Facebook - + [76]Twitter - + [77]YouTube - + [78]Flipboard - * [79]Newsletter - * [80]Gear Patrol Magazine - * [81]Gear Patrol Studios - * [82]Videos - * [83]Library of Pursuits - * [84]About Gear Patrol - * [85]Advertise with Us + • [86]Your Privacy Choices - * [86]Your Privacy Choices +[87] Privacy Notice/Notice at Collection [88] Terms of Use +[89] [90] [91] - [87]Privacy Notice/Notice at Collection [88]Terms of Use + • [92]Today in Gear + • [93]Reviews + • [94]Buying Guides + • [95]Deals + • [96]Studios - * [89]Today in Gear - * [90]Reviews - * [91]Buying Guides - * [92]Deals - * [93]Studios +[97] Newsletter +[98] +[99][ ] Type keyword(s) to search - [94]Newsletter +[100] +[yH5BAEAAAA] +Today's Top Stories +1 +Need a New Stove Hood? Shop Hauslane +Presented by +Hauslane +[101] +[yH5BAEAAAA] +2 +Meet the Limited-Edition Dr Pepper® GMT Watch +Presented by +Jack Mason +[102] +[yH5BAEAAAA] +3 +The 2024 Fitness Awards Full List of Winners +[103] +[yH5BAEAAAA] +4 +G-SHOCK's New MUDMASTER Thrives in Extremes +Presented by +G Shock +[104] +[yH5BAEAAAA] +5 +21 Vinyl Records Every Collection Should Have - ____________________ Type keyword(s) to search +Every product is [105]carefully selected by our editors. If you buy from a +link, [106]we may earn a commission. - Today's Top Stories - 1 - Need a New Stove Hood? Shop Hauslane - Presented by - Hauslane - 2 - Meet the Limited-Edition Dr Pepper® GMT Watch - Presented by - Jack Mason - 3 - The 2024 Fitness Awards Full List of Winners - 4 - G-SHOCK's New MUDMASTER Thrives in Extremes - Presented by - G Shock - 5 - 21 Vinyl Records Every Collection Should Have + 1. [107] Tech + 2. [108] Audio + 3. [109] This Four-Track Tape Recorder Made Me Fall In Love With Music All + Over Again - Every product is [95]carefully selected by our editors. If you buy from - a link, [96]we may earn a commission. +This Four-Track Tape Recorder Made Me Fall In Love With Music All Over Again - 1. [97]Tech +The cassette is still cool. - [98]Audio +[yH5BAEAAAA] +By [110]Eric Limer +Updated: Dec 22, 2023 +tascam portastudio 414 mk 2 on a desk +Eric Limer - [99]This Four-Track Tape Recorder Made Me Fall In Love With Music All - Over Again +For the past ten years or so I've been a musical rut, playing the same +half-dozen, half-written songs on guitar once every other blue moon and +listening to the same handful of punk bands I listened to in high school. I’ve +been a musician for most of my life. Between church choirs, garage bands, and a +cappella groups, I’ve been involved in organized (but never professional) +music-making for the better part of several decades. But, after so long +uninspired, I thought that maybe the musical part of my life was mostly behind +me. Until the [111]Tascam Portastudio 414 MKII brought it all flooding back. - This Four-Track Tape Recorder Made Me Fall In Love With Music All Over Again + • [112] [yH5BAEAAAA] + Tascam Portastudio 414 MKII 4-Track Cassette Recorder + [113] $475 AT REVERB.COM + [114]Read More + [115] $475 AT REVERB.COM - The cassette is still cool. +Released at the tail end of the 90s, the Portastudio 414 MKII harkens back to a +time before MacBooks shipped with Garageband. If you wanted to record music +with multiple tracks that could be altered independently, you were looking at +booking studio time or buying something like this lovely big blue beast. And +make no mistake, this chunky boy can deliver if you've got the chops. Bruce +Springsteen's Nebraska, a few early Ween records, and some vintage Weird Al +tunes [116]were all recorded on a Portastudio of one make or another. More +recently, Nine Inch Nails' Alessandro Cortini has been almost single handedly +responsible for making the 414 MKII in particular cool again with [117]his +unorthodox (and extremely sick) use of the device as an instrument in live +performance. - By [100]Eric Limer - Updated: Dec 22, 2023 - - tascam portastudio 414 mk 2 on a desk - Eric Limer - - For the past ten years or so I've been a musical rut, playing the same - half-dozen, half-written songs on guitar once every other blue moon and - listening to the same handful of punk bands I listened to in high - school. I’ve been a musician for most of my life. Between church - choirs, garage bands, and a cappella groups, I’ve been involved in - organized (but never professional) music-making for the better part of - several decades. But, after so long uninspired, I thought that maybe - the musical part of my life was mostly behind me. Until the [101]Tascam - Portastudio 414 MKII brought it all flooding back. - - * Tascam Portastudio 414 MKII 4-Track Cassette Recorder - [102]$475 AT REVERB.COM - [103]Read More - [104]$475 AT REVERB.COM - - Released at the tail end of the 90s, the Portastudio 414 MKII harkens - back to a time before MacBooks shipped with Garageband. If you wanted - to record music with multiple tracks that could be altered - independently, you were looking at booking studio time or buying - something like this lovely big blue beast. And make no mistake, this - chunky boy can deliver if you've got the chops. Bruce Springsteen's - Nebraska, a few early Ween records, and some vintage Weird Al tunes - [105]were all recorded on a Portastudio of one make or another. More - recently, Nine Inch Nails' Alessandro Cortini has been almost single - handedly responsible for making the 414 MKII in particular cool again - with [106]his unorthodox (and extremely sick) use of the device as an - instrument in live performance. - Eric Limer +[118] +Eric Limer Tascam Portastudio 414 MKII 4-Track Cassette Recorder - reverb.com - $475.00 - [107]SHOP NOW +reverb.com +$475.00 +[119] SHOP NOW - The 414 MK II lets you record four independent tracks to a humble - cassette tape, just enough room for bass, guitar, vocals, and drums, - with the ability to add more if you’ve got the nerve to "bounce down" - multiple instruments to the same track, irrevocably intertwining two - rivers of sound to free up a slot for additional recording. It’s - ridiculously limited compared to the "digital audio workstations" you - can get literally for free today. but it does come with one killer - feature that has only truly emerged in the millennium following its - original launch: You don’t have to stare at a fucking screen to use it. - close up of leds - Much like celluloid photographic film, magnetic tape handles peaking - more gracefully than digital mediums. - Eric Limer - a close up of a play button - There’s nothing quite so satisfying is pressing play and feeling the - tape start to move. - Eric Limer +The 414 MK II lets you record four independent tracks to a humble cassette +tape, just enough room for bass, guitar, vocals, and drums, with the ability to +add more if you’ve got the nerve to "bounce down" multiple instruments to the +same track, irrevocably intertwining two rivers of sound to free up a slot for +additional recording. It’s ridiculously limited compared to the "digital audio +workstations" you can get literally for free today. but it does come with one +killer feature that has only truly emerged in the millennium following its +original launch: You don’t have to stare at a fucking screen to use it. - I only ever recorded one (very poorly performed) song with my - Portastudio when my parents gifted it to me back in the mid-aughts, and - for almost twenty years I hadn’t really thought about it at all. But - when an album cover featuring its unmistakable visage cropped up on my - Spotify, it lit a spark in my brain. Mom knew just the closet where it - had spent a decade plus hiding and soon, with a package of fresh - cassette tapes in hand, I was ready to hit record. - a stack of cassette tapes - The Portastudio is designed to use pricey "Type II" cassette tapes for - optimal performance, but cheaper Type 1s work fine (or better, if you - actually want that telltale hiss). - Eric Limer +Much like celluloid photographic film, magnetic tape handles peaking more +gracefully than digital mediums. +Eric Limer +There’s nothing quite so satisfying is pressing play and feeling the tape start +to move. +Eric Limer - The joy of working in an analog medium, as [108]lovers of film - photography can attest, is both the friction and the flavor it brings. - Light leaks can spice up an otherwise average photograph. A little tape - hiss can give your jam that extra flair. The cost, of course, is that - your mistakes get baked all the way in, for better or worse. No undo - buttons here. You have to move slowly and skillfully to find success. - And so my plan to record guitar, bass, and vocals quickly hit a - not-insignificant snag: I am neither a particularly good recording - artist nor a remotely competent audio engineer. +I only ever recorded one (very poorly performed) song with my Portastudio when +my parents gifted it to me back in the mid-aughts, and for almost twenty years +I hadn’t really thought about it at all. But when an album cover featuring its +unmistakable visage cropped up on my Spotify, it lit a spark in my brain. Mom +knew just the closet where it had spent a decade plus hiding and soon, with a +package of fresh cassette tapes in hand, I was ready to hit record. - After a few hours of trying and failing to adequately record the - beat-to-shit [109]Yamaha FG-335II I stole from my dad on my way to - college 16 years ago with a unidirectional dynamic mic not remotely fit - for the task, I tripped and fell into a whole other rabbit hole. What - you really need, the gear gremlin between my ears sweetly whispered, is - a drum machine. Also a synthesizer. +The Portastudio is designed to use pricey "Type II" cassette tapes for optimal +performance, but cheaper Type 1s work fine (or better, if you actually want +that telltale hiss). +Eric Limer - A bit of research and a few impulse buys later, I was finally in - business: +The joy of working in an analog medium, as [120]lovers of film photography can +attest, is both the friction and the flavor it brings. Light leaks can spice up +an otherwise average photograph. A little tape hiss can give your jam that +extra flair. The cost, of course, is that your mistakes get baked all the way +in, for better or worse. No undo buttons here. You have to move slowly and +skillfully to find success. And so my plan to record guitar, bass, and vocals +quickly hit a not-insignificant snag: I am neither a particularly good +recording artist nor a remotely competent audio engineer. - This content is imported from Third party. You may be able to find the - same content in another format, or you may be able to find more - information, at their web site. +After a few hours of trying and failing to adequately record the beat-to-shit +[121]Yamaha FG-335II I stole from my dad on my way to college 16 years ago with +a unidirectional dynamic mic not remotely fit for the task, I tripped and fell +into a whole other rabbit hole. What you really need, the gear gremlin between +my ears sweetly whispered, is a drum machine. Also a synthesizer. + +A bit of research and a few impulse buys later, I was finally in business: + +This content is imported from Third party. You may be able to find the same +content in another format, or you may be able to find more information, at +their web site. Featured in this track: - Korg Volca Keys - Korg Volca Keys - Korg amazon.com - $237.00 - $149.99 (37% off) - [110]SHOP NOW +Korg Volca Keys +Korg Volca Keys +Korg amazon.com +$237.00 +$149.99 (37% off) +[122] SHOP NOW - Arguably the cornerstone of Korg's budget "Volca" line, the Volca Keys - has old-school analog circuitry, basic sequencer functionality and - limited polyphony so you can play chords. It's also optionally - battery-powered and I've spent dozens of hours jamming on it while - sitting on the couch. Oh also it sounds fat as hell. - Korg NTS Digital Synth Kit 1 - Korg NTS Digital Synth Kit 1 - Korg amazon.com - $115.99 - [111]SHOP NOW +Arguably the cornerstone of Korg's budget "Volca" line, the Volca Keys has +old-school analog circuitry, basic sequencer functionality and limited +polyphony so you can play chords. It's also optionally battery-powered and I've +spent dozens of hours jamming on it while sitting on the couch. Oh also it +sounds fat as hell. - You have to assemble this tiny, digital synth yourself, but it packs a - ton of functionality into an itty bitty and affordable package. It - supports [112]a library of community-programmed instrument sounds and - effects and doubles as a capable FX pedal for my other gear thanks to - its passthrough reverb, chorus and modulation effects. - Arturia KeyStep 32-Key Controller - Arturia KeyStep 32-Key Controller - Arturia amazon.com - $149.00 - $129.00 (13% off) - [113]SHOP NOW +Korg NTS Digital Synth Kit 1 +Korg NTS Digital Synth Kit 1 +Korg amazon.com +$115.99 +[123] SHOP NOW - My Korgs all sport touchpad keyboards that are... technically - functional. If you want any sort of precision, an external MIDI - keyboard is essential. Arturia's KeyStep is a go-to choice that sports - some useful features of its own, like a sequencer for recording complex - patterns and an arpeggiator for auto-playing simpler ones. - Korg Volca Sample 2 Korg Volca Sample 2 - Korg guitarcenter.com - $109.99 - [114]SHOP NOW +You have to assemble this tiny, digital synth yourself, but it packs a ton of +functionality into an itty bitty and affordable package. It supports [124]a +library of community-programmed instrument sounds and effects and doubles as a +capable FX pedal for my other gear thanks to its passthrough reverb, chorus and +modulation effects. - It's not a drum machine, but I used it as one because it comes - preloaded with a number of drum recordings (and other sound clips) and - the ability to load your own. It served me well enough, but I'm putting - this one back on the market because I've made it redundant with some - other buys and I've learned that I much prefer synthesis to sampling. +Arturia KeyStep 32-Key Controller +Arturia KeyStep 32-Key Controller +Arturia amazon.com +$149.00 +$129.00 (13% off) +[125] SHOP NOW - Like any amateur analog artifact, this track contains mistakes encased - in amber. The hi-hats are too hot because I didn’t balance the levels - of the individual drums in my sampler before committing the whole drum - track to tape. The bass comes in awkwardly because I was doing dynamics - live to tape with the synth's volume knob instead of using a fader - during mixdown. The solo, well, it is what it is. But the Portastudio - saved my ass, not (only) with tape hiss, but by helping me take a deep - breath and put this song to bed. I won’t waste hours trying to improve - on the raw material with endless tiny tweaks, because I can't. Lessons - (hopefully) learned, on to the next jam! - a piano with a keyboard - Controlled over MIDI by the Arturia KeyStep, the Volca Keys outputs its - audio through the NTS-1 for reverb before heading into track one on the - Portastudio. - Eric Limer +My Korgs all sport touchpad keyboards that are... technically functional. If +you want any sort of precision, an external MIDI keyboard is essential. +Arturia's KeyStep is a go-to choice that sports some useful features of its +own, like a sequencer for recording complex patterns and an arpeggiator for +auto-playing simpler ones. - In the months since that inaugural recording, the road of my obsession - has taken me away from analog, and towards digital devices that can - synthesize and sequence a song’s worth of instruments inside themselves - (still no computer screens allowed). At the moment, I’m in love with my - [115]"Woovebox," a petite-but-powerful one-person labor of love out of - Australia, while I simultaneously lust after [116]the wickedly slick, - murdered-out Dirtywave M8 Tracker, a Gameboy-sized studio in a - handheld. +Korg Volca Sample 2 +Korg Volca Sample 2 +Korg guitarcenter.com +$109.99 +[126] SHOP NOW - If the two of us didn't go so far back, I might consider flipping my - Portastudio on the secondary market, where the prices are currently - sky-high. I could probably get more for it now than my parents - originally paid and finance a big chunk of this or that digital - dalliance. But in a way, I'm glad to be spared the temptation. Because - if there's anything I've learned over the past twenty-something years, - it's that the odds are very high I'll come crawling back to cassette. +It's not a drum machine, but I used it as one because it comes preloaded with a +number of drum recordings (and other sound clips) and the ability to load your +own. It served me well enough, but I'm putting this one back on the market +because I've made it redundant with some other buys and I've learned that I +much prefer synthesis to sampling. - * Tascam Portastudio 414 MKII 4-Track Cassette Recorder - [117]$475 AT REVERB.COM - [118]Read More - [119]$475 AT REVERB.COM +Like any amateur analog artifact, this track contains mistakes encased in +amber. The hi-hats are too hot because I didn’t balance the levels of the +individual drums in my sampler before committing the whole drum track to tape. +The bass comes in awkwardly because I was doing dynamics live to tape with the +synth's volume knob instead of using a fader during mixdown. The solo, well, it +is what it is. But the Portastudio saved my ass, not (only) with tape hiss, but +by helping me take a deep breath and put this song to bed. I won’t waste hours +trying to improve on the raw material with endless tiny tweaks, because I +can't. Lessons (hopefully) learned, on to the next jam! - Related Stories - The Best Vintage Cassette Tape Players - The Comeback of the Classic Cassette - Advertisement - Continue Reading Below +Controlled over MIDI by the Arturia KeyStep, the Volca Keys outputs its audio +through the NTS-1 for reverb before heading into track one on the Portastudio. +Eric Limer - (BUTTON) +In the months since that inaugural recording, the road of my obsession has +taken me away from analog, and towards digital devices that can synthesize and +sequence a song’s worth of instruments inside themselves (still no computer +screens allowed). At the moment, I’m in love with my [127]"Woovebox," a +petite-but-powerful one-person labor of love out of Australia, while I +simultaneously lust after [128]the wickedly slick, murdered-out Dirtywave M8 +Tracker, a Gameboy-sized studio in a handheld. - More From [120]Audio - 21 Vinyl Records Every Collection Should Have - The Best Audio Gadgets Announced at CES 2024 - __________________________________________________________________ +If the two of us didn't go so far back, I might consider flipping my +Portastudio on the secondary market, where the prices are currently sky-high. I +could probably get more for it now than my parents originally paid and finance +a big chunk of this or that digital dalliance. But in a way, I'm glad to be +spared the temptation. Because if there's anything I've learned over the past +twenty-something years, it's that the odds are very high I'll come crawling +back to cassette. - Advertisement - Continue Reading Below - The Best Floorstanding Speakers Under $1,000 - __________________________________________________________________ + • [129] [yH5BAEAAAA] + Tascam Portastudio 414 MKII 4-Track Cassette Recorder + [130] $475 AT REVERB.COM + [131]Read More + [132] $475 AT REVERB.COM - The Argument Against the "Do It All" Speaker - __________________________________________________________________ +Related Stories +[133] +[school-age-boy-holding-an-audio-cass] +The Best Vintage Cassette Tape Players +[134] +[cassette-tape-m2w-16-1-1620826229] +The Comeback of the Classic Cassette +Advertisement - Continue Reading Below +More From [136]Audio +[137] +[yH5BAEAAAA] +21 Vinyl Records Every Collection Should Have +[138] +[yH5BAEAAAA] +The Best Audio Gadgets Announced at CES 2024 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Advertisement - Continue Reading Below +[139] +[yH5BAEAAAA] +The Best Floorstanding Speakers Under $1,000 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[140] +[yH5BAEAAAA] +The Argument Against the "Do It All" Speaker +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[141] +[yH5BAEAAAA] +Why Your Sound System Needs a Wireless Subwoofer +[142] +[yH5BAEAAAA] +The Most Interesting Hi-Fi and Audio Gear of 2023 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[143] +[yH5BAEAAAA] +Apple Might've Solved Your Biggest Soundbar Gripe +[144] +[yH5BAEAAAA] +Our 11 Favorite Headphones We Tested in 2023 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[145] +[yH5BAEAAAA] +The Best Multi-Room Wireless Speakers of 2023 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[146] +[yH5BAEAAAA] +The Argument Against a Wireless Hi-Fi System +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[147] +[148] +[149] +[150] +[151] - Why Your Sound System Needs a Wireless Subwoofer - The Most Interesting Hi-Fi and Audio Gear of 2023 - __________________________________________________________________ - __________________________________________________________________ + • [152]About Us + • [153]Today in Gear + • [154]Deals + • [155]Gift Guides + • [156]DPReview + • [157]Watches + • [158]Motoring + • [159]Style + • [160]Outdoors + • [161]Fitness + • [162]Food and Drink + • [163]Home + • [164]Tech + • [165]Gear Patrol Magazine + • [166]Newsletters + • [167]Gear Patrol Studios + • [168]How We Test Products + • [169]Advertise + • [170]Licensing and Accolades + • [171]RSS - Apple Might've Solved Your Biggest Soundbar Gripe - Our 11 Favorite Headphones We Tested in 2023 - __________________________________________________________________ +Gear Patrol – For Life's Pursuits Gear Patrol participates in various affiliate +marketing programs, which means we may get paid commissions on editorially +chosen products purchased through our links to retailer sites. +©2024 Gear Patrol, LLC. All Rights Reserved. - The Best Multi-Room Wireless Speakers of 2023 - __________________________________________________________________ + • [172]Privacy Notice + • [173]CA Notice at Collection + • [174]Your CA Privacy Rights/Shine the Light + • [175]DAA Industry Opt Out + • [176]Terms Of Use + • [177]Sitemap - The Argument Against a Wireless Hi-Fi System - __________________________________________________________________ - * [121]About Us - * [122]Today in Gear - * [123]Deals - * [124]Gift Guides - * [125]DPReview - * [126]Watches - * [127]Motoring - * [128]Style - * [129]Outdoors - * [130]Fitness - * [131]Food and Drink - * [132]Home - * [133]Tech - * [134]Gear Patrol Magazine - * [135]Newsletters - * [136]Gear Patrol Studios - * [137]How We Test Products - * [138]Advertise - * [139]Licensing and Accolades - * [140]RSS +References: - Gear Patrol – For Life's Pursuits Gear Patrol participates in various - affiliate marketing programs, which means we may get paid commissions - on editorially chosen products purchased through our links to retailer - sites. - ©2024 Gear Patrol, LLC. All Rights Reserved. - * [141]Privacy Notice - * [142]CA Notice at Collection - * [143]Your CA Privacy Rights/Shine the Light - * [144]DAA Industry Opt Out - * [145]Terms Of Use - * [146]Sitemap - - [147]Your Privacy Choices: Opt Out of Sale/Targeted Ads - -References - - Visible links: - 1. https://www.gearpatrol.com/ - 2. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#searchoverlay - 3. https://www.gearpatrol.com/briefings/today-in-gear/ - 4. https://www.gearpatrol.com/deals/a34849668/best-deals/ - 5. https://www.gearpatrol.com/gift-guides/ - 6. https://www.gearpatrol.com/gear-awards/ - 7. https://www.gearpatrol.com/style/a45302846/gear-patrol-style-awards-2023/ - 8. https://www.gearpatrol.com/tech/a45619555/tech-awards-2023/ - 9. https://www.gearpatrol.com/home/a43576931/home-awards-2023/ - 10. https://www.gearpatrol.com/outdoors/a44116782/outdoor-awards-2023/ - 11. https://www.gearpatrol.com/fitness/a42254287/fitness-awards-2023/ - 12. https://www.gearpatrol.com/home/a43496144/cannabis-awards-2023/ - 13. https://www.gearpatrol.com/buying-guides/ - 14. https://www.gearpatrol.com/watch-buying-guides/ - 15. https://www.gearpatrol.com/drink-buying-guides/ - 16. https://www.gearpatrol.com/home-buying-guides/ - 17. https://www.gearpatrol.com/tech-buying-guides/ - 18. https://www.gearpatrol.com/car-motorcycle-buying-guides/ - 19. https://www.gearpatrol.com/fitness-buying-guides/ - 20. https://www.gearpatrol.com/style-buying-guides/ - 21. https://www.gearpatrol.com/outdoor-buying-guides/ - 22. https://www.gearpatrol.com/reviews/ - 23. https://www.gearpatrol.com/deep-dive/ - 24. https://www.gearpatrol.com/kind-of-obsessed/ - 25. https://www.gearpatrol.com/head-to-head-reviews/ - 26. https://www.gearpatrol.com/how-tos-explainers/ - 27. https://www.gearpatrol.com/counterpoint/ - 28. https://www.gearpatrol.com/further-details/ - 29. https://www.gearpatrol.com/product-support/ - 30. https://www.gearpatrol.com/watches/ - 31. https://www.gearpatrol.com/watches-you-should-know/ - 32. https://www.gearpatrol.com/dive-watches/ - 33. https://www.gearpatrol.com/dress-watches/ - 34. https://www.gearpatrol.com/vintage-watches/ - 35. https://www.gearpatrol.com/tool-watches/ - 36. https://www.gearpatrol.com/watch-accessories/ - 37. https://www.gearpatrol.com/cars/ - 38. https://www.gearpatrol.com/cars/motorcycles/ - 39. https://www.gearpatrol.com/classic-cars/ - 40. https://www.gearpatrol.com/suvs-trucks/ - 41. https://www.gearpatrol.com/adventure-vehicles/ - 42. https://www.gearpatrol.com/electric-vehicles/ - 43. https://www.gearpatrol.com/food/ - 44. https://www.gearpatrol.com/whiskey/ - 45. https://www.gearpatrol.com/cocktails/ - 46. https://www.gearpatrol.com/beer/ - 47. https://www.gearpatrol.com/coffee/ - 48. https://www.gearpatrol.com/home/ - 49. https://www.gearpatrol.com/kitchenware/ - 50. https://www.gearpatrol.com/office/ - 51. https://www.gearpatrol.com/weed/ - 52. https://www.gearpatrol.com/style/ - 53. https://www.gearpatrol.com/style/grooming/ - 54. https://www.gearpatrol.com/style-spotting/ - 55. https://www.gearpatrol.com/bags-luggage/ - 56. https://www.gearpatrol.com/style-accessories/ - 57. https://www.gearpatrol.com/tech/ - 58. https://www.gearpatrol.com/tech/audio/ - 59. https://www.gearpatrol.com/computers-laptops/ - 60. https://www.gearpatrol.com/cameras-photography/ - 61. https://www.gearpatrol.com/televisions/ - 62. https://www.gearpatrol.com/smartphones/ - 63. https://www.gearpatrol.com/outdoors/ - 64. https://www.gearpatrol.com/knives-multitools/ - 65. https://www.gearpatrol.com/camping/ - 66. https://www.gearpatrol.com/hiking-climbing/ - 67. https://www.gearpatrol.com/skiing-snowboarding/ - 68. https://www.gearpatrol.com/fitness/ - 69. https://www.gearpatrol.com/fitness/health-wellness/ - 70. https://www.gearpatrol.com/training-recovery/ - 71. https://www.gearpatrol.com/running/ - 72. https://www.gearpatrol.com/biking/ - 73. https://www.gearpatrol.com/about/ - 74. https://www.instagram.com/gearpatrol/ - 75. https://www.facebook.com/gearpatrol - 76. https://twitter.com/gearpatrol - 77. https://www.youtube.com/user/gearpatrol - 78. https://flipboard.com/@GearPatrol - 79. https://email.gearpatrol.com/subscribe - 80. https://www.gearpatrol.com/about/a40849193/about-gear-patrol-magazine/ - 81. https://studios.gearpatrol.com/ - 82. https://www.gearpatrol.com/videos/ - 83. https://email.gearpatrol.com/library-of-pursuits - 84. https://www.gearpatrol.com/about/a2281/about/ - 85. https://studios.gearpatrol.com/contact/ - 86. https://www.gearpatrol.com/about/a42158740/do-not-sell-my-personal-information/ - 87. https://www.hearst.com/-/us-magazines-privacy-notice - 88. https://www.hearst.com/-/us-magazines-terms-of-use - 89. https://www.gearpatrol.com/today-in-gear - 90. https://www.gearpatrol.com/reviews/ - 91. https://www.gearpatrol.com/buying-guides - 92. https://www.gearpatrol.com/deals/a34849668/best-deals/ - 93. https://studios.gearpatrol.com/ - 94. https://email.gearpatrol.com/subscribe - 95. https://www.gearpatrol.com/about/a43276360/how-we-evaluate-products/ - 96. https://www.gearpatrol.com/about/a2281/about/#:~:text=Affiliate Disclosure Statement,price as a referral fee. - 97. https://www.gearpatrol.com/tech/ - 98. https://www.gearpatrol.com/tech/audio/ - 99. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ - 100. https://www.gearpatrol.com/author/225861/eric-limer/ - 101. https://go.redirectingat.com/?id=31959X896062&xs=1&url=https://reverb.com/p/tascam-414-mkii&sref=https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ - 102. https://go.redirectingat.com/?id=31959X896062&url=https://reverb.com/marketplace?product_type=pro-audio&query=TASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 103. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#product-1018365f-aed1-4bbd-86ea-466ab005acb7-anchor - 104. https://go.redirectingat.com/?id=31959X896062&url=https://reverb.com/marketplace?product_type=pro-audio&query=TASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 105. https://mixdownmag.com.au/features/the-10-best-recordings-on-the-iconic-tascam-portastudio/ - 106. https://www.youtube.com/watch?v=11BP4Pe8iYk - 107. https://go.redirectingat.com/?id=31959X896062&url=https://reverb.com/marketplace?product_type=pro-audio&query=TASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 108. https://www.gearpatrol.com/tech/a43946858/formula-1-film-photography-tips/ - 109. https://terrifyingtonetrip.wordpress.com/2013/11/07/guitarsenal-early-80s-yamaha-fg335ii-acoustic/ - 110. https://www.amazon.com/dp/B00CAKSVTU - 111. https://www.amazon.com/dp/B07XH591BH - 112. https://korginc.github.io/logue-sdk/unit-index/ - 113. https://www.amazon.com/dp/B01BPSBU40 - 114. https://go.redirectingat.com/?id=31959X896062&url=https://www.guitarcenter.com/KORG/Volca-Sample-2-Digital-Sample-Sequencer-White-1500000332703.gc - 115. https://www.woovebox.com/ - 116. https://dirtywave.com/ - 117. https://go.redirectingat.com/?id=31959X896062&url=https://reverb.com/marketplace?product_type=pro-audio&query=TASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 118. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#product-1018365f-aed1-4bbd-86ea-466ab005acb7-anchor - 119. https://go.redirectingat.com/?id=31959X896062&url=https://reverb.com/marketplace?product_type=pro-audio&query=TASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 120. https://www.gearpatrol.com/tech/audio/ - 121. https://www.gearpatrol.com/about/a2281/about/ - 122. https://www.gearpatrol.com/briefings/today-in-gear/ - 123. https://www.gearpatrol.com/deals/ - 124. https://www.gearpatrol.com/gift-guides/ - 125. https://www.dpreview.com/ - 126. https://www.gearpatrol.com/watches/ - 127. https://www.gearpatrol.com/cars/ - 128. https://www.gearpatrol.com/style/ - 129. https://www.gearpatrol.com/outdoors/ - 130. https://www.gearpatrol.com/fitness/ - 131. https://www.gearpatrol.com/food/ - 132. https://www.gearpatrol.com/home/ - 133. https://www.gearpatrol.com/tech/ - 134. https://www.gearpatrol.com/about/a40849193/about-gear-patrol-magazine/ - 135. https://email.gearpatrol.com/subscribe - 136. https://studios.gearpatrol.com/ - 137. https://www.gearpatrol.com/about/a43276360/how-we-evaluate-products/ - 138. https://studios.gearpatrol.com/contact/ - 139. https://info.wrightsmedia.com/gearpatrol-licensing-reprints - 140. https://www.gearpatrol.com/rss/all.xml/ - 141. https://www.hearst.com/-/us-magazines-privacy-notice - 142. https://www.hearst.com/-/us-magazines-privacy-notice#_ADDITIONAL_INFO - 143. https://www.hearst.com/-/us-magazines-privacy-notice#_ADDITIONAL_INFO - 144. https://www.hearst.com/-/us-magazines-privacy-notice#_OPT_OUTS - 145. https://www.hearst.com/-/us-magazines-terms-of-use - 146. https://www.gearpatrol.com/sitemap/ - 147. https://www.gearpatrol.com/about/a42158740/do-not-sell-my-personal-information/ - - Hidden links: - 149. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ - 150. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ - 151. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#sidepanel - 152. https://www.gearpatrol.com/ - 153. https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ - 154. https://www.gearpatrol.com/briefings/today-in-gear/a45455318/tig-hauslane/ - 155. https://www.gearpatrol.com/watches/a45446440/meet-the-limited-edition-dr-pepper-gmt-watch/ - 156. https://www.gearpatrol.com/fitness/a46086061/2024-fitness-awards/ - 157. https://www.gearpatrol.com/watches/a45415037/product-compedium-template-1696265870/ - 158. https://www.gearpatrol.com/tech/audio/a44118957/best-vinyl-records-picked-by-experts/ - 159. https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 160. https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 161. https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder - 162. https://www.gearpatrol.com/tech/audio/a41601961/vintage-cassette-player/ - 163. https://www.gearpatrol.com/tech/a36356719/cassette-tape-player-revival/ - 164. https://www.gearpatrol.com/tech/audio/a44118957/best-vinyl-records-picked-by-experts/ - 165. https://www.gearpatrol.com/tech/audio/a46326970/best-audio-ces-2024/ - 166. https://www.gearpatrol.com/tech/audio/a42030769/best-floorstanding-speakers/ - 167. https://www.gearpatrol.com/tech/audio/a46260579/modern-speakers-trend/ - 168. https://www.gearpatrol.com/tech/audio/a46275100/best-wireless-subwoofer/ - 169. https://www.gearpatrol.com/tech/audio/a46168154/best-new-hi-fi-audio-gear-2023/ - 170. https://www.gearpatrol.com/tech/audio/a45908277/apple-tv-volume-control-setting/ - 171. https://www.gearpatrol.com/tech/audio/a46200182/favorite-headphones-2023/ - 172. https://www.gearpatrol.com/tech/audio/a360311/best-wireless-multiroom-speakers/ - 173. https://www.gearpatrol.com/tech/audio/a33809800/hi-fi-wireless-sound-quality-explained/ - 174. https://www.gearpatrol.com/ - 175. https://www.facebook.com/gearpatrol/ - 176. https://twitter.com/gearpatrol - 177. https://www.youtube.com/gearpatrol - 178. https://www.instagram.com/gearpatrol/ +[1] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#searchoverlay +[2] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/# +[3] https://www.gearpatrol.com/briefings/today-in-gear/ +[4] https://www.gearpatrol.com/deals/a34849668/best-deals/ +[5] https://www.gearpatrol.com/gift-guides/ +[6] https://www.gearpatrol.com/gear-awards/ +[7] https://www.gearpatrol.com/style/a45302846/gear-patrol-style-awards-2023/ +[8] https://www.gearpatrol.com/tech/a45619555/tech-awards-2023/ +[9] https://www.gearpatrol.com/home/a43576931/home-awards-2023/ +[10] https://www.gearpatrol.com/outdoors/a44116782/outdoor-awards-2023/ +[11] https://www.gearpatrol.com/fitness/a42254287/fitness-awards-2023/ +[12] https://www.gearpatrol.com/home/a43496144/cannabis-awards-2023/ +[13] https://www.gearpatrol.com/buying-guides/ +[14] https://www.gearpatrol.com/watch-buying-guides/ +[15] https://www.gearpatrol.com/drink-buying-guides/ +[16] https://www.gearpatrol.com/home-buying-guides/ +[17] https://www.gearpatrol.com/tech-buying-guides/ +[18] https://www.gearpatrol.com/car-motorcycle-buying-guides/ +[19] https://www.gearpatrol.com/fitness-buying-guides/ +[20] https://www.gearpatrol.com/style-buying-guides/ +[21] https://www.gearpatrol.com/outdoor-buying-guides/ +[22] https://www.gearpatrol.com/reviews/ +[23] https://www.gearpatrol.com/deep-dive/ +[24] https://www.gearpatrol.com/kind-of-obsessed/ +[25] https://www.gearpatrol.com/head-to-head-reviews/ +[26] https://www.gearpatrol.com/how-tos-explainers/ +[27] https://www.gearpatrol.com/counterpoint/ +[28] https://www.gearpatrol.com/further-details/ +[29] https://www.gearpatrol.com/product-support/ +[30] https://www.gearpatrol.com/watches/ +[31] https://www.gearpatrol.com/watches-you-should-know/ +[32] https://www.gearpatrol.com/dive-watches/ +[33] https://www.gearpatrol.com/dress-watches/ +[34] https://www.gearpatrol.com/vintage-watches/ +[35] https://www.gearpatrol.com/tool-watches/ +[36] https://www.gearpatrol.com/watch-accessories/ +[37] https://www.gearpatrol.com/cars/ +[38] https://www.gearpatrol.com/cars/motorcycles/ +[39] https://www.gearpatrol.com/classic-cars/ +[40] https://www.gearpatrol.com/suvs-trucks/ +[41] https://www.gearpatrol.com/adventure-vehicles/ +[42] https://www.gearpatrol.com/electric-vehicles/ +[43] https://www.gearpatrol.com/food/ +[44] https://www.gearpatrol.com/whiskey/ +[45] https://www.gearpatrol.com/cocktails/ +[46] https://www.gearpatrol.com/beer/ +[47] https://www.gearpatrol.com/coffee/ +[48] https://www.gearpatrol.com/home/ +[49] https://www.gearpatrol.com/kitchenware/ +[50] https://www.gearpatrol.com/office/ +[51] https://www.gearpatrol.com/weed/ +[52] https://www.gearpatrol.com/style/ +[53] https://www.gearpatrol.com/style/grooming/ +[54] https://www.gearpatrol.com/style-spotting/ +[55] https://www.gearpatrol.com/bags-luggage/ +[56] https://www.gearpatrol.com/style-accessories/ +[57] https://www.gearpatrol.com/tech/ +[58] https://www.gearpatrol.com/tech/audio/ +[59] https://www.gearpatrol.com/computers-laptops/ +[60] https://www.gearpatrol.com/cameras-photography/ +[61] https://www.gearpatrol.com/televisions/ +[62] https://www.gearpatrol.com/smartphones/ +[63] https://www.gearpatrol.com/outdoors/ +[64] https://www.gearpatrol.com/knives-multitools/ +[65] https://www.gearpatrol.com/camping/ +[66] https://www.gearpatrol.com/hiking-climbing/ +[67] https://www.gearpatrol.com/skiing-snowboarding/ +[68] https://www.gearpatrol.com/fitness/ +[69] https://www.gearpatrol.com/fitness/health-wellness/ +[70] https://www.gearpatrol.com/training-recovery/ +[71] https://www.gearpatrol.com/running/ +[72] https://www.gearpatrol.com/biking/ +[73] https://www.gearpatrol.com/about/ +[74] https://www.instagram.com/gearpatrol/ +[75] https://www.facebook.com/gearpatrol +[76] https://twitter.com/gearpatrol +[77] https://www.youtube.com/user/gearpatrol +[78] https://flipboard.com/@GearPatrol +[79] https://email.gearpatrol.com/subscribe +[80] https://www.gearpatrol.com/about/a40849193/about-gear-patrol-magazine/ +[81] https://studios.gearpatrol.com/ +[82] https://www.gearpatrol.com/videos/ +[83] https://email.gearpatrol.com/library-of-pursuits +[84] https://www.gearpatrol.com/about/a2281/about/ +[85] https://studios.gearpatrol.com/contact/ +[86] https://www.gearpatrol.com/about/a42158740/do-not-sell-my-personal-information/ +[87] https://www.hearst.com/-/us-magazines-privacy-notice +[88] https://www.hearst.com/-/us-magazines-terms-of-use +[89] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/# +[90] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#sidepanel +[91] https://www.gearpatrol.com/ +[92] https://www.gearpatrol.com/today-in-gear +[93] https://www.gearpatrol.com/reviews/ +[94] https://www.gearpatrol.com/buying-guides +[95] https://www.gearpatrol.com/deals/a34849668/best-deals/ +[96] https://studios.gearpatrol.com/ +[97] https://email.gearpatrol.com/subscribe +[98] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/# +[100] https://www.gearpatrol.com/briefings/today-in-gear/a45455318/tig-hauslane/ +[101] https://www.gearpatrol.com/watches/a45446440/meet-the-limited-edition-dr-pepper-gmt-watch/ +[102] https://www.gearpatrol.com/fitness/a46086061/2024-fitness-awards/ +[103] https://www.gearpatrol.com/watches/a45415037/product-compedium-template-1696265870/ +[104] https://www.gearpatrol.com/tech/audio/a44118957/best-vinyl-records-picked-by-experts/ +[105] https://www.gearpatrol.com/about/a43276360/how-we-evaluate-products/ +[106] https://www.gearpatrol.com/about/a2281/about/#:~:text=Affiliate%20Disclosure%20Statement,price%20as%20a%20referral%20fee. +[107] https://www.gearpatrol.com/tech/ +[108] https://www.gearpatrol.com/tech/audio/ +[109] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/ +[110] https://www.gearpatrol.com/author/225861/eric-limer/ +[111] https://go.redirectingat.com/?id=31959X896062&xs=1&url=https%3A%2F%2Freverb.com%2Fp%2Ftascam-414-mkii&sref=https%3A%2F%2Fwww.gearpatrol.com%2Ftech%2Faudio%2Fa45461959%2Ftascam-portastudio-414-mkii%2F +[112] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[113] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[114] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#product-1018365f-aed1-4bbd-86ea-466ab005acb7-anchor +[115] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[116] https://mixdownmag.com.au/features/the-10-best-recordings-on-the-iconic-tascam-portastudio/ +[117] https://www.youtube.com/watch?v=11BP4Pe8iYk +[118] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[119] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[120] https://www.gearpatrol.com/tech/a43946858/formula-1-film-photography-tips/ +[121] https://terrifyingtonetrip.wordpress.com/2013/11/07/guitarsenal-early-80s-yamaha-fg335ii-acoustic/ +[122] https://www.amazon.com/dp/B00CAKSVTU +[123] https://www.amazon.com/dp/B07XH591BH +[124] https://korginc.github.io/logue-sdk/unit-index/ +[125] https://www.amazon.com/dp/B01BPSBU40 +[126] https://go.redirectingat.com/?id=31959X896062&xs=1&url=https%3A%2F%2Fwww.guitarcenter.com%2FKORG%2FVolca-Sample-2-Digital-Sample-Sequencer-White-1500000332703.gc&sref=https%3A%2F%2Fwww.gearpatrol.com%2Ftech%2Faudio%2Fa45461959%2Ftascam-portastudio-414-mkii%2F +[127] https://www.woovebox.com/ +[128] https://dirtywave.com/ +[129] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[130] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[131] https://www.gearpatrol.com/tech/audio/a45461959/tascam-portastudio-414-mkii/#product-1018365f-aed1-4bbd-86ea-466ab005acb7-anchor +[132] https://go.redirectingat.com/?id=31959X896062&url=https%3A%2F%2Freverb.com%2Fmarketplace%3Fproduct_type%3Dpro-audio%26query%3DTASCAM+Portastudio+414+MKII+4-Track+Cassette+Recorder +[133] https://www.gearpatrol.com/tech/audio/a41601961/vintage-cassette-player/ +[134] https://www.gearpatrol.com/tech/a36356719/cassette-tape-player-revival/ +[136] https://www.gearpatrol.com/tech/audio/ +[137] https://www.gearpatrol.com/tech/audio/a44118957/best-vinyl-records-picked-by-experts/ +[138] https://www.gearpatrol.com/tech/audio/a46326970/best-audio-ces-2024/ +[139] https://www.gearpatrol.com/tech/audio/a42030769/best-floorstanding-speakers/ +[140] https://www.gearpatrol.com/tech/audio/a46260579/modern-speakers-trend/ +[141] https://www.gearpatrol.com/tech/audio/a46275100/best-wireless-subwoofer/ +[142] https://www.gearpatrol.com/tech/audio/a46168154/best-new-hi-fi-audio-gear-2023/ +[143] https://www.gearpatrol.com/tech/audio/a45908277/apple-tv-volume-control-setting/ +[144] https://www.gearpatrol.com/tech/audio/a46200182/favorite-headphones-2023/ +[145] https://www.gearpatrol.com/tech/audio/a360311/best-wireless-multiroom-speakers/ +[146] https://www.gearpatrol.com/tech/audio/a33809800/hi-fi-wireless-sound-quality-explained/ +[147] https://www.gearpatrol.com/ +[148] https://www.facebook.com/gearpatrol/ +[149] https://twitter.com/gearpatrol +[150] https://www.youtube.com/gearpatrol +[151] https://www.instagram.com/gearpatrol/ +[152] https://www.gearpatrol.com/about/a2281/about/ +[153] https://www.gearpatrol.com/briefings/today-in-gear/ +[154] https://www.gearpatrol.com/deals/ +[155] https://www.gearpatrol.com/gift-guides/ +[156] https://www.dpreview.com/ +[157] https://www.gearpatrol.com/watches/ +[158] https://www.gearpatrol.com/cars/ +[159] https://www.gearpatrol.com/style/ +[160] https://www.gearpatrol.com/outdoors/ +[161] https://www.gearpatrol.com/fitness/ +[162] https://www.gearpatrol.com/food/ +[163] https://www.gearpatrol.com/home/ +[164] https://www.gearpatrol.com/tech/ +[165] https://www.gearpatrol.com/about/a40849193/about-gear-patrol-magazine/ +[166] https://email.gearpatrol.com/subscribe +[167] https://studios.gearpatrol.com/ +[168] https://www.gearpatrol.com/about/a43276360/how-we-evaluate-products/ +[169] https://studios.gearpatrol.com/contact/ +[170] https://info.wrightsmedia.com/gearpatrol-licensing-reprints +[171] https://www.gearpatrol.com/rss/all.xml/ +[172] https://www.hearst.com/-/us-magazines-privacy-notice +[173] https://www.hearst.com/-/us-magazines-privacy-notice#_ADDITIONAL_INFO +[174] https://www.hearst.com/-/us-magazines-privacy-notice#_ADDITIONAL_INFO +[175] https://www.hearst.com/-/us-magazines-privacy-notice#_OPT_OUTS +[176] https://www.hearst.com/-/us-magazines-terms-of-use +[177] https://www.gearpatrol.com/sitemap/ diff --git a/static/archive/www-infoelba-com-beacbk.txt b/static/archive/www-infoelba-com-beacbk.txt index 03b0a3e..1ddb8a6 100644 --- a/static/archive/www-infoelba-com-beacbk.txt +++ b/static/archive/www-infoelba-com-beacbk.txt @@ -1,550 +1,542 @@ - #[1]alternate [2]alternate [3]alternate [4]alternate +* +Menu - [tr?id=126960367902655&ev=PageView&noscript=1] + • [2] Getting about - (BUTTON) Menu + Getting about - * [5]Getting about + [3]Back + □ [4] Rentals + □ [5] Taxi services + □ [6] Bus services + □ [7] Park areas + • [8] Stays + • [9] Eat + • [10] Sea -Getting about - [6]Back - + [7]Rentals - + [8]Taxi services - + [9]Bus services - + [10]Park areas - * [11]Stays - * [12]Eat - * [13]Sea + Sea -Sea - [14]Back - + [15]Beaches - + [16]Bathing establishments - + [17]Diving centers - + [18]Sailing - * [19]Guided excursions - * [20]Sports - * [21]Places to see - * [22]Special offers - * [23]Last minute offers - * [24]Ferries + [11]Back + □ [12] Beaches + □ [13] Bathing establishments + □ [14] Diving centers + □ [15] Sailing + • [16] Guided excursions + • [17] Sports + • [18] Places to see + • [19] Special offers + • [20] Last minute offers + • [21] Ferries - Search on the site ____________________ - (BUTTON) Start the search - * - * - * - * +Search on the site [22][ ] +Start the search + • [24] + • [25] + • [26] + • [27] - * - * - * - * + • [28][it-IT] + • [29][en-GB] + • [30][de-DE] + • [31][fr-FR] - (BUTTON) Navigation [25]Infoelba - * [26]Get to Elba - + [27]How to get there Getting to the Island of Elba - + [28]Ferries The shipping companies that connect the island - + [29]Getting about on the island Public transport and taxis - + [30]Hire Car, motorbike and boat hire/rental - * [31]Stay - + [32]Hotels Hotels to meet all needs - + [33]Residences For an independent holiday - + [34]Bed & Breakfasts Always ready to discover the island - + [35]Apartments Feeling at home in Elba - + [36]Small villas and detached houses For an autonomous holiday - + [37]Villas Surrounded by luxury and relaxation - + [38]Farm holiday centres Nature and flavours everywhere - + [39]Campsites Socializing and having a good time surrounded by - nature - + [40]Camper and caravan Parking, water tank and facility areas - + [41]Farm holiday campsites An open air holiday - + [42]Accommodation that is open all year round Elba: a - destination for all seasons - + [43]Luxury accommodation For a dream vacation - + [44]Tourist agencies and realtors Let your holiday be - organised for you - * [45]Eat - + [46]Restaurants and Pizzerias Typical sea, home or more - refined cuisine - + [47]Food & Wine Experience Experiences of gastronomy and wine - tasting - + [48]Local recipes The best dishes of the Elba cuisine - + [49]Wines Aleatico, Moscato and Ansonica: Elba wines - + [50]Herbs and typical products Honey, beer, oil, wild and - aromatic plants - + [51]Typical dishes History and origins of Elba dishes - * [52]Useful information - + [53]ElbaOK Insurance The anti Covid-19 policy and much more - + [54]Useful phone numbers and addresses Public and emergency - utilities - + [55]Weather Temperatures and weather forecast - + [56]Webcams A window always open on the Elbe - + [57]Apps for your smartphone Elba on your mobile - * [58]Visit Elba - + [59]Beaches and coasts A different beach each day - + [60]Places to see Museums, ancient monuments, breathtaking - views - + [61]Tuscan Archipelago National Park Seven pearls rising up - from the sea - + [62]Guided excursions Letting others take you round the island - + [63]Useful advice What to do if... - + [64]Maps of the Island of Elba The Island in the palm of your - hand - + [65]I am... Elba just as it suits you - + [66]Recommended itineraries What can we go and see today? - * [67]Sports and free time - + [68]Water sports Scuba diving, going snorkelling, fishing, - sailing - + [69]Land sports Cycling, trekking, free climbing! - + [70]Elba not to be missed The unmissable experiences to do on - holiday - + [71]Outdoor sports Elba: A paradise for lovers of outdoor - sports - + [72]Enjoyment and relaxation Night life, cinemas and much more - + [73]Courses and study trips Learn while you have fun - + [74]Shopping Scents, colors and flavors of Elba - + [75]Special events and exhibitions What shall we do this - evening? - * [76]Discovering Elba - + [77]How many beaches are there in Elba? 126 beaches of 1000 - colours - + [78]Paths and tracksin Elba 1000 paths to live the island to - the full - + [79]Elba in winter Making the most of Elba all year round - + [80]Interesting facts A different Elba - + [81]History of Elba Historical notes concerning Elba and its - origins - + [82]Geology of Elba Geological origins of the Island of Elba - + [83]Towns of Elba Administration of Elba and its eight - Communes - + [84]Media Gallery Live and feel Elba through photographs - * [85]Webcams +Navigation [33] Infoelba - [86]Infoelba - Dove natura è vacanza - * - * - * - * - * - * [87]0 + • [34]Get to Elba [35] + □ [36] How to get there Getting to the Island of Elba + □ [37] Ferries The shipping companies that connect the island + □ [38] Getting about on the island Public transport and taxis + □ [39] Hire Car, motorbike and boat hire/rental + • [40]Stay [41] + □ [42] Hotels Hotels to meet all needs + □ [43] Residences For an independent holiday + □ [44] Bed & Breakfasts Always ready to discover the island + □ [45] Apartments Feeling at home in Elba + □ [46] Small villas and detached houses For an autonomous holiday + □ [47] Villas Surrounded by luxury and relaxation + □ [48] Farm holiday centres Nature and flavours everywhere + □ [49] Campsites Socializing and having a good time surrounded by nature + □ [50] Camper and caravan Parking, water tank and facility areas + □ [51] Farm holiday campsites An open air holiday + □ [52] Accommodation that is open all year round Elba: a destination for + all seasons + □ [53] Luxury accommodation For a dream vacation + □ [54] Tourist agencies and realtors Let your holiday be organised for + you + • [55]Eat [56] + □ [57] Restaurants and Pizzerias Typical sea, home or more refined + cuisine + □ [58] Food & Wine Experience Experiences of gastronomy and wine tasting + □ [59] Local recipes The best dishes of the Elba cuisine + □ [60] Wines Aleatico, Moscato and Ansonica: Elba wines + □ [61] Herbs and typical products Honey, beer, oil, wild and aromatic + plants + □ [62] Typical dishes History and origins of Elba dishes + • [63]Useful information [64] + □ [65] ElbaOK Insurance The anti Covid-19 policy and much more + □ [66] Useful phone numbers and addresses Public and emergency utilities + □ [67] Weather Temperatures and weather forecast + □ [68] Webcams A window always open on the Elbe + □ [69] Apps for your smartphone Elba on your mobile + • [70]Visit Elba [71] + □ [72] Beaches and coasts A different beach each day + □ [73] Places to see Museums, ancient monuments, breathtaking views + □ [74] Tuscan Archipelago National Park Seven pearls rising up from the + sea + □ [75] Guided excursions Letting others take you round the island + □ [76] Useful advice What to do if... + □ [77] Maps of the Island of Elba The Island in the palm of your hand + □ [78] I am... Elba just as it suits you + □ [79] Recommended itineraries What can we go and see today? + • [80]Sports and free time [81] + □ [82] Water sports Scuba diving, going snorkelling, fishing, sailing + □ [83] Land sports Cycling, trekking, free climbing! + □ [84] Elba not to be missed The unmissable experiences to do on holiday + □ [85] Outdoor sports Elba: A paradise for lovers of outdoor sports + □ [86] Enjoyment and relaxation Night life, cinemas and much more + □ [87] Courses and study trips Learn while you have fun + □ [88] Shopping Scents, colors and flavors of Elba + □ [89] Special events and exhibitions What shall we do this evening? + • [90]Discovering Elba [91] + □ [92] How many beaches are there in Elba? 126 beaches of 1000 colours + □ [93] Paths and tracksin Elba 1000 paths to live the island to the full + □ [94] Elba in winter Making the most of Elba all year round + □ [95] Interesting facts A different Elba + □ [96] History of Elba Historical notes concerning Elba and its origins + □ [97] Geology of Elba Geological origins of the Island of Elba + □ [98] Towns of Elba Administration of Elba and its eight Communes + □ [99] Media Gallery Live and feel Elba through photographs + • [100] Webcams + +[101] Infoelba - Dove natura è vacanza + + • [102] + • [103] + • [104] + • [105] + • [106] + • [107] 0 Cavo, Island of Elba - (BUTTON) - (BUTTON) Navigation - * [88]Looking for accommodation - * [89]Accommodation price and availability - * [90]Last minute booking - * [91]Offers - * [92]Ferry tickets - * [93]Real estate ads +Navigation - Search on the site - ____________________ (BUTTON) Start the search - 1. [94]Island of Elba - 2. [95]Discovering Elba - 3. [96]Communes and towns - 4. [97]Rio Marina - 5. Cavo + • [110] Looking for accommodation + • [111] Accommodation price and availability + • [112] Last minute booking + • [113] Offers + • [114] Ferry tickets + • [115] Real estate ads + +Search on the site +[116][ ] Start the search + 1. [118]Island of Elba + 2. [119]Discovering Elba + 3. [120]Communes and towns + 4. [121]Rio Marina + 5. Cavo The small town is the nearest place to the mainland - Cavo is a beach resort, fully equipped for tourists, with a sandy beach - that goes as far as Capo Castello, where there are the remains of a - [98]Roman villa from the first century AD, and a beautiful coastline of - cliffs that goes from Capo Castello to Capo della Vita. +[o_cavo_dro] - The small port is the nearest place to the mainland, and has water and - refuelling facilities for pleasure boats. In 1849, Giuseppe Garibaldi - stopped there on his way to the Island of Caprera. +Cavo is a beach resort, fully equipped for tourists, with a sandy beach that +goes as far as Capo Castello, where there are the remains of a [122]Roman villa +from the first century AD, and a beautiful coastline of cliffs that goes from +Capo Castello to Capo della Vita. - You can also admire the [99]Tonietti Mausoleum here; it is a unique, - liberty style building that stands out above the wild vegetation on the - island, and was designed by the architect Adolfo Coppedè - (Florence 1871 - Montemurlo 1951) on behalf of the Tonietti family who - wanted a sepulchral chapel. The Toniettis were the first - concessionaires of the iron mines on the eastern side of Elba after the - unification of Italy. Coppedè is known for the Via Dora area in Rome. - * - * - * +The small port is the nearest place to the mainland, and has water and +refuelling facilities for pleasure boats. In 1849, Giuseppe Garibaldi stopped +there on his way to the Island of Caprera. - Request a free quote [100]0 My choice +You can also admire the [123]Tonietti Mausoleum here; it is a unique, liberty +style building that stands out above the wild vegetation on the island, and was +designed by the architect Adolfo Coppedè (Florence 1871 - Montemurlo 1951) on +behalf of the Tonietti family who wanted a sepulchral chapel. The Toniettis +were the first concessionaires of the iron mines on the eastern side of Elba +after the unification of Italy. Coppedè is known for the Via Dora area in Rome. - Arrival ____________________ - Length [1 week___] - Adults [2_] - Children [0_] - (BUTTON) Request a quote - ElbaOk + • [124][app-elbasp] + • [125][infoelba-a] + • [126][guide-info] - Do you want to book your holidays in time but you’re afraid of - unexpected events (such as Coronavirus)? Insure your holidays with - ElbaOK! +Request a free quote [127] 0 My choice +Arrival [128][ ] +Length [129][1 week ] +Adults [130][2 ] +Children [131][0 ] +Request a quote +ElbaOk - [101]Read more +Do you want to book your holidays in time but you’re afraid of unexpected +events (such as Coronavirus)? Insure your holidays with ElbaOK! + +[133] Read more Advice from Infoelba - [102]Cavo[103]Cala delle Alghe[104]GTE +[134]Cavo[135]Cala delle Alghe[136]GTE Further reading - [105]Roman Villa of Capo Castello[106]Tonietti Mausoleum - * - * - * +[137]Roman Villa of Capo Castello[138]Tonietti Mausoleum +[139] [o_dsc_5090] +[140] [o_cavo_1] +[141] [o_dsc_5052] +[142] [o_dsc_5096] +[143] [o_dsc_5111] +[144] [o_dsc_5121] - [107]See more + • [145][app-elbasp] + • [146][infoelba-a] + • [147][guide-info] -[108]Elbadoc Camping Village 3 stars +[148][featured] See more - Cavo, Rio Marina +[149]Elbadoc Camping Village 3 stars - +39.0565949966 +Cavo, Rio Marina - +39.3292262698 - [109]Contacts[110] Memorize - [111]See more ++39.0565949966 -[112]Agriturismo Amandolo 3 ears ++39.3292262698 - Cavo, Rio Marina +[150] Contacts[151] Memorize +[152][featured] See more - +39.0565931908 - [113]Contacts[114] Memorize - [115]See more +[153]Agriturismo Amandolo 3 ears -[116]Ristoro dell'Amandolo +Cavo, Rio Marina - Cavo, Rio Marina ++39.0565931908 - +39.0565931908 - [117]Contacts[118] Memorize - [119]See more +[154] Contacts[155] Memorize +[156][featured] See more -[120]Appartamento La Luciana +[157]Ristoro dell'Amandolo - Cavo, Rio Marina +Cavo, Rio Marina - +39.3473107818 - [121]Contacts[122] Memorize - * [123]Get to Elba - * [124]How to get there - * [125]Ferries - * [126]Getting about on the island - * [127]Hire ++39.0565931908 - * [128]Stay - * [129]Hotels - * [130]Residences - * [131]Bed & Breakfasts - * [132]Apartments - * [133]Small villas and detached houses - * [134]Villas - * [135]Farm holiday centres - * [136]Campsites - * [137]Camper and caravan - * [138]Farm holiday campsites - * [139]Accommodation that is open all year round - * [140]Luxury accommodation - * [141]Tourist agencies and realtors +[158] Contacts[159] Memorize +[160][featured] See more - * [142]Eat - * [143]Restaurants and Pizzerias - * [144]Food & Wine Experience - * [145]Local recipes - * [146]Wines - * [147]Herbs and typical products - * [148]Typical dishes +[161]Appartamento La Luciana - * [149]Useful information - * [150]ElbaOK Insurance - * [151]Useful phone numbers and addresses - * [152]Weather - * [153]Webcams - * [154]Apps for your smartphone +Cavo, Rio Marina - * [155]Visit Elba - * [156]Beaches and coasts - * [157]Places to see - * [158]Tuscan Archipelago National Park - * [159]Guided excursions - * [160]Useful advice - * [161]Maps of the Island of Elba - * [162]I am... - * [163]Recommended itineraries ++39.3473107818 - * [164]Sports and free time - * [165]Water sports - * [166]Land sports - * [167]Elba not to be missed - * [168]Outdoor sports - * [169]Enjoyment and relaxation - * [170]Courses and study trips - * [171]Shopping - * [172]Special events and exhibitions +[162] Contacts[163] Memorize +[164] [app-infoel] - * [173]Discovering Elba - * [174]How many beaches are there in Elba? - * [175]Paths and tracksin Elba - * [176]Elba in winter - * [177]Interesting facts - * [178]History of Elba - * [179]Geology of Elba - * [180]Towns of Elba - * [181]Media Gallery + • [165]Get to Elba + • [166]How to get there + • [167]Ferries + • [168]Getting about on the island + • [169]Hire - * [182]Webcams + • [170]Stay + • [171]Hotels + • [172]Residences + • [173]Bed & Breakfasts + • [174]Apartments + • [175]Small villas and detached houses + • [176]Villas + • [177]Farm holiday centres + • [178]Campsites + • [179]Camper and caravan + • [180]Farm holiday campsites + • [181]Accommodation that is open all year round + • [182]Luxury accommodation + • [183]Tourist agencies and realtors - Infoelba non si assume alcuna responsabilità per l'uso di marchi e - slogan usati dagli inserzionisti e per eventuali errate indicazioni. + • [184]Eat + • [185]Restaurants and Pizzerias + • [186]Food & Wine Experience + • [187]Local recipes + • [188]Wines + • [189]Herbs and typical products + • [190]Typical dishes - Informa inoltre che i listini prezzi, orari, date o altro materiale - informativo pubblicato su questo sito è suscettibile a variazioni. + • [191]Useful information + • [192]ElbaOK Insurance + • [193]Useful phone numbers and addresses + • [194]Weather + • [195]Webcams + • [196]Apps for your smartphone - :: Siete quindi invitati a chiedere conferma alle strutture interessate - :: - Infoelba + • [197]Visit Elba + • [198]Beaches and coasts + • [199]Places to see + • [200]Tuscan Archipelago National Park + • [201]Guided excursions + • [202]Useful advice + • [203]Maps of the Island of Elba + • [204]I am... + • [205]Recommended itineraries - ©1999-2024 Infoelba s.r.l. Unipersonale - Viale Teseo Tesei, 12 - - Centro Servizi Il Molino - 57037 Portoferraio (LI) + • [206]Sports and free time + • [207]Water sports + • [208]Land sports + • [209]Elba not to be missed + • [210]Outdoor sports + • [211]Enjoyment and relaxation + • [212]Courses and study trips + • [213]Shopping + • [214]Special events and exhibitions - P. IVA e C.F. 01130150491 - capitale sociale €10.000,00 i.v. - registro - imprese numero 01130150491 - REA: LI - 100635 + • [215]Discovering Elba + • [216]How many beaches are there in Elba? + • [217]Paths and tracksin Elba + • [218]Elba in winter + • [219]Interesting facts + • [220]History of Elba + • [221]Geology of Elba + • [222]Towns of Elba + • [223]Media Gallery - [183]infoelba® it is a registered trademark - all rights reserved - - [184]Accesso all'area riservata - [185]Privacy Policy - [186]Cookie - Policy + • [224] Webcams - (BUTTON) top +Infoelba non si assume alcuna responsabilità per l'uso di marchi e slogan usati +dagli inserzionisti e per eventuali errate indicazioni. - (BUTTON) ×Chiudi +Informa inoltre che i listini prezzi, orari, date o altro materiale informativo +pubblicato su questo sito è suscettibile a variazioni. - (BUTTON) Close +:: Siete quindi invitati a chiedere conferma alle strutture interessate :: -References +Infoelba - Visible links: - 1. https://www.infoelba.net/elba-entdecken/gemeinden-ortschaften/rio-marina/cavo/ - 2. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 3. https://www.iledelbe.net/decouvrir-elbe/communes-villes/rio-marina/cavo/ - 4. https://www.infoelba.it/scoprire-elba/comuni-paesi/rio-marina/cavo/ - 5. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 6. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 7. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 8. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/taxis/ - 9. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/buses/ - 10. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/campers-caravas-facilities/ - 11. https://www.infoelba.com/where-to-sleep/search/ - 12. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 13. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 14. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 15. https://www.infoelba.com/island-of-elba/beaches/ - 16. https://www.infoelba.com/island-of-elba/beaches/bathing-establishments/ - 17. https://www.infoelba.com/sports-free-time/water-sports/diving/ - 18. https://www.infoelba.com/sports-free-time/water-sports/sailing/ - 19. https://www.infoelba.com/island-of-elba/guided-excursions/ - 20. https://www.infoelba.com/sports-free-time/ - 21. https://www.infoelba.com/island-of-elba/places-to-see/ - 22. https://www.infoelba.com/special-offers-island-of-elba/ - 23. https://www.infoelba.com/island-of-elba-last-minute-booking/ - 24. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 25. https://www.infoelba.com/ - 26. https://www.infoelba.com/arriving-getting-about/ - 27. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ - 28. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 29. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ - 30. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 31. https://www.infoelba.com/where-to-sleep/ - 32. https://www.infoelba.com/where-to-sleep/hotels/ - 33. https://www.infoelba.com/where-to-sleep/residences/ - 34. https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ - 35. https://www.infoelba.com/where-to-sleep/apartments/ - 36. https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ - 37. https://www.infoelba.com/where-to-sleep/villas/ - 38. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ - 39. https://www.infoelba.com/where-to-sleep/campsites/ - 40. https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ - 41. https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ - 42. https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ - 43. https://www.infoelba.com/where-to-sleep/luxury-holidays/ - 44. https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ - 45. https://www.infoelba.com/eating-cuisine/ - 46. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 47. https://www.infoelba.com/eating-cuisine/food-wine-experience/ - 48. https://www.infoelba.com/eating-cuisine/local-recipes/ - 49. https://www.infoelba.com/eating-cuisine/elba-wines/ - 50. https://www.infoelba.com/eating-cuisine/herbs-typical-products/ - 51. https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ - 52. https://www.infoelba.com/useful-information/ - 53. https://www.infoelba.com/useful-information/elbaok-insurance/ - 54. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ - 55. https://www.infoelba.com/useful-information/weather-island-of-elba/ - 56. https://www.infoelba.com/useful-information/webcams/ - 57. https://www.infoelba.com/useful-information/smartphone-apps/ - 58. https://www.infoelba.com/island-of-elba/ - 59. https://www.infoelba.com/island-of-elba/beaches/ - 60. https://www.infoelba.com/island-of-elba/places-to-see/ - 61. https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ - 62. https://www.infoelba.com/island-of-elba/guided-excursions/ - 63. https://www.infoelba.com/island-of-elba/suggestions/ - 64. https://www.infoelba.com/island-of-elba/maps/ - 65. https://www.infoelba.com/island-of-elba/personalized-holidays/ - 66. https://www.infoelba.com/island-of-elba/recommended-itineraries/ - 67. https://www.infoelba.com/sports-free-time/ - 68. https://www.infoelba.com/sports-free-time/water-sports/ - 69. https://www.infoelba.com/sports-free-time/land-sports/ - 70. https://www.infoelba.com/sports-free-time/elba-experiences/ - 71. https://www.infoelba.com/sports-free-time/outdoor-sports/ - 72. https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ - 73. https://www.infoelba.com/sports-free-time/courses-study-trips/ - 74. https://www.infoelba.com/sports-free-time/shopping/ - 75. https://www.infoelba.com/sports-free-time/special-events-exhibitions/ - 76. https://www.infoelba.com/discovering-elba/ - 77. https://www.infoelba.com/elba-beaches/ - 78. https://www.infoelba.com/elba-paths-routes/ - 79. https://www.infoelba.com/elba-winter/ - 80. https://www.infoelba.com/discovering-elba/interesting-facts/ - 81. https://www.infoelba.com/discovering-elba/history-of-elba/ - 82. https://www.infoelba.com/discovering-elba/geology-of-elba/ - 83. https://www.infoelba.com/discovering-elba/communes-towns/ - 84. https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ - 85. https://www.infoelba.com/useful-information/webcams/ - 86. https://www.infoelba.com/ - 87. https://www.infoelba.com/my-choice/ - 88. https://www.infoelba.com/where-to-sleep/search/ - 89. https://www.infoelba.com/accommodation-price-availability/ - 90. https://www.infoelba.com/island-of-elba-last-minute-booking/ - 91. https://www.infoelba.com/special-offers-island-of-elba/ - 92. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ - 93. https://www.infoelba.com/real-estate-ads-elba/ - 94. https://www.infoelba.com/ - 95. https://www.infoelba.com/discovering-elba/ - 96. https://www.infoelba.com/discovering-elba/communes-towns/ - 97. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/ - 98. https://www.infoelba.com/island-of-elba/places-to-see/historical-places/roman-villa-capo-castello/ - 99. https://www.infoelba.com/island-of-elba/places-to-see/historical-places/tonietti-mausoleum/ - 100. https://www.infoelba.com/my-choice/ - 101. https://www.infoelba.com/useful-information/covid-19-safe-holidays/elbaok-insurance/ - 102. https://www.infoelba.com/island-of-elba/beaches/cavo-beach/ - 103. https://www.infoelba.com/island-of-elba/beaches/cala-delle-alghe-beach/ - 104. https://www.infoelba.com/sports-free-time/land-sports/trekking/routes-paths/gte/ - 105. https://www.infoelba.com/island-of-elba/places-to-see/historical-places/roman-villa-capo-castello/ - 106. https://www.infoelba.com/island-of-elba/places-to-see/historical-places/tonietti-mausoleum/ - 107. https://www.infoelba.com/where-to-sleep/campsites/elbadoc-camping-village-1511/ - 108. https://www.infoelba.com/where-to-sleep/campsites/elbadoc-camping-village-1511/ - 109. https://www.infoelba.com/requests/direct-popup.asp?struttura=1511 - 110. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 111. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/agriturismo-amandolo-1666/ - 112. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/agriturismo-amandolo-1666/ - 113. https://www.infoelba.com/requests/direct-popup.asp?struttura=1666 - 114. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 115. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ristoro-dell-amandolo-1667/ - 116. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ristoro-dell-amandolo-1667/ - 117. https://www.infoelba.com/requests/direct-popup.asp?struttura=1667 - 118. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 119. https://www.infoelba.com/where-to-sleep/apartments/appartamento-la-luciana-1739/ - 120. https://www.infoelba.com/where-to-sleep/apartments/appartamento-la-luciana-1739/ - 121. https://www.infoelba.com/requests/direct-popup.asp?struttura=1739 - 122. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 123. https://www.infoelba.com/arriving-getting-about/ - 124. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ - 125. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 126. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ - 127. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 128. https://www.infoelba.com/where-to-sleep/ - 129. https://www.infoelba.com/where-to-sleep/hotels/ - 130. https://www.infoelba.com/where-to-sleep/residences/ - 131. https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ - 132. https://www.infoelba.com/where-to-sleep/apartments/ - 133. https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ - 134. https://www.infoelba.com/where-to-sleep/villas/ - 135. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ - 136. https://www.infoelba.com/where-to-sleep/campsites/ - 137. https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ - 138. https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ - 139. https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ - 140. https://www.infoelba.com/where-to-sleep/luxury-holidays/ - 141. https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ - 142. https://www.infoelba.com/eating-cuisine/ - 143. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 144. https://www.infoelba.com/eating-cuisine/food-wine-experience/ - 145. https://www.infoelba.com/eating-cuisine/local-recipes/ - 146. https://www.infoelba.com/eating-cuisine/elba-wines/ - 147. https://www.infoelba.com/eating-cuisine/herbs-typical-products/ - 148. https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ - 149. https://www.infoelba.com/useful-information/ - 150. https://www.infoelba.com/useful-information/elbaok-insurance/ - 151. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ - 152. https://www.infoelba.com/useful-information/weather-island-of-elba/ - 153. https://www.infoelba.com/useful-information/webcams/ - 154. https://www.infoelba.com/useful-information/smartphone-apps/ - 155. https://www.infoelba.com/island-of-elba/ - 156. https://www.infoelba.com/island-of-elba/beaches/ - 157. https://www.infoelba.com/island-of-elba/places-to-see/ - 158. https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ - 159. https://www.infoelba.com/island-of-elba/guided-excursions/ - 160. https://www.infoelba.com/island-of-elba/suggestions/ - 161. https://www.infoelba.com/island-of-elba/maps/ - 162. https://www.infoelba.com/island-of-elba/personalized-holidays/ - 163. https://www.infoelba.com/island-of-elba/recommended-itineraries/ - 164. https://www.infoelba.com/sports-free-time/ - 165. https://www.infoelba.com/sports-free-time/water-sports/ - 166. https://www.infoelba.com/sports-free-time/land-sports/ - 167. https://www.infoelba.com/sports-free-time/elba-experiences/ - 168. https://www.infoelba.com/sports-free-time/outdoor-sports/ - 169. https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ - 170. https://www.infoelba.com/sports-free-time/courses-study-trips/ - 171. https://www.infoelba.com/sports-free-time/shopping/ - 172. https://www.infoelba.com/sports-free-time/special-events-exhibitions/ - 173. https://www.infoelba.com/discovering-elba/ - 174. https://www.infoelba.com/elba-beaches/ - 175. https://www.infoelba.com/elba-paths-routes/ - 176. https://www.infoelba.com/elba-winter/ - 177. https://www.infoelba.com/discovering-elba/interesting-facts/ - 178. https://www.infoelba.com/discovering-elba/history-of-elba/ - 179. https://www.infoelba.com/discovering-elba/geology-of-elba/ - 180. https://www.infoelba.com/discovering-elba/communes-towns/ - 181. https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ - 182. https://www.infoelba.com/useful-information/webcams/ - 183. https://www.infoelba.com/ - 184. https://areariservata.infoelba.it/ - 185. https://www.infoelba.com/privacy-policy/ - 186. https://www.infoelba.com/cookie-policy/ +©1999-2024 Infoelba s.r.l. Unipersonale - Viale Teseo Tesei, 12 - Centro +Servizi Il Molino - 57037 Portoferraio (LI) - Hidden links: - 188. https://facebook.com/Infoelba - 189. https://twitter.com/infoelba - 190. https://instagram.com/infoelba - 191. https://youtube.com/infoelba - 192. https://www.infoelba.it/scoprire-elba/comuni-paesi/rio-marina/cavo/ - 193. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 194. https://www.infoelba.net/elba-entdecken/gemeinden-ortschaften/rio-marina/cavo/ - 195. https://www.iledelbe.net/decouvrir-elbe/communes-villes/rio-marina/cavo/ - 196. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 197. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 198. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 199. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 200. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 201. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 202. https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ - 203. https://www.infoelba.com/where-to-sleep/search/ - 204. https://www.infoelba.com/accommodation-price-availability/ - 205. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ - 206. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/booking-on-line/ - 207. https://www.infoelba.com/arriving-getting-about/how-to-get-there/planes/ - 208. https://www.infoelba.com/useful-information/smartphone-apps/#elbatraghetti - 209. https://www.infoelba.com/real-estate-ads-elba/ - 210. https://www.infoelba.com/useful-information/smartphone-apps/#elbaspiagge - 211. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5090.jpg?quality=90&mode=crop&w=1280 - 212. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_cavo_1.jpg?quality=90&mode=crop&w=1280 - 213. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5052.jpg?quality=90&mode=crop&w=1280 - 214. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5096.jpg?quality=90&mode=crop&w=1280 - 215. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5111.jpg?quality=90&mode=crop&w=1280 - 216. https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5121.jpg?quality=90&mode=crop&w=1280 - 217. https://www.infoelba.com/useful-information/smartphone-apps/#elbatraghetti - 218. https://www.infoelba.com/real-estate-ads-elba/ - 219. https://www.infoelba.com/useful-information/smartphone-apps/#elbaspiagge - 220. https://www.infoelba.com/app +P. IVA e C.F. 01130150491 - capitale sociale €10.000,00 i.v. - registro imprese +numero 01130150491 - REA: LI - 100635 + +[225]infoelba® it is a registered trademark - all rights reserved - [226] +Accesso all'area riservata - [227]Privacy Policy - [228]Cookie Policy + +top +×Chiudi + +Close + +References: + +[2] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[3] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[4] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[5] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/taxis/ +[6] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/buses/ +[7] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/campers-caravas-facilities/ +[8] https://www.infoelba.com/where-to-sleep/search/ +[9] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[10] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[11] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[12] https://www.infoelba.com/island-of-elba/beaches/ +[13] https://www.infoelba.com/island-of-elba/beaches/bathing-establishments/ +[14] https://www.infoelba.com/sports-free-time/water-sports/diving/ +[15] https://www.infoelba.com/sports-free-time/water-sports/sailing/ +[16] https://www.infoelba.com/island-of-elba/guided-excursions/ +[17] https://www.infoelba.com/sports-free-time/ +[18] https://www.infoelba.com/island-of-elba/places-to-see/ +[19] https://www.infoelba.com/special-offers-island-of-elba/ +[20] https://www.infoelba.com/island-of-elba-last-minute-booking/ +[21] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[24] https://facebook.com/Infoelba +[25] https://twitter.com/infoelba +[26] https://instagram.com/infoelba +[27] https://youtube.com/infoelba +[28] https://www.infoelba.it/scoprire-elba/comuni-paesi/rio-marina/cavo/ +[29] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/ +[30] https://www.infoelba.net/elba-entdecken/gemeinden-ortschaften/rio-marina/cavo/ +[31] https://www.iledelbe.net/decouvrir-elbe/communes-villes/rio-marina/cavo/ +[33] https://www.infoelba.com/ +[34] https://www.infoelba.com/arriving-getting-about/ +[35] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[36] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ +[37] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[38] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ +[39] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[40] https://www.infoelba.com/where-to-sleep/ +[41] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[42] https://www.infoelba.com/where-to-sleep/hotels/ +[43] https://www.infoelba.com/where-to-sleep/residences/ +[44] https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ +[45] https://www.infoelba.com/where-to-sleep/apartments/ +[46] https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ +[47] https://www.infoelba.com/where-to-sleep/villas/ +[48] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ +[49] https://www.infoelba.com/where-to-sleep/campsites/ +[50] https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ +[51] https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ +[52] https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ +[53] https://www.infoelba.com/where-to-sleep/luxury-holidays/ +[54] https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ +[55] https://www.infoelba.com/eating-cuisine/ +[56] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[57] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[58] https://www.infoelba.com/eating-cuisine/food-wine-experience/ +[59] https://www.infoelba.com/eating-cuisine/local-recipes/ +[60] https://www.infoelba.com/eating-cuisine/elba-wines/ +[61] https://www.infoelba.com/eating-cuisine/herbs-typical-products/ +[62] https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ +[63] https://www.infoelba.com/useful-information/ +[64] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[65] https://www.infoelba.com/useful-information/elbaok-insurance/ +[66] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ +[67] https://www.infoelba.com/useful-information/weather-island-of-elba/ +[68] https://www.infoelba.com/useful-information/webcams/ +[69] https://www.infoelba.com/useful-information/smartphone-apps/ +[70] https://www.infoelba.com/island-of-elba/ +[71] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[72] https://www.infoelba.com/island-of-elba/beaches/ +[73] https://www.infoelba.com/island-of-elba/places-to-see/ +[74] https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ +[75] https://www.infoelba.com/island-of-elba/guided-excursions/ +[76] https://www.infoelba.com/island-of-elba/suggestions/ +[77] https://www.infoelba.com/island-of-elba/maps/ +[78] https://www.infoelba.com/island-of-elba/personalized-holidays/ +[79] https://www.infoelba.com/island-of-elba/recommended-itineraries/ +[80] https://www.infoelba.com/sports-free-time/ +[81] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[82] https://www.infoelba.com/sports-free-time/water-sports/ +[83] https://www.infoelba.com/sports-free-time/land-sports/ +[84] https://www.infoelba.com/sports-free-time/elba-experiences/ +[85] https://www.infoelba.com/sports-free-time/outdoor-sports/ +[86] https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ +[87] https://www.infoelba.com/sports-free-time/courses-study-trips/ +[88] https://www.infoelba.com/sports-free-time/shopping/ +[89] https://www.infoelba.com/sports-free-time/special-events-exhibitions/ +[90] https://www.infoelba.com/discovering-elba/ +[91] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[92] https://www.infoelba.com/elba-beaches/ +[93] https://www.infoelba.com/elba-paths-routes/ +[94] https://www.infoelba.com/elba-winter/ +[95] https://www.infoelba.com/discovering-elba/interesting-facts/ +[96] https://www.infoelba.com/discovering-elba/history-of-elba/ +[97] https://www.infoelba.com/discovering-elba/geology-of-elba/ +[98] https://www.infoelba.com/discovering-elba/communes-towns/ +[99] https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ +[100] https://www.infoelba.com/useful-information/webcams/ +[101] https://www.infoelba.com/ +[102] https://www.infoelba.com/where-to-sleep/search/ +[103] https://www.infoelba.com/accommodation-price-availability/ +[104] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ +[105] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/booking-on-line/ +[106] https://www.infoelba.com/arriving-getting-about/how-to-get-there/planes/ +[107] https://www.infoelba.com/my-choice/ +[110] https://www.infoelba.com/where-to-sleep/search/ +[111] https://www.infoelba.com/accommodation-price-availability/ +[112] https://www.infoelba.com/island-of-elba-last-minute-booking/ +[113] https://www.infoelba.com/special-offers-island-of-elba/ +[114] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ +[115] https://www.infoelba.com/real-estate-ads-elba/ +[118] https://www.infoelba.com/ +[119] https://www.infoelba.com/discovering-elba/ +[120] https://www.infoelba.com/discovering-elba/communes-towns/ +[121] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/ +[122] https://www.infoelba.com/island-of-elba/places-to-see/historical-places/roman-villa-capo-castello/ +[123] https://www.infoelba.com/island-of-elba/places-to-see/historical-places/tonietti-mausoleum/ +[124] https://www.infoelba.com/useful-information/smartphone-apps/#elbaspiagge +[125] https://www.infoelba.com/real-estate-ads-elba/ +[126] https://www.elbaspiagge.it/shop-guida/?aff=79 +[127] https://www.infoelba.com/my-choice/ +[133] https://www.infoelba.com/useful-information/covid-19-safe-holidays/elbaok-insurance/ +[134] https://www.infoelba.com/island-of-elba/beaches/cavo-beach/ +[135] https://www.infoelba.com/island-of-elba/beaches/cala-delle-alghe-beach/ +[136] https://www.infoelba.com/sports-free-time/land-sports/trekking/routes-paths/gte/ +[137] https://www.infoelba.com/island-of-elba/places-to-see/historical-places/roman-villa-capo-castello/ +[138] https://www.infoelba.com/island-of-elba/places-to-see/historical-places/tonietti-mausoleum/ +[139] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5090.jpg?quality=90&mode=crop&w=1280 +[140] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_cavo_1.jpg?quality=90&mode=crop&w=1280 +[141] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5052.jpg?quality=90&mode=crop&w=1280 +[142] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5096.jpg?quality=90&mode=crop&w=1280 +[143] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5111.jpg?quality=90&mode=crop&w=1280 +[144] https://dati.infoelba.it/media/photos/isola-d-elba/paesi/rio-marina/cavo/o_dsc_5121.jpg?quality=90&mode=crop&w=1280 +[145] https://www.infoelba.com/useful-information/smartphone-apps/#elbaspiagge +[146] https://www.infoelba.com/real-estate-ads-elba/ +[147] https://www.elbaspiagge.it/shop-guida/?aff=79 +[148] https://www.infoelba.com/where-to-sleep/campsites/elbadoc-camping-village-1511/ +[149] https://www.infoelba.com/where-to-sleep/campsites/elbadoc-camping-village-1511/ +[150] https://www.infoelba.com/requests/direct-popup.asp?struttura=1511 +[151] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[152] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/agriturismo-amandolo-1666/ +[153] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/agriturismo-amandolo-1666/ +[154] https://www.infoelba.com/requests/direct-popup.asp?struttura=1666 +[155] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[156] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ristoro-dell-amandolo-1667/ +[157] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ristoro-dell-amandolo-1667/ +[158] https://www.infoelba.com/requests/direct-popup.asp?struttura=1667 +[159] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[160] https://www.infoelba.com/where-to-sleep/apartments/appartamento-la-luciana-1739/ +[161] https://www.infoelba.com/where-to-sleep/apartments/appartamento-la-luciana-1739/ +[162] https://www.infoelba.com/requests/direct-popup.asp?struttura=1739 +[163] https://www.infoelba.com/discovering-elba/communes-towns/rio-marina/cavo/# +[164] https://www.infoelba.com/app +[165] https://www.infoelba.com/arriving-getting-about/ +[166] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ +[167] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[168] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ +[169] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[170] https://www.infoelba.com/where-to-sleep/ +[171] https://www.infoelba.com/where-to-sleep/hotels/ +[172] https://www.infoelba.com/where-to-sleep/residences/ +[173] https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ +[174] https://www.infoelba.com/where-to-sleep/apartments/ +[175] https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ +[176] https://www.infoelba.com/where-to-sleep/villas/ +[177] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ +[178] https://www.infoelba.com/where-to-sleep/campsites/ +[179] https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ +[180] https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ +[181] https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ +[182] https://www.infoelba.com/where-to-sleep/luxury-holidays/ +[183] https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ +[184] https://www.infoelba.com/eating-cuisine/ +[185] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[186] https://www.infoelba.com/eating-cuisine/food-wine-experience/ +[187] https://www.infoelba.com/eating-cuisine/local-recipes/ +[188] https://www.infoelba.com/eating-cuisine/elba-wines/ +[189] https://www.infoelba.com/eating-cuisine/herbs-typical-products/ +[190] https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ +[191] https://www.infoelba.com/useful-information/ +[192] https://www.infoelba.com/useful-information/elbaok-insurance/ +[193] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ +[194] https://www.infoelba.com/useful-information/weather-island-of-elba/ +[195] https://www.infoelba.com/useful-information/webcams/ +[196] https://www.infoelba.com/useful-information/smartphone-apps/ +[197] https://www.infoelba.com/island-of-elba/ +[198] https://www.infoelba.com/island-of-elba/beaches/ +[199] https://www.infoelba.com/island-of-elba/places-to-see/ +[200] https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ +[201] https://www.infoelba.com/island-of-elba/guided-excursions/ +[202] https://www.infoelba.com/island-of-elba/suggestions/ +[203] https://www.infoelba.com/island-of-elba/maps/ +[204] https://www.infoelba.com/island-of-elba/personalized-holidays/ +[205] https://www.infoelba.com/island-of-elba/recommended-itineraries/ +[206] https://www.infoelba.com/sports-free-time/ +[207] https://www.infoelba.com/sports-free-time/water-sports/ +[208] https://www.infoelba.com/sports-free-time/land-sports/ +[209] https://www.infoelba.com/sports-free-time/elba-experiences/ +[210] https://www.infoelba.com/sports-free-time/outdoor-sports/ +[211] https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ +[212] https://www.infoelba.com/sports-free-time/courses-study-trips/ +[213] https://www.infoelba.com/sports-free-time/shopping/ +[214] https://www.infoelba.com/sports-free-time/special-events-exhibitions/ +[215] https://www.infoelba.com/discovering-elba/ +[216] https://www.infoelba.com/elba-beaches/ +[217] https://www.infoelba.com/elba-paths-routes/ +[218] https://www.infoelba.com/elba-winter/ +[219] https://www.infoelba.com/discovering-elba/interesting-facts/ +[220] https://www.infoelba.com/discovering-elba/history-of-elba/ +[221] https://www.infoelba.com/discovering-elba/geology-of-elba/ +[222] https://www.infoelba.com/discovering-elba/communes-towns/ +[223] https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ +[224] https://www.infoelba.com/useful-information/webcams/ +[225] https://www.infoelba.com/ +[226] https://areariservata.infoelba.it/ +[227] https://www.infoelba.com/privacy-policy/ +[228] https://www.infoelba.com/cookie-policy/ diff --git a/static/archive/www-infoelba-com-pmih4w.txt b/static/archive/www-infoelba-com-pmih4w.txt index 1a16d29..81f1c85 100644 --- a/static/archive/www-infoelba-com-pmih4w.txt +++ b/static/archive/www-infoelba-com-pmih4w.txt @@ -1,601 +1,595 @@ - #[1]alternate [2]alternate [3]alternate [4]alternate +* +Menu - [tr?id=126960367902655&ev=PageView&noscript=1] + • [2] Getting about - (BUTTON) Menu + Getting about - * [5]Getting about + [3]Back + □ [4] Rentals + □ [5] Taxi services + □ [6] Bus services + □ [7] Park areas + • [8] Stays + • [9] Eat + • [10] Sea -Getting about - [6]Back - + [7]Rentals - + [8]Taxi services - + [9]Bus services - + [10]Park areas - * [11]Stays - * [12]Eat - * [13]Sea + Sea -Sea - [14]Back - + [15]Beaches - + [16]Bathing establishments - + [17]Diving centers - + [18]Sailing - * [19]Guided excursions - * [20]Sports - * [21]Places to see - * [22]Special offers - * [23]Last minute offers - * [24]Ferries + [11]Back + □ [12] Beaches + □ [13] Bathing establishments + □ [14] Diving centers + □ [15] Sailing + • [16] Guided excursions + • [17] Sports + • [18] Places to see + • [19] Special offers + • [20] Last minute offers + • [21] Ferries - Search on the site ____________________ - (BUTTON) Start the search - * - * - * - * +Search on the site [22][ ] +Start the search + • [24] + • [25] + • [26] + • [27] - * - * - * - * + • [28][it-IT] + • [29][en-GB] + • [30][de-DE] + • [31][fr-FR] - (BUTTON) Navigation [25]Infoelba - * [26]Get to Elba - + [27]How to get there Getting to the Island of Elba - + [28]Ferries The shipping companies that connect the island - + [29]Getting about on the island Public transport and taxis - + [30]Hire Car, motorbike and boat hire/rental - * [31]Stay - + [32]Hotels Hotels to meet all needs - + [33]Residences For an independent holiday - + [34]Bed & Breakfasts Always ready to discover the island - + [35]Apartments Feeling at home in Elba - + [36]Small villas and detached houses For an autonomous holiday - + [37]Villas Surrounded by luxury and relaxation - + [38]Farm holiday centres Nature and flavours everywhere - + [39]Campsites Socializing and having a good time surrounded by - nature - + [40]Camper and caravan Parking, water tank and facility areas - + [41]Farm holiday campsites An open air holiday - + [42]Accommodation that is open all year round Elba: a - destination for all seasons - + [43]Luxury accommodation For a dream vacation - + [44]Tourist agencies and realtors Let your holiday be - organised for you - * [45]Eat - + [46]Restaurants and Pizzerias Typical sea, home or more - refined cuisine - + [47]Food & Wine Experience Experiences of gastronomy and wine - tasting - + [48]Local recipes The best dishes of the Elba cuisine - + [49]Wines Aleatico, Moscato and Ansonica: Elba wines - + [50]Herbs and typical products Honey, beer, oil, wild and - aromatic plants - + [51]Typical dishes History and origins of Elba dishes - * [52]Useful information - + [53]ElbaOK Insurance The anti Covid-19 policy and much more - + [54]Useful phone numbers and addresses Public and emergency - utilities - + [55]Weather Temperatures and weather forecast - + [56]Webcams A window always open on the Elbe - + [57]Apps for your smartphone Elba on your mobile - * [58]Visit Elba - + [59]Beaches and coasts A different beach each day - + [60]Places to see Museums, ancient monuments, breathtaking - views - + [61]Tuscan Archipelago National Park Seven pearls rising up - from the sea - + [62]Guided excursions Letting others take you round the island - + [63]Useful advice What to do if... - + [64]Maps of the Island of Elba The Island in the palm of your - hand - + [65]I am... Elba just as it suits you - + [66]Recommended itineraries What can we go and see today? - * [67]Sports and free time - + [68]Water sports Scuba diving, going snorkelling, fishing, - sailing - + [69]Land sports Cycling, trekking, free climbing! - + [70]Elba not to be missed The unmissable experiences to do on - holiday - + [71]Outdoor sports Elba: A paradise for lovers of outdoor - sports - + [72]Enjoyment and relaxation Night life, cinemas and much more - + [73]Courses and study trips Learn while you have fun - + [74]Shopping Scents, colors and flavors of Elba - + [75]Special events and exhibitions What shall we do this - evening? - * [76]Discovering Elba - + [77]How many beaches are there in Elba? 126 beaches of 1000 - colours - + [78]Paths and tracksin Elba 1000 paths to live the island to - the full - + [79]Elba in winter Making the most of Elba all year round - + [80]Interesting facts A different Elba - + [81]History of Elba Historical notes concerning Elba and its - origins - + [82]Geology of Elba Geological origins of the Island of Elba - + [83]Towns of Elba Administration of Elba and its eight - Communes - + [84]Media Gallery Live and feel Elba through photographs - * [85]Webcams +Navigation [33] Infoelba - [86]Infoelba - Dove natura è vacanza - * - * - * - * - * - * [87]0 + • [34]Get to Elba [35] + □ [36] How to get there Getting to the Island of Elba + □ [37] Ferries The shipping companies that connect the island + □ [38] Getting about on the island Public transport and taxis + □ [39] Hire Car, motorbike and boat hire/rental + • [40]Stay [41] + □ [42] Hotels Hotels to meet all needs + □ [43] Residences For an independent holiday + □ [44] Bed & Breakfasts Always ready to discover the island + □ [45] Apartments Feeling at home in Elba + □ [46] Small villas and detached houses For an autonomous holiday + □ [47] Villas Surrounded by luxury and relaxation + □ [48] Farm holiday centres Nature and flavours everywhere + □ [49] Campsites Socializing and having a good time surrounded by nature + □ [50] Camper and caravan Parking, water tank and facility areas + □ [51] Farm holiday campsites An open air holiday + □ [52] Accommodation that is open all year round Elba: a destination for + all seasons + □ [53] Luxury accommodation For a dream vacation + □ [54] Tourist agencies and realtors Let your holiday be organised for + you + • [55]Eat [56] + □ [57] Restaurants and Pizzerias Typical sea, home or more refined + cuisine + □ [58] Food & Wine Experience Experiences of gastronomy and wine tasting + □ [59] Local recipes The best dishes of the Elba cuisine + □ [60] Wines Aleatico, Moscato and Ansonica: Elba wines + □ [61] Herbs and typical products Honey, beer, oil, wild and aromatic + plants + □ [62] Typical dishes History and origins of Elba dishes + • [63]Useful information [64] + □ [65] ElbaOK Insurance The anti Covid-19 policy and much more + □ [66] Useful phone numbers and addresses Public and emergency utilities + □ [67] Weather Temperatures and weather forecast + □ [68] Webcams A window always open on the Elbe + □ [69] Apps for your smartphone Elba on your mobile + • [70]Visit Elba [71] + □ [72] Beaches and coasts A different beach each day + □ [73] Places to see Museums, ancient monuments, breathtaking views + □ [74] Tuscan Archipelago National Park Seven pearls rising up from the + sea + □ [75] Guided excursions Letting others take you round the island + □ [76] Useful advice What to do if... + □ [77] Maps of the Island of Elba The Island in the palm of your hand + □ [78] I am... Elba just as it suits you + □ [79] Recommended itineraries What can we go and see today? + • [80]Sports and free time [81] + □ [82] Water sports Scuba diving, going snorkelling, fishing, sailing + □ [83] Land sports Cycling, trekking, free climbing! + □ [84] Elba not to be missed The unmissable experiences to do on holiday + □ [85] Outdoor sports Elba: A paradise for lovers of outdoor sports + □ [86] Enjoyment and relaxation Night life, cinemas and much more + □ [87] Courses and study trips Learn while you have fun + □ [88] Shopping Scents, colors and flavors of Elba + □ [89] Special events and exhibitions What shall we do this evening? + • [90]Discovering Elba [91] + □ [92] How many beaches are there in Elba? 126 beaches of 1000 colours + □ [93] Paths and tracksin Elba 1000 paths to live the island to the full + □ [94] Elba in winter Making the most of Elba all year round + □ [95] Interesting facts A different Elba + □ [96] History of Elba Historical notes concerning Elba and its origins + □ [97] Geology of Elba Geological origins of the Island of Elba + □ [98] Towns of Elba Administration of Elba and its eight Communes + □ [99] Media Gallery Live and feel Elba through photographs + • [100] Webcams + +[101] Infoelba - Dove natura è vacanza + + • [102] + • [103] + • [104] + • [105] + • [106] + • [107] 0 Sansone beach in Portoferraio, on the Island of Elba - (BUTTON) - (BUTTON) Navigation - * [88]Looking for accommodation - * [89]Accommodation price and availability - * [90]Last minute booking - * [91]Offers - * [92]Ferry tickets - * [93]Real estate ads +Navigation - Search on the site - ____________________ (BUTTON) Start the search - 1. [94]Island of Elba - 2. [95]The Island of Elba - 3. [96]Beaches and coasts - 4. Sansone + • [110] Looking for accommodation + • [111] Accommodation price and availability + • [112] Last minute booking + • [113] Offers + • [114] Ferry tickets + • [115] Real estate ads + +Search on the site +[116][ ] Start the search + 1. [118]Island of Elba + 2. [119]The Island of Elba + 3. [120]Beaches and coasts + 4. Sansone Enchanting white pebble beach - This enchanting beach consisting of white pebbles and shingle is - considered one of the [97]most beautiful beaches on the Island of Elba. +[121][o_sansone_] - Just off the steep, white cliffs that are so typical of the northern - side of the island, from Capo Bianco to Capo Enfola, the water in this - beach is unique and unbelievably clear. +This enchanting beach consisting of white pebbles and shingle is considered one +of the [122]most beautiful beaches on the Island of Elba. - Sansone is truly unique and enchanting because on days when the - scirocco wind is blowing the sea is calm and crystal clear, and the - candid white sea bed is like no other. Here you will find numerous - rocks, grottos and gorges that are rich in brightly coloured fish, so - they are perfect if you are a snorkelling lover. +Just off the steep, white cliffs that are so typical of the northern side of +the island, from Capo Bianco to Capo Enfola, the water in this beach is unique +and unbelievably clear. - On the right hand side of the beach there is a rock that separates it - from [page id="323=]Sorgente beach[/page], and it is very popular among - teenagers who love to dive off it; on the left hand side the large - cliffs are perfect if you love going on canoe and kayak excursions. +Sansone is truly unique and enchanting because on days when the scirocco wind +is blowing the sea is calm and crystal clear, and the candid white sea bed is +like no other. Here you will find numerous rocks, grottos and gorges that are +rich in brightly coloured fish, so they are perfect if you are a snorkelling +lover. - There is a bathing establishment on the beach where you can rent sun - umbrellas and sun beds, pedalos and canoes, and there is also a small - bar. - There is a restaurant in the campsite on the nearby beach of Sorgente - as well. +On the right hand side of the beach there is a rock that separates it from +[page id="323=]Sorgente beach[/page], and it is very popular among teenagers +who love to dive off it; on the left hand side the large cliffs are perfect if +you love going on canoe and kayak excursions. + +There is a bathing establishment on the beach where you can rent sun umbrellas +and sun beds, pedalos and canoes, and there is also a small bar. +There is a restaurant in the campsite on the nearby beach of Sorgente as well. How to get to Sansone beach - If you want to drive there, take the main road from Portoferraio to - Enfola and after about 4,5 km you'll see the pedestrian path on your - right and the sign for the beach. Either park your car at the side of - the road or in the fee paying car park, then follow the short path - until you get to [98]Sorgente beach that, like Sansone, is a tiny beach - made up of small, white pebbles. Since this part of the path is rather - bumpy we suggest you avoid wearing flip flops which might make the walk - down somewhat difficult. +If you want to drive there, take the main road from Portoferraio to Enfola and +after about 4,5 km you'll see the pedestrian path on your right and the sign +for the beach. Either park your car at the side of the road or in the fee +paying car park, then follow the short path until you get to [123]Sorgente +beach that, like Sansone, is a tiny beach made up of small, white +pebbles. Since this part of the path is rather bumpy we suggest you avoid +wearing flip flops which might make the walk down somewhat difficult. - If you want to get to Sansone beach keep going along a second path, - with the entrance to the campsite on your left, and go up a small hill. - Once you're at the top of the promontory between the two beaches, go a - little further along - it is a bit steep at times - and at last you'll - find yourself at the beach. +If you want to get to Sansone beach keep going along a second path, with the +entrance to the campsite on your left, and go up a small hill. Once you're at +the top of the promontory between the two beaches, go a little further along - +it is a bit steep at times - and at last you'll find yourself at the beach. - The beauty of the area more than makes up for your effort. +The beauty of the area more than makes up for your effort. - Request a free quote [99]0 My choice +Request a free quote [124] 0 My choice +Arrival [125][ ] +Length [126][1 week ] +Adults [127][2 ] +Children [128][0 ] +Request a quote +ElbaOk - Arrival ____________________ - Length [1 week___] - Adults [2_] - Children [0_] - (BUTTON) Request a quote - ElbaOk +Do you want to book your holidays in time but you’re afraid of unexpected +events (such as Coronavirus)? Insure your holidays with ElbaOK! - Do you want to book your holidays in time but you’re afraid of - unexpected events (such as Coronavirus)? Insure your holidays with - ElbaOK! - - [100]Read more +[130] Read more Information and facilities - Commune Portoferraio - Side North - Recommended with the following winds Sirocco, South Wind, Sout-West - Wind - Composition Shingles - Length 240 m - Facilities Bar, Minibus, Canoe/kayak rental, Boat / pedalo hire/rental, - Sun umbrella / sun bed hire/rental, Pedalo rental, Car park, Bathing - establishment - Nearby beaches [101]Sorgente (0,16 km), [102]Acquaviva (0,45 km), - [103]Viticcio (0,62 km), [104]Pinetina (0,71 km), [105]Enfola (0,92 - km), [106]Seccione (1,4 km), [107]Forno (1,96 km), [108]Sottobomba - (2,23 km), [109]Scaglieri (2,23 km), [110]Biodola (2,58 km), [111]Capo - Bianco (2,8 km), [112]Padulella (2,9 km), [113]Lamaia (3,16 km), - [114]Cala dei Frati (3,2 km), [115]Porticciolo (3,22 km), [116]Le - Ghiaie (3,58 km), [117]Le Viste (4,13 km), [118]Procchio (4,88 km) - * + Commune Portoferraio + Side North +Recommended + with the Sirocco, South Wind, Sout-West Wind + following + winds +Composition Shingles + Length 240 m + Bar, Minibus, Canoe/kayak rental, Boat / pedalo hire/rental, Sun +Facilities umbrella / sun bed hire/rental, Pedalo rental, Car park, Bathing + establishment + [131]Sorgente (0,16 km), [132]Acquaviva (0,45 km), [133]Viticcio + (0,62 km), [134]Pinetina (0,71 km), [135]Enfola (0,92 km), [136] + Nearby Seccione (1,4 km), [137]Forno (1,96 km), [138]Sottobomba (2,23 km), + beaches [139]Scaglieri (2,23 km), [140]Biodola (2,58 km), [141]Capo Bianco + (2,8 km), [142]Padulella (2,9 km), [143]Lamaia (3,16 km), [144]Cala + dei Frati (3,2 km), [145]Porticciolo (3,22 km), [146]Le Ghiaie + (3,58 km), [147]Le Viste (4,13 km), [148]Procchio (4,88 km) + + • [149] [infoelba-s] + +[150] [o_sansone_] +[151] [o_sansone_] +[152] [o_sansone-] +[153] [o_sansone-] +[154] [o_sansone-] +[155] [o_sansone-] +[156] [o_sansone-] +[157] [o_sansone-] +[158] [o_sansone-] +[159] [o_sansone-] Sansone Legend of points of interest - Hotels - Campsites - Apartaments - Beach of Sansone +[ht3] Hotels +[cp2] Campsites +[ap0] Apartaments +[2_1] Beach of Sansone - 3 structures near the beach of Sansone see on map +3 structures near the beach of Sansone see on map Apartaments near the beach of Sansone - [119]See more +[160][1] See more -[120]Casa di Alessio +[161]Casa di Alessio - Portoferraio +Portoferraio - +39.3288423392 - [121]Contacts[122] Memorize ++39.3288423392 + +[162] Contacts[163] Memorize Campsites near the beach of Sansone - [123]See more +[164][featured] See more -[124]Camping La Sorgente 2 stars +[165]Camping La Sorgente 2 stars - Acquaviva, Portoferraio +Acquaviva, Portoferraio - +39.0565917139 - [125]Contacts[126] Estimate[127] Memorize ++39.0565917139 + +[166] Contacts[167] Estimate[168] Memorize Hotels near the beach of Sansone - [128]See more +[169][featured] See more -[129]Hotel Paradiso 3 stars +[170]Hotel Paradiso 3 stars - Viticcio, Portoferraio +Viticcio, Portoferraio - +39.0565939034 ++39.0565939034 - +39.3456800683 - [130]Contacts[131] Memorize - * [132]Get to Elba - * [133]How to get there - * [134]Ferries - * [135]Getting about on the island - * [136]Hire ++39.3456800683 - * [137]Stay - * [138]Hotels - * [139]Residences - * [140]Bed & Breakfasts - * [141]Apartments - * [142]Small villas and detached houses - * [143]Villas - * [144]Farm holiday centres - * [145]Campsites - * [146]Camper and caravan - * [147]Farm holiday campsites - * [148]Accommodation that is open all year round - * [149]Luxury accommodation - * [150]Tourist agencies and realtors +[171] Contacts[172] Memorize +[173] [app-infoel] - * [151]Eat - * [152]Restaurants and Pizzerias - * [153]Food & Wine Experience - * [154]Local recipes - * [155]Wines - * [156]Herbs and typical products - * [157]Typical dishes + • [174]Get to Elba + • [175]How to get there + • [176]Ferries + • [177]Getting about on the island + • [178]Hire - * [158]Useful information - * [159]ElbaOK Insurance - * [160]Useful phone numbers and addresses - * [161]Weather - * [162]Webcams - * [163]Apps for your smartphone + • [179]Stay + • [180]Hotels + • [181]Residences + • [182]Bed & Breakfasts + • [183]Apartments + • [184]Small villas and detached houses + • [185]Villas + • [186]Farm holiday centres + • [187]Campsites + • [188]Camper and caravan + • [189]Farm holiday campsites + • [190]Accommodation that is open all year round + • [191]Luxury accommodation + • [192]Tourist agencies and realtors - * [164]Visit Elba - * [165]Beaches and coasts - * [166]Places to see - * [167]Tuscan Archipelago National Park - * [168]Guided excursions - * [169]Useful advice - * [170]Maps of the Island of Elba - * [171]I am... - * [172]Recommended itineraries + • [193]Eat + • [194]Restaurants and Pizzerias + • [195]Food & Wine Experience + • [196]Local recipes + • [197]Wines + • [198]Herbs and typical products + • [199]Typical dishes - * [173]Sports and free time - * [174]Water sports - * [175]Land sports - * [176]Elba not to be missed - * [177]Outdoor sports - * [178]Enjoyment and relaxation - * [179]Courses and study trips - * [180]Shopping - * [181]Special events and exhibitions + • [200]Useful information + • [201]ElbaOK Insurance + • [202]Useful phone numbers and addresses + • [203]Weather + • [204]Webcams + • [205]Apps for your smartphone - * [182]Discovering Elba - * [183]How many beaches are there in Elba? - * [184]Paths and tracksin Elba - * [185]Elba in winter - * [186]Interesting facts - * [187]History of Elba - * [188]Geology of Elba - * [189]Towns of Elba - * [190]Media Gallery + • [206]Visit Elba + • [207]Beaches and coasts + • [208]Places to see + • [209]Tuscan Archipelago National Park + • [210]Guided excursions + • [211]Useful advice + • [212]Maps of the Island of Elba + • [213]I am... + • [214]Recommended itineraries - * [191]Webcams + • [215]Sports and free time + • [216]Water sports + • [217]Land sports + • [218]Elba not to be missed + • [219]Outdoor sports + • [220]Enjoyment and relaxation + • [221]Courses and study trips + • [222]Shopping + • [223]Special events and exhibitions - Infoelba non si assume alcuna responsabilità per l'uso di marchi e - slogan usati dagli inserzionisti e per eventuali errate indicazioni. + • [224]Discovering Elba + • [225]How many beaches are there in Elba? + • [226]Paths and tracksin Elba + • [227]Elba in winter + • [228]Interesting facts + • [229]History of Elba + • [230]Geology of Elba + • [231]Towns of Elba + • [232]Media Gallery - Informa inoltre che i listini prezzi, orari, date o altro materiale - informativo pubblicato su questo sito è suscettibile a variazioni. + • [233] Webcams - :: Siete quindi invitati a chiedere conferma alle strutture interessate - :: - Infoelba +Infoelba non si assume alcuna responsabilità per l'uso di marchi e slogan usati +dagli inserzionisti e per eventuali errate indicazioni. - ©1999-2024 Infoelba s.r.l. Unipersonale - Viale Teseo Tesei, 12 - - Centro Servizi Il Molino - 57037 Portoferraio (LI) +Informa inoltre che i listini prezzi, orari, date o altro materiale informativo +pubblicato su questo sito è suscettibile a variazioni. - P. IVA e C.F. 01130150491 - capitale sociale €10.000,00 i.v. - registro - imprese numero 01130150491 - REA: LI - 100635 +:: Siete quindi invitati a chiedere conferma alle strutture interessate :: - [192]infoelba® it is a registered trademark - all rights reserved - - [193]Accesso all'area riservata - [194]Privacy Policy - [195]Cookie - Policy +Infoelba - (BUTTON) top +©1999-2024 Infoelba s.r.l. Unipersonale - Viale Teseo Tesei, 12 - Centro +Servizi Il Molino - 57037 Portoferraio (LI) - (BUTTON) ×Chiudi +P. IVA e C.F. 01130150491 - capitale sociale €10.000,00 i.v. - registro imprese +numero 01130150491 - REA: LI - 100635 - (BUTTON) Close +[234]infoelba® it is a registered trademark - all rights reserved - [235] +Accesso all'area riservata - [236]Privacy Policy - [237]Cookie Policy -References +top +×Chiudi - Visible links: - 1. https://www.infoelba.net/insel-elba/straende/strand-sansone/ - 2. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 3. https://www.iledelbe.net/ile-d-elbe/plages/plage-sansone/ - 4. https://www.infoelba.it/isola-d-elba/spiagge/spiaggia-sansone/ - 5. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 6. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 7. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 8. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/taxis/ - 9. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/buses/ - 10. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/campers-caravas-facilities/ - 11. https://www.infoelba.com/where-to-sleep/search/ - 12. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 13. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 14. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 15. https://www.infoelba.com/island-of-elba/beaches/ - 16. https://www.infoelba.com/island-of-elba/beaches/bathing-establishments/ - 17. https://www.infoelba.com/sports-free-time/water-sports/diving/ - 18. https://www.infoelba.com/sports-free-time/water-sports/sailing/ - 19. https://www.infoelba.com/island-of-elba/guided-excursions/ - 20. https://www.infoelba.com/sports-free-time/ - 21. https://www.infoelba.com/island-of-elba/places-to-see/ - 22. https://www.infoelba.com/special-offers-island-of-elba/ - 23. https://www.infoelba.com/island-of-elba-last-minute-booking/ - 24. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 25. https://www.infoelba.com/ - 26. https://www.infoelba.com/arriving-getting-about/ - 27. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ - 28. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 29. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ - 30. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 31. https://www.infoelba.com/where-to-sleep/ - 32. https://www.infoelba.com/where-to-sleep/hotels/ - 33. https://www.infoelba.com/where-to-sleep/residences/ - 34. https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ - 35. https://www.infoelba.com/where-to-sleep/apartments/ - 36. https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ - 37. https://www.infoelba.com/where-to-sleep/villas/ - 38. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ - 39. https://www.infoelba.com/where-to-sleep/campsites/ - 40. https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ - 41. https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ - 42. https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ - 43. https://www.infoelba.com/where-to-sleep/luxury-holidays/ - 44. https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ - 45. https://www.infoelba.com/eating-cuisine/ - 46. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 47. https://www.infoelba.com/eating-cuisine/food-wine-experience/ - 48. https://www.infoelba.com/eating-cuisine/local-recipes/ - 49. https://www.infoelba.com/eating-cuisine/elba-wines/ - 50. https://www.infoelba.com/eating-cuisine/herbs-typical-products/ - 51. https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ - 52. https://www.infoelba.com/useful-information/ - 53. https://www.infoelba.com/useful-information/elbaok-insurance/ - 54. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ - 55. https://www.infoelba.com/useful-information/weather-island-of-elba/ - 56. https://www.infoelba.com/useful-information/webcams/ - 57. https://www.infoelba.com/useful-information/smartphone-apps/ - 58. https://www.infoelba.com/island-of-elba/ - 59. https://www.infoelba.com/island-of-elba/beaches/ - 60. https://www.infoelba.com/island-of-elba/places-to-see/ - 61. https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ - 62. https://www.infoelba.com/island-of-elba/guided-excursions/ - 63. https://www.infoelba.com/island-of-elba/suggestions/ - 64. https://www.infoelba.com/island-of-elba/maps/ - 65. https://www.infoelba.com/island-of-elba/personalized-holidays/ - 66. https://www.infoelba.com/island-of-elba/recommended-itineraries/ - 67. https://www.infoelba.com/sports-free-time/ - 68. https://www.infoelba.com/sports-free-time/water-sports/ - 69. https://www.infoelba.com/sports-free-time/land-sports/ - 70. https://www.infoelba.com/sports-free-time/elba-experiences/ - 71. https://www.infoelba.com/sports-free-time/outdoor-sports/ - 72. https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ - 73. https://www.infoelba.com/sports-free-time/courses-study-trips/ - 74. https://www.infoelba.com/sports-free-time/shopping/ - 75. https://www.infoelba.com/sports-free-time/special-events-exhibitions/ - 76. https://www.infoelba.com/discovering-elba/ - 77. https://www.infoelba.com/elba-beaches/ - 78. https://www.infoelba.com/elba-paths-routes/ - 79. https://www.infoelba.com/elba-winter/ - 80. https://www.infoelba.com/discovering-elba/interesting-facts/ - 81. https://www.infoelba.com/discovering-elba/history-of-elba/ - 82. https://www.infoelba.com/discovering-elba/geology-of-elba/ - 83. https://www.infoelba.com/discovering-elba/communes-towns/ - 84. https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ - 85. https://www.infoelba.com/useful-information/webcams/ - 86. https://www.infoelba.com/ - 87. https://www.infoelba.com/my-choice/ - 88. https://www.infoelba.com/where-to-sleep/search/ - 89. https://www.infoelba.com/accommodation-price-availability/ - 90. https://www.infoelba.com/island-of-elba-last-minute-booking/ - 91. https://www.infoelba.com/special-offers-island-of-elba/ - 92. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ - 93. https://www.infoelba.com/real-estate-ads-elba/ - 94. https://www.infoelba.com/ - 95. https://www.infoelba.com/island-of-elba/ - 96. https://www.infoelba.com/island-of-elba/beaches/ - 97. https://www.infoelba.com/island-of-elba/beaches/most-beautiful-beaches-in-elba/ - 98. https://www.infoelba.com/island-of-elba/beaches/sorgente-beach/ - 99. https://www.infoelba.com/my-choice/ - 100. https://www.infoelba.com/useful-information/covid-19-safe-holidays/elbaok-insurance/ - 101. https://www.infoelba.com/island-of-elba/beaches/sorgente-beach/ - 102. https://www.infoelba.com/island-of-elba/beaches/acquaviva-beach/ - 103. https://www.infoelba.com/island-of-elba/beaches/viticcio-beach/ - 104. https://www.infoelba.com/island-of-elba/beaches/pinetina-beach/ - 105. https://www.infoelba.com/island-of-elba/beaches/enfola-beach/ - 106. https://www.infoelba.com/island-of-elba/beaches/seccione-beach/ - 107. https://www.infoelba.com/island-of-elba/beaches/forno-beach/ - 108. https://www.infoelba.com/island-of-elba/beaches/sottobomba-beach/ - 109. https://www.infoelba.com/island-of-elba/beaches/scaglieri-beach/ - 110. https://www.infoelba.com/island-of-elba/beaches/biodola-beach/ - 111. https://www.infoelba.com/island-of-elba/beaches/capo-bianco-beach/ - 112. https://www.infoelba.com/island-of-elba/beaches/padulella-beach/ - 113. https://www.infoelba.com/island-of-elba/beaches/lamaia-beach/ - 114. https://www.infoelba.com/island-of-elba/beaches/cala-dei-frati-beach/ - 115. https://www.infoelba.com/island-of-elba/beaches/porticciolo-beach/ - 116. https://www.infoelba.com/island-of-elba/beaches/le-ghiaie-beach/ - 117. https://www.infoelba.com/island-of-elba/beaches/le-viste-beach/ - 118. https://www.infoelba.com/island-of-elba/beaches/procchio-beach/ - 119. https://www.infoelba.com/where-to-sleep/apartments/casa-di-alessio-1772/ - 120. https://www.infoelba.com/where-to-sleep/apartments/casa-di-alessio-1772/ - 121. https://www.infoelba.com/requests/direct-popup.asp?struttura=1772 - 122. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 123. https://www.infoelba.com/where-to-sleep/campsites/camping-la-sorgente-489/ - 124. https://www.infoelba.com/where-to-sleep/campsites/camping-la-sorgente-489/ - 125. https://www.infoelba.com/requests/direct-popup.asp?struttura=489 - 126. https://pricelists.infoelba.it/Estimate.aspx?structure=489&language=en-GB - 127. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 128. https://www.infoelba.com/where-to-sleep/hotels/hotel-paradiso-186/ - 129. https://www.infoelba.com/where-to-sleep/hotels/hotel-paradiso-186/ - 130. https://www.infoelba.com/requests/direct-popup.asp?struttura=186 - 131. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 132. https://www.infoelba.com/arriving-getting-about/ - 133. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ - 134. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ - 135. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ - 136. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ - 137. https://www.infoelba.com/where-to-sleep/ - 138. https://www.infoelba.com/where-to-sleep/hotels/ - 139. https://www.infoelba.com/where-to-sleep/residences/ - 140. https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ - 141. https://www.infoelba.com/where-to-sleep/apartments/ - 142. https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ - 143. https://www.infoelba.com/where-to-sleep/villas/ - 144. https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ - 145. https://www.infoelba.com/where-to-sleep/campsites/ - 146. https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ - 147. https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ - 148. https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ - 149. https://www.infoelba.com/where-to-sleep/luxury-holidays/ - 150. https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ - 151. https://www.infoelba.com/eating-cuisine/ - 152. https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ - 153. https://www.infoelba.com/eating-cuisine/food-wine-experience/ - 154. https://www.infoelba.com/eating-cuisine/local-recipes/ - 155. https://www.infoelba.com/eating-cuisine/elba-wines/ - 156. https://www.infoelba.com/eating-cuisine/herbs-typical-products/ - 157. https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ - 158. https://www.infoelba.com/useful-information/ - 159. https://www.infoelba.com/useful-information/elbaok-insurance/ - 160. https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ - 161. https://www.infoelba.com/useful-information/weather-island-of-elba/ - 162. https://www.infoelba.com/useful-information/webcams/ - 163. https://www.infoelba.com/useful-information/smartphone-apps/ - 164. https://www.infoelba.com/island-of-elba/ - 165. https://www.infoelba.com/island-of-elba/beaches/ - 166. https://www.infoelba.com/island-of-elba/places-to-see/ - 167. https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ - 168. https://www.infoelba.com/island-of-elba/guided-excursions/ - 169. https://www.infoelba.com/island-of-elba/suggestions/ - 170. https://www.infoelba.com/island-of-elba/maps/ - 171. https://www.infoelba.com/island-of-elba/personalized-holidays/ - 172. https://www.infoelba.com/island-of-elba/recommended-itineraries/ - 173. https://www.infoelba.com/sports-free-time/ - 174. https://www.infoelba.com/sports-free-time/water-sports/ - 175. https://www.infoelba.com/sports-free-time/land-sports/ - 176. https://www.infoelba.com/sports-free-time/elba-experiences/ - 177. https://www.infoelba.com/sports-free-time/outdoor-sports/ - 178. https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ - 179. https://www.infoelba.com/sports-free-time/courses-study-trips/ - 180. https://www.infoelba.com/sports-free-time/shopping/ - 181. https://www.infoelba.com/sports-free-time/special-events-exhibitions/ - 182. https://www.infoelba.com/discovering-elba/ - 183. https://www.infoelba.com/elba-beaches/ - 184. https://www.infoelba.com/elba-paths-routes/ - 185. https://www.infoelba.com/elba-winter/ - 186. https://www.infoelba.com/discovering-elba/interesting-facts/ - 187. https://www.infoelba.com/discovering-elba/history-of-elba/ - 188. https://www.infoelba.com/discovering-elba/geology-of-elba/ - 189. https://www.infoelba.com/discovering-elba/communes-towns/ - 190. https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ - 191. https://www.infoelba.com/useful-information/webcams/ - 192. https://www.infoelba.com/ - 193. https://areariservata.infoelba.it/ - 194. https://www.infoelba.com/privacy-policy/ - 195. https://www.infoelba.com/cookie-policy/ +Close - Hidden links: - 197. https://facebook.com/Infoelba - 198. https://twitter.com/infoelba - 199. https://instagram.com/infoelba - 200. https://youtube.com/infoelba - 201. https://www.infoelba.it/isola-d-elba/spiagge/spiaggia-sansone/ - 202. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 203. https://www.infoelba.net/insel-elba/straende/strand-sansone/ - 204. https://www.iledelbe.net/ile-d-elbe/plages/plage-sansone/ - 205. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 206. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 207. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 208. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 209. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 210. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 211. https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ - 212. https://www.infoelba.com/where-to-sleep/search/ - 213. https://www.infoelba.com/accommodation-price-availability/ - 214. https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ - 215. https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/booking-on-line/ - 216. https://www.infoelba.com/arriving-getting-about/how-to-get-there/planes/ - 217. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_dsc_9769-20.jpg?quality=90&mode=crop&w=1280 - 218. https://www.elbaspiagge.it/shop/ - 219. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_drone.jpg?quality=90&mode=crop&w=1280 - 220. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_mo.jpg?quality=90&mode=crop&w=1280 - 221. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-sansone1.jpg?quality=90&mode=crop&w=1280 - 222. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_9780.jpg?quality=90&mode=crop&w=1280 - 223. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_9766.jpg?quality=90&mode=crop&w=1280 - 224. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0053.jpg?quality=90&mode=crop&w=1280 - 225. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0009.jpg?quality=90&mode=crop&w=1280 - 226. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0007.jpg?quality=90&mode=crop&w=1280 - 227. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0003.jpg?quality=90&mode=crop&w=1280 - 228. https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0142.jpg?quality=90&mode=crop&w=1280 - 229. https://www.infoelba.com/app +References: + +[2] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[3] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[4] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[5] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/taxis/ +[6] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/buses/ +[7] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/campers-caravas-facilities/ +[8] https://www.infoelba.com/where-to-sleep/search/ +[9] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[10] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[11] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[12] https://www.infoelba.com/island-of-elba/beaches/ +[13] https://www.infoelba.com/island-of-elba/beaches/bathing-establishments/ +[14] https://www.infoelba.com/sports-free-time/water-sports/diving/ +[15] https://www.infoelba.com/sports-free-time/water-sports/sailing/ +[16] https://www.infoelba.com/island-of-elba/guided-excursions/ +[17] https://www.infoelba.com/sports-free-time/ +[18] https://www.infoelba.com/island-of-elba/places-to-see/ +[19] https://www.infoelba.com/special-offers-island-of-elba/ +[20] https://www.infoelba.com/island-of-elba-last-minute-booking/ +[21] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[24] https://facebook.com/Infoelba +[25] https://twitter.com/infoelba +[26] https://instagram.com/infoelba +[27] https://youtube.com/infoelba +[28] https://www.infoelba.it/isola-d-elba/spiagge/spiaggia-sansone/ +[29] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/ +[30] https://www.infoelba.net/insel-elba/straende/strand-sansone/ +[31] https://www.iledelbe.net/ile-d-elbe/plages/plage-sansone/ +[33] https://www.infoelba.com/ +[34] https://www.infoelba.com/arriving-getting-about/ +[35] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[36] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ +[37] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[38] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ +[39] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[40] https://www.infoelba.com/where-to-sleep/ +[41] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[42] https://www.infoelba.com/where-to-sleep/hotels/ +[43] https://www.infoelba.com/where-to-sleep/residences/ +[44] https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ +[45] https://www.infoelba.com/where-to-sleep/apartments/ +[46] https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ +[47] https://www.infoelba.com/where-to-sleep/villas/ +[48] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ +[49] https://www.infoelba.com/where-to-sleep/campsites/ +[50] https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ +[51] https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ +[52] https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ +[53] https://www.infoelba.com/where-to-sleep/luxury-holidays/ +[54] https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ +[55] https://www.infoelba.com/eating-cuisine/ +[56] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[57] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[58] https://www.infoelba.com/eating-cuisine/food-wine-experience/ +[59] https://www.infoelba.com/eating-cuisine/local-recipes/ +[60] https://www.infoelba.com/eating-cuisine/elba-wines/ +[61] https://www.infoelba.com/eating-cuisine/herbs-typical-products/ +[62] https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ +[63] https://www.infoelba.com/useful-information/ +[64] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[65] https://www.infoelba.com/useful-information/elbaok-insurance/ +[66] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ +[67] https://www.infoelba.com/useful-information/weather-island-of-elba/ +[68] https://www.infoelba.com/useful-information/webcams/ +[69] https://www.infoelba.com/useful-information/smartphone-apps/ +[70] https://www.infoelba.com/island-of-elba/ +[71] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[72] https://www.infoelba.com/island-of-elba/beaches/ +[73] https://www.infoelba.com/island-of-elba/places-to-see/ +[74] https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ +[75] https://www.infoelba.com/island-of-elba/guided-excursions/ +[76] https://www.infoelba.com/island-of-elba/suggestions/ +[77] https://www.infoelba.com/island-of-elba/maps/ +[78] https://www.infoelba.com/island-of-elba/personalized-holidays/ +[79] https://www.infoelba.com/island-of-elba/recommended-itineraries/ +[80] https://www.infoelba.com/sports-free-time/ +[81] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[82] https://www.infoelba.com/sports-free-time/water-sports/ +[83] https://www.infoelba.com/sports-free-time/land-sports/ +[84] https://www.infoelba.com/sports-free-time/elba-experiences/ +[85] https://www.infoelba.com/sports-free-time/outdoor-sports/ +[86] https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ +[87] https://www.infoelba.com/sports-free-time/courses-study-trips/ +[88] https://www.infoelba.com/sports-free-time/shopping/ +[89] https://www.infoelba.com/sports-free-time/special-events-exhibitions/ +[90] https://www.infoelba.com/discovering-elba/ +[91] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[92] https://www.infoelba.com/elba-beaches/ +[93] https://www.infoelba.com/elba-paths-routes/ +[94] https://www.infoelba.com/elba-winter/ +[95] https://www.infoelba.com/discovering-elba/interesting-facts/ +[96] https://www.infoelba.com/discovering-elba/history-of-elba/ +[97] https://www.infoelba.com/discovering-elba/geology-of-elba/ +[98] https://www.infoelba.com/discovering-elba/communes-towns/ +[99] https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ +[100] https://www.infoelba.com/useful-information/webcams/ +[101] https://www.infoelba.com/ +[102] https://www.infoelba.com/where-to-sleep/search/ +[103] https://www.infoelba.com/accommodation-price-availability/ +[104] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ +[105] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/booking-on-line/ +[106] https://www.infoelba.com/arriving-getting-about/how-to-get-there/planes/ +[107] https://www.infoelba.com/my-choice/ +[110] https://www.infoelba.com/where-to-sleep/search/ +[111] https://www.infoelba.com/accommodation-price-availability/ +[112] https://www.infoelba.com/island-of-elba-last-minute-booking/ +[113] https://www.infoelba.com/special-offers-island-of-elba/ +[114] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/booking/ +[115] https://www.infoelba.com/real-estate-ads-elba/ +[118] https://www.infoelba.com/ +[119] https://www.infoelba.com/island-of-elba/ +[120] https://www.infoelba.com/island-of-elba/beaches/ +[121] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_dsc_9769-20.jpg?quality=90&mode=crop&w=1280 +[122] https://www.infoelba.com/island-of-elba/beaches/most-beautiful-beaches-in-elba/ +[123] https://www.infoelba.com/island-of-elba/beaches/sorgente-beach/ +[124] https://www.infoelba.com/my-choice/ +[130] https://www.infoelba.com/useful-information/covid-19-safe-holidays/elbaok-insurance/ +[131] https://www.infoelba.com/island-of-elba/beaches/sorgente-beach/ +[132] https://www.infoelba.com/island-of-elba/beaches/acquaviva-beach/ +[133] https://www.infoelba.com/island-of-elba/beaches/viticcio-beach/ +[134] https://www.infoelba.com/island-of-elba/beaches/pinetina-beach/ +[135] https://www.infoelba.com/island-of-elba/beaches/enfola-beach/ +[136] https://www.infoelba.com/island-of-elba/beaches/seccione-beach/ +[137] https://www.infoelba.com/island-of-elba/beaches/forno-beach/ +[138] https://www.infoelba.com/island-of-elba/beaches/sottobomba-beach/ +[139] https://www.infoelba.com/island-of-elba/beaches/scaglieri-beach/ +[140] https://www.infoelba.com/island-of-elba/beaches/biodola-beach/ +[141] https://www.infoelba.com/island-of-elba/beaches/capo-bianco-beach/ +[142] https://www.infoelba.com/island-of-elba/beaches/padulella-beach/ +[143] https://www.infoelba.com/island-of-elba/beaches/lamaia-beach/ +[144] https://www.infoelba.com/island-of-elba/beaches/cala-dei-frati-beach/ +[145] https://www.infoelba.com/island-of-elba/beaches/porticciolo-beach/ +[146] https://www.infoelba.com/island-of-elba/beaches/le-ghiaie-beach/ +[147] https://www.infoelba.com/island-of-elba/beaches/le-viste-beach/ +[148] https://www.infoelba.com/island-of-elba/beaches/procchio-beach/ +[149] https://www.elbaspiagge.it/shop/ +[150] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_drone.jpg?quality=90&mode=crop&w=1280 +[151] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone_mo.jpg?quality=90&mode=crop&w=1280 +[152] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-sansone1.jpg?quality=90&mode=crop&w=1280 +[153] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_9780.jpg?quality=90&mode=crop&w=1280 +[154] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_9766.jpg?quality=90&mode=crop&w=1280 +[155] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0053.jpg?quality=90&mode=crop&w=1280 +[156] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0009.jpg?quality=90&mode=crop&w=1280 +[157] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0007.jpg?quality=90&mode=crop&w=1280 +[158] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0003.jpg?quality=90&mode=crop&w=1280 +[159] https://dati.infoelba.it/media/photos/isola-d-elba/spiagge/sansone/o_sansone-dsc_0142.jpg?quality=90&mode=crop&w=1280 +[160] https://www.infoelba.com/where-to-sleep/apartments/casa-di-alessio-1772/ +[161] https://www.infoelba.com/where-to-sleep/apartments/casa-di-alessio-1772/ +[162] https://www.infoelba.com/requests/direct-popup.asp?struttura=1772 +[163] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[164] https://www.infoelba.com/where-to-sleep/campsites/camping-la-sorgente-489/ +[165] https://www.infoelba.com/where-to-sleep/campsites/camping-la-sorgente-489/ +[166] https://www.infoelba.com/requests/direct-popup.asp?struttura=489 +[167] https://pricelists.infoelba.it/Estimate.aspx?structure=489&language=en-GB +[168] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[169] https://www.infoelba.com/where-to-sleep/hotels/hotel-paradiso-186/ +[170] https://www.infoelba.com/where-to-sleep/hotels/hotel-paradiso-186/ +[171] https://www.infoelba.com/requests/direct-popup.asp?struttura=186 +[172] https://www.infoelba.com/island-of-elba/beaches/sansone-beach/# +[173] https://www.infoelba.com/app +[174] https://www.infoelba.com/arriving-getting-about/ +[175] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ +[176] https://www.infoelba.com/arriving-getting-about/how-to-get-there/ferries/ +[177] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/ +[178] https://www.infoelba.com/arriving-getting-about/getting-about-on-the-island/hire-rental/ +[179] https://www.infoelba.com/where-to-sleep/ +[180] https://www.infoelba.com/where-to-sleep/hotels/ +[181] https://www.infoelba.com/where-to-sleep/residences/ +[182] https://www.infoelba.com/where-to-sleep/bed-and-breakfasts/ +[183] https://www.infoelba.com/where-to-sleep/apartments/ +[184] https://www.infoelba.com/where-to-sleep/small-villas-detached-houses/ +[185] https://www.infoelba.com/where-to-sleep/villas/ +[186] https://www.infoelba.com/where-to-sleep/farm-holiday-centres/ +[187] https://www.infoelba.com/where-to-sleep/campsites/ +[188] https://www.infoelba.com/where-to-sleep/campers-caravas-facilities/ +[189] https://www.infoelba.com/where-to-sleep/farm-holiday-campsites/ +[190] https://www.infoelba.com/where-to-sleep/accommodation-open-all-year-round/ +[191] https://www.infoelba.com/where-to-sleep/luxury-holidays/ +[192] https://www.infoelba.com/where-to-sleep/travel-agencies-realtors/ +[193] https://www.infoelba.com/eating-cuisine/ +[194] https://www.infoelba.com/eating-cuisine/restaurants-pizzerias/ +[195] https://www.infoelba.com/eating-cuisine/food-wine-experience/ +[196] https://www.infoelba.com/eating-cuisine/local-recipes/ +[197] https://www.infoelba.com/eating-cuisine/elba-wines/ +[198] https://www.infoelba.com/eating-cuisine/herbs-typical-products/ +[199] https://www.infoelba.com/eating-cuisine/origins-typical-dishes/ +[200] https://www.infoelba.com/useful-information/ +[201] https://www.infoelba.com/useful-information/elbaok-insurance/ +[202] https://www.infoelba.com/useful-information/useful-phone-numbers-addresses/ +[203] https://www.infoelba.com/useful-information/weather-island-of-elba/ +[204] https://www.infoelba.com/useful-information/webcams/ +[205] https://www.infoelba.com/useful-information/smartphone-apps/ +[206] https://www.infoelba.com/island-of-elba/ +[207] https://www.infoelba.com/island-of-elba/beaches/ +[208] https://www.infoelba.com/island-of-elba/places-to-see/ +[209] https://www.infoelba.com/island-of-elba/tuscan-archipelago-national-park/ +[210] https://www.infoelba.com/island-of-elba/guided-excursions/ +[211] https://www.infoelba.com/island-of-elba/suggestions/ +[212] https://www.infoelba.com/island-of-elba/maps/ +[213] https://www.infoelba.com/island-of-elba/personalized-holidays/ +[214] https://www.infoelba.com/island-of-elba/recommended-itineraries/ +[215] https://www.infoelba.com/sports-free-time/ +[216] https://www.infoelba.com/sports-free-time/water-sports/ +[217] https://www.infoelba.com/sports-free-time/land-sports/ +[218] https://www.infoelba.com/sports-free-time/elba-experiences/ +[219] https://www.infoelba.com/sports-free-time/outdoor-sports/ +[220] https://www.infoelba.com/sports-free-time/enjoyment-relaxation/ +[221] https://www.infoelba.com/sports-free-time/courses-study-trips/ +[222] https://www.infoelba.com/sports-free-time/shopping/ +[223] https://www.infoelba.com/sports-free-time/special-events-exhibitions/ +[224] https://www.infoelba.com/discovering-elba/ +[225] https://www.infoelba.com/elba-beaches/ +[226] https://www.infoelba.com/elba-paths-routes/ +[227] https://www.infoelba.com/elba-winter/ +[228] https://www.infoelba.com/discovering-elba/interesting-facts/ +[229] https://www.infoelba.com/discovering-elba/history-of-elba/ +[230] https://www.infoelba.com/discovering-elba/geology-of-elba/ +[231] https://www.infoelba.com/discovering-elba/communes-towns/ +[232] https://www.infoelba.com/discovering-elba/media-gallery-island-of-elba/ +[233] https://www.infoelba.com/useful-information/webcams/ +[234] https://www.infoelba.com/ +[235] https://areariservata.infoelba.it/ +[236] https://www.infoelba.com/privacy-policy/ +[237] https://www.infoelba.com/cookie-policy/ diff --git a/static/archive/www-newyorker-com-41taro.txt b/static/archive/www-newyorker-com-41taro.txt index 03829da..3e54e67 100644 --- a/static/archive/www-newyorker-com-41taro.txt +++ b/static/archive/www-newyorker-com-41taro.txt @@ -1,723 +1,689 @@ - #[1]alternate +[1]Skip to main content +[2]The New Yorker - IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-NX5LSK3 + • [3]Newsletter - [3]Skip to main content +To revisit this article, select My Account, then [4]View saved stories - [4]The New Yorker +Close Alert +[6]Sign In +[7]Search - * [5]Newsletter + • [8]The Latest + • [9]News + • [10]Books & Culture + • [11]Fiction & Poetry + • [12]Humor & Cartoons + • [13]Magazine + • [14]Puzzles & Games + • [15]Video + • [16]Podcasts + • [17]Goings On + • [18]Shop - To revisit this article, select My Account, then [6]View saved stories - (BUTTON) Close Alert - [7]Sign In - [8]Search +Open Navigation Menu - * [9]The Latest - * [10]News - * [11]Books & Culture - * [12]Fiction & Poetry - * [13]Humor & Cartoons - * [14]Magazine - * [15]Puzzles & Games - * [16]Video - * [17]Podcasts - * [18]Goings On - * [19]Shop +Find anything you save across the site in your account [20] - (BUTTON) Open Navigation Menu - - Find anything you save across the site in your account - (BUTTON) Close Alert - [20]The New Yorker - - [21]Personal History +Close Alert +[22]The New Yorker +[23]Personal History A Coder Considers the Waning Days of the Craft - Coding has always felt to me like an endlessly deep and rich domain. - Now I find myself wanting to write a eulogy for it. +Coding has always felt to me like an endlessly deep and rich domain. Now I find +myself wanting to write a eulogy for it. - By [22]James Somers - November 13, 2023 - * - * - * - * - * +By [24]James Somers - (BUTTON) Play/Pause Button - Artificial intelligence still can’t beat a human when it comes to - programming. But it’s only a matter of time.Illustration by Dev - Valladares +November 13, 2023 - (BUTTON) Save this story - (BUTTON) Save this story + • [25] + • [26] + • [27] + • [28] + • [29] - I have always taken it for granted that, just as my parents made sure - that I could read and write, I would make sure that my kids could - program computers. It is among the newer arts but also among the most - essential, and ever more so by the day, encompassing everything from - filmmaking to physics. Fluency with code would round out my children’s - literacy—and keep them employable. But as I write this my wife is - pregnant with our first child, due in about three weeks. I code - professionally, but, by the time that child can type, coding as a - valuable skill might have faded from the world. +Play/Pause Button +Artificial intelligence still can’t beat a human when it comes to programming. +But it’s only a matter of time.Illustration by Dev Valladares +Save this story +Save this story - I first began to believe this on a Friday morning this past summer, - while working on a small hobby project. A few months back, my friend - Ben and I had resolved to create a Times-style crossword puzzle - entirely by computer. In 2018, we’d made a Saturday puzzle with the - help of software and were surprised by how little we contributed—just - applying our taste here and there. Now we would attempt to build a - crossword-making program that didn’t require a human touch. +I have always taken it for granted that, just as my parents made sure that I +could read and write, I would make sure that my kids could program computers. +It is among the newer arts but also among the most essential, and ever more so +by the day, encompassing everything from filmmaking to physics. Fluency with +code would round out my children’s literacy—and keep them employable. But as I +write this my wife is pregnant with our first child, due in about three weeks. +I code professionally, but, by the time that child can type, coding as a +valuable skill might have faded from the world. - When we’ve taken on projects like this in the past, they’ve had both a - hardware component and a software component, with Ben’s strengths - running toward the former. We once made a neon sign that would glow - when the subway was approaching the stop near our apartments. Ben bent - the glass and wired up the transformer’s circuit board. I wrote code to - process the transit data. Ben has some professional coding experience - of his own, but it was brief, shallow, and now about twenty years out - of date; the serious coding was left to me. For the new crossword - project, though, Ben had introduced a third party. He’d signed up for a - ChatGPT Plus subscription and was using GPT-4 as a coding assistant. - [23]More on A.I. +I first began to believe this on a Friday morning this past summer, while +working on a small hobby project. A few months back, my friend Ben and I had +resolved to create a Times-style crossword puzzle entirely by computer. In +2018, we’d made a Saturday puzzle with the help of software and were surprised +by how little we contributed—just applying our taste here and there. Now we +would attempt to build a crossword-making program that didn’t require a human +touch. - [24]Sign up for The New Yorker’s weekly Science & Technology - newsletter. +When we’ve taken on projects like this in the past, they’ve had both a hardware +component and a software component, with Ben’s strengths running toward the +former. We once made a neon sign that would glow when the subway was +approaching the stop near our apartments. Ben bent the glass and wired up the +transformer’s circuit board. I wrote code to process the transit data. Ben has +some professional coding experience of his own, but it was brief, shallow, and +now about twenty years out of date; the serious coding was left to me. For the +new crossword project, though, Ben had introduced a third party. He’d signed up +for a ChatGPT Plus subscription and was using GPT-4 as a coding assistant. - Something strange started happening. Ben and I would talk about a bit - of software we wanted for the project. Then, a shockingly short time - later, Ben would deliver it himself. At one point, we wanted a command - that would print a hundred random lines from a dictionary file. I - thought about the problem for a few minutes, and, when thinking failed, - tried Googling. I made some false starts using what I could gather, and - while I did my thing—programming—Ben told GPT-4 what he wanted and got - code that ran perfectly. +[33]More on A.I. - Fine: commands like those are notoriously fussy, and everybody looks - them up anyway. It’s not real programming. A few days later, Ben talked - about how it would be nice to have an iPhone app to rate words from the - dictionary. But he had no idea what a pain it is to make an iPhone app. - I’d tried a few times and never got beyond something that half worked. - I found Apple’s programming environment forbidding. You had to learn - not just a new language but a new program for editing and running code; - you had to learn a zoo of “U.I. components” and all the complicated - ways of stitching them together; and, finally, you had to figure out - how to package the app. The mountain of new things to learn never - seemed worth it. The next morning, I woke up to an app in my in-box - that did exactly what Ben had said he wanted. It worked perfectly, and - even had a cute design. Ben said that he’d made it in a few hours. - GPT-4 had done most of the heavy lifting. +[34]Sign up for The New Yorker’s weekly Science & Technology newsletter. - By now, most people have had experiences with A.I. Not everyone has - been impressed. Ben recently said, “I didn’t start really respecting it - until I started having it write code for me.” I suspect that - non-programmers who are skeptical by nature, and who have seen ChatGPT - turn out wooden prose or bogus facts, are still underestimating what’s - happening. +Something strange started happening. Ben and I would talk about a bit of +software we wanted for the project. Then, a shockingly short time later, Ben +would deliver it himself. At one point, we wanted a command that would print a +hundred random lines from a dictionary file. I thought about the problem for a +few minutes, and, when thinking failed, tried Googling. I made some false +starts using what I could gather, and while I did my thing—programming—Ben told +GPT-4 what he wanted and got code that ran perfectly. - Bodies of knowledge and skills that have traditionally taken lifetimes - to master are being swallowed at a gulp. Coding has always felt to me - like an endlessly deep and rich domain. Now I find myself wanting to - write a eulogy for it. I keep thinking of Lee Sedol. Sedol was one of - the world’s best Go players, and a national hero in South Korea, but is - now best known for losing, in 2016, to a computer program called - AlphaGo. Sedol had walked into the competition believing that he would - easily defeat the A.I. By the end of the days-long match, he was proud - of having eked out a single game. As it became clear that he was going - to lose, Sedol said, in a press conference, “I want to apologize for - being so powerless.” He retired three years later. Sedol seemed weighed - down by a question that has started to feel familiar, and urgent: What - will become of this thing I’ve given so much of my life to? +Fine: commands like those are notoriously fussy, and everybody looks them up +anyway. It’s not real programming. A few days later, Ben talked about how it +would be nice to have an iPhone app to rate words from the dictionary. But he +had no idea what a pain it is to make an iPhone app. I’d tried a few times and +never got beyond something that half worked. I found Apple’s programming +environment forbidding. You had to learn not just a new language but a new +program for editing and running code; you had to learn a zoo of “U.I. +components” and all the complicated ways of stitching them together; and, +finally, you had to figure out how to package the app. The mountain of new +things to learn never seemed worth it. The next morning, I woke up to an app in +my in-box that did exactly what Ben had said he wanted. It worked perfectly, +and even had a cute design. Ben said that he’d made it in a few hours. GPT-4 +had done most of the heavy lifting. - My first enchantment with computers came when I was about six years - old, in Montreal in the early nineties, playing Mortal Kombat with my - oldest brother. He told me about some “fatalities”—gruesome, witty ways - of killing your opponent. Neither of us knew how to inflict them. He - dialled up an FTP server (where files were stored) in an MS-DOS - terminal and typed obscure commands. Soon, he had printed out a page of - codes—instructions for every fatality in the game. We went back to the - basement and exploded each other’s heads. +By now, most people have had experiences with A.I. Not everyone has been +impressed. Ben recently said, “I didn’t start really respecting it until I +started having it write code for me.” I suspect that non-programmers who are +skeptical by nature, and who have seen ChatGPT turn out wooden prose or bogus +facts, are still underestimating what’s happening. - I thought that my brother was a hacker. Like many programmers, I - dreamed of breaking into and controlling remote systems. The point - wasn’t to cause mayhem—it was to find hidden places and learn hidden - things. “My crime is that of curiosity,” goes “The Hacker’s Manifesto,” - written in 1986 by Loyd Blankenship. My favorite scene from the 1995 - movie “Hackers” is when Dade Murphy, a newcomer, proves himself at an - underground club. Someone starts pulling a rainbow of computer books - out of a backpack, and Dade recognizes each one from the cover: the - green book on international Unix environments; the red one on - N.S.A.-trusted networks; the one with the pink-shirted guy on I.B.M. - PCs. Dade puts his expertise to use when he turns on the sprinkler - system at school, and helps right the ballast of an oil tanker—all by - tap-tapping away at a keyboard. The lesson was that knowledge is power. +Bodies of knowledge and skills that have traditionally taken lifetimes to +master are being swallowed at a gulp. Coding has always felt to me like an +endlessly deep and rich domain. Now I find myself wanting to write a eulogy for +it. I keep thinking of Lee Sedol. Sedol was one of the world’s best Go players, +and a national hero in South Korea, but is now best known for losing, in 2016, +to a computer program called AlphaGo. Sedol had walked into the competition +believing that he would easily defeat the A.I. By the end of the days-long +match, he was proud of having eked out a single game. As it became clear that +he was going to lose, Sedol said, in a press conference, “I want to apologize +for being so powerless.” He retired three years later. Sedol seemed weighed +down by a question that has started to feel familiar, and urgent: What will +become of this thing I’ve given so much of my life to? - But how do you actually learn to hack? My family had settled in New - Jersey by the time I was in fifth grade, and when I was in high school - I went to the Borders bookstore in the Short Hills mall and bought - “Beginning Visual C++,” by Ivor Horton. It ran to twelve hundred - pages—my first grimoire. Like many tutorials, it was easy at first and - then, suddenly, it wasn’t. Medieval students called the moment at which - casual learners fail the pons asinorum, or “bridge of asses.” The term - was inspired by Proposition 5 of Euclid’s Elements I, the first truly - difficult idea in the book. Those who crossed the bridge would go on to - master geometry; those who didn’t would remain dabblers. Section 4.3 of - “Beginning Visual C++,” on “Dynamic Memory Allocation,” was my bridge - of asses. I did not cross. +My first enchantment with computers came when I was about six years old, in +Montreal in the early nineties, playing Mortal Kombat with my oldest brother. +He told me about some “fatalities”—gruesome, witty ways of killing your +opponent. Neither of us knew how to inflict them. He dialled up an FTP server +(where files were stored) in an MS-DOS terminal and typed obscure commands. +Soon, he had printed out a page of codes—instructions for every fatality in the +game. We went back to the basement and exploded each other’s heads. - But neither did I drop the subject. I remember the moment things began - to turn. I was on a long-haul flight, and I’d brought along a boxy - black laptop and a CD-ROM with the Borland C++ compiler. A compiler - translates code you write into code that the machine can run; I had - been struggling for days to get this one to work. By convention, every - coder’s first program does nothing but generate the words “Hello, - world.” When I tried to run my version, I just got angry error - messages. Whenever I fixed one problem, another cropped up. I had read - the “Harry Potter” books and felt as if I were in possession of a broom - but had not yet learned the incantation to make it fly. Knowing what - might be possible if I did, I kept at it with single-minded devotion. - What I learned was that programming is not really about knowledge or - skill but simply about patience, or maybe obsession. Programmers are - people who can endure an endless parade of tedious obstacles. Imagine - explaining to a simpleton how to assemble furniture over the phone, - with no pictures, in a language you barely speak. Imagine, too, that - the only response you ever get is that you’ve suggested an absurdity - and the whole thing has gone awry. All the sweeter, then, when you - manage to get something assembled. I have a distinct memory of lying on - my stomach in the airplane aisle, and then hitting Enter one last time. - I sat up. The computer, for once, had done what I’d told it to do. The - words “Hello, world” appeared above my cursor, now in the computer’s - own voice. It seemed as if an intelligence had woken up and introduced - itself to me. +I thought that my brother was a hacker. Like many programmers, I dreamed of +breaking into and controlling remote systems. The point wasn’t to cause +mayhem—it was to find hidden places and learn hidden things. “My crime is that +of curiosity,” goes “The Hacker’s Manifesto,” written in 1986 by Loyd +Blankenship. My favorite scene from the 1995 movie “Hackers” is when Dade +Murphy, a newcomer, proves himself at an underground club. Someone starts +pulling a rainbow of computer books out of a backpack, and Dade recognizes each +one from the cover: the green book on international Unix environments; the red +one on N.S.A.-trusted networks; the one with the pink-shirted guy on I.B.M. +PCs. Dade puts his expertise to use when he turns on the sprinkler system at +school, and helps right the ballast of an oil tanker—all by tap-tapping away at +a keyboard. The lesson was that knowledge is power. - Most of us never became the kind of hackers depicted in “Hackers.” To - “hack,” in the parlance of a programmer, is just to tinker—to express - ingenuity through code. I never formally studied programming; I just - kept messing around, making computers do helpful or delightful little - things. In my freshman year of college, I knew that I’d be on the road - during the third round of the 2006 Masters Tournament, when Tiger Woods - was moving up the field, and I wanted to know what was happening in - real time. So I made a program that scraped the leaderboard on - pgatour.com and sent me a text message anytime he birdied or bogeyed. - Later, after reading “Ulysses” in an English class, I wrote a program - that pulled random sentences from the book, counted their syllables, - and assembled haikus—a more primitive regurgitation of language than - you’d get from a chatbot these days, but nonetheless capable, I - thought, of real poetry: +But how do you actually learn to hack? My family had settled in New Jersey by +the time I was in fifth grade, and when I was in high school I went to the +Borders bookstore in the Short Hills mall and bought “Beginning Visual C++,” by +Ivor Horton. It ran to twelve hundred pages—my first grimoire. Like many +tutorials, it was easy at first and then, suddenly, it wasn’t. Medieval +students called the moment at which casual learners fail the pons asinorum, or +“bridge of asses.” The term was inspired by Proposition 5 of Euclid’s Elements +I, the first truly difficult idea in the book. Those who crossed the bridge +would go on to master geometry; those who didn’t would remain dabblers. Section +4.3 of “Beginning Visual C++,” on “Dynamic Memory Allocation,” was my bridge of +asses. I did not cross. - I’ll flay him alive - Uncertainly he waited - Heavy of the past +But neither did I drop the subject. I remember the moment things began to turn. +I was on a long-haul flight, and I’d brought along a boxy black laptop and a +CD-ROM with the Borland C++ compiler. A compiler translates code you write into +code that the machine can run; I had been struggling for days to get this one +to work. By convention, every coder’s first program does nothing but generate +the words “Hello, world.” When I tried to run my version, I just got angry +error messages. Whenever I fixed one problem, another cropped up. I had read +the “Harry Potter” books and felt as if I were in possession of a broom but had +not yet learned the incantation to make it fly. Knowing what might be possible +if I did, I kept at it with single-minded devotion. What I learned was that +programming is not really about knowledge or skill but simply about patience, +or maybe obsession. Programmers are people who can endure an endless parade of +tedious obstacles. Imagine explaining to a simpleton how to assemble furniture +over the phone, with no pictures, in a language you barely speak. Imagine, too, +that the only response you ever get is that you’ve suggested an absurdity and +the whole thing has gone awry. All the sweeter, then, when you manage to get +something assembled. I have a distinct memory of lying on my stomach in the +airplane aisle, and then hitting Enter one last time. I sat up. The computer, +for once, had done what I’d told it to do. The words “Hello, world” appeared +above my cursor, now in the computer’s own voice. It seemed as if an +intelligence had woken up and introduced itself to me. - I began taking coding seriously. I offered to do programming for a - friend’s startup. The world of computing, I came to learn, is vast but - organized almost geologically, as if deposited in layers. From the Web - browser down to the transistor, each sub-area or system is built atop - some other, older sub-area or system, the layers dense but legible. The - more one digs, the more one develops what the race-car driver Jackie - Stewart called “mechanical sympathy,” a sense for the machine’s - strengths and limits, of what one could make it do. +Most of us never became the kind of hackers depicted in “Hackers.” To “hack,” +in the parlance of a programmer, is just to tinker—to express ingenuity through +code. I never formally studied programming; I just kept messing around, making +computers do helpful or delightful little things. In my freshman year of +college, I knew that I’d be on the road during the third round of the 2006 +Masters Tournament, when Tiger Woods was moving up the field, and I wanted to +know what was happening in real time. So I made a program that scraped the +leaderboard on pgatour.com and sent me a text message anytime he birdied or +bogeyed. Later, after reading “Ulysses” in an English class, I wrote a program +that pulled random sentences from the book, counted their syllables, and +assembled haikus—a more primitive regurgitation of language than you’d get from +a chatbot these days, but nonetheless capable, I thought, of real poetry: - At my friend’s company, I felt my mechanical sympathy developing. In my - sophomore year, I was watching “Jeopardy!” with a friend when he - suggested that I make a playable version of the show. I thought about - it for a few hours before deciding, with much disappointment, that it - was beyond me. But when the idea came up again, in my junior year, I - could see a way through it. I now had a better sense of what one could - do with the machine. I spent the next fourteen hours building the game. - Within weeks, playing “Jimbo Jeopardy!” had become a regular activity - among my friends. The experience was profound. I could understand why - people poured their lives into craft: there is nothing quite like - watching someone enjoy a thing you’ve made. + I’ll flay him alive + Uncertainly he waited + Heavy of the past - In the midst of all this, I had gone full “Paper Chase” and begun - ignoring my grades. I worked voraciously, just not on my coursework. - One night, I took over a half-dozen machines in a basement computer lab - to run a program in parallel. I laid printouts full of numbers across - the floor, thinking through a pathfinding algorithm. The cost was that - I experienced for real that recurring nightmare in which you show up - for a final exam knowing nothing of the material. (Mine was in Real - Analysis, in the math department.) In 2009, during the most severe - financial crisis in decades, I graduated with a 2.9 G.P.A. +I began taking coding seriously. I offered to do programming for a friend’s +startup. The world of computing, I came to learn, is vast but organized almost +geologically, as if deposited in layers. From the Web browser down to the +transistor, each sub-area or system is built atop some other, older sub-area or +system, the layers dense but legible. The more one digs, the more one develops +what the race-car driver Jackie Stewart called “mechanical sympathy,” a sense +for the machine’s strengths and limits, of what one could make it do. - And yet I got my first full-time job easily. I had work experience as a - programmer; nobody asked about my grades. For the young coder, these - were boom times. Companies were getting into bidding wars over top - programmers. Solicitations for experienced programmers were so - aggressive that they complained about “recruiter spam.” The popularity - of university computer-science programs was starting to explode. (My - degree was in economics.) Coding “boot camps” sprang up that could - credibly claim to turn beginners into high-salaried programmers in less - than a year. At one of my first job interviews, in my early twenties, - the C.E.O. asked how much I thought I deserved to get paid. I dared to - name a number that faintly embarrassed me. He drew up a contract on the - spot, offering ten per cent more. The skills of a “software engineer” - were vaunted. At one company where I worked, someone got in trouble for - using HipChat, a predecessor to Slack, to ask one of my colleagues a - question. “Never HipChat an engineer directly,” he was told. We were - too important for that. +At my friend’s company, I felt my mechanical sympathy developing. In my +sophomore year, I was watching “Jeopardy!” with a friend when he suggested that +I make a playable version of the show. I thought about it for a few hours +before deciding, with much disappointment, that it was beyond me. But when the +idea came up again, in my junior year, I could see a way through it. I now had +a better sense of what one could do with the machine. I spent the next fourteen +hours building the game. Within weeks, playing “Jimbo Jeopardy!” had become a +regular activity among my friends. The experience was profound. I could +understand why people poured their lives into craft: there is nothing quite +like watching someone enjoy a thing you’ve made. - This was an era of near-zero interest rates and extraordinary - tech-sector growth. Certain norms were established. Companies like - Google taught the industry that coders were to have free espresso and - catered hot food, world-class health care and parental leave, on-site - gyms and bike rooms, a casual dress code, and “twenty-per-cent time,” - meaning that they could devote one day a week to working on whatever - they pleased. Their skills were considered so crucial and delicate that - a kind of superstition developed around the work. For instance, it was - considered foolish to estimate how long a coding task might take, since - at any moment the programmer might turn over a rock and discover a - tangle of bugs. Deadlines were anathema. If the pressure to deliver - ever got too intense, a coder needed only to speak the word “burnout” - to buy a few months. +In the midst of all this, I had gone full “Paper Chase” and begun ignoring my +grades. I worked voraciously, just not on my coursework. One night, I took over +a half-dozen machines in a basement computer lab to run a program in parallel. +I laid printouts full of numbers across the floor, thinking through a +pathfinding algorithm. The cost was that I experienced for real that recurring +nightmare in which you show up for a final exam knowing nothing of the +material. (Mine was in Real Analysis, in the math department.) In 2009, during +the most severe financial crisis in decades, I graduated with a 2.9 G.P.A. - From the beginning, I had the sense that there was something - wrongheaded in all this. Was what we did really so precious? How long - could the boom last? In my teens, I had done a little Web design, and, - at the time, that work had been in demand and highly esteemed. You - could earn thousands of dollars for a project that took a weekend. But - along came tools like Squarespace, which allowed pizzeria owners and - freelance artists to make their own Web sites just by clicking around. - For professional coders, a tranche of high-paying, relatively - low-effort work disappeared. - [25]“I should have known he has absolutely no morals—Ive seen how he - loads a dishwasher.” - “I should have known he has absolutely no morals—I’ve seen how he loads - a dishwasher.” - Cartoon by Hartley Lin - (BUTTON) Copy link to cartoon +And yet I got my first full-time job easily. I had work experience as a +programmer; nobody asked about my grades. For the young coder, these were boom +times. Companies were getting into bidding wars over top programmers. +Solicitations for experienced programmers were so aggressive that they +complained about “recruiter spam.” The popularity of university +computer-science programs was starting to explode. (My degree was in +economics.) Coding “boot camps” sprang up that could credibly claim to turn +beginners into high-salaried programmers in less than a year. At one of my +first job interviews, in my early twenties, the C.E.O. asked how much I thought +I deserved to get paid. I dared to name a number that faintly embarrassed me. +He drew up a contract on the spot, offering ten per cent more. The skills of a +“software engineer” were vaunted. At one company where I worked, someone got in +trouble for using HipChat, a predecessor to Slack, to ask one of my colleagues +a question. “Never HipChat an engineer directly,” he was told. We were too +important for that. - Link copied - (BUTTON) Shop +This was an era of near-zero interest rates and extraordinary tech-sector +growth. Certain norms were established. Companies like Google taught the +industry that coders were to have free espresso and catered hot food, +world-class health care and parental leave, on-site gyms and bike rooms, a +casual dress code, and “twenty-per-cent time,” meaning that they could devote +one day a week to working on whatever they pleased. Their skills were +considered so crucial and delicate that a kind of superstition developed around +the work. For instance, it was considered foolish to estimate how long a coding +task might take, since at any moment the programmer might turn over a rock and +discover a tangle of bugs. Deadlines were anathema. If the pressure to deliver +ever got too intense, a coder needed only to speak the word “burnout” to buy a +few months. - The response from the programmer community to these developments was - just, Yeah, you have to keep levelling up your skills. Learn difficult, - obscure things. Software engineers, as a species, love automation. - Inevitably, the best of them build tools that make other kinds of work - obsolete. This very instinct explained why we were so well taken care - of: code had immense leverage. One piece of software could affect the - work of millions of people. Naturally, this sometimes displaced - programmers themselves. We were to think of these advances as a tide - coming in, nipping at our bare feet. So long as we kept learning we - would stay dry. Sound advice—until there’s a tsunami. +From the beginning, I had the sense that there was something wrongheaded in all +this. Was what we did really so precious? How long could the boom last? In my +teens, I had done a little Web design, and, at the time, that work had been in +demand and highly esteemed. You could earn thousands of dollars for a project +that took a weekend. But along came tools like Squarespace, which allowed +pizzeria owners and freelance artists to make their own Web sites just by +clicking around. For professional coders, a tranche of high-paying, relatively +low-effort work disappeared. - When we were first allowed to use A.I. chatbots at work, for - programming assistance, I studiously avoided them. I expected that my - colleagues would, too. But soon I started seeing the telltale colors of - an A.I. chat session—the zebra pattern of call-and-response—on - programmers’ screens as I walked to my desk. A common refrain was that - these tools made you more productive; in some cases, they helped you - solve problems ten times faster. +[35]“I should have known he has absolutely no morals—Ive seen how he loads a +dishwasher.” +“I should have known he has absolutely no morals—I’ve seen how he loads a +dishwasher.” +Cartoon by Hartley Lin +Copy link to cartoon - I wasn’t sure I wanted that. I enjoy the act of programming and I like - to feel useful. The tools I’m familiar with, like the text editor I use - to format and to browse code, serve both ends. They enhance my practice - of the craft—and, though they allow me to deliver work faster, I still - feel that I deserve the credit. But A.I., as it was being described, - seemed different. It provided a lot of help. I worried that it would - rob me of both the joy of working on puzzles and the satisfaction of - being the one who solved them. I could be infinitely productive, and - all I’d have to show for it would be the products themselves. +Link copied - The actual work product of most programmers is rarely exciting. In - fact, it tends to be almost comically humdrum. A few months ago, I came - home from the office and told my wife about what a great day I’d had - wrestling a particularly fun problem. I was working on a program that - generated a table, and someone had wanted to add a header that spanned - more than one column—something that the custom layout engine we’d - written didn’t support. The work was urgent: these tables were being - used in important documents, wanted by important people. So I - sequestered myself in a room for the better part of the afternoon. - There were lots of lovely sub-problems: How should I allow users of the - layout engine to convey that they want a column-spanning header? What - should their code look like? And there were fiddly details that, if - ignored, would cause bugs. For instance, what if one of the columns - that the header was supposed to span got dropped because it didn’t have - any data? I knew it was a good day because I had to pull out pen and - pad—I was drawing out possible scenarios, checking and double-checking - my logic. +Shop - But taking a bird’s-eye view of what happened that day? A table got a - new header. It’s hard to imagine anything more mundane. For me, the - pleasure was entirely in the process, not the product. And what would - become of the process if it required nothing more than a three-minute - ChatGPT session? Yes, our jobs as programmers involve many things - besides literally writing code, such as coaching junior hires and - designing systems at a high level. But coding has always been the root - of it. Throughout my career, I have been interviewed and selected - precisely for my ability to solve fiddly little programming puzzles. - Suddenly, this ability was less important. +The response from the programmer community to these developments was just, +Yeah, you have to keep levelling up your skills. Learn difficult, obscure +things. Software engineers, as a species, love automation. Inevitably, the best +of them build tools that make other kinds of work obsolete. This very instinct +explained why we were so well taken care of: code had immense leverage. One +piece of software could affect the work of millions of people. Naturally, this +sometimes displaced programmers themselves. We were to think of these advances +as a tide coming in, nipping at our bare feet. So long as we kept learning we +would stay dry. Sound advice—until there’s a tsunami. - I had gathered as much from Ben, who kept telling me about the - spectacular successes he’d been having with GPT-4. It turned out that - it was not only good at the fiddly stuff but also had the qualities of - a senior engineer: from a deep well of knowledge, it could suggest ways - of approaching a problem. For one project, Ben had wired a small - speaker and a red L.E.D. light bulb into the frame of a portrait of - King Charles, the light standing in for the gem in his crown; the idea - was that when you entered a message on an accompanying Web site the - speaker would play a tune and the light would flash out the message in - Morse code. (This was a gift for an eccentric British expat.) - Programming the device to fetch new messages eluded Ben; it seemed to - require specialized knowledge not just of the microcontroller he was - using but of Firebase, the back-end server technology that stored the - messages. Ben asked me for advice, and I mumbled a few possibilities; - in truth, I wasn’t sure that what he wanted would be possible. Then he - asked GPT-4. It told Ben that Firebase had a capability that would make - the project much simpler. Here it was—and here was some code to use - that would be compatible with the microcontroller. +When we were first allowed to use A.I. chatbots at work, for programming +assistance, I studiously avoided them. I expected that my colleagues would, +too. But soon I started seeing the telltale colors of an A.I. chat session—the +zebra pattern of call-and-response—on programmers’ screens as I walked to my +desk. A common refrain was that these tools made you more productive; in some +cases, they helped you solve problems ten times faster. - Afraid to use GPT-4 myself—and feeling somewhat unclean about the - prospect of paying OpenAI twenty dollars a month for it—I nonetheless - started probing its capabilities, via Ben. We’d sit down to work on our - crossword project, and I’d say, “Why don’t you try prompting it this - way?” He’d offer me the keyboard. “No, you drive,” I’d say. Together, - we developed a sense of what the A.I. could do. Ben, who had more - experience with it than I did, seemed able to get more out of it in a - stroke. As he later put it, his own neural network had begun to align - with GPT-4’s. I would have said that he had achieved mechanical - sympathy. Once, in a feat I found particularly astonishing, he had the - A.I. build him a Snake game, like the one on old Nokia phones. But - then, after a brief exchange with GPT-4, he got it to modify the game - so that when you lost it would show you how far you strayed from the - most efficient route. It took the bot about ten seconds to achieve - this. It was a task that, frankly, I was not sure I could do myself. +I wasn’t sure I wanted that. I enjoy the act of programming and I like to feel +useful. The tools I’m familiar with, like the text editor I use to format and +to browse code, serve both ends. They enhance my practice of the craft—and, +though they allow me to deliver work faster, I still feel that I deserve the +credit. But A.I., as it was being described, seemed different. It provided a +lot of help. I worried that it would rob me of both the joy of working on +puzzles and the satisfaction of being the one who solved them. I could be +infinitely productive, and all I’d have to show for it would be the products +themselves. - In chess, which for decades now has been dominated by A.I., a player’s - only hope is pairing up with a bot. Such half-human, half-A.I. teams, - known as centaurs, might still be able to beat the best humans and the - best A.I. engines working alone. Programming has not yet gone the way - of chess. But the centaurs have arrived. GPT-4 on its own is, for the - moment, a worse programmer than I am. Ben is much worse. But Ben plus - GPT-4 is a dangerous thing. +The actual work product of most programmers is rarely exciting. In fact, it +tends to be almost comically humdrum. A few months ago, I came home from the +office and told my wife about what a great day I’d had wrestling a particularly +fun problem. I was working on a program that generated a table, and someone had +wanted to add a header that spanned more than one column—something that the +custom layout engine we’d written didn’t support. The work was urgent: these +tables were being used in important documents, wanted by important people. So I +sequestered myself in a room for the better part of the afternoon. There were +lots of lovely sub-problems: How should I allow users of the layout engine to +convey that they want a column-spanning header? What should their code look +like? And there were fiddly details that, if ignored, would cause bugs. For +instance, what if one of the columns that the header was supposed to span got +dropped because it didn’t have any data? I knew it was a good day because I had +to pull out pen and pad—I was drawing out possible scenarios, checking and +double-checking my logic. - It wasn’t long before I caved. I was making a little search tool at - work and wanted to highlight the parts of the user’s query that matched - the results. But I was splitting up the query by words in a way that - made things much more complicated. I found myself short on patience. I - started thinking about GPT-4. Perhaps instead of spending an afternoon - programming I could spend some time “prompting,” or having a - conversation with an A.I. +But taking a bird’s-eye view of what happened that day? A table got a new +header. It’s hard to imagine anything more mundane. For me, the pleasure was +entirely in the process, not the product. And what would become of the process +if it required nothing more than a three-minute ChatGPT session? Yes, our jobs +as programmers involve many things besides literally writing code, such as +coaching junior hires and designing systems at a high level. But coding has +always been the root of it. Throughout my career, I have been interviewed and +selected precisely for my ability to solve fiddly little programming puzzles. +Suddenly, this ability was less important. - In a 1978 essay titled “On the Foolishness of ‘Natural Language - Programming,’ ” the computer scientist Edsger W. Dijkstra argued that - if you were to instruct computers not in a specialized language like - C++ or Python but in your native tongue you’d be rejecting the very - precision that made computers useful. Formal programming languages, he - wrote, are “an amazingly effective tool for ruling out all sorts of - nonsense that, when we use our native tongues, are almost impossible to - avoid.” Dijkstra’s argument became a truism in programming circles. - When the essay made the rounds on Reddit in 2014, a top commenter - wrote, “I’m not sure which of the following is scariest. Just how - trivially obvious this idea is” or the fact that “many still do not - know it.” +I had gathered as much from Ben, who kept telling me about the spectacular +successes he’d been having with GPT-4. It turned out that it was not only good +at the fiddly stuff but also had the qualities of a senior engineer: from a +deep well of knowledge, it could suggest ways of approaching a problem. For one +project, Ben had wired a small speaker and a red L.E.D. light bulb into the +frame of a portrait of King Charles, the light standing in for the gem in his +crown; the idea was that when you entered a message on an accompanying Web site +the speaker would play a tune and the light would flash out the message in +Morse code. (This was a gift for an eccentric British expat.) Programming the +device to fetch new messages eluded Ben; it seemed to require specialized +knowledge not just of the microcontroller he was using but of Firebase, the +back-end server technology that stored the messages. Ben asked me for advice, +and I mumbled a few possibilities; in truth, I wasn’t sure that what he wanted +would be possible. Then he asked GPT-4. It told Ben that Firebase had a +capability that would make the project much simpler. Here it was—and here was +some code to use that would be compatible with the microcontroller. - When I first used GPT-4, I could see what Dijkstra was talking about. - You can’t just say to the A.I., “Solve my problem.” That day may come, - but for now it is more like an instrument you must learn to play. You - have to specify what you want carefully, as though talking to a - beginner. In the search-highlighting problem, I found myself asking - GPT-4 to do too much at once, watching it fail, and then starting over. - Each time, my prompts became less ambitious. By the end of the - conversation, I wasn’t talking about search or highlighting; I had - broken the problem into specific, abstract, unambiguous sub-problems - that, together, would give me what I wanted. +Afraid to use GPT-4 myself—and feeling somewhat unclean about the prospect of +paying OpenAI twenty dollars a month for it—I nonetheless started probing its +capabilities, via Ben. We’d sit down to work on our crossword project, and I’d +say, “Why don’t you try prompting it this way?” He’d offer me the keyboard. +“No, you drive,” I’d say. Together, we developed a sense of what the A.I. could +do. Ben, who had more experience with it than I did, seemed able to get more +out of it in a stroke. As he later put it, his own neural network had begun to +align with GPT-4’s. I would have said that he had achieved mechanical sympathy. +Once, in a feat I found particularly astonishing, he had the A.I. build him a +Snake game, like the one on old Nokia phones. But then, after a brief exchange +with GPT-4, he got it to modify the game so that when you lost it would show +you how far you strayed from the most efficient route. It took the bot about +ten seconds to achieve this. It was a task that, frankly, I was not sure I +could do myself. - Having found the A.I.’s level, I felt almost instantly that my working - life had been transformed. Everywhere I looked I could see GPT-4-size - holes; I understood, finally, why the screens around the office were - always filled with chat sessions—and how Ben had become so productive. - I opened myself up to trying it more often. +In chess, which for decades now has been dominated by A.I., a player’s only +hope is pairing up with a bot. Such half-human, half-A.I. teams, known as +centaurs, might still be able to beat the best humans and the best A.I. engines +working alone. Programming has not yet gone the way of chess. But the centaurs +have arrived. GPT-4 on its own is, for the moment, a worse programmer than I +am. Ben is much worse. But Ben plus GPT-4 is a dangerous thing. - I returned to the crossword project. Our puzzle generator printed its - output in an ugly text format, with lines like - "s""c""a""r""*""k""u""n""i""s""*" "a""r""e""a". I wanted to turn output - like that into a pretty Web page that allowed me to explore the words - in the grid, showing scoring information at a glance. But I knew the - task would be tricky: each letter had to be tagged with the words it - belonged to, both the across and the down. This was a detailed problem, - one that could easily consume the better part of an evening. With the - baby on the way, I was short on free evenings. So I began a - conversation with GPT-4. Some back-and-forth was required; at one - point, I had to read a few lines of code myself to understand what it - was doing. But I did little of the kind of thinking I once believed to - be constitutive of coding. I didn’t think about numbers, patterns, or - loops; I didn’t use my mind to simulate the activity of the computer. - As another coder, Geoffrey Litt, wrote after a similar experience, “I - never engaged my detailed programmer brain.” So what did I do? +It wasn’t long before I caved. I was making a little search tool at work and +wanted to highlight the parts of the user’s query that matched the results. But +I was splitting up the query by words in a way that made things much more +complicated. I found myself short on patience. I started thinking about GPT-4. +Perhaps instead of spending an afternoon programming I could spend some time +“prompting,” or having a conversation with an A.I. - Perhaps what pushed Lee Sedol to retire from the game of Go was the - sense that the game had been forever cheapened. When I got into - programming, it was because computers felt like a form of magic. The - machine gave you powers but required you to study its arcane secrets—to - learn a spell language. This took a particular cast of mind. I felt - selected. I devoted myself to tedium, to careful thinking, and to the - accumulation of obscure knowledge. Then, one day, it became possible to - achieve many of the same ends without the thinking and without the - knowledge. Looked at in a certain light, this can make quite a lot of - one’s working life seem like a waste of time. +In a 1978 essay titled “On the Foolishness of ‘Natural Language Programming,’ ” +the computer scientist Edsger W. Dijkstra argued that if you were to instruct +computers not in a specialized language like C++ or Python but in your native +tongue you’d be rejecting the very precision that made computers useful. Formal +programming languages, he wrote, are “an amazingly effective tool for ruling +out all sorts of nonsense that, when we use our native tongues, are almost +impossible to avoid.” Dijkstra’s argument became a truism in programming +circles. When the essay made the rounds on Reddit in 2014, a top commenter +wrote, “I’m not sure which of the following is scariest. Just how trivially +obvious this idea is” or the fact that “many still do not know it.” - But whenever I think about Sedol I think about chess. After machines - conquered that game, some thirty years ago, the fear was that there - would be no reason to play it anymore. Yet chess has never been more - popular—A.I. has enlivened the game. A friend of mine picked it up - recently. At all hours, he has access to an A.I. coach that can feed - him chess problems just at the edge of his ability and can tell him, - after he’s lost a game, exactly where he went wrong. Meanwhile, at the - highest levels, grandmasters study moves the computer proposes as if - reading tablets from the gods. Learning chess has never been easier; - studying its deepest secrets has never been more exciting. +When I first used GPT-4, I could see what Dijkstra was talking about. You can’t +just say to the A.I., “Solve my problem.” That day may come, but for now it is +more like an instrument you must learn to play. You have to specify what you +want carefully, as though talking to a beginner. In the search-highlighting +problem, I found myself asking GPT-4 to do too much at once, watching it fail, +and then starting over. Each time, my prompts became less ambitious. By the end +of the conversation, I wasn’t talking about search or highlighting; I had +broken the problem into specific, abstract, unambiguous sub-problems that, +together, would give me what I wanted. - Computing is not yet overcome. GPT-4 is impressive, but a layperson - can’t wield it the way a programmer can. I still feel secure in my - profession. In fact, I feel somewhat more secure than before. As - software gets easier to make, it’ll proliferate; programmers will be - tasked with its design, its configuration, and its maintenance. And - though I’ve always found the fiddly parts of programming the most - calming, and the most essential, I’m not especially good at them. I’ve - failed many classic coding interview tests of the kind you find at Big - Tech companies. The thing I’m relatively good at is knowing what’s - worth building, what users like, how to communicate both technically - and humanely. A friend of mine has called this A.I. moment “the revenge - of the so-so programmer.” As coding per se begins to matter less, maybe - softer skills will shine. +Having found the A.I.’s level, I felt almost instantly that my working life had +been transformed. Everywhere I looked I could see GPT-4-size holes; I +understood, finally, why the screens around the office were always filled with +chat sessions—and how Ben had become so productive. I opened myself up to +trying it more often. - That still leaves open the matter of what to teach my unborn child. I - suspect that, as my child comes of age, we will think of “the - programmer” the way we now look back on “the computer,” when that - phrase referred to a person who did calculations by hand. Programming - by typing C++ or Python yourself might eventually seem as ridiculous as - issuing instructions in binary onto a punch card. Dijkstra would be - appalled, but getting computers to do precisely what you want might - become a matter of asking politely. +I returned to the crossword project. Our puzzle generator printed its output in +an ugly text format, with lines like "s""c""a""r""*""k""u""n""i""s""*" +"a""r""e""a". I wanted to turn output like that into a pretty Web page that +allowed me to explore the words in the grid, showing scoring information at a +glance. But I knew the task would be tricky: each letter had to be tagged with +the words it belonged to, both the across and the down. This was a detailed +problem, one that could easily consume the better part of an evening. With the +baby on the way, I was short on free evenings. So I began a conversation with +GPT-4. Some back-and-forth was required; at one point, I had to read a few +lines of code myself to understand what it was doing. But I did little of the +kind of thinking I once believed to be constitutive of coding. I didn’t think +about numbers, patterns, or loops; I didn’t use my mind to simulate the +activity of the computer. As another coder, Geoffrey Litt, wrote after a +similar experience, “I never engaged my detailed programmer brain.” So what did +I do? - So maybe the thing to teach isn’t a skill but a spirit. I sometimes - think of what I might have been doing had I been born in a different - time. The coders of the agrarian days probably futzed with waterwheels - and crop varietals; in the Newtonian era, they might have been obsessed - with glass, and dyes, and timekeeping. I was reading an oral history of - neural networks recently, and it struck me how many of the people - interviewed—people born in and around the nineteen-thirties—had played - with radios when they were little. Maybe the next cohort will spend - their late nights in the guts of the A.I.s their parents once regarded - as black boxes. I shouldn’t worry that the era of coding is winding - down. Hacking is forever. ♦ +Perhaps what pushed Lee Sedol to retire from the game of Go was the sense that +the game had been forever cheapened. When I got into programming, it was +because computers felt like a form of magic. The machine gave you powers but +required you to study its arcane secrets—to learn a spell language. This took a +particular cast of mind. I felt selected. I devoted myself to tedium, to +careful thinking, and to the accumulation of obscure knowledge. Then, one day, +it became possible to achieve many of the same ends without the thinking and +without the knowledge. Looked at in a certain light, this can make quite a lot +of one’s working life seem like a waste of time. - Published in the print edition of the [26]November 20, 2023, issue, - with the headline “Begin End.” +But whenever I think about Sedol I think about chess. After machines conquered +that game, some thirty years ago, the fear was that there would be no reason to +play it anymore. Yet chess has never been more popular—A.I. has enlivened the +game. A friend of mine picked it up recently. At all hours, he has access to an +A.I. coach that can feed him chess problems just at the edge of his ability and +can tell him, after he’s lost a game, exactly where he went wrong. Meanwhile, +at the highest levels, grandmasters study moves the computer proposes as if +reading tablets from the gods. Learning chess has never been easier; studying +its deepest secrets has never been more exciting. + +Computing is not yet overcome. GPT-4 is impressive, but a layperson can’t wield +it the way a programmer can. I still feel secure in my profession. In fact, I +feel somewhat more secure than before. As software gets easier to make, it’ll +proliferate; programmers will be tasked with its design, its configuration, and +its maintenance. And though I’ve always found the fiddly parts of programming +the most calming, and the most essential, I’m not especially good at them. I’ve +failed many classic coding interview tests of the kind you find at Big Tech +companies. The thing I’m relatively good at is knowing what’s worth building, +what users like, how to communicate both technically and humanely. A friend of +mine has called this A.I. moment “the revenge of the so-so programmer.” As +coding per se begins to matter less, maybe softer skills will shine. + +That still leaves open the matter of what to teach my unborn child. I suspect +that, as my child comes of age, we will think of “the programmer” the way we +now look back on “the computer,” when that phrase referred to a person who did +calculations by hand. Programming by typing C++ or Python yourself might +eventually seem as ridiculous as issuing instructions in binary onto a punch +card. Dijkstra would be appalled, but getting computers to do precisely what +you want might become a matter of asking politely. + +So maybe the thing to teach isn’t a skill but a spirit. I sometimes think of +what I might have been doing had I been born in a different time. The coders of +the agrarian days probably futzed with waterwheels and crop varietals; in the +Newtonian era, they might have been obsessed with glass, and dyes, and +timekeeping. I was reading an oral history of neural networks recently, and it +struck me how many of the people interviewed—people born in and around the +nineteen-thirties—had played with radios when they were little. Maybe the next +cohort will spend their late nights in the guts of the A.I.s their parents once +regarded as black boxes. I shouldn’t worry that the era of coding is winding +down. Hacking is forever. ♦ + +Published in the print edition of the [38]November 20, 2023, issue, with the +headline “Begin End.” More Science and Technology - * Can we [27]stop runaway A.I.? - * Saving the climate will depend on blue-collar workers. Can we train - enough of them [28]before time runs out? - * There are ways of controlling A.I.—but first we [29]need to stop - mythologizing it. - * A security camera [30]for the entire planet. - * What’s the point of [31]reading writing by humans? - * A heat shield for [32]the most important ice on Earth. - * The climate solutions [33]we can’t live without. + • Can we [39]stop runaway A.I.? - [34]Sign up for our daily newsletter to receive the best stories from - The New Yorker. - [35]James Somers is a writer and a programmer based in New York. + • Saving the climate will depend on blue-collar workers. Can we train enough + of them [40]before time runs out? + + • There are ways of controlling A.I.—but first we [41]need to stop + mythologizing it. + + • A security camera [42]for the entire planet. + + • What’s the point of [43]reading writing by humans? + + • A heat shield for [44]the most important ice on Earth. + + • The climate solutions [45]we can’t live without. + +[46]Sign up for our daily newsletter to receive the best stories from The New +Yorker. + +[47]James Somers is a writer and a programmer based in New York. Weekly - Enjoy our flagship newsletter as a digest delivered once a week. - E-mail address - ____________________ - (BUTTON) Sign up +Enjoy our flagship newsletter as a digest delivered once a week. +E-mail address +[48][ ] +Sign up - By signing up, you agree to our [36]User Agreement and [37]Privacy - Policy & Cookie Statement. This site is protected by reCAPTCHA and the - Google[38] Privacy Policy and[39] Terms of Service apply. +By signing up, you agree to our [50]User Agreement and [51]Privacy Policy & +Cookie Statement. This site is protected by reCAPTCHA and the Google[52] +Privacy Policy and[53] Terms of Service apply. - Read More - [40] - The Beach House - Fiction - The Beach House - [41] - The Beach House - Her father said that he loved her—he just wasn’t going to leave her the - beach house, which to him had become not the beach house at all but, in - truth, something else entirely. +Read More +[54] +How a Notorious Gangster Was Exposed by His Own Sister +Letter from Amsterdam +[55] +How a Notorious Gangster Was Exposed by His Own Sister +[56] +How a Notorious Gangster Was Exposed by His Own Sister +Astrid Holleeder secretly recorded her brother’s murderous confessions. Will he +exact revenge? - By Joy Williams - [42]“Crown Heights North” - Fiction - “Crown Heights North” - [43] - “Crown Heights North” - The dead man decided to try the running app. +By Patrick Radden Keefe - By Rivka Galchen - [44]Can Crosswords Be More Inclusive? - Annals of Gaming - Can Crosswords Be More Inclusive? - [45] - Can Crosswords Be More Inclusive? - The puzzles spread from the United States across the globe, but the - American crossword today doesn’t always reflect the linguistic changes - that immigration brings. +[57] +When Foster Parents Don’t Want to Give Back the Baby +Annals of Law +[58] +When Foster Parents Don’t Want to Give Back the Baby +[59] +When Foster Parents Don’t Want to Give Back the Baby +In many states, adoption lawyers are pushing a new legal strategy that forces +biological parents to compete for custody of their children. - By Natan Last - [46]Coming of Age at the Dawn of the Social Internet - The Weekend Essay - Coming of Age at the Dawn of the Social Internet - [47] - Coming of Age at the Dawn of the Social Internet - Online platforms allowed me to cultivate a freer version of myself. - Then the digital world began to close off. +By Eli Hager - By Kyle Chayka +[60] +Trial by Twitter +A Reporter at Large +[61] +Trial by Twitter - [48]The New Yorker +By Ariel Levy - (BUTTON) Sections - * [49]News - * [50]Books & Culture - * [51]Fiction & Poetry - * [52]Humor & Cartoons - * [53]Magazine - * [54]Crossword - * [55]Video - * [56]Podcasts - * [57]Archive - * [58]Goings On +[62] +Britney Spears’s Conservatorship Nightmare +American Chronicles +[63] +Britney Spears’s Conservatorship Nightmare +[64] +Britney Spears’s Conservatorship Nightmare +How the pop star’s father and a team of lawyers seized control of her life—and +have held on to it for thirteen years. - (BUTTON) More - * [59]Customer Care - * [60]Shop The New Yorker - * [61]Buy Covers and Cartoons - * [62]Condé Nast Store - * [63]Digital Access - * [64]Newsletters - * [65]Jigsaw Puzzle - * [66]RSS +By Ronan Farrow - * [67]About - * [68]Careers - * [69]Contact - * [70]F.A.Q. - * [71]Media Kit - * [72]Press - * [73]Accessibility Help +[65]The New Yorker - © 2024 Condé Nast. All rights reserved. Use of this site constitutes - acceptance of our [74]User Agreement and [75]Privacy Policy and Cookie - Statement and [76]Your California Privacy Rights. The New Yorker may - earn a portion of sales from products that are purchased through our - site as part of our Affiliate Partnerships with retailers. The material - on this site may not be reproduced, distributed, transmitted, cached or - otherwise used, except with the prior written permission of Condé Nast. - [77]Ad Choices - * - * - * - * - * +Sections - (BUTTON) Do Not Sell My Personal Info + • [67]News + • [68]Books & Culture + • [69]Fiction & Poetry + • [70]Humor & Cartoons + • [71]Magazine + • [72]Crossword + • [73]Video + • [74]Podcasts + • [75]Archive + • [76]Goings On -References +More - Visible links: - 1. https://www.newyorker.com/feed/rss - 2. https://www.googletagmanager.com/ns.html?id=GTM-NX5LSK3 - 3. https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all#main-content - 4. https://www.newyorker.com/ - 5. https://www.newyorker.com/newsletters - 6. https://www.newyorker.com/account/saved - 7. https://www.newyorker.com/auth/initiate?redirectURL=/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft&source=VERSO_NAVIGATION - 8. https://www.newyorker.com/search - 9. https://www.newyorker.com/latest - 10. https://www.newyorker.com/news - 11. https://www.newyorker.com/culture - 12. https://www.newyorker.com/fiction-and-poetry - 13. https://www.newyorker.com/humor - 14. https://www.newyorker.com/magazine - 15. https://www.newyorker.com/crossword-puzzles-and-games - 16. https://www.newyorker.com/video - 17. https://www.newyorker.com/podcasts - 18. https://www.newyorker.com/goings-on - 19. https://store.newyorker.com/ - 20. https://www.newyorker.com/ - 21. https://www.newyorker.com/magazine/personal-history - 22. https://www.newyorker.com/contributors/james-somers - 23. https://www.newyorker.com/newsletter/science-technology - 24. https://www.newyorker.com/newsletter/science-technology - 25. https://www.newyorker.com/cartoon/a27287 - 26. https://www.newyorker.com/magazine/2023/11/20 - 27. https://www.newyorker.com/science/annals-of-artificial-intelligence/can-we-stop-the-singularity - 28. https://www.newyorker.com/news/dept-of-energy/the-great-electrician-shortage - 29. https://www.newyorker.com/science/annals-of-artificial-intelligence/there-is-no-ai - 30. https://www.newyorker.com/news/annals-of-climate-action/a-security-camera-for-the-planet - 31. https://www.newyorker.com/news/our-columnists/whats-the-point-of-reading-writing-by-humans - 32. https://www.newyorker.com/news/the-control-of-nature/a-heat-shield-for-the-most-important-ice-on-earth - 33. https://www.newyorker.com/news/annals-of-a-warming-planet/the-climate-solutions-we-cant-live-without - 34. https://www.newyorker.com/newsletter/daily?sourceCode=BottomStories - 35. https://www.newyorker.com/contributors/james-somers - 36. https://www.condenast.com/user-agreement - 37. https://www.condenast.com/privacy-policy - 38. https://policies.google.com/privacy - 39. https://policies.google.com/terms - 40. https://www.newyorker.com/magazine/2024/01/15/the-beach-house-fiction-joy-williams#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1 - 41. https://www.newyorker.com/magazine/2024/01/15/the-beach-house-fiction-joy-williams#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1 - 42. https://www.newyorker.com/magazine/2024/01/01/crown-heights-north-fiction-rivka-galchen#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 43. https://www.newyorker.com/magazine/2024/01/01/crown-heights-north-fiction-rivka-galchen#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 44. https://www.newyorker.com/magazine/2023/12/25/can-crosswords-be-more-inclusive#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 45. https://www.newyorker.com/magazine/2023/12/25/can-crosswords-be-more-inclusive#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 46. https://www.newyorker.com/culture/the-weekend-essay/coming-of-age-at-the-dawn-of-the-social-internet#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 47. https://www.newyorker.com/culture/the-weekend-essay/coming-of-age-at-the-dawn-of-the-social-internet#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 48. https://www.newyorker.com/ - 49. https://www.newyorker.com/news - 50. https://www.newyorker.com/culture - 51. https://www.newyorker.com/fiction-and-poetry - 52. https://www.newyorker.com/humor - 53. https://www.newyorker.com/magazine - 54. https://www.newyorker.com/crossword-puzzles-and-games - 55. https://video.newyorker.com/ - 56. https://www.newyorker.com/podcast - 57. https://www.newyorker.com/archive - 58. https://www.newyorker.com/goings-on-about-town - 59. http://w1.buysub.com/servlet/CSGateway?cds_mag_code=NYR - 60. https://store.newyorker.com/ - 61. https://condenaststore.com/art/new+yorker+covers - 62. https://condenaststore.com/conde-nast-brand/thenewyorker - 63. https://www.newyorker.com/digital-editions - 64. https://www.newyorker.com/newsletter - 65. https://www.newyorker.com/jigsaw - 66. https://www.newyorker.com/about/feeds - 67. https://www.newyorker.com/about/us - 68. https://www.newyorker.com/about/careers - 69. https://www.newyorker.com/about/contact - 70. https://www.newyorker.com/about/faq - 71. https://www.condenast.com/advertising - 72. https://www.newyorker.com/about/press - 73. https://www.newyorker.com/about/accessibility-help - 74. https://www.condenast.com/user-agreement/ - 75. http://www.condenast.com/privacy-policy#privacypolicy - 76. http://www.condenast.com/privacy-policy#privacypolicy-california - 77. http://www.condenast.com/privacy-policy#privacypolicy-optout + • [78]Customer Care + • [79]Shop The New Yorker + • [80]Buy Covers and Cartoons + • [81]Condé Nast Store + • [82]Digital Access + • [83]Newsletters + • [84]Jigsaw Puzzle + • [85]RSS - Hidden links: - 79. https://www.newyorker.com/account/saved - 80. https://www.facebook.com/dialog/feed?&display=popup&caption=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&app_id=1147169538698836&link=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Dfacebook%26utm_medium%3Dsocial%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker%26utm_social-type%3Dearned - 81. https://twitter.com/intent/tweet/?url=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Dtwitter%26utm_medium%3Dsocial%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker%26utm_social-type%3Dearned&text=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&via=NewYorker - 82. mailto:?subject=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&body=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Donsite-share%26utm_medium%3Demail%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker - 83. https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all - 84. https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all - 85. https://www.newyorker.com/magazine/2024/01/15/the-beach-house-fiction-joy-williams#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1 - 86. https://www.newyorker.com/magazine/2024/01/01/crown-heights-north-fiction-rivka-galchen#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 87. https://www.newyorker.com/magazine/2023/12/25/can-crosswords-be-more-inclusive#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 88. https://www.newyorker.com/culture/the-weekend-essay/coming-of-age-at-the-dawn-of-the-social-internet#intcid=_the-new-yorker-bottom-recirc-v2_79ab568c-4ce6-4a2a-b03a-653b1f80b65b_roberta-similarity1_fallback_text2vec1 - 89. https://www.facebook.com/newyorker/ - 90. https://twitter.com/NewYorker/ - 91. https://www.snapchat.com/add/newyorkermag - 92. https://www.youtube.com/user/NewYorkerDotCom/ - 93. https://instagram.com/newyorkermag/ + • [86]About + • [87]Careers + • [88]Contact + • [89]F.A.Q. + • [90]Media Kit + • [91]Press + • [92]Accessibility Help + +© 2024 Condé Nast. All rights reserved. Use of this site constitutes acceptance +of our [93]User Agreement and [94]Privacy Policy and Cookie Statement and [95] +Your California Privacy Rights. The New Yorker may earn a portion of sales from +products that are purchased through our site as part of our Affiliate +Partnerships with retailers. The material on this site may not be reproduced, +distributed, transmitted, cached or otherwise used, except with the prior +written permission of Condé Nast. [96]Ad Choices + + • [97] + • [98] + • [99] + • [100] + • [101] + +Do Not Sell My Personal Info + +References: + +[1] https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all#main-content +[2] https://www.newyorker.com/ +[3] https://www.newyorker.com/newsletters +[4] https://www.newyorker.com/account/saved +[6] https://www.newyorker.com/auth/initiate?redirectURL=%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft&source=VERSO_NAVIGATION +[7] https://www.newyorker.com/search +[8] https://www.newyorker.com/latest +[9] https://www.newyorker.com/news +[10] https://www.newyorker.com/culture +[11] https://www.newyorker.com/fiction-and-poetry +[12] https://www.newyorker.com/humor +[13] https://www.newyorker.com/magazine +[14] https://www.newyorker.com/crossword-puzzles-and-games +[15] https://www.newyorker.com/video +[16] https://www.newyorker.com/podcasts +[17] https://www.newyorker.com/goings-on +[18] https://store.newyorker.com/ +[20] https://www.newyorker.com/account/saved +[22] https://www.newyorker.com/ +[23] https://www.newyorker.com/magazine/personal-history +[24] https://www.newyorker.com/contributors/james-somers +[25] https://www.facebook.com/dialog/feed?&display=popup&caption=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&app_id=1147169538698836&link=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Dfacebook%26utm_medium%3Dsocial%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker%26utm_social-type%3Dearned +[26] https://twitter.com/intent/tweet/?url=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Dtwitter%26utm_medium%3Dsocial%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker%26utm_social-type%3Dearned&text=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&via=NewYorker +[27] mailto:?subject=A%20Coder%20Considers%20the%20Waning%20Days%20of%20the%20Craft&body=https%3A%2F%2Fwww.newyorker.com%2Fmagazine%2F2023%2F11%2F20%2Fa-coder-considers-the-waning-days-of-the-craft%3Futm_source%3Donsite-share%26utm_medium%3Demail%26utm_campaign%3Donsite-share%26utm_brand%3Dthe-new-yorker +[28] https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all# +[29] https://www.newyorker.com/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft?currentPage=all# +[33] https://www.newyorker.com/newsletter/science-technology +[34] https://www.newyorker.com/newsletter/science-technology +[35] https://www.newyorker.com/cartoon/a27287 +[38] https://www.newyorker.com/magazine/2023/11/20 +[39] https://www.newyorker.com/science/annals-of-artificial-intelligence/can-we-stop-the-singularity +[40] https://www.newyorker.com/news/dept-of-energy/the-great-electrician-shortage +[41] https://www.newyorker.com/science/annals-of-artificial-intelligence/there-is-no-ai +[42] https://www.newyorker.com/news/annals-of-climate-action/a-security-camera-for-the-planet +[43] https://www.newyorker.com/news/our-columnists/whats-the-point-of-reading-writing-by-humans +[44] https://www.newyorker.com/news/the-control-of-nature/a-heat-shield-for-the-most-important-ice-on-earth +[45] https://www.newyorker.com/news/annals-of-a-warming-planet/the-climate-solutions-we-cant-live-without +[46] https://www.newyorker.com/newsletter/daily?sourceCode=BottomStories +[47] https://www.newyorker.com/contributors/james-somers +[50] https://www.condenast.com/user-agreement +[51] https://www.condenast.com/privacy-policy +[52] https://policies.google.com/privacy +[53] https://policies.google.com/terms +[54] https://www.newyorker.com/magazine/2018/08/06/how-a-notorious-gangster-was-exposed-by-his-own-sister#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[55] https://www.newyorker.com/magazine/2018/08/06/how-a-notorious-gangster-was-exposed-by-his-own-sister#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[56] https://www.newyorker.com/magazine/2018/08/06/how-a-notorious-gangster-was-exposed-by-his-own-sister#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[57] https://www.newyorker.com/magazine/2023/10/23/foster-family-biological-parents-adoption-intervenors#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[58] https://www.newyorker.com/magazine/2023/10/23/foster-family-biological-parents-adoption-intervenors#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[59] https://www.newyorker.com/magazine/2023/10/23/foster-family-biological-parents-adoption-intervenors#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[60] https://www.newyorker.com/magazine/2013/08/05/trial-by-twitter#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[61] https://www.newyorker.com/magazine/2013/08/05/trial-by-twitter#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[62] https://www.newyorker.com/news/american-chronicles/britney-spears-conservatorship-nightmare#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[63] https://www.newyorker.com/news/american-chronicles/britney-spears-conservatorship-nightmare#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[64] https://www.newyorker.com/news/american-chronicles/britney-spears-conservatorship-nightmare#intcid=_the-new-yorker-bottom-recirc-version3_cbaf7871-3046-4dc4-b609-4b3c76e51880_user-activetime-evergreen +[65] https://www.newyorker.com/ +[67] https://www.newyorker.com/news +[68] https://www.newyorker.com/culture +[69] https://www.newyorker.com/fiction-and-poetry +[70] https://www.newyorker.com/humor +[71] https://www.newyorker.com/magazine +[72] https://www.newyorker.com/crossword-puzzles-and-games +[73] https://video.newyorker.com/ +[74] https://www.newyorker.com/podcast +[75] https://www.newyorker.com/archive +[76] https://www.newyorker.com/goings-on-about-town +[78] http://w1.buysub.com/servlet/CSGateway?cds_mag_code=NYR +[79] https://store.newyorker.com/ +[80] https://condenaststore.com/art/new+yorker+covers +[81] https://condenaststore.com/conde-nast-brand/thenewyorker +[82] https://www.newyorker.com/digital-editions +[83] https://www.newyorker.com/newsletter +[84] https://www.newyorker.com/jigsaw +[85] https://www.newyorker.com/about/feeds +[86] https://www.newyorker.com/about/us +[87] https://www.newyorker.com/about/careers +[88] https://www.newyorker.com/about/contact +[89] https://www.newyorker.com/about/faq +[90] https://www.condenast.com/advertising +[91] https://www.newyorker.com/about/press +[92] https://www.newyorker.com/about/accessibility-help +[93] https://www.condenast.com/user-agreement/ +[94] http://www.condenast.com/privacy-policy#privacypolicy +[95] http://www.condenast.com/privacy-policy#privacypolicy-california +[96] http://www.condenast.com/privacy-policy#privacypolicy-optout +[97] https://www.facebook.com/newyorker/ +[98] https://twitter.com/NewYorker/ +[99] https://www.snapchat.com/add/newyorkermag +[100] https://www.youtube.com/user/NewYorkerDotCom/ +[101] https://instagram.com/newyorkermag/ diff --git a/static/archive/www-nytimes-com-gvijqf.txt b/static/archive/www-nytimes-com-gvijqf.txt index 14f7a7b..38a1dc5 100644 --- a/static/archive/www-nytimes-com-gvijqf.txt +++ b/static/archive/www-nytimes-com-gvijqf.txt @@ -1,307 +1,296 @@ - #[1]alternate [2]Julia Cameron Wants You to Do Your Morning Pages +[1]Skip to content[2]Skip to site index +[3] +[4]Style|Julia Cameron Wants You to Do Your Morning Pages +[5][6] +https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html - (BUTTON) - (BUTTON) Sections - (BUTTON) SEARCH - [3]Skip to content + • Share full article + • + • - [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) - - Julia Cameron, making change at 70. - Julia Cameron, making change at 70.Credit...Ramsay de Give for The New - York Times +[merlin_149295975_44170fa1-6d57-454f-a8b4-112222add07b-articleLarge] +Julia Cameron, making change at 70.Credit...Ramsay de Give for The New York +Times Julia Cameron Wants You to Do Your Morning Pages - With “The Artist’s Way,” Julia Cameron invented the way people renovate - the creative soul. +With “The Artist’s Way,” Julia Cameron invented the way people renovate the +creative soul. - Julia Cameron, making change at 70.Credit...Ramsay de Give for The New - York Times +Julia Cameron, making change at 70.Credit...Ramsay de Give for The New York +Times - Supported by - [5]Continue reading the main story - * Send any friend a story - As a subscriber, you have 10 gift articles to give each month. - Anyone can read what you share. - (BUTTON) - (BUTTON) Give this article - * (BUTTON) - * (BUTTON) +Supported by - [6]Penelope Green +[10]SKIP ADVERTISEMENT - By [7]Penelope Green - * Feb. 2, 2019 + • Share full article + • + • - SANTA FE, N.M. — On any given day, someone somewhere is likely leading - an Artist’s Way group, gamely knocking back the exercises of “The - Artist’s Way” book, the quasi-spiritual manual for “creative recovery,” - as its author Julia Cameron puts it, that has been a lodestar to - blocked writers and other artistic hopefuls for more than a quarter of - a century. There have been Artist’s Way clusters in the Australian - outback and the Panamanian jungle; in Brazil, Russia, the United - Kingdom and Japan; and also, as a cursory scan of Artist’s Way Meetups - reveals, in Des Moines and Toronto. It has been taught in prisons and - sober communities, at spiritual retreats and New Age centers, from - Esalen to Sedona, from the Omega Institute to the [8]Open Center, where - Ms. Cameron will appear in late March, as she does most years. - Adherents of “The Artist’s Way” include the authors Patricia Cornwell - and Sarah Ban Breathnach. Pete Townshend, Alicia Keys and Helmut Newton - have all noted its influence on their work. +[14]Penelope Green - So has Tim Ferriss, the hyperactive productivity guru behind “The Four - Hour Workweek,” though to save time he didn’t actually read the book, - “which was recommended to me by many megaselling authors,” [9]he - writes. He just did the “Morning Pages,” one of the book’s central - exercises. It requires you write three pages, by hand, first thing in - the morning, about whatever comes to mind. (Fortunes would seem to have - been made on the journals printed to support this effort.) The book’s - other main dictum is the “Artist’s Date” — two hours of alone time each - week to be spent at a gallery, say, or any place where a new experience - might be possible. +By [15]Penelope Green - Elizabeth Gilbert, who has “done” the book three times, said there - would be no “Eat, Pray, Love,” without “The Artist’s Way.” Without it, - there might be no [10]adult coloring books, no [11]journaling fever. - “Creativity” would not have its own publishing niche or have become a - ubiquitous buzzword — the “fat-free” of the self-help world — and - business pundits would not deploy it as a specious organizing - principle. - Image + • Feb. 2, 2019 - The book’s enduring success — over 4 million copies have been sold - since its publication in 1992 — have made its author, a shy - Midwesterner who had a bit of early fame in the 1970s for practicing - lively New Journalism at the Washington Post and Rolling Stone, among - other publications, and for being married, briefly, to Martin Scorsese, - with whom she has a daughter, Domenica — an unlikely celebrity. With - its gentle affirmations, inspirational quotes, fill-in-the-blank lists - and tasks — write yourself a thank-you letter, describe yourself at 80, - for example — “The Artist’s Way” proposes an egalitarian view of - creativity: Everyone’s got it. +SANTA FE, N.M. — On any given day, someone somewhere is likely leading an +Artist’s Way group, gamely knocking back the exercises of “The Artist’s Way” +book, the quasi-spiritual manual for “creative recovery,” as its author Julia +Cameron puts it, that has been a lodestar to blocked writers and other artistic +hopefuls for more than a quarter of a century. There have been Artist’s Way +clusters in the Australian outback and the Panamanian jungle; in Brazil, +Russia, the United Kingdom and Japan; and also, as a cursory scan of Artist’s +Way Meetups reveals, in Des Moines and Toronto. It has been taught in prisons +and sober communities, at spiritual retreats and New Age centers, from Esalen +to Sedona, from the Omega Institute to the [16]Open Center, where Ms. Cameron +will appear in late March, as she does most years. Adherents of “The Artist’s +Way” include the authors Patricia Cornwell and Sarah Ban Breathnach. Pete +Townshend, Alicia Keys and Helmut Newton have all noted its influence on their +work. - The book promises to free up that inner artist in 12 weeks. It’s a - template that would seem to reflect the practices of 12-step programs, - particularly its invocations to a higher power. But according to Ms. - Cameron, who has been sober since she was 29, “12 weeks is how long it - takes for people to cook.” +So has Tim Ferriss, the hyperactive productivity guru behind “The Four Hour +Workweek,” though to save time he didn’t actually read the book, “which was +recommended to me by many megaselling authors,” [17]he writes. He just did the +“Morning Pages,” one of the book’s central exercises. It requires you write +three pages, by hand, first thing in the morning, about whatever comes to mind. +(Fortunes would seem to have been made on the journals printed to support this +effort.) The book’s other main dictum is the “Artist’s Date” — two hours of +alone time each week to be spent at a gallery, say, or any place where a new +experience might be possible. - 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.” +Elizabeth Gilbert, who has “done” the book three times, said there would be no +“Eat, Pray, Love,” without “The Artist’s Way.” Without it, there might be no +[18]adult coloring books, no [19]journaling fever. “Creativity” would not have +its own publishing niche or have become a ubiquitous buzzword — the “fat-free” +of the self-help world — and business pundits would not deploy it as a specious +organizing principle. - In the early 1970s, Ms. Cameron, who is the second oldest of seven - children and grew up just north of Chicago, was making $67 a week - working in the mail room of the Washington Post. At the same time, she - was writing deft lifestyle pieces for the paper — like an East Coast - Eve Babitz. “With a byline, no one knows you’re just a gofer,” she - said. +Image - 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.” +The book’s enduring success — over 4 million copies have been sold since its +publication in 1992 — have made its author, a shy Midwesterner who had a bit of +early fame in the 1970s for practicing lively New Journalism at the Washington +Post and Rolling Stone, among other publications, and for being married, +briefly, to Martin Scorsese, with whom she has a daughter, Domenica — an +unlikely celebrity. With its gentle affirmations, inspirational quotes, +fill-in-the-blank lists and tasks — write yourself a thank-you letter, describe +yourself at 80, for example — “The Artist’s Way” proposes an egalitarian view +of creativity: Everyone’s got it. - She met Mr. Scorsese on assignment for Oui magazine and fell hard for - him. She did a bit of script-doctoring on “Taxi Driver,” and followed - the director to Los Angeles. “I got pregnant on our wedding night,” she - said. “Like a good Catholic girl.” When Mr. Scorsese took up with Liza - Minnelli while all three were working on “New York, New York,” the - marriage was done. (She recently made a painting depicting herself as a - white horse and Mr. Scorsese as a lily. “I wanted to make a picture - about me and Marty,” she said. “He was magical-seeming to me and when I - look at it I think, ‘Oh, she’s fascinated, but she doesn’t - understand.’”) +The book promises to free up that inner artist in 12 weeks. It’s a template +that would seem to reflect the practices of 12-step programs, particularly its +invocations to a higher power. But according to Ms. Cameron, who has been sober +since she was 29, “12 weeks is how long it takes for people to cook.” - Image Under the pines. - Under the pines.Credit...Ramsay de Give for The New York Times +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 her memoir, “Floor Sample,” published in 2006, Ms. Cameron recounts - the brutality of Hollywood, of her life there as a screenwriter and a - drunk. Pauline Kael, she writes, described her as a “pornographic - Victorian valentine, like a young Angela Lansbury.” Don’t marry her for - tax reasons, Ms. Kael warns Mr. Scorsese. Andy Warhol, who escorts her - to the premiere of “New York, New York,” inscribes her into his diary - as a “lush.” A cocaine dealer soothes her — “You have a tiny little - wife’s habit” — and a doctor shoos her away from his hospital when she - asks for help, telling her she’s no alcoholic, just a “sensitive young - woman.” She goes into labor in full makeup and a Chinese dressing gown, - vowing to be “no trouble.” +In the early 1970s, Ms. Cameron, who is the second oldest of seven children and +grew up just north of Chicago, was making $67 a week working in the mail room +of the Washington Post. At the same time, she was writing deft lifestyle pieces +for the paper — like an East Coast Eve Babitz. “With a byline, no one knows +you’re just a gofer,” she said. - “I think it’s fair to say that drinking and drugs stopped looking like - a path to success,” she said. “So I luckily stopped. I had a couple of - sober friends and they said, ‘Try and let the higher power write - through you.’ And I said, What if he doesn’t want to?’ They said, ‘Just - try it.’” +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.” - So she did. She wrote novels and screenplays. She wrote poems and - musicals. She wasn’t always well-reviewed, but she took the knocks with - typical grit, and she schooled others to do so as well. “I have - unblocked poets, lawyers and painters,” she said. She taught her tools - in living rooms and classrooms — “if someone was dumb enough to lend us - one,” she said — and back in New York, at the Feminist Art Institute. - Over the years, she refined her tools, typed them up, and sold Xeroxed - copies in local bookstores for $20. It was her second husband, Mark - Bryan, a writer, who needled her into making the pages into a proper - book. +She met Mr. Scorsese on assignment for Oui magazine and fell hard for him. She +did a bit of script-doctoring on “Taxi Driver,” and followed the director to +Los Angeles. “I got pregnant on our wedding night,” she said. “Like a good +Catholic girl.” When Mr. Scorsese took up with Liza Minnelli while all three +were working on “New York, New York,” the marriage was done. (She recently made +a painting depicting herself as a white horse and Mr. Scorsese as a lily. “I +wanted to make a picture about me and Marty,” she said. “He was magical-seeming +to me and when I look at it I think, ‘Oh, she’s fascinated, but she doesn’t +understand.’”) - The first printing was about 9,000 copies, said Joel Fotinos, formerly - the publisher at Tarcher/Penguin, which published the book in 1992. - There was concern that it wouldn’t sell. “Part of the reason,” Mr. - Fotinos said, “was that this was a book that wasn’t like anything else. - We didn’t know where to put it on the shelves — did it go in religion - or self-help? Eventually there was a category called ‘creativity,’ and - ‘The Artist’s Way’ launched it.” Now an editorial director at St. - Martin’s Press, Mr. Fotinos said he is deluged with pitches from - authors claiming they’ve written “the new Artist’s Way.” +Image[merlin_149296134_e17f3630-d6d2-4d46-961e-bddec24c3feb-articleLarge] +Under the pines.Credit...Ramsay de Give for The New York Times - “But for Julia, creativity was a tool for survival,” he said. “It was - literally her medicine and that’s why the book is so authentic, and - resonates with so many people.” +In her memoir, “Floor Sample,” published in 2006, Ms. Cameron recounts the +brutality of Hollywood, of her life there as a screenwriter and a drunk. +Pauline Kael, she writes, described her as a “pornographic Victorian valentine, +like a young Angela Lansbury.” Don’t marry her for tax reasons, Ms. Kael warns +Mr. Scorsese. Andy Warhol, who escorts her to the premiere of “New York, New +York,” inscribes her into his diary as a “lush.” A cocaine dealer soothes her — +“You have a tiny little wife’s habit” — and a doctor shoos her away from his +hospital when she asks for help, telling her she’s no alcoholic, just a +“sensitive young woman.” She goes into labor in full makeup and a Chinese +dressing gown, vowing to be “no trouble.” - “I am my tool kits,” Ms. Cameron said. +“I think it’s fair to say that drinking and drugs stopped looking like a path +to success,” she said. “So I luckily stopped. I had a couple of sober friends +and they said, ‘Try and let the higher power write through you.’ And I said, +What if he doesn’t want to?’ They said, ‘Just try it.’” - And, indeed, “The Artist’s Way” is stuffed with tools: worksheets to be - filled with thoughts about money, childhood games, old hurts; wish - lists and exercises, many of which seem exhaustive and exhausting — - “Write down any resistance, angers and fears,” e.g. — and others that - are more practical: “Take a 20 minutes walk,” “Mend any mending” and - “repot any pinched and languishing plants.” It anticipates the work of - the indefatigable [12]Gretchen Rubin, the happiness maven, if Ms. Rubin - were a bit kinder but less Type-A. +So she did. She wrote novels and screenplays. She wrote poems and musicals. She +wasn’t always well-reviewed, but she took the knocks with typical grit, and she +schooled others to do so as well. “I have unblocked poets, lawyers and +painters,” she said. She taught her tools in living rooms and classrooms — “if +someone was dumb enough to lend us one,” she said — and back in New York, at +the Feminist Art Institute. Over the years, she refined her tools, typed them +up, and sold Xeroxed copies in local bookstores for $20. It was her second +husband, Mark Bryan, a writer, who needled her into making the pages into a +proper book. - “When I teach, it’s like watching the lights come on,” said Ms. - Cameron. “My students don’t get lectured to. I think they feel safe. - Rather than try and fix themselves, they learn to accept themselves. I - think my work makes people autonomous. I feel like people fall in love - with themselves.” +The first printing was about 9,000 copies, said Joel Fotinos, formerly the +publisher at Tarcher/Penguin, which published the book in 1992. There was +concern that it wouldn’t sell. “Part of the reason,” Mr. Fotinos said, “was +that this was a book that wasn’t like anything else. We didn’t know where to +put it on the shelves — did it go in religion or self-help? Eventually there +was a category called ‘creativity,’ and ‘The Artist’s Way’ launched it.” Now an +editorial director at St. Martin’s Press, Mr. Fotinos said he is deluged with +pitches from authors claiming they’ve written “the new Artist’s Way.” - Anne Lamott, the inspirational writer and novelist, said that when she - was teaching writing full-time, her own students swore by “The Artist’s - Way.” “That exercise — three pages of automatic writing — was a - sacrament for people,” Ms. Lamott wrote in a recent email. “They could - plug into something bigger than the rat exercise wheel of self-loathing - and grandiosity that every writer experiences: ‘This could very easily - end up being an Oprah Book,’ or ‘Who do I think I’m fooling? I’m a - subhuman blowhard.’” +“But for Julia, creativity was a tool for survival,” he said. “It was literally +her medicine and that’s why the book is so authentic, and resonates with so +many people.” - “She’s given you an assignment that is doable, and I think it’s kind of - a cognitive centering device. Like scribbly meditation,” Ms. Lamott - wrote. “It’s sort of like how manicurists put smooth pebbles in the - warm soaking water, so your fingers have something to do, and you don’t - climb the walls.” +“I am my tool kits,” Ms. Cameron said. - Image - In the wild.Credit...Ramsay de Give for The New York Times +And, indeed, “The Artist’s Way” is stuffed with tools: worksheets to be filled +with thoughts about money, childhood games, old hurts; wish lists and +exercises, many of which seem exhaustive and exhausting — “Write down any +resistance, angers and fears,” e.g. — and others that are more practical: “Take +a 20 minutes walk,” “Mend any mending” and “repot any pinched and languishing +plants.” It anticipates the work of the indefatigable [20]Gretchen Rubin, the +happiness maven, if Ms. Rubin were a bit kinder but less Type-A. - Ms. Cameron continues to write her Morning Pages every day, even though - she continues, as she said, to be grouchy upon awakening. She eats - oatmeal at a local cafe and walks Lily, an eager white Westie. She - reads no newspapers, or social media (perhaps the most grueling tenet - of “The Artist’s Way” is a week of “reading deprivation”), though an - assistant runs a Twitter and Instagram account on her behalf. She - writes for hours, mostly musicals, collaborating with her daughter, a - film director, and others. +“When I teach, it’s like watching the lights come on,” said Ms. Cameron. “My +students don’t get lectured to. I think they feel safe. Rather than try and fix +themselves, they learn to accept themselves. I think my work makes people +autonomous. I feel like people fall in love with themselves.” - Ms. Cameron may be a veteran of the modern self-care movement but her - life has not been all moonbeams and rainbows, and it shows. She was - candid in conversation, if not quite at ease. “So I haven’t proven - myself to be hilarious,” she said with a flash of dry humor, adding - that even after so many years, she still gets stage-fright before - beginning a workshop. +Anne Lamott, the inspirational writer and novelist, said that when she was +teaching writing full-time, her own students swore by “The Artist’s Way.” “That +exercise — three pages of automatic writing — was a sacrament for people,” Ms. +Lamott wrote in a recent email. “They could plug into something bigger than the +rat exercise wheel of self-loathing and grandiosity that every writer +experiences: ‘This could very easily end up being an Oprah Book,’ or ‘Who do I +think I’m fooling? I’m a subhuman blowhard.’” - She 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’s given you an assignment that is doable, and I think it’s kind of a +cognitive centering device. Like scribbly meditation,” Ms. Lamott wrote. “It’s +sort of like how manicurists put smooth pebbles in the warm soaking water, so +your fingers have something to do, and you don’t climb the walls.” - She 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. +Image +In the wild.Credit...Ramsay de Give for The New York Times - “If you have to learn how to do a movie, you might learn from Martin - Scorsese. If you have to learn about entrepreneurship, you might learn - from Mark” — her second husband. “So I’m very lucky,” she said. “If I - have a hard time blowing my own horn, I’ve been attracted to people who - blew it for me.” +Ms. Cameron continues to write her Morning Pages every day, even though she +continues, as she said, to be grouchy upon awakening. She eats oatmeal at a +local cafe and walks Lily, an eager white Westie. She reads no newspapers, or +social media (perhaps the most grueling tenet of “The Artist’s Way” is a week +of “reading deprivation”), though an assistant runs a Twitter and Instagram +account on her behalf. She writes for hours, mostly musicals, collaborating +with her daughter, a film director, and others. - Advertisement - [13]Continue reading the main story +Ms. Cameron may be a veteran of the modern self-care movement but her life has +not been all moonbeams and rainbows, and it shows. She was candid in +conversation, if not quite at ease. “So I haven’t proven myself to be +hilarious,” she said with a flash of dry humor, adding that even after so many +years, she still gets stage-fright before beginning a workshop. + +She has written about her own internal critic, imagining a gay British interior +designer she calls Nigel. “And nothing is ever good enough for Nigel,” she +said. But she soldiers on. + +She will tell you that she has good boundaries. But like many successful women, +she brushes off her achievements, attributing her unlooked-for wins to luck. + +“If you have to learn how to do a movie, you might learn from Martin Scorsese. +If you have to learn about entrepreneurship, you might learn from Mark” — her +second husband. “So I’m very lucky,” she said. “If I have a hard time blowing +my own horn, I’ve been attracted to people who blew it for me.” + +[21]Penelope Green is a reporter for Styles. She has been a reporter for the +Home section, editor of Styles of The Times — an early iteration of Styles — +and a story editor at the Times magazine. [22]More about Penelope Green + +A version of this article appears in print on  , Section ST, Page 1 of the New +York edition with the headline: She Guides Your Process. [23]Order Reprints | +[24]Today’s Paper | [25]Subscribe + + • Share full article + • + • + +Advertisement + +[29]SKIP ADVERTISEMENT Site Index Site Information Navigation - * [14]© 2023 The New York Times Company + • [30]© 2024 The New York Times Company - * [15]NYTCo - * [16]Contact Us - * [17]Accessibility - * [18]Work with us - * [19]Advertise - * [20]T Brand Studio - * [21]Your Ad Choices - * [22]Privacy Policy - * [23]Terms of Service - * [24]Terms of Sale - * [25]Site Map - * [26]Canada - * [27]International - * [28]Help - * [29]Subscriptions + • [31]NYTCo + • [32]Contact Us + • [33]Accessibility + • [34]Work with us + • [35]Advertise + • [36]T Brand Studio + • [37]Your Ad Choices + • [38]Privacy Policy + • [39]Terms of Service + • [40]Terms of Sale + • [41]Site Map + • [42]Canada + • [43]International + • [44]Help + • [45]Subscriptions - IFRAME: - [30]https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfA - zqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x + • [46]Manage Privacy Preferences -References - Visible links: - 1. nyt://article/0b13a9e1-3729-51ef-aad3-030df3ab15bb - 2. https://www.nytimes.com/svc/oembed/json/?url=https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html - 3. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-content - 4. https://www.nytimes.com/section/style - 5. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-sponsor - 6. https://www.nytimes.com/by/penelope-green - 7. https://www.nytimes.com/by/penelope-green - 8. https://www.opencenter.org/ - 9. https://tim.blog/tag/artists-way/ - 10. https://www.nytimes.com/2016/04/21/fashion/adult-coloring-books-relaxation.html - 11. https://www.nytimes.com/2018/10/25/style/journaling-benefits.html - 12. https://www.nytimes.com/2017/10/07/style/personality-type-the-four-tendencies-gretchen-rubin.html - 13. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-bottom - 14. https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice - 15. https://www.nytco.com/ - 16. https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us - 17. https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility - 18. https://www.nytco.com/careers/ - 19. https://nytmediakit.com/ - 20. https://www.tbrandstudio.com/ - 21. https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers - 22. https://www.nytimes.com/privacy/privacy-policy - 23. https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service - 24. https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale - 25. https://www.nytimes.com/sitemap/ - 26. https://www.nytimes.com/ca/?action=click®ion=Footer&pgtype=Homepage - 27. https://www.nytimes.com/international/?action=click®ion=Footer&pgtype=Homepage - 28. https://help.nytimes.com/hc/en-us - 29. https://www.nytimes.com/subscription?campaignId=37WXW - 30. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x +References: - Hidden links: - 32. https://www.nytimes.com/ - 33. https://www.nytimes.com/ - 34. https://www.nytimes.com/ +[1] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-content +[2] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-index +[3] https://www.nytimes.com/ +[4] https://www.nytimes.com/section/style +[5] https://www.nytimes.com/ +[6] https://www.nytimes.com/ +[10] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-sponsor +[14] https://www.nytimes.com/by/penelope-green +[15] https://www.nytimes.com/by/penelope-green +[16] https://www.opencenter.org/ +[17] https://tim.blog/tag/artists-way/ +[18] https://www.nytimes.com/2016/04/21/fashion/adult-coloring-books-relaxation.html +[19] https://www.nytimes.com/2018/10/25/style/journaling-benefits.html +[20] https://www.nytimes.com/2017/10/07/style/personality-type-the-four-tendencies-gretchen-rubin.html +[21] https://www.nytimes.com/by/penelope-green +[22] https://www.nytimes.com/by/penelope-green +[23] https://www.parsintl.com/publication/the-new-york-times/ +[24] https://www.nytimes.com/section/todayspaper +[25] https://www.nytimes.com/subscriptions/Multiproduct/lp8HYKU.html?campaignId=48JQY +[29] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-bottom +[30] https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice +[31] https://www.nytco.com/ +[32] https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us +[33] https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility +[34] https://www.nytco.com/careers/ +[35] https://nytmediakit.com/ +[36] https://www.tbrandstudio.com/ +[37] https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers +[38] https://www.nytimes.com/privacy/privacy-policy +[39] https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service +[40] https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale +[41] https://www.nytimes.com/sitemap/ +[42] https://www.nytimes.com/ca/ +[43] https://www.nytimes.com/international/ +[44] https://help.nytimes.com/hc/en-us +[45] https://www.nytimes.com/subscription?campaignId=37WXW +[46] https://www.nytimes.com/privacy/manage-settings diff --git a/static/archive/www-nytimes-com-s2rtib.txt b/static/archive/www-nytimes-com-s2rtib.txt index 25c1b83..040883e 100644 --- a/static/archive/www-nytimes-com-s2rtib.txt +++ b/static/archive/www-nytimes-com-s2rtib.txt @@ -1,458 +1,437 @@ - [1]Skip to content[2]Skip to site index - (BUTTON) +[1]Skip to content[2]Skip to site index +[3] -[3]Comments +[5]Comments - [4]36 Hours in Durham, N.C.[5]Skip to Comments - The comments section is closed. To submit a letter to the editor for - publication, write to [6]letters@nytimes.com. +[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 [8]letters@nytimes.com. - 36 Hours +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 - Durham, N.C. - Jump to: - [9]Recommendations - [10]Itinerary - [11]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. + • + • + • 164 - 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 - East Durham and the Old Five Points neighborhood. This season, only the - brilliant fall foliage can compete with all the terrific food, drink - and local color there is to discover across Dur’m, as residents - affectionately call the dynamic Bull City. +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: +[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. + +The evolution of Durham from a faded tobacco town to a diverse cultural and +culinary destination has been years in the making. But the ongoing development +of this central North Carolina city seems to have reached a new stage. The +resurgent downtown area — long a transitional neighborhood with pockets of +progress — is now brimming with new restaurants, boutiques, bars and breweries. +And while construction continues apace amid the historic [17]brick warehouses, +[18]tobacco factories and [19]textile mills — for [20]good and [21]ill — +visitors today have reason to venture farther afield, to emerging hotspots in +East Durham and the Old Five Points neighborhood. This season, only the +brilliant fall foliage can compete with all the terrific food, drink and local +color there is to discover across Dur’m, as residents affectionately call the +dynamic Bull City. Recommendations - Key stops - * The [17]Nasher Museum of Art, on Duke University's Central Campus, - presents rotating exhibitions, including a current exhibition - curated by ChatGPT. - * [18]Saltbox Seafood Joint serves fresh, seasonal seafood caught off - the North Carolina coast, along with honey-drizzled hush puppies. - * [19]Mystic Farm & Distillery is a 22-acre bourbon distillery that - offers weekend tours and free tastings of the label’s full range of - spirits. - * [20]The Velvet Hippo is a lively new bar serving fruity slushies - and creative cocktails on a rooftop downtown. +Key stops - Attractions and outdoor activities - * At the [21]Sarah P. Duke Gardens, five miles of pathways wind past - magnolias, blooming roses and a lake framed by vibrant foliage in - the fall. - * [22]Bennett Place is a Civil War site, with a small on-site museum, - where Union and Confederate generals negotiated the war’s largest - troop surrender in the home of a local family. - * At [23]Eno River State Park and in [24]West Point on the Eno, a - city park five miles north of downtown, there are dozens of trails - to choose from. + • The [22]Nasher Museum of Art, on Duke University's Central Campus, presents + rotating exhibitions, including a current exhibition curated by ChatGPT. + • [23]Saltbox Seafood Joint serves fresh, seasonal seafood caught off the + North Carolina coast, along with honey-drizzled hush puppies. + • [24]Mystic Farm & Distillery is a 22-acre bourbon distillery that offers + weekend tours and free tastings of the label’s full range of spirits. + • [25]The Velvet Hippo is a lively new bar serving fruity slushies and + creative cocktails on a rooftop downtown. - Restaurants and bars - * [25]Ponysaurus Brewing Co. is a downtown craft brewery with - crackling fire pits in a leafy garden strung with lights. - * [26]Ideal’s is a sandwich shop in East Durham with lines out the - door at lunchtime. - * [27]Mike D’s BBQ, also in East Durham, is a new barbecue joint - serving brisket and smoked beans. - * [28]Little Bull is a new restaurant in the Old Five Points - neighborhood that serves dumplings stuffed with goat birria in a - bowl of rich consomé. - * [29]Motorco Music Hall is a concert venue that also hosts dance - parties. - * [30]Corpse Reviver is a cocktail bar in a former coffin shop. - * [31]Monuts is a bustling Ninth Street bakery and cafe that began as - a tricycle vendor peddling doughnuts at the Durham Farmers’ Market. - * [32]Rose’s Noodles, Dumplings and Sweets is a former meat market - and sweets shop that evolved into a casual East Asian-inspired - eatery. +Attractions and outdoor activities - 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. + • At the [26]Sarah P. Duke Gardens, five miles of pathways wind past + magnolias, blooming roses and a lake framed by vibrant foliage in the fall. + • [27]Bennett Place is a Civil War site, with a small on-site museum, where + Union and Confederate generals negotiated the war’s largest troop surrender + in the home of a local family. + • At [28]Eno River State Park and in [29]West Point on the Eno, a city park + five miles north of downtown, there are dozens of trails to choose from. - 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. - Doubles from $189. - * Look for a short-term rental in Trinity Park, a leafy residential - district between downtown and Duke University’s East Campus, a - short walk from many restaurants, bars, breweries and music venues. +Restaurants and bars - Getting around - * Downtown Durham is walkable but you’ll need a car to reach - locations farther afield. If you don’t have your own, there are - ride-share options, including Uber and Lyft. [42]Buses also run - throughout the city (and are free through June 2024). + • [30]Ponysaurus Brewing Co. is a downtown craft brewery with crackling fire + pits in a leafy garden strung with lights. + • [31]Ideal’s is a sandwich shop in East Durham with lines out the door at + lunchtime. + • [32]Mike D’s BBQ, also in East Durham, is a new barbecue joint serving + brisket and smoked beans. + • [33]Little Bull is a new restaurant in the Old Five Points neighborhood + that serves dumplings stuffed with goat birria in a bowl of rich consomé. + • [34]Motorco Music Hall is a concert venue that also hosts dance parties. + • [35]Corpse Reviver is a cocktail bar in a former coffin shop. + • [36]Monuts is a bustling Ninth Street bakery and cafe that began as a + tricycle vendor peddling doughnuts at the Durham Farmers’ Market. + • [37]Rose’s Noodles, Dumplings and Sweets is a former meat market and sweets + shop that evolved into a casual East Asian-inspired eatery. + +Shopping + + • [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 [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. + • [46]21c Museum Hotel is a more contemporary option downtown with 125 rooms, + an art-filled restaurant and an on-site art gallery. Doubles from $189. + • Look for a short-term rental in Trinity Park, a leafy residential district + between downtown and Duke University’s East Campus, a short walk from many + restaurants, bars, breweries and music venues. + +Getting around + + • Downtown Durham is walkable but you’ll need a car to reach locations + farther afield. If you don’t have your own, there are ride-share options, + including Uber and Lyft. [47]Buses also run throughout the city (and are + free through June 2024). Itinerary - Friday - A square, beige-brick building with a colorful banner that reads: - Nasher Museum of Art - 3:30 p.m. Visit a campus museum - Anyone concerned that artificial intelligence will eventually do their - job may be put at ease by the new exhibition at Duke University’s - [43]Nasher Museum of Art, “Act as if You Are a Curator,” which was - organized not by museum staff but by ChatGPT, OpenAI’s popular chatbot - (through Jan. 14; free admission). The eclectic A.I.-generated - exhibition spans Mesoamerican stone figures and Salvador Dalí works - selected from the museum’s nearly 14,000-piece collection, though many - were mislabeled by the chatbot (as noted by a flesh-and-blood curator). - More cohesive is the moving — and human-curated — exhibition of - photographs and collage installations from the artist Lyle Ashton - Harris (through Jan. 7). While on campus, stroll through the nearby - [44]Sarah P. Duke Gardens, where five miles of serene pathways wind - past magnolias, blooming roses and a lake reflecting autumnal colors. - 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. - Saltbox Seafood Joint - 6 p.m. Feast on Carolina seafood - Fresh, seasonal seafood caught off the North Carolina coast is the - simple, winning formula at [45]Saltbox Seafood Joint, a restaurant - owned by the chef Ricky Moore, who earned the 2022 James Beard Award - for the best chef in the Southeast. What began as a tiny takeaway shack - in the Old Five Points neighborhood is now a spacious, but still - frill-free, sit-down locale on Durham-Chapel Hill Boulevard. Luckily, - the menu hasn’t changed much: You can still get heaping plates of fried - oysters, blue crab, mullet and clams with generous portions of fried - potatoes and collard greens. My go-to is the fried catfish sandwich - topped with citrusy red-cabbage slaw ($14) and a side of Hush-Honeys, - the chef’s trademarked take on cornmeal fritters drizzled with honey - ($4). - Two people sit at a wooden table with plastic orange seats. They are - looking at two chalkboard menus advertising seafood options above an - open kitchen. An orange life preserver hangs on the wall between the - two chalkboard menus. - Saltbox Seafood Joint - 8:30 p.m. Try a local beer by the firepit - The competition is growing among the many craft breweries downtown, - where out-of-town brewers — like Asheville’s [46]Dssolvr and - [47]Hi-Wire Brewing — have opened Durham taprooms in an area that’s - already home to longtime local favorites like [48]Fullsteam Brewery and - the [49]Durty Bull Brewing Company. But on a crisp fall evening, the - most atmospheric place for a locally brewed pint is easily - [50]Ponysaurus Brewing Co., an independent craft brewery with crackling - fire pits in a leafy garden strung with lights. Try the - tangerine-tinged Golden Rule Saison ($6) and a scoop of the house snack - mixes, like the pretzel-and-peanutty Bartender’s Blend ($1). - A view of a white water tower rising against a blue sky. A logo on the - tower reads: - Durham’s downtown brims with new restaurants, boutiques and breweries - amid historic brick warehouses, tobacco factories and textile mills. +Friday - 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. - Bennett Place - 9:30 a.m. Take a history lesson - Swing by [51]Monuts, a Ninth Street bakery and cafe, to pick up a - cinnamon-and-molasses-glazed pumpkin-spice doughnut ($2.50) and Hot - Apple Chai-der, a steaming blend of apple cider and chai tea ($5.50), - before heading out west for a dive into North Carolina history. Beyond - Civil War scholars, few are likely to recall what transpired at - [52]Bennett Place, a historic farmstead about six miles northwest of - downtown. One of the few Civil War sites not associated with battle, - this out-of-the-way landmark is where the Union general William T. - Sherman and the Confederate general Joseph E. Johnston negotiated the - largest troop surrender of the war — nearly 90,000 soldiers from the - Carolinas, Georgia and Florida — inside the home of a local family in - 1865. Begin a visit in the small museum, where a short video explains - the site’s significance, then head across the lawn to tour the - reconstructed farmhouse and surrounding outbuildings where the generals - hashed out the terms (free admission). - The interior of an old-fashioned room with wooden floors, wooden walls - and a wooden ceiling. It is sparsely furnished, with two wooden chairs - and a wooden chest. Sunlight comes into the room from a window. - Bennett Place - 12 p.m. Seek sandwiches in the east - A former food desert, East Durham has emerged as a lunchtime - destination for hungry diners from across the city. You’ll know you’ve - found [53]Ideal’s, a sandwich shop that opened in 2021, by the line - snaking down the sidewalk (don’t worry, it moves quickly). Here, - freshly baked rolls — sesame-crusted hoagies and rosemary focaccia — - are the foundation for superb deli sandwiches. Best is the Philly-style - roast pork with provolone and garlicky broccoli rabe ($8.50 for a - half-hoagie) and the thick-cut garlic-and-onion potato chips ($1.75). - Another notable newcomer is [54]Mike D’s BBQ, a barbecue joint that - opened nearby in July. Go there for a brisket sandwich doused with the - signature smoky-sweet sauce ($10), a side of smoked beans ($5) and - sweet tea ($4). - Rows of barrels that have the word - Mystic Farm & Distillery - 2 p.m. Sip North Carolina bourbon - Whatever your preferred spirit, there’s likely someone in Durham - distilling it. Small-production craft booze — from [55]mead and - [56]cider to [57]gin and [58]rye — have exploded in popularity - recently, and one producer worth seeking out is [59]Mystic Farm & - Distillery, about six miles east of downtown. Drop in at this bucolic - 22-acre bourbon distillery for a free tasting of the full range of - spirits, including the award-winning Broken Oak bourbon and a smooth - cacao-finished version made with cacao nibs from Raleigh’s [60]Videri - Chocolate Factory. Small group tours are also offered on weekends ($20; - reserve in advance). - 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. - A glass dish with sliced fish that is garnished with flowers. - Little Bull - 7 p.m. Dine on fresh Mexican-American flavors - Downtown Durham is packed with great restaurants, but head a bit north - to the Old Five Points neighborhood where the city’s latest hotspot, - [67]Little Bull, opened on a quiet block in June. The chef Oscar Diaz, - already well-known in Raleigh for his Mexican-American cuisine, again - tapped his heritage when creating the playful menu. Highlights of a - recent meal included crudo with North Carolina tuna, aguachile, wasabi - and flying-fish roe ($18), plantain empanadas ($16) and soft dumplings - stuffed with goat birria in a bowl of rich consomé ($16). Stick to the - small plates as portions are generous, and save room for dessert: The - churro balls with chocolate sauce ($9) are divine. - 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. - 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, - 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. - Corpse Reviver - The West Point Mill along the Eno River. Follow the yellow trail - markers from the mill to reach Sennett’s Hole, a popular summertime - swimming spot. +A square, beige-brick building with a colorful banner that reads: +Nasher Museum of Art +3:30 p.m. Visit a campus museum +Anyone concerned that artificial intelligence will eventually do their job may +be put at ease by the new exhibition at Duke University’s [48]Nasher Museum of +Art, “Act as if You Are a Curator,” which was organized not by museum staff but +by ChatGPT, OpenAI’s popular chatbot (through Jan. 14; free admission). The +eclectic A.I.-generated exhibition spans Mesoamerican stone figures and +Salvador Dalí works selected from the museum’s nearly 14,000-piece collection, +though many were mislabeled by the chatbot (as noted by a flesh-and-blood +curator). More cohesive is the moving — and human-curated — exhibition of +photographs and collage installations from the artist Lyle Ashton Harris +(through Jan. 7). While on campus, stroll through the nearby [49]Sarah P. Duke +Gardens, where five miles of serene pathways wind past magnolias, blooming +roses and a lake reflecting autumnal colors. +A square, beige-brick building with a colorful banner that reads: +Nasher Museum of Art +Two people sit at a wooden table with plastic orange seats. They are looking at +two chalkboard menus advertising seafood options above an open kitchen. An +orange life preserver hangs on the wall between the two chalkboard menus. +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 [50]Saltbox Seafood Joint, a restaurant owned by the chef +Ricky Moore, who earned the 2022 James Beard Award for the best chef in the +Southeast. What began as a tiny takeaway shack in the Old Five Points +neighborhood is now a spacious, but still frill-free, sit-down locale on +Durham-Chapel Hill Boulevard. Luckily, the menu hasn’t changed much: You can +still get heaping plates of fried oysters, blue crab, mullet and clams with +generous portions of fried potatoes and collard greens. My go-to is the fried +catfish sandwich topped with citrusy red-cabbage slaw ($14) and a side of +Hush-Honeys, the chef’s trademarked take on cornmeal fritters drizzled with +honey ($4). +Two people sit at a wooden table with plastic orange seats. They are looking at +two chalkboard menus advertising seafood options above an open kitchen. An +orange life preserver hangs on the wall between the two chalkboard menus. +Saltbox Seafood Joint +8:30 p.m. Try a local beer by the firepit +The competition is growing among the many craft breweries downtown, where +out-of-town brewers — like Asheville’s [51]Dssolvr and [52]Hi-Wire Brewing — +have opened Durham taprooms in an area that’s already home to longtime local +favorites like [53]Fullsteam Brewery and the [54]Durty Bull Brewing Company. +But on a crisp fall evening, the most atmospheric place for a locally brewed +pint is easily [55]Ponysaurus Brewing Co., an independent craft brewery with +crackling fire pits in a leafy garden strung with lights. Try the +tangerine-tinged Golden Rule Saison ($6) and a scoop of the house snack mixes, +like the pretzel-and-peanutty Bartender’s Blend ($1). +A view of a white water tower rising against a blue sky. A logo on the tower +reads: +Durham’s downtown brims with new restaurants, boutiques and breweries amid +historic brick warehouses, tobacco factories and textile mills. - Sunday - Eno River State Park - 9 a.m. Hike along the river - Catch the season at its most colorful along the Eno River, where there - are dozens of trails to choose from in the [73]Eno River State Park and - in [74]West Point on the Eno, a city park five miles north of downtown - that is anchored by the historic West Point Mill. One scenic route - begins at the mill, then climbs through the forest along the river - (follow the yellow trail markers). After about 20 minutes, hop across - the rocks crossing a shallow tributary to reach Sennett’s Hole, a - natural pool — and popular summertime swimming spot — with small - waterfalls and turtles warming themselves on the rocks on sunny days. - Eno River State Park - 11 a.m. Slurp some noodles - Refuel after a hike with brunch at [75]Rose’s Noodles, Dumplings and - Sweets, a former meat market and sweets shop near Brightleaf Square - that evolved into a casual East Asian-inspired eatery serving fragrant - bowls of beef pho ($17) and Thai rice soup ($14). The selection of - cakes, cookies and pastries is impressive, but best are the ice-cream - sandwiches that easily serve two — my favorite is the white miso flavor - between chewy gingersnaps ($7). - (BUTTON) Read Comments +Saturday - Correction: - Nov. 2, 2023 +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 [56]Monuts, a Ninth Street bakery and cafe, to pick up a +cinnamon-and-molasses-glazed pumpkin-spice doughnut ($2.50) and Hot Apple +Chai-der, a steaming blend of apple cider and chai tea ($5.50), before heading +out west for a dive into North Carolina history. Beyond Civil War scholars, few +are likely to recall what transpired at [57]Bennett Place, a historic farmstead +about six miles northwest of downtown. One of the few Civil War sites not +associated with battle, this out-of-the-way landmark is where the Union general +William T. Sherman and the Confederate general Joseph E. Johnston negotiated +the largest troop surrender of the war — nearly 90,000 soldiers from the +Carolinas, Georgia and Florida — inside the home of a local family in 1865. +Begin a visit in the small museum, where a short video explains the site’s +significance, then head across the lawn to tour the reconstructed farmhouse and +surrounding outbuildings where the generals hashed out the terms (free +admission). +The interior of an old-fashioned room with wooden floors, wooden walls and a +wooden ceiling. It is sparsely furnished, with two wooden chairs and a wooden +chest. Sunlight comes into the room from a window. +Bennett Place +12 p.m. Seek sandwiches in the east +A former food desert, East Durham has emerged as a lunchtime destination for +hungry diners from across the city. You’ll know you’ve found [58]Ideal’s, a +sandwich shop that opened in 2021, by the line snaking down the sidewalk (don’t +worry, it moves quickly). Here, freshly baked rolls — sesame-crusted hoagies +and rosemary focaccia — are the foundation for superb deli sandwiches. Best is +the Philly-style roast pork with provolone and garlicky broccoli rabe ($8.50 +for a half-hoagie) and the thick-cut garlic-and-onion potato chips ($1.75). +Another notable newcomer is [59]Mike D’s BBQ, a barbecue joint that opened +nearby in July. Go there for a brisket sandwich doused with the signature +smoky-sweet sauce ($10), a side of smoked beans ($5) and sweet tea ($4). +Rows of barrels that have the word +Mystic Farm & Distillery +2 p.m. Sip North Carolina bourbon +Whatever your preferred spirit, there’s likely someone in Durham distilling it. +Small-production craft booze — from [60]mead and [61]cider to [62]gin and [63] +rye — have exploded in popularity recently, and one producer worth seeking out +is [64]Mystic Farm & Distillery, about six miles east of downtown. Drop in at +this bucolic 22-acre bourbon distillery for a free tasting of the full range of +spirits, including the award-winning Broken Oak bourbon and a smooth +cacao-finished version made with cacao nibs from Raleigh’s [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 [66]Durham Vintage Collective, an inviting +second-hand boutique that opened in July, where you might find plaid +miniskirts, leather jackets or a framed Jean-Michel Basquiat lithograph. Across +the street, explore [67]Chet Miller, a well-stocked gift shop with +Durham-themed throw pillows, small-press travel guides, cookbooks from local +chefs and game-night jigsaw puzzles. Right next door, [68]EUtopia Design opened +last year selling exquisite Polish glassware and handcrafted ceramics. Scope +out the latest color-splashed exhibition at [69]Ella West Gallery, a sunny +space that opened in August showcasing contemporary art from Black, female and +other diverse and underrepresented artists. Then continue to East Main Street +to browse vinyl albums of jazz, soul, rock and bluegrass at [70]Carolina Soul +Records and at the new location of [71]Bull City Records across the street. +A glass dish with sliced fish that is garnished with flowers. +Little Bull +7 p.m. Dine on fresh Mexican-American flavors +Downtown Durham is packed with great restaurants, but head a bit north to the +Old Five Points neighborhood where the city’s latest hotspot, [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. +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 [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. +Corpse Reviver +[02-36HOURS-DURHAM-west-point-cvkl-mobileMasterAt3x-v2] +The West Point Mill along the Eno River. Follow the yellow trail markers from +the mill to reach Sennett’s Hole, a popular summertime swimming spot. - 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. +Sunday - (BUTTON) Read 164 Comments - * (BUTTON) - * (BUTTON) - * (BUTTON) - 164 +[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 [78]Eno River State Park and in [79]West +Point on the Eno, a city park five miles north of downtown that is anchored by +the historic West Point Mill. One scenic route begins at the mill, then climbs +through the forest along the river (follow the yellow trail markers). After +about 20 minutes, hop across the rocks crossing a shallow tributary to reach +Sennett’s Hole, a natural pool — and popular summertime swimming spot — with +small waterfalls and turtles warming themselves on the rocks on sunny days. +[02-36HOURS-DURHAM-eno-ghvw-mobileMasterAt3x] +Eno River State Park +11 a.m. Slurp some noodles +Refuel after a hike with brunch at [80]Rose’s Noodles, Dumplings and Sweets, a +former meat market and sweets shop near Brightleaf Square that evolved into a +casual East Asian-inspired eatery serving fragrant bowls of beef pho ($17) and +Thai rice soup ($14). The selection of cakes, cookies and pastries is +impressive, but best are the ice-cream sandwiches that easily serve two — my +favorite is the white miso flavor between chewy gingersnaps ($7). +Read Comments +Correction:  +Nov. 2, 2023 - Advertisement - [76]SKIP ADVERTISEMENT +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. + +Read 164 Comments + + • + • + • 164 + +Advertisement + +[86]SKIP ADVERTISEMENT Site Index Site Information Navigation - * [77]© 2024 The New York Times Company + • [87]© 2024 The New York Times Company - * [78]NYTCo - * [79]Contact Us - * [80]Accessibility - * [81]Work with us - * [82]Advertise - * [83]T Brand Studio - * [84]Your Ad Choices - * [85]Privacy Policy - * [86]Terms of Service - * [87]Terms of Sale - * [88]Site Map - * [89]Canada - * [90]International - * [91]Help - * [92]Subscriptions + • [88]NYTCo + • [89]Contact Us + • [90]Accessibility + • [91]Work with us + • [92]Advertise + • [93]T Brand Studio + • [94]Your Ad Choices + • [95]Privacy Policy + • [96]Terms of Service + • [97]Terms of Sale + • [98]Site Map + • [99]Canada + • [100]International + • [101]Help + • [102]Subscriptions - * [93]Manage Privacy Preferences + • [103]Manage Privacy Preferences - IFRAME: - [94]https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfA - zqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x -References +References: - Visible links: - 1. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-content - 2. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-index - 3. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#commentsContainer - 4. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html - 5. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html - 6. mailto:letters@nytimes.com - 7. https://www.nytimes.com/by/ingrid-k-williams - 8. https://www.nytimes.com/column/36-hours - 9. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#recommendations - 10. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#itinerary - 11. https://maps.app.goo.gl/EimCs7T5YjC3DZi27 - 12. https://www.brightleafdurham.com/ - 13. https://americantobacco.co/ - 14. https://goldenbeltarts.com/ - 15. https://indyweek.com/music/missy-lanes-assembly-room-cicely-mitchell/ - 16. https://www.nytimes.com/2018/05/01/business/durham-real-estate-growth.html - 17. https://nasher.duke.edu/ - 18. https://www.saltboxseafoodjoint.com/ - 19. https://www.whatismystic.com/ - 20. https://www.velvethippodurham.com/ - 21. https://gardens.duke.edu/ - 22. https://historicsites.nc.gov/all-sites/bennett-place - 23. https://www.ncparks.gov/state-parks/eno-river-state-park - 24. https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76 - 25. https://www.ponysaurusbrewing.com/ - 26. https://idealsdeli.com/ - 27. https://www.mikedsbbq.com/ - 28. https://www.littlebullnc.com/ - 29. https://motorcomusic.com/ - 30. https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge - 31. https://www.monutsdonuts.com/ - 32. https://rosesdurham.com/ - 33. https://www.instagram.com/durhamvintagecollective/?hl=en - 34. https://www.chetmillershop.com/ - 35. https://www.instagram.com/eutopia.design/?hl=en - 36. https://www.ellawestgallery.com/ - 37. https://www.carolinasoul.com/ - 38. https://www.bullcityrecords.com/ - 39. https://www.thedurham.com/ - 40. https://www.unscriptedhotels.com/ - 41. https://www.21cmuseumhotels.com/durham/ - 42. https://godurhamtransit.org/ - 43. https://nasher.duke.edu/ - 44. https://gardens.duke.edu/ - 45. https://www.saltboxseafoodjoint.com/ - 46. https://dssolvr.com/ - 47. https://hiwirebrewing.com/durham/ - 48. https://www.fullsteam.ag/ - 49. https://www.durtybull.com/ - 50. https://www.ponysaurusbrewing.com/ - 51. https://www.monutsdonuts.com/ - 52. https://historicsites.nc.gov/all-sites/bennett-place - 53. https://idealsdeli.com/ - 54. https://www.mikedsbbq.com/ - 55. https://www.honeygirlmeadery.com/ - 56. https://www.bullcityciderworks.com/ - 57. https://durhamdistillery.com/ - 58. https://www.libertyandplenty.com/ - 59. https://www.whatismystic.com/ - 60. https://viderichocolatefactory.com/ - 61. https://www.instagram.com/durhamvintagecollective/?hl=en - 62. https://www.chetmillershop.com/ - 63. https://www.instagram.com/eutopia.design/?hl=en - 64. https://www.ellawestgallery.com/ - 65. https://www.carolinasoul.com/ - 66. https://www.bullcityrecords.com/ - 67. https://www.littlebullnc.com/ - 68. https://downtowndurham.com/bullpen/ - 69. https://www.velvethippodurham.com/ - 70. https://motorcomusic.com/ - 71. https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge - 72. https://durhamdistillery.com/ - 73. https://www.ncparks.gov/state-parks/eno-river-state-park - 74. https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76 - 75. https://rosesdurham.com/ - 76. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#after-bottom - 77. https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice - 78. https://www.nytco.com/ - 79. https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us - 80. https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility - 81. https://www.nytco.com/careers/ - 82. https://nytmediakit.com/ - 83. https://www.tbrandstudio.com/ - 84. https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers - 85. https://www.nytimes.com/privacy/privacy-policy - 86. https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service - 87. https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale - 88. https://www.nytimes.com/sitemap/ - 89. https://www.nytimes.com/ca/ - 90. https://www.nytimes.com/international/ - 91. https://help.nytimes.com/hc/en-us - 92. https://www.nytimes.com/subscription?campaignId=37WXW - 93. https://www.nytimes.com/privacy/manage-settings - 94. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x - - Hidden links: - 96. https://www.nytimes.com/ +[1] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-content +[2] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-index +[3] https://www.nytimes.com/ +[5] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#commentsContainer +[6] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html +[7] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html +[8] mailto:letters@nytimes.com +[9] https://www.nytimes.com/by/ingrid-k-williams +[13] https://www.nytimes.com/column/36-hours +[14] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#recommendations +[15] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#itinerary +[16] https://maps.app.goo.gl/EimCs7T5YjC3DZi27 +[17] https://www.brightleafdurham.com/ +[18] https://americantobacco.co/ +[19] https://goldenbeltarts.com/ +[20] https://indyweek.com/music/missy-lanes-assembly-room-cicely-mitchell/ +[21] https://www.nytimes.com/2018/05/01/business/durham-real-estate-growth.html +[22] https://nasher.duke.edu/ +[23] https://www.saltboxseafoodjoint.com/ +[24] https://www.whatismystic.com/ +[25] https://www.velvethippodurham.com/ +[26] https://gardens.duke.edu/ +[27] https://historicsites.nc.gov/all-sites/bennett-place +[28] https://www.ncparks.gov/state-parks/eno-river-state-park +[29] https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76 +[30] https://www.ponysaurusbrewing.com/ +[31] https://idealsdeli.com/ +[32] https://www.mikedsbbq.com/ +[33] https://www.littlebullnc.com/ +[34] https://motorcomusic.com/ +[35] https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge +[36] https://www.monutsdonuts.com/ +[37] https://rosesdurham.com/ +[38] https://www.instagram.com/durhamvintagecollective/?hl=en +[39] https://www.chetmillershop.com/ +[40] https://www.instagram.com/eutopia.design/?hl=en +[41] https://www.ellawestgallery.com/ +[42] https://www.carolinasoul.com/ +[43] https://www.bullcityrecords.com/ +[44] https://www.thedurham.com/ +[45] https://www.unscriptedhotels.com/ +[46] https://www.21cmuseumhotels.com/durham/ +[47] https://godurhamtransit.org/ +[48] https://nasher.duke.edu/ +[49] https://gardens.duke.edu/ +[50] https://www.saltboxseafoodjoint.com/ +[51] https://dssolvr.com/ +[52] https://hiwirebrewing.com/durham/ +[53] https://www.fullsteam.ag/ +[54] https://www.durtybull.com/ +[55] https://www.ponysaurusbrewing.com/ +[56] https://www.monutsdonuts.com/ +[57] https://historicsites.nc.gov/all-sites/bennett-place +[58] https://idealsdeli.com/ +[59] https://www.mikedsbbq.com/ +[60] https://www.honeygirlmeadery.com/ +[61] https://www.bullcityciderworks.com/ +[62] https://durhamdistillery.com/ +[63] https://www.libertyandplenty.com/ +[64] https://www.whatismystic.com/ +[65] https://viderichocolatefactory.com/ +[66] https://www.instagram.com/durhamvintagecollective/?hl=en +[67] https://www.chetmillershop.com/ +[68] https://www.instagram.com/eutopia.design/?hl=en +[69] https://www.ellawestgallery.com/ +[70] https://www.carolinasoul.com/ +[71] https://www.bullcityrecords.com/ +[72] https://www.littlebullnc.com/ +[73] https://downtowndurham.com/bullpen/ +[74] https://www.velvethippodurham.com/ +[75] https://motorcomusic.com/ +[76] https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge +[77] https://durhamdistillery.com/ +[78] https://www.ncparks.gov/state-parks/eno-river-state-park +[79] https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76 +[80] https://rosesdurham.com/ +[86] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#after-bottom +[87] https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice +[88] https://www.nytco.com/ +[89] https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us +[90] https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility +[91] https://www.nytco.com/careers/ +[92] https://nytmediakit.com/ +[93] https://www.tbrandstudio.com/ +[94] https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers +[95] https://www.nytimes.com/privacy/privacy-policy +[96] https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service +[97] https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale +[98] https://www.nytimes.com/sitemap/ +[99] https://www.nytimes.com/ca/ +[100] https://www.nytimes.com/international/ +[101] https://help.nytimes.com/hc/en-us +[102] https://www.nytimes.com/subscription?campaignId=37WXW +[103] https://www.nytimes.com/privacy/manage-settings diff --git a/static/archive/www-nytimes-com-yrjrte.txt b/static/archive/www-nytimes-com-yrjrte.txt index b0cdd6a..f3357de 100644 --- a/static/archive/www-nytimes-com-yrjrte.txt +++ b/static/archive/www-nytimes-com-yrjrte.txt @@ -1,667 +1,634 @@ - #[1]alternate [2]Why Culture Has Come to a Standstill +The Magazine’s Culture Issue + + • Jesmyn Ward’s Literary South + • The Heart of Swiftiedom + • Culture at a Standstill + • Can Usher Save R&B? + • Sparring With Errol Morris + + • U.S. + • World + • Business + • Arts + • Lifestyle + • Opinion + • Audio + • Games + • Cooking + • Wirecutter + • The Athletic + +[13] The Magazine’s Culture Issue - * [3]Jesmyn Ward’s Literary South - * [4]The Heart of Swiftiedom - * [5]Culture at a Standstill - * [6]Can Usher Save R&B? - * [7]Sparring With Errol Morris + • [14]Jesmyn Ward’s Literary South + • [15]The Heart of Swiftiedom + • [16]Culture at a Standstill + • [17]Can Usher Save R&B? + • [18]Sparring With Errol Morris - An illustration of various people all bunched together. - Credit...Illustration by Tim Enthoven - - [8]Skip to content[9]Skip to site index - (BUTTON) Search & Section Navigation - (BUTTON) Section Navigation +An illustration of various people all bunched together. +Credit...Illustration by Tim Enthoven +[19]Skip to content[20]Skip to site index +[21] Why Culture Has Come to a Standstill - A Times critic argues that ours is the least innovative century for the - arts in 500 years. That doesn’t have to be a bad thing. +A Times critic argues that ours is the least innovative century for the arts in +500 years. That doesn’t have to be a bad thing. - Credit...Illustration by Tim Enthoven +Credit...Illustration by Tim Enthoven - Supported by - [10]SKIP ADVERTISEMENT - * (BUTTON) Share full article - * (BUTTON) - * (BUTTON) - * [11]1240 +Supported by - [12]Jason Farago +[22]SKIP ADVERTISEMENT - By [13]Jason Farago - * Oct. 10, 2023 + • Share full article + • + • + • [26]1240 - At the Metropolitan Museum of Art, in its fall blockbuster show, - [14]“Manet/Degas,” is a painting from 1866 of a woman in the latest - fashion. Victorine Meurent, Manet’s favorite model, stands in an empty - room, accompanied only by a parrot on a bird stand. Her trademark red - hair is tied back with a blue ribbon. Her head is slightly bowed as she - smells a nosegay in her right hand: probably a gift from an absent - admirer, just like the gentleman’s monocle in her left. She’s wearing a - silk peignoir, which Manet has rendered in buttery strokes of pink and - white. This is a full-length image, more than six feet tall, but - Victorine hasn’t even put on her best clothes. She’s in a dressing - gown, and the gown is amorphous. The gown is only paint. +[27]Jason Farago + +By [28]Jason Farago + + • Oct. 10, 2023 + +At the Metropolitan Museum of Art, in its fall blockbuster show, [29]“Manet/ +Degas,” is a painting from 1866 of a woman in the latest fashion. Victorine +Meurent, Manet’s favorite model, stands in an empty room, accompanied only by a +parrot on a bird stand. Her trademark red hair is tied back with a blue ribbon. +Her head is slightly bowed as she smells a nosegay in her right hand: probably +a gift from an absent admirer, just like the gentleman’s monocle in her left. +She’s wearing a silk peignoir, which Manet has rendered in buttery strokes of +pink and white. This is a full-length image, more than six feet tall, but +Victorine hasn’t even put on her best clothes. She’s in a dressing gown, and +the gown is amorphous. The gown is only paint. Listen to This Article - Open this article in the New York Times Audio app on iOS. +[30] - Manet called this painting “Young Lady in 1866,” and the title is the - briefest manifesto I know. After ages in which artists aimed for - timelessness, Manet pictured a woman living in 1866, in the Paris of - 1866, wearing clothes from 1866. The painting was a radical eruption of - temporal specificity. An art for this year, in this place, in a form - possible only now. +Open this article in the New York Times Audio app on iOS. - Image “Young Lady in 1866” - “Young Lady in 1866,” by Edouard Manet.Credit...Metropolitan Museum of - Art +Manet called this painting “Young Lady in 1866,” and the title is the briefest +manifesto I know. After ages in which artists aimed for timelessness, Manet +pictured a woman living in 1866, in the Paris of 1866, wearing clothes from +1866. The painting was a radical eruption of temporal specificity. An art for +this year, in this place, in a form possible only now. - Most artists and audiences at the time did not think this was such a - virtue. “Young Lady in 1866” got bad press at the Salon, the annual - exhibition of France’s official art academy, where artists aspired to - eternal beauty and eternal values, expressed through classicized motifs - and highly finished surfaces. Thomas Couture, Manet’s own teacher, - specialized in bloated but very technically proficient tableaux of - nymphs and heroes. Only a few Parisians could see, in the thick pallor - of Victorine’s face and the impetuous brushiness of her peignoir, the - mark of a new cultural dispensation. Baudelaire, Manet’s great friend, - articulated it in “The Flowers of Evil”: +Image“Young Lady in 1866” +“Young Lady in 1866,” by Edouard Manet.Credit...Metropolitan Museum of Art - O Death, old captain, it’s time! Lift anchor! - We’re sick of this country, Death! Let us sail ... - To the depths of the Unknown to find something new! +Most artists and audiences at the time did not think this was such a virtue. +“Young Lady in 1866” got bad press at the Salon, the annual exhibition of +France’s official art academy, where artists aspired to eternal beauty and +eternal values, expressed through classicized motifs and highly finished +surfaces. Thomas Couture, Manet’s own teacher, specialized in bloated but very +technically proficient tableaux of nymphs and heroes. Only a few Parisians +could see, in the thick pallor of Victorine’s face and the impetuous brushiness +of her peignoir, the mark of a new cultural dispensation. Baudelaire, Manet’s +great friend, articulated it in “The Flowers of Evil”: - To find something new! That was the imperative of modernism, not only - in painting but also in poetry, in theater, in music, in architecture - and eventually in the cinema. Your job as an artist was no longer to - glorify the king or the church, nor to imitate as faithfully as - possible the appearance of the outside world. It was to solder the next - link in a cultural chain — fashioning a novel utterance that took novel - shape even as it manifested its place in a larger history. “You have to - be absolutely modern,” Rimbaud declared; “Make it new,” Ezra Pound - instructed. To speak to your time, we once believed, required much more - than new “content.” It required a commitment to new modes of narration, - new styles of expression, that could bear witness to sea changes in - society. + O Death, old captain, it’s time! Lift anchor! + We’re sick of this country, Death! Let us sail ... + To the depths of the Unknown to find something new! - Manet, classically trained, figured out quickly that if he painted - scenes of Parisian prostitutes in the same manner as his teacher - painted Roman orgiasts, that wouldn’t cut it; he would have to invent a - new kind of painting — flatter, franker — if he wanted to capture - modern life. From then on, the creators who most decisively marked the - history of art, again and again, described their work as a search for a - new language, a new style, a new way of being. “I have transformed - myself in the zero of form,” Kazimir Malevich wrote in 1915, and in his - black square he found “the face of the new art.” Le Corbusier insisted - that his open floor plans, enabled by reinforced floating columns, were - not just an architectural aesthetic but an age: “Nothing is left to us - of the architecture of past epochs, just as we can no longer derive any - benefit from the literary and historical teaching given in schools.” - Aimé Césaire, who would revolutionize French poetry in the 20th century - as Baudelaire did in the 19th, understood that a modern Black - expression required “a new language, capable of expressing an African - heritage.” “In other words,” he said, “French was for me an instrument - that I wanted to twist into a new way of speaking.” +To find something new! That was the imperative of modernism, not only in +painting but also in poetry, in theater, in music, in architecture and +eventually in the cinema. Your job as an artist was no longer to glorify the +king or the church, nor to imitate as faithfully as possible the appearance of +the outside world. It was to solder the next link in a cultural chain — +fashioning a novel utterance that took novel shape even as it manifested its +place in a larger history. “You have to be absolutely modern,” Rimbaud +declared; “Make it new,” Ezra Pound instructed. To speak to your time, we once +believed, required much more than new “content.” It required a commitment to +new modes of narration, new styles of expression, that could bear witness to +sea changes in society. - For 160 years, we spoke about culture as something active, something - with velocity, something in continuous forward motion. What happens to - a culture when it loses that velocity, or even slows to a halt? Walking - through the other galleries of the Met after my third visit to - “Manet/Degas,” I started doing that thing all the Salon visitors used - to do in Paris in 1866: ignoring the paintings and scoping out the - other spectators’ clothes. I saw visitors in the skinny jeans that - defined the 2000s and in the roomy, high-waisted jeans that were - popular in the 1990s; neither style looked particularly au courant or - dated. Manet was a fashion maven, and I’d been marveling anew at the - gauzy white-striped gown with flared sleeves that Berthe Morisot wears - in [15]“The Balcony” to signal that she is a contemporary woman — that - she is alive right now. What piece of clothing or accessory could you - give a model to mark her as “Young Lady in 2023”? A titanium-cased - iPhone is all that comes to mind, and even that hasn’t changed its - appearance much in a decade. +Manet, classically trained, figured out quickly that if he painted scenes of +Parisian prostitutes in the same manner as his teacher painted Roman orgiasts, +that wouldn’t cut it; he would have to invent a new kind of painting — flatter, +franker — if he wanted to capture modern life. From then on, the creators who +most decisively marked the history of art, again and again, described their +work as a search for a new language, a new style, a new way of being. “I have +transformed myself in the zero of form,” Kazimir Malevich wrote in 1915, and in +his black square he found “the face of the new art.” Le Corbusier insisted that +his open floor plans, enabled by reinforced floating columns, were not just an +architectural aesthetic but an age: “Nothing is left to us of the architecture +of past epochs, just as we can no longer derive any benefit from the literary +and historical teaching given in schools.” Aimé Césaire, who would +revolutionize French poetry in the 20th century as Baudelaire did in the 19th, +understood that a modern Black expression required “a new language, capable of +expressing an African heritage.” “In other words,” he said, “French was for me +an instrument that I wanted to twist into a new way of speaking.” - To audiences in the 20th century, novelty seemed to be a cultural - birthright. Susan Sontag could write in 1965, with breezy confidence, - that new styles of art, cinema, music and dance “succeed one another so - rapidly as to seem to give their audiences no breathing space to - prepare.” Today culture remains capable of endless production, but it’s - far less capable of change. Intellectual property has swallowed the - cinema; the Hollywood studios that once proposed a slate of big, medium - and small pictures have hedged their bets, and even independent - directors have stuck with narrative and visual techniques born in the - 1960s. Have you tried to furnish an apartment lately? Whether you are - at Restoration Hardware or on Alibaba, what you are probably buying are - replicas of European antiques: “contemporary” designs first seen in - Milan in the 1970s or Weimar in the 1920s. Harry Styles is rocking in - the ’80s; Silk Sonic is jamming in the ’70s; somehow “Frasier” has been - revived and they barely had to update the wardrobes. +For 160 years, we spoke about culture as something active, something with +velocity, something in continuous forward motion. What happens to a culture +when it loses that velocity, or even slows to a halt? Walking through the other +galleries of the Met after my third visit to “Manet/Degas,” I started doing +that thing all the Salon visitors used to do in Paris in 1866: ignoring the +paintings and scoping out the other spectators’ clothes. I saw visitors in the +skinny jeans that defined the 2000s and in the roomy, high-waisted jeans that +were popular in the 1990s; neither style looked particularly au courant or +dated. Manet was a fashion maven, and I’d been marveling anew at the gauzy +white-striped gown with flared sleeves that Berthe Morisot wears in [31]“The +Balcony” to signal that she is a contemporary woman — that she is alive right +now. What piece of clothing or accessory could you give a model to mark her as +“Young Lady in 2023”? A titanium-cased iPhone is all that comes to mind, and +even that hasn’t changed its appearance much in a decade. - If the present state of culture feels directionless — it does to me, - and sussing out its direction is literally my job — that is principally - because we are still inculcated, so unconsciously we never even bother - to spell it out, in what the modernists believed: that good art is good - because it is innovative, and that an ambitious writer, composer, - director or choreographer should not make things too much like what - others have made before. But our culture has not been able to deliver - step changes for quite some time. When you walk through your local - museum’s modern wing, starting with Impressionism and following a - succession of avant-gardes through the development of Cubism, Dada, - Pop, minimalism, in the 1990s you arrive in a forest called “the - contemporary,” and after more than 30 years no path forward has been - revealed. On your drive home, you can turn on the decade-by-decade - stations of Sirius XM: the ’50s, ’60s, ’70s, ’80s and ’90s will each - sound distinct, but all the millennial nostalgia of the 2000s station - cannot disguise that “We Belong Together” and “Irreplaceable” do not - yet sound retro. When I was younger, I looked at cultural works as if - they were posts on a timeline, moving forward from Manet year by year. - Now I find myself adrift in an eddy of cultural signs, where everything - just floats, and I can only tell time on my phone. +To audiences in the 20th century, novelty seemed to be a cultural birthright. +Susan Sontag could write in 1965, with breezy confidence, that new styles of +art, cinema, music and dance “succeed one another so rapidly as to seem to give +their audiences no breathing space to prepare.” Today culture remains capable +of endless production, but it’s far less capable of change. Intellectual +property has swallowed the cinema; the Hollywood studios that once proposed a +slate of big, medium and small pictures have hedged their bets, and even +independent directors have stuck with narrative and visual techniques born in +the 1960s. Have you tried to furnish an apartment lately? Whether you are at +Restoration Hardware or on Alibaba, what you are probably buying are replicas +of European antiques: “contemporary” designs first seen in Milan in the 1970s +or Weimar in the 1920s. Harry Styles is rocking in the ’80s; Silk Sonic is +jamming in the ’70s; somehow “Frasier” has been revived and they barely had to +update the wardrobes. - Image - Credit...Illustration by Tim Enthoven +If the present state of culture feels directionless — it does to me, and +sussing out its direction is literally my job — that is principally because we +are still inculcated, so unconsciously we never even bother to spell it out, in +what the modernists believed: that good art is good because it is innovative, +and that an ambitious writer, composer, director or choreographer should not +make things too much like what others have made before. But our culture has not +been able to deliver step changes for quite some time. When you walk through +your local museum’s modern wing, starting with Impressionism and following a +succession of avant-gardes through the development of Cubism, Dada, Pop, +minimalism, in the 1990s you arrive in a forest called “the contemporary,” and +after more than 30 years no path forward has been revealed. On your drive home, +you can turn on the decade-by-decade stations of Sirius XM: the ’50s, ’60s, +’70s, ’80s and ’90s will each sound distinct, but all the millennial nostalgia +of the 2000s station cannot disguise that “We Belong Together” and +“Irreplaceable” do not yet sound retro. When I was younger, I looked at +cultural works as if they were posts on a timeline, moving forward from Manet +year by year. Now I find myself adrift in an eddy of cultural signs, where +everything just floats, and I can only tell time on my phone. - We are now almost a quarter of the way through what looks likely to go - down in history as the least innovative, least transformative, least - pioneering century for culture since the invention of the printing - press. There is new content, of course, so much content, and there are - new themes; there are new methods of production and distribution, more - diverse creators and more global audiences; there is more singing in - hip-hop and more sampling on pop tracks; there are TV detectives with - smartphones and lovers facing rising seas. Twenty-three years in, - though, shockingly few works of art in any medium — some albums, a - handful of novels and artworks and barely any plays or poems — have - been created that are unassimilable to the cultural and critical - standards that audiences accepted in 1999. To pay attention to culture - in 2023 is to be belted into some glacially slow Ferris wheel, cycling - through remakes and pastiches with nowhere to go but around. The - suspicion gnaws at me (does it gnaw at you?) that we live in a time and - place whose culture seems likely to be forgotten. +Image +Credit...Illustration by Tim Enthoven - To any claim that cultural progress is “over,” there is an easy and not - inaccurate retort: Well, what about X? And sure enough, our time has - indeed brought forth wonderful, meaningful cultural endeavors. I find - the sculptures of [16]Nairy Baghramian, the [17]videos of Stan Douglas - and the [18]environments of Pierre Huyghe to be artistic achievements - of the highest caliber; I think [19]Ali Smith is writing novels of - tremendous immediacy; I believe [20]“Transit” and [21]“Drive My Car” - reaffirm the vitality of cinema; I love [22]South African amapiano and - [23]Korean soap operas and [24]Ukrainian electronic music. My own - cultural life is very rich, and this is not some rant that once - everyone was so creative and now they’re all poseurs. I am asking a - different and peskier question: why cultural production no longer - progresses in time as it once did. +We are now almost a quarter of the way through what looks likely to go down in +history as the least innovative, least transformative, least pioneering century +for culture since the invention of the printing press. There is new content, of +course, so much content, and there are new themes; there are new methods of +production and distribution, more diverse creators and more global audiences; +there is more singing in hip-hop and more sampling on pop tracks; there are TV +detectives with smartphones and lovers facing rising seas. Twenty-three years +in, though, shockingly few works of art in any medium — some albums, a handful +of novels and artworks and barely any plays or poems — have been created that +are unassimilable to the cultural and critical standards that audiences +accepted in 1999. To pay attention to culture in 2023 is to be belted into some +glacially slow Ferris wheel, cycling through remakes and pastiches with nowhere +to go but around. The suspicion gnaws at me (does it gnaw at you?) that we live +in a time and place whose culture seems likely to be forgotten. - I have a few theories, but one to start with is that the modernist - cultural explosion might very well have been like the growth of the - economy more generally: not the perpetual forward march we were - promised in the 20th century, but a one-time-only rocket blast followed - by a long, slow, disappointing glide. As the economist Robert Gordon - has shown, the transformative growth of the period between 1870 and - 1970 — the “special century,” he calls it — was an anomalous superevent - fueled by unique and unrepeatable innovations (electricity, sanitation, - the combustion engine) whose successors (above all information - technology) have not had the same economic impact. In the United - States, the 2010s had the slowest productivity growth of any decade in - recorded history; if you believe you are living in the future, I am - guessing you have not recently been on United Airlines. In this - macroeconomic reading, a culture that no longer delivers expected - stylistic innovations might just be part and parcel of a more generally - underachieving century, and not to be tutted at in isolation. +To any claim that cultural progress is “over,” there is an easy and not +inaccurate retort: Well, what about X? And sure enough, our time has indeed +brought forth wonderful, meaningful cultural endeavors. I find the sculptures +of [32]Nairy Baghramian, the [33]videos of Stan Douglas and the [34] +environments of Pierre Huyghe to be artistic achievements of the highest +caliber; I think [35]Ali Smith is writing novels of tremendous immediacy; I +believe [36]“Transit” and [37]“Drive My Car” reaffirm the vitality of cinema; I +love [38]South African amapiano and [39]Korean soap operas and [40]Ukrainian +electronic music. My own cultural life is very rich, and this is not some rant +that once everyone was so creative and now they’re all poseurs. I am asking a +different and peskier question: why cultural production no longer progresses in +time as it once did. - But more than the economics, the key factor can only be what happened - to us at the start of this century: first, the plunge through our - screens into an infinity of information; soon after, our submission to - algorithmic recommendation engines and the surveillance that powers - them. The digital tools we embraced were heralded as catalysts of - cultural progress, but they produced such chronological confusion that - progress itself made no sense. “It’s still one Earth,” the novelist - Stacey D’Erasmo wrote in 2014, “but it is now subtended by a layer of - highly elastic non-time, wild time, that is akin to a global collective - unconscious wherein past, present and future occupy one unmediated - plane.” In this dark wood, today and yesterday become hard to - distinguish. The years are only time stamps. Objects lose their - dimensions. Everything is recorded, nothing is remembered; culture is a - thing to nibble at, to graze on. +I have a few theories, but one to start with is that the modernist cultural +explosion might very well have been like the growth of the economy more +generally: not the perpetual forward march we were promised in the 20th +century, but a one-time-only rocket blast followed by a long, slow, +disappointing glide. As the economist Robert Gordon has shown, the +transformative growth of the period between 1870 and 1970 — the “special +century,” he calls it — was an anomalous superevent fueled by unique and +unrepeatable innovations (electricity, sanitation, the combustion engine) whose +successors (above all information technology) have not had the same economic +impact. In the United States, the 2010s had the slowest productivity growth of +any decade in recorded history; if you believe you are living in the future, I +am guessing you have not recently been on United Airlines. In this +macroeconomic reading, a culture that no longer delivers expected stylistic +innovations might just be part and parcel of a more generally underachieving +century, and not to be tutted at in isolation. - If there is one cultural work that epitomizes this shift, where you can - see our new epoch coming into view, I want to say it’s [25]“Back to - Black,” by Amy Winehouse. The album dates to October 2006 — seven - months after Twitter was founded, three months before the iPhone - debuted — and it seems, listening again now, to be closing the door on - the cultural system that Manet and Baudelaire established a century and - a half previously. As the millennium dawned, there had been various - efforts to write the symphony of the future (the last of which was - probably Missy Elliott’s “Da Real World,” a “Matrix”-inspired album - from 1999 that promised to sound like “not the year 2G but the year - 3G”). There had also been various retroprojections, trying to - inaugurate a new century with pre-Woodstock throwbacks (waxed - mustaches, speakeasies; perhaps you recall an embarrassing circa-2000 - vogue for swing dancing). +But more than the economics, the key factor can only be what happened to us at +the start of this century: first, the plunge through our screens into an +infinity of information; soon after, our submission to algorithmic +recommendation engines and the surveillance that powers them. The digital tools +we embraced were heralded as catalysts of cultural progress, but they produced +such chronological confusion that progress itself made no sense. “It’s still +one Earth,” the novelist Stacey D’Erasmo wrote in 2014, “but it is now +subtended by a layer of highly elastic non-time, wild time, that is akin to a +global collective unconscious wherein past, present and future occupy one +unmediated plane.” In this dark wood, today and yesterday become hard to +distinguish. The years are only time stamps. Objects lose their dimensions. +Everything is recorded, nothing is remembered; culture is a thing to nibble at, +to graze on. - Image - Amy Winehouse at the Highline Ballroom in New York in - 2007.Credit...Michael Nagle for The New York Times +If there is one cultural work that epitomizes this shift, where you can see our +new epoch coming into view, I want to say it’s [41]“Back to Black,” by Amy +Winehouse. The album dates to October 2006 — seven months after Twitter was +founded, three months before the iPhone debuted — and it seems, listening again +now, to be closing the door on the cultural system that Manet and Baudelaire +established a century and a half previously. As the millennium dawned, there +had been various efforts to write the symphony of the future (the last of which +was probably Missy Elliott’s “Da Real World,” a “Matrix”-inspired album from +1999 that promised to sound like “not the year 2G but the year 3G”). There had +also been various retroprojections, trying to inaugurate a new century with +pre-Woodstock throwbacks (waxed mustaches, speakeasies; perhaps you recall an +embarrassing circa-2000 vogue for swing dancing). - “Back to Black” was the first major cultural work of the 21st century - that was neither new nor retro — but rather contented itself to float - in time, to sound as if it came from no particular era. Winehouse wore - her hair in a beehive, her band wore fedoras, but she was not - performing a tribute act of any kind. Her production drew from the - Great American Songbook, ’60s girl groups, also reggae and ska, but it - never felt anachronistic or like a “postmodern” pastiche. Listen again - to the title track and its percussive piano line: a stationary, - metronomic cycle of D minor, G minor, B-flat major, and A7. The bass - line of the piano overlays the chords with a syncopated swing, while a - tambourine slaps and jangles with joyless regularity. We are back to - Phil Spector’s Wall of Sound, we are waiting for the Shangri-Las or the - Ronettes to come in, but instead Winehouse delivers a much more ragged - and minor-keyed performance, with a vulgarity in the song’s second line - that Martha Reeves would never pronounce. There is a discrepancy - between vocals and instrumentation that is never resolved, and the - artistry is all in that irresolution. +Image +Amy Winehouse at the Highline Ballroom in New York in 2007.Credit...Michael +Nagle for The New York Times -Who cares if it’s novel as long as it’s beautiful, or meaningful? +“Back to Black” was the first major cultural work of the 21st century that was +neither new nor retro — but rather contented itself to float in time, to sound +as if it came from no particular era. Winehouse wore her hair in a beehive, her +band wore fedoras, but she was not performing a tribute act of any kind. Her +production drew from the Great American Songbook, ’60s girl groups, also reggae +and ska, but it never felt anachronistic or like a “postmodern” pastiche. +Listen again to the title track and its percussive piano line: a stationary, +metronomic cycle of D minor, G minor, B-flat major, and A7. The bass line of +the piano overlays the chords with a syncopated swing, while a tambourine slaps +and jangles with joyless regularity. We are back to Phil Spector’s Wall of +Sound, we are waiting for the Shangri-Las or the Ronettes to come in, but +instead Winehouse delivers a much more ragged and minor-keyed performance, with +a vulgarity in the song’s second line that Martha Reeves would never pronounce. +There is a discrepancy between vocals and instrumentation that is never +resolved, and the artistry is all in that irresolution. - What Winehouse prefigured was a culture of an eternal present: a - digitally informed sense of placelessness and atemporality that has - left so many of us disoriented from our earlier cultural signposts. - Each song on “Back to Black” seemed to be “borrowing from all the last - century’s music history at once,” as the media scholar Moira Weigel - once observed, though there was something contemporary about that - timelessness too. Extracted from the past into lightweight MP3s, all - the girl-group and jazz prefigurations began to seem just as immediate - as Winehouse’s North London present. + Who cares if it’s novel as long as it’s beautiful, or meaningful? - As early as 2006, well before the reverse chronology of blogs and the - early Facebook gave way to the algorithmic soup of Instagram, Spotify - and TikTok, Winehouse sensed that the real digital revolution in - culture would not be in production, in the machines that artists used - to make music or movies or books. It would be in reception: on the - screens where they (where we) encountered culture, on which past and - present are equidistant from each other. One upshot of this digital - equation of past and present has been a greater disposability of - culture: an infinite scroll and nothing to read, an infinite Netflix - library with nothing to watch. Though pop music still throws up new - stars now and then (I do really like [26]Ice Spice), the market for new - music fell behind older music in the middle of the last decade, and - even the records that sell, or stream, cannot be said to have wide - cultural impact. (The most popular single of 2022 in the United States - was [27]“Heat Waves,” a TikTok tune by a British alternative-pop group - with little public profile called Glass Animals; and what’s weirdest is - that it was recorded in 2020.) +What Winehouse prefigured was a culture of an eternal present: a digitally +informed sense of placelessness and atemporality that has left so many of us +disoriented from our earlier cultural signposts. Each song on “Back to Black” +seemed to be “borrowing from all the last century’s music history at once,” as +the media scholar Moira Weigel once observed, though there was something +contemporary about that timelessness too. Extracted from the past into +lightweight MP3s, all the girl-group and jazz prefigurations began to seem just +as immediate as Winehouse’s North London present. - Outside of time there can be no progress, only the perpetual trying-on - of styles and forms. Here years become vibes — or “eras,” as Taylor - Swift likes to call them. And if culture is just a series of trends, - then it is pointless to worry about their contemporaneity. There was a - charming freakout last year when Kate Bush’s 1985 single “Running Up - That Hill” went to the top of the charts after its deployment on yet - another nostalgic television show, and veterans of the big-hair decade - were horrified to see it appear on some 2022 playlists alongside Dua - Lipa and the like. If you think the song belongs to 1985 in the way - “Young Lady in 1866” belonged to 1866, the joke is now officially on - you. +As early as 2006, well before the reverse chronology of blogs and the early +Facebook gave way to the algorithmic soup of Instagram, Spotify and TikTok, +Winehouse sensed that the real digital revolution in culture would not be in +production, in the machines that artists used to make music or movies or books. +It would be in reception: on the screens where they (where we) encountered +culture, on which past and present are equidistant from each other. One upshot +of this digital equation of past and present has been a greater disposability +of culture: an infinite scroll and nothing to read, an infinite Netflix library +with nothing to watch. Though pop music still throws up new stars now and then +(I do really like [42]Ice Spice), the market for new music fell behind older +music in the middle of the last decade, and even the records that sell, or +stream, cannot be said to have wide cultural impact. (The most popular single +of 2022 in the United States was [43]“Heat Waves,” a TikTok tune by a British +alternative-pop group with little public profile called Glass Animals; and +what’s weirdest is that it was recorded in 2020.) - Down at the baseline where cultural innovation used to happen, in the - forms that artists once put together to show us something new — in the - sounds of the recording studio, the shapes on the canvas, the movements - of the dancers, the arrangements of the verse — something has stopped, - or at least slowed to such a lethargic pace as to feel stopped. Such a - claim may sound familiar if you were around for the postmodernism - debates of the 1980s. The philosopher Arthur Danto averred that art - ended with Andy Warhol’s Brillo Boxes, while the literary critic - Fredric Jameson declared in 1984 that the whole of modernity was “spent - and exhausted,” that there was no more style, indeed no more self, and - that “the producers of culture have nowhere to turn but to the past: - the imitation of dead styles.” As for the influence of digital media, - as early as 1989 the cultural theorist Paul Virilio identified a “polar - inertia” — a static pileup of images and words with no particular place - to go — as the inevitable endpoint for culture on a “weightless planet” - constituted of ones and zeros. +Outside of time there can be no progress, only the perpetual trying-on of +styles and forms. Here years become vibes — or “eras,” as Taylor Swift likes to +call them. And if culture is just a series of trends, then it is pointless to +worry about their contemporaneity. There was a charming freakout last year when +Kate Bush’s 1985 single “Running Up That Hill” went to the top of the charts +after its deployment on yet another nostalgic television show, and veterans of +the big-hair decade were horrified to see it appear on some 2022 playlists +alongside Dua Lipa and the like. If you think the song belongs to 1985 in the +way “Young Lady in 1866” belonged to 1866, the joke is now officially on you. - And yet looking back now, the “postmodern” turn of the later 20th - century looks much more like a continuation of the modernist commitment - to novelty than a repudiation of it. John Cage’s noteless composition - “4'33"” was no last music, but flowered into the impostures of Fluxus - and the ambient experiments of Brian Eno. The buildings of Frank Gehry - and Zaha Hadid did look like nothing that came before, thanks in part - to new rendering and fabrication technologies (CAD software, laser - cutting machines). The digitally produced music of Massive Attack and - even, I hate to say it, Moby did sound different from what was on the - radio 10 years before. No one style could be called the true vanguard - anymore, sure — but that did not preclude the perpetual discovery of - new ones. The forecast at the end of the 20th century was a plurality - of new images and sounds and words, powered perhaps by new, heavy - desktop production machines. +Down at the baseline where cultural innovation used to happen, in the forms +that artists once put together to show us something new — in the sounds of the +recording studio, the shapes on the canvas, the movements of the dancers, the +arrangements of the verse — something has stopped, or at least slowed to such a +lethargic pace as to feel stopped. Such a claim may sound familiar if you were +around for the postmodernism debates of the 1980s. The philosopher Arthur Danto +averred that art ended with Andy Warhol’s Brillo Boxes, while the literary +critic Fredric Jameson declared in 1984 that the whole of modernity was “spent +and exhausted,” that there was no more style, indeed no more self, and that +“the producers of culture have nowhere to turn but to the past: the imitation +of dead styles.” As for the influence of digital media, as early as 1989 the +cultural theorist Paul Virilio identified a “polar inertia” — a static pileup +of images and words with no particular place to go — as the inevitable endpoint +for culture on a “weightless planet” constituted of ones and zeros. - Since the start of the 21st century, despite all recent digital - accelerations of discovery and transmission, no stylistic innovations - of equivalent scale have taken place. The closest thing we can point to - has been in rap, where the staccato nihilism of drill, deeply - conversant with YouTube and SoundCloud, would sound legitimately - foreign to a listener from 2000. (When the teenage Chief Keef was - rapping in his grandmother’s Chicago apartment, he was following in the - tradition of Joyce and Woolf and Pound.) In fact, the sampling - techniques pioneered in hip-hop and, later, electronic dance music — - once done with piles of records, now with folders of WAV files — have - trickled down into photography, painting, literature and lower forms - like memes, all of which now present a hyperreferentialism that sets - them slightly apart from the last century’s efforts. In the 2010s, - hip-hop alone seemed to be taking the challenge of digital progress - seriously, though it, too, has calcified since; having switched from - linear writing and recording of verses to improvising hundreds of - one-verse digital takes, rappers now seem to be converging on a single, - ProTools-produced flow. +And yet looking back now, the “postmodern” turn of the later 20th century looks +much more like a continuation of the modernist commitment to novelty than a +repudiation of it. John Cage’s noteless composition “4'33"” was no last music, +but flowered into the impostures of Fluxus and the ambient experiments of Brian +Eno. The buildings of Frank Gehry and Zaha Hadid did look like nothing that +came before, thanks in part to new rendering and fabrication technologies (CAD +software, laser cutting machines). The digitally produced music of Massive +Attack and even, I hate to say it, Moby did sound different from what was on +the radio 10 years before. No one style could be called the true vanguard +anymore, sure — but that did not preclude the perpetual discovery of new ones. +The forecast at the end of the 20th century was a plurality of new images and +sounds and words, powered perhaps by new, heavy desktop production machines. - There have also been a few movies of limited influence (and very - limited box-office success) that have introduced new cinematographic - techniques: Ang Lee’s “Billy Lynn’s Long Halftime Walk” (2016) was the - first film shot at an eerily lifelike 120 frames per second, while at - the other extreme, Steven Soderbergh shot all of “Unsane” (2018) with - an iPhone 7 Plus. Michael Bay’s “Ambulance” (2022) included - first-person-view drone shots, flying the viewer through the windows of - exploding cars the way your dad shot your last beach-vacation memory - reel. But by and large the technologies that have changed filmmaking - since 2000 have stayed in the postproduction studio: computer-graphics - engines, digital tools for color grading and sound editing. They have - had vanishingly little influence on the grammar of the moving image, in - the way that lightweight cameras did for the Nouvelle Vague or digital - kits did for American indie cinema. Really, the kind of image that - distinguishes this century is less the spectacular Hollywood image than - what the German artist Hito Steyerl has called the “poor image” — - low-res compressed pictures like memes, thumbnails, screenshots — whose - meaning arises from being circulated and modified. +Since the start of the 21st century, despite all recent digital accelerations +of discovery and transmission, no stylistic innovations of equivalent scale +have taken place. The closest thing we can point to has been in rap, where the +staccato nihilism of drill, deeply conversant with YouTube and SoundCloud, +would sound legitimately foreign to a listener from 2000. (When the teenage +Chief Keef was rapping in his grandmother’s Chicago apartment, he was following +in the tradition of Joyce and Woolf and Pound.) In fact, the sampling +techniques pioneered in hip-hop and, later, electronic dance music — once done +with piles of records, now with folders of WAV files — have trickled down into +photography, painting, literature and lower forms like memes, all of which now +present a hyperreferentialism that sets them slightly apart from the last +century’s efforts. In the 2010s, hip-hop alone seemed to be taking the +challenge of digital progress seriously, though it, too, has calcified since; +having switched from linear writing and recording of verses to improvising +hundreds of one-verse digital takes, rappers now seem to be converging on a +single, ProTools-produced flow. - It may just be that the lexical possibilities of many traditional media - are exhausted, and there’s no shame in that. Maybe Griffith and - Eisenstein and Godard and Akerman did it all already, and it’s foolish - to expect a new kind of cinema. Certainly that exhaustion came long ago - to abstract painting, where every possible move can only be understood - as a quotation or reboot. (Kerstin Brätsch, one of the smartest - abstract painters working today, has acknowledged that any mark she - makes is “not empty anymore but loaded with historical reference.”) - Consider last year’s hit “Creepin’,” by The Weeknd: a 2022 rejigger of - the 2004 Mario Winans song “I Don’t Wanna Know” with no meaningful - change in instrumentation in the nearly two intervening decades. It was - hardly the only recent chart-topper to employ a clangingly obvious - sample, but it’s not like the endeavors of the 1990s, when Puffy and - family were rapping over “Every Breath You Take.” Back then the critic - Greg Tate could still celebrate such sampling as a motor of cultural - progress; by “collapsing all eras of Black music onto a chip,” a new - generation had new tools to write a new chapter of sound. Twenty-five - years later, the citation and rearrangement have become so automatic as - to seem automated — as our recent fears about artificial intelligence - and large language models suggest we already know. +There have also been a few movies of limited influence (and very limited +box-office success) that have introduced new cinematographic techniques: Ang +Lee’s “Billy Lynn’s Long Halftime Walk” (2016) was the first film shot at an +eerily lifelike 120 frames per second, while at the other extreme, Steven +Soderbergh shot all of “Unsane” (2018) with an iPhone 7 Plus. Michael Bay’s +“Ambulance” (2022) included first-person-view drone shots, flying the viewer +through the windows of exploding cars the way your dad shot your last +beach-vacation memory reel. But by and large the technologies that have changed +filmmaking since 2000 have stayed in the postproduction studio: +computer-graphics engines, digital tools for color grading and sound editing. +They have had vanishingly little influence on the grammar of the moving image, +in the way that lightweight cameras did for the Nouvelle Vague or digital kits +did for American indie cinema. Really, the kind of image that distinguishes +this century is less the spectacular Hollywood image than what the German +artist Hito Steyerl has called the “poor image” — low-res compressed pictures +like memes, thumbnails, screenshots — whose meaning arises from being +circulated and modified. - Trapped on a modernist game board where there are no more moves to - make, a growing number of young artists essentially pivoted to - political activism — plant a tree and call it a sculpture — while - others leaned hard into absurdity to try to express the sense of - digital disorientation. You saw this Dadaist strategy in the hyperpop - of 100 gecs, in the crashed-and-burned “post-internet” art of the - collective Dis, and above all in the satirical fashion of Virgil Abloh. - (Abloh, who died in 2021, was outspoken about how comedy functioned as - a coping mechanism for a generation lost in a digital fog: “It’s not a - coincidence that things have gravitated toward this invented language - of humor,” he said in 2018. “But then I often wonder: Is streetwear - hollow?”) +It may just be that the lexical possibilities of many traditional media are +exhausted, and there’s no shame in that. Maybe Griffith and Eisenstein and +Godard and Akerman did it all already, and it’s foolish to expect a new kind of +cinema. Certainly that exhaustion came long ago to abstract painting, where +every possible move can only be understood as a quotation or reboot. (Kerstin +Brätsch, one of the smartest abstract painters working today, has acknowledged +that any mark she makes is “not empty anymore but loaded with historical +reference.”) Consider last year’s hit “Creepin’,” by The Weeknd: a 2022 +rejigger of the 2004 Mario Winans song “I Don’t Wanna Know” with no meaningful +change in instrumentation in the nearly two intervening decades. It was hardly +the only recent chart-topper to employ a clangingly obvious sample, but it’s +not like the endeavors of the 1990s, when Puffy and family were rapping over +“Every Breath You Take.” Back then the critic Greg Tate could still celebrate +such sampling as a motor of cultural progress; by “collapsing all eras of Black +music onto a chip,” a new generation had new tools to write a new chapter of +sound. Twenty-five years later, the citation and rearrangement have become so +automatic as to seem automated — as our recent fears about artificial +intelligence and large language models suggest we already know. - It wouldn’t be so bad if we could just own our static position; who - cares if it’s novel as long as it’s beautiful, or meaningful? But that - pesky modernist conviction remains in us: A work of art demonstrates - its value through its freshness. So we have shifted our expectations - from new forms to new subject matter — new stories, told in the same - old languages as before. In the 20th century we were taught that - cleaving “style” from “content” was a fallacy, but in the 21st century - content (that word!) has had its ultimate vengeance, as the sole - component of culture that our machines can fully understand, transmit - and monetize. What cannot be categorized cannot be streamed; to pass - through the pipes art must become information. So, sure, there are new - songs about texting and ghosting; sure, there are superhero movies - about trauma and comedies about climate change. But in privileging the - parts of culture that can be summarized and shared — the narratives, - the characters, the lyrics, the lessons — digital media have bulldozed - an autonomous sphere of culture into a moral terrain that Aristotle - would find familiar: We again want our “content” to authentically - reflect the world (mimesis) and produce healthy feelings in its - consumers (catharsis). +Trapped on a modernist game board where there are no more moves to make, a +growing number of young artists essentially pivoted to political activism — +plant a tree and call it a sculpture — while others leaned hard into absurdity +to try to express the sense of digital disorientation. You saw this Dadaist +strategy in the hyperpop of 100 gecs, in the crashed-and-burned “post-internet” +art of the collective Dis, and above all in the satirical fashion of Virgil +Abloh. (Abloh, who died in 2021, was outspoken about how comedy functioned as a +coping mechanism for a generation lost in a digital fog: “It’s not a +coincidence that things have gravitated toward this invented language of +humor,” he said in 2018. “But then I often wonder: Is streetwear hollow?”) - Very unfortunately, this evangelical turn in the arts in the 21st - century has been conflated with the long-overdue admission of women, - people of color and out sexual minorities into the culture industry — - conflated, not least, by its P.R. departments. A gay rom-com is trotted - out as “the first”; a Black Little Mermaid is a “breakthrough”; our - museums, studios and publishing houses can bring nothing new to market - except the very people they once systematically excluded. If resisting - such market essentialism was once a primordial task of the artist — “I - am not burying myself in a narrow particularism,” Césaire made clear in - 1956 as he forged a French poetry that could span the Black Atlantic — - today identities keep being diminished, brutally, into a series of - searchable tags. +It wouldn’t be so bad if we could just own our static position; who cares if +it’s novel as long as it’s beautiful, or meaningful? But that pesky modernist +conviction remains in us: A work of art demonstrates its value through its +freshness. So we have shifted our expectations from new forms to new subject +matter — new stories, told in the same old languages as before. In the 20th +century we were taught that cleaving “style” from “content” was a fallacy, but +in the 21st century content (that word!) has had its ultimate vengeance, as the +sole component of culture that our machines can fully understand, transmit and +monetize. What cannot be categorized cannot be streamed; to pass through the +pipes art must become information. So, sure, there are new songs about texting +and ghosting; sure, there are superhero movies about trauma and comedies about +climate change. But in privileging the parts of culture that can be summarized +and shared — the narratives, the characters, the lyrics, the lessons — digital +media have bulldozed an autonomous sphere of culture into a moral terrain that +Aristotle would find familiar: We again want our “content” to authentically +reflect the world (mimesis) and produce healthy feelings in its consumers +(catharsis). - This institutional hunger for novelty combined with digital - requirements for communicability may help explain why so much recently - celebrated American culture has taken such conservative, traditionalist - forms: oil portraiture, Iowa-vintage coming-of-age novels, biopics, - operettas barely distinguishable from musical theater. “It scandalizes - progressive sensibility to think that things were so much more complex - in this domain a generation ago than they are now, but there you have - it,” said Darby English, the art historian and author of “How To See a - Work of Art in Total Darkness,” when asked in 2021 about the recent - efflorescence of Black American art in museums and the market. “Because - the core project is communication,” English said, “anything that - resists the art-communications apparatus fails to leave a mark. Form - has become increasingly irrelevant during these 20 years.” +Very unfortunately, this evangelical turn in the arts in the 21st century has +been conflated with the long-overdue admission of women, people of color and +out sexual minorities into the culture industry — conflated, not least, by its +P.R. departments. A gay rom-com is trotted out as “the first”; a Black Little +Mermaid is a “breakthrough”; our museums, studios and publishing houses can +bring nothing new to market except the very people they once systematically +excluded. If resisting such market essentialism was once a primordial task of +the artist — “I am not burying myself in a narrow particularism,” Césaire made +clear in 1956 as he forged a French poetry that could span the Black Atlantic — +today identities keep being diminished, brutally, into a series of searchable +tags. - Image - Credit...Illustration by Tim Enthoven +This institutional hunger for novelty combined with digital requirements for +communicability may help explain why so much recently celebrated American +culture has taken such conservative, traditionalist forms: oil portraiture, +Iowa-vintage coming-of-age novels, biopics, operettas barely distinguishable +from musical theater. “It scandalizes progressive sensibility to think that +things were so much more complex in this domain a generation ago than they are +now, but there you have it,” said Darby English, the art historian and author +of “How To See a Work of Art in Total Darkness,” when asked in 2021 about the +recent efflorescence of Black American art in museums and the market. “Because +the core project is communication,” English said, “anything that resists the +art-communications apparatus fails to leave a mark. Form has become +increasingly irrelevant during these 20 years.” - There is no inherent reason — no reason; this point needs to be clear — - that a recession of novelty has to mean a recession of cultural worth. - On the contrary, non-novel excellence has been the state of things for - a vast majority of art history. Roman art and literature provides a - centuries-long tradition of emulation, appropriating and adapting - Greek, Etruscan and on occasion Asian examples into a culture in which - the idea of copying was alien. Medieval icons were never understood to - be “of their time,” but looked back to the time of the Incarnation, - forward to eternity or out of time entirely into a realm beyond human - life. Even beyond the halfway point of the last millennium, European - artists regularly emended, updated or substituted pre-existing artworks - at will, integrating present and past into a more spiritually - efficacious whole. +Image +Credit...Illustration by Tim Enthoven - Consider also the long and bountiful history of Chinese painting, in - which, from the 13th century to the early 20th, scholar-artists - frequently demonstrated their erudition by painting in explicit homage - to masters from the past. For these literati painters, what mattered - more than technical skill or aesthetic progression was an artist’s - spontaneous creativity as channeled through previous masterpieces. - There’s a painting I love in the Palace Museum in Beijing by Zhao - Mengfu, a prince and scholar working during the Yuan dynasty, that - dates to around 1310 but incorporates styles from several other - periods. Spartan trees, whose branches hook like crab claws, derive - from Song examples a few centuries earlier. A clump of bamboo in the - corner coheres through strict, tight brushwork pioneered by the Han - dynasty a thousand years before. Alongside the trees and rocks the - artist added an inscription: +There is no inherent reason — no reason; this point needs to be clear — that a +recession of novelty has to mean a recession of cultural worth. On the +contrary, non-novel excellence has been the state of things for a vast majority +of art history. Roman art and literature provides a centuries-long tradition of +emulation, appropriating and adapting Greek, Etruscan and on occasion Asian +examples into a culture in which the idea of copying was alien. Medieval icons +were never understood to be “of their time,” but looked back to the time of the +Incarnation, forward to eternity or out of time entirely into a realm beyond +human life. Even beyond the halfway point of the last millennium, European +artists regularly emended, updated or substituted pre-existing artworks at +will, integrating present and past into a more spiritually efficacious whole. - The rocks are like flying-white, the trees are like seal script, - The writing of bamboo draws upon the bafen method. - Only when one masters this secret - Will he understand that calligraphy and painting have always been - one. +Consider also the long and bountiful history of Chinese painting, in which, +from the 13th century to the early 20th, scholar-artists frequently +demonstrated their erudition by painting in explicit homage to masters from the +past. For these literati painters, what mattered more than technical skill or +aesthetic progression was an artist’s spontaneous creativity as channeled +through previous masterpieces. There’s a painting I love in the Palace Museum +in Beijing by Zhao Mengfu, a prince and scholar working during the Yuan +dynasty, that dates to around 1310 but incorporates styles from several other +periods. Spartan trees, whose branches hook like crab claws, derive from Song +examples a few centuries earlier. A clump of bamboo in the corner coheres +through strict, tight brushwork pioneered by the Han dynasty a thousand years +before. Alongside the trees and rocks the artist added an inscription: - In other words: Use one style of brushwork for one element, another for - another, just as a calligrapher uses different styles for different - purposes. But beyond the simple equation of writing and painting, Zhao - was doing something much more important: He was sublimating styles, - some from the recent past and some of great antiquity, into a series of - recombinatory elements that an artist of his time could deploy in - concert. The literati painters learned from the old masters (important - during the Yuan dynasty, to safeguard the place of Han culture under - Mongol rule), but theirs was no simple classicism. It was a practice of - aesthetic self-fulfillment that channeled itself through pre-existing - gestures. Without ever worrying about novelty, you could still speak - directly to your time. You could express your tenderest feelings, or - face up to the upheavals of your age, in the overlapping styles of - artists long dead. + The rocks are like flying-white, the trees are like seal script, + The writing of bamboo draws upon the bafen method. + Only when one masters this secret + Will he understand that calligraphy and painting have always been one. - Image - “Elegant Rocks and Sparse Trees,” by Zhao Mengfu, circa - 1310.Credit...Palace Museum, Beijing +In other words: Use one style of brushwork for one element, another for +another, just as a calligrapher uses different styles for different purposes. +But beyond the simple equation of writing and painting, Zhao was doing +something much more important: He was sublimating styles, some from the recent +past and some of great antiquity, into a series of recombinatory elements that +an artist of his time could deploy in concert. The literati painters learned +from the old masters (important during the Yuan dynasty, to safeguard the place +of Han culture under Mongol rule), but theirs was no simple classicism. It was +a practice of aesthetic self-fulfillment that channeled itself through +pre-existing gestures. Without ever worrying about novelty, you could still +speak directly to your time. You could express your tenderest feelings, or face +up to the upheavals of your age, in the overlapping styles of artists long +dead. - Someone foresaw, profoundly, that this century was going to require - something similar: that when forward motion became impossible, - ambitious culture was going to have to take another shape. Winehouse, - as producers and collaborators have reminded us since her death, was an - inveterate collector and compiler of musical clips. (The drummer and - music historian Ahmir Thompson, better known as Questlove, remembered: - “She would always be on her computer sending me MP3s: ‘Listen to this, - listen to this. ... ’”) She was living through, and channeling into - “Back to Black,” the initial dissolution of history into streams of - digital information, disembodied, disintermediated, each no further - from the present than a Google prompt. She freely recombined those - fragments but never indulged in nostalgia; she was disappointed by the - present but knew there was no going back. And at enormous personal - cost, she created something enduring out of it, showing how much harder - it would be to leave a real mark amid fathomless data — to transcend - mere recombination, sampling, pastiche. +Image +“Elegant Rocks and Sparse Trees,” by Zhao Mengfu, circa 1310.Credit...Palace +Museum, Beijing - If the arts are to matter in the 21st century, we must still believe - that they can collectively manifest our lives and feelings: that they - can constitute a Geistgeschichte, or “history of spirit,” as the German - idealists used to say. This was entirely possible before modernism, and - it is possible after. The most ambitious abstract painters working - today, like Albert Oehlen and Charline von Heyl, are doing something - akin to Winehouse’s free articulation: drawing from diverse and even - contradictory styles in the hunt for forms that can still have effects. - Olga Tokarczuk structured her 2007 book, “Flights,” as a constellation - of barely connected characters and styles, more fugitive than the last - century’s novels in fragments; to read her is less like looking at a - mosaic than toggling among tabs. Bad Bunny, working at the crossroads - of trap, reggaeton, bachata and rock, is crafting pick-and-mix - aggregations of small pieces, like “Back to Black,” that are digital in - every way that matters. All of them are speaking out of parts of the - past in a language that is their own. +Someone foresaw, profoundly, that this century was going to require something +similar: that when forward motion became impossible, ambitious culture was +going to have to take another shape. Winehouse, as producers and collaborators +have reminded us since her death, was an inveterate collector and compiler of +musical clips. (The drummer and music historian Ahmir Thompson, better known as +Questlove, remembered: “She would always be on her computer sending me MP3s: +‘Listen to this, listen to this. ... ’”) She was living through, and channeling +into “Back to Black,” the initial dissolution of history into streams of +digital information, disembodied, disintermediated, each no further from the +present than a Google prompt. She freely recombined those fragments but never +indulged in nostalgia; she was disappointed by the present but knew there was +no going back. And at enormous personal cost, she created something enduring +out of it, showing how much harder it would be to leave a real mark amid +fathomless data — to transcend mere recombination, sampling, pastiche. - We have every ability to live in a culture of beauty, insight, - surprise, if we could just accept that we are no longer modern, and - have not been for a while; that somewhere in the push and pull of - digital homogeneity and political stasis we entered a new phase of - history. We have been evading our predicament with coping mechanisms - and marketing scams, which have left all of us disappointedly asking, - What’s new? Surely it would be healthier — and who knows what might - flower — if we accepted and even embraced the end of stylistic - progress, and at last took seriously the digital present we are - disavowing. And the perpetuity of “Back to Black,” still playing in the - background of avocado-toast dispensaries in East London and West - Hollywood after 17 years, suggests to me that we have not lost our - ability to identify voices of our time, even if they are fated to speak - a language yoked to the past. Culture is stuck? Progress is dead? I - died a hundred times, a poet once said, and kept singing. +If the arts are to matter in the 21st century, we must still believe that they +can collectively manifest our lives and feelings: that they can constitute a +Geistgeschichte, or “history of spirit,” as the German idealists used to say. +This was entirely possible before modernism, and it is possible after. The most +ambitious abstract painters working today, like Albert Oehlen and Charline von +Heyl, are doing something akin to Winehouse’s free articulation: drawing from +diverse and even contradictory styles in the hunt for forms that can still have +effects. Olga Tokarczuk structured her 2007 book, “Flights,” as a constellation +of barely connected characters and styles, more fugitive than the last +century’s novels in fragments; to read her is less like looking at a mosaic +than toggling among tabs. Bad Bunny, working at the crossroads of trap, +reggaeton, bachata and rock, is crafting pick-and-mix aggregations of small +pieces, like “Back to Black,” that are digital in every way that matters. All +of them are speaking out of parts of the past in a language that is their own. - [28]Jason Farago, a critic at large for The Times, writes about art and - culture in the U.S. and abroad. [29]More about Jason Farago - A version of this article appears in print on , Page 38 of the Sunday - Magazine with the headline: Out of Time. [30]Order Reprints | - [31]Today’s Paper | [32]Subscribe - [33]1240 - * (BUTTON) Share full article - * (BUTTON) - * (BUTTON) - * [34]1240 +We have every ability to live in a culture of beauty, insight, surprise, if we +could just accept that we are no longer modern, and have not been for a while; +that somewhere in the push and pull of digital homogeneity and political stasis +we entered a new phase of history. We have been evading our predicament with +coping mechanisms and marketing scams, which have left all of us disappointedly +asking, What’s new? Surely it would be healthier — and who knows what might +flower — if we accepted and even embraced the end of stylistic progress, and at +last took seriously the digital present we are disavowing. And the perpetuity +of “Back to Black,” still playing in the background of avocado-toast +dispensaries in East London and West Hollywood after 17 years, suggests to me +that we have not lost our ability to identify voices of our time, even if they +are fated to speak a language yoked to the past. Culture is stuck? Progress is +dead? I died a hundred times, a poet once said, and kept singing. - Advertisement - [35]SKIP ADVERTISEMENT +[44]Jason Farago, a critic at large for The Times, writes about art and culture +in the U.S. and abroad. [45]More about Jason Farago + +A version of this article appears in print on  , Page 38 of the Sunday Magazine +with the headline: Out of Time. [46]Order Reprints | [47]Today’s Paper | [48] +Subscribe +[49]1240 + + • Share full article + • + • + • [53]1240 + +Advertisement + +[54]SKIP ADVERTISEMENT Site Index Site Information Navigation - * [36]© 2023 The New York Times Company + • [55]© 2024 The New York Times Company - * [37]NYTCo - * [38]Contact Us - * [39]Accessibility - * [40]Work with us - * [41]Advertise - * [42]T Brand Studio - * [43]Your Ad Choices - * [44]Privacy Policy - * [45]Terms of Service - * [46]Terms of Sale - * [47]Site Map - * [48]Canada - * [49]International - * [50]Help - * [51]Subscriptions + • [56]NYTCo + • [57]Contact Us + • [58]Accessibility + • [59]Work with us + • [60]Advertise + • [61]T Brand Studio + • [62]Your Ad Choices + • [63]Privacy Policy + • [64]Terms of Service + • [65]Terms of Sale + • [66]Site Map + • [67]Canada + • [68]International + • [69]Help + • [70]Subscriptions - IFRAME: - [52]https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfA - zqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x + • [71]Manage Privacy Preferences -References - Visible links: - 1. nyt://article/86c70725-9ddb-5c32-9032-bf25f25572ba - 2. https://www.nytimes.com/svc/oembed/json/?url=https://www.nytimes.com/2023/10/10/magazine/stale-culture.html - 3. https://www.nytimes.com/2023/10/13/magazine/jesmyn-ward-let-us-descend.html - 4. https://www.nytimes.com/2023/10/12/magazine/taylor-swift-eras-tour.html - 5. https://www.nytimes.com/2023/10/10/magazine/stale-culture.html - 6. https://www.nytimes.com/2023/10/11/magazine/usher-rnb.html - 7. https://www.nytimes.com/interactive/2023/10/08/magazine/errol-morris-interview.html - 8. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L76170-8570TMP.html#site-content - 9. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L76170-8570TMP.html#site-index - 10. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L76170-8570TMP.html#after-sponsor - 11. file:///2023/10/10/magazine/stale-culture.html - 12. https://www.nytimes.com/by/jason-farago - 13. https://www.nytimes.com/by/jason-farago - 14. https://www.nytimes.com/2023/09/21/arts/design/manet-degas-met-museum.html - 15. https://www.musee-orsay.fr/en/artworks/le-balcon-707 - 16. https://www.nytimes.com/2023/09/06/arts/design/nairy-baghramian-met-facade-nyc-sculpture.html - 17. https://www.nytimes.com/2016/04/12/arts/design/stan-douglass-the-secret-agent-offers-a-refracted-vision-of-history-and-terrorism.html - 18. https://www.nytimes.com/2018/10/11/arts/design/pierre-huyghe-serpentine-gallery-london-artist.html - 19. https://www.nytimes.com/2022/05/02/books/review/companion-piece-ali-smith.html - 20. https://www.nytimes.com/2019/02/28/movies/transit-review.html - 21. https://www.nytimes.com/2021/11/24/movies/drive-my-car-review.html - 22. https://www.youtube.com/watch?v=ou0luMrf1mU - 23. https://www.nytimes.com/2018/02/07/watching/k-drama-streaming-guide.html - 24. https://www.nytimes.com/2022/06/23/arts/music/cxema-ukraine.html - 25. https://www.nytimes.com/2021/12/01/arts/design/amy-winehouse-design-museum.html - 26. https://www.nytimes.com/2023/01/20/arts/music/ice-spice-like.html - 27. https://www.youtube.com/watch?v=mRD0-GxqHVo - 28. https://www.nytimes.com/by/jason-farago - 29. https://www.nytimes.com/by/jason-farago - 30. https://www.parsintl.com/publication/the-new-york-times/ - 31. https://www.nytimes.com/section/todayspaper - 32. https://www.nytimes.com/subscriptions/Multiproduct/lp8HYKU.html?campaignId=48JQY - 33. file:///2023/10/10/magazine/stale-culture.html - 34. file:///2023/10/10/magazine/stale-culture.html - 35. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L76170-8570TMP.html#after-bottom - 36. https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice - 37. https://www.nytco.com/ - 38. https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us - 39. https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility - 40. https://www.nytco.com/careers/ - 41. https://nytmediakit.com/ - 42. https://www.tbrandstudio.com/ - 43. https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers - 44. https://www.nytimes.com/privacy/privacy-policy - 45. https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service - 46. https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale - 47. file:///sitemap/ - 48. https://www.nytimes.com/ca/ - 49. https://www.nytimes.com/international/ - 50. https://help.nytimes.com/hc/en-us - 51. https://www.nytimes.com/subscription?campaignId=37WXW - 52. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x +References: - Hidden links: - 54. file://localhost/ - 55. file://localhost/section/magazine - 56. https://www.nytimes.com/audio/app/2023/10/10/magazine/stale-culture.html?referringSource=audioAppPromo +[13] https://www.nytimes.com/ +[14] https://www.nytimes.com/2023/10/13/magazine/jesmyn-ward-let-us-descend.html +[15] https://www.nytimes.com/2023/10/12/magazine/taylor-swift-eras-tour.html +[16] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html +[17] https://www.nytimes.com/2023/10/11/magazine/usher-rnb.html +[18] https://www.nytimes.com/interactive/2023/10/08/magazine/errol-morris-interview.html +[19] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html#site-content +[20] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html#site-index +[21] https://www.nytimes.com/section/magazine +[22] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html#after-sponsor +[26] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html +[27] https://www.nytimes.com/by/jason-farago +[28] https://www.nytimes.com/by/jason-farago +[29] https://www.nytimes.com/2023/09/21/arts/design/manet-degas-met-museum.html +[30] https://www.nytimes.com/audio/app/2023/10/10/magazine/stale-culture.html?referringSource=audioAppPromo +[31] https://www.musee-orsay.fr/en/artworks/le-balcon-707 +[32] https://www.nytimes.com/2023/09/06/arts/design/nairy-baghramian-met-facade-nyc-sculpture.html +[33] https://www.nytimes.com/2016/04/12/arts/design/stan-douglass-the-secret-agent-offers-a-refracted-vision-of-history-and-terrorism.html +[34] https://www.nytimes.com/2018/10/11/arts/design/pierre-huyghe-serpentine-gallery-london-artist.html +[35] https://www.nytimes.com/2022/05/02/books/review/companion-piece-ali-smith.html +[36] https://www.nytimes.com/2019/02/28/movies/transit-review.html +[37] https://www.nytimes.com/2021/11/24/movies/drive-my-car-review.html +[38] https://www.youtube.com/watch?v=ou0luMrf1mU +[39] https://www.nytimes.com/2018/02/07/watching/k-drama-streaming-guide.html +[40] https://www.nytimes.com/2022/06/23/arts/music/cxema-ukraine.html +[41] https://www.nytimes.com/2021/12/01/arts/design/amy-winehouse-design-museum.html +[42] https://www.nytimes.com/2023/01/20/arts/music/ice-spice-like.html +[43] https://www.youtube.com/watch?v=mRD0-GxqHVo +[44] https://www.nytimes.com/by/jason-farago +[45] https://www.nytimes.com/by/jason-farago +[46] https://www.parsintl.com/publication/the-new-york-times/ +[47] https://www.nytimes.com/section/todayspaper +[48] https://www.nytimes.com/subscriptions/Multiproduct/lp8HYKU.html?campaignId=48JQY +[49] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html +[53] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html +[54] https://www.nytimes.com/2023/10/10/magazine/stale-culture.html#after-bottom +[55] https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice +[56] https://www.nytco.com/ +[57] https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us +[58] https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility +[59] https://www.nytco.com/careers/ +[60] https://nytmediakit.com/ +[61] https://www.tbrandstudio.com/ +[62] https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers +[63] https://www.nytimes.com/privacy/privacy-policy +[64] https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service +[65] https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale +[66] https://www.nytimes.com/sitemap/ +[67] https://www.nytimes.com/ca/ +[68] https://www.nytimes.com/international/ +[69] https://help.nytimes.com/hc/en-us +[70] https://www.nytimes.com/subscription?campaignId=37WXW +[71] https://www.nytimes.com/privacy/manage-settings diff --git a/static/archive/www-programmablemutter-com-8wp6z1.txt b/static/archive/www-programmablemutter-com-8wp6z1.txt index fae65b3..89034cd 100644 --- a/static/archive/www-programmablemutter-com-8wp6z1.txt +++ b/static/archive/www-programmablemutter-com-8wp6z1.txt @@ -1,496 +1,455 @@ - #[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) - Share this post +Subscribe +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 +www.programmablemutter.com +Copy link +Facebook +Email +Note +Other What OpenAI shares with Scientology Strange beliefs, fights over money and bad science fiction - [4]Henry Farrell - Nov 20, 2023 - 73 - (BUTTON) - Share this post +[12][https] +[13]Henry Farrell +Nov 20, 2023 +73 +Share this post +[https] What OpenAI shares with Scientology - www.programmablemutter.com - (BUTTON) - Copy link - (BUTTON) - Facebook - (BUTTON) - Email - (BUTTON) - Note - (BUTTON) - Other - 17 +www.programmablemutter.com +Copy link +Facebook +Email +Note +Other +[20] +17 +[21] +Share +[22] +[https] - When Sam Altman was ousted as CEO of OpenAI, some hinted that lurid - depravities lay behind his downfall. Surely, OpenAI’s board wouldn’t - have toppled him if there weren’t some sordid story about to hit the - headlines? But the [5]reporting all seems to be saying that it was God, - not Sex, that lay behind Altman’s downfall. And Money, that third great - driver of human behavior, seems to have driven his attempted return and - his [6]new job at Microsoft, which is OpenAI’s biggest investor by far. +When Sam Altman was ousted as CEO of OpenAI, some hinted that lurid depravities +lay behind his downfall. Surely, OpenAI’s board wouldn’t have toppled him if +there weren’t some sordid story about to hit the headlines? But the [23] +reporting all seems to be saying that it was God, not Sex, that lay behind +Altman’s downfall. And Money, that third great driver of human behavior, seems +to have driven his attempted return and his [24]new job at Microsoft, which is +OpenAI’s biggest investor by far. - As the NYT describes the people who pushed Altman out: +As the NYT describes the people who pushed Altman out: - Thanks for reading Programmable Mutter! Subscribe for free to receive - new posts. And if you want to support my work, [7]buy my and Abe - Newman’s new book, [8]Underground Empire, and sing its praises (so long - as you actually liked it), on Amazon, Goodreads, social media and - everywhere else that people find out about good books. - ____________________ - (BUTTON) Subscribe +Thanks for reading Programmable Mutter! Subscribe for free to receive new +posts. And if you want to support my work, [25]buy my and Abe Newman’s new +book, [26]Underground Empire, and sing its praises (so long as you actually +liked it), on Amazon, Goodreads, social media and everywhere else that people +find out about good books. - Ms. McCauley and Ms. Toner [HF - two board members] have ties to the - Rationalist and Effective Altruist movements, a community that is - deeply concerned that A.I. could one day destroy humanity. Today’s - A.I. technology cannot destroy humanity. But this community believes - that as the technology grows increasingly powerful, these dangers - will arise. +[35][ ] +Subscribe + Ms. McCauley and Ms. Toner [HF - two board members] have ties to the + Rationalist and Effective Altruist movements, a community that is deeply + concerned that A.I. could one day destroy humanity. Today’s A.I. technology + cannot destroy humanity. But this community believes that as the technology + grows increasingly powerful, these dangers will arise. - McCauley and Toner reportedly worried that Altman was pushing too hard, - too quickly for new and potentially dangerous forms of AI (similar - fears led some OpenAI people to bail out and found a competitor, - Anthropic, a couple of years ago). The FT’s reporting [9]confirms that - the fight was over how quickly to commercialize AI +McCauley and Toner reportedly worried that Altman was pushing too hard, too +quickly for new and potentially dangerous forms of AI (similar fears led some +OpenAI people to bail out and found a competitor, Anthropic, a couple of years +ago). The FT’s reporting [37]confirms that the fight was over how quickly to +commercialize AI - The back-story to all of this is actually much weirder than the average - sex scandal. The field of AI (in particular, its debates around Large - Language Models (LLMs) like OpenAI’s GPT-4) is profoundly shaped by - cultish debates among people with some very strange beliefs. +The back-story to all of this is actually much weirder than the average sex +scandal. The field of AI (in particular, its debates around Large Language +Models (LLMs) like OpenAI’s GPT-4) is profoundly shaped by cultish debates +among people with some very strange beliefs. - As LLMs have become increasingly powerful, theological arguments have - begun to mix it up with the profit motive. That explains why OpenAI has - such an unusual corporate form - it is a non-profit, with a for-profit - structure retrofitted on top, sweatily entangled with a - profit-maximizing corporation (Microsoft). It also plausibly explains - why these tensions have exploded into the open. +As LLMs have become increasingly powerful, theological arguments have begun to +mix it up with the profit motive. That explains why OpenAI has such an unusual +corporate form - it is a non-profit, with a for-profit structure retrofitted on +top, sweatily entangled with a profit-maximizing corporation (Microsoft). It +also plausibly explains why these tensions have exploded into the open. - ******** +******** - I joked on Bluesky that the OpenAI saga was as if “the 1990s browser - wars were being waged by rival factions of Dianetics striving to - control the future.” Dianetics - for those who don’t obsess on the - underbelly of American intellectual history - was the 1.0 version of L. - Ron Hubbard’s Scientology. Hubbard [10]hatched it in collaboration with - the science fiction editor John W. Campbell (who had a major science - fiction award named after him until 2019, when his racism finally - caught up with his reputation). +I joked on Bluesky that the OpenAI saga was as if “the 1990s browser wars were +being waged by rival factions of Dianetics striving to control the future.” +Dianetics - for those who don’t obsess on the underbelly of American +intellectual history - was the 1.0 version of L. Ron Hubbard’s Scientology. +Hubbard [38]hatched it in collaboration with the science fiction editor John W. +Campbell (who had a major science fiction award named after him until 2019, +when his racism finally caught up with his reputation). - The AI safety debate too is an unintended consequence of genre fiction. - In 1987, multiple-Hugo award winning science-fiction critic Dave - Langford [11]began a discussion of the “newish” genre of cyberpunk with - a complaint about an older genre of story on information technology, in - which “the ultimate computer is turned on and asked the ultimate - question, and replies `Yes, now there is a God!' +The AI safety debate too is an unintended consequence of genre fiction. In +1987, multiple-Hugo award winning science-fiction critic Dave Langford [39] +began a discussion of the “newish” genre of cyberpunk with a complaint about an +older genre of story on information technology, in which “the ultimate computer +is turned on and asked the ultimate question, and replies `Yes, now there is a +God!' - However, the cliche didn’t go away. Instead, it cross-bred with - cyberpunk to produce some quite surprising progeny. The midwife was the - writer Vernor Vinge, who proposed a revised meaning for “singularity.” - This was a term already familiar to science fiction readers as the - place inside a black hole where the ordinary predictions of physics - broke down. Vinge suggested that we would soon likely create true AI, - which would be far better at thinking than baseline humans, and would - change the world in an accelerating process, creating a historical - [12]singularity, after which the future of the human species would be - radically unpredictable. +However, the cliche didn’t go away. Instead, it cross-bred with cyberpunk to +produce some quite surprising progeny. The midwife was the writer Vernor Vinge, +who proposed a revised meaning for “singularity.” This was a term already +familiar to science fiction readers as the place inside a black hole where the +ordinary predictions of physics broke down. Vinge suggested that we would soon +likely create true AI, which would be far better at thinking than baseline +humans, and would change the world in an accelerating process, creating a +historical [40]singularity, after which the future of the human species would +be radically unpredictable. - These ideas were turned into novels by Vinge himself, including A Fire - Upon the Deep (fun!) and Rainbow’s End (weak!). Other SF writers like - Charles Stross wrote novels about humans doing their best to co-exist - with “weakly godlike” machine intelligence (also fun!). Others who had - no notable talent for writing, like the futurist Ray Kurzweil, tried to - turn the Singularity into the foundation stone of a new account of - human progress. I still possess a mostly-unread copy of Kurzweil’s - mostly-unreadable magnum opus, The Singularity is Near, which was - distributed en masse to bloggers like meself in an early 2000s - marketing campaign. If I dug hard enough in my archives, I might even - be able to find the message from a publicity flack expressing - disappointment that I hadn’t written about the book after they sent it. - All this speculation had a strong flavor of end-of-days. As the Scots - science fiction writer, Ken MacLeod memorably put it, the Singularity - was the “Rapture of the Nerds.” Ken, being the [13]offspring of a Free - Presbyterian preacher, knows a millenarian religion when he sees it: - Kurzweil’s doorstopper should really have been titled The Singularity - is Nigh. +These ideas were turned into novels by Vinge himself, including A Fire Upon the +Deep (fun!) and Rainbow’s End (weak!). Other SF writers like Charles Stross +wrote novels about humans doing their best to co-exist with “weakly godlike” +machine intelligence (also fun!). Others who had no notable talent for writing, +like the futurist Ray Kurzweil, tried to turn the Singularity into the +foundation stone of a new account of human progress. I still possess a +mostly-unread copy of Kurzweil’s mostly-unreadable magnum opus, The Singularity +is Near, which was distributed en masse to bloggers like meself in an early +2000s marketing campaign. If I dug hard enough in my archives, I might even be +able to find the message from a publicity flack expressing disappointment that +I hadn’t written about the book after they sent it. All this speculation had a +strong flavor of end-of-days. As the Scots science fiction writer, Ken MacLeod +memorably put it, the Singularity was the “Rapture of the Nerds.” Ken, being +the [41]offspring of a Free Presbyterian preacher, knows a millenarian religion +when he sees it: Kurzweil’s doorstopper should really have been titled The +Singularity is Nigh. - Science fiction was the gateway drug, but it can’t really be blamed for - everything that happened later. Faith in the Singularity has roughly - the same relationship to SF as UFO-cultism. A small minority of SF - writers are true believers; most are hearty skeptics, but recognize - that superhuman machine intelligences are (a) possible) and (b) an - extremely handy engine of plot. But the combination of cultish - Singularity beliefs and science fiction has influenced a lot of - external readers, who don’t distinguish sharply between the religious - and fictive elements, but mix and meld them to come up with strange new - hybrids. +Science fiction was the gateway drug, but it can’t really be blamed for +everything that happened later. Faith in the Singularity has roughly the same +relationship to SF as UFO-cultism. A small minority of SF writers are true +believers; most are hearty skeptics, but recognize that superhuman machine +intelligences are (a) possible) and (b) an extremely handy engine of plot. But +the combination of cultish Singularity beliefs and science fiction has +influenced a lot of external readers, who don’t distinguish sharply between the +religious and fictive elements, but mix and meld them to come up with strange +new hybrids. - Just such a syncretic religion provides the final part of the - back-story to the OpenAI crisis. In the 2010s, ideas about the - Singularity cross-fertilized with notions about Bayesian reasoning and - some really terrible fanfic to create the online “rationalist” movement - mentioned in the NYT. +Just such a syncretic religion provides the final part of the back-story to the +OpenAI crisis. In the 2010s, ideas about the Singularity cross-fertilized with +notions about Bayesian reasoning and some really terrible fanfic to create the +online “rationalist” movement mentioned in the NYT. - I’ve never read a text on rationalism, whether by true believers, by - hangers-on, or by bitter enemies (often erstwhile true believers), that - really gets the totality of what you see if you dive into its core - texts and apocrypha. And I won’t even try to provide one here. It is - some Very Weird Shit and there is really great religious sociology to - be written about it. The fights around [14]Roko’s Basilisk are perhaps - the best known example of rationalism in action outside the community, - and give you some flavor of the style of debate. But the very short - version is that [15]Eliezer Yudkowsky, and his multitudes of online - fans embarked on a massive collective intellectual project, which can - reasonably be described as resurrecting David Langford’s hoary 1980s SF - cliche, and treating it as the most urgent dilemma facing human beings - today. We are about to create God. What comes next? Add Bayes’ Theorem - to Vinge’s core ideas, sez rationalism, and you’ll likely find the - answer. +I’ve never read a text on rationalism, whether by true believers, by +hangers-on, or by bitter enemies (often erstwhile true believers), that really +gets the totality of what you see if you dive into its core texts and +apocrypha. And I won’t even try to provide one here. It is some Very Weird Shit +and there is really great religious sociology to be written about it. The +fights around [42]Roko’s Basilisk are perhaps the best known example of +rationalism in action outside the community, and give you some flavor of the +style of debate. But the very short version is that [43]Eliezer Yudkowsky, and +his multitudes of online fans embarked on a massive collective intellectual +project, which can reasonably be described as resurrecting David Langford’s +hoary 1980s SF cliche, and treating it as the most urgent dilemma facing human +beings today. We are about to create God. What comes next? Add Bayes’ Theorem +to Vinge’s core ideas, sez rationalism, and you’ll likely find the answer. - The consequences are what you might expect when a crowd of bright but - rather naive (and occasionally creepy) computer science and adjacent - people try to re-invent theology from first principles, to model what - human-created gods might do, and how they ought be constrained. They - include the following, non-comprehensive list: all sorts of strange - mental exercises, postulated superhuman entities benign and malign and - how to think about them; the jumbling of parts from fan-fiction, - computer science, home-brewed philosophy and ARGs to create grotesque - and interesting intellectual chimeras; Nick Bostrom, and a crew of very - well funded philosophers; Effective Altruism, whose fancier adherents - often prefer not to acknowledge the approach’s somewhat disreputable - origins. +The consequences are what you might expect when a crowd of bright but rather +naive (and occasionally creepy) computer science and adjacent people try to +re-invent theology from first principles, to model what human-created gods +might do, and how they ought be constrained. They include the following, +non-comprehensive list: all sorts of strange mental exercises, postulated +superhuman entities benign and malign and how to think about them; the jumbling +of parts from fan-fiction, computer science, home-brewed philosophy and ARGs to +create grotesque and interesting intellectual chimeras; Nick Bostrom, and a +crew of very well funded philosophers; Effective Altruism, whose fancier +adherents often prefer not to acknowledge the approach’s somewhat disreputable +origins. - All this would be sociologically fascinating, but of little real world - consequence, if it hadn’t profoundly influenced the founders of the - organizations pushing AI forward. These luminaries think about the - technologies that they were creating in terms that they have borrowed - wholesale from the Yudkowsky extended universe. The risks and rewards - of AI are seen as largely commensurate with the risks and rewards of - creating superhuman intelligences, modeling how they might behave, and - ensuring that we end up in a Good Singularity, where AIs do not destroy - or enslave humanity as a species, rather than a bad one. +All this would be sociologically fascinating, but of little real world +consequence, if it hadn’t profoundly influenced the founders of the +organizations pushing AI forward. These luminaries think about the technologies +that they were creating in terms that they have borrowed wholesale from the +Yudkowsky extended universe. The risks and rewards of AI are seen as largely +commensurate with the risks and rewards of creating superhuman intelligences, +modeling how they might behave, and ensuring that we end up in a Good +Singularity, where AIs do not destroy or enslave humanity as a species, rather +than a bad one. - Even if rationalism’s answers are uncompelling, it asks interesting - questions that might have real human importance. However, it is at best - unclear that theoretical debates about immantenizing the eschaton tell - us very much about actually-existing “AI,” a family of important and - sometimes very powerful statistical techniques, which are being applied - today, with emphatically non-theoretical risks and benefits. +Even if rationalism’s answers are uncompelling, it asks interesting questions +that might have real human importance. However, it is at best unclear that +theoretical debates about immantenizing the eschaton tell us very much about +actually-existing “AI,” a family of important and sometimes very powerful +statistical techniques, which are being applied today, with emphatically +non-theoretical risks and benefits. - Ah, well, nevertheless. The rationalist agenda has demonstrably shaped - the questions around which the big AI ‘debates’ regularly revolve, as - [16]demonstrated by the Rishi Sunak/Sam Altman/Elon Musk love-fest “AI - Summit” in London a few weeks ago. +Ah, well, nevertheless. The rationalist agenda has demonstrably shaped the +questions around which the big AI ‘debates’ regularly revolve, as [44] +demonstrated by the Rishi Sunak/Sam Altman/Elon Musk love-fest “AI Summit” in +London a few weeks ago. - We are on a very strange timeline. My laboured Dianetics/Scientology - joke can be turned into an interesting hypothetical. It actually turns - out (I only stumbled across this recently) that Claude Shannon, the - creator of information theory (and, by extension, the computer - revolution) was an [17]L. Ron Hubbard fan in later life. In our - continuum, this didn’t affect his theories: he had already done his - major work. Imagine, however, a parallel universe, where Shannon’s - science and standom had become intertwined and wildly influential, so - that debates in information science obsessed over whether we could - eliminate the noise of our [18]engrams, and isolate the signal of our - True Selves, allowing us all to become [19]Operating Thetans. Then - reflect on how your imagination doesn’t have to work nearly as hard as - it ought to. A similarly noxious blend of garbage ideas and actual - science is the foundation stone of the Grand AI Risk Debates that are - happening today. +We are on a very strange timeline. My laboured Dianetics/Scientology joke can +be turned into an interesting hypothetical. It actually turns out (I only +stumbled across this recently) that Claude Shannon, the creator of information +theory (and, by extension, the computer revolution) was an [45]L. Ron Hubbard +fan in later life. In our continuum, this didn’t affect his theories: he had +already done his major work. Imagine, however, a parallel universe, where +Shannon’s science and standom had become intertwined and wildly influential, so +that debates in information science obsessed over whether we could eliminate +the noise of our [46]engrams, and isolate the signal of our True Selves, +allowing us all to become [47]Operating Thetans. Then reflect on how your +imagination doesn’t have to work nearly as hard as it ought to. A similarly +noxious blend of garbage ideas and actual science is the foundation stone of +the Grand AI Risk Debates that are happening today. - To be clear - not everyone working on existential AI risk (or ‘x risk’ - as it is usually summarized) is a true believer in Strong Eliezer - Rationalism. Most, very probably, are not. But you don’t need all that - many true believers to keep the machine running. At least, that is how - I interpret this [20]Shazeda Ahmed essay, which describes how some core - precepts of a very strange set of beliefs have become normalized as the - background assumptions for thinking about the promise and problems of - AI. Even if you, as an AI risk person, don’t buy the full intellectual - package, you find yourself looking for work in a field where the - funding, the incentives, and the organizational structures mostly point - in a single direction (NB - this is my jaundiced interpretation, not - hers). +To be clear - not everyone working on existential AI risk (or ‘x risk’ as it is +usually summarized) is a true believer in Strong Eliezer Rationalism. Most, +very probably, are not. But you don’t need all that many true believers to keep +the machine running. At least, that is how I interpret this [48]Shazeda Ahmed +essay, which describes how some core precepts of a very strange set of beliefs +have become normalized as the background assumptions for thinking about the +promise and problems of AI. Even if you, as an AI risk person, don’t buy the +full intellectual package, you find yourself looking for work in a field where +the funding, the incentives, and the organizational structures mostly point in +a single direction (NB - this is my jaundiced interpretation, not hers). - ******** +******** - There are two crucial differences between today’s AI cult and golden - age Scientology. The first was already mentioned in passing. Machine - learning works, and has some very important real life uses. - [21]E-meters don’t work and are useless for any purpose other than - fleecing punters. +There are two crucial differences between today’s AI cult and golden age +Scientology. The first was already mentioned in passing. Machine learning +works, and has some very important real life uses. [49]E-meters don’t work and +are useless for any purpose other than fleecing punters. - The second (which is closely related) is that Scientology’s ideology - and money-hustle reinforce each other. The more that you buy into - stories about the evils of mainstream psychology, the baggage of - engrams that is preventing you from reaching your true potential and so - on and so on, the more you want to spend on Scientology counselling. In - AI, in contrast, God and Money have a rather more tentative - relationship. If you are profoundly worried about the risks of AI, - should you be unleashing it on the world for profit? That tension helps - explain the fight that has just broken out into the open. +The second (which is closely related) is that Scientology’s ideology and +money-hustle reinforce each other. The more that you buy into stories about the +evils of mainstream psychology, the baggage of engrams that is preventing you +from reaching your true potential and so on and so on, the more you want to +spend on Scientology counselling. In AI, in contrast, God and Money have a +rather more tentative relationship. If you are profoundly worried about the +risks of AI, should you be unleashing it on the world for profit? That tension +helps explain the fight that has just broken out into the open. - It’s easy to forget that OpenAI was founded as an explicitly - non-commercial entity, the better to balance the rewards and the risks - of these new technologies. To quote from its [22]initial manifesto: - It’s hard to fathom how much human-level AI could benefit society, - and it’s equally hard to imagine how much it could damage society if - built or used incorrectly. Because of AI’s surprising history, it’s - hard to predict when human-level AI might come within reach. When it - does, it’ll be important to have a leading research institution - which can prioritize a good outcome for all over its - own self-interest. +It’s easy to forget that OpenAI was founded as an explicitly non-commercial +entity, the better to balance the rewards and the risks of these new +technologies. To quote from its [50]initial manifesto: - We’re hoping to grow OpenAI into such an institution. As a - non-profit, our aim is to build value for everyone rather than - shareholders. Researchers will be strongly encouraged to publish - their work, whether as papers, blog posts, or code, and our patents - (if any) will be shared with the world. We’ll freely collaborate - with others across many institutions and expect to work with - companies to research and deploy new technologies. + It’s hard to fathom how much human-level AI could benefit society, and it’s + equally hard to imagine how much it could damage society if built or + used incorrectly. Because of AI’s surprising history, it’s hard to predict + when human-level AI might come within reach. When it does, it’ll be + important to have a leading research institution which can prioritize a + good outcome for all over its own self-interest. - That … isn’t quite how it worked out. The Sam Altman justification for - deviation from this vision, laid out in various interviews, is that it - turned out to just be too damned expensive to train the models as they - grew bigger, and bigger and bigger. This necessitated the creation of - an add-on structure, which would sidle into profitable activity. It - also required massive cash infusions from Microsoft (reportedly in - [23]the range of $13 billion), which also has an exclusive license to - OpenAI’s most recent LLM, GPT-4. Microsoft, it should be noted, is not - in the business of prioritizing “a good outcome for all over its own - self-interest.” It looks instead, to invest its resources along the - very best Friedmanite principles, so as to create whopping returns for - shareholders. And $13 billion is a lot of invested resources. + We’re hoping to grow OpenAI into such an institution. As a non-profit, our + aim is to build value for everyone rather than shareholders. Researchers + will be strongly encouraged to publish their work, whether as papers, blog + posts, or code, and our patents (if any) will be shared with the world. + We’ll freely collaborate with others across many institutions and expect to + work with companies to research and deploy new technologies. - This, very plausibly explains the current crisis. OpenAI’s governance - arrangements are shaped by the fact that it was a non-profit until - relatively recently. The board is a non-profit board. The two members - already mentioned, McCauley and Toner, are not the kind of people you - would expect to see making the big decisions for a major commercial - entity. They plausibly represent the older rationalist vision of what - OpenAI was supposed to do, and the risks that it was supposed to avert. +That … isn’t quite how it worked out. The Sam Altman justification for +deviation from this vision, laid out in various interviews, is that it turned +out to just be too damned expensive to train the models as they grew bigger, +and bigger and bigger. This necessitated the creation of an add-on structure, +which would sidle into profitable activity. It also required massive cash +infusions from Microsoft (reportedly in [51]the range of $13 billion), which +also has an exclusive license to OpenAI’s most recent LLM, GPT-4. Microsoft, it +should be noted, is not in the business of prioritizing “a good outcome for all +over its own self-interest.” It looks instead, to invest its resources along +the very best Friedmanite principles, so as to create whopping returns for +shareholders. And $13 billion is a lot of invested resources. - But as OpenAI’s ambitions have grown, that vision has been watered down - in favor of making money. I’ve heard that there were a lot of people in - the AI community who were really unhappy with OpenAI’s initial decision - to let GPT rip. That spurred the race for commercial domination of AI - which has shaped pretty well everything that has happened since, - leading to model after model being launched, and to hell with the - consequences. People like Altman still talk about the dangers of AGI. - But their organizations and businesses keep releasing more, and more - powerful systems, which can be, and are being, used in all sorts of - unanticipated ways, for good and for ill. +This, very plausibly explains the current crisis. OpenAI’s governance +arrangements are shaped by the fact that it was a non-profit until relatively +recently. The board is a non-profit board. The two members already mentioned, +McCauley and Toner, are not the kind of people you would expect to see making +the big decisions for a major commercial entity. They plausibly represent the +older rationalist vision of what OpenAI was supposed to do, and the risks that +it was supposed to avert. - It would perhaps be too cynical to say that AGI existential risk - rhetoric has become a cynical hustle, intended to redirect the - attentions of regulators toward possibly imaginary future risks in the - future, and away from problematic but profitable activities that are - happening right now. Human beings have an enormous capacity to - fervently believe in things that it is in their self-interest to - believe, and to update those beliefs as the interests change or become - clearer. I wouldn’t be surprised at all if Altman sincerely thinks that - he is still acting for the good of humankind (there are certainly - enough people assuring him that he is). But it isn’t surprising either - that the true believers are revolting, as Altman stretches their - ideology ever further and thinner to facilitate raking in the - benjamins. +But as OpenAI’s ambitions have grown, that vision has been watered down in +favor of making money. I’ve heard that there were a lot of people in the AI +community who were really unhappy with OpenAI’s initial decision to let GPT +rip. That spurred the race for commercial domination of AI which has shaped +pretty well everything that has happened since, leading to model after model +being launched, and to hell with the consequences. People like Altman still +talk about the dangers of AGI. But their organizations and businesses keep +releasing more, and more powerful systems, which can be, and are being, used in +all sorts of unanticipated ways, for good and for ill. - The OpenAI saga is a fight between God and Money; between a quite - peculiar quasi-religious movement, and a quite ordinary desire to make - cold hard cash. You should probably be putting your bets on Money - prevailing in whatever strange arrangement of forces is happening as - Altman is beamed up into the Microsoft mothership. But we might not be - all that better off in this particular case if the forces of God were - to prevail, and the rationalists who toppled Altman were to win a - surprising victory. They want to slow down AI, which is good, but for - all sorts of weird reasons, which are unlikely to provide good - solutions for the actual problems that AI generates. The important - questions about AI are the ones that neither God or [24]Mammon has - particularly good answers for - but that’s a topic for future posts. +It would perhaps be too cynical to say that AGI existential risk rhetoric has +become a cynical hustle, intended to redirect the attentions of regulators +toward possibly imaginary future risks in the future, and away from problematic +but profitable activities that are happening right now. Human beings have an +enormous capacity to fervently believe in things that it is in their +self-interest to believe, and to update those beliefs as the interests change +or become clearer. I wouldn’t be surprised at all if Altman sincerely thinks +that he is still acting for the good of humankind (there are certainly enough +people assuring him that he is). But it isn’t surprising either that the true +believers are revolting, as Altman stretches their ideology ever further and +thinner to facilitate raking in the benjamins. - Thanks for reading Programmable Mutter! Subscribe for free to receive - new posts. And if you want to support my work, [25]buy my and Abe - Newman’s new book, [26]Underground Empire, and sing its praises (as - long as you actually liked it) on Amazon, Goodreads, social media and - everywhere else that people find out about good books. - ____________________ - (BUTTON) Subscribe - 73 - (BUTTON) - Share this post +The OpenAI saga is a fight between God and Money; between a quite peculiar +quasi-religious movement, and a quite ordinary desire to make cold hard cash. +You should probably be putting your bets on Money prevailing in whatever +strange arrangement of forces is happening as Altman is beamed up into the +Microsoft mothership. But we might not be all that better off in this +particular case if the forces of God were to prevail, and the rationalists who +toppled Altman were to win a surprising victory. They want to slow down AI, +which is good, but for all sorts of weird reasons, which are unlikely to +provide good solutions for the actual problems that AI generates. The important +questions about AI are the ones that neither God or [52]Mammon has particularly +good answers for - but that’s a topic for future posts. + +Thanks for reading Programmable Mutter! Subscribe for free to receive new +posts. And if you want to support my work, [53]buy my and Abe Newman’s new +book, [54]Underground Empire, and sing its praises (as long as you actually +liked it) on Amazon, Goodreads, social media and everywhere else that people +find out about good books. + +[63][ ] +Subscribe +73 +Share this post +[https] What OpenAI shares with Scientology - www.programmablemutter.com - (BUTTON) - Copy link - (BUTTON) - Facebook - (BUTTON) - Email - (BUTTON) - Note - (BUTTON) - Other - 17 - Share - 17 Comments - - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - ____________________________________________________________ - (BUTTON) - Share this discussion +www.programmablemutter.com +Copy link +Facebook +Email +Note +Other +[71] +17 +[72] +Share +17 Comments +[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 +www.programmablemutter.com +Copy link +Facebook +Email +Note +Other - 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 - hard decision. You previously blamed the Bain consultants when you - offshored a factory, now you blame AI. - Expand full comment - Reply - Share - (BUTTON) - Gerben Wierda - [29]Nov 21, 2023·edited Nov 21, 2023 + [81] + Tarik Najeddine + [82]Writes Factual Dispatch + [83]Nov 20, 2023 - Came here via Dave Karpf's link. Beautiful stuff, and "The Singularity - is Nigh" made me laugh out loud. +[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. - The psychological and sociological/cultural side of the current - GPT-fever is indeed far more important and telling than the technical - reality. Short summary: quantity has its own certain quality, but the - systems may be impressive, we humans are impressionable. + Expand full comment + Reply + Share - 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 - 'founders' of these innovative tech firms. He answered that founders - should have ‘deeply held convictions’ that are stable without a lot of - ‘positive external reinforcement’, ‘obsession’ with a problem, and a - ‘super powerful internal drive’. They needed to be an 'evangelist'. The - link with religion shows here too. - ([30]https://erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman - -and). TED just released Ilya Sutskever’s talk and you see it there - too. We have strong believers turned evangelists and we have a world of - disciples and followers. It is indeed a very good analogy. - Expand full comment - Reply - Share - (BUTTON) - [31]15 more comments... - Top - New - Community + [86] + Gerben Wierda + [87]Nov 21, 2023·edited Nov 21, 2023 - No posts + Came here via Dave Karpf's link. Beautiful stuff, and "The Singularity + is Nigh" made me laugh out loud. - Ready for more? - ____________________ - (BUTTON) 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 + The psychological and sociological/cultural side of the current + GPT-fever is indeed far more important and telling than the technical + reality. Short summary: quantity has its own certain quality, but the + systems may be impressive, we humans are impressionable. - This site requires JavaScript to run correctly. Please [37]turn on - JavaScript or unblock scripts + Recently, Sam Altman received a Hawking Fellowship for the OpenAI Team +[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. ([88]https:// + erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman-and). TED + just released Ilya Sutskever’s talk and you see it there too. We have + strong believers turned evangelists and we have a world of disciples + and followers. It is indeed a very good analogy. -References + Expand full comment + Reply + Share - 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/ +[90]15 more comments... +Top +New +Community - 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 +No posts + +Ready for more? + +[99][ ] +Subscribe +© 2024 Henry Farrell +[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 + +References: + +[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/ diff --git a/static/archive/www-robinsloan-com-sbm0vr.txt b/static/archive/www-robinsloan-com-sbm0vr.txt index 745bb84..0d337a0 100644 --- a/static/archive/www-robinsloan-com-sbm0vr.txt +++ b/static/archive/www-robinsloan-com-sbm0vr.txt @@ -1,39 +1,34 @@ - #[1]next [2]alternate +[1]Home [2]About [3]Moonbound From: Robin Sloan +To: the lab +Sent: March 2023 - [3]Home [4]About [5]Moonbound +Phase change - From: Robin Sloan - To: the lab - Sent: March 2023 +An extremely close-up photograph of a snowflake, looking almost architectural. +[4]Snowflake, Wilson Bentley, ca. 1910 - Phase change +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. - An extremely close-up photograph of a snowflake, looking almost - architectural. [6]Snowflake, Wilson Bentley, ca. 1910 +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. - 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. +In Our Time only provides HTML pages for each episode — there’s no structured +data, no sense of “episode X is connected to episode Y because of shared +feature Z”. - 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. +As Matt explains [7]in his write-up, he fed the plain-language content of each +episode page into the GPT-3 API, cleverly prompting it to extract basic +metadata, along with a few subtler properties — including a Dewey +Decimal number!? - In Our Time only provides HTML pages for each episode — there’s no - structured data, no sense of “episode X is connected to episode Y - because of shared feature Z”. +(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.) - As Matt explains [9]in his write-up, he fed the plain-language content - of each episode page into the GPT-3 API, cleverly prompting it to - extract basic metadata, along with a few subtler properties — including - a Dewey Decimal number!? +Here’s [9]a bit of Matt’s prompt: - (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.) - - Here’s [11]a bit of Matt’s prompt: -Extract the description and a list of guests from the supplied episode notes fro -m a podcast. +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,259 +46,244 @@ Episode synopsis (Markdown): Valid JSON: - Important to say: it doesn’t work perfectly. Matt reports that GPT-3 - doesn’t always return valid JSON, and if you browse the Braggoscope, - you’ll find plenty of questionable filing choices. +Important to say: it doesn’t work perfectly. Matt reports that GPT-3 doesn’t +always return valid JSON, and if you browse the Braggoscope, you’ll find plenty +of questionable filing choices. - And yet! What a technique. (Matt credits Noah Brier for [12]the - insight.) +And yet! What a technique. (Matt credits Noah Brier for [10]the insight.) - It fits into a pattern I’ve noticed: while the buzzy application of the - GPT-alikes is chat, the real workhorse might be text transformation. +It fits into a pattern I’ve noticed: while the buzzy application of the +GPT-alikes is chat, the real workhorse might be text transformation. - As Matt writes: +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. + Using GPT-3 as a function call. - Using GPT-3 as a universal coupling. + Using GPT-3 as a universal coupling. - It brings a lot within reach. + It brings a lot within reach. - I think the magnitude of this shift … I would say it’s on the order - of the web from the mid 90s? There was a radical simplification and - democratisation of software (architecture, development, deployment, - use) that took decades to really unfold. + I think the magnitude of this shift … I would say it’s on the order of the + web from the mid 90s? There was a radical simplification and democratisa + tion of software (architecture, development, deployment, use) that took + decades to really unfold. - For me, 2022 and 2023 have presented two thick strands of inquiry: the - web and AI, AI and the web. This is evidenced by the structure of these - lab newsletters, which have tended towards birfucation. +For me, 2022 and 2023 have presented two thick strands of inquiry: the web and +AI, AI and the web. This is evidenced by the structure of these lab +newsletters, which have tended towards birfucation. - Matt’s thinking is interesting to me because it brings the - strands together. +Matt’s thinking is interesting to me because it brings the strands together. - One of the pleasures of HTTP (the original version) is that it’s almost - plain language, though a very simple kind. You can execute an HTTP - request “by hand”: telnet www.google.com 80 followed by GET /. +One of the pleasures of HTTP (the original version) is that it’s almost plain +language, though a very simple kind. You can execute an HTTP request “by hand”: +telnet www.google.com 80 followed by GET /. - Language models as universal couplers begin to suggest protocols that - really are plain language. What if the protocol of the GPT-alikes is - just a bare TCP socket carrying free-form requests and instructions? - What if the RSS feed of the future is simply my language model replying - to yours when it asks, “What’s up with Robin lately?” +Language models as universal couplers begin to suggest protocols that really +are plain language. What if the protocol of the GPT-alikes is just a bare TCP +socket carrying free-form requests and instructions? What if the RSS feed of +the future is simply my language model replying to yours when it asks, “What’s +up with Robin lately?” - I like this because I hate it; because it’s weird, and makes me - feel uncomfortable. - __________________________________________________________________ +I like this because I hate it; because it’s weird, and makes me +feel uncomfortable. - I think it’s really challenging to find the appropriate stance towards - this stuff. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - On one hand, I find critical deflation, of the kind you’ll hear from - Ted Chiang, Simon Willison, and Claire Leibowicz in [13]this recent - episode of KQED Forum, appropriate and useful. The hype is so powerful - that any corrective is welcome. +I think it’s really challenging to find the appropriate stance towards +this stuff. - However! On the critical side, the evaluation of what’s before us isn’t - sufficient; not even close. If we demand humility from AI engineers, - then we ought to match it with imagination. +On one hand, I find critical deflation, of the kind you’ll hear from Ted +Chiang, Simon Willison, and Claire Leibowicz in [11]this recent episode of KQED +Forum, appropriate and useful. The hype is so powerful that any corrective +is welcome. - An important fact about these language models — one that sets them - apart from, say, the personal computer, or the iPhone — is that their - capabilities have been surprising, often confounding, even to - their creators. +However! On the critical side, the evaluation of what’s before us isn’t +sufficient; not even close. If we demand humility from AI engineers, then we +ought to match it with imagination. - 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. +An important fact about these language models — one that sets them apart from, +say, the personal computer, or the iPhone — is that their capabilities have +been surprising, often confounding, even to their creators. - The simple fact is: even at the highest levels of theory and practice, - no one knows how these language models are doing what they’re doing. +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. - Over the past few years, in the evolution from GPT-2-alikes to - GPT-3-alikes and beyond, it’s become clear that the “returns to - scale”—both in terms of (1) a model’s size and (2) the scope of its - training data — are exponential and nonlinear. Simply adding more works - better, and works weirder, than it should. +The simple fact is: even at the highest levels of theory and practice, no one +knows how these language models are doing what they’re doing. - The 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. +Over the past few years, in the evolution from GPT-2-alikes to GPT-3-alikes and +beyond, it’s become clear that the “returns to scale”—both in terms of (1) a +model’s size and (2) the scope of its training data — are exponential and +nonlinear. Simply adding more works better, and works weirder, than it should. - At the moment, my deepest engagement with a language model is in a - channel on a Discord server, where our gallant host has set up a - ChatGPT-powered bot and laced a simple personality into its prompt. The - sociability has been a revelation — multiplayer ChatGPT is much, MUCH - more fun than single player — and, of course, the conversation tends - towards goading the bot, testing its boundaries, luring it - into absurdities. +The 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 bot writes poems, sure, and song lyrics, and movie scenes. +At the moment, my deepest engagement with a language model is in a channel on a +Discord server, where our gallant host has set up a ChatGPT-powered bot and +laced a simple personality into its prompt. The sociability has been a +revelation — multiplayer ChatGPT is much, MUCH more fun than single player —  +and, of course, the conversation tends towards goading the bot, testing its +boundaries, luring it into absurdities. - The bot also produces ASCII art, and SVG code, and [15]PICO-8 programs, - though they don’t always run. +The bot writes poems, sure, and song lyrics, and movie scenes. - I find myself deeply ambivalent, in the original sense of: thinking - many things at once. I’m very aware of the bot’s limitations, but/and - I find myself stunned by its fluency, its range. +The bot also produces ASCII art, and SVG code, and [13]PICO-8 programs, though +they don’t always run. - 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. +I find myself deeply ambivalent, in the original sense of: thinking many things +at once. I’m very aware of the bot’s limitations, but/and I find myself stunned +by its fluency, its range. - As ever, [16]Jack Clark is my guide. He’s a journalist turned AI - practioner, involved in policy and planning at the highest levels, - first at OpenAI, now at Anthropic. And if he’s no longer a - disinterested observer, he remains deeply grounded and moral, which - makes me trust him when he says, with confidence: this is the biggest - thing going, and we had all better brace for weird times ahead. - __________________________________________________________________ +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. - What does that mean, to brace for it? +As ever, [14]Jack Clark is my guide. He’s a journalist turned AI practioner, +involved in policy and planning at the highest levels, first at OpenAI, now at +Anthropic. And if he’s no longer a disinterested observer, he remains deeply +grounded and moral, which makes me trust him when he says, with confidence: +this is the biggest thing going, and we had all better brace for weird +times ahead. - I’ve found it helpful, these past few years, to frame my anxieties and - dissatisfactions as questions. For example, fed up with the state of - social media, [17]I asked: what do I want from the internet, anyway? +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - It turns out I had an answer to that question. +What does that mean, to brace for it? - Where the GPT-alikes are concerned, a question that’s emerging for - me is: +I’ve found it helpful, these past few years, to frame my anxieties and dissatis +factions as questions. For example, fed up with the state of social media, [15] +I asked: what do I want from the internet, anyway? - What could I do with a universal function — a tool for turning just - about any X into just about any Y with plain language instructions? +It turns out I had an answer to that question. - I don’t pose that question with any sense of wide-eyed expectation; a - reasonable answer might be, nothing much. Not everything in the world - depends on the transformation of symbols. But I think that IS the - question, and I think it takes some legitimate work, some strenuous - imagination, to push yourself to believe it really will be “just about - any X” into “just about any Y”. +Where the GPT-alikes are concerned, a question that’s emerging for me is: - 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? +What could I do with a universal function — a tool for turning just about any X +into just about any Y with plain language instructions? - My answer, so far, is indeed: nothing much! It’s a physical business, - after all, mainly concerned with moving and transforming matter. The - “obvious” application is customer support, which I handle myself, and - which I am unwilling to cede to a computer or, indeed, anyone who isn’t - me. The specific quality and character of our support is important. +I don’t pose that question with any sense of wide-eyed expectation; a reason +able answer might be, nothing much. Not everything in the world depends on the +transformation of symbols. But I think that IS the question, and I think it +takes some legitimate work, some strenuous imagination, to push yourself to +believe it really will be “just about any X” into “just about any Y”. - (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.) +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? - (Of course, it’s not going to happen like that, is it? Long before - GPT-alikes can solve the same problems Robin can, using the tools Robin - has, the problems themselves will change to meet the GPT-alikes - halfway. The systems will all learn to “speak GPT”, in some sense.) +My answer, so far, is indeed: nothing much! It’s a physical business, after +all, mainly concerned with moving and transforming matter. The “obvious” appli +cation is customer support, which I handle myself, and which I am unwilling to +cede to a computer or, indeed, anyone who isn’t me. The specific quality and +character of our support is important. - 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. - __________________________________________________________________ +(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.) - Jack Clark includes, in all of his AI newsletters, a piece of original - micro-fiction. One of them, [19]sent in December, has stayed with me. - I’ll reproduce it here in full: +(Of course, it’s not going to happen like that, is it? Long before GPT-alikes +can solve the same problems Robin can, using the tools Robin has, the problems +themselves will change to meet the GPT-alikes halfway. The systems will all +learn to “speak GPT”, in some sense.) - Reality Authentication +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 internet, 2034] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - “To login, spit into the bio-API” +Jack Clark includes, in all of his AI newsletters, a piece of original +micro-fiction. One of them, [17]sent in December, has stayed with me. I’ll +reproduce it here in full: - 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. + Reality Authentication - “Authenticating … authentication successful, human-user identified. - Enjoy your time on the application!” + [The internet, 2034] - 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. + “To login, spit into the bio-API” - When I logged out, I went back to the regular internet. Since the AI - models had got minituarized and proliferated a decade ago, the - internet had radically changed. For one thing, it was so much faster - now. It was also dangerous in ways it hadn’t been before - Attention - Harvesters were everywhere and the only reason I was confident in my - browsing was I’d paid for a few protection programs. + 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 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”. + “Authenticating … authentication successful, human-user identified. Enjoy + your time on the application!” - In the extreme case, if AI doesn’t wreck the world, language models - could certainly wreck the internet, like Jack’s Attention Harvesters - above. Maybe we’ll look back at the Web Parenthesis, 1990-2030. It was - weird and fun, though no one in the future will quite understand - the appeal. + 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. - 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. + When I logged out, I went back to the regular internet. Since the AI models + had got minituarized and proliferated a decade ago, the internet had + radically changed. For one thing, it was so much faster now. It was also + dangerous in ways it hadn’t been before - Attention Harvesters were every + where and the only reason I was confident in my browsing was I’d paid for a + few protection programs. - It might be as simple as: is this kind of capability, extrapolated - forward, useful to me and my work? If so, how? +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”. - 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? +In the extreme case, if AI doesn’t wreck the world, language models could +certainly wreck the internet, like Jack’s Attention Harvesters above. Maybe +we’ll look back at the Web Parenthesis, 1990-2030. It was weird and fun, though +no one in the future will quite understand the appeal. - It might even be my original question, or a version of it: what do - I want from the internet, anyway? +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. - From Oakland, +It might be as simple as: is this kind of capability, extrapolated forward, +useful to me and my work? If so, how? - Robin +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? - March 2023, Oakland +It might even be my original question, or a version of it: what do I want from +the internet, anyway? - I'm [20]Robin Sloan, a fiction writer. You can sign up for my - lab newsletter: - ____________________ Subscribe +From Oakland, - This website doesn’t collect any information about you or your reading. - It aspires to the speed and privacy of the printed page. +Robin - Don’t miss [21]the colophon. Hony soyt qui mal pence +March 2023, Oakland -References +I'm [18]Robin Sloan, a fiction writer. You can sign up for my lab newsletter: - 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/ +[19][ ] [20][Subscribe] +This website doesn’t collect any information about you or your reading. +It aspires to the speed and privacy of the printed page. + +Don’t miss [21]the colophon. Hony soyt qui mal pence + + +References: + +[1] https://www.robinsloan.com/ +[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/ diff --git a/static/archive/www-sitepoint-com-6vwmef.txt b/static/archive/www-sitepoint-com-6vwmef.txt index 1131d81..3b17d12 100644 --- a/static/archive/www-sitepoint-com-6vwmef.txt +++ b/static/archive/www-sitepoint-com-6vwmef.txt @@ -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] +[42][1433174717] +[43]Jesse Herrick +July 26, 2014 +Share - [37]Jesse Herrick +rubygrows - July 26, 2014 - Share (BUTTON) (BUTTON) (BUTTON) (BUTTON) (BUTTON) +The Ruby language is 21 years old. Its strong community and adoption by the +open source community has kept this language steady and improving. Ruby has +changed drastically over the years. It has grown from a young child to the +strong adult that it is today. But it didn’t get that way overnight. Let’s take +a look at the life of the Ruby programming language. - rubygrows - - The Ruby language is 21 years old. Its strong community and adoption by - the open source community has kept this language steady and improving. - Ruby has changed drastically over the years. It has grown from a young - child to the strong adult that it is today. But it didn’t get that way - overnight. Let’s take a look at the life of the Ruby programming - language. - - Note: This article is packed with metaphors (language to human), so be - prepared. +Note: This article is packed with metaphors (language to human), so be +prepared. Birth (1993) - Ruby was born in 1993, conceieved in a discussion between Yukihiro - Matsumoto (“Matz”) and a colleague. They were discussing the - possibility of an object-oriented scripting-language. Matz stated in - [38]ruby-talk:00382 that he knew Perl, but did not like it very much; - that it had the smell of a “toy” language. He also discussed that he - knew Python, but didn’t like it because it wasn’t a true - object-oriented programming language. +Ruby was born in 1993, conceieved in a discussion between Yukihiro Matsumoto +(“Matz”) and a colleague. They were discussing the possibility of an +object-oriented scripting-language. Matz stated in [49]ruby-talk:00382 that he +knew Perl, but did not like it very much; that it had the smell of a “toy” +language. He also discussed that he knew Python, but didn’t like it because it +wasn’t a true object-oriented programming language. - Matz wanted a language perfect for his needs: - * Syntactically Simple - * Truly Object-Oriented - * Having Iterators and Closures - * Exception Handling - * Garbage Collection - * Portable +Matz wanted a language perfect for his needs: - 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. + • 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 [50]here at your own risk. Toddler Years - Ruby became a toddler (n.: a young child who is just beginning to walk) - when Ruby 1.0 was released in December, 1996. Ruby 1.1 shortly followed - in August of 1997, and the first stable version of Ruby (1.2) was - released in December of 1998. +Ruby became a toddler (n.: a young child who is just beginning to walk) when +Ruby 1.0 was released in December, 1996. Ruby 1.1 shortly followed in August of +1997, and the first stable version of Ruby (1.2) was released in December of +1998. - At this point in time, Ruby was localized to Japan only, but it would - soon spread to other parts of the world… +At this point in time, Ruby was localized to Japan only, but it would soon +spread to other parts of the world… Primary School Years - In 1998, Matz created a simple English homepage for Ruby. However, Ruby - was still very localized to Japan. In trying to further this expansion, - the first English language Ruby mailing list, [40]Ruby-Talk, was - created. Ruby was beginning to spread beyond Japan. +In 1998, Matz created a simple English homepage for Ruby. However, Ruby was +still very localized to Japan. In trying to further this expansion, the first +English language Ruby mailing list, [51]Ruby-Talk, was created. Ruby was +beginning to spread beyond Japan. - Ruby-Talk is still very active today, and you can subscribe to it - [41]here. +Ruby-Talk is still very active today, and you can subscribe to it [52]here. - In October of 1999, Yukihiro Matsumoto and Keiju Ishitsuka wrote the - first book on the Ruby programming language: The Object-oriented - Scripting Language Ruby. Ruby was beginning to get very popular in - Japan, and spreading rapidly to English-speaking countries. +In October of 1999, Yukihiro Matsumoto and Keiju Ishitsuka wrote the first book +on the Ruby programming language: The Object-oriented Scripting Language Ruby. +Ruby was beginning to get very popular in Japan, and spreading rapidly to +English-speaking countries. - In 2001, the first English book on Ruby, Programming Ruby (“The - Pickaxe”), was published in 2001. With this new information on Ruby, - many more people were able to learn the language. +In 2001, the first English book on Ruby, Programming Ruby (“The Pickaxe”), was +published in 2001. With this new information on Ruby, many more people were +able to learn the language. - Ruby 1.8 was released in 2003. This release made large amounts of - changes to the agile 10-year-old language. Including: - * Duck Typing (looks like a duck, swims like a duck, quacks like a - duck: it’s a duck) - * Fully Qualified Names (Foo::Bar) - * Native YAML Support - * WEBrick - * StringIO - * open-uri - * PP (Pretty Printer for Hash#inspect) - * ruby -run (UNIX commands for all! ruby -run -e mkdir foo) - * And many other minor features +Ruby 1.8 was released in 2003. This release made large amounts of changes to +the agile 10-year-old language. Including: - In 2004, RubyGems was released to the public. Good things started - happening next… + • Duck Typing (looks like a duck, swims like a duck, quacks like a duck: it’s + a duck) + • Fully Qualified Names (Foo::Bar) + • Native YAML Support + • WEBrick + • StringIO + • open-uri + • PP (Pretty Printer for Hash#inspect) + • ruby -run (UNIX commands for all! ruby -run -e mkdir foo) + • And many other minor features + +In 2004, RubyGems was released to the public. Good things started happening +next… The Rebellious Teenager - In 2005, Ruby use took off. The reason: Ruby on Rails. This new - framework changed the history of rapid web development. Ruby had been - used in the past to write CGI scripts, but Ruby on Rails took this a - step further. Rails has a Model-View-Controller structure that focuses - on “convention over configuration”, which is great for developing web - applications. +In 2005, Ruby use took off. The reason: Ruby on Rails. This new framework +changed the history of rapid web development. Ruby had been used in the past to +write CGI scripts, but Ruby on Rails took this a step further. Rails has a +Model-View-Controller structure that focuses on “convention over +configuration”, which is great for developing web applications. - People loved it. So much so that, the Ruby community was almost taken - over by the Rails framework. Ruby in turn became very popular. +People loved it. So much so that, the Ruby community was almost taken over by +the Rails framework. Ruby in turn became very popular. - In March of 2007, Ruby 1.8.6 was released, with 1.8.7 following in May - of 2008. At this point, Ruby was at its peak. Mac OS X even began - shipping with it in 2007. At this point, Ruby was 15 years old. +In March of 2007, Ruby 1.8.6 was released, with 1.8.7 following in May of 2008. +At this point, Ruby was at its peak. Mac OS X even began shipping with it in +2007. At this point, Ruby was 15 years old. - Ruby 1.9 (development version) was released in December, 2007, then - stabilized 4 years later (2011) as Ruby 1.9.3. Ruby 1.9.3 was the - production version of 1.9.2. These versions brought new changes to the - language, such as: - * Significant speed improvements - * New methods - * New hash syntax ({ foo: 'bar' }) - * RubyGems included - * New Socket API (IPv6 support) - * Several random number generators - * Regular Expression improvements - * File loading performance improvements - * Test::Unit Improvements - * New encoding support - * More string formatting tweaks - * And so much more +Ruby 1.9 (development version) was released in December, 2007, then stabilized +4 years later (2011) as Ruby 1.9.3. Ruby 1.9.3 was the production version of +1.9.2. These versions brought new changes to the language, such as: - Ruby was making the transition from a rebellious teenager to a strong - adult as it turned 18 with Ruby 1.9.3. + • Significant speed improvements + • New methods + • New hash syntax ({ foo: 'bar' }) + • RubyGems included + • New Socket API (IPv6 support) + • Several random number generators + • Regular Expression improvements + • File loading performance improvements + • Test::Unit Improvements + • New encoding support + • More string formatting tweaks + • And so much more + +Ruby was making the transition from a rebellious teenager to a strong adult as +it turned 18 with Ruby 1.9.3. Strong Adult - Ruby 2.0.0 was released in February 2013 and brought many stabilizing - changes to the language. Among them are: - * More speed improvements - * Refinements (safe monkey patching) - * Keyword arguments - * UTF-8 by default - * New regular expressions engine - * Optimized garbage collection - * The addition of built-in syntax documentation (ri ruby:syntax) +Ruby 2.0.0 was released in February 2013 and brought many stabilizing changes +to the language. Among them are: - Unlike 1.9.x, which broke numerous gems with its changes, 2.0.0 was - almost completely backwards compatible with 1.9.3. In addition, Heroku, - one of the leading Ruby/Rails hosts upgraded to 2.0.0 quickly, causing - earlier than usual adoption by new and existing projects. The Ruby - language was (and is) in its golden age. + • More speed improvements + • Refinements (safe monkey patching) + • Keyword arguments + • UTF-8 by default + • New regular expressions engine + • Optimized garbage collection + • The addition of built-in syntax documentation (ri ruby:syntax) - Ruby 2.1.0 was released on Christmas day of 2013. It brought several - minor changes to the language. But the biggest news of 2.1.0 was - [42]semantic versioning, a way to properly version a project without - breaking dependencies by accident. +Unlike 1.9.x, which broke numerous gems with its changes, 2.0.0 was almost +completely backwards compatible with 1.9.3. In addition, Heroku, one of the +leading Ruby/Rails hosts upgraded to 2.0.0 quickly, causing earlier than usual +adoption by new and existing projects. The Ruby language was (and is) in its +golden age. - Ruby 2.1.1 was released on Ruby’s 21st birthday (February 24, 2014). - Ruby is now legally allowed to drink in the US (not that we’d want it - to). This version was mainly speed improvements and bugfixes. Shortly - after 2.1.1, Ruby 2.1.2 was released in May of 2014. 2.1.2 consists of - more bugfixes and is the current stable version of Ruby. +Ruby 2.1.0 was released on Christmas day of 2013. It brought several minor +changes to the language. But the biggest news of 2.1.0 was [53]semantic +versioning, a way to properly version a project without breaking dependencies +by accident. + +Ruby 2.1.1 was released on Ruby’s 21st birthday (February 24, 2014). Ruby is +now legally allowed to drink in the US (not that we’d want it to). This version +was mainly speed improvements and bugfixes. Shortly after 2.1.1, Ruby 2.1.2 was +released in May of 2014. 2.1.2 consists of more bugfixes and is the current +stable version of Ruby. The Future - Ruby is a great language. Matz wanted a programming language that - suited his needs, so he built one. This is an inspiring story of - software development: if you can’t find something that you like, - program it yourself. From 0.95 to 2.1.2, Ruby has struck the awe of - those who wished to program the way they wanted, not the way the - machine wanted. +Ruby is a great language. Matz wanted a programming language that suited his +needs, so he built one. This is an inspiring story of software development: if +you can’t find something that you like, program it yourself. From 0.95 to +2.1.2, Ruby has struck the awe of those who wished to program the way they +wanted, not the way the machine wanted. - We can’t know the future of the Ruby language, but we can predict it - based on the past. I believe that the Ruby language, and its fantastic - community will continue furthering the language above and beyond what - others think is possible, and projects built using it will do the same. +We can’t know the future of the Ruby language, but we can predict it based on +the past. I believe that the Ruby language, and its fantastic community will +continue furthering the language above and beyond what others think is +possible, and projects built using it will do the same. Share This Article - (BUTTON) (BUTTON) (BUTTON) (BUTTON) (BUTTON) + +[59]Jesse Herrick +[60]Jesse Herrick + +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. + + [63][64] - [43]Jesse Herrick - - [44]Jesse Herrick - - 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 +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 +[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 +[81]How to Modify the Browser History in Complex HTML5 and JavaScript +Applications[82]Craig Buckler - [50]Digital Fonts: A Condensed History - [51]Digital Fonts: A Condensed History[52]Alex Bigman + • Stuff we do - [53]A History of CSS Image Replacement - [54]A History of CSS Image Replacement[55]Baljeet Rathi + • [83]Premium + • [84]Newsletters + • [85]Forums - [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 + • About - [59]10 Years of Mobile Industry History in 10 Minutes - [60]10 Years of Mobile Industry History in 10 Minutes[61]Dirk Reagle + • [86]Our story + • [87]Terms of use + • [88]Privacy policy + • [89]Corporate memberships - [62]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 + • Contact - * Stuff we do - * [65]Premium - * [66]Newsletters - * [67]Forums + • [90]Contact us + • [91]FAQ + • [92]Publish your book with us + • [93]Write an article for us + • [94]Advertise - * About - * [68]Our story - * [69]Terms of use - * [70]Privacy policy - * [71]Corporate memberships + • Connect - * Contact - * [72]Contact us - * [73]FAQ - * [74]Publish your book with us - * [75]Write an article for us - * [76]Advertise + • [95][96][97] - * Connect - * +© 2000 – 2024 SitePoint Pty. Ltd. - © 2000 – 2024 SitePoint Pty. Ltd. +This site is protected by reCAPTCHA and the Google[98] Privacy Policy and[99] +Terms of Service apply. - This site is protected by reCAPTCHA and the Google[77] Privacy Policy - and[78] Terms of Service apply. + - +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 diff --git a/static/archive/www-theatlantic-com-biphm9.txt b/static/archive/www-theatlantic-com-biphm9.txt index ab9526b..c83e025 100644 --- a/static/archive/www-theatlantic-com-biphm9.txt +++ b/static/archive/www-theatlantic-com-biphm9.txt @@ -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 + Sections -The Print Edition - [30]Latest Issue[31]Past Issues - ______________________________________________________________ + □ [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 - [32]Give a Gift - * (BUTTON) - Search The Atlantic - (BUTTON) ____________________ - Quick Links - + [33]Dear Therapist - Dear Therapist - + [34]Crossword Puzzle - Crossword Puzzle - + [35]Magazine Archive - Magazine Archive - + [36]Your Subscription - Your Subscription - (BUTTON) - * [37]Popular - * [38]Latest - * [39]Newsletters + The Print Edition - * [40]Sign In - * [41]Subscribe + [31][current-issue] + [32]Latest Issue[33]Past Issues + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + [34]Give a Gift + • + Search The Atlantic + [37][ ] + Quick Links + □ [38]Dear Therapist + Dear Therapist + □ [39]Crossword Puzzle + Crossword Puzzle + □ [40]Magazine Archive + Magazine Archive + □ [41]Your Subscription + Your Subscription + • [43]Popular + • [44]Latest + • [45]Newsletters -[42]More From Planet +[46][47] + + • [48]Sign In + • [49]Subscribe + +[50]More From Planet More From Planet - [43]Explore This Series - * A person holds an umbrella in the wet and snowy city - The Threshold at Which Snow Starts Irreversibly Disappearing[44]Zoë - Schlanger - * Color photo of an arctic vole resting on small tundra plants - A Major Climate Force Has Been Ignored for Decades[45]Bathsheba Demuth - * Photos of flooding, as well as of family Polaroids and heirlooms, - arranged in a 3 x 4 grid and washed blue, against a blue background - Pack Your Memories Into Your Disaster Bag[46]Ayurella Horn-Muller - * A man works on an electric car - Electric Cars Are Already Upending America[47]Saahil Desai +[51]Explore This Series - [48]Health + • [52]A person holds an umbrella in the wet and snowy city + + The Threshold at Which Snow Starts Irreversibly Disappearing + + [53]Zoë Schlanger + • [54]Color photo of an arctic vole resting on small tundra plants + + A Major Climate Force Has Been Ignored for Decades + + [55]Bathsheba Demuth + • [56]Photos of flooding, as well as of family Polaroids and heirlooms, + arranged in a 3 x 4 grid and washed blue, against a blue background + + Pack Your Memories Into Your Disaster Bag + + [57]Ayurella Horn-Muller + • [58]A man works on an electric car + + Electric Cars Are Already Upending America + + [59]Saahil Desai + +[60]Health The Real Reason You Should Get an E-bike - It’ll cut your emissions. It’ll also make you happier. +It’ll cut your emissions. It’ll also make you happier. - By [49]Michael Thomas +By [61]Michael Thomas +A collage of 12 photographs of e-bikes against a light-pink background +Illustration by The Atlantic. Source: Getty. +October 20, 2023 +Share +Save - 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 +Today’s happiness and personal-finance gurus have no shortage of advice for +living a good life. Meditate daily. Sleep for eight hours a night. Don’t forget +to save for retirement. They’re not wrong, but few of these experts will tell +you one of the best ways to improve your life: Ditch your car. - Today’s happiness and personal-finance gurus have no shortage of advice - for living a good life. Meditate daily. Sleep for eight hours a night. - Don’t forget to save for retirement. They’re not wrong, but few of - these experts will tell you one of the best ways to improve your life: - Ditch your car. +A year ago, my wife and I sold one of our cars and replaced it with an e-bike. +As someone who writes about climate change, I knew that I was doing something +good for the planet. I knew that passenger vehicles are responsible for much of +our greenhouse-gas emissions—[64]16 percent in the U.S., to be exact—and that +the pollution spewing from gas-powered cars doesn’t just heat up the planet; it +could increase the risk of [65]premature death. I also knew that electric cars +were an imperfect fix: Though they’re responsible for less carbon pollution +than gas cars, even when powered by today’s dirty electric grid, their supply +chain is carbon intensive, and many of the materials needed to produce their +batteries are, in some cases, mined via a process that [66]brutally exploits +workers and harms [67]ecosystems and sacred Indigenous lands. An e-bike’s +comparatively tiny battery means less electricity, fewer emissions, fewer +resources. They are clearly better for the planet than cars of any kind. - A year ago, my wife and I sold one of our cars and replaced it with an - e-bike. As someone who writes about climate change, I knew that I was - doing something good for the planet. I knew that passenger vehicles are - responsible for much of our greenhouse-gas emissions—[50]16 percent in - the U.S., to be exact—and that the pollution spewing from gas-powered - cars doesn’t just heat up the planet; it could increase the risk of - [51]premature death. I also knew that electric cars were an imperfect - fix: Though they’re responsible for less carbon pollution than gas - cars, even when powered by today’s dirty electric grid, their supply - chain is carbon intensive, and many of the materials needed to produce - their batteries are, in some cases, mined via a process that - [52]brutally exploits workers and harms [53]ecosystems and sacred - Indigenous lands. An e-bike’s comparatively tiny battery means less - electricity, fewer emissions, fewer resources. They are clearly better - for the planet than cars of any kind. +[68]Read: America is missing out on the biggest EV boom of all - [54]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. - 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. +I was very wrong. The first thing I noticed was the savings. Between car +payments, insurance, maintenance, and gas, a car-centered lifestyle is +expensive. According to AAA, after fuel, maintenance, insurance, taxes, and the +like, owning and driving a new car in America costs[69] $10,728 a year. My +e-bike, by comparison, cost $2,000 off the rack and has near-negligible +recurring charges. After factoring in maintenance and a few bucks a month in +electricity costs, I estimate that we’ll save about $50,000 over the next five +years by ditching our car. - I was very wrong. The first thing I noticed was the savings. Between - car payments, insurance, maintenance, and gas, a car-centered lifestyle - is expensive. According to AAA, after fuel, maintenance, insurance, - taxes, and the like, owning and driving a new car in America costs[55] - $10,728 a year. My e-bike, by comparison, cost $2,000 off the rack and - has near-negligible recurring charges. After factoring in maintenance - and a few bucks a month in electricity costs, I estimate that we’ll - save about $50,000 over the next five years by ditching our car. +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. - 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. +Sara Hastings-Simon is a professor at the University of Calgary, where she +studies low-carbon transportation systems. She’s also a native Californian who +now bikes to work in a city where temperatures tend to hover around freezing +from December through March. She told me that with the right equipment, she’s +able to do it on all but the snowiest days—days when she wouldn’t want to be in +a car, either. “Those days are honestly a mess even on the roads,” she said. - Sara Hastings-Simon is a professor at the University of Calgary, where - she studies low-carbon transportation systems. She’s also a native - Californian who now bikes to work in a city where temperatures tend to - hover around freezing from December through March. She told me that - with the right equipment, she’s able to do it on all but the snowiest - days—days when she wouldn’t want to be in a car, either. “Those days - are honestly a mess even on the roads,” she said. +And though I, like [71]many would-be cyclists, was worried about arriving at +the office sweaty in hotter months, the e-bike solved my problem. Even when it +was 90 degrees outside, I didn’t break a sweat, thanks to my bike’s +pedal-assist mode. If I’m honest, sometimes I didn’t even pedal; I just used +the throttle, sat back, and enjoyed my ride. - And though I, like [57]many would-be cyclists, was worried about - arriving at the office sweaty in hotter months, the e-bike solved my - problem. Even when it was 90 degrees outside, I didn’t break a sweat, - thanks to my bike’s pedal-assist mode. If I’m honest, sometimes I - didn’t even pedal; I just used the throttle, sat back, and enjoyed my - ride. +Indeed, a big part of the appeal here is in the e part of the bike: “E-bikes +aren’t just a traditional bike with a motor. They are an entirely new +technology,” Hastings-Simon told me. Riding them is a radically different +experience from riding a normal bike, at least when it comes to the hard parts +of cycling. “It’s so much easier to take a bike over a bridge or in a hilly +neighborhood,” Laura Fox, the former general manager of New York City’s +bike-share program, told me. “I’ve had countless people come up to me and say, +‘I never thought that I could bike to work before, and now that I have an +option where you don’t have to show up sweaty, it’s possible.’” (When New York +introduced e-bikes to its fleet, ridership tripled, she told me, from 500,000 +to 1.5 million people.) - Indeed, a big part of the appeal here is in the e part of the bike: - “E-bikes aren’t just a traditional bike with a motor. They are an - entirely new technology,” Hastings-Simon told me. Riding them is a - radically different experience from riding a normal bike, at least when - it comes to the hard parts of cycling. “It’s so much easier to take a - bike over a bridge or in a hilly neighborhood,” Laura Fox, the former - general manager of New York City’s bike-share program, told me. “I’ve - had countless people come up to me and say, ‘I never thought that I - could bike to work before, and now that I have an option where you - don’t have to show up sweaty, it’s possible.’” (When New York - introduced e-bikes to its fleet, ridership tripled, she told me, from - 500,000 to 1.5 million people.) +[72]Read: How to get fewer people to commute in cars - [58]Read: How to get fewer people to commute in cars +But biking to work wasn’t just not unpleasant—it was downright enjoyable. It +made me feel happier and healthier; I arrived to work a little more buoyant for +having spent the morning in fresh air rather than traffic. [73]Study after [74] +study shows that people with longer car commutes are more likely to experience +poor health outcomes and lower personal well-being—and that cyclists are the +[75]happiest commuters. One day, shortly after selling our car, I hopped on my +bike after a stressful day at work and rode home down a street edged with +changing fall leaves. I felt more connected to the physical environment around +me than I had when I’d traveled the same route surrounded by metal and glass. I +breathed in the air, my muscles relaxed, and I grinned like a giddy +schoolchild. - But biking to work wasn’t just not unpleasant—it was downright - enjoyable. It made me feel happier and healthier; I arrived to work a - little more buoyant for having spent the morning in fresh air rather - than traffic. [59]Study after [60]study shows that people with longer - car commutes are more likely to experience poor health outcomes and - lower personal well-being—and that cyclists are the [61]happiest - commuters. One day, shortly after selling our car, I hopped on my bike - after a stressful day at work and rode home down a street edged with - changing fall leaves. I felt more connected to the physical environment - around me than I had when I’d traveled the same route surrounded by - metal and glass. I breathed in the air, my muscles relaxed, and I - grinned like a giddy schoolchild. +“E-bikes are like a miracle drug,” David Zipper, a transportation expert and +Visiting Fellow at Harvard Kennedy School, told me. “They provide so much +upside, not just for the riders, but for the people who are living around them +too.” - “E-bikes are like a miracle drug,” David Zipper, a transportation - expert and Visiting Fellow at Harvard Kennedy School, told me. “They - provide so much upside, not just for the riders, but for the people who - are living around them too.” +Of course, e-bikes aren’t going to replace every car on every trip. In a +country where sprawling suburbs and strip malls, not protected bike lanes, are +the norm, it’s unrealistic to expect e-bikes to replace cars in the way that +the Model T replaced horses. But we don’t need everyone to ride an e-bike to +work to make a big dent in our carbon-pollution problem. [76]A recent study +found that if 5 percent of commuters were to switch to e-bikes as their mode of +transportation, emissions would fall by 4 percent. As an individual, you don’t +even need to sell your car to reduce your carbon footprint significantly. In +2021, half of all trips in the United States were less than three miles, +according to [77]the Bureau of Transportation Statistics. Making those short +trips on an e-bike instead of in a car would likely save people money, cut +their emissions, and improve their health and happiness. - Of course, e-bikes aren’t going to replace every car on every trip. In - a country where sprawling suburbs and strip malls, not protected bike - lanes, are the norm, it’s unrealistic to expect e-bikes to replace cars - in the way that the Model T replaced horses. But we don’t need everyone - to ride an e-bike to work to make a big dent in our carbon-pollution - problem. [62]A recent study found that if 5 percent of commuters were - to switch to e-bikes as their mode of transportation, emissions would - fall by 4 percent. As an individual, you don’t even need to sell your - car to reduce your carbon footprint significantly. In 2021, half of all - trips in the United States were less than three miles, according to - [63]the Bureau of Transportation Statistics. Making those short trips - on an e-bike instead of in a car would likely save people money, cut - 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 [78]are now subsidizing them. In May, I asked Will +Toor, the executive director of the Colorado Energy Office, to explain the +state’s rationale for [79]a newly passed incentive that offers residents $450 +to get an e-bike. He dutifully ticked through the environmental benefits and +potential cost savings for low-income people. Then he surprised me: The +legislation, he added, was also about “putting more joy into the world.” - E-bikes are such a no-brainer for individuals, and for the collective, - that state and local governments [64]are now subsidizing them. In May, - I asked Will Toor, the executive director of the Colorado Energy - Office, to explain the state’s rationale for [65]a newly passed - incentive that offers residents $450 to get an e-bike. He dutifully - ticked through the environmental benefits and potential cost savings - for low-income people. Then he surprised me: The legislation, he added, - was also about “putting more joy into the world.” +This story is part of the Atlantic Planet series supported by HHMI’s Science +and Educational Media Group. - This story is part of the Atlantic Planet series supported by HHMI’s - Science and Educational Media Group. -References +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/ - - 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/ diff --git a/static/archive/www-theverge-com-mjsr9z.txt b/static/archive/www-theverge-com-mjsr9z.txt index 09946bf..6939343 100644 --- a/static/archive/www-theverge-com-mjsr9z.txt +++ b/static/archive/www-theverge-com-mjsr9z.txt @@ -1,476 +1,463 @@ - #[1]The Verge +[1]Skip to main content +[2]The Verge logo.[3]The Verge homepage - [2]Skip to main content - The Verge logo.[3]The Verge homepage + • [4]The Verge homepageThe Verge logo./ + • [5]Tech/ + • [6]Reviews/ + • [7]Science/ + • [8]Entertainment/ + • MoreMenu - * [4]The Verge homepageThe Verge logo./ - * [5]Tech/ - * [6]Reviews/ - * [7]Science/ - * [8]Entertainment/ - * (BUTTON) MoreMenuExpand +[10]The Verge logo. +Menu - The Verge logo. - (BUTTON) MenuExpand - - * [9]Platformer/ - * [10]Apps/ - * [11]Tech + • [12]Platformer/ + • [13]Apps/ + • [14]Tech Why note-taking apps don’t make us smarter Why note-taking apps don’t make us smarter - / +/ They’re designed for storage, not sparking insights. Can AI change that? - By [12]Casey Newton, a contributing editor who has been writing about - tech for over 10 years. He founded Platformer, a newsletter about Big - Tech and democracy. - Aug 25, 2023, 2:30 PM UTC| (BUTTON) Comments +By [15]Casey Newton, a contributing editor who has been writing about tech for +over 10 years. He founded Platformer, a newsletter about Big Tech and +democracy. + +Aug 25, 2023, 2:30 PM UTC| Share this story - * (BUTTON) - * (BUTTON) - * (BUTTON) - - Screenshots of the note-taking app Obsidian. - Screenshots of the note-taking app Obsidian. Image: Obsidian - - This is Platformer, a newsletter on the intersection of Silicon Valley - and democracy from Casey Newton and Zoë Schiffer. [13]Sign up here. - __________________________________________________________________ - - Today let’s step outside the news cycle and turn our attention toward a - topic I’m deeply invested in but only rarely write about: productivity - platforms. For decades now, software tools have promised to make - working life easier. But on one critical dimension — their ability to - improve our thinking — they don’t seem to be making much progress at - all. - - Meanwhile, the arrival of generative artificial intelligence could make - the tools we use more powerful than ever — or they could turn out to be - just another mirage. - - To understand where things went wrong, I want to focus on the humble - note-taking app: the place where, for so many of us, thinking begins. - - I. - - Earlier this week I read a story about farmers. “America’s Farmers Are - Bogged Down by Data,” read the headline on [14]Belle Lin’s story in the - Wall Street Journal. I thought to myself: You and me both, farmer! And - I read the piece. - - Over the past decade, farmers have been offered all manner of software - tools to analyze and manage their crops. In general, though, the more - software that farmers use, the more they find themselves overwhelmed by - data that the tools collect. “We’re collecting so much data that you’re - almost paralyzed with having to analyze it all,” one farmer told the - Journal. - - As a journalist, I’ve never collected as much data as I do now. The - collapse of Twitter has me browsing four or five text-based social - feeds a day, scanning for news and thoughtful conversation. The growing - popularity of arXiv and pre-prints in general has left me with a stack - of research that I will never get through. Book galleys pile up in my - house. - 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. - - 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. - - 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. - - 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 second is known to note-taking nerds as “[17]bidirectional - linking.” Standard links, like the ones you find on the web, go in only - one direction — from one page to another. In a note-taking app, - bidirectional links join two pages together. This effectively lets you - add backlinks to any concept — a company that’s important to you, say, - or a concept that’s on your mind — and then let you browse everything - you’ve collected related to that concept at your leisure. - A graphic from Roam illustrating bidirectional linking. A graphic from - Roam illustrating bidirectional linking. - A graphic from Roam illustrating bidirectional linking. A graphic from - Roam illustrating bidirectional linking. - A graphic from Roam illustrating bidirectional linking. Image: Roam - - On one level, that’s not so different from adding tags to notes. But - tags are more about search. Bidirectional links, which some apps show - you on pages that include snippets of all the other notes that contain - the same link, are more about browsing and rediscovery. - - 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. - - And waited. And waited. - - Note-taking apps are up against a much stronger foe - - My gusto for concept-based, link-heavy note-taking diminished. Roam’s - development slowed to a crawl, and I spent a season with the - lightweight, mostly free alternative known as [18]Obsidian. Obsidian’s - brutalist design wore on me, though, and eventually I decamped for the - more polished user interface of [19]Mem. (These apps all enable the - exporting of your notes in Markdown, making switching relatively - painless.) - - 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. - - III. - - One interpretation of these events is that the software failed: that - journaling and souped-up links simply don’t have the power some of us - once hoped they did. - - 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. - - Ezra Klein wrote beautifully about this situation this week [20]in the - New York Times: - - Gloria Mark, a professor of information science at the University of - California, Irvine, and the author of “[21]Attention Span,” started - researching the way people used computers in 2004. The average time - people spent on a single screen was 2.5 minutes. “I was astounded,” - she told me. “That was so much worse than I’d thought it would be.” - But that was just the beginning. By 2012, Mark and her colleagues - found the average time on a single task was 75 seconds. Now it’s - down to about 47. - - This is an acid bath for human cognition. Multitasking is mostly a - myth. We can focus on one thing at a time. “It’s like we have an - internal whiteboard in our minds,” Mark said. “If I’m working on one - task, I have all the info I need on that mental whiteboard. Then I - switch to email. I have to mentally erase that whiteboard and write - all the information I need to do email. And just like on a real - whiteboard, there can be a residue in our minds. We may still be - thinking of something from three tasks ago.” - - My first thought upon reading this was that it seems rare for me to - spend even 47 seconds looking at one screen on my computer without at - least glancing at another. (I bought a 38-inch widescreen monitor for - the express purpose of being able to glance at many windows - simultaneously. At the time I understood this as a tool for enhancing - my productivity.) - - My second thought is that if you want to take good notes, you have to - first extract your mind from the acid bath. - - IV. - - Klein’s piece starts from the observation that productivity growth is - now about half of what it was in the 1950s and ‘60s. The internet’s - arrival briefly speeded it up, he writes, but the more we stared at our - screens the slower our productivity improved. He worries that AI will - have a similar effect on the economy — promising to make us more - productive, while simultaneously inventing so many new distractions and - entertainments that they overwhelm and paralyze us. - - The piece stuck with me, because there is one specific way I am - counting on AI to make me more productive. It goes back to that - database of links I’ve been building in Notion, and the insights I was - hoping to get out of Roam. - Saving an article in Mem. Saving an article in Mem. - Saving an article in Mem. Saving an article in Mem. - Saving an article in Mem. Image: Mem - - Earlier this year, like many productivity tools, Notion added a handful - of AI features. I use two of them in my links database. One extracts - the names of any companies mentioned in an article, creating a kind of - automatic tagging system. The other provides a two- or three-sentence - summary of the article I’m saving. - - Neither of these, in practice, is particularly useful. Tags might - theoretically be useful for revisiting old material, but databases are - not designed to be browsed. And while we publish summaries of news - articles in each edition of Platformer, we wouldn’t use AI-written - summaries: among other reasons, they often miss important details and - context. - - At the same time, the database contains nearly three years of links to - every subject I cover here, along with the complete text of thousands - of articles. It is here, and not in a note-taking app, that knowledge - of my beat has been accreting over the past few years. If only I could - access that knowledge in some way that went beyond my memory. - - It’s here that AI should be able to help. Within some reasonable period - of time, I expect that I will be able to talk to my Notion database as - if it’s ChatGPT. If I could, I imagine I would talk to it all the time. - - Much of journalism simply involves remembering relevant events from the - past. An AI-powered link database has a perfect memory; all it’s - missing is a usable chat interface. If it had one, it might be a - perfect research assistant. - - Today’s chatbots can’t do any of this to a reporter’s standard - - I imagine using it to generate little briefing documents to help me - when I return to a subject after some time away. Catch me up on - Canada’s fight with Meta over news, I might say. Make me a timeline of - events at Twitter since Elon Musk bought it. Show me coverage of - deepfakes over the past three months. - - Today’s chatbots can’t do any of this to a reporter’s standard. The - training data often stops in 2021, for one thing. The bots continue to - make stuff up, and struggle to cite their sources. - - But if I could chat in natural language with a massive archive, built - from hand-picked trustworthy sources? That seems powerful to me, at - least in the abstract. - - Of course, the output from this kind of AI tool has to be trustworthy. - A significant problem with using AI tools to summarize things is that - you can’t trust the summary unless you read all the relevant documents - yourself — defeating the point of asking for a summary in the first - place. - - Still, if you are the sort of productivity-tool optimist who will try - any to-do list or calendar app on the off chance it makes you even a - little happier at work, it seems to me that a database you can talk to - might be the next-generation note-taking tool we have been waiting for. - - V. - - I’ve learned something else about note-taking apps, though, since my - mania for them began in 2020. - - In short: it is probably a mistake, in the end, to ask software to - improve our thinking. Even if you can rescue your attention from the - acid bath of the internet; even if you can gather the most interesting - data and observations into the app of your choosing; even if you - revisit that data from time to time — this will not be enough. It might - not even be worth trying. - - I’ll admit to having forgotten those questions over the past couple - years - - The reason, sadly, is that thinking takes place in your brain. And - thinking is an active pursuit — one that often happens when you are - spending long stretches of time staring into space, then writing a bit, - and then staring into space a bit more. It’s here here that the - connections are made and the insights are formed. And it is a process - that stubbornly resists automation. - - Which is not to say that software can’t help. Andy Matuschak, a - researcher whose [22]spectacular website offers a feast of thinking - about notes and note-taking, observes [23]that note-taking apps - emphasize displaying and manipulating notes, but never making sense - between them. Before I totally resign myself to the idea that a - note-taking app can’t solve my problems, I will admit that on some - fundamental level no one has really tried. - - “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?’” - - I’ll admit to having forgotten those questions over the past couple - years as I kept filling up documents with transient strings of text - inside expensive software. And I accept that to be a better thinker, - I’ll have to devote more time and attention to wrestling with what I - find. - - If there’s a friendly AI to help me do that, though, I’ll be first in - line to try it. - - IFRAME: [25]https://www.platformer.news/embed - - (BUTTON) Comments - Most Popular - 1. [26] - -Apple Vision Pro hands-on, again, for the first time - ______________________________________________________________ - - 2. [27] + • + • + • + +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. [20]Sign up here. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Today let’s step outside the news cycle and turn our attention toward a topic +I’m deeply invested in but only rarely write about: productivity platforms. For +decades now, software tools have promised to make working life easier. But on +one critical dimension — their ability to improve our thinking — they don’t +seem to be making much progress at all. -Google layoffs continue with ‘hundreds’ from sales team - ______________________________________________________________ +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. - 3. [28] +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. -Microsoft’s new Copilot Pro brings AI-powered Office features to the rest of -us - ______________________________________________________________ +I. - 4. [29] +Earlier this week I read a story about farmers. “America’s Farmers Are Bogged +Down by Data,” read the headline on [21]Belle Lin’s story in the Wall Street +Journal. I thought to myself: You and me both, farmer! And I read the piece. -Google’s latest layoffs are just the beginning - ______________________________________________________________ +Over the past decade, farmers have been offered all manner of software tools to +analyze and manage their crops. In general, though, the more software that +farmers use, the more they find themselves overwhelmed by data that the tools +collect. “We’re collecting so much data that you’re almost paralyzed with +having to analyze it all,” one farmer told the Journal. + +As a journalist, I’ve never collected as much data as I do now. The collapse of +Twitter has me browsing four or five text-based social feeds a day, scanning +for news and thoughtful conversation. The growing popularity of arXiv and +pre-prints in general has left me with a stack of research that I will never +get through. Book galleys pile up in my house. + +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. + +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. + +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. + +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 “[24]bidirectional linking.” +Standard links, like the ones you find on the web, go in only one direction — +from one page to another. In a note-taking app, bidirectional links join two +pages together. This effectively lets you add backlinks to any concept — a +company that’s important to you, say, or a concept that’s on your mind — and +then let you browse everything you’ve collected related to that concept at your +leisure. + +A graphic from Roam illustrating bidirectional linking.A graphic from Roam +illustrating bidirectional linking. +A graphic from Roam illustrating bidirectional linking.A graphic from Roam +illustrating bidirectional linking. +A graphic from Roam illustrating bidirectional linking. Image: Roam + +On one level, that’s not so different from adding tags to notes. But tags are +more about search. Bidirectional links, which some apps show you on pages that +include snippets of all the other notes that contain the same link, are more +about browsing and rediscovery. + +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. + +And waited. And waited. + +Note-taking apps are up against a much stronger foe + +My gusto for concept-based, link-heavy note-taking diminished. Roam’s +development slowed to a crawl, and I spent a season with the lightweight, +mostly free alternative known as [25]Obsidian. Obsidian’s brutalist design wore +on me, though, and eventually I decamped for the more polished user interface +of [26]Mem. (These apps all enable the exporting of your notes in Markdown, +making switching relatively painless.) + +I continue to journal most days, and occasionally find myself working to refine +one concept or another among those notes. + +But the original promise of Roam — that it would improve my thinking by helping +me to build a knowledge base and discover new ideas — fizzled completely. + +III. + +One interpretation of these events is that the software failed: that journaling +and souped-up links simply don’t have the power some of us once hoped they did. + +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. + +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 “[28]Attention Span,” started + researching the way people used computers in 2004. The average time people + spent on a single screen was 2.5 minutes. “I was astounded,” she told me. + “That was so much worse than I’d thought it would be.” But that was just + the beginning. By 2012, Mark and her colleagues found the average time on a + single task was 75 seconds. Now it’s down to about 47. + + This is an acid bath for human cognition. Multitasking is mostly a myth. We + can focus on one thing at a time. “It’s like we have an internal whiteboard + in our minds,” Mark said. “If I’m working on one task, I have all the info + I need on that mental whiteboard. Then I switch to email. I have to + mentally erase that whiteboard and write all the information I need to do + email. And just like on a real whiteboard, there can be a residue in our + minds. We may still be thinking of something from three tasks ago.” + +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. + +IV. + +Klein’s piece starts from the observation that productivity growth is now about +half of what it was in the 1950s and ‘60s. The internet’s arrival briefly +speeded it up, he writes, but the more we stared at our screens the slower our +productivity improved. He worries that AI will have a similar effect on the +economy — promising to make us more productive, while simultaneously inventing +so many new distractions and entertainments that they overwhelm and paralyze +us. + +The piece stuck with me, because there is one specific way I am counting on AI +to make me more productive. It goes back to that database of links I’ve been +building in Notion, and the insights I was hoping to get out of Roam. + +Saving an article in Mem.Saving an article in Mem. +Saving an article in Mem.Saving an article in Mem. +Saving an article in Mem. Image: Mem + +Earlier this year, like many productivity tools, Notion added a handful of AI +features. I use two of them in my links database. One extracts the names of any +companies mentioned in an article, creating a kind of automatic tagging system. +The other provides a two- or three-sentence summary of the article I’m saving. + +Neither of these, in practice, is particularly useful. Tags might theoretically +be useful for revisiting old material, but databases are not designed to be +browsed. And while we publish summaries of news articles in each edition of +Platformer, we wouldn’t use AI-written summaries: among other reasons, they +often miss important details and context. - 5. [30] +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. -Apple Watch drops blood oxygen features to dodge the import ban - ______________________________________________________________ +It’s here that AI should be able to help. Within some reasonable period of +time, I expect that I will be able to talk to my Notion database as if it’s +ChatGPT. If I could, I imagine I would talk to it all the time. + +Much of journalism simply involves remembering relevant events from the past. +An AI-powered link database has a perfect memory; all it’s missing is a usable +chat interface. If it had one, it might be a perfect research assistant. + +Today’s chatbots can’t do any of this to a reporter’s standard + +I imagine using it to generate little briefing documents to help me when I +return to a subject after some time away. Catch me up on Canada’s fight with +Meta over news, I might say. Make me a timeline of events at Twitter since Elon +Musk bought it. Show me coverage of deepfakes over the past three months. + +Today’s chatbots can’t do any of this to a reporter’s standard. The training +data often stops in 2021, for one thing. The bots continue to make stuff up, +and struggle to cite their sources. + +But if I could chat in natural language with a massive archive, built from +hand-picked trustworthy sources? That seems powerful to me, at least in the +abstract. + +Of course, the output from this kind of AI tool has to be trustworthy. A +significant problem with using AI tools to summarize things is that you can’t +trust the summary unless you read all the relevant documents yourself — +defeating the point of asking for a summary in the first place. + +Still, if you are the sort of productivity-tool optimist who will try any to-do +list or calendar app on the off chance it makes you even a little happier at +work, it seems to me that a database you can talk to might be the +next-generation note-taking tool we have been waiting for. + +V. + +I’ve learned something else about note-taking apps, though, since my mania for +them began in 2020. + +In short: it is probably a mistake, in the end, to ask software to improve our +thinking. Even if you can rescue your attention from the acid bath of the +internet; even if you can gather the most interesting data and observations +into the app of your choosing; even if you revisit that data from time to time +— this will not be enough. It might not even be worth trying. + +I’ll admit to having forgotten those questions over the past couple years + +The reason, sadly, is that thinking takes place in your brain. And thinking is +an active pursuit — one that often happens when you are spending long stretches +of time staring into space, then writing a bit, and then staring into space a +bit more. It’s here here that the connections are made and the insights are +formed. And it is a process that stubbornly resists automation. + +Which is not to say that software can’t help. Andy Matuschak, a researcher +whose [29]spectacular website offers a feast of thinking about notes and +note-taking, observes [30]that note-taking apps emphasize displaying and +manipulating notes, but never making sense between them. Before I totally +resign myself to the idea that a note-taking app can’t solve my problems, I +will admit that on some fundamental level no one has really tried. + +“The goal is not to take notes — the goal is to think effectively,” [31] +Matuschak writes. “Better questions are ‘what practices can help me reliably +develop insights over time?’ [and] ‘how can I shepherd my attention +effectively?’” + +I’ll admit to having forgotten those questions over the past couple years as I +kept filling up documents with transient strings of text inside expensive +software. And I accept that to be a better thinker, I’ll have to devote more +time and attention to wrestling with what I find. + +If there’s a friendly AI to help me do that, though, I’ll be first in line to +try it. + +Most Popular + + 1. [33] + + Apple Vision Pro hands-on, again, for the first time + + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 2. [34] + + Google layoffs continue with ‘hundreds’ from sales team + + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 3. [35] + + The AI phones are coming + + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 4. [36] + + Google quietly updates Chrome’s incognito warning in wake of tracking + lawsuit + + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 5. [37] + + 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 +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 - 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. - From our sponsor +[44] - Advertiser Content From Sponsor logo - Sponsor thumbnail +[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 + + • WhatsApp logo on a green, black, and white backgroundWhatsApp logo on a + green, black, and white background + + [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 + + • [67]Advertise with us + • [68]Jobs @ Vox Media + +© 2024 [69]Vox Media, LLC. All Rights Reserved - 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 +References: - * [48]Contact - * [49]Tip Us - * [50]Community Guidelines - * [51]About - * [52]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 - -References - - 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/ +[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/ diff --git a/static/archive/www-valetmag-com-b1tpcf.txt b/static/archive/www-valetmag-com-b1tpcf.txt index 13480b8..2bde3c2 100644 --- a/static/archive/www-valetmag-com-b1tpcf.txt +++ b/static/archive/www-valetmag-com-b1tpcf.txt @@ -1,535 +1,586 @@ - [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 + • [24]The Latest + • [25]Style + • [26]Living + • [27]Health & Fitness + • [28]Grooming + • [29]Personal Shopper + • [30]The Handbook - (BUTTON) ⨯ - Search ... ____________________ +⨯ +Search ... [35][ ] +Hit enter to search or ESC to close - Hit enter to search or ESC to close +[36]31 Days -[28]31 Days - - Day 9 +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 - learning, memory and emotion regulation. +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. - « - The Win-Win Kitchen Swap +[48] - Day 8 +« - The Win-Win Kitchen Swap - Be Your Own Style God +Day 8 - Day 10 +The Win-Win Kitchen Swap - Be Your Own Style God +[49] - » +Day 10 -[37]31 Days +Be Your Own Style God - Volume 12 / Year 2020 - * - * - * - * [38]Boost Your Coffee - 1 +» -Boost -Your Coffee - * [39]The Trick to Achieving Your Goals - 2 +[50]31 Days -The Trick to -Achieving Your Goals - * [40]Don't Forget the Dry Cleaner - 3 +Volume 12 / Year 2020 -Don't Forget -the Dry Cleaner - * [41]Stay Hydrated - 4 + • + • + • + • [51] Boost Your Coffee -Stay -Hydrated - * [42]Save More Money - 5 + 1 -Save -More Money - * [43]Prioritize Relaxation - 6 + Boost + Your Coffee -Prioritize -Relaxation - * [44]Get the Most From Your Cast Iron - 7 + • [52] The Trick to Achieving Your Goals -Get the Most From -Your Cast Iron - * [45]Use Less Paper Towels - 8 + 2 -Use Less -Paper Towels - * [46]You Can Slow Down Time - 9 + The Trick to + Achieving Your Goals -You Can -Slow Down Time - * [47]Be Your Own Style God - 10 + • [53] Don't Forget the Dry Cleaner -Be Your Own -Style God - * [48]How to Deal With Failure - 11 + 3 -How to Deal -With Failure - * [49]Stop Sitting So Much - 12 + Don't Forget + the Dry Cleaner -Stop Sitting -So Much - * [50]Dress for Productivity - 13 + • [54] Stay Hydrated -Dress for -Productivity - * [51]Improve Your Gut Health - 14 + 4 -Improve Your -Gut Health - * [52]Become an Early Riser - 15 + Stay + Hydrated -Become an -Early Riser - * [53]Boost Your Credit Score - 16 + • [55] Save More Money -Boost Your -Credit Score - * [54]How to Read a Whiskey Label - 17 + 5 -How to Read -a Whiskey Label - * [55]Go Solo - 18 + Save + More Money -Go -Solo - * [56]Clean Your Jewelry and Watches - 19 + • [56] Prioritize Relaxation -Clean Your Jewelry -and Watches - * [57]Boost Your Testosterone - 20 + 6 -Boost Your -Testosterone - * [58]Swear at Work - 21 + Prioritize + Relaxation -Swear -at Work - * [59]Look Younger - 22 + • [57] Get the Most From Your Cast Iron -Look -Younger - * [60]Boost Your Creativity - 23 + 7 -Boost Your -Creativity - * [61]Worry Away - 24 + Get the Most From + Your Cast Iron -Worry -Away - * [62]Make Better Conversation - 25 + • [58] Use Less Paper Towels -Make Better -Conversation - * [63]Overcome Imposter Syndrome - 26 + 8 -Overcome -Imposter Syndrome - * [64]How to Stay Focused at Work - 27 + Use Less + Paper Towels -How to Stay -Focused at Work - * [65]Save Your Face - 28 + • [59] You Can Slow Down Time -Save -Your Face - * [66]Trust Your Gut - 29 + 9 -Trust -Your Gut - * [67]Optimize Your Breath - 30 + You Can + Slow Down Time -Optimize -Your Breath - * [68]Sharpen Your Knives - 31 + • [60] Be Your Own Style God -Sharpen -Your Knives + 10 - [69]See all “31 Days” features » + Be Your Own + Style God - Advertisement + • [61] How to Deal With Failure - [70]Valet. homepage + 11 - Your concierge to a well-styled life. + How to Deal + With Failure - Established in 2008 + • [62] Stop Sitting So Much - Made in California - * [71]Facebook - * [72]Twitter - * [73]Instagram - * [74]Valet. App - * [75]RSS + 12 - * [76]Style - * [77]Trends - * [78]Products - * [79]Profiles & Features - * [80]How Tos + Stop Sitting + So Much - * [81]Living - * [82]Interiors - * [83]Gear - * [84]Food & Drink - * [85]Travel - * [86]Sex & Relationships - * [87]Culture - * [88]Money - * [89]Career - * [90]Features + • [63] Dress for Productivity - * [91]Grooming - * [92]Skin Care - * [93]Hair Care - * [94]Shaving - * [95]Fragrances - * [96]Profiles & Features - * [97]How Tos - * [98]My Morning Routine + 13 - * [99]Health & Fitness - * [100]Diet & Nutrition - * [101]Fitness - * [102]Strength Training - * [103]Features - * [104]The Inside Man + Dress for + Productivity - * [105]Personal Shopper - * [106]Sales & Deals - * [107]Seasonal Calendar + • [64] Improve Your Gut Health - * [108]The - Handbook - * [109]Style - * [110]Grooming - * [111]Living - * [112]31 Days Series + 14 - Subscribe to Valet. + Improve Your + Gut Health - Smart reads, expert tips, exclusive sale alerts and more. You won't be - disappointed. + • [65] Become an Early Riser - Enter Your Email Address ... - ____________________ - [X] - The - Obtainer - [X] - The Daily Valet. - [ ] - Daily - Digest - [ ] - Weekly - Digest - ____________________ + 15 - Sign Up - Subscribe + Become an + Early Riser - [113]About Valet. | [114]Advertising on Valet. + • [66] Boost Your Credit Score - © Copyright 2024 Valet Media LLC - All Rights - Reserved. | [115]Privacy Policy | [116]Terms & Conditions - [tr?id=130137150768080&ev=PageView&noscript=1] + 16 -References + Boost Your + Credit Score - 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 + • [67] How to Read a Whiskey Label - 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 + 17 + + How to Read + a Whiskey Label + + • [68] Go Solo + + 18 + + Go + Solo + + • [69] Clean Your Jewelry and Watches + + 19 + + Clean Your Jewelry + and Watches + + • [70] Boost Your Testosterone + + 20 + + Boost Your + Testosterone + + • [71] Swear at Work + + 21 + + Swear + at Work + + • [72] Look Younger + + 22 + + Look + Younger + + • [73] Boost Your Creativity + + 23 + + Boost Your + Creativity + + • [74] Worry Away + + 24 + + Worry + Away + + • [75] Make Better Conversation + + 25 + + Make Better + Conversation + + • [76] Overcome Imposter Syndrome + + 26 + + Overcome + Imposter Syndrome + + • [77] How to Stay Focused at Work + + 27 + + How to Stay + Focused at Work + + • [78] Save Your Face + + 28 + + Save + Your Face + + • [79] Trust Your Gut + + 29 + + Trust + Your Gut + + • [80] Optimize Your Breath + + 30 + + Optimize + Your Breath + + • [81] Sharpen Your Knives + + 31 + + Sharpen + Your Knives + +[82]See all “31 Days” features » + +Advertisement + +[83] + +Your concierge to a well-styled life. + +Established in 2008 + +Made in California + + • [84]Facebook + • [85]Twitter + • [86]Instagram + • [87]Valet. App + • [88]RSS + + • [89]Style + • [90]Trends + • [91]Products + • [92]Profiles & Features + • [93]How Tos + + • [94]Living + • [95]Interiors + • [96]Gear + • [97]Food & Drink + • [98]Travel + • [99]Sex & Relationships + • [100]Culture + • [101]Money + • [102]Career + • [103]Features + + • [104]Grooming + • [105]Skin Care + • [106]Hair Care + • [107]Shaving + • [108]Fragrances + • [109]Profiles & Features + • [110]How Tos + • [111]My Morning Routine + + • [112]Health & Fitness + • [113]Diet & Nutrition + • [114]Fitness + • [115]Strength Training + • [116]Features + • [117]The Inside Man + + • [118]Personal Shopper + • [119]Sales & Deals + • [120]Seasonal Calendar + + • [121]The + Handbook + • [122]Style + • [123]Grooming + • [124]Living + • [125]31 Days Series + +Subscribe to Valet. + +Smart reads, expert tips, exclusive sale alerts and more. You won't be +disappointed. + +Enter Your Email Address ... + +[126][ ] +[127][*] +The +Obtainer +[128][*] +The Daily Valet. +[129][ ] +Daily +Digest +[130][ ] +Weekly +Digest +[131][ ] + +Sign Up + +[132][Subscribe] +[134]About Valet. | [135]Advertising on Valet. + +© Copyright 2024 Valet Media LLC - All Rights Reserved. | [136]Privacy Policy + | [137]Terms & Conditions + +* + +References: + +[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 diff --git a/static/archive/www-viget-com-97ckk4.txt b/static/archive/www-viget-com-97ckk4.txt index 5b46365..99b106b 100644 --- a/static/archive/www-viget-com-97ckk4.txt +++ b/static/archive/www-viget-com-97ckk4.txt @@ -1,365 +1,379 @@ - #[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 - We’re a full-service digital agency that’s been helping clients make - lasting change since 1999. - [14]Contact Us + • Practice + • [11] Work + • [12] Services + • [13] Articles + +We’re a full-service digital agency that’s been helping clients make lasting +change since 1999. + +[14] Contact Us People - * [15]Company - * [16]Careers - * [17]Code of Ethics - * [18]Diversity & Inclusion + • [15]Company + • [16]Careers + • [17]Code of Ethics + • [18]Diversity & Inclusion More - * [19]Pointless Corp. - * [20]Explorations - * [21]Code at Viget + • [19]Pointless Corp. + • [20]Explorations + • [21]Code at Viget Featured - Read the Article: Revolutionizing the Web +[22] +Read the Article: Revolutionizing the Web - Newsletter +Newsletter Revolutionizing the Web - Read the Article: The Reflection Before Christmas +[23] +Read the Article: The Reflection Before Christmas - Article +Article 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 +Posted on March 24, 2023 - Pointless Corp. is the innovation lab at Viget, where we step away from - client work to make fun and useful things for everyone + • [28] + Share + • [29] + Share + • [30] + Post - P o i n t l e s s C o r p . i s t h e i n n o v a t i o n l a b a t V i - g e t , w h e r e w e s t e p a w a y f r o m c l i e n t w o r k t o m - a k e f u n a n d u s e f u l t h i n g s f o r e v e r y o n e +Pointless Corp. is the innovation lab at Viget, where we step away from client +work to make fun and useful things for everyone - “Neither pointless, nor a corporation” is how we describe Pointless - Corp. here at Viget. We founded Viget – an actual company – in 1999 - during the original dot com bubble to build web products for clients. - Serving clients has always been our purpose or … point, if you will. - Over the decades, we’ve done just that, completing thousands of - projects for hundreds of clients. Never forgetting that we exist to - serve our clients has been key in our longevity. +P o i n t l e s s C o r p . i s t h e i n n o v a t i o n l a b a t V i g e t , +w h e r e w e s t e p a w a y f r o m c l i e n t w o r k t o m a k e f u n a n +d u s e f u l t h i n g s f o r e v e r y o n e - About a decade in, we felt the urge to build and launch our own - projects. [26]Pointless Corp. became the internal [27]brand we adopted - to remind ourselves that these projects can be fun and useful but don’t - replace the primary point of Viget. A line from Harry Nilsson’s The - Point! referencing the Pointless Man serves as inspiration: “a point in - every direction is the same as no point at all.” We wanted the freedom - to experiment in every direction. +“Neither pointless, nor a corporation” is how we describe Pointless Corp. here +at Viget. We founded Viget – an actual company – in 1999 during the original +dot com bubble to build web products for clients. Serving clients has always +been our purpose or … point, if you will. Over the decades, we’ve done just +that, completing thousands of projects for hundreds of clients. Never +forgetting that we exist to serve our clients has been key in our longevity. - So we did. Ideas and teams formed fairly randomly, and Pointless - Projects began to fill the gaps between our client work. Projects like - [28]HeyCraig (2009), which sent you an email alert based on your - Craigslist search (before Craigslist shut us down and added the - feature). Or [29]Tincan’d (2011), a simple video call platform before - Zoom or Google Meet. Or [30]BabyBookie, the baby due date office pool - app over 500,000 people have used since launch in 2012. +About a decade in, we felt the urge to build and launch our own projects. [31] +Pointless Corp. became the internal [32]brand we adopted to remind ourselves +that these projects can be fun and useful but don’t replace the primary point +of Viget. A line from Harry Nilsson’s The Point! referencing the Pointless Man +serves as inspiration: “a point in every direction is the same as no point at +all.” We wanted the freedom to experiment in every direction. - These projects allow our teams to work without the input (including, - ahem, revenue) of clients, so we’re more free to experiment, wear - different hats, and learn … a lot. We apply what we learn back into our - client work. Along the way, we get to know each other better, scratch - our entrepreneurial itches, and hopefully put some fun and/or useful - things out in the world for others to enjoy. +So we did. Ideas and teams formed fairly randomly, and Pointless Projects began +to fill the gaps between our client work. Projects like [33]HeyCraig (2009), +which sent you an email alert based on your Craigslist search (before +Craigslist shut us down and added the feature). Or [34]Tincan’d (2011), a +simple video call platform before Zoom or Google Meet. Or [35]BabyBookie, the +baby due date office pool app over 500,000 people have used since launch in +2012. - For many years, we organized an annual optional Pointless Weekend. We’d - kick off hackathon-style on a Thursday evening and wrap on a Saturday - evening with a functional product out in the wild, as I described - [31]back in 2012. It’s [32]always been an intense, enjoyable, but - rather exhausting 48 hours. Photos from [33]2011, [34]2014, and - [35]2016 bring back some great memories. - Pointless Weekend 2014 spanned three Viget offices +These projects allow our teams to work without the input (including, ahem, +revenue) of clients, so we’re more free to experiment, wear different hats, and +learn … a lot. We apply what we learn back into our client work. Along the way, +we get to know each other better, scratch our entrepreneurial itches, and +hopefully put some fun and/or useful things out in the world for others to +enjoy. - 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. +For many years, we organized an annual optional Pointless Weekend. We’d kick +off hackathon-style on a Thursday evening and wrap on a Saturday evening with a +functional product out in the wild, as I described [36]back in 2012. It’s [37] +always been an intense, enjoyable, but rather exhausting 48 hours. Photos from +[38]2011, [39]2014, and [40]2016 bring back some great memories. - New for 2023: Pointless Palooza +[pointless-old] +Pointless Weekend 2014 spanned three Viget offices - Two things I like: alliteration and lollapalooza (specifically circa - 1992, but that’s a story for another day). So Pointless Palooza was an - obvious choice for what to call our little two day adventure. In - addition to a new name, we’re trying a few other changes this year: +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. - Pointless Executives. Nothing injects new energy like new leadership. - We handed over the Pointless reins to two trusty execs: [36]Andrew (day - job: developer) is our Pointless CEO and [37]Aimee (day job: project - manager) is our Pointless COO. They’ve done a phenomenal job setting a - vision, planning, and leading the activities. Their enthusiasm helped - inspire more than half the company to participate with a record number - of projects and great results. +New for 2023: Pointless Palooza - Pitching & Team Formation. Previously, project ideas were “pitched” - with a single slide and a tight 1-2 minute segment at a staff meeting. - These were fun and lighthearted, but didn’t always capture the full - vision, and teams often formed and morphed during the kickoff night. - This year, project ideas were shared more gradually via collaboration - in Slack and Notion. Project teams formed with more structure in - advance, and team members had some time before the kickoff to marinate - on the idea and get excited to build. +Two things I like: alliteration and lollapalooza (specifically circa 1992, but +that’s a story for another day). So Pointless Palooza was an obvious choice for +what to call our little two day adventure. In addition to a new name, we’re +trying a few other changes this year: - Even More Remote Friendly. There’s something magical about - kickoff-pizza, launch day donuts, and [38]in-person collaboration. But - there’s something even more magical about collaborating with dozens of - teammates around the country (especially when it’s supplemented by - [39]sweet swag boxes and Divvy credits for remote treats). Hybrid teams - work. We still had fun in-office connections, but most of our Pointless - Projects this year are being worked on with distributed teams, much - like our client work. - Pointless Branded Stuff 2023 including a t-shirt and sticker pack -- - very corporate +Pointless Executives. Nothing injects new energy like new leadership. We handed +over the Pointless reins to two trusty execs: [41]Andrew (day job: developer) +is our Pointless CEO and [42]Aimee (day job: project manager) is our Pointless +COO. They’ve done a phenomenal job setting a vision, planning, and leading the +activities. Their enthusiasm helped inspire more than half the company to +participate with a record number of projects and great results. - Some things haven’t changed from prior years. Team members are still - swapping roles – PMs writing code, designers running projects, the list - goes on – which means steep and rapid [40]learning curves. We’re still - trying out new technologies and approaches to our work, which means - unexpected blockers and great insights to share. New connections are - being formed, especially since more than half of this year’s - participants are in their first year at Viget and experiencing their - first Pointless event. Forming authentic co-worker connections isn’t - easy, and our culture is stronger today than it was at the start of the - week. +Pitching & Team Formation. Previously, project ideas were “pitched” with a +single slide and a tight 1-2 minute segment at a staff meeting. These were fun +and lighthearted, but didn’t always capture the full vision, and teams often +formed and morphed during the kickoff night. This year, project ideas were +shared more gradually via collaboration in Slack and Notion. Project teams +formed with more structure in advance, and team members had some time before +the kickoff to marinate on the idea and get excited to build. - So what projects will launch? I won’t steal their thunder, but we just - wrapped the presentation portion of six Pointless Project teams at our - weekly staff meeting and it was the most we’ve laughed, cheered, and - been inspired in a long time. I expect articles will be written and - shared in the days and weeks ahead outlining the thrills (and mishaps) - of the teams this year. - Pointless Palooza 2023 was a blast! +Even More Remote Friendly. There’s something magical about kickoff-pizza, +launch day donuts, and [43]in-person collaboration. But there’s something even +more magical about collaborating with dozens of teammates around the country +(especially when it’s supplemented by [44]sweet swag boxes and Divvy credits +for remote treats). Hybrid teams work. We still had fun in-office connections, +but most of our Pointless Projects this year are being worked on with +distributed teams, much like our client work. - 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. +[23-pointless] +Pointless Branded Stuff 2023 including a t-shirt and sticker pack -- very +corporate - If this is the kind of work and culture you might enjoy, learn more - about [41]our culture and job openings – perhaps you’ll be able to join - next year’s Pointless Palooza. After all, inspiring people to join us - is unapologetically part of the point. +Some things haven’t changed from prior years. Team members are still swapping +roles – PMs writing code, designers running projects, the list goes on – which +means steep and rapid [45]learning curves. We’re still trying out new +technologies and approaches to our work, which means unexpected blockers and +great insights to share. New connections are being formed, especially since +more than half of this year’s participants are in their first year at Viget and +experiencing their first Pointless event. Forming authentic co-worker +connections isn’t easy, and our culture is stronger today than it was at the +start of the week. - [42]Brian Williams +So what projects will launch? I won’t steal their thunder, but we just wrapped +the presentation portion of six Pointless Project teams at our weekly staff +meeting and it was the most we’ve laughed, cheered, and been inspired in a long +time. I expect articles will be written and shared in the days and weeks ahead +outlining the thrills (and mishaps) of the teams this year. - [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 +[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. + +If this is the kind of work and culture you might enjoy, learn more about [46] +our culture and job openings – perhaps you’ll be able to join next year’s +Pointless Palooza. After all, inspiring people to join us is unapologetically +part of the point. + +[47] Brian Williams + +[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] -Our Pointless Logo - Brian Williams - * Article + Article -Introducing Pointless Corp. - Brian Williams - * What’s the Point of Pointless Weekend? - Article + Our Pointless Logo -What’s the Point of Pointless Weekend? - Brian Williams + Brian Williams + + • [51] + + Article + + Introducing Pointless Corp. + + Brian Williams + + • [52] + What’s the Point of Pointless Weekend? + + Article + + What’s the Point of Pointless Weekend? + + Brian Williams The Viget Newsletter - Nobody likes popups, so we waited until now to recommend our - newsletter, featuring thoughts, opinions, and tools for building a - better digital world. [45]Read the current issue. +Nobody likes popups, so we waited until now to recommend our newsletter, +featuring thoughts, opinions, and tools for building a better digital world. +[53]Read the current issue. - [46]Subscribe Here (opens in new window) +[54]Subscribe Here (opens in new window) Site Footer - Have an unsolvable problem or audacious idea? +Have an unsolvable problem or audacious idea? - Let’s get to work - [47]Contact Us [48]hello@viget.com [49]703.891.0670 +Let’s get to work - * 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 diff --git a/static/archive/www-viget-com-biybeb.txt b/static/archive/www-viget-com-biybeb.txt index be63d73..1fbcb85 100644 --- a/static/archive/www-viget-com-biybeb.txt +++ b/static/archive/www-viget-com-biybeb.txt @@ -1,105 +1,106 @@ - #[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 - We’re a full-service digital agency that’s been helping clients make - lasting change since 1999. - [14]Contact Us + • Practice + • [11] Work + • [12] Services + • [13] Articles + +We’re a full-service digital agency that’s been helping clients make lasting +change since 1999. + +[14] Contact Us People - * [15]Company - * [16]Careers - * [17]Code of Ethics - * [18]Diversity & Inclusion + • [15]Company + • [16]Careers + • [17]Code of Ethics + • [18]Diversity & Inclusion More - * [19]Pointless Corp. - * [20]Explorations - * [21]Code at Viget + • [19]Pointless Corp. + • [20]Explorations + • [21]Code at Viget Featured - Read the Article: Revolutionizing the Web +[22] +Read the Article: Revolutionizing the Web - Newsletter +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 +Article 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 +Posted on April 28, 2023 - 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 @@ -121,24 +122,23 @@ Simple Commit Linting for Issue Number in GitHub Actions end ' - 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). +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: - 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: +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: +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: +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 - Article + • [43] + Thoughts on Remix -Thoughts on Remix - Solomon Hawk - * Going Headless in 2024: A View of the Headless CMS Landscape - Article + Article -Going Headless in 2024: A View of the Headless CMS Landscape - Andrew Mosby - * Maintenance Matters: Good Tests - Article + Thoughts on Remix -Maintenance Matters: Good Tests - David Eisinger + Solomon Hawk + + • [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 + + • [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? +Have an unsolvable problem or audacious idea? - Let’s get to work - [40]Contact Us [41]hello@viget.com [42]703.891.0670 +Let’s get to work - * 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 diff --git a/static/archive/www-viget-com-yrczde.txt b/static/archive/www-viget-com-yrczde.txt index 76b274d..721f491 100644 --- a/static/archive/www-viget-com-yrczde.txt +++ b/static/archive/www-viget-com-yrczde.txt @@ -1,405 +1,420 @@ - #[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 - We’re a full-service digital agency that’s been helping clients make - lasting change since 1999. - [14]Contact Us + • Practice + • [11] Work + • [12] Services + • [13] Articles + +We’re a full-service digital agency that’s been helping clients make lasting +change since 1999. + +[14] Contact Us People - * [15]Company - * [16]Careers - * [17]Code of Ethics - * [18]Diversity & Inclusion + • [15]Company + • [16]Careers + • [17]Code of Ethics + • [18]Diversity & Inclusion More - * [19]Pointless Corp. - * [20]Explorations - * [21]Code at Viget + • [19]Pointless Corp. + • [20]Explorations + • [21]Code at Viget Featured - Read the Article: Revolutionizing the Web +[22] +Read the Article: Revolutionizing the Web - Newsletter +Newsletter Revolutionizing the Web - Read the Article: The Reflection Before Christmas +[23] +Read the Article: The Reflection Before Christmas - Article +Article The Reflection Before Christmas What’s in a Word? Building a Verbose Party Game - [22]Haroon Matties [23]David Eisinger +[final] +[24] Haroon Matties [25] David Eisinger - Haley Johnson, Former Product Manager, +Haley Johnson, Former Product Manager, - [24]Haroon Matties, Product Designer, +[26]Haroon Matties, Product Designer, - Andrew Thomas, Former JavaScript Developer, +Andrew Thomas, Former JavaScript Developer, - Nicole Rymarz, Former Project Manager, and +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 +Posted on May 25, 2023 - Our Pointless Palooza team designed and built a word-association game - in 48 hours. Here's what we learned (and loved) while doing it. + • [30] + Share + • [31] + Share + • [32] + Post - O u r P o i n t l e s s P a l o o z a t e a m d e s i g n e d a n d b u - i l t a w o r d - a s s o c i a t i o n g a m e i n 4 8 h o u r s . H e - r e ' s w h a t w e l e a r n e d ( a n d l o v e d ) w h i l e d o i n - g i t . +Our Pointless Palooza team designed and built a word-association game in 48 +hours. Here's what we learned (and loved) while doing it. - Fun group party game. Somehow incorporate AI. Build it quickly. These - were the constraints we put on our mostly Colorado-based Pointless - Corp. team before [28]Pointless Palooza. A few of us wanted to partake - in the old Pointless tradition of trying out another role on the - project, so simplicity was key. Thankfully, Haley was itching to build - a digital version of a very fun, but relatively straightforward, game. +O u r P o i n t l e s s P a l o o z a t e a m d e s i g n e d a n d b u i l t a +w o r d - a s s o c i a t i o n g a m e i n 4 8 h o u r s . H e r e ' s w h a t +w e l e a r n e d ( a n d l o v e d ) w h i l e d o i n g i t . - [29]Just One is a collaborative word association game that encourages - both teamwork and creativity. On a given turn, everyone except one - player (the Guesser) knows a random mystery word and must attempt to - get the Guesser to guess the mystery word via one-word hints. The catch - is that every hint must be unique, so duplicate hints are eliminated - and not shown to the Guesser. +Fun group party game. Somehow incorporate AI. Build it quickly. These were the +constraints we put on our mostly Colorado-based Pointless Corp. team before +[33]Pointless Palooza. A few of us wanted to partake in the old Pointless +tradition of trying out another role on the project, so simplicity was key. +Thankfully, Haley was itching to build a digital version of a very fun, but +relatively straightforward, game. - Haley mentioned that she often hacked the board game to accommodate - more than 7 players and thought that doing so added a fun element of - chaos to the rounds. A digital version of the game would facilitate - expanding the party and it seemed like an easy enough lift for our - team. +[34]Just One is a collaborative word association game that encourages both +teamwork and creativity. On a given turn, everyone except one player (the +Guesser) knows a random mystery word and must attempt to get the Guesser to +guess the mystery word via one-word hints. The catch is that every hint must be +unique, so duplicate hints are eliminated and not shown to the Guesser. - It’s easier to play than explain, so mosey on over to [30]verbose.club - and give it a try. And, if you want to know more about how each of us - fared going heads down on one project for 48 hours (and counting), read - on. +Haley mentioned that she often hacked the board game to accommodate more than 7 +players and thought that doing so added a fun element of chaos to the rounds. A +digital version of the game would facilitate expanding the party and it seemed +like an easy enough lift for our team. -[31]Haley | Pointless Role: Design | Day Job: PM +It’s easier to play than explain, so mosey on over to [35]verbose.club and give +it a try. And, if you want to know more about how each of us fared going heads +down on one project for 48 hours (and counting), read on. - My favorite part of building verbose.club was being granted permission - to focus on one project with my teammates. We hopped on Meets or - huddles to discuss requirements. Nicole and I jammed in the same Figma - file or wireframe. I got to drop everything to QA a 600-word word bank. - Viget has great ways of collaborating remotely, but it was also fun to - be part of the in-office crew, having late night snacks between cram - sessions like we were in college again. +[662shots_so-1] - Something I learned: I tried my hand at being a “designer” and learned - quickly that nothing is too precious. Sometimes the code translates - things differently. Also, design systems are essential to throwing - together screens quickly. And Figma has tons of libraries that you can - use instead of starting from scratch! - __________________________________________________________________ +[36]Haley | Pointless Role: Design | Day Job: PM -[32]Haroon | Pointless Role: Dev | Day Job: Product Design +My favorite part of building verbose.club was being granted permission to focus +on one project with my teammates. We hopped on Meets or huddles to discuss +requirements. Nicole and I jammed in the same Figma file or wireframe. I got to +drop everything to QA a 600-word word bank. Viget has great ways of +collaborating remotely, but it was also fun to be part of the in-office crew, +having late night snacks between cram sessions like we were in college again. - My favorite part of building verbose.club was stepping into a new role, - or at least trying to. I got a chance to build out styled components - and pages for our game with React, Typescript, and Tailwind. Though my - constant questions for Andrew and David were likely annoying, it was an - extremely rewarding experience to see a project come to life from - another perspective. +Something I learned: I tried my hand at being a “designer” and learned quickly +that nothing is too precious. Sometimes the code translates things differently. +Also, design systems are essential to throwing together screens quickly. And +Figma has tons of libraries that you can use instead of starting from scratch! - 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. - __________________________________________________________________ +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -[33]Nicole | Pointless Role: Design | Day Job: PM +[37]Haroon | Pointless Role: Dev | Day Job: Product Design - My favorite part of building verbose.club was seeing our team - immediately dive in with a “we’re in this together” approach. I am - still relatively new to Viget and it was my first time working with a - handful of my teammates, so I really appreciated the collaborative - environment and how everyone was really open to hearing new ideas, - trying something new, and working together to make something cool. +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 was how to use [34]Whimsical and [35]Figma to make - wireframes and designs. I had used these tools before; but, it was my - first time “building” anything at Viget — and it was super fun. I’m - glad I got to try something outside of my usual PM role. - __________________________________________________________________ +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. -[36]Andrew | Pointless Role: CEO Dev | Day Job: Dev +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - My favorite part of building verbose.club was coordinating work among - my teammates. With less than 3 days to do everything, we had to hit the - ground running. To start, our PMs and designer jumped on wireframing - and design thinking while David brought to life a Rails back-end & API. - I was in a good spot to act as the messenger between these two lines of - work: parsing high-level thinking & decisions from the designers into - information useful to David in crafting the API; then shuttling David’s - feedback back to the broader team. - Next up, it was time to build out the user-facing Remix app. We were - able to split this work into two parallel streams. I built out unstyled - screens, game business logic, and the necessary glue code, resulting in - a functional app with a barebones UI. In parallel, Haroon built out - high-fidelity screens, using static placeholders where dynamic content - would eventually live. From there, collaborating to merge our work and - upgrade the UI was a simple task. - I think our team came out of this project inspired by what can be - accomplished with smart coordination. We managed to efficiently build - consensus, parallelize work, and learn from one another — and the - result speaks for itself. +[38]Nicole | Pointless Role: Design | Day Job: PM - 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. - __________________________________________________________________ +My favorite part of building verbose.club was seeing our team immediately dive +in with a “we’re in this together” approach. I am still relatively new to Viget +and it was my first time working with a handful of my teammates, so I really +appreciated the collaborative environment and how everyone was really open to +hearing new ideas, trying something new, and working together to make something +cool. -[37]David | Pointless Role: Dev | Day Job: Dev +Something I learned was how to use [39]Whimsical and [40]Figma to make +wireframes and designs. I had used these tools before; but, it was my first +time “building” anything at Viget — and it was super fun. I’m glad I got to try +something outside of my usual PM role. - My favorite part of 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. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +[41]Andrew | Pointless Role: CEO Dev | Day Job: Dev + +My favorite part of building verbose.club was coordinating work among my +teammates. With less than 3 days to do everything, we had to hit the ground +running. To start, our PMs and designer jumped on wireframing and design +thinking while David brought to life a Rails back-end & API. I was in a good +spot to act as the messenger between these two lines of work: parsing +high-level thinking & decisions from the designers into information useful to +David in crafting the API; then shuttling David’s feedback back to the broader +team. + +Next up, it was time to build out the user-facing Remix app. We were able to +split this work into two parallel streams. I built out unstyled screens, game +business logic, and the necessary glue code, resulting in a functional app with +a barebones UI. In parallel, Haroon built out high-fidelity screens, using +static placeholders where dynamic content would eventually live. From there, +collaborating to merge our work and upgrade the UI was a simple task. + +I think our team came out of this project inspired by what can be accomplished +with smart coordination. We managed to efficiently build consensus, parallelize +work, and learn from one another — and the result speaks for itself. + +Something I learned was that parallelizing a project is tricky and +communication is key. When multiple streams of work are progressing in +parallel, decisions are constantly being made — some big, some small — and many +having more influence than immediately apparent. Keeping all contributors 100% +in the loop is likely impossible, and certainly unrealistic. Smart coordination +and communication is the magic sauce that makes it all work. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +[42]David | Pointless Role: Dev | Day Job: Dev + +My favorite part of working on verbose.club was helping from afar. I was 1,500 +miles and several time zones away from most of the team, so I really focused on +doing low-level work that would enable the rest of the team to be successful: +setting up an API, getting the app running on Docker for easy local +development, and making it straightforward for others to deploy code. It was +sort of like being the bass player in a rad band. + +Something I learned is that [43]Caddy is super legit. Here’s the entire web +server config file, which automatically sets up HTTPS and proxies traffic to +our Remix app: - Something I learned is that [38]Caddy is super legit. Here’s the entire - web server config file, which automatically sets up HTTPS and proxies - traffic to our Remix app: verbose.club reverse_proxy remix-prod:3001 - Our overall architecture (running with docker compose) looks like this: - __________________________________________________________________ +Our overall architecture (running with docker compose) looks like this: - In two days’ time, we had a beautiful, functioning game that we played - during our Pointless celebration happy hour. Since then, we’ve added - some cool animations and the ability to pull in AI players — no human - friends required! So, grab some friends (robot or otherwise) and check - out [39]verbose.club! +[verbose-arch] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - [40]Haroon Matties +In two days’ time, we had a beautiful, functioning game that we played during +our Pointless celebration happy hour. Since then, we’ve added some cool +animations and the ability to pull in AI players — no human friends required! +So, grab some friends (robot or otherwise) and check out [44]verbose.club! - [41]Haroon is a product designer in our Boulder, CO office. His - appreciation for human-centered design informs his approach to - researching and building intuitive interfaces. - [42]More articles by Haroon - [43]David Eisinger +[45] Haroon Matties - [44]David is Viget's managing development director. From our Durham, - NC, office, he builds high-quality, forward-thinking software for PUMA, - the World Wildlife Fund, NFLPA, and many others. - [45]More articles by David +[46]Haroon is a product designer in our Boulder, CO office. His appreciation +for human-centered design informs his approach to researching and building +intuitive interfaces. + +[47]More articles by Haroon +[48] David Eisinger + +[49]David is Viget's managing development director. From our Durham, NC, +office, he builds high-quality, forward-thinking software for PUMA, the World +Wildlife Fund, NFLPA, and many others. + +[50]More articles by David Related Articles - * Panel by Panel: A Comically Fun Way to Use Figma - Article + • [51] + Panel by Panel: A Comically Fun Way to Use Figma -Panel by Panel: A Comically Fun Way to Use Figma - Gray Gill - * The Enduring Point of Pointless Corp. - Article + Article -The Enduring Point of Pointless Corp. - Brian Williams - * Plan a Killer Party with Thrillr - Article + Panel by Panel: A Comically Fun Way to Use Figma -Plan a Killer Party with Thrillr - Addison DeLancey + Gray Gill + + • [52] + The Enduring Point of Pointless Corp. + + Article + + The Enduring Point of Pointless Corp. + + Brian Williams + + • [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? +Have an unsolvable problem or audacious idea? - Let’s get to work - [48]Contact Us [49]hello@viget.com [50]703.891.0670 +Let’s get to work - * Practice - * [51]Work - * [52]Services - * [53]Articles +[56] Contact Us [57] hello@viget.com [58] 703.891.0670 - * People - * [54]Company - * [55]Careers - * [56]Code of Ethics - * [57]Diversity & Inclusion + • Practice + • [59]Work + • [60]Services + • [61]Articles - * More - * [58]Pointless Corp. - * [59]Explorations - * [60]Code at Viget + • People + • [62]Company + • [63]Careers + • [64]Code of Ethics + • [65]Diversity & Inclusion + + • More + • [66]Pointless Corp. + • [67]Explorations + • [68]Code at Viget Sign Up For Our Newsletter - A curated periodical featuring thoughts, opinions, and tools for - building a better digital world. - [61]Check it out +A curated periodical featuring thoughts, opinions, and tools for building a +better digital world. + +[69] Check it out Social Links - [62]Viget - * - * - * - * - * - * +[70] Viget + + • [71] + • [72] + • [73] + • [74] + • [75] + • [76] Office Locations - * [63]Washington DC Metro - * [64]Durham, NC - * [65]Boulder, CO - * [66]Chattanooga, TN + • [77]Washington DC Metro + • [78]Durham, NC + • [79]Boulder, CO + • [80]Chattanooga, TN - © 1999 – 2024 Viget Labs, LLC. [67]Terms [68]Privacy [69]MRF +© 1999 – 2024 Viget Labs, LLC. [81]Terms [82]Privacy [83]MRF - * [70]Home - * [71]Articles - * [72]What’s in a Word? Building a Verbose Party Game + • [84]Home + • [85]Articles + • [86]What’s in a Word? Building a Verbose Party Game - [73]Subscribe (opens in a new window) - (BUTTON) Share - * [74]Share this page - * [75]Share this page - * [76]Post this page +[87] Subscribe (opens in a new window) +Share -References + • [89] Share this page + • [90] Share this page + • [91] Post this page - Visible links: - 1. https://feeds.feedburner.com/Viget - 2. https://www.googletagmanager.com/ns.html?id=GTM-5V7V - 3. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#content - 4. https://www.viget.com/ - 5. https://www.viget.com/work/ - 6. https://www.viget.com/services/ - 7. https://www.viget.com/articles/ - 8. https://www.viget.com/careers/ - 9. https://www.viget.com/contact/ - 10. https://www.viget.com/ - 11. https://www.viget.com/work/ - 12. https://www.viget.com/services/ - 13. https://www.viget.com/articles/ - 14. https://www.viget.com/contact/ - 15. https://www.viget.com/about/ - 16. https://www.viget.com/careers/ - 17. https://www.viget.com/code-of-ethics/ - 18. https://www.viget.com/diversity-equity-and-inclusion/ - 19. https://pointlesscorp.com/ - 20. https://explorations.viget.com/ - 21. https://code.viget.com/ - 22. https://www.viget.com/about/team/hmatties/ - 23. https://www.viget.com/about/team/deisinger/ - 24. https://www.viget.com/about/team/hmatties/ - 25. https://www.viget.com/about/team/deisinger/ - 26. https://www.viget.com/articles/category/news-culture/ - 27. https://www.viget.com/articles/category/employee-engagement/ - 28. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/ - 29. https://boardgamegeek.com/boardgame/254640/just-one - 30. https://verbose.club/ - 31. https://www.viget.com/about/team/hjohnson/ - 32. https://www.viget.com/about/team/hmatties/ - 33. https://www.viget.com/about/team/nrymarz/ - 34. http://whimsical.com/ - 35. http://figma.com/ - 36. https://www.viget.com/about/team/athomas/ - 37. https://www.viget.com/about/team/deisinger/ - 38. https://caddyserver.com/ - 39. https://verbose.club/ - 40. https://www.viget.com/about/team/hmatties/ - 41. https://www.viget.com/about/team/hmatties/ - 42. https://www.viget.com/about/team/hmatties/ - 43. https://www.viget.com/about/team/deisinger/ - 44. https://www.viget.com/about/team/deisinger/ - 45. https://www.viget.com/about/team/deisinger/ - 46. https://www.viget.com/newsletter - 47. http://eepurl.com/gtHqsj - 48. https://www.viget.com/contact/ - 49. mailto:hello@viget.com?subject=Hello, Viget! - 50. tel:7038910670 - 51. https://www.viget.com/work/ - 52. https://www.viget.com/services/ - 53. https://www.viget.com/articles/ - 54. https://www.viget.com/about/ - 55. https://www.viget.com/careers/ - 56. https://www.viget.com/code-of-ethics/ - 57. https://www.viget.com/diversity-equity-and-inclusion/ - 58. https://pointlesscorp.com/ - 59. https://explorations.viget.com/ - 60. https://code.viget.com/ - 61. https://www.viget.com/newsletter/ - 62. https://www.viget.com/ - 63. https://www.viget.com/dc-metro-hq/ - 64. https://www.viget.com/durham/ - 65. https://www.viget.com/boulder/ - 66. https://www.viget.com/chattanooga/ - 67. https://www.viget.com/terms-conditions/ - 68. https://www.viget.com/privacy-policy/ - 69. https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page - 70. https://www.viget.com/ - 71. https://www.viget.com/articles - 72. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#hero - 73. http://eepurl.com/gtHqsj - 74. https://www.facebook.com/sharer/sharer.php?u=https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/ - 75. http://www.linkedin.com/shareArticle?mini=true&url=https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/ - 76. https://x.com/intent/tweet?text=Our Pointless Palooza team designed and built a word-association game in 48 hours. Here's what we learned (and loved) while doing it. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/ - Hidden links: - 78. https://www.viget.com/newsletter/revolutionizing-the-web/ - 79. https://www.viget.com/articles/the-reflection-before-christmas/ - 80. https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F - 81. http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F - 82. https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F - 83. https://www.viget.com/articles/figma-comic-creator/ - 84. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/ - 85. https://www.viget.com/articles/plan-a-killer-party-with-thrillr/ - 86. http://x.com/viget - 87. https://github.com/vigetlabs - 88. https://dribbble.com/viget - 89. https://www.instagram.com/viget/ - 90. https://www.linkedin.com/company/viget-labs - 91. https://vimeo.com/viget/collections +References: + +[1] https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#content +[2] https://www.viget.com/ +[3] https://www.viget.com/work/ +[4] https://www.viget.com/services/ +[5] https://www.viget.com/articles/ +[6] https://www.viget.com/careers/ +[7] https://www.viget.com/contact/ +[9] https://www.viget.com/ +[11] https://www.viget.com/work/ +[12] https://www.viget.com/services/ +[13] https://www.viget.com/articles/ +[14] https://www.viget.com/contact/ +[15] https://www.viget.com/about/ +[16] https://www.viget.com/careers/ +[17] https://www.viget.com/code-of-ethics/ +[18] https://www.viget.com/diversity-equity-and-inclusion/ +[19] https://pointlesscorp.com/ +[20] https://explorations.viget.com/ +[21] https://code.viget.com/ +[22] https://www.viget.com/newsletter/revolutionizing-the-web/ +[23] https://www.viget.com/articles/the-reflection-before-christmas/ +[24] https://www.viget.com/about/team/hmatties/ +[25] https://www.viget.com/about/team/deisinger/ +[26] https://www.viget.com/about/team/hmatties/ +[27] https://www.viget.com/about/team/deisinger/ +[28] https://www.viget.com/articles/category/news-culture/ +[29] https://www.viget.com/articles/category/employee-engagement/ +[30] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F +[31] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F +[32] https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F +[33] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/ +[34] https://boardgamegeek.com/boardgame/254640/just-one +[35] https://verbose.club/ +[36] https://www.viget.com/about/team/hjohnson/ +[37] https://www.viget.com/about/team/hmatties/ +[38] https://www.viget.com/about/team/nrymarz/ +[39] http://whimsical.com/ +[40] http://figma.com/ +[41] https://www.viget.com/about/team/athomas/ +[42] https://www.viget.com/about/team/deisinger/ +[43] https://caddyserver.com/ +[44] https://verbose.club/ +[45] https://www.viget.com/about/team/hmatties/ +[46] https://www.viget.com/about/team/hmatties/ +[47] https://www.viget.com/about/team/hmatties/ +[48] https://www.viget.com/about/team/deisinger/ +[49] https://www.viget.com/about/team/deisinger/ +[50] https://www.viget.com/about/team/deisinger/ +[51] https://www.viget.com/articles/figma-comic-creator/ +[52] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/ +[53] https://www.viget.com/articles/plan-a-killer-party-with-thrillr/ +[54] https://www.viget.com/newsletter +[55] http://eepurl.com/gtHqsj +[56] https://www.viget.com/contact/ +[57] mailto:hello@viget.com?subject=Hello%2C%20Viget%21 +[58] tel:7038910670 +[59] https://www.viget.com/work/ +[60] https://www.viget.com/services/ +[61] https://www.viget.com/articles/ +[62] https://www.viget.com/about/ +[63] https://www.viget.com/careers/ +[64] https://www.viget.com/code-of-ethics/ +[65] https://www.viget.com/diversity-equity-and-inclusion/ +[66] https://pointlesscorp.com/ +[67] https://explorations.viget.com/ +[68] https://code.viget.com/ +[69] https://www.viget.com/newsletter/ +[70] https://www.viget.com/ +[71] http://x.com/viget +[72] https://github.com/vigetlabs +[73] https://dribbble.com/viget +[74] https://www.instagram.com/viget/ +[75] https://www.linkedin.com/company/viget-labs +[76] https://vimeo.com/viget/collections +[77] https://www.viget.com/dc-metro-hq/ +[78] https://www.viget.com/durham/ +[79] https://www.viget.com/boulder/ +[80] https://www.viget.com/chattanooga/ +[81] https://www.viget.com/terms-conditions/ +[82] https://www.viget.com/privacy-policy/ +[83] https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page +[84] https://www.viget.com/ +[85] https://www.viget.com/articles +[86] https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#hero +[87] http://eepurl.com/gtHqsj +[89] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F +[90] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F +[91] https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F diff --git a/static/archive/www-wired-com-ybjipw.txt b/static/archive/www-wired-com-ybjipw.txt index 75dcdce..b96e5eb 100644 --- a/static/archive/www-wired-com-ybjipw.txt +++ b/static/archive/www-wired-com-ybjipw.txt @@ -1,556 +1,589 @@ - #[1]alternate +[1]Skip to main content +Open Navigation Menu - IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-5HBJC2K +To revist this article, visit My Profile, then [3]View saved stories. - [3]Skip to main content +Close Alert +[5]WIRED +I Finally Reached Computing Nirvana. What Was It All For? - (BUTTON) Open Navigation Menu + • [6]Backchannel + • [7]Business + • [8]Culture + • [9]Gear + • [10]Ideas + • [11]Politics + • [12]Science + • [13]Security + • [14]Merch - To revist this article, visit My Profile, then [4]View saved stories. - (BUTTON) Close Alert - [5]WIRED - I Finally Reached Computing Nirvana. What Was It All For? +More - * [6]Backchannel - * [7]Business - * [8]Culture - * [9]Gear - * [10]Ideas - * [11]Politics - * [12]Science - * [13]Security - * [14]Merch +To revist this article, visit My Profile, then [16]View saved stories. - (BUTTON) More +Close Alert +[18]Sign In - To revist this article, visit My Profile, then [15]View saved stories. - (BUTTON) Close Alert - [16]Sign In +[19]Search - [17]Search + • [20]Backchannel + • [21]Business + • [22]Culture + • [23]Gear + • [24]Ideas + • [25]Politics + • [26]Science + • [27]Security + • [28]Merch - * [18]Backchannel - * [19]Business - * [20]Culture - * [21]Gear - * [22]Ideas - * [23]Politics - * [24]Science - * [25]Security - * [26]Merch + • [29]Podcasts + • [30]Video + • [31]Wired World + • [32]Artificial Intelligence + • [33]Climate + • [34]Games + • [35]Newsletters + • [36]Magazine + • [37]Events + • [38]Wired Insider + • [39]Jobs + • [40]Coupons - * [27]Podcasts - * [28]Video - * [29]Wired World - * [30]Artificial Intelligence - * [31]Climate - * [32]Games - * [33]Newsletters - * [34]Magazine - * [35]Events - * [36]Wired Insider - * [37]Jobs - * [38]Coupons +[41]Paul Ford - [39]Paul Ford - [40]Ideas - Apr 1, 2022 7:00 AM +[42]Ideas +Apr 1, 2022 7:00 AM I Finally Reached Computing Nirvana. What Was It All For? - Breakfast, it turns out. The answer is breakfast. - illustration concept of an optimal computer system - Illustration: Elena Lacey +Breakfast, it turns out. The answer is breakfast.  +illustration concept of an optimal computer system +Illustration: Elena Lacey +Save +Save - (BUTTON) Save - (BUTTON) Save +Like many nerds before me, I spent a goodly portion of my life searching for +the perfect [45]computing system. I wanted a single tool that would let me +write prose or programs, that could search every email, tweet, or document in a +few keystrokes, and that would work across all my devices. I yearned to summit +the mythic Mt. Augment, to achieve the enlightenment of a properly orchestrated +personal computer. Where the [46]software industry offered notifications, +little clicks and dings, messages jumping up and down on my screen like a dog +begging for a treat, I wanted calm textuality. Seeking it, I tweaked. I +configured. - Like many nerds before me, I spent a goodly portion of my life - searching for the perfect [41]computing system. I wanted a single tool - that would let me write prose or programs, that could search every - email, tweet, or document in a few keystrokes, and that would work - across all my devices. I yearned to summit the mythic Mt. Augment, to - achieve the enlightenment of a properly orchestrated personal computer. - Where the [42]software industry offered notifications, little clicks - and dings, messages jumping up and down on my screen like a dog begging - for a treat, I wanted calm textuality. Seeking it, I tweaked. I - configured. +The purpose of configuration is to make a thing work with some other thing—to +make the to-do list work with the email client, say, or the calendar work with +the other calendar. It's an interdisciplinary study. Configuration can be as +complex as programming or as simple as checking a box. Everyone talks about it, +but it's not taken that seriously, because there's not much profit in it. And +unfortunately, configuration is indistinguishable from procrastination. A +little is fine but too much is embarrassing. - The purpose of configuration is to make a thing work with some other - thing—to make the to-do list work with the email client, say, or the - calendar work with the other calendar. It's an interdisciplinary study. - Configuration can be as complex as programming or as simple as checking - a box. Everyone talks about it, but it's not taken that seriously, - because there's not much profit in it. And unfortunately, configuration - is indistinguishable from procrastination. A little is fine but too - much is embarrassing. +[47]The Best Way to Learn Online? Be a Lurker +Sneakbrowsing +[48] +The Best Way to Learn Online? Be a Lurker - [43]The Best Way to Learn Online? Be a Lurker - Sneakbrowsing - The Best Way to Learn Online? Be a Lurker +Paul Ford - Paul Ford - [44]Coders’ Primal Urge to Kill Inefficiency&-Everywhere - Coders - Coders’ Primal Urge to Kill Inefficiency—Everywhere +[49]Coders’ Primal Urge to Kill Inefficiency&-Everywhere +Coders +[50] +Coders’ Primal Urge to Kill Inefficiency—Everywhere - Clive Thompson - [45]Forget To-Do Lists. You Really Need a ‘Got Done’ List - work smart - Forget To-Do Lists. You Really Need a ‘Got Done’ List +Clive Thompson - Stacy S. Kim +[51]Forget To-Do Lists. You Really Need a ‘Got Done’ List +work smart +[52] +Forget To-Do Lists. You Really Need a ‘Got Done’ List - I spent almost three decades configuring my text editor, amassing 20 or - so dotfiles that would make one acronym or nonsense word concordant - with another. (For me: i3wm + emacs + org-mode + notmuch + tmux, bound - together with ssh + git + Syncthing + Tailscale.) I'd start down a - path, but then there'd be some blocker—some bug I didn't understand, - some page of errors I didn't have time to deal with—and I'd give up. +Stacy S. Kim - A big problem I had was where to put my stuff. I tried different - databases, folder structures, private websites, cloud drives, and - desktop search tools. The key, finally, was to turn nearly everything - in my life into emails. All my calendar entries, essay drafts, tweets—I - wrote programs that turned them into gigs and gigs of emails. Emails - are horrible, messy, swollen, decrepit forms of data, but they are - understood by everything everywhere. You can lard them with - attachments. You can tag them. You can add any amount of metadata to - them and synchronize them with servers. They suck, but they work. No - higher praise. +I spent almost three decades configuring my text editor, amassing 20 or so +dotfiles that would make one acronym or nonsense word concordant with another. +(For me: i3wm + emacs + org-mode + notmuch + tmux, bound together with ssh + +git + Syncthing + Tailscale.) I'd start down a path, but then there'd be some +blocker—some bug I didn't understand, some page of errors I didn't have time to +deal with—and I'd give up. - It took years to get all these emails into place, tag them, filter them - just so. Little by little I could see more of the shape of my own data. - And as I did this, software got better and computers got faster. Not - only that, other people started sharing their config files on GitHub. +A big problem I had was where to put my stuff. I tried different databases, +folder structures, private websites, cloud drives, and desktop search tools. +The key, finally, was to turn nearly everything in my life into emails. All my +calendar entries, essay drafts, tweets—I wrote programs that turned them into +gigs and gigs of emails. Emails are horrible, messy, swollen, decrepit forms of +data, but they are understood by everything everywhere. You can lard them with +attachments. You can tag them. You can add any amount of metadata to them and +synchronize them with servers. They suck, but they work. No higher praise. - Then, one cold day—January 31, 2022—something bizarre happened. I was - at home, writing a little glue function to make my emails searchable - from anywhere inside my text editor. I evaluated that tiny program and - ran it. It worked. Somewhere in my brain, I felt a distinct click. I - was done. No longer configuring, but configured. The world had - conspired to give me what I wanted. I stood up from the computer, - suffused with a sort of European-classical-composer level of emotion, - and went for a walk. Was this happiness? Freedom? Or would I find - myself back tomorrow, with a whole new set of requirements? - Most Popular - * [46]Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video - Games - Culture - Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video - Games - Megan Farokhmanesh - * [47]The Emmys Proved Streaming Changed TV for the Better - Culture - The Emmys Proved Streaming Changed TV for the Better - Angela Watercutter - * [48]A Flaw in Millions of Apple, AMD, and Qualcomm GPUs Could - Expose AI Data - Security - A Flaw in Millions of Apple, AMD, and Qualcomm GPUs Could Expose AI - Data - Lily Hay Newman - * [49]Even After a Landslide Victory, Trump Supporters Claim Iowa - Caucus Was Rigged - Politics - Even After a Landslide Victory, Trump Supporters Claim Iowa Caucus - Was Rigged - David Gilbert - * +It took years to get all these emails into place, tag them, filter them just +so. Little by little I could see more of the shape of my own data. And as I did +this, software got better and computers got faster. Not only that, other people +started sharing their config files on GitHub. - The more “professional” a piece of software is intended to be, the more - likely it is to be scriptable. CAD tools or 3D programs will provide - whole languages just for configuration. But the huge consumer products, - the operating systems themselves, are more and more locked down. The - reasons are multiple—money, security, simplicity. A lot of our - computing is done on someone else's terms. We describe it with carceral - words. To assert control over your device, you “jailbreak” out. +Then, one cold day—January 31, 2022—something bizarre happened. I was at home, +writing a little glue function to make my emails searchable from anywhere +inside my text editor. I evaluated that tiny program and ran it. It worked. +Somewhere in my brain, I felt a distinct click. I was done. No longer +configuring, but configured. The world had conspired to give me what I wanted. +I stood up from the computer, suffused with a sort of +European-classical-composer level of emotion, and went for a walk. Was this +happiness? Freedom? Or would I find myself back tomorrow, with a whole new set +of requirements? - I wonder if this is one of the reasons people get into [50]crypto—they - dream of a new world that can be customized like software. Programmable - money, self-executing contracts, little scripts that rearrange reality. - In DAOs (decentralized autonomous organizations), people use code to - make social rules, then buy or do things with their consolidated - digital might. +Most Popular - A lot of my friends hate all this stuff (perhaps [51]NFTs more than - DAOs) with great passion; they see it as a closing off, a betrayal of - the open, trust-driven nature of the early web. Others love it, seeing - it as a continuation of the community-building, empowering nature of - the early web. What I see is a generation of configurers coming into - their own. Older web folks expected to create the new digital economy; - these younger ones are trying to create the new economy economy. Their - dream is a more perfect union where humans will, because of computers, - stop acting in the ways we've been acting since we came out of the - trees. Then again, $200 million in NFTs were stolen the day I drafted - this column. + • [53] + Big Tech Won’t Let You Leave. Here's a Way Out + Ideas + [54] + Big Tech Won’t Let You Leave. Here's a Way Out - When in history have we been able to schedule folly? Sometimes the only - way to end the vacation is to drive the RV off a cliff. + Cory Doctorow - Perhaps by the time you read this the NFTs will have been returned. - That would be a good reconfiguration. But the likely outcome of the - boom is that some people will cash out at the right time and become - convinced that they hold the keys to the universe and will lecture us - for the rest of our lives, and most people (like those who had their - NFTs stolen) will be humbled, or at best break even. When in history - have we been able to schedule folly? Sometimes the only way to end the - vacation is to drive the RV off a cliff. + • [55] + How a 27-Year-Old Codebreaker Busted the Myth of Bitcoin’s Anonymity + Backchannel + [56] + How a 27-Year-Old Codebreaker Busted the Myth of Bitcoin’s Anonymity - While the youth reconfigure society, I'm done configuring. A month has - gone by since the click, and the urge to tweak is gone. My system looks - like something from the '80s (a lot of it is from the '80s), but I - finally got my room just the way I like it. + Andy Greenberg - Here's what I mean. Say I search for the word “database”; 7,222 emails - pop up. Most are from marketers and industry mailing lists proclaiming - some technological triumph, but nestled among them are messages from - me, or to me, about learning to use databases—XML databases, SQL - databases, and so forth. When I read these old messages, I am always - surprised at how little I've changed, how consistent my obsessions are. - There's something valuable to me in just seeing that, in seeing how the - world keeps trumpeting the new while the self stays the same. You'd - think there'd be at least five new me's by now, given how often I've - vowed to become better. But no. I've been writing about configuring my - text editor since 1996. I've been running my mouth about databases at - least that long. They say you can't dip your hand in the same river - twice, but they rarely mention that it's the same hand doing the - dipping. - Most Popular - * [52]Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video - Games - Culture - Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video - Games - Megan Farokhmanesh - * [53]The Emmys Proved Streaming Changed TV for the Better - Culture - The Emmys Proved Streaming Changed TV for the Better - Angela Watercutter - * [54]A Flaw in Millions of Apple, AMD, and Qualcomm GPUs Could - Expose AI Data - Security - A Flaw in Millions of Apple, AMD, and Qualcomm GPUs Could Expose AI - Data - Lily Hay Newman - * [55]Even After a Landslide Victory, Trump Supporters Claim Iowa - Caucus Was Rigged - Politics - Even After a Landslide Victory, Trump Supporters Claim Iowa Caucus - Was Rigged - David Gilbert - * + • [57] + Scabies Is Making a Comeback + Science + [58] + Scabies Is Making a Comeback - Since the emails are, well, just emails, sometimes I hit Reply (by - typing “r”). On a thread that went dormant a decade ago. I don't always - offer context. Sometimes I just write, “Curious … how did this turn - out?” I used to feel I was intruding, to just drop in like that. But - what the hell. It's been a long pandemic. No one has to write back. + David Cox - Out go the emails. Most get no reply; some get a bounce-back. But often - enough, people respond at length. Some left the city and came back. - Some are up for coffee. A surprising number are now cyborgs - (pacemakers, hearing aids). Some are rich, some are broke, some are - divorced. One is considering being frozen after death, some are - considering getting into crypto, and one has moved to Miami. None of us - understand our children. + • [59] + Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video Games + Culture + [60] + Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video Games - I'm thinking of starting a Sunday morning waffle breakfast for - [56]vaccinated people to come stare at each other. It's one thing to - email after 10 years, but everyone appreciates an invitation to - breakfast. Maybe I'll set up some sort of internet-connected LED - scrolly screen, like they put on food carts, so out-of-towners can - leave messages. I gotta have something to configure. + Megan Farokhmanesh - If you'd asked me, back when I was still configuring, not yet - configured, exactly why I was nurturing these dozens of dotfiles, I'd - have had a hard time telling you. I would have said: I want a pure and - sleek experience. I want the computer working for me, augmenting my - dumb brain with its immense arithmetical speed. I want access to my - whole digital self. So I am very surprised that the terminal result of - my efforts is not some sort of ecstatic communion with the internet, or - even with my own computer. The function of my whole big orchestrated, - tagged, integrated system was merely to rekindle old ties. What was all - that configuration for? It was, in all sincerity, for waffles. - __________________________________________________________________ + • - This article appears in the April 2022 issue. [57]Subscribe now. - __________________________________________________________________ +The more “professional” a piece of software is intended to be, the more likely +it is to be scriptable. CAD tools or 3D programs will provide whole languages +just for configuration. But the huge consumer products, the operating systems +themselves, are more and more locked down. The reasons are multiple—money, +security, simplicity. A lot of our computing is done on someone else's terms. +We describe it with carceral words. To assert control over your device, you +“jailbreak” out. - More Great WIRED Stories - * 📩 The latest on tech, science, and more: [58]Get our newsletters! - * [59]Jacques Vallée still doesn’t know what UFOs are - * When should you [60]test yourself for Covid-19? - * [61]How to leave your photos to someone when you die - * TV struggles to put [62]Silicon Valley on the screen - * [63]YouTube's captions insert explicit language in kids' videos - * 👁️ Explore AI like never before with [64]our new database - * 🎧 Things not sounding right? Check out our favorite [65]wireless - headphones, [66]soundbars, and [67]Bluetooth speakers +I wonder if this is one of the reasons people get into [61]crypto—they dream of +a new world that can be customized like software. Programmable money, +self-executing contracts, little scripts that rearrange reality. In DAOs +(decentralized autonomous organizations), people use code to make social rules, +then buy or do things with their consolidated digital might. - [68]Paul Ford is a writer, programmer, and software entrepreneur. He - lives in Brooklyn. - Contributor - * +A lot of my friends hate all this stuff (perhaps [62]NFTs more than DAOs) with +great passion; they see it as a closing off, a betrayal of the open, +trust-driven nature of the early web. Others love it, seeing it as a +continuation of the community-building, empowering nature of the early web. +What I see is a generation of configurers coming into their own. Older web +folks expected to create the new digital economy; these younger ones are trying +to create the new economy economy. Their dream is a more perfect union where +humans will, because of computers, stop acting in the ways we've been acting +since we came out of the trees. Then again, $200 million in NFTs were stolen +the day I drafted this column. - Topics[69]magazine-30.04[70]crypto[71]NFTs[72]software[73]Web3 +When in history have we been able to schedule folly? Sometimes the only way to +end the vacation is to drive the RV off a cliff. - More from WIRED - [74] - A Key to Detecting Brain Disease Earlier Than Ever - A Key to Detecting Brain Disease Earlier Than Ever - Treatment of Parkinson’s, Huntington’s, ALS, and other brain diseases - depends on reliable detection—especially in those who don’t even know - they’re at risk. An innovative scratch-and-sniff test can help. +Perhaps by the time you read this the NFTs will have been returned. That would +be a good reconfiguration. But the likely outcome of the boom is that some +people will cash out at the right time and become convinced that they hold the +keys to the universe and will lecture us for the rest of our lives, and most +people (like those who had their NFTs stolen) will be humbled, or at best break +even. When in history have we been able to schedule folly? Sometimes the only +way to end the vacation is to drive the RV off a cliff. - Michael J. Fox - [75]The Danger of Digitizing Everything - The Danger of Digitizing Everything - The creep of conducting our day-to-day interactions over screens has - reached a breaking point—and it threatens to push out everyone but - those with the “right” access. +While the youth reconfigure society, I'm done configuring. A month has gone by +since the click, and the urge to tweak is gone. My system looks like something +from the '80s (a lot of it is from the '80s), but I finally got my room just +the way I like it. - Naomi Alderman - [76]Regulators Are Finally Catching Up With Big Tech - Regulators Are Finally Catching Up With Big Tech - The lawless, Wild West era of AI and technology is almost at an end, as - data protection authorities use new and existing legislation to get - tough. +Here's what I mean. Say I search for the word “database”; 7,222 emails pop up. +Most are from marketers and industry mailing lists proclaiming some +technological triumph, but nestled among them are messages from me, or to me, +about learning to use databases—XML databases, SQL databases, and so forth. +When I read these old messages, I am always surprised at how little I've +changed, how consistent my obsessions are. There's something valuable to me in +just seeing that, in seeing how the world keeps trumpeting the new while the +self stays the same. You'd think there'd be at least five new me's by now, +given how often I've vowed to become better. But no. I've been writing about +configuring my text editor since 1996. I've been running my mouth about +databases at least that long. They say you can't dip your hand in the same +river twice, but they rarely mention that it's the same hand doing the dipping. - Susie Alegre - [77]Get Ready for the Great AI Disappointment - Get Ready for the Great AI Disappointment - Rose-tinted predictions for artificial intelligence’s grand - achievements will be swept aside by underwhelming performance and - dangerous results. +Most Popular - Daron Acemoglu - [78]The Ocean’s Mysteries&-and Marvels&-Are About to Reach New Depths - The Ocean’s Mysteries—and Marvels—Are About to Reach New Depths - Advancements in science will bring unprecedented lens into the - complexities of the ocean, and a renewed call for humans to protect it. + • [63] + Big Tech Won’t Let You Leave. Here's a Way Out + Ideas + [64] + Big Tech Won’t Let You Leave. Here's a Way Out - Helen Czerski - [79]AI Needs to Be Both Trusted and Trustworthy - AI Needs to Be Both Trusted and Trustworthy - Through sensors, actuators, and IoT devices, AI is going to be - interacting with the physical plane on a massive scale. The question - is, how does one build trust in its actions? + Cory Doctorow - Bruce Schneier - [80]The End of One-Size-Fits-All Health Care - The End of One-Size-Fits-All Health Care - Medicines need to be safe for all, but also effective for the - individual. Embracing our differences will lead to better health care - for everyone. + • [65] + How a 27-Year-Old Codebreaker Busted the Myth of Bitcoin’s Anonymity + Backchannel + [66] + How a 27-Year-Old Codebreaker Busted the Myth of Bitcoin’s Anonymity - Angela Saini - [81]Digitization Beats Deforestation - Digitization Beats Deforestation - Geolocation, supply-chain tracking, and digital payments are the tools - that will enable farmers and consumers to make better choices. + Andy Greenberg - Alloysius Attah + • [67] + Scabies Is Making a Comeback + Science + [68] + Scabies Is Making a Comeback - [82]WIRED - WIRED is where tomorrow is realized. It is the essential source of - information and ideas that make sense of a world in constant - transformation. The WIRED conversation illuminates how technology is - changing every aspect of our lives—from culture to business, science to - design. The breakthroughs and innovations that we uncover lead to new - ways of thinking, new connections, and new industries. + David Cox - (BUTTON) More From WIRED - * [83]Subscribe - * [84]Newsletters - * [85]FAQ - * [86]WIRED Staff - * [87]Editorial Standards - * [88]Archive - * [89]RSS - * [90]Accessibility Help + • [69] + Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video Games + Culture + [70] + Cult of the Lamb’s ‘Sex Update’ Is a Good Sign for Horny Video Games - (BUTTON) Reviews and Guides - * [91]Reviews - * [92]Buying Guides - * [93]Coupons - * [94]Mattresses - * [95]Electric Bikes - * [96]Fitness Trackers - * [97]Streaming Guides + Megan Farokhmanesh - * [98]Advertise - * [99]Contact Us - * [100]Customer Care - * [101]Jobs - * [102]Press Center - * [103]Condé Nast Store + • - © 2024 Condé Nast. All rights reserved. Use of this site constitutes - acceptance of our [104]User Agreement and [105]Privacy Policy and - Cookie Statement and [106]Your California Privacy Rights. WIRED may - earn a portion of sales from products that are purchased through our - site as part of our Affiliate Partnerships with retailers. The material - on this site may not be reproduced, distributed, transmitted, cached or - otherwise used, except with the prior written permission of Condé Nast. - [107]Ad Choices +Since the emails are, well, just emails, sometimes I hit Reply (by typing “r”). +On a thread that went dormant a decade ago. I don't always offer context. +Sometimes I just write, “Curious … how did this turn out?” I used to feel I was +intruding, to just drop in like that. But what the hell. It's been a long +pandemic. No one has to write back. + +Out go the emails. Most get no reply; some get a bounce-back. But often enough, +people respond at length. Some left the city and came back. Some are up for +coffee. A surprising number are now cyborgs (pacemakers, hearing aids). Some +are rich, some are broke, some are divorced. One is considering being frozen +after death, some are considering getting into crypto, and one has moved to +Miami. None of us understand our children. + +I'm thinking of starting a Sunday morning waffle breakfast for [71]vaccinated +people to come stare at each other. It's one thing to email after 10 years, but +everyone appreciates an invitation to breakfast. Maybe I'll set up some sort of +internet-connected LED scrolly screen, like they put on food carts, so +out-of-towners can leave messages. I gotta have something to configure. + +If you'd asked me, back when I was still configuring, not yet configured, +exactly why I was nurturing these dozens of dotfiles, I'd have had a hard time +telling you. I would have said: I want a pure and sleek experience. I want the +computer working for me, augmenting my dumb brain with its immense arithmetical +speed. I want access to my whole digital self. So I am very surprised that the +terminal result of my efforts is not some sort of ecstatic communion with the +internet, or even with my own computer. The function of my whole big +orchestrated, tagged, integrated system was merely to rekindle old ties. What +was all that configuration for? It was, in all sincerity, for waffles. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +This article appears in the April 2022 issue. [72]Subscribe now. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +More Great WIRED Stories + + • 📩 The latest on tech, science, and more: [73]Get our newsletters! + • [74]Jacques Vallée still doesn’t know what UFOs are + • When should you [75]test yourself for Covid-19? + • [76]How to leave your photos to someone when you die + • TV struggles to put [77]Silicon Valley on the screen + • [78]YouTube's captions insert explicit language in kids' videos + • 👁️ Explore AI like never before with [79]our new database + • 🎧 Things not sounding right? Check out our favorite [80]wireless headphones + , [81]soundbars, and [82]Bluetooth speakers + +[83]Paul Ford is a writer, programmer, and software entrepreneur. He lives in +Brooklyn. +Contributor + + • [84] + +Topics[85]magazine-30.04[86]crypto[87]NFTs[88]software[89]Web3 +More from WIRED +[90] +A Key to Detecting Brain Disease Earlier Than Ever +[91] +A Key to Detecting Brain Disease Earlier Than Ever +Treatment of Parkinson’s, Huntington’s, ALS, and other brain diseases depends +on reliable detection—especially in those who don’t even know they’re at risk. +An innovative scratch-and-sniff test can help. + +Michael J. Fox + +[92] +The Danger of Digitizing Everything +[93] +The Danger of Digitizing Everything +The creep of conducting our day-to-day interactions over screens has reached a +breaking point—and it threatens to push out everyone but those with the “right” +access. + +Naomi Alderman + +[94] +Forget Growth. Optimize for Resilience +[95] +Forget Growth. Optimize for Resilience +The tech economy is all about getting those next 10,000 users. What if it +maximized something else for a change? + +Paul Ford + +[96] +AI Needs to Be Both Trusted and Trustworthy +[97] +AI Needs to Be Both Trusted and Trustworthy +Through sensors, actuators, and IoT devices, AI is going to be interacting with +the physical plane on a massive scale. The question is, how does one build +trust in its actions? + +Bruce Schneier + +[98] +To Own the Future, Read Shakespeare +[99] +To Own the Future, Read Shakespeare +Tech and the liberal arts have always been at war. Don’t assume Silicon Valley +will win. + +Paul Ford + +[100] +Gene Editing Needs to Be for Everyone +[101] +Gene Editing Needs to Be for Everyone +Crispr recently marked a major milestone in medicine. But it's not time for a +victory lap—the race is just beginning. + +Jennifer Doudna + +[102] +Big Tech Won’t Let You Leave. Here's a Way Out +[103] +Big Tech Won’t Let You Leave. Here's a Way Out +The year 2023 saw the “enshittification” of platforms from Facebook to Google +Search. A new exit strategy means platforms will have to play nicely with your +data, even if you leave for a rival. + +Cory Doctorow + +[104] +The Creative’s Toolbox Gets an AI Upgrade +[105] +The Creative’s Toolbox Gets an AI Upgrade +It’s easy to accuse algorithms of stifling creativity, but designers of every +stripe should be embracing their multidisciplinary abilities. + +Suhair Khan + +[106]WIRED +WIRED is where tomorrow is realized. It is the essential source of information +and ideas that make sense of a world in constant transformation. The WIRED +conversation illuminates how technology is changing every aspect of our +lives—from culture to business, science to design. The breakthroughs and +innovations that we uncover lead to new ways of thinking, new connections, and +new industries. + +More From WIRED + + • [108]Subscribe + • [109]Newsletters + • [110]FAQ + • [111]WIRED Staff + • [112]Editorial Standards + • [113]Archive + • [114]RSS + • [115]Accessibility Help + +Reviews and Guides + + • [117]Reviews + • [118]Buying Guides + • [119]Coupons + • [120]Mattresses + • [121]Electric Bikes + • [122]Fitness Trackers + • [123]Streaming Guides + + • [124]Advertise + • [125]Contact Us + • [126]Customer Care + • [127]Jobs + • [128]Press Center + • [129]Condé Nast Store + +© 2024 Condé Nast. All rights reserved. Use of this site constitutes acceptance +of our [130]User Agreement and [131]Privacy Policy and Cookie Statement and +[132]Your California Privacy Rights. WIRED may earn a portion of sales from +products that are purchased through our site as part of our Affiliate +Partnerships with retailers. The material on this site may not be reproduced, +distributed, transmitted, cached or otherwise used, except with the prior +written permission of Condé Nast. [133]Ad Choices Select international site - (BUTTON) United States - * [108]UK - * [109]Italia - * [110]Japón - * [111]Czech Republic & Slovakia +United States - * - * - * - * - * - * + • [135]UK + • [136]Italia + • [137]Japón + • [138]Czech Republic & Slovakia - (BUTTON) Do Not Sell My Personal Info + • [139] + • [140] + • [141] + • [142] + • [143] + • [144] -References +Do Not Sell My Personal Info - Visible links: - 1. https://www.wired.com/feed/rss - 2. https://www.googletagmanager.com/ns.html?id=GTM-5HBJC2K - 3. https://www.wired.com/story/i-finally-reached-computing-nirvana-what-was-it-all-for/#main-content - 4. https://www.wired.com/account/saved - 5. https://www.wired.com/ - 6. https://www.wired.com/category/backchannel/ - 7. https://www.wired.com/category/business/ - 8. https://www.wired.com/category/culture/ - 9. https://www.wired.com/category/gear/ - 10. https://www.wired.com/category/ideas/ - 11. https://www.wired.com/category/politics/ - 12. https://www.wired.com/category/science/ - 13. https://www.wired.com/category/security/ - 14. https://shop.wired.com/ - 15. https://www.wired.com/account/saved - 16. https://www.wired.com/auth/initiate?redirectURL=/story/i-finally-reached-computing-nirvana-what-was-it-all-for/&source=VERSO_NAVIGATION - 17. https://www.wired.com/search/ - 18. https://www.wired.com/category/backchannel/ - 19. https://www.wired.com/category/business/ - 20. https://www.wired.com/category/culture/ - 21. https://www.wired.com/category/gear/ - 22. https://www.wired.com/category/ideas/ - 23. https://www.wired.com/category/politics/ - 24. https://www.wired.com/category/science/ - 25. https://www.wired.com/category/security/ - 26. https://shop.wired.com/ - 27. https://www.wired.com/podcasts/ - 28. https://www.wired.com/video/ - 29. https://www.wired.com/wired-world/ - 30. https://www.wired.com/category/artificial-intelligence/ - 31. https://www.wired.com/category/science/environment-climate-change/ - 32. https://www.wired.com/tag/video-games/ - 33. https://www.wired.com/newsletter - 34. https://www.wired.com/magazine - 35. https://events.wired.com/livewired - 36. https://www.wired.com/category/wiredinsider/ - 37. https://jobs.wired.com/?source=navbar - 38. https://www.wired.com/coupons - 39. https://www.wired.com/author/paul-ford - 40. https://www.wired.com/category/ideas - 41. https://www.wired.com/tag/computers/ - 42. https://www.wired.com/tag/software/ - 43. https://www.wired.com/story/best-way-learn-online-be-lurker/ - 44. https://www.wired.com/story/coders-efficiency-is-beautiful/ - 45. https://www.wired.com/story/productivity-got-done-list/ - 46. https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 47. https://www.wired.com/story/emmys-streaming-succession-the-bear-hbo-hulu/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 48. https://www.wired.com/story/leftoverlocals-gpu-vulnerability-generative-ai/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 49. https://www.wired.com/story/trump-iowa-conspiracies/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 50. https://www.wired.com/tag/cryptocurrency/ - 51. https://www.wired.com/tag/nfts/ - 52. https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 53. https://www.wired.com/story/emmys-streaming-succession-the-bear-hbo-hulu/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 54. https://www.wired.com/story/leftoverlocals-gpu-vulnerability-generative-ai/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 55. https://www.wired.com/story/trump-iowa-conspiracies/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 56. https://www.wired.com/tag/vaccines/ - 57. https://subscribe.wired.com/subscribe/splits/wired/WIR_Edit_Hardcoded?source=ArticleEnd_CMlink - 58. https://www.wired.com/newsletter?sourceCode=BottomStories - 59. https://www.wired.com/story/jacques-vallee-still-doesnt-know-what-ufos-are/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 60. https://www.wired.com/story/when-to-test-for-covid-vaccinated/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 61. https://www.wired.com/story/how-to-leave-photos-behind-when-you-die/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 62. https://www.wired.com/story/wecrashed-tv-silicon-valley/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 63. https://www.wired.com/story/youtubes-captions-insert-explicit-language-kids-videos/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 64. https://www.wired.com/category/artificial-intelligence/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 65. https://www.wired.com/gallery/best-wireless-headphones/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 66. https://www.wired.com/gallery/best-soundbars/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 67. https://www.wired.com/gallery/best-bluetooth-speakers/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc - 68. https://www.wired.com/author/paul-ford - 69. https://www.wired.com/tag/magazine-3004/ - 70. https://www.wired.com/tag/crypto/ - 71. https://www.wired.com/tag/nfts/ - 72. https://www.wired.com/tag/software/ - 73. https://www.wired.com/tag/web3/ - 74. https://www.wired.com/story/a-key-to-detecting-brain-disease-earlier-than-ever/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 75. https://www.wired.com/story/the-danger-of-digitizing-everything/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 76. https://www.wired.com/story/regulators-are-finally-catching-up-with-big-tech/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 77. https://www.wired.com/story/get-ready-for-the-great-ai-disappointment/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 78. https://www.wired.com/story/the-oceans-mysteries-and-marvels-are-about-to-reach-new-depths/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 79. https://www.wired.com/story/ai-needs-to-be-both-trusted-and-trustworthy/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 80. https://www.wired.com/story/the-end-of-one-size-fits-all-health-care/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 81. https://www.wired.com/story/digitization-beats-deforestation/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 82. https://www.wired.com/ - 83. https://www.wired.com/subscribe/ - 84. https://www.wired.com/newsletter?sourceCode=HeaderAndFooter - 85. https://www.wired.com/about/faq/ - 86. https://www.wired.com/wired-staff/ - 87. https://www.wired.com/about/wired-on-background-policy/ - 88. https://archive.wired.com/t/storefront/storefront - 89. https://www.wired.com/about/rss-feeds/ - 90. https://www.wired.com/about/accessibility-help/ - 91. https://www.wired.com/category/gear/reviews/ - 92. https://www.wired.com/category/gear/buying-guides/ - 93. https://www.wired.com/coupons - 94. https://www.wired.com/gallery/best-mattresses/ - 95. https://www.wired.com/gallery/best-electric-bikes/ - 96. https://www.wired.com/gallery/best-fitness-tracker/ - 97. https://www.wired.com/tag/culture-guides/ - 98. https://www.condenast.com/brands/wired - 99. https://www.wired.com/about/feedback/ - 100. https://subscriptions.wired.com/pubs/N3/WIR/Register.jsp?cds_page_id=175371&cds_mag_code=WIR&id=1423757547774&lsid=50431012277019467&vid=1 - 101. https://www.wired.com/about/wired-jobs/ - 102. https://www.wired.com/about/press/ - 103. https://www.condenaststore.com/ - 104. https://www.condenast.com/user-agreement/ - 105. http://www.condenast.com/privacy-policy#privacypolicy - 106. http://www.condenast.com/privacy-policy#privacypolicy-california - 107. http://www.condenast.com/privacy-policy#privacypolicy-optout - 108. https://www.wired.co.uk/ - 109. https://www.wired.it/ - 110. https://wired.jp/ - 111. https://www.wired.cz/ +References: - Hidden links: - 113. https://www.wired.com/story/best-way-learn-online-be-lurker/ - 114. https://www.wired.com/story/coders-efficiency-is-beautiful/ - 115. https://www.wired.com/story/productivity-got-done-list/ - 116. https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 117. https://www.wired.com/story/emmys-streaming-succession-the-bear-hbo-hulu/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 118. https://www.wired.com/story/leftoverlocals-gpu-vulnerability-generative-ai/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 119. https://www.wired.com/story/trump-iowa-conspiracies/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 120. https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 121. https://www.wired.com/story/emmys-streaming-succession-the-bear-hbo-hulu/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 122. https://www.wired.com/story/leftoverlocals-gpu-vulnerability-generative-ai/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 123. https://www.wired.com/story/trump-iowa-conspiracies/#intcid=_wired-right-rail_74dfed7c-3bc1-442e-a3a4-9ff009852b0c_popular4-1-reranked-by-vidi_fallback_cral-top2-2 - 124. https://www.twitter.com/https://twitter.com/ftrain - 125. https://www.wired.com/story/a-key-to-detecting-brain-disease-earlier-than-ever/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 126. https://www.wired.com/story/the-danger-of-digitizing-everything/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 127. https://www.wired.com/story/regulators-are-finally-catching-up-with-big-tech/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 128. https://www.wired.com/story/get-ready-for-the-great-ai-disappointment/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 129. https://www.wired.com/story/the-oceans-mysteries-and-marvels-are-about-to-reach-new-depths/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 130. https://www.wired.com/story/ai-needs-to-be-both-trusted-and-trustworthy/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 131. https://www.wired.com/story/the-end-of-one-size-fits-all-health-care/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 132. https://www.wired.com/story/digitization-beats-deforestation/#intcid=_wired-bottom-recirc-v2_f8b4e84f-1fac-4055-939a-7c08f87ffd72_text2vec1-reranked-by-vidi_fallback_cral-top2-2 - 133. https://www.facebook.com/wired/ - 134. https://twitter.com/wired/ - 135. https://pinterest.com/wired/ - 136. https://www.youtube.com/user/wired/ - 137. https://instagram.com/wired/ - 138. https://www.tiktok.com/@wired?lang=en +[1] https://www.wired.com/story/i-finally-reached-computing-nirvana-what-was-it-all-for/#main-content +[3] https://www.wired.com/account/saved +[5] https://www.wired.com/ +[6] https://www.wired.com/category/backchannel/ +[7] https://www.wired.com/category/business/ +[8] https://www.wired.com/category/culture/ +[9] https://www.wired.com/category/gear/ +[10] https://www.wired.com/category/ideas/ +[11] https://www.wired.com/category/politics/ +[12] https://www.wired.com/category/science/ +[13] https://www.wired.com/category/security/ +[14] https://shop.wired.com/ +[16] https://www.wired.com/account/saved +[18] https://www.wired.com/auth/initiate?redirectURL=%2Fstory%2Fi-finally-reached-computing-nirvana-what-was-it-all-for%2F&source=VERSO_NAVIGATION +[19] https://www.wired.com/search/ +[20] https://www.wired.com/category/backchannel/ +[21] https://www.wired.com/category/business/ +[22] https://www.wired.com/category/culture/ +[23] https://www.wired.com/category/gear/ +[24] https://www.wired.com/category/ideas/ +[25] https://www.wired.com/category/politics/ +[26] https://www.wired.com/category/science/ +[27] https://www.wired.com/category/security/ +[28] https://shop.wired.com/ +[29] https://www.wired.com/podcasts/ +[30] https://www.wired.com/video/ +[31] https://www.wired.com/wired-world/ +[32] https://www.wired.com/category/artificial-intelligence/ +[33] https://www.wired.com/category/science/environment-climate-change/ +[34] https://www.wired.com/tag/video-games/ +[35] https://www.wired.com/newsletter +[36] https://www.wired.com/magazine +[37] https://events.wired.com/livewired +[38] https://www.wired.com/category/wiredinsider/ +[39] https://jobs.wired.com/?source=navbar +[40] https://www.wired.com/coupons +[41] https://www.wired.com/author/paul-ford +[42] https://www.wired.com/category/ideas +[45] https://www.wired.com/tag/computers/ +[46] https://www.wired.com/tag/software/ +[47] https://www.wired.com/story/best-way-learn-online-be-lurker/ +[48] https://www.wired.com/story/best-way-learn-online-be-lurker/ +[49] https://www.wired.com/story/coders-efficiency-is-beautiful/ +[50] https://www.wired.com/story/coders-efficiency-is-beautiful/ +[51] https://www.wired.com/story/productivity-got-done-list/ +[52] https://www.wired.com/story/productivity-got-done-list/ +[53] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[54] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[55] https://www.wired.com/story/27-year-old-codebreaker-busted-myth-bitcoins-anonymity/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[56] https://www.wired.com/story/27-year-old-codebreaker-busted-myth-bitcoins-anonymity/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[57] https://www.wired.com/story/scabies-outbreak-uk-europe-treatment-shortages-drug-resistance-permethrin-ivermectin/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[58] https://www.wired.com/story/scabies-outbreak-uk-europe-treatment-shortages-drug-resistance-permethrin-ivermectin/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[59] https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[60] https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[61] https://www.wired.com/tag/cryptocurrency/ +[62] https://www.wired.com/tag/nfts/ +[63] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[64] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[65] https://www.wired.com/story/27-year-old-codebreaker-busted-myth-bitcoins-anonymity/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[66] https://www.wired.com/story/27-year-old-codebreaker-busted-myth-bitcoins-anonymity/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[67] https://www.wired.com/story/scabies-outbreak-uk-europe-treatment-shortages-drug-resistance-permethrin-ivermectin/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[68] https://www.wired.com/story/scabies-outbreak-uk-europe-treatment-shortages-drug-resistance-permethrin-ivermectin/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[69] https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[70] https://www.wired.com/story/cult-of-the-lamb-sins-of-the-flesh-sex-update-horny-games/#intcid=_wired-right-rail_7824e7f5-690c-4792-a1a6-f9f6a2517e3a_popular4-1-reranked-by-vidi_fallback_cral-top2-2 +[71] https://www.wired.com/tag/vaccines/ +[72] https://subscribe.wired.com/subscribe/splits/wired/WIR_Edit_Hardcoded?source=ArticleEnd_CMlink +[73] https://www.wired.com/newsletter?sourceCode=BottomStories +[74] https://www.wired.com/story/jacques-vallee-still-doesnt-know-what-ufos-are/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[75] https://www.wired.com/story/when-to-test-for-covid-vaccinated/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[76] https://www.wired.com/story/how-to-leave-photos-behind-when-you-die/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[77] https://www.wired.com/story/wecrashed-tv-silicon-valley/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[78] https://www.wired.com/story/youtubes-captions-insert-explicit-language-kids-videos/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[79] https://www.wired.com/category/artificial-intelligence/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[80] https://www.wired.com/gallery/best-wireless-headphones/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[81] https://www.wired.com/gallery/best-soundbars/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[82] https://www.wired.com/gallery/best-bluetooth-speakers/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc +[83] https://www.wired.com/author/paul-ford +[84] https://www.twitter.com/https://twitter.com/ftrain +[85] https://www.wired.com/tag/magazine-3004/ +[86] https://www.wired.com/tag/crypto/ +[87] https://www.wired.com/tag/nfts/ +[88] https://www.wired.com/tag/software/ +[89] https://www.wired.com/tag/web3/ +[90] https://www.wired.com/story/a-key-to-detecting-brain-disease-earlier-than-ever/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[91] https://www.wired.com/story/a-key-to-detecting-brain-disease-earlier-than-ever/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[92] https://www.wired.com/story/the-danger-of-digitizing-everything/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[93] https://www.wired.com/story/the-danger-of-digitizing-everything/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[94] https://www.wired.com/story/forget-growth-optimize-resilience/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[95] https://www.wired.com/story/forget-growth-optimize-resilience/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[96] https://www.wired.com/story/ai-needs-to-be-both-trusted-and-trustworthy/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[97] https://www.wired.com/story/ai-needs-to-be-both-trusted-and-trustworthy/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[98] https://www.wired.com/story/own-future-artificial-intelligence-read-shakespeare/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[99] https://www.wired.com/story/own-future-artificial-intelligence-read-shakespeare/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[100] https://www.wired.com/story/gene-editing-needs-to-be-for-everyone/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[101] https://www.wired.com/story/gene-editing-needs-to-be-for-everyone/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[102] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[103] https://www.wired.com/story/big-tech-wont-let-you-leave-heres-a-way-out/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[104] https://www.wired.com/story/the-creatives-toolbox-gets-an-ai-upgrade/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[105] https://www.wired.com/story/the-creatives-toolbox-gets-an-ai-upgrade/#intcid=_wired-bottom-recirc-version3_6b0d90ba-adca-4eee-a0a5-d5b31ddc96aa_roberta-similarity2-1-with-time-decay +[106] https://www.wired.com/ +[108] https://www.wired.com/subscribe/ +[109] https://www.wired.com/newsletter?sourceCode=HeaderAndFooter +[110] https://www.wired.com/about/faq/ +[111] https://www.wired.com/wired-staff/ +[112] https://www.wired.com/about/wired-on-background-policy/ +[113] https://archive.wired.com/t/storefront/storefront +[114] https://www.wired.com/about/rss-feeds/ +[115] https://www.wired.com/about/accessibility-help/ +[117] https://www.wired.com/category/gear/reviews/ +[118] https://www.wired.com/category/gear/buying-guides/ +[119] https://www.wired.com/coupons +[120] https://www.wired.com/gallery/best-mattresses/ +[121] https://www.wired.com/gallery/best-electric-bikes/ +[122] https://www.wired.com/gallery/best-fitness-tracker/ +[123] https://www.wired.com/tag/culture-guides/ +[124] https://www.condenast.com/brands/wired +[125] https://www.wired.com/about/feedback/ +[126] https://subscriptions.wired.com/pubs/N3/WIR/Register.jsp?cds_page_id=175371&cds_mag_code=WIR&id=1423757547774&lsid=50431012277019467&vid=1 +[127] https://www.wired.com/about/wired-jobs/ +[128] https://www.wired.com/about/press/ +[129] https://www.condenaststore.com/ +[130] https://www.condenast.com/user-agreement/ +[131] http://www.condenast.com/privacy-policy#privacypolicy +[132] http://www.condenast.com/privacy-policy#privacypolicy-california +[133] http://www.condenast.com/privacy-policy#privacypolicy-optout +[135] https://www.wired.co.uk/ +[136] https://www.wired.it/ +[137] https://wired.jp/ +[138] https://www.wired.cz/ +[139] https://www.facebook.com/wired/ +[140] https://twitter.com/wired/ +[141] https://pinterest.com/wired/ +[142] https://www.youtube.com/user/wired/ +[143] https://instagram.com/wired/ +[144] https://www.tiktok.com/@wired?lang=en diff --git a/static/archive/www-wunc-org-fstofo.txt b/static/archive/www-wunc-org-fstofo.txt index 99e3511..cc8abf4 100644 --- a/static/archive/www-wunc-org-fstofo.txt +++ b/static/archive/www-wunc-org-fstofo.txt @@ -1,1138 +1,1121 @@ - IFRAME: [1]https://www.googletagmanager.com/ns.html?id=GTM-N39QFDR +[1] [svg] +[3][ ]Search Query Show Search + • News + □ [6]North Carolina News + □ [7]NPR News + □ [8]Politics + □ [9]Arts & Culture + □ [10]Race & Demographics + □ [11]Business & Economy + □ [12]Education + □ [13]Environment + □ [14]Health + □ [15]Science & Technology + □ [16]Military + □ [17]Sports + □ [18]Weather + □ [19]Ethics + □ [20]Corrections & Clarifications + □ [21]North Carolina News + □ [22]NPR News + □ [23]Politics + □ [24]Arts & Culture + □ [25]Race & Demographics + □ [26]Business & Economy + □ [27]Education + □ [28]Environment + □ [29]Health + □ [30]Science & Technology + □ [31]Military + □ [32]Sports + □ [33]Weather + □ [34]Ethics + □ [35]Corrections & Clarifications + • Regions + □ [37]Triangle News + □ [38]Triad News + □ [39]Fayetteville Area News + □ [40]Eastern NC News + □ [41]Southeastern NC News + □ [42]Charlotte Area News + □ [43]Western NC News + □ [44]Triangle News + □ [45]Triad News + □ [46]Fayetteville Area News + □ [47]Eastern NC News + □ [48]Southeastern NC News + □ [49]Charlotte Area News + □ [50]Western NC News + • Special Coverage + □ [52]Main Street NC + □ [53]2023 UNC-Chapel Hill Shooting + □ [54]2022 Raleigh Shooting + □ [55]A Teacher in Every Class + □ [56]Behind The Lines + □ [57]Tested: Beyond The Pod + □ [58]The Lives Lost + □ [59]The Killing of Andrew Brown Jr. + □ [60]Calling for Change + □ [61]Lumberton Undeterred + □ [62]Southern Witness + □ [63]Coronavirus Coverage + □ [64]The Cost of Summer + □ [65]A State Divided: HB2 And Transgender Rights + □ [66]Main Street NC + □ [67]2023 UNC-Chapel Hill Shooting + □ [68]2022 Raleigh Shooting + □ [69]A Teacher in Every Class + □ [70]Behind The Lines + □ [71]Tested: Beyond The Pod + □ [72]The Lives Lost + □ [73]The Killing of Andrew Brown Jr. + □ [74]Calling for Change + □ [75]Lumberton Undeterred + □ [76]Southern Witness + □ [77]Coronavirus Coverage + □ [78]The Cost of Summer + □ [79]A State Divided: HB2 And Transgender Rights + • Due South + □ [81]About Due South + □ [82]Shows + □ [83]Contact Due South + □ [84]About Due South + □ [85]Shows + □ [86]Contact Due South + • Programs + □ [88]WUNC Radio Schedule + □ [89]Programs A-Z + □ [90]Due South + □ [91]All Things Considered + □ [92]Morning Edition + □ [93]Back Porch Music + □ [94]Embodied Radio Show + □ [95]Sound Opinions + □ [96]The Thistle and Shamrock + □ [97]Youth Reporting Institute + □ [98]The People's Pharmacy + □ [99]American Homefront Project + □ [100]Fresh Air + □ [101]The Poetry Café + □ [102]NPR Music & Concerts + □ [103]WUNC Radio Schedule + □ [104]Programs A-Z + □ [105]Due South + □ [106]All Things Considered + □ [107]Morning Edition + □ [108]Back Porch Music + □ [109]Embodied Radio Show + □ [110]Sound Opinions + □ [111]The Thistle and Shamrock + □ [112]Youth Reporting Institute + □ [113]The People's Pharmacy + □ [114]American Homefront Project + □ [115]Fresh Air + □ [116]The Poetry Café + □ [117]NPR Music & Concerts + • Podcasts + □ [119]Podcasts From WUNC + □ [120]The Broadside + □ [121]Embodied Podcast + □ [122]WUNC Politics + □ [123]Me & My Muslim Friends + □ [124]Podcasts From WUNC + □ [125]The Broadside + □ [126]Embodied Podcast + □ [127]WUNC Politics + □ [128]Me & My Muslim Friends + • About + □ [130]About WUNC + □ [131]Ways To Listen To WUNC Online + □ [132]About HD Radio + □ [133]Station Policies & Financial Documents + □ [134]Committee on Inclusion Diversity Equity Accountability + □ [135]WUNC Public Radio, LLC Board of Directors + □ [136]People + □ [137]Ways to Connect + □ [138]WUNC Jobs + □ [139]WUNC Community Discussion Rules + □ [140]Telling Public Radio’s Story + □ [141]Ethics + □ [142]Contact Us + □ [143]About WUNC + □ [144]Ways To Listen To WUNC Online + □ [145]About HD Radio + □ [146]Station Policies & Financial Documents + □ [147]Committee on Inclusion Diversity Equity Accountability + □ [148]WUNC Public Radio, LLC Board of Directors + □ [149]People + □ [150]Ways to Connect + □ [151]WUNC Jobs + □ [152]WUNC Community Discussion Rules + □ [153]Telling Public Radio’s Story + □ [154]Ethics + □ [155]Contact Us + • Support + □ [157]Year-End Giving Deadlines to Know + □ [158]Ways to Give to WUNC + □ [159]WUNC Thank You Gifts + □ [160]Drawing Rules & Entry Form + □ [161]WUNC Sustainer Program + □ [162]Update Sustainer Information + □ [163]Increase Sustainer Gift + □ [164]Join WUNC's Leadership Circle + □ [165]Donate Your Vehicle to WUNC + □ [166]Be a WUNC Volunteer + □ [167]Include WUNC in Your Will + □ [168]Business Sponsors & Underwriting + □ [169]Community Sponsor Circle + □ [170]Other Ways To Give + □ [171]Year-End Giving Deadlines to Know + □ [172]Ways to Give to WUNC + □ [173]WUNC Thank You Gifts + □ [174]Drawing Rules & Entry Form + □ [175]WUNC Sustainer Program + □ [176]Update Sustainer Information + □ [177]Increase Sustainer Gift + □ [178]Join WUNC's Leadership Circle + □ [179]Donate Your Vehicle to WUNC + □ [180]Be a WUNC Volunteer + □ [181]Include WUNC in Your Will + □ [182]Business Sponsors & Underwriting + □ [183]Community Sponsor Circle + □ [184]Other Ways To Give + • [185]WUNC Music + • [186]Search - (BUTTON) - ____________________Search Query (BUTTON) Show Search - * News - (BUTTON) - + [2]North Carolina News - + [3]NPR News - + [4]Politics - + [5]Arts & Culture - + [6]Race & Demographics - + [7]Business & Economy - + [8]Education - + [9]Environment - + [10]Health - + [11]Science & Technology - + [12]Military - + [13]Sports - + [14]Weather - + [15]Ethics - + [16]Corrections & Clarifications - + [17]North Carolina News - + [18]NPR News - + [19]Politics - + [20]Arts & Culture - + [21]Race & Demographics - + [22]Business & Economy - + [23]Education - + [24]Environment - + [25]Health - + [26]Science & Technology - + [27]Military - + [28]Sports - + [29]Weather - + [30]Ethics - + [31]Corrections & Clarifications - * Regions - (BUTTON) - + [32]Triangle News - + [33]Triad News - + [34]Fayetteville Area News - + [35]Eastern NC News - + [36]Southeastern NC News - + [37]Charlotte Area News - + [38]Western NC News - + [39]Triangle News - + [40]Triad News - + [41]Fayetteville Area News - + [42]Eastern NC News - + [43]Southeastern NC News - + [44]Charlotte Area News - + [45]Western NC News - * Special Coverage - (BUTTON) - + [46]Main Street NC - + [47]2023 UNC-Chapel Hill Shooting - + [48]2022 Raleigh Shooting - + [49]A Teacher in Every Class - + [50]Behind The Lines - + [51]Tested: Beyond The Pod - + [52]The Lives Lost - + [53]The Killing of Andrew Brown Jr. - + [54]Calling for Change - + [55]Lumberton Undeterred - + [56]Southern Witness - + [57]Coronavirus Coverage - + [58]The Cost of Summer - + [59]A State Divided: HB2 And Transgender Rights - + [60]Main Street NC - + [61]2023 UNC-Chapel Hill Shooting - + [62]2022 Raleigh Shooting - + [63]A Teacher in Every Class - + [64]Behind The Lines - + [65]Tested: Beyond The Pod - + [66]The Lives Lost - + [67]The Killing of Andrew Brown Jr. - + [68]Calling for Change - + [69]Lumberton Undeterred - + [70]Southern Witness - + [71]Coronavirus Coverage - + [72]The Cost of Summer - + [73]A State Divided: HB2 And Transgender Rights - * Due South - (BUTTON) - + [74]About Due South - + [75]Shows - + [76]Contact Due South - + [77]About Due South - + [78]Shows - + [79]Contact Due South - * Programs - (BUTTON) - + [80]WUNC Radio Schedule - + [81]Programs A-Z - + [82]Due South - + [83]All Things Considered - + [84]Morning Edition - + [85]Back Porch Music - + [86]Embodied Radio Show - + [87]Sound Opinions - + [88]The Thistle and Shamrock - + [89]Youth Reporting Institute - + [90]The People's Pharmacy - + [91]American Homefront Project - + [92]Fresh Air - + [93]The Poetry Café - + [94]NPR Music & Concerts - + [95]WUNC Radio Schedule - + [96]Programs A-Z - + [97]Due South - + [98]All Things Considered - + [99]Morning Edition - + [100]Back Porch Music - + [101]Embodied Radio Show - + [102]Sound Opinions - + [103]The Thistle and Shamrock - + [104]Youth Reporting Institute - + [105]The People's Pharmacy - + [106]American Homefront Project - + [107]Fresh Air - + [108]The Poetry Café - + [109]NPR Music & Concerts - * Podcasts - (BUTTON) - + [110]Podcasts From WUNC - + [111]The Broadside - + [112]Embodied Podcast - + [113]WUNC Politics - + [114]Me & My Muslim Friends - + [115]Podcasts From WUNC - + [116]The Broadside - + [117]Embodied Podcast - + [118]WUNC Politics - + [119]Me & My Muslim Friends - * About - (BUTTON) - + [120]About WUNC - + [121]Ways To Listen To WUNC Online - + [122]About HD Radio - + [123]Station Policies & Financial Documents - + [124]Committee on Inclusion Diversity Equity Accountability - + [125]WUNC Public Radio, LLC Board of Directors - + [126]People - + [127]Ways to Connect - + [128]WUNC Jobs - + [129]WUNC Community Discussion Rules - + [130]Telling Public Radio’s Story - + [131]Ethics - + [132]Contact Us - + [133]About WUNC - + [134]Ways To Listen To WUNC Online - + [135]About HD Radio - + [136]Station Policies & Financial Documents - + [137]Committee on Inclusion Diversity Equity Accountability - + [138]WUNC Public Radio, LLC Board of Directors - + [139]People - + [140]Ways to Connect - + [141]WUNC Jobs - + [142]WUNC Community Discussion Rules - + [143]Telling Public Radio’s Story - + [144]Ethics - + [145]Contact Us - * Support - (BUTTON) - + [146]Year-End Giving Deadlines to Know - + [147]Ways to Give to WUNC - + [148]WUNC Thank You Gifts - + [149]Drawing Rules & Entry Form - + [150]WUNC Sustainer Program - + [151]Update Sustainer Information - + [152]Increase Sustainer Gift - + [153]Join WUNC's Leadership Circle - + [154]Donate Your Vehicle to WUNC - + [155]Be a WUNC Volunteer - + [156]Include WUNC in Your Will - + [157]Business Sponsors & Underwriting - + [158]Community Sponsor Circle - + [159]Other Ways To Give - + [160]Year-End Giving Deadlines to Know - + [161]Ways to Give to WUNC - + [162]WUNC Thank You Gifts - + [163]Drawing Rules & Entry Form - + [164]WUNC Sustainer Program - + [165]Update Sustainer Information - + [166]Increase Sustainer Gift - + [167]Join WUNC's Leadership Circle - + [168]Donate Your Vehicle to WUNC - + [169]Be a WUNC Volunteer - + [170]Include WUNC in Your Will - + [171]Business Sponsors & Underwriting - + [172]Community Sponsor Circle - + [173]Other Ways To Give - * [174]WUNC Music - * [175]Search +Bringing The World Home To You - Bringing The World Home To You - © 2024 WUNC North Carolina Public Radio - 120 Friday Center Dr - Chapel Hill, NC 27517 - 919.445.9150 | 800.962.9862 +© 2024 WUNC North Carolina Public Radio +120 Friday Center Dr +Chapel Hill, NC 27517 +919.445.9150 | 800.962.9862 +Menu +[188] [svg] +91.5 Chapel Hill 88.9 Manteo 90.9 Rocky Mount 91.1 Welcome 91.9 Fayetteville +90.5 Buxton 94.1 Lumberton 99.9 Southern Pines 89.9 Chadbourn +Show Search +[190][ ]Search Query +[192]Donate +Play Live Radio +Next Up: +0:00 +0:00 +0:00 0:00 +Available On Air Stations - (BUTTON) Menu - 91.5 Chapel Hill 88.9 Manteo 90.9 Rocky Mount 91.1 Welcome 91.9 - Fayetteville 90.5 Buxton 94.1 Lumberton 99.9 Southern Pines 89.9 - Chadbourn - (BUTTON) Show Search - ____________________Search Query (BUTTON) - [176]Donate + • On Air Now Playing WUNC + • On Air Now Playing WUNC Music - (BUTTON) (BUTTON) - (BUTTON) - Play Live Radio - Next Up: - 0:00 - 0:00 - 0:00 0:00 - (BUTTON) (BUTTON) - Available On Air Stations - * (BUTTON) On Air Now Playing WUNC - * (BUTTON) On Air Now Playing WUNC Music +All Streams - (BUTTON) - (BUTTON) All Streams + • News + □ [203]North Carolina News + □ [204]NPR News + □ [205]Politics + □ [206]Arts & Culture + □ [207]Race & Demographics + □ [208]Business & Economy + □ [209]Education + □ [210]Environment + □ [211]Health + □ [212]Science & Technology + □ [213]Military + □ [214]Sports + □ [215]Weather + □ [216]Ethics + □ [217]Corrections & Clarifications + □ [218]North Carolina News + □ [219]NPR News + □ [220]Politics + □ [221]Arts & Culture + □ [222]Race & Demographics + □ [223]Business & Economy + □ [224]Education + □ [225]Environment + □ [226]Health + □ [227]Science & Technology + □ [228]Military + □ [229]Sports + □ [230]Weather + □ [231]Ethics + □ [232]Corrections & Clarifications + • Regions + □ [234]Triangle News + □ [235]Triad News + □ [236]Fayetteville Area News + □ [237]Eastern NC News + □ [238]Southeastern NC News + □ [239]Charlotte Area News + □ [240]Western NC News + □ [241]Triangle News + □ [242]Triad News + □ [243]Fayetteville Area News + □ [244]Eastern NC News + □ [245]Southeastern NC News + □ [246]Charlotte Area News + □ [247]Western NC News + • Special Coverage + □ [249]Main Street NC + □ [250]2023 UNC-Chapel Hill Shooting + □ [251]2022 Raleigh Shooting + □ [252]A Teacher in Every Class + □ [253]Behind The Lines + □ [254]Tested: Beyond The Pod + □ [255]The Lives Lost + □ [256]The Killing of Andrew Brown Jr. + □ [257]Calling for Change + □ [258]Lumberton Undeterred + □ [259]Southern Witness + □ [260]Coronavirus Coverage + □ [261]The Cost of Summer + □ [262]A State Divided: HB2 And Transgender Rights + □ [263]Main Street NC + □ [264]2023 UNC-Chapel Hill Shooting + □ [265]2022 Raleigh Shooting + □ [266]A Teacher in Every Class + □ [267]Behind The Lines + □ [268]Tested: Beyond The Pod + □ [269]The Lives Lost + □ [270]The Killing of Andrew Brown Jr. + □ [271]Calling for Change + □ [272]Lumberton Undeterred + □ [273]Southern Witness + □ [274]Coronavirus Coverage + □ [275]The Cost of Summer + □ [276]A State Divided: HB2 And Transgender Rights + • Due South + □ [278]About Due South + □ [279]Shows + □ [280]Contact Due South + □ [281]About Due South + □ [282]Shows + □ [283]Contact Due South + • Programs + □ [285]WUNC Radio Schedule + □ [286]Programs A-Z + □ [287]Due South + □ [288]All Things Considered + □ [289]Morning Edition + □ [290]Back Porch Music + □ [291]Embodied Radio Show + □ [292]Sound Opinions + □ [293]The Thistle and Shamrock + □ [294]Youth Reporting Institute + □ [295]The People's Pharmacy + □ [296]American Homefront Project + □ [297]Fresh Air + □ [298]The Poetry Café + □ [299]NPR Music & Concerts + □ [300]WUNC Radio Schedule + □ [301]Programs A-Z + □ [302]Due South + □ [303]All Things Considered + □ [304]Morning Edition + □ [305]Back Porch Music + □ [306]Embodied Radio Show + □ [307]Sound Opinions + □ [308]The Thistle and Shamrock + □ [309]Youth Reporting Institute + □ [310]The People's Pharmacy + □ [311]American Homefront Project + □ [312]Fresh Air + □ [313]The Poetry Café + □ [314]NPR Music & Concerts + • Podcasts + □ [316]Podcasts From WUNC + □ [317]The Broadside + □ [318]Embodied Podcast + □ [319]WUNC Politics + □ [320]Me & My Muslim Friends + □ [321]Podcasts From WUNC + □ [322]The Broadside + □ [323]Embodied Podcast + □ [324]WUNC Politics + □ [325]Me & My Muslim Friends + • About + □ [327]About WUNC + □ [328]Ways To Listen To WUNC Online + □ [329]About HD Radio + □ [330]Station Policies & Financial Documents + □ [331]Committee on Inclusion Diversity Equity Accountability + □ [332]WUNC Public Radio, LLC Board of Directors + □ [333]People + □ [334]Ways to Connect + □ [335]WUNC Jobs + □ [336]WUNC Community Discussion Rules + □ [337]Telling Public Radio’s Story + □ [338]Ethics + □ [339]Contact Us + □ [340]About WUNC + □ [341]Ways To Listen To WUNC Online + □ [342]About HD Radio + □ [343]Station Policies & Financial Documents + □ [344]Committee on Inclusion Diversity Equity Accountability + □ [345]WUNC Public Radio, LLC Board of Directors + □ [346]People + □ [347]Ways to Connect + □ [348]WUNC Jobs + □ [349]WUNC Community Discussion Rules + □ [350]Telling Public Radio’s Story + □ [351]Ethics + □ [352]Contact Us + • Support + □ [354]Year-End Giving Deadlines to Know + □ [355]Ways to Give to WUNC + □ [356]WUNC Thank You Gifts + □ [357]Drawing Rules & Entry Form + □ [358]WUNC Sustainer Program + □ [359]Update Sustainer Information + □ [360]Increase Sustainer Gift + □ [361]Join WUNC's Leadership Circle + □ [362]Donate Your Vehicle to WUNC + □ [363]Be a WUNC Volunteer + □ [364]Include WUNC in Your Will + □ [365]Business Sponsors & Underwriting + □ [366]Community Sponsor Circle + □ [367]Other Ways To Give + □ [368]Year-End Giving Deadlines to Know + □ [369]Ways to Give to WUNC + □ [370]WUNC Thank You Gifts + □ [371]Drawing Rules & Entry Form + □ [372]WUNC Sustainer Program + □ [373]Update Sustainer Information + □ [374]Increase Sustainer Gift + □ [375]Join WUNC's Leadership Circle + □ [376]Donate Your Vehicle to WUNC + □ [377]Be a WUNC Volunteer + □ [378]Include WUNC in Your Will + □ [379]Business Sponsors & Underwriting + □ [380]Community Sponsor Circle + □ [381]Other Ways To Give + • [382]WUNC Music + • [383]Search - * News - (BUTTON) - + [177]North Carolina News - + [178]NPR News - + [179]Politics - + [180]Arts & Culture - + [181]Race & Demographics - + [182]Business & Economy - + [183]Education - + [184]Environment - + [185]Health - + [186]Science & Technology - + [187]Military - + [188]Sports - + [189]Weather - + [190]Ethics - + [191]Corrections & Clarifications - + [192]North Carolina News - + [193]NPR News - + [194]Politics - + [195]Arts & Culture - + [196]Race & Demographics - + [197]Business & Economy - + [198]Education - + [199]Environment - + [200]Health - + [201]Science & Technology - + [202]Military - + [203]Sports - + [204]Weather - + [205]Ethics - + [206]Corrections & Clarifications - * Regions - (BUTTON) - + [207]Triangle News - + [208]Triad News - + [209]Fayetteville Area News - + [210]Eastern NC News - + [211]Southeastern NC News - + [212]Charlotte Area News - + [213]Western NC News - + [214]Triangle News - + [215]Triad News - + [216]Fayetteville Area News - + [217]Eastern NC News - + [218]Southeastern NC News - + [219]Charlotte Area News - + [220]Western NC News - * Special Coverage - (BUTTON) - + [221]Main Street NC - + [222]2023 UNC-Chapel Hill Shooting - + [223]2022 Raleigh Shooting - + [224]A Teacher in Every Class - + [225]Behind The Lines - + [226]Tested: Beyond The Pod - + [227]The Lives Lost - + [228]The Killing of Andrew Brown Jr. - + [229]Calling for Change - + [230]Lumberton Undeterred - + [231]Southern Witness - + [232]Coronavirus Coverage - + [233]The Cost of Summer - + [234]A State Divided: HB2 And Transgender Rights - + [235]Main Street NC - + [236]2023 UNC-Chapel Hill Shooting - + [237]2022 Raleigh Shooting - + [238]A Teacher in Every Class - + [239]Behind The Lines - + [240]Tested: Beyond The Pod - + [241]The Lives Lost - + [242]The Killing of Andrew Brown Jr. - + [243]Calling for Change - + [244]Lumberton Undeterred - + [245]Southern Witness - + [246]Coronavirus Coverage - + [247]The Cost of Summer - + [248]A State Divided: HB2 And Transgender Rights - * Due South - (BUTTON) - + [249]About Due South - + [250]Shows - + [251]Contact Due South - + [252]About Due South - + [253]Shows - + [254]Contact Due South - * Programs - (BUTTON) - + [255]WUNC Radio Schedule - + [256]Programs A-Z - + [257]Due South - + [258]All Things Considered - + [259]Morning Edition - + [260]Back Porch Music - + [261]Embodied Radio Show - + [262]Sound Opinions - + [263]The Thistle and Shamrock - + [264]Youth Reporting Institute - + [265]The People's Pharmacy - + [266]American Homefront Project - + [267]Fresh Air - + [268]The Poetry Café - + [269]NPR Music & Concerts - + [270]WUNC Radio Schedule - + [271]Programs A-Z - + [272]Due South - + [273]All Things Considered - + [274]Morning Edition - + [275]Back Porch Music - + [276]Embodied Radio Show - + [277]Sound Opinions - + [278]The Thistle and Shamrock - + [279]Youth Reporting Institute - + [280]The People's Pharmacy - + [281]American Homefront Project - + [282]Fresh Air - + [283]The Poetry Café - + [284]NPR Music & Concerts - * Podcasts - (BUTTON) - + [285]Podcasts From WUNC - + [286]The Broadside - + [287]Embodied Podcast - + [288]WUNC Politics - + [289]Me & My Muslim Friends - + [290]Podcasts From WUNC - + [291]The Broadside - + [292]Embodied Podcast - + [293]WUNC Politics - + [294]Me & My Muslim Friends - * About - (BUTTON) - + [295]About WUNC - + [296]Ways To Listen To WUNC Online - + [297]About HD Radio - + [298]Station Policies & Financial Documents - + [299]Committee on Inclusion Diversity Equity Accountability - + [300]WUNC Public Radio, LLC Board of Directors - + [301]People - + [302]Ways to Connect - + [303]WUNC Jobs - + [304]WUNC Community Discussion Rules - + [305]Telling Public Radio’s Story - + [306]Ethics - + [307]Contact Us - + [308]About WUNC - + [309]Ways To Listen To WUNC Online - + [310]About HD Radio - + [311]Station Policies & Financial Documents - + [312]Committee on Inclusion Diversity Equity Accountability - + [313]WUNC Public Radio, LLC Board of Directors - + [314]People - + [315]Ways to Connect - + [316]WUNC Jobs - + [317]WUNC Community Discussion Rules - + [318]Telling Public Radio’s Story - + [319]Ethics - + [320]Contact Us - * Support - (BUTTON) - + [321]Year-End Giving Deadlines to Know - + [322]Ways to Give to WUNC - + [323]WUNC Thank You Gifts - + [324]Drawing Rules & Entry Form - + [325]WUNC Sustainer Program - + [326]Update Sustainer Information - + [327]Increase Sustainer Gift - + [328]Join WUNC's Leadership Circle - + [329]Donate Your Vehicle to WUNC - + [330]Be a WUNC Volunteer - + [331]Include WUNC in Your Will - + [332]Business Sponsors & Underwriting - + [333]Community Sponsor Circle - + [334]Other Ways To Give - + [335]Year-End Giving Deadlines to Know - + [336]Ways to Give to WUNC - + [337]WUNC Thank You Gifts - + [338]Drawing Rules & Entry Form - + [339]WUNC Sustainer Program - + [340]Update Sustainer Information - + [341]Increase Sustainer Gift - + [342]Join WUNC's Leadership Circle - + [343]Donate Your Vehicle to WUNC - + [344]Be a WUNC Volunteer - + [345]Include WUNC in Your Will - + [346]Business Sponsors & Underwriting - + [347]Community Sponsor Circle - + [348]Other Ways To Give - * [349]WUNC Music - * [350]Search - - [351]News +[384]News Storm leaves trail of damage across central NC; Thousands still without power Wednesday - WUNC | By [352]Mitchell Northam, - [353]Bradley George, [354]Will Michaels - Published August 16, 2023 at 11:39 AM EDT - * [355]Facebook - * [356]Twitter - * [357]LinkedIn - * [358]Email +WUNC | By [385]Mitchell Northam, +[386]Bradley George, [387]Will Michaels +Published August 16, 2023 at 11:39 AM EDT - This photo from the City of Durham Fire Department shows a fallen tree - laying on a power line on Aug. 15, 2023 after severe thunderstorms in - Durham and central North Carolina. - City of Durham Fire Department - / - Twitter - This photo from the City of Durham Fire Department shows a fallen tree - laying on a power line on Aug. 15, 2023 after severe thunderstorms in - Durham and central North Carolina. + • [388] Facebook + • [389] Twitter + • [390] LinkedIn + • [391] Email - Updated Aug. 16 at 5:50 p.m. +This photo from the City of Durham Fire Department shows a fallen tree laying +on a power line on Aug. 15, 2023 after severe thunderstorms in Durham and +central North Carolina. +City of Durham Fire Department +/ +Twitter +This photo from the City of Durham Fire Department shows a fallen tree laying +on a power line on Aug. 15, 2023 after severe thunderstorms in Durham and +central North Carolina. - Tuesday's severe thunderstorms left a trail of damage across central - North Carolina. +Updated Aug. 16 at 5:50 p.m. - As of 5:50 p.m. Wednesday, more than 35,000 Duke Energy customers near - Greensboro and Durham were still without power. +Tuesday's severe thunderstorms left a trail of damage across central North +Carolina. - Dozens of roads remain closed and some do not have working traffic - lights. +As of 5:50 p.m. Wednesday, more than 35,000 Duke Energy customers near +Greensboro and Durham were still without power. - RIGHT NOW: This is Morehead Ave. & Cranford Rd. in Durham this - morning after yesterday's storms. We're hearing of quite a few other - problem areas so be careful on the roads this morning! - [359]@AnissaLopezTV has more on [360]@SpecNews1RDU (Drone footage: - Chief Photog Mark Barger) [361]pic.twitter.com/Yuphqoo3TG - — Kyleigh Panetta (@KyleighPanetta) [362]August 16, 2023 +Dozens of roads remain closed and some do not have working traffic lights. - Severe weather also led to a 32-vehicle accident on westbound - Interstate 40 near the Southpoint Mall around 4:45 p.m. Tuesday, - forcing a closure between exits 274 and 276. According [363]to WRAL, no - one was seriously injured in the crash. + RIGHT NOW: This is Morehead Ave. & Cranford Rd. in Durham this morning + after yesterday's storms. We're hearing of quite a few other problem areas + so be careful on the roads this morning! [392]@AnissaLopezTV has more on + [393]@SpecNews1RDU (Drone footage: Chief Photog Mark Barger) [394] + pic.twitter.com/Yuphqoo3TG - Durham Police say a 78-year-old woman was killed Tuesday when a tree - fell on her car. + — Kyleigh Panetta (@KyleighPanetta) [395]August 16, 2023 - Durham officials have [364]opened multiple cooling centers, mainly - public libraries, to help residents beat the heat as they wait for - power to be restored. The Durham County Main Library, the only cooling - center with phone and internet access, was temporarily closed Wednesday - evening due to a generator outage. +Severe weather also led to a 32-vehicle accident on westbound Interstate 40 +near the Southpoint Mall around 4:45 p.m. Tuesday, forcing a closure between +exits 274 and 276. According [396]to WRAL, no one was seriously injured in the +crash. - The view from this afternoon at American Tobacco 👀 - A heavy thunderstorm swept over WUNC's Durham studios, launching - metal chairs into the artificial river and sending umbrellas flying. - What's the storm scene near you? Stay safe out there! - 📷 by Paul Hunton/ WUNC [365]pic.twitter.com/F5OiDz2EvF - — WUNC (@wunc) [366]August 15, 2023 +Durham Police say a 78-year-old woman was killed Tuesday when a tree fell on +her car. - County officials did not expect straight-line winds of up to 80 miles - per hour based on Tuesday’s severe weather forecast, said Elizabeth - Schroeder, chief of emergency management for the county and city of - Durham. +Durham officials have [397]opened multiple cooling centers, mainly public +libraries, to help residents beat the heat as they wait for power to be +restored. The Durham County Main Library, the only cooling center with phone +and internet access, was temporarily closed Wednesday evening due to a +generator outage. - “This one did catch a lot of us by surprise because there was just a - low risk, which is pretty common throughout the summer months. We don’t - typically see winds like that with, I guess I’ll say, our more regular - summer thunderstorms,” Schroeder said. + The view from this afternoon at American Tobacco 👀 - According to the North Carolina Department of Public Safety, there were - also reports of hail on Tuesday across the Triad region and northern - Piedmont. And an EF-1 tornado occurred near Beech Mountain in Avery - County on Tuesday as well, according to the National Weather Service. - A tree fell in front of a house near the intersection of Fawn Ave. and - Dartmouth Dr. in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - 1 of 7 — IMG_9275.JPEG - A tree fell in front of a house near the intersection of Fawn Ave. and - Dartmouth Dr. in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - Russ Henry / WUNC - Utility trucks are parked along on Hillsborough Road in Durham between - Hale and Carolina streets on Aug. 16, 2023. Severe thunderstorms swept - through central North Carolina on Aug. 15, leaving a trail of damage. - 2 of 7 — IMG_6078.jpg - Utility trucks are parked along on Hillsborough Road in Durham between - Hale and Carolina streets on Aug. 16, 2023. Severe thunderstorms swept - through central North Carolina on Aug. 15, leaving a trail of damage. - Paige Miranda / WUNC - Utility trucks are parked along on Hillsborough Road in Durham between - Hale and Carolina streets on Aug. 16, 2023. Severe thunderstorms swept - through central North Carolina on Aug. 15, leaving a trail of damage. - 3 of 7 — IMG_6079.jpg - Utility trucks are parked along on Hillsborough Road in Durham between - Hale and Carolina streets on Aug. 16, 2023. Severe thunderstorms swept - through central North Carolina on Aug. 15, leaving a trail of damage. - Paige Miranda / WUNC - After a storm, a tree fell in front of this house on Vickers Ave. in - Durham on Aug. 16, 2023. Severe thunderstorms swept through central - North Carolina on Aug. 15, leaving a trail of damage. - 4 of 7 — IMG_7263.jpg - After a storm, a tree fell in front of this house on Vickers Ave. in - Durham on Aug. 16, 2023. Severe thunderstorms swept through central - North Carolina on Aug. 15, leaving a trail of damage. - Charlie Shelton-Ormond / WUNC - A red Jeep is partially in a ditch near the intersection of Hillandale - Road and Indian Trail in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - 5 of 7 — IMG_9286.JPEG - A red Jeep is partially in a ditch near the intersection of Hillandale - Road and Indian Trail in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - Russ Henry / WUNC - Trees and powerlines are down near the intersection of Hillandale Road - and Indian Trail in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - 6 of 7 — IMG_9287.JPEG - Trees and powerlines are down near the intersection of Hillandale Road - and Indian Trail in Durham on Aug. 16, 2023, the day after severe - thunderstorms swept through central North Carolina. - Russ Henry / WUNC - A large tree is uprooted near the Hillandale Golf Club on Aug. 16, - 2023, the day after severe thunderstorms swept through central North - Carolina. - 7 of 7 — IMG_9284.JPEG - A large tree is uprooted near the Hillandale Golf Club on Aug. 16, - 2023, the day after severe thunderstorms swept through central North - Carolina. - Russ Henry / WUNC + A heavy thunderstorm swept over WUNC's Durham studios, launching metal + chairs into the artificial river and sending umbrellas flying. - Due to power outages and road closures, Durham County Public Schools - were closed Wednesday. Chapel Hill-Carrboro City Schools still had - power and remained open. + What's the storm scene near you? Stay safe out there! - In Chapel Hill, Martin Luther King Jr. Blvd. reopened to traffic around - 9 a.m. Wednesday morning. It had been blocked between Estes Dr. and - Homestead Rd. due to downed power lines. + 📷 by Paul Hunton/ WUNC [398]pic.twitter.com/F5OiDz2EvF - The town of Chapel Hill's weekly food distribution at the Eubanks Park - and Ride Lot was canceled due to food supply disruption from the storm. + — WUNC (@wunc) [399]August 15, 2023 - Chapel Hill Transit is also experiencing delays. +County officials did not expect straight-line winds of up to 80 miles per hour +based on Tuesday’s severe weather forecast, said Elizabeth Schroeder, chief of +emergency management for the county and city of Durham. - WUNC's Sascha Cordner, Eli Chen and Laura Pellicer contributed to this - report. - Tags - [367]News [368]Durham County[369]Thunderstorms[370]School - closure[371]Weather - * [372]Facebook - * [373]Twitter - * [374]LinkedIn - * [375]Email +“This one did catch a lot of us by surprise because there was just a low risk, +which is pretty common throughout the summer months. We don’t typically see +winds like that with, I guess I’ll say, our more regular summer thunderstorms,” +Schroeder said. - [376]Mitchell Northam - Mitchell Northam is a Digital Producer for WUNC. His past work has been - featured at the Atlanta Journal-Constitution, SB Nation, the Orlando - Sentinel and the Associated Press. He is a graduate of Salisbury - University and is also a voter in the AP Top 25 poll for women's - college basketball. - [377]See stories by Mitchell Northam - [378]Bradley George - Bradley George is WUNC's AM reporter. A North Carolina native, his - public radio career has taken him to Atlanta, Birmingham, Nashville and - most recently WUSF in Tampa. While there, he reported on the COVID-19 - pandemic and was part of the station's Murrow award winning coverage of - the 2020 election. Along the way, he has reported for NPR, Marketplace, - The Takeaway, and the BBC World Service. Bradley is a graduate of - Guilford College, where he majored in Theatre and German. - [379]See stories by Bradley George - [380]Will Michaels - Will Michaels is WUNC's Weekend Host and Reporter. - [381]See stories by Will Michaels +According to the North Carolina Department of Public Safety, there were also +reports of hail on Tuesday across the Triad region and northern Piedmont. And +an EF-1 tornado occurred near Beech Mountain in Avery County on Tuesday as +well, according to the National Weather Service. - LATEST STORIES - 1. [382]The U.S. military continues strikes in attempts to deter - Houthi fighters in Yemen - 2. [383]Helping veterans cope with life after a bipolar diagnosis - 3. [384]Why flight attendants have a lot of time in their day that is - unpaid - 4. [385]The fight across the nation for the 'right to repair' - 5. [386]The economic impact from the Red Sea tensions - 6. [387]Presidential hopefuls pivot their efforts to New Hampshire +A tree fell in front of a house near the intersection of Fawn Ave. and +Dartmouth Dr. in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +1 of 7 — IMG_9275.JPEG +A tree fell in front of a house near the intersection of Fawn Ave. and +Dartmouth Dr. in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +Russ Henry / WUNC +Utility trucks are parked along on Hillsborough Road in Durham between Hale and +Carolina streets on Aug. 16, 2023. Severe thunderstorms swept through central +North Carolina on Aug. 15, leaving a trail of damage. +2 of 7 — IMG_6078.jpg +Utility trucks are parked along on Hillsborough Road in Durham between Hale and +Carolina streets on Aug. 16, 2023. Severe thunderstorms swept through central +North Carolina on Aug. 15, leaving a trail of damage. +Paige Miranda / WUNC +Utility trucks are parked along on Hillsborough Road in Durham between Hale and +Carolina streets on Aug. 16, 2023. Severe thunderstorms swept through central +North Carolina on Aug. 15, leaving a trail of damage. +3 of 7 — IMG_6079.jpg +Utility trucks are parked along on Hillsborough Road in Durham between Hale and +Carolina streets on Aug. 16, 2023. Severe thunderstorms swept through central +North Carolina on Aug. 15, leaving a trail of damage. +Paige Miranda / WUNC +After a storm, a tree fell in front of this house on Vickers Ave. in Durham on +Aug. 16, 2023. Severe thunderstorms swept through central North Carolina on +Aug. 15, leaving a trail of damage. +4 of 7 — IMG_7263.jpg +After a storm, a tree fell in front of this house on Vickers Ave. in Durham on +Aug. 16, 2023. Severe thunderstorms swept through central North Carolina on +Aug. 15, leaving a trail of damage. +Charlie Shelton-Ormond / WUNC +A red Jeep is partially in a ditch near the intersection of Hillandale Road and +Indian Trail in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +5 of 7 — IMG_9286.JPEG +A red Jeep is partially in a ditch near the intersection of Hillandale Road and +Indian Trail in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +Russ Henry / WUNC +Trees and powerlines are down near the intersection of Hillandale Road and +Indian Trail in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +6 of 7 — IMG_9287.JPEG +Trees and powerlines are down near the intersection of Hillandale Road and +Indian Trail in Durham on Aug. 16, 2023, the day after severe thunderstorms +swept through central North Carolina. +Russ Henry / WUNC +A large tree is uprooted near the Hillandale Golf Club on Aug. 16, 2023, the +day after severe thunderstorms swept through central North Carolina. +7 of 7 — IMG_9284.JPEG +A large tree is uprooted near the Hillandale Golf Club on Aug. 16, 2023, the +day after severe thunderstorms swept through central North Carolina. +Russ Henry / WUNC - Discuss North Carolina politics. Analyze how and why you love the way - you do. Quiz yourself on Black history. Hear poetry from NC's poet - laureate. Meet NPR hosts and reporters. You never know where WUNC's - events will take you. Join us for this ride! See our upcoming events - and sign up to attend. - [388]SEE OUR EVENTS +Due to power outages and road closures, Durham County Public Schools were +closed Wednesday. Chapel Hill-Carrboro City Schools still had power and +remained open. - More Stories - * [389]Minerva, Goddess of Wisdom stands outside the Elliott - University Center in the center of UNC Greensboro's campus - [390]Education - [391]UNC Greensboro announces program cut recommendations - [392]Brianna Atkinson - The department dean’s recommendations include 19 programs, majors - and minors total — affecting about 194 students. - * [393]A civil suit, filed by New Hanover County against numerous - PFAS manufacturers on Friday, January 12, 2024, in New Hanover - County Superior Court. - [394]New Hanover County sues over a dozen PFAS manufacturers, - sellers - [395]Kelly Kenoyer - New Hanover County has filed a lawsuit against more than a dozen - PFAS manufacturers, ranging from legacy chemical companies to - smaller, firefighting foam companies. - (BUTTON) Listen • 1:24 - * [396]Pembroke, North Carolina - Main Street - 12-23 - [397]Sports - [398]Q&A: UNC Pembroke AD Dick Christy on how sports betting will - impact smaller NC colleges - [399]Mitchell Northam - While it comes with its critics and concerns, sports betting could - benefit 10 UNC System schools, including UNC Pembroke, in a big - way. Once betting begins, those schools – the 10 with the smallest - athletic department budgets – will split 20% of the yearly tax - revenue from legal gambling in North Carolina. - * [400]Buncombe County living wage increases to $22.10 an hour, - nonprofit says - [401]Felicia Sonmez - Just Economics WNC said the increase is being driven by the soaring - cost of housing. - * [402]High Point University officials participate in the dental - school groundbreaking. - [403]Education - [404]High Point University’s new dental school will welcome its - first cohort of students in the fall - [405]Sharryse Piggott - The Workman School of Dental Medicine is only one of three dental - schools in North Carolina. +In Chapel Hill, Martin Luther King Jr. Blvd. reopened to traffic around 9 a.m. +Wednesday morning. It had been blocked between Estes Dr. and Homestead Rd. due +to downed power lines. - Stay Connected - * [406]twitter - * [407]instagram - * [408]youtube - * [409]facebook - * [410]linkedin +The town of Chapel Hill's weekly food distribution at the Eubanks Park and Ride +Lot was canceled due to food supply disruption from the storm. - Bringing The World Home To You - © 2024 WUNC North Carolina Public Radio - 120 Friday Center Dr - Chapel Hill, NC 27517 - 919.445.9150 | 800.962.9862 - * [411]Listen Live - * [412]Podcasts From WUNC - * [413]Events - * [414]About - * [415]Contact Us - * [416]Employment - * [417]Privacy - * [418]FCC Applications - * [419]WUNC FCC Public File - * [420]WBUX FCC Public File - * [421]WFSS FCC Public File - * [422]WRQM FCC Public File - * [423]WUND-FM FCC Public File - * [424]WURI FCC Public File - * [425]WUNW FCC Public File - * [426]WZCO FCC Public File - * [427]WUNC Drawing Rules +Chapel Hill Transit is also experiencing delays. - * [428]NPR - * - * - * - * +WUNC's Sascha Cordner, Eli Chen and Laura Pellicer contributed to this report. -References +Tags +[400]News [401]Durham County[402]Thunderstorms[403]School closure[404]Weather - Visible links: - 1. https://www.googletagmanager.com/ns.html?id=GTM-N39QFDR - 2. https://www.wunc.org/nc-news - 3. https://www.wunc.org/tags/npr-news - 4. https://www.wunc.org/politics - 5. https://www.wunc.org/arts-culture - 6. https://www.wunc.org/race-demographics - 7. https://www.wunc.org/business-economy - 8. https://www.wunc.org/education - 9. https://www.wunc.org/environment - 10. https://www.wunc.org/health - 11. https://www.wunc.org/science-technology - 12. https://www.wunc.org/military - 13. https://www.wunc.org/sports - 14. https://www.wunc.org/tags/weather - 15. https://www.wunc.org/ethics - 16. https://www.wunc.org/tags/corrections-clarifications - 17. https://www.wunc.org/nc-news - 18. https://www.wunc.org/tags/npr-news - 19. https://www.wunc.org/politics - 20. https://www.wunc.org/arts-culture - 21. https://www.wunc.org/race-demographics - 22. https://www.wunc.org/business-economy - 23. https://www.wunc.org/education - 24. https://www.wunc.org/environment - 25. https://www.wunc.org/health - 26. https://www.wunc.org/science-technology - 27. https://www.wunc.org/military - 28. https://www.wunc.org/sports - 29. https://www.wunc.org/tags/weather - 30. https://www.wunc.org/ethics - 31. https://www.wunc.org/tags/corrections-clarifications - 32. https://www.wunc.org/triangle-news - 33. https://www.wunc.org/triad-news - 34. https://www.wunc.org/fayetteville-area-news - 35. https://www.wunc.org/eastern-nc-news - 36. https://www.wunc.org/southeastern-nc-news - 37. https://www.wunc.org/charlotte-area-news - 38. https://www.wunc.org/western-nc-news - 39. https://www.wunc.org/triangle-news - 40. https://www.wunc.org/triad-news - 41. https://www.wunc.org/fayetteville-area-news - 42. https://www.wunc.org/eastern-nc-news - 43. https://www.wunc.org/southeastern-nc-news - 44. https://www.wunc.org/charlotte-area-news - 45. https://www.wunc.org/western-nc-news - 46. https://www.wunc.org/tags/main-street-nc - 47. https://www.wunc.org/unc-chapel-hill-shooting - 48. https://www.wunc.org/raleigh-shooting - 49. https://www.wunc.org/tags/a-teacher-in-every-class - 50. https://www.wunc.org/behind-the-lines - 51. https://www.wunc.org/tested-beyond-the-pod - 52. https://www.wunc.org/the-lives-lost - 53. https://www.wunc.org/andrew-brown-jr - 54. https://www.wunc.org/calling-for-change - 55. https://www.wunc.org/lumberton-undeterred - 56. https://www.wunc.org/southern-witness - 57. https://www.wunc.org/tags/nc-coronavirus-updates - 58. https://www.wunc.org/education/2021-12-14/the-cost-of-summer - 59. https://www.wunc.org/a-state-divided-hb2-and-transgender-rights - 60. https://www.wunc.org/tags/main-street-nc - 61. https://www.wunc.org/unc-chapel-hill-shooting - 62. https://www.wunc.org/raleigh-shooting - 63. https://www.wunc.org/tags/a-teacher-in-every-class - 64. https://www.wunc.org/behind-the-lines - 65. https://www.wunc.org/tested-beyond-the-pod - 66. https://www.wunc.org/the-lives-lost - 67. https://www.wunc.org/andrew-brown-jr - 68. https://www.wunc.org/calling-for-change - 69. https://www.wunc.org/lumberton-undeterred - 70. https://www.wunc.org/southern-witness - 71. https://www.wunc.org/tags/nc-coronavirus-updates - 72. https://www.wunc.org/education/2021-12-14/the-cost-of-summer - 73. https://www.wunc.org/a-state-divided-hb2-and-transgender-rights - 74. https://www.wunc.org/about-due-south - 75. https://www.wunc.org/show/due-south - 76. https://www.wunc.org/contact-due-south - 77. https://www.wunc.org/about-due-south - 78. https://www.wunc.org/show/due-south - 79. https://www.wunc.org/contact-due-south - 80. https://www.wunc.org/wunc-radio-schedule - 81. https://www.wunc.org/all-shows - 82. https://www.wunc.org/show/due-south - 83. https://www.wunc.org/show/all-things-considered - 84. https://www.wunc.org/show/morning-edition - 85. https://www.wunc.org/back-porch-music - 86. https://www.wunc.org/show/embodied-radio-show - 87. https://www.wunc.org/show/sound-opinions - 88. https://www.wunc.org/show/thistle-and-shamrock - 89. https://www.wunc.org/youth-radio/youth-reporting-institute - 90. https://www.wunc.org/show/the-peoples-pharmacy - 91. https://americanhomefront.wunc.org/ - 92. https://www.wunc.org/show/fresh-air - 93. https://www.wunc.org/show/the-poetry-cafe - 94. https://www.wunc.org/npr-music-concerts - 95. https://www.wunc.org/wunc-radio-schedule - 96. https://www.wunc.org/all-shows - 97. https://www.wunc.org/show/due-south - 98. https://www.wunc.org/show/all-things-considered - 99. https://www.wunc.org/show/morning-edition - 100. https://www.wunc.org/back-porch-music - 101. https://www.wunc.org/show/embodied-radio-show - 102. https://www.wunc.org/show/sound-opinions - 103. https://www.wunc.org/show/thistle-and-shamrock - 104. https://www.wunc.org/youth-radio/youth-reporting-institute - 105. https://www.wunc.org/show/the-peoples-pharmacy - 106. https://americanhomefront.wunc.org/ - 107. https://www.wunc.org/show/fresh-air - 108. https://www.wunc.org/show/the-poetry-cafe - 109. https://www.wunc.org/npr-music-concerts - 110. https://www.wunc.org/podcasts-from-wunc - 111. https://www.wunc.org/podcast/the-broadside - 112. https://www.wunc.org/podcast/embodied-podcast - 113. https://www.wunc.org/podcast/podcast-wuncpolitics - 114. https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast - 115. https://www.wunc.org/podcasts-from-wunc - 116. https://www.wunc.org/podcast/the-broadside - 117. https://www.wunc.org/podcast/embodied-podcast - 118. https://www.wunc.org/podcast/podcast-wuncpolitics - 119. https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast - 120. https://www.wunc.org/about-wunc - 121. https://www.wunc.org/ways-to-listen-to-wunc-online - 122. https://www.wunc.org/about-hd-radio - 123. https://www.wunc.org/station-policies-financial-documents - 124. https://www.wunc.org/i-d-e-a - 125. https://www.wunc.org/wunc-public-radio-llc-board-of-directors - 126. https://www.wunc.org/people - 127. https://www.wunc.org/ways-to-connect - 128. https://www.wunc.org/wunc-jobs - 129. https://www.wunc.org/wunc-community-discussion-rules - 130. https://www.wunc.org/telling-public-radios-story - 131. https://www.wunc.org/ethics - 132. https://www.wunc.org/contact-us - 133. https://www.wunc.org/about-wunc - 134. https://www.wunc.org/ways-to-listen-to-wunc-online - 135. https://www.wunc.org/about-hd-radio - 136. https://www.wunc.org/station-policies-financial-documents - 137. https://www.wunc.org/i-d-e-a - 138. https://www.wunc.org/wunc-public-radio-llc-board-of-directors - 139. https://www.wunc.org/people - 140. https://www.wunc.org/ways-to-connect - 141. https://www.wunc.org/wunc-jobs - 142. https://www.wunc.org/wunc-community-discussion-rules - 143. https://www.wunc.org/telling-public-radios-story - 144. https://www.wunc.org/ethics - 145. https://www.wunc.org/contact-us - 146. https://www.wunc.org/year-end-giving-deadlines-to-know - 147. https://www.wunc.org/ways-to-give-to-wunc - 148. https://www.wunc.org/thank-you-gifts - 149. https://www.wunc.org/drawing-rules-entry-form - 150. https://www.wunc.org/wunc-sustainers - 151. https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 - 152. https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 - 153. https://www.wunc.org/join-the-leadership-circle - 154. https://wunc.careasy.org/home - 155. https://www.wunc.org/volunteer-opportunities - 156. https://www.wunc.org/wuncs-legacy-society - 157. https://www.wunc.org/sponsorships - 158. https://www.wunc.org/community-sponsor-circle - 159. https://www.wunc.org/other-ways-to-give - 160. https://www.wunc.org/year-end-giving-deadlines-to-know - 161. https://www.wunc.org/ways-to-give-to-wunc - 162. https://www.wunc.org/thank-you-gifts - 163. https://www.wunc.org/drawing-rules-entry-form - 164. https://www.wunc.org/wunc-sustainers - 165. https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 - 166. https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 - 167. https://www.wunc.org/join-the-leadership-circle - 168. https://wunc.careasy.org/home - 169. https://www.wunc.org/volunteer-opportunities - 170. https://www.wunc.org/wuncs-legacy-society - 171. https://www.wunc.org/sponsorships - 172. https://www.wunc.org/community-sponsor-circle - 173. https://www.wunc.org/other-ways-to-give - 174. https://www.wunc.org/wunc-music - 175. https://www.wunc.org/search - 176. https://support.wunc.org/site/Donation2?2885.donation=form1&df_id=2885&mfc_pref=T - 177. https://www.wunc.org/nc-news - 178. https://www.wunc.org/tags/npr-news - 179. https://www.wunc.org/politics - 180. https://www.wunc.org/arts-culture - 181. https://www.wunc.org/race-demographics - 182. https://www.wunc.org/business-economy - 183. https://www.wunc.org/education - 184. https://www.wunc.org/environment - 185. https://www.wunc.org/health - 186. https://www.wunc.org/science-technology - 187. https://www.wunc.org/military - 188. https://www.wunc.org/sports - 189. https://www.wunc.org/tags/weather - 190. https://www.wunc.org/ethics - 191. https://www.wunc.org/tags/corrections-clarifications - 192. https://www.wunc.org/nc-news - 193. https://www.wunc.org/tags/npr-news - 194. https://www.wunc.org/politics - 195. https://www.wunc.org/arts-culture - 196. https://www.wunc.org/race-demographics - 197. https://www.wunc.org/business-economy - 198. https://www.wunc.org/education - 199. https://www.wunc.org/environment - 200. https://www.wunc.org/health - 201. https://www.wunc.org/science-technology - 202. https://www.wunc.org/military - 203. https://www.wunc.org/sports - 204. https://www.wunc.org/tags/weather - 205. https://www.wunc.org/ethics - 206. https://www.wunc.org/tags/corrections-clarifications - 207. https://www.wunc.org/triangle-news - 208. https://www.wunc.org/triad-news - 209. https://www.wunc.org/fayetteville-area-news - 210. https://www.wunc.org/eastern-nc-news - 211. https://www.wunc.org/southeastern-nc-news - 212. https://www.wunc.org/charlotte-area-news - 213. https://www.wunc.org/western-nc-news - 214. https://www.wunc.org/triangle-news - 215. https://www.wunc.org/triad-news - 216. https://www.wunc.org/fayetteville-area-news - 217. https://www.wunc.org/eastern-nc-news - 218. https://www.wunc.org/southeastern-nc-news - 219. https://www.wunc.org/charlotte-area-news - 220. https://www.wunc.org/western-nc-news - 221. https://www.wunc.org/tags/main-street-nc - 222. https://www.wunc.org/unc-chapel-hill-shooting - 223. https://www.wunc.org/raleigh-shooting - 224. https://www.wunc.org/tags/a-teacher-in-every-class - 225. https://www.wunc.org/behind-the-lines - 226. https://www.wunc.org/tested-beyond-the-pod - 227. https://www.wunc.org/the-lives-lost - 228. https://www.wunc.org/andrew-brown-jr - 229. https://www.wunc.org/calling-for-change - 230. https://www.wunc.org/lumberton-undeterred - 231. https://www.wunc.org/southern-witness - 232. https://www.wunc.org/tags/nc-coronavirus-updates - 233. https://www.wunc.org/education/2021-12-14/the-cost-of-summer - 234. https://www.wunc.org/a-state-divided-hb2-and-transgender-rights - 235. https://www.wunc.org/tags/main-street-nc - 236. https://www.wunc.org/unc-chapel-hill-shooting - 237. https://www.wunc.org/raleigh-shooting - 238. https://www.wunc.org/tags/a-teacher-in-every-class - 239. https://www.wunc.org/behind-the-lines - 240. https://www.wunc.org/tested-beyond-the-pod - 241. https://www.wunc.org/the-lives-lost - 242. https://www.wunc.org/andrew-brown-jr - 243. https://www.wunc.org/calling-for-change - 244. https://www.wunc.org/lumberton-undeterred - 245. https://www.wunc.org/southern-witness - 246. https://www.wunc.org/tags/nc-coronavirus-updates - 247. https://www.wunc.org/education/2021-12-14/the-cost-of-summer - 248. https://www.wunc.org/a-state-divided-hb2-and-transgender-rights - 249. https://www.wunc.org/about-due-south - 250. https://www.wunc.org/show/due-south - 251. https://www.wunc.org/contact-due-south - 252. https://www.wunc.org/about-due-south - 253. https://www.wunc.org/show/due-south - 254. https://www.wunc.org/contact-due-south - 255. https://www.wunc.org/wunc-radio-schedule - 256. https://www.wunc.org/all-shows - 257. https://www.wunc.org/show/due-south - 258. https://www.wunc.org/show/all-things-considered - 259. https://www.wunc.org/show/morning-edition - 260. https://www.wunc.org/back-porch-music - 261. https://www.wunc.org/show/embodied-radio-show - 262. https://www.wunc.org/show/sound-opinions - 263. https://www.wunc.org/show/thistle-and-shamrock - 264. https://www.wunc.org/youth-radio/youth-reporting-institute - 265. https://www.wunc.org/show/the-peoples-pharmacy - 266. https://americanhomefront.wunc.org/ - 267. https://www.wunc.org/show/fresh-air - 268. https://www.wunc.org/show/the-poetry-cafe - 269. https://www.wunc.org/npr-music-concerts - 270. https://www.wunc.org/wunc-radio-schedule - 271. https://www.wunc.org/all-shows - 272. https://www.wunc.org/show/due-south - 273. https://www.wunc.org/show/all-things-considered - 274. https://www.wunc.org/show/morning-edition - 275. https://www.wunc.org/back-porch-music - 276. https://www.wunc.org/show/embodied-radio-show - 277. https://www.wunc.org/show/sound-opinions - 278. https://www.wunc.org/show/thistle-and-shamrock - 279. https://www.wunc.org/youth-radio/youth-reporting-institute - 280. https://www.wunc.org/show/the-peoples-pharmacy - 281. https://americanhomefront.wunc.org/ - 282. https://www.wunc.org/show/fresh-air - 283. https://www.wunc.org/show/the-poetry-cafe - 284. https://www.wunc.org/npr-music-concerts - 285. https://www.wunc.org/podcasts-from-wunc - 286. https://www.wunc.org/podcast/the-broadside - 287. https://www.wunc.org/podcast/embodied-podcast - 288. https://www.wunc.org/podcast/podcast-wuncpolitics - 289. https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast - 290. https://www.wunc.org/podcasts-from-wunc - 291. https://www.wunc.org/podcast/the-broadside - 292. https://www.wunc.org/podcast/embodied-podcast - 293. https://www.wunc.org/podcast/podcast-wuncpolitics - 294. https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast - 295. https://www.wunc.org/about-wunc - 296. https://www.wunc.org/ways-to-listen-to-wunc-online - 297. https://www.wunc.org/about-hd-radio - 298. https://www.wunc.org/station-policies-financial-documents - 299. https://www.wunc.org/i-d-e-a - 300. https://www.wunc.org/wunc-public-radio-llc-board-of-directors - 301. https://www.wunc.org/people - 302. https://www.wunc.org/ways-to-connect - 303. https://www.wunc.org/wunc-jobs - 304. https://www.wunc.org/wunc-community-discussion-rules - 305. https://www.wunc.org/telling-public-radios-story - 306. https://www.wunc.org/ethics - 307. https://www.wunc.org/contact-us - 308. https://www.wunc.org/about-wunc - 309. https://www.wunc.org/ways-to-listen-to-wunc-online - 310. https://www.wunc.org/about-hd-radio - 311. https://www.wunc.org/station-policies-financial-documents - 312. https://www.wunc.org/i-d-e-a - 313. https://www.wunc.org/wunc-public-radio-llc-board-of-directors - 314. https://www.wunc.org/people - 315. https://www.wunc.org/ways-to-connect - 316. https://www.wunc.org/wunc-jobs - 317. https://www.wunc.org/wunc-community-discussion-rules - 318. https://www.wunc.org/telling-public-radios-story - 319. https://www.wunc.org/ethics - 320. https://www.wunc.org/contact-us - 321. https://www.wunc.org/year-end-giving-deadlines-to-know - 322. https://www.wunc.org/ways-to-give-to-wunc - 323. https://www.wunc.org/thank-you-gifts - 324. https://www.wunc.org/drawing-rules-entry-form - 325. https://www.wunc.org/wunc-sustainers - 326. https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 - 327. https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 - 328. https://www.wunc.org/join-the-leadership-circle - 329. https://wunc.careasy.org/home - 330. https://www.wunc.org/volunteer-opportunities - 331. https://www.wunc.org/wuncs-legacy-society - 332. https://www.wunc.org/sponsorships - 333. https://www.wunc.org/community-sponsor-circle - 334. https://www.wunc.org/other-ways-to-give - 335. https://www.wunc.org/year-end-giving-deadlines-to-know - 336. https://www.wunc.org/ways-to-give-to-wunc - 337. https://www.wunc.org/thank-you-gifts - 338. https://www.wunc.org/drawing-rules-entry-form - 339. https://www.wunc.org/wunc-sustainers - 340. https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 - 341. https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 - 342. https://www.wunc.org/join-the-leadership-circle - 343. https://wunc.careasy.org/home - 344. https://www.wunc.org/volunteer-opportunities - 345. https://www.wunc.org/wuncs-legacy-society - 346. https://www.wunc.org/sponsorships - 347. https://www.wunc.org/community-sponsor-circle - 348. https://www.wunc.org/other-ways-to-give - 349. https://www.wunc.org/wunc-music - 350. https://www.wunc.org/search - 351. https://www.wunc.org/news - 352. https://www.wunc.org/people/mitchell-northam - 353. https://www.wunc.org/people/bradley-george - 354. https://www.wunc.org/people/will-michaels - 355. https://www.facebook.com/dialog/share?app_id=3927319740668442&display=popup&href=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816 - 356. https://twitter.com/intent/tweet?url=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816&text=Storm leaves trail of damage across central NC; Thousands still without power Wednesday - 357. https://www.linkedin.com/shareArticle?url=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816&mini=true&title=Storm leaves trail of damage across central NC; Thousands still without power Wednesday&summary=Tuesday's severe thunderstorms caused damages, outages, car accidents, and road closures. One 78-year-old Durham woman died after a tree fell on her car.&source=WUNC - 358. mailto:?body=Storm leaves trail of damage across central NC; Thousands still without power Wednesday + • [405] Facebook + • [406] Twitter + • [407] LinkedIn + • [408] Email -https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816 +[409] [] +[410]Mitchell Northam +Mitchell Northam is a Digital Producer for WUNC. His past work has been +featured at the Atlanta Journal-Constitution, SB Nation, the Orlando Sentinel +and the Associated Press. He is a graduate of Salisbury University and is also +a voter in the AP Top 25 poll for women's college basketball. +[411] See stories by Mitchell Northam +[412] [] +[413]Bradley George +Bradley George is WUNC's AM reporter. A North Carolina native, his public radio +career has taken him to Atlanta, Birmingham, Nashville and most recently WUSF +in Tampa. While there, he reported on the COVID-19 pandemic and was part of the +station's Murrow award winning coverage of the 2020 election. Along the way, he +has reported for NPR, Marketplace, The Takeaway, and the BBC World Service. +Bradley is a graduate of Guilford College, where he majored in Theatre and +German. +[414] See stories by Bradley George +[415] [] +[416]Will Michaels +Will Michaels is WUNC's Weekend Host and Reporter. +[417] See stories by Will Michaels +LATEST STORIES -Tuesday's severe thunderstorms caused damages, outages, car accidents, and road closures. One 78-year-old Durham woman died after a tree fell on her car. - 359. https://twitter.com/AnissaLopezTV?ref_src=twsrc^tfw - 360. https://twitter.com/SpecNews1RDU?ref_src=twsrc^tfw - 361. https://t.co/Yuphqoo3TG - 362. https://twitter.com/KyleighPanetta/status/1691778846532509716?ref_src=twsrc^tfw - 363. https://www.wral.com/story/i-40-west-in-durham-reopens-after-crash-involving-32-vehicles-during-severe-storms/21001866/ - 364. https://www.dconc.gov/Home/Components/News/News/9711/31 - 365. https://t.co/F5OiDz2EvF - 366. https://twitter.com/wunc/status/1691574282189516878?ref_src=twsrc^tfw - 367. https://www.wunc.org/news - 368. https://www.wunc.org/tags/durham-county - 369. https://www.wunc.org/tags/thunderstorms - 370. https://www.wunc.org/tags/school-closure - 371. https://www.wunc.org/tags/weather - 372. https://www.facebook.com/dialog/share?app_id=3927319740668442&display=popup&href=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816 - 373. https://twitter.com/intent/tweet?url=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816&text=Storm leaves trail of damage across central NC; Thousands still without power Wednesday - 374. https://www.linkedin.com/shareArticle?url=https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816&mini=true&title=Storm leaves trail of damage across central NC; Thousands still without power Wednesday&summary=Tuesday's severe thunderstorms caused damages, outages, car accidents, and road closures. One 78-year-old Durham woman died after a tree fell on her car.&source=WUNC - 375. mailto:?body=Storm leaves trail of damage across central NC; Thousands still without power Wednesday + 1. [418]Sobbed: Podcast Transcript (Revisited) + 2. [419]'You Only Call When You're in Trouble' is a witty novel to get you + through the winter + 3. [420]Princess of Wales undergoes abdominal surgery; King Charles to have + prostate procedure + 4. [421]Higher insurance rates in Buncombe County? Inflation and climate + change may be to blame. + 5. [422]30 years ago, a magnitude 6.7 earthquake struck Northridge in Southern + California + 6. [423]Iowa's results show Trump is off to a good start to be the GOP + presidential nominee -https://www.wunc.org/news/2023-08-16/storm-damage-durham-power-outage-closures-north-carolina-816 +Discuss North Carolina politics. Analyze how and why you love the way you do. +Quiz yourself on Black history. Hear poetry from NC's poet laureate. Meet NPR +hosts and reporters. You never know where WUNC's events will take you. Join us +for this ride! See our upcoming events and sign up to attend. +[424]SEE OUR EVENTS +More Stories -Tuesday's severe thunderstorms caused damages, outages, car accidents, and road closures. One 78-year-old Durham woman died after a tree fell on her car. - 376. https://www.wunc.org/people/mitchell-northam - 377. https://www.wunc.org/people/mitchell-northam - 378. https://www.wunc.org/people/bradley-george - 379. https://www.wunc.org/people/bradley-george - 380. https://www.wunc.org/people/will-michaels - 381. https://www.wunc.org/people/will-michaels - 382. https://www.wunc.org/2024-01-16/the-u-s-military-continues-strikes-in-attempts-to-deter-houthi-fighters-in-yemen - 383. https://www.wunc.org/2024-01-16/helping-veterans-cope-with-life-after-a-bipolar-diagnosis - 384. https://www.wunc.org/2024-01-16/why-flight-attendants-have-a-lot-of-time-in-their-day-that-is-unpaid - 385. https://www.wunc.org/2024-01-16/the-fight-across-the-nation-for-the-right-to-repair - 386. https://www.wunc.org/2024-01-16/the-economic-impact-from-the-red-sea-tensions - 387. https://www.wunc.org/2024-01-16/presidential-hopefuls-pivot-their-efforts-to-new-hampshire - 388. https://www.wunc.org/events-calendar - 389. https://www.wunc.org/education/2024-01-16/unc-greensboro-announces-program-cut-recommendations - 390. https://www.wunc.org/education - 391. https://www.wunc.org/education/2024-01-16/unc-greensboro-announces-program-cut-recommendations - 392. https://www.wunc.org/people/brianna-atkinson - 393. https://www.wunc.org/2024-01-16/new-hanover-county-sues-over-a-dozen-pfas-manufacturers-sellers - 394. https://www.wunc.org/2024-01-16/new-hanover-county-sues-over-a-dozen-pfas-manufacturers-sellers - 395. https://www.whqr.org/people/kelly-kenoyer-2 - 396. https://www.wunc.org/sports/2024-01-16/unc-pembroke-dick-christy-gambling-betting-impact-small-colleges - 397. https://www.wunc.org/sports - 398. https://www.wunc.org/sports/2024-01-16/unc-pembroke-dick-christy-gambling-betting-impact-small-colleges - 399. https://www.wunc.org/people/mitchell-northam - 400. https://www.wunc.org/2024-01-15/buncombe-county-living-wage-increases-to-22-10-an-hour-nonprofit-says - 401. https://www.bpr.org/people/felicia-sonmez - 402. https://www.wunc.org/education/2024-01-15/high-point-dental-school-workman-students-fall - 403. https://www.wunc.org/education - 404. https://www.wunc.org/education/2024-01-15/high-point-dental-school-workman-students-fall - 405. https://www.wunc.org/people/sharryse-piggott - 406. https://twitter.com/wunc - 407. https://www.instagram.com/915wunc/ - 408. https://www.youtube.com/wuncfm - 409. https://www.facebook.com/915wunc - 410. https://www.linkedin.com/company/wunc-fm-91.5fm-north-carolina-public-radio - 411. https://www.wunc.org/ways-to-listen-to-wunc-online - 412. https://www.wunc.org/podcasts-from-wunc - 413. https://www.wunc.org/events-calendar - 414. https://www.wunc.org/about-wunc - 415. https://www.wunc.org/contact-us - 416. https://www.wunc.org/wunc-jobs - 417. https://www.wunc.org/privacy - 418. https://www.wunc.org/fcc-applications - 419. https://publicfiles.fcc.gov/fm-profile/WUNC - 420. https://publicfiles.fcc.gov/fm-profile/WBUX - 421. https://publicfiles.fcc.gov/fm-profile/WFSS - 422. https://publicfiles.fcc.gov/fm-profile/WRQM - 423. https://publicfiles.fcc.gov/fm-profile/WUND-FM - 424. https://publicfiles.fcc.gov/fm-profile/WURI - 425. https://publicfiles.fcc.gov/fm-profile/WUNW-FM - 426. https://publicfiles.fcc.gov/fm-profile/WZCO - 427. https://docs.google.com/document/u/1/d/e/2PACX-1vSqllkRbwiZZtXGXNeRNC8bs8yd4syzFuPDZUAc5XQqadIJ91cqQCujTD_rN2-vmIT-vYeAYA693exg/pub - 428. http://www.npr.org/ + • [425] Salisbury attorney Bill Graham has launched two TV ads criticizing + Lt. Gov. Mark Robinson over his Facebook posts about the Holocaust + [426]GOP governor primary heats up as Graham airs TV ads criticizing + Robinson over Holocaust posts + [427]Steve Harrison + Salisbury attorney Bill Graham is spending $5 million of his own money to + win the March Republican primary for N.C. governor. He's airing ads + critical of Lt. Gov. Mark Robinson's previous comments on the Holocaust. + • [428] A municipal drinking water plant. Unlike at a private well, water is + treated at a central location, then pumped through pipes to residents. + [429]Local leaders deny any connection between state infrastructure grants + and proposed casinos + [430]Marshall Terry + North Carolina is set to give grants for major upgrades to water and sewage + infrastructure to four communities that happen to be near sites where new + casinos could be built. But leaders in most of those communities are + denying there’s any connection between the infrastructure projects and the + possible casinos. Mehr Sher wrote about it for Carolina Public Press and + joined us on Morning Edition. + Listen • 6:55 + • [432] Minerva, Goddess of Wisdom stands outside the Elliott University + Center in the center of UNC Greensboro's campus + [433]Education + [434]UNC Greensboro announces program cut recommendations + [435]Brianna Atkinson + The department dean’s recommendations include 19 programs, majors and + minors total — affecting about 194 students. + • [436] A civil suit, filed by New Hanover County against numerous PFAS + manufacturers on Friday, January 12, 2024, in New Hanover County Superior + Court. + [437]New Hanover County sues over a dozen PFAS manufacturers, sellers + [438]Kelly Kenoyer + New Hanover County has filed a lawsuit against more than a dozen PFAS + manufacturers, ranging from legacy chemical companies to smaller, + firefighting foam companies. + Listen • 1:24 + • [440] Pembroke, North Carolina - Main Street - 12-23 + [441]Sports + [442]Q&A: UNC Pembroke AD Dick Christy on how sports betting will impact + smaller NC colleges + [443]Mitchell Northam + While it comes with its critics and concerns, sports betting could benefit + 10 UNC System schools, including UNC Pembroke, in a big way. Once betting + begins, those schools – the 10 with the smallest athletic department + budgets – will split 20% of the yearly tax revenue from legal gambling in + North Carolina. - Hidden links: - 430. https://www.wunc.org/ - 431. https://www.wunc.org/ - 432. https://www.wunc.org/people/mitchell-northam - 433. https://www.wunc.org/people/bradley-george - 434. https://www.wunc.org/people/will-michaels - 435. https://www.wunc.org/2024-01-15/buncombe-county-living-wage-increases-to-22-10-an-hour-nonprofit-says - 436. https://www.wunc.org/ - 437. http://prx.org/ - 438. https://www.pri.org/ - 439. https://www.americanpublicmedia.org/ - 440. http://bbc.com/ +[444] [svg] +Stay Connected + + • [445]twitter + • [446]instagram + • [447]youtube + • [448]facebook + • [449]linkedin + +Bringing The World Home To You + +© 2024 WUNC North Carolina Public Radio +120 Friday Center Dr +Chapel Hill, NC 27517 +919.445.9150 | 800.962.9862 + + • [450]Listen Live + • [451]Podcasts From WUNC + • [452]Events + • [453]About + • [454]Contact Us + • [455]Employment + • [456]Privacy + • [457]FCC Applications + • [458]WUNC FCC Public File + • [459]WBUX FCC Public File + • [460]WFSS FCC Public File + • [461]WRQM FCC Public File + • [462]WUND-FM FCC Public File + • [463]WURI FCC Public File + • [464]WUNW FCC Public File + • [465]WZCO FCC Public File + • [466]WUNC Drawing Rules + + • [467] NPR + • [468] [svg] + • [469] [svg] + • [470] [svg] + • [471] [svg] + + +References: + +[1] https://www.wunc.org/ +[6] https://www.wunc.org/nc-news +[7] https://www.wunc.org/tags/npr-news +[8] https://www.wunc.org/politics +[9] https://www.wunc.org/arts-culture +[10] https://www.wunc.org/race-demographics +[11] https://www.wunc.org/business-economy +[12] https://www.wunc.org/education +[13] https://www.wunc.org/environment +[14] https://www.wunc.org/health +[15] https://www.wunc.org/science-technology +[16] https://www.wunc.org/military +[17] https://www.wunc.org/sports +[18] https://www.wunc.org/tags/weather +[19] https://www.wunc.org/ethics +[20] https://www.wunc.org/tags/corrections-clarifications +[21] https://www.wunc.org/nc-news +[22] https://www.wunc.org/tags/npr-news +[23] https://www.wunc.org/politics +[24] https://www.wunc.org/arts-culture +[25] https://www.wunc.org/race-demographics +[26] https://www.wunc.org/business-economy +[27] https://www.wunc.org/education +[28] https://www.wunc.org/environment +[29] https://www.wunc.org/health +[30] https://www.wunc.org/science-technology +[31] https://www.wunc.org/military +[32] https://www.wunc.org/sports +[33] https://www.wunc.org/tags/weather +[34] https://www.wunc.org/ethics +[35] https://www.wunc.org/tags/corrections-clarifications +[37] https://www.wunc.org/triangle-news +[38] https://www.wunc.org/triad-news +[39] https://www.wunc.org/fayetteville-area-news +[40] https://www.wunc.org/eastern-nc-news +[41] https://www.wunc.org/southeastern-nc-news +[42] https://www.wunc.org/charlotte-area-news +[43] https://www.wunc.org/western-nc-news +[44] https://www.wunc.org/triangle-news +[45] https://www.wunc.org/triad-news +[46] https://www.wunc.org/fayetteville-area-news +[47] https://www.wunc.org/eastern-nc-news +[48] https://www.wunc.org/southeastern-nc-news +[49] https://www.wunc.org/charlotte-area-news +[50] https://www.wunc.org/western-nc-news +[52] https://www.wunc.org/tags/main-street-nc +[53] https://www.wunc.org/unc-chapel-hill-shooting +[54] https://www.wunc.org/raleigh-shooting +[55] https://www.wunc.org/tags/a-teacher-in-every-class +[56] https://www.wunc.org/behind-the-lines +[57] https://www.wunc.org/tested-beyond-the-pod +[58] https://www.wunc.org/the-lives-lost +[59] https://www.wunc.org/andrew-brown-jr +[60] https://www.wunc.org/calling-for-change +[61] https://www.wunc.org/lumberton-undeterred +[62] https://www.wunc.org/southern-witness +[63] https://www.wunc.org/tags/nc-coronavirus-updates +[64] https://www.wunc.org/education/2021-12-14/the-cost-of-summer +[65] https://www.wunc.org/a-state-divided-hb2-and-transgender-rights +[66] https://www.wunc.org/tags/main-street-nc +[67] https://www.wunc.org/unc-chapel-hill-shooting +[68] https://www.wunc.org/raleigh-shooting +[69] https://www.wunc.org/tags/a-teacher-in-every-class +[70] https://www.wunc.org/behind-the-lines +[71] https://www.wunc.org/tested-beyond-the-pod +[72] https://www.wunc.org/the-lives-lost +[73] https://www.wunc.org/andrew-brown-jr +[74] https://www.wunc.org/calling-for-change +[75] https://www.wunc.org/lumberton-undeterred +[76] https://www.wunc.org/southern-witness +[77] https://www.wunc.org/tags/nc-coronavirus-updates +[78] https://www.wunc.org/education/2021-12-14/the-cost-of-summer +[79] https://www.wunc.org/a-state-divided-hb2-and-transgender-rights +[81] https://www.wunc.org/about-due-south +[82] https://www.wunc.org/show/due-south +[83] https://www.wunc.org/contact-due-south +[84] https://www.wunc.org/about-due-south +[85] https://www.wunc.org/show/due-south +[86] https://www.wunc.org/contact-due-south +[88] https://www.wunc.org/wunc-radio-schedule +[89] https://www.wunc.org/all-shows +[90] https://www.wunc.org/show/due-south +[91] https://www.wunc.org/show/all-things-considered +[92] https://www.wunc.org/show/morning-edition +[93] https://www.wunc.org/back-porch-music +[94] https://www.wunc.org/show/embodied-radio-show +[95] https://www.wunc.org/show/sound-opinions +[96] https://www.wunc.org/show/thistle-and-shamrock +[97] https://www.wunc.org/youth-radio/youth-reporting-institute +[98] https://www.wunc.org/show/the-peoples-pharmacy +[99] https://americanhomefront.wunc.org/ +[100] https://www.wunc.org/show/fresh-air +[101] https://www.wunc.org/show/the-poetry-cafe +[102] https://www.wunc.org/npr-music-concerts +[103] https://www.wunc.org/wunc-radio-schedule +[104] https://www.wunc.org/all-shows +[105] https://www.wunc.org/show/due-south +[106] https://www.wunc.org/show/all-things-considered +[107] https://www.wunc.org/show/morning-edition +[108] https://www.wunc.org/back-porch-music +[109] https://www.wunc.org/show/embodied-radio-show +[110] https://www.wunc.org/show/sound-opinions +[111] https://www.wunc.org/show/thistle-and-shamrock +[112] https://www.wunc.org/youth-radio/youth-reporting-institute +[113] https://www.wunc.org/show/the-peoples-pharmacy +[114] https://americanhomefront.wunc.org/ +[115] https://www.wunc.org/show/fresh-air +[116] https://www.wunc.org/show/the-poetry-cafe +[117] https://www.wunc.org/npr-music-concerts +[119] https://www.wunc.org/podcasts-from-wunc +[120] https://www.wunc.org/podcast/the-broadside +[121] https://www.wunc.org/podcast/embodied-podcast +[122] https://www.wunc.org/podcast/podcast-wuncpolitics +[123] https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast +[124] https://www.wunc.org/podcasts-from-wunc +[125] https://www.wunc.org/podcast/the-broadside +[126] https://www.wunc.org/podcast/embodied-podcast +[127] https://www.wunc.org/podcast/podcast-wuncpolitics +[128] https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast +[130] https://www.wunc.org/about-wunc +[131] https://www.wunc.org/ways-to-listen-to-wunc-online +[132] https://www.wunc.org/about-hd-radio +[133] https://www.wunc.org/station-policies-financial-documents +[134] https://www.wunc.org/i-d-e-a +[135] https://www.wunc.org/wunc-public-radio-llc-board-of-directors +[136] https://www.wunc.org/people +[137] https://www.wunc.org/ways-to-connect +[138] https://www.wunc.org/wunc-jobs +[139] https://www.wunc.org/wunc-community-discussion-rules +[140] https://www.wunc.org/telling-public-radios-story +[141] https://www.wunc.org/ethics +[142] https://www.wunc.org/contact-us +[143] https://www.wunc.org/about-wunc +[144] https://www.wunc.org/ways-to-listen-to-wunc-online +[145] https://www.wunc.org/about-hd-radio +[146] https://www.wunc.org/station-policies-financial-documents +[147] https://www.wunc.org/i-d-e-a +[148] https://www.wunc.org/wunc-public-radio-llc-board-of-directors +[149] https://www.wunc.org/people +[150] https://www.wunc.org/ways-to-connect +[151] https://www.wunc.org/wunc-jobs +[152] https://www.wunc.org/wunc-community-discussion-rules +[153] https://www.wunc.org/telling-public-radios-story +[154] https://www.wunc.org/ethics +[155] https://www.wunc.org/contact-us +[157] https://www.wunc.org/year-end-giving-deadlines-to-know +[158] https://www.wunc.org/ways-to-give-to-wunc +[159] https://www.wunc.org/thank-you-gifts +[160] https://www.wunc.org/drawing-rules-entry-form +[161] https://www.wunc.org/wunc-sustainers +[162] https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 +[163] https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 +[164] https://www.wunc.org/join-the-leadership-circle +[165] https://wunc.careasy.org/home +[166] https://www.wunc.org/volunteer-opportunities +[167] https://www.wunc.org/wuncs-legacy-society +[168] https://www.wunc.org/sponsorships +[169] https://www.wunc.org/community-sponsor-circle +[170] https://www.wunc.org/other-ways-to-give +[171] https://www.wunc.org/year-end-giving-deadlines-to-know +[172] https://www.wunc.org/ways-to-give-to-wunc +[173] https://www.wunc.org/thank-you-gifts +[174] https://www.wunc.org/drawing-rules-entry-form +[175] https://www.wunc.org/wunc-sustainers +[176] https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 +[177] https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 +[178] https://www.wunc.org/join-the-leadership-circle +[179] https://wunc.careasy.org/home +[180] https://www.wunc.org/volunteer-opportunities +[181] https://www.wunc.org/wuncs-legacy-society +[182] https://www.wunc.org/sponsorships +[183] https://www.wunc.org/community-sponsor-circle +[184] https://www.wunc.org/other-ways-to-give +[185] https://www.wunc.org/wunc-music +[186] https://www.wunc.org/search +[188] https://www.wunc.org/ +[192] https://support.wunc.org/site/Donation2?2885.donation=form1&df_id=2885&mfc_pref=T +[203] https://www.wunc.org/nc-news +[204] https://www.wunc.org/tags/npr-news +[205] https://www.wunc.org/politics +[206] https://www.wunc.org/arts-culture +[207] https://www.wunc.org/race-demographics +[208] https://www.wunc.org/business-economy +[209] https://www.wunc.org/education +[210] https://www.wunc.org/environment +[211] https://www.wunc.org/health +[212] https://www.wunc.org/science-technology +[213] https://www.wunc.org/military +[214] https://www.wunc.org/sports +[215] https://www.wunc.org/tags/weather +[216] https://www.wunc.org/ethics +[217] https://www.wunc.org/tags/corrections-clarifications +[218] https://www.wunc.org/nc-news +[219] https://www.wunc.org/tags/npr-news +[220] https://www.wunc.org/politics +[221] https://www.wunc.org/arts-culture +[222] https://www.wunc.org/race-demographics +[223] https://www.wunc.org/business-economy +[224] https://www.wunc.org/education +[225] https://www.wunc.org/environment +[226] https://www.wunc.org/health +[227] https://www.wunc.org/science-technology +[228] https://www.wunc.org/military +[229] https://www.wunc.org/sports +[230] https://www.wunc.org/tags/weather +[231] https://www.wunc.org/ethics +[232] https://www.wunc.org/tags/corrections-clarifications +[234] https://www.wunc.org/triangle-news +[235] https://www.wunc.org/triad-news +[236] https://www.wunc.org/fayetteville-area-news +[237] https://www.wunc.org/eastern-nc-news +[238] https://www.wunc.org/southeastern-nc-news +[239] https://www.wunc.org/charlotte-area-news +[240] https://www.wunc.org/western-nc-news +[241] https://www.wunc.org/triangle-news +[242] https://www.wunc.org/triad-news +[243] https://www.wunc.org/fayetteville-area-news +[244] https://www.wunc.org/eastern-nc-news +[245] https://www.wunc.org/southeastern-nc-news +[246] https://www.wunc.org/charlotte-area-news +[247] https://www.wunc.org/western-nc-news +[249] https://www.wunc.org/tags/main-street-nc +[250] https://www.wunc.org/unc-chapel-hill-shooting +[251] https://www.wunc.org/raleigh-shooting +[252] https://www.wunc.org/tags/a-teacher-in-every-class +[253] https://www.wunc.org/behind-the-lines +[254] https://www.wunc.org/tested-beyond-the-pod +[255] https://www.wunc.org/the-lives-lost +[256] https://www.wunc.org/andrew-brown-jr +[257] https://www.wunc.org/calling-for-change +[258] https://www.wunc.org/lumberton-undeterred +[259] https://www.wunc.org/southern-witness +[260] https://www.wunc.org/tags/nc-coronavirus-updates +[261] https://www.wunc.org/education/2021-12-14/the-cost-of-summer +[262] https://www.wunc.org/a-state-divided-hb2-and-transgender-rights +[263] https://www.wunc.org/tags/main-street-nc +[264] https://www.wunc.org/unc-chapel-hill-shooting +[265] https://www.wunc.org/raleigh-shooting +[266] https://www.wunc.org/tags/a-teacher-in-every-class +[267] https://www.wunc.org/behind-the-lines +[268] https://www.wunc.org/tested-beyond-the-pod +[269] https://www.wunc.org/the-lives-lost +[270] https://www.wunc.org/andrew-brown-jr +[271] https://www.wunc.org/calling-for-change +[272] https://www.wunc.org/lumberton-undeterred +[273] https://www.wunc.org/southern-witness +[274] https://www.wunc.org/tags/nc-coronavirus-updates +[275] https://www.wunc.org/education/2021-12-14/the-cost-of-summer +[276] https://www.wunc.org/a-state-divided-hb2-and-transgender-rights +[278] https://www.wunc.org/about-due-south +[279] https://www.wunc.org/show/due-south +[280] https://www.wunc.org/contact-due-south +[281] https://www.wunc.org/about-due-south +[282] https://www.wunc.org/show/due-south +[283] https://www.wunc.org/contact-due-south +[285] https://www.wunc.org/wunc-radio-schedule +[286] https://www.wunc.org/all-shows +[287] https://www.wunc.org/show/due-south +[288] https://www.wunc.org/show/all-things-considered +[289] https://www.wunc.org/show/morning-edition +[290] https://www.wunc.org/back-porch-music +[291] https://www.wunc.org/show/embodied-radio-show +[292] https://www.wunc.org/show/sound-opinions +[293] https://www.wunc.org/show/thistle-and-shamrock +[294] https://www.wunc.org/youth-radio/youth-reporting-institute +[295] https://www.wunc.org/show/the-peoples-pharmacy +[296] https://americanhomefront.wunc.org/ +[297] https://www.wunc.org/show/fresh-air +[298] https://www.wunc.org/show/the-poetry-cafe +[299] https://www.wunc.org/npr-music-concerts +[300] https://www.wunc.org/wunc-radio-schedule +[301] https://www.wunc.org/all-shows +[302] https://www.wunc.org/show/due-south +[303] https://www.wunc.org/show/all-things-considered +[304] https://www.wunc.org/show/morning-edition +[305] https://www.wunc.org/back-porch-music +[306] https://www.wunc.org/show/embodied-radio-show +[307] https://www.wunc.org/show/sound-opinions +[308] https://www.wunc.org/show/thistle-and-shamrock +[309] https://www.wunc.org/youth-radio/youth-reporting-institute +[310] https://www.wunc.org/show/the-peoples-pharmacy +[311] https://americanhomefront.wunc.org/ +[312] https://www.wunc.org/show/fresh-air +[313] https://www.wunc.org/show/the-poetry-cafe +[314] https://www.wunc.org/npr-music-concerts +[316] https://www.wunc.org/podcasts-from-wunc +[317] https://www.wunc.org/podcast/the-broadside +[318] https://www.wunc.org/podcast/embodied-podcast +[319] https://www.wunc.org/podcast/podcast-wuncpolitics +[320] https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast +[321] https://www.wunc.org/podcasts-from-wunc +[322] https://www.wunc.org/podcast/the-broadside +[323] https://www.wunc.org/podcast/embodied-podcast +[324] https://www.wunc.org/podcast/podcast-wuncpolitics +[325] https://www.wunc.org/podcast/me-and-my-muslim-friends-podcast +[327] https://www.wunc.org/about-wunc +[328] https://www.wunc.org/ways-to-listen-to-wunc-online +[329] https://www.wunc.org/about-hd-radio +[330] https://www.wunc.org/station-policies-financial-documents +[331] https://www.wunc.org/i-d-e-a +[332] https://www.wunc.org/wunc-public-radio-llc-board-of-directors +[333] https://www.wunc.org/people +[334] https://www.wunc.org/ways-to-connect +[335] https://www.wunc.org/wunc-jobs +[336] https://www.wunc.org/wunc-community-discussion-rules +[337] https://www.wunc.org/telling-public-radios-story +[338] https://www.wunc.org/ethics +[339] https://www.wunc.org/contact-us +[340] https://www.wunc.org/about-wunc +[341] https://www.wunc.org/ways-to-listen-to-wunc-online +[342] https://www.wunc.org/about-hd-radio +[343] https://www.wunc.org/station-policies-financial-documents +[344] https://www.wunc.org/i-d-e-a +[345] https://www.wunc.org/wunc-public-radio-llc-board-of-directors +[346] https://www.wunc.org/people +[347] https://www.wunc.org/ways-to-connect +[348] https://www.wunc.org/wunc-jobs +[349] https://www.wunc.org/wunc-community-discussion-rules +[350] https://www.wunc.org/telling-public-radios-story +[351] https://www.wunc.org/ethics +[352] https://www.wunc.org/contact-us +[354] https://www.wunc.org/year-end-giving-deadlines-to-know +[355] https://www.wunc.org/ways-to-give-to-wunc +[356] https://www.wunc.org/thank-you-gifts +[357] https://www.wunc.org/drawing-rules-entry-form +[358] https://www.wunc.org/wunc-sustainers +[359] https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 +[360] https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 +[361] https://www.wunc.org/join-the-leadership-circle +[362] https://wunc.careasy.org/home +[363] https://www.wunc.org/volunteer-opportunities +[364] https://www.wunc.org/wuncs-legacy-society +[365] https://www.wunc.org/sponsorships +[366] https://www.wunc.org/community-sponsor-circle +[367] https://www.wunc.org/other-ways-to-give +[368] https://www.wunc.org/year-end-giving-deadlines-to-know +[369] https://www.wunc.org/ways-to-give-to-wunc +[370] https://www.wunc.org/thank-you-gifts +[371] https://www.wunc.org/drawing-rules-entry-form +[372] https://www.wunc.org/wunc-sustainers +[373] https://support.wunc.org/site/Donation2;jsessionid=00000000.app30114a?idb=877548436&DONATION_LEVEL_ID_SELECTED=1&df_id=2033&mfc_pref=T&2033.donation=form1&NONCE_TOKEN=64CF2D8289923341669CC5D4BFB6EF54&idb=0 +[374] https://support.wunc.org/site/Donation2?df_id=2140&mfc_pref=T&2140.donation=form1 +[375] https://www.wunc.org/join-the-leadership-circle +[376] https://wunc.careasy.org/home +[377] https://www.wunc.org/volunteer-opportunities +[378] https://www.wunc.org/wuncs-legacy-society +[379] https://www.wunc.org/sponsorships +[380] https://www.wunc.org/community-sponsor-circle +[381] https://www.wunc.org/other-ways-to-give +[382] https://www.wunc.org/wunc-music +[383] https://www.wunc.org/search +[384] https://www.wunc.org/news +[385] https://www.wunc.org/people/mitchell-northam +[386] https://www.wunc.org/people/bradley-george +[387] https://www.wunc.org/people/will-michaels +[388] https://www.facebook.com/dialog/share?app_id=3927319740668442&display=popup&href=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816 +[389] https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816&text=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday +[390] https://www.linkedin.com/shareArticle?url=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816&mini=true&title=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday&summary=Tuesday%27s%20severe%20thunderstorms%20caused%20damages%2C%20outages%2C%20car%20accidents%2C%20and%20road%20closures.%20One%2078-year-old%20Durham%20woman%20died%20after%20a%20tree%20fell%20on%20her%20car.&source=WUNC +[391] mailto:?body=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday%0A%0Ahttps%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816%0A%0ATuesday%27s%20severe%20thunderstorms%20caused%20damages%2C%20outages%2C%20car%20accidents%2C%20and%20road%20closures.%20One%2078-year-old%20Durham%20woman%20died%20after%20a%20tree%20fell%20on%20her%20car. +[392] https://twitter.com/AnissaLopezTV?ref_src=twsrc%5Etfw +[393] https://twitter.com/SpecNews1RDU?ref_src=twsrc%5Etfw +[394] https://t.co/Yuphqoo3TG +[395] https://twitter.com/KyleighPanetta/status/1691778846532509716?ref_src=twsrc%5Etfw +[396] https://www.wral.com/story/i-40-west-in-durham-reopens-after-crash-involving-32-vehicles-during-severe-storms/21001866/ +[397] https://www.dconc.gov/Home/Components/News/News/9711/31 +[398] https://t.co/F5OiDz2EvF +[399] https://twitter.com/wunc/status/1691574282189516878?ref_src=twsrc%5Etfw +[400] https://www.wunc.org/news +[401] https://www.wunc.org/tags/durham-county +[402] https://www.wunc.org/tags/thunderstorms +[403] https://www.wunc.org/tags/school-closure +[404] https://www.wunc.org/tags/weather +[405] https://www.facebook.com/dialog/share?app_id=3927319740668442&display=popup&href=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816 +[406] https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816&text=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday +[407] https://www.linkedin.com/shareArticle?url=https%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816&mini=true&title=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday&summary=Tuesday%27s%20severe%20thunderstorms%20caused%20damages%2C%20outages%2C%20car%20accidents%2C%20and%20road%20closures.%20One%2078-year-old%20Durham%20woman%20died%20after%20a%20tree%20fell%20on%20her%20car.&source=WUNC +[408] mailto:?body=Storm%20leaves%20trail%20of%20damage%20across%20central%20NC%3B%20Thousands%20still%20without%20power%20Wednesday%0A%0Ahttps%3A%2F%2Fwww.wunc.org%2Fnews%2F2023-08-16%2Fstorm-damage-durham-power-outage-closures-north-carolina-816%0A%0ATuesday%27s%20severe%20thunderstorms%20caused%20damages%2C%20outages%2C%20car%20accidents%2C%20and%20road%20closures.%20One%2078-year-old%20Durham%20woman%20died%20after%20a%20tree%20fell%20on%20her%20car. +[409] https://www.wunc.org/people/mitchell-northam +[410] https://www.wunc.org/people/mitchell-northam +[411] https://www.wunc.org/people/mitchell-northam +[412] https://www.wunc.org/people/bradley-george +[413] https://www.wunc.org/people/bradley-george +[414] https://www.wunc.org/people/bradley-george +[415] https://www.wunc.org/people/will-michaels +[416] https://www.wunc.org/people/will-michaels +[417] https://www.wunc.org/people/will-michaels +[418] https://www.wunc.org/2024-01-17/sobbed-podcast-transcript +[419] https://www.wunc.org/2024-01-17/you-only-call-when-youre-in-trouble-is-a-witty-novel-to-get-you-through-the-winter +[420] https://www.wunc.org/2024-01-17/princess-of-wales-undergoes-abdominal-surgery-king-charles-to-have-prostate-procedure +[421] https://www.wunc.org/2024-01-17/higher-insurance-rates-in-buncombe-county-inflation-and-climate-change-may-be-to-blame +[422] https://www.wunc.org/2024-01-17/30-years-ago-a-magnitude-6-7-earthquake-struck-northridge-in-southern-california +[423] https://www.wunc.org/2024-01-17/iowas-results-show-trump-is-off-to-a-good-start-to-be-the-gop-presidential-nominee +[424] https://www.wunc.org/events-calendar +[425] https://www.wunc.org/2024-01-17/gop-governor-primary-heats-up-as-graham-airs-tv-ads-criticizing-robinson-over-holocaust-posts +[426] https://www.wunc.org/2024-01-17/gop-governor-primary-heats-up-as-graham-airs-tv-ads-criticizing-robinson-over-holocaust-posts +[427] https://www.wfae.org/people/steve-harrison +[428] https://www.wunc.org/2024-01-17/local-leaders-deny-any-connection-between-state-infrastructure-grants-and-proposed-casinos +[429] https://www.wunc.org/2024-01-17/local-leaders-deny-any-connection-between-state-infrastructure-grants-and-proposed-casinos +[430] https://www.wfae.org/people/marshall-terry +[432] https://www.wunc.org/education/2024-01-16/unc-greensboro-announces-program-cut-recommendations +[433] https://www.wunc.org/education +[434] https://www.wunc.org/education/2024-01-16/unc-greensboro-announces-program-cut-recommendations +[435] https://www.wunc.org/people/brianna-atkinson +[436] https://www.wunc.org/2024-01-16/new-hanover-county-sues-over-a-dozen-pfas-manufacturers-sellers +[437] https://www.wunc.org/2024-01-16/new-hanover-county-sues-over-a-dozen-pfas-manufacturers-sellers +[438] https://www.whqr.org/people/kelly-kenoyer-2 +[440] https://www.wunc.org/sports/2024-01-16/unc-pembroke-dick-christy-gambling-betting-impact-small-colleges +[441] https://www.wunc.org/sports +[442] https://www.wunc.org/sports/2024-01-16/unc-pembroke-dick-christy-gambling-betting-impact-small-colleges +[443] https://www.wunc.org/people/mitchell-northam +[444] https://www.wunc.org/ +[445] https://twitter.com/wunc +[446] https://www.instagram.com/915wunc/ +[447] https://www.youtube.com/wuncfm +[448] https://www.facebook.com/915wunc +[449] https://www.linkedin.com/company/wunc-fm-91.5fm-north-carolina-public-radio +[450] https://www.wunc.org/ways-to-listen-to-wunc-online +[451] https://www.wunc.org/podcasts-from-wunc +[452] https://www.wunc.org/events-calendar +[453] https://www.wunc.org/about-wunc +[454] https://www.wunc.org/contact-us +[455] https://www.wunc.org/wunc-jobs +[456] https://www.wunc.org/privacy +[457] https://www.wunc.org/fcc-applications +[458] https://publicfiles.fcc.gov/fm-profile/WUNC +[459] https://publicfiles.fcc.gov/fm-profile/WBUX +[460] https://publicfiles.fcc.gov/fm-profile/WFSS +[461] https://publicfiles.fcc.gov/fm-profile/WRQM +[462] https://publicfiles.fcc.gov/fm-profile/WUND-FM +[463] https://publicfiles.fcc.gov/fm-profile/WURI +[464] https://publicfiles.fcc.gov/fm-profile/WUNW-FM +[465] https://publicfiles.fcc.gov/fm-profile/WZCO +[466] https://docs.google.com/document/u/1/d/e/2PACX-1vSqllkRbwiZZtXGXNeRNC8bs8yd4syzFuPDZUAc5XQqadIJ91cqQCujTD_rN2-vmIT-vYeAYA693exg/pub +[467] http://www.npr.org/ +[468] http://prx.org/ +[469] https://www.pri.org/ +[470] https://www.americanpublicmedia.org/ +[471] http://bbc.com/ diff --git a/static/archive/xeiaso-net-ygnwtd.txt b/static/archive/xeiaso-net-ygnwtd.txt index bb02faf..3bd10a2 100644 --- a/static/archive/xeiaso-net-ygnwtd.txt +++ b/static/archive/xeiaso-net-ygnwtd.txt @@ -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. +Published on 09/20/2023, 3515 words, 13 minutes to read - 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. - Consider this famous and often misunderstood quote by Richard Stallman: +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. - 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. +Consider this famous and often misunderstood quote by Richard Stallman: - 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: + 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. - 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! +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: - 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. +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. - 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. +Mara is hacker +<[8]Mara> Fun fact, if you try to boot a Linux kernel without an init process, +it'll just panic and crash! - 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. +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. - 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? +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. - I'm going to argue that Android is not a Linux distribution unto - itself. Android is a Linux implementation. It uses the Linux kernel, - but that's where the similarities with the rest of the ecosystem end. - Android is its own little world where there's just enough system tools - to get the system running, but once you get into the UI, it's a - completely different world. It's a completely different ecosystem. It's - a completely different operating system. - Aoi is wut - <[21]Aoi> So what's the difference between a Linux distribution and a - Linux implementation? - Cadey is enby - <[22]Cadey> It's a bit of a fuzzy line, but I'd say that a Linux - distribution is a collection of discrete tools that make Linux useful, - and a Linux implementation is a cohesive collection of bespoke tools - that make Linux into a complete system. Really, you could argue that if - it has /bin/sh, it's a Linux distribution. +Mara is hacker +<[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. + +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. + +Aoi is wut +<[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. + +Aoi is wut +<[19]Aoi> So what's the difference between a Linux distribution and a Linux +implementation? +Cadey is enby +<[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 - 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) +Out of the box a gokrazy install comes with these basic tools: - 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. + • The init process that is mandated to be the parent of all userland + processes by the Linux kernel. + • 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. + +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. +Mara is hacker +<[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: - 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 + +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": { @@ -280,83 +277,84 @@ 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. +Mara is hacker +<[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. +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. - Aoi is wut - <[37]Aoi> Wait, so how do I log in with a shell? - Cadey is enby - <[38]Cadey> You don't. gokrazy doesn't have a login prompt. It's a - single-user system. There is [39]breakglass as a tool of last resort to - modify things, but you only have a very minimal subset of busybox to - work with, so it should be avoided if at all possible. +Once you have your image written to your SD card, you can boot it on your +Raspberry Pi or VM. - 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] +Aoi is wut +<[35]Aoi> Wait, so how do I log in with a shell? +Cadey is enby +<[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. - 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. +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: + +[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: +Then configure it with gok edit: + { // ... "PackageConfig": { @@ -377,51 +375,55 @@ gok add github.com/tailscale/golink/cmd/golink // ... } - And finally push it with gok update: +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] +Here's an example meme: + +[49][society-if] + +To add tmemes to your gokrazy machine, you can use gok add: - 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": { @@ -444,30 +446,32 @@ gok add github.com/tailscale/tmemes/tmemes // ... } - And then push it with gok update: +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: - 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": { @@ -486,115 +490,112 @@ gok add github.com/tailscale-dev/tclip/cmd/tclipd } } - And then push it with gok update: +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. - Mara is hacker - <[58]Mara> Spoiler alert: [59]waifud support is coming soon to a - homelab near you. - __________________________________________________________________ +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. - (BUTTON) Share +Mara is hacker +<[56]Mara> Spoiler alert: [57]waifud support is coming soon to a homelab near +you. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +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 +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