Finish December dispatch
This commit is contained in:
792
static/archive/allaboutcoding-ghinda-com-jnjy0d.txt
Normal file
792
static/archive/allaboutcoding-ghinda-com-jnjy0d.txt
Normal file
@@ -0,0 +1,792 @@
|
||||
|
||||
(BUTTON)
|
||||
|
||||
Lucian Ghinda
|
||||
|
||||
All about coding
|
||||
|
||||
(BUTTON) (BUTTON)
|
||||
Follow
|
||||
|
||||
[1]All about coding
|
||||
|
||||
Follow
|
||||
Ruby open source: feedbin Ruby open source: feedbin
|
||||
|
||||
Ruby open source: feedbin
|
||||
|
||||
[2]Lucian Ghinda's photo Lucian Ghinda's photo
|
||||
[3]Lucian Ghinda
|
||||
·[4]Nov 17, 2023·
|
||||
|
||||
11 min read
|
||||
|
||||
Table of contents
|
||||
|
||||
* [5]The product
|
||||
* [6]Open source
|
||||
+ [7]License
|
||||
* [8]Technical review
|
||||
+ [9]Ruby and Rails version
|
||||
+ [10]Architecture
|
||||
+ [11]Stats
|
||||
+ [12]Style Guide
|
||||
+ [13]Storage, Persistence and in-memory storage
|
||||
+ [14]Gems used
|
||||
+ [15]Code & Design Patterns
|
||||
o [16]Code Organisation
|
||||
o [17]Routes
|
||||
o [18]Controllers
|
||||
o [19]Models
|
||||
o [20]Jobs
|
||||
o [21]Presenters
|
||||
o [22]ApplicationComponents
|
||||
o [23]ComponentsPreview
|
||||
* [24]Testing
|
||||
+ [25]Custom assertions
|
||||
* [26]Conclusion
|
||||
|
||||
The product
|
||||
|
||||
[27]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"
|
||||
|
||||
Open source
|
||||
|
||||
The open-source repository can be found at
|
||||
[28]https://github.com/feedbin/feedbin
|
||||
|
||||
License
|
||||
|
||||
The [29]license they use is MIT:
|
||||
|
||||
Technical review
|
||||
|
||||
Ruby and Rails version
|
||||
|
||||
They are currently using:
|
||||
* Ruby version 3.2.2
|
||||
* They used a fork of Rails at [30]https://github.com/feedbin/rails
|
||||
forked from [31]https://github.com/Shopify/rails. They are using a
|
||||
branch called [32]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.
|
||||
|
||||
Database:
|
||||
* The DB is PostgreSQL
|
||||
|
||||
Jobs queue:
|
||||
* Sidekiq
|
||||
|
||||
On the front-end side:
|
||||
* They use .html.erb
|
||||
* They are using Phlex for [33]components
|
||||
* They are using [34]Jquery for the JS library
|
||||
* They have some custom JS code written in [35]CoffeeScript
|
||||
* They are using Hotwire via [36]importmaps
|
||||
* They are using [37]Tailwind
|
||||
|
||||
Stats
|
||||
|
||||
Running /bin/rails stats will output the following:
|
||||
|
||||
Running VSCodeCounter will give the following stats:
|
||||
|
||||
Style Guide
|
||||
|
||||
For Ruby:
|
||||
* They are using [38]standardrb as the Style Guide with no
|
||||
customisations.
|
||||
|
||||
Storage, Persistence and in-memory storage
|
||||
|
||||
The DB is PostgreSQL.
|
||||
|
||||
They are not using the schema.rb but the [39]structure.sql format for
|
||||
DB schema dump is configured via application.rb:
|
||||
module Feedbin
|
||||
class Application < Rails::Application
|
||||
# other configs
|
||||
config.active_record.schema_format = :sql
|
||||
# other configs
|
||||
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)"
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public;
|
||||
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';
|
||||
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
|
||||
COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UU
|
||||
IDs)';
|
||||
|
||||
Redis is configured to be used with Sidekiq.
|
||||
|
||||
This is what the [40]redis initializer looks like:
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/initializers/redis.rb#L1
|
||||
|
||||
defaults = {connect_timeout: 5, timeout: 5}
|
||||
defaults[:url] = ENV["REDIS_URL"] if ENV["REDIS_URL"]
|
||||
|
||||
$redis = {}.tap do |hash|
|
||||
options2 = defaults.dup
|
||||
if ENV["REDIS_URL_PUBLIC_IDS"] || ENV["REDIS_URL_CACHE"]
|
||||
options2[:url] = ENV["REDIS_URL_PUBLIC_IDS"] || ENV["REDIS_URL_CACHE"]
|
||||
end
|
||||
hash[:refresher] = ConnectionPool.new(size: 10) { Redis.new(options2) }
|
||||
end
|
||||
|
||||
Further, there is a [41]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) }
|
||||
end
|
||||
end
|
||||
|
||||
Further down this is used in a [42]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
|
||||
if RedisLock.acquire("clockwork:send_stats:v3", 8)
|
||||
SendStats.perform_async
|
||||
end
|
||||
|
||||
if RedisLock.acquire("clockwork:cache_entry_views", 8)
|
||||
CacheEntryViews.perform_async(nil, true)
|
||||
end
|
||||
|
||||
if RedisLock.acquire("clockwork:downloader_migration", 8)
|
||||
FeedCrawler::PersistCrawlData.perform_async
|
||||
end
|
||||
end
|
||||
|
||||
every(1.minutes, "clockwork.frequent") do
|
||||
if RedisLock.acquire("clockwork:feed:refresher:scheduler:v2")
|
||||
FeedCrawler::ScheduleAll.perform_async
|
||||
end
|
||||
|
||||
if RedisLock.acquire("clockwork:harvest:embed:data")
|
||||
HarvestEmbeds.perform_async(nil, true)
|
||||
end
|
||||
end
|
||||
|
||||
every(1.day, "clockwork.daily", at: "7:00", tz: "UTC") do
|
||||
if RedisLock.acquire("clockwork:delete_entries:v2")
|
||||
EntryDeleterScheduler.perform_async
|
||||
end
|
||||
|
||||
if RedisLock.acquire("clockwork:trial_expiration:v2")
|
||||
TrialExpiration.perform_async
|
||||
end
|
||||
|
||||
if RedisLock.acquire("clockwork:web_sub_maintenance")
|
||||
WebSub::Maintenance.perform_async
|
||||
end
|
||||
end
|
||||
|
||||
Gems used
|
||||
|
||||
Here are some of the gems used:
|
||||
* [43]sax-machine - "A declarative sax parsing library backed by
|
||||
Nokogiri"
|
||||
* [44]feedjira - "Feedjira is a Ruby library designed to parse feeds"
|
||||
* [45]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"
|
||||
* [46]apnotic - "A Ruby APNs HTTP/2 gem able to provide instant
|
||||
feedback"
|
||||
* [47]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"
|
||||
* [48]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"
|
||||
* [49]down - "Streaming downloads using net/http, http.rb, HTTPX or
|
||||
wget"
|
||||
* [50]phlex-rails - "Phlex is a framework that lets you compose web
|
||||
views in pure Ruby"
|
||||
* [51]premailer-rails - "This gem is a drop in solution for styling
|
||||
HTML emails with CSS without having to do the hard work yourself"
|
||||
* [52]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"
|
||||
* [53]strong_migrations - "Catch unsafe migrations in development"
|
||||
* [54]web-push - "This gem makes it possible to send push messages to
|
||||
web browsers from Ruby backends using the Web Push Protocol"
|
||||
* [55]stripe-ruby-mock - "A drop-in library to test stripe without
|
||||
hitting their servers"
|
||||
* [56]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
|
||||
[57]Gemfile to discover more.
|
||||
|
||||
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
|
||||
|
||||
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 "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 "html_diff", github: "feedbin/html_diff", ref: "013e1bb"
|
||||
gem "twitter", github: "feedbin/twitter", branch: "feedb
|
||||
in"
|
||||
|
||||
# other gems
|
||||
|
||||
group :development, :test do
|
||||
gem "stripe-ruby-mock", github: "feedbin/stripe-ruby-mock", branch: "feedbin",
|
||||
require: "stripe_mock"
|
||||
# other gems
|
||||
end
|
||||
|
||||
# other gem groups
|
||||
|
||||
Code & Design Patterns
|
||||
|
||||
Code Organisation
|
||||
|
||||
Under /app there are 3 folders different from the ones that Rails comes
|
||||
with:
|
||||
* presenters
|
||||
* 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
|
||||
[58]ConditionalSassCompressor
|
||||
# https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.r
|
||||
b#L1
|
||||
|
||||
class ConditionalSassCompressor
|
||||
def compress(string)
|
||||
return string if string =~ /tailwindcss/
|
||||
options = { syntax: :scss, cache: false, read_cache: false, style: :compress
|
||||
ed}
|
||||
begin
|
||||
Sprockets::Autoload::SassC::Engine.new(string, options).render
|
||||
rescue => e
|
||||
puts "Could not compress '#{string[0..65]}'...: #{e.message}, skipping com
|
||||
pression"
|
||||
string
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
This is used to configure:
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/application.rb#L47
|
||||
config.assets.css_compressor = ConditionalSassCompressor.new
|
||||
|
||||
Routes
|
||||
|
||||
There is a combination of RESTful routes and non-restful routes.
|
||||
|
||||
Here is an example from entries in the [59]routes.rb :
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133
|
||||
|
||||
resources :entries, only: [:show, :index, :destroy] do
|
||||
member do
|
||||
post :content
|
||||
post :unread_entries, to: "unread_entries#update"
|
||||
post :starred_entries, to: "starred_entries#update"
|
||||
post :mark_as_read, to: "entries#mark_as_read"
|
||||
post :recently_read, to: "recently_read_entries#create"
|
||||
post :recently_played, to: "recently_played_entries#create"
|
||||
get :push_view
|
||||
get :newsletter
|
||||
end
|
||||
collection do
|
||||
get :starred
|
||||
get :unread
|
||||
get :preload
|
||||
get :search
|
||||
get :recently_read, to: "recently_read_entries#index"
|
||||
get :recently_played, to: "recently_played_entries#index"
|
||||
get :updated, to: "updated_entries#index"
|
||||
post :mark_all_as_read
|
||||
post :mark_direction_as_read
|
||||
end
|
||||
end
|
||||
|
||||
Controllers
|
||||
|
||||
The controllers are mostly what I would call vanilla Rails controllers.
|
||||
|
||||
Three notes about them:
|
||||
* Some of them are responding with JS usually using USJ or JQuery to
|
||||
change elements from the page.
|
||||
* They contain non-Rails standard actions (actions that are not show,
|
||||
index, new, create ...)
|
||||
* There is a namespaced api folder that contains APIs used by mobile
|
||||
apps
|
||||
|
||||
Here is one simple example for DELETE /entries/:id , the controller
|
||||
looks like this:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/entries_controlle
|
||||
r.rb#L238
|
||||
def destroy
|
||||
@user = current_user
|
||||
@entry = @user.entries.find(params[:id])
|
||||
if @entry.feed.pages?
|
||||
EntryDeleter.new.delete_entries(@entry.feed_id, @entry.id)
|
||||
end
|
||||
end
|
||||
|
||||
And here is the view [60]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.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 repo contains mostly straight-forward controllers like this one:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/pages_internal_co
|
||||
ntroller.rb#L1
|
||||
class PagesInternalController < ApplicationController
|
||||
|
||||
def create
|
||||
@entry = SavePage.new.perform(current_user.id, params[:url], nil)
|
||||
get_feeds_list
|
||||
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
|
||||
|
||||
def show
|
||||
url = hex_decode(params[:id])
|
||||
@feed = Feed.find_by_feed_url(url)
|
||||
if @feed.present?
|
||||
if @feed.standalone_request_at.blank?
|
||||
FeedStatus.new.perform(@feed.id)
|
||||
FeedUpdate.new.perform(@feed.id)
|
||||
end
|
||||
else
|
||||
feeds = FeedFinder.feeds(url)
|
||||
@feed = feeds.first
|
||||
end
|
||||
|
||||
if @feed.present?
|
||||
@feed.touch(:standalone_request_at)
|
||||
else
|
||||
status_not_found
|
||||
end
|
||||
rescue => exception
|
||||
if Rails.env.production?
|
||||
ErrorService.notify(exception)
|
||||
status_not_found
|
||||
else
|
||||
raise exception
|
||||
end
|
||||
end
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Here is one job that is caching views:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/jobs/cache_entry_views.rb#L1
|
||||
|
||||
class CacheEntryViews
|
||||
include Sidekiq::Worker
|
||||
include SidekiqHelper
|
||||
|
||||
SET_NAME = "#{name}-ids"
|
||||
|
||||
def perform(entry_id, process = false)
|
||||
if process
|
||||
cache_views
|
||||
else
|
||||
add_to_queue(SET_NAME, entry_id)
|
||||
end
|
||||
end
|
||||
|
||||
def cache_views
|
||||
entry_ids = dequeue_ids(SET_NAME)
|
||||
entries = Entry.where(id: entry_ids).includes(feed: [:favicon])
|
||||
ApplicationController.render({
|
||||
partial: "entries/entry",
|
||||
collection: entries,
|
||||
format: :html,
|
||||
cached: true
|
||||
})
|
||||
ApplicationController.render({
|
||||
layout: nil,
|
||||
template: "api/v2/entries/index",
|
||||
assigns: {entries: entries},
|
||||
format: :html,
|
||||
locals: {
|
||||
params: {mode: "extended"}
|
||||
}
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
Presenters
|
||||
|
||||
There is a [61]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
|
||||
|
||||
class BasePresenter
|
||||
def initialize(object, locals, template)
|
||||
@object = object
|
||||
@locals = locals
|
||||
@template = template
|
||||
end
|
||||
|
||||
# ...
|
||||
|
||||
private
|
||||
|
||||
def self.presents(name)
|
||||
define_method(name) do
|
||||
@object
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
delegate_missing_to :user
|
||||
|
||||
# ... more code
|
||||
|
||||
def theme
|
||||
result = settings["theme"].present? ? settings["theme"] : nil
|
||||
result || user.theme || "auto"
|
||||
end
|
||||
# ... other code
|
||||
end
|
||||
|
||||
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
|
||||
presenter = klass.new(object, locals, self)
|
||||
yield presenter if block_given?
|
||||
presenter
|
||||
end
|
||||
|
||||
# more code ...
|
||||
end
|
||||
|
||||
and it is used [62]like this in views:
|
||||
<% present @user do |user_presenter| %>
|
||||
<% @class = "settings-body settings-#{params[:action]} theme-#{user_presente
|
||||
r.theme}"%>
|
||||
<% end %>
|
||||
|
||||
ApplicationComponents
|
||||
|
||||
Components are based on Phlex and they inherit from
|
||||
[63]ApplicationComponent
|
||||
|
||||
It defines a method to add Stimulus controller in components like this:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_
|
||||
component.rb#L25
|
||||
|
||||
def stimulus(controller:, actions: {}, values: {}, outlets: {}, classes: {}, d
|
||||
ata: {})
|
||||
stimulus_controller = controller.to_s.dasherize
|
||||
|
||||
action = actions.map do |event, function|
|
||||
"#{event}->#{stimulus_controller}##{function.camelize(:lower)}"
|
||||
end.join(" ").presence
|
||||
|
||||
values.transform_keys! do |key|
|
||||
[controller, key, "value"].join("_").to_sym
|
||||
end
|
||||
|
||||
outlets.transform_keys! do |key|
|
||||
[controller, key, "outlet"].join("_").to_sym
|
||||
end
|
||||
|
||||
classes.transform_keys! do |key|
|
||||
[controller, key, "class"].join("_").to_sym
|
||||
end
|
||||
|
||||
{ controller: stimulus_controller, action: }.merge!({ **values, **outlets, *
|
||||
*classes, **data})
|
||||
end
|
||||
|
||||
Where we can also see a bit of hash literal omission at {controller:
|
||||
stimulus_controller, action: }
|
||||
|
||||
But more interesting that this method that helps defining a Stimulus
|
||||
controller, is the method used to define a Stimulus item that uses
|
||||
binding to get variables from the object where it is used:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_
|
||||
component.rb#L47
|
||||
|
||||
def stimulus_item(target: nil, actions: {}, params: {}, data: {}, for:)
|
||||
stimulus_controller = binding.local_variable_get(:for).to_s.dasherize
|
||||
|
||||
action = actions.map do |event, function|
|
||||
"#{event}->#{stimulus_controller}##{function.to_s.camelize(:lower)}"
|
||||
end.join(" ").presence
|
||||
|
||||
params.transform_keys! do |key|
|
||||
:"#{binding.local_variable_get(:for)}_#{key}_param"
|
||||
end
|
||||
|
||||
defaults = { **params, **data }
|
||||
|
||||
if action
|
||||
defaults[:action] = action
|
||||
end
|
||||
|
||||
if target
|
||||
defaults[:"#{binding.local_variable_get(:for)}_target"] = target.to_s.came
|
||||
lize(:lower)
|
||||
end
|
||||
|
||||
defaults
|
||||
end
|
||||
|
||||
The part with binding does the following:
|
||||
* stimulus_controller =
|
||||
binding.local_variable_get(:for).to_s.dasherize This line retrieves
|
||||
the value of the local variable for, converts it to a string, and
|
||||
then applies the dasherize method (presumably to format it for use
|
||||
in a specific context, like a CSS class or an identifier in HTML).
|
||||
* Apparently binding.local_variable_get should not be needed as the
|
||||
variable is passed a keyword parameter to the method. But the name
|
||||
of the variable is for which is a reserved word and thus if the
|
||||
code would have been stimulus_controller = for.to_s_dasherize that
|
||||
would have raised syntax error, unexpected '.' (SyntaxError)
|
||||
|
||||
This is a way to have keyword arguments named as reserved words and
|
||||
still be able to use them.
|
||||
|
||||
ComponentsPreview
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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).
|
||||
# https://github.com/feedbin/feedbin/blob/main/test/support/assertions.rb#L3
|
||||
|
||||
def assert_has_keys(keys, hash)
|
||||
assert(keys.all? { |key| hash.key?(key) })
|
||||
end
|
||||
|
||||
def assert_equal_ids(collection, results)
|
||||
expected = Set.new(collection.map(&:id))
|
||||
actual = Set.new(results.map { |result| result["id"] })
|
||||
assert_equal(expected, actual)
|
||||
end
|
||||
|
||||
Conclusion
|
||||
|
||||
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.
|
||||
|
||||
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 [64]feedbin-docker.
|
||||
__________________________________________________________________
|
||||
|
||||
Enjoyed this article?
|
||||
|
||||
Join my [65]Short Ruby News newsletter for weekly Ruby updates from the
|
||||
community. For more Ruby learning resources, visit
|
||||
[66]rubyandrails.info. You can also find me on [67]Ruby.social or
|
||||
[68]Linkedin or [69]Twitter where I post mostly about Ruby and Rails.
|
||||
|
||||
Did you find this article valuable?
|
||||
|
||||
Support Lucian Ghinda by becoming a sponsor. Any amount is appreciated!
|
||||
(BUTTON) Sponsor
|
||||
[70]See recent sponsors | [71]Learn more about Hashnode Sponsors
|
||||
[72]Ruby[73]Ruby on Rails[74]Open Source[75]coding[76]Programming Blogs
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. file:///?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. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-the-product
|
||||
6. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-open-source
|
||||
7. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-license
|
||||
8. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-technical-review
|
||||
9. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-ruby-and-rails-version
|
||||
10. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-architecture
|
||||
11. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-stats
|
||||
12. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-style-guide
|
||||
13. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-storage-persistence-and-in-memory-storage
|
||||
14. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-gems-used
|
||||
15. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-code-amp-design-patterns
|
||||
16. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-code-organisation
|
||||
17. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-routes
|
||||
18. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-controllers
|
||||
19. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-models
|
||||
20. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-jobs
|
||||
21. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-presenters
|
||||
22. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-applicationcomponents
|
||||
23. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-componentspreview
|
||||
24. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-testing
|
||||
25. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-custom-assertions
|
||||
26. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L39092-8199TMP.html#heading-conclusion
|
||||
27. https://feedbin.com/
|
||||
28. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
29. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
30. https://github.com/feedbin/rails
|
||||
31. https://github.com/Shopify/rails
|
||||
32. https://github.com/feedbin/rails/tree/7-1-stable-invalid-cache-entries
|
||||
33. https://github.com/feedbin/feedbin/tree/main/app/views/components
|
||||
34. https://github.com/feedbin/feedbin/blob/main/Gemfile#L38
|
||||
35. https://github.com/feedbin/feedbin/tree/main/app/assets/javascripts/web
|
||||
36. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/importmap.rb#L1
|
||||
37. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L66
|
||||
38. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L94
|
||||
39. https://github.com/feedbin/feedbin/blob/main/db/structure.sql
|
||||
40. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/initializers/redis.rb#L1
|
||||
41. https://github.com/feedbin/feedbin/blob/main/app/models/redis_lock.rb#L1
|
||||
42. https://github.com/feedbin/feedbin/blob/main/lib/clock.rb#L8
|
||||
43. https://github.com/pauldix/sax-machine
|
||||
44. https://github.com/feedjira/feedjira
|
||||
45. https://github.com/feedbin/html-pipeline
|
||||
46. https://github.com/ostinelli/apnotic
|
||||
47. https://github.com/ai/autoprefixer-rails
|
||||
48. https://github.com/Rykian/clockwork
|
||||
49. https://github.com/janko/down
|
||||
50. https://github.com/phlex-ruby/phlex-rails
|
||||
51. https://github.com/fphilipe/premailer-rails
|
||||
52. https://rubygems.org/gems/raindrops
|
||||
53. https://github.com/ankane/strong_migrations
|
||||
54. https://github.com/pushpad/web-push
|
||||
55. https://github.com/stripe-ruby-mock/stripe-ruby-mock
|
||||
56. https://github.com/rails/rails-controller-testing
|
||||
57. https://github.com/feedbin/feedbin/blob/main/Gemfile
|
||||
58. https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.rb#L1
|
||||
59. https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133
|
||||
60. https://github.com/feedbin/feedbin/blob/main/app/views/entries/destroy.js.erb#L1
|
||||
61. https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#L1
|
||||
62. https://github.com/feedbin/feedbin/blob/main/app/views/layouts/settings.html.erb#L1
|
||||
63. https://github.com/feedbin/feedbin/blob/main/app/views/components/application_component.rb#L3
|
||||
64. https://github.com/angristan/feedbin-docker
|
||||
65. https://shortruby.com/
|
||||
66. http://rubyandrails.info/
|
||||
67. http://Ruby.social/
|
||||
68. https://linkedin.com/in/lucianghinda
|
||||
69. https://x.com/lucianghinda
|
||||
70. file:///sponsor
|
||||
71. https://hashnode.com/sponsors
|
||||
72. file:///tag/ruby?source=tags_bottom_blogs
|
||||
73. file:///tag/ruby-on-rails?source=tags_bottom_blogs
|
||||
74. file:///tag/opensource?source=tags_bottom_blogs
|
||||
75. file:///tag/coding?source=tags_bottom_blogs
|
||||
76. file:///tag/programming-blogs?source=tags_bottom_blogs
|
||||
|
||||
Hidden links:
|
||||
78. file://localhost/
|
||||
79. file://localhost/?source=top_nav_blog_home
|
||||
80. https://twitter.com/lucianghinda
|
||||
81. https://github.com/lucianghinda
|
||||
82. https://shortruby.com/
|
||||
83. https://hashnode.com/@lucianghinda
|
||||
84. https://app.daily.dev/lucianghinda
|
||||
85. https://linkedin.com/in/lucianghinda
|
||||
86. https://ruby.social/@lucian
|
||||
87. file://localhost/rss.xml
|
||||
88. https://feedbin.com/about
|
||||
89. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
90. http://rubyandrails.info/
|
||||
91. https://ruby.social/@lucian
|
||||
725
static/archive/www-newyorker-com-41taro.txt
Normal file
725
static/archive/www-newyorker-com-41taro.txt
Normal file
@@ -0,0 +1,725 @@
|
||||
#[1]alternate
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-NX5LSK3
|
||||
|
||||
[3]Skip to main content
|
||||
|
||||
[4]The New Yorker
|
||||
|
||||
* [5]Newsletter
|
||||
|
||||
To revisit this article, select My Account, then [6]View saved stories
|
||||
(BUTTON) Close Alert
|
||||
[7]Sign In
|
||||
[8]Search
|
||||
|
||||
* [9]The Latest
|
||||
* [10]2023 in Review
|
||||
* [11]News
|
||||
* [12]Books & Culture
|
||||
* [13]Fiction & Poetry
|
||||
* [14]Humor & Cartoons
|
||||
* [15]Magazine
|
||||
* [16]Puzzles & Games
|
||||
* [17]Video
|
||||
* [18]Podcasts
|
||||
* [19]Goings On
|
||||
* [20]Shop
|
||||
|
||||
(BUTTON) Open Navigation Menu
|
||||
|
||||
Find anything you save across the site in your account
|
||||
(BUTTON) Close Alert
|
||||
[21]The New Yorker
|
||||
|
||||
[22]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.
|
||||
|
||||
By [23]James Somers
|
||||
November 13, 2023
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
|
||||
(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
|
||||
|
||||
(BUTTON) Save this story
|
||||
(BUTTON) Save this story
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
[24]More on A.I.
|
||||
|
||||
[25]Sign up for The New Yorker’s weekly Science & Technology
|
||||
newsletter.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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?
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
|
||||
I’ll flay him alive
|
||||
Uncertainly he waited
|
||||
Heavy of the past
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
[26]“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
|
||||
|
||||
Link copied
|
||||
(BUTTON) Shop
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.”
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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?
|
||||
|
||||
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.
|
||||
|
||||
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 [27]November 20, 2023, issue,
|
||||
with the headline “Begin End.”
|
||||
|
||||
More Science and Technology
|
||||
|
||||
* Can we [28]stop runaway A.I.?
|
||||
* Saving the climate will depend on blue-collar workers. Can we train
|
||||
enough of them [29]before time runs out?
|
||||
* There are ways of controlling A.I.—but first we [30]need to stop
|
||||
mythologizing it.
|
||||
* A security camera [31]for the entire planet.
|
||||
* What’s the point of [32]reading writing by humans?
|
||||
* A heat shield for [33]the most important ice on Earth.
|
||||
* The climate solutions [34]we can’t live without.
|
||||
|
||||
[35]Sign up for our daily newsletter to receive the best stories from
|
||||
The New Yorker.
|
||||
[36]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
|
||||
|
||||
By signing up, you agree to our [37]User Agreement and [38]Privacy
|
||||
Policy & Cookie Statement. This site is protected by reCAPTCHA and the
|
||||
Google[39] Privacy Policy and[40] Terms of Service apply.
|
||||
|
||||
Read More
|
||||
[41]
|
||||
Why Can’t We Quit “The Morning Show”?
|
||||
On Television
|
||||
Why Can’t We Quit “The Morning Show”?
|
||||
[42]
|
||||
Why Can’t We Quit “The Morning Show”?
|
||||
Apple’s glossy experiment in prestige melodrama is utterly baffling—and
|
||||
must-watch TV.
|
||||
|
||||
By Inkoo Kang
|
||||
[43]The Man Who “Completed Football”
|
||||
The Sporting Scene
|
||||
The Man Who “Completed Football”
|
||||
[44]
|
||||
The Man Who “Completed Football”
|
||||
Pelly Ruddock Mpanzu, a central midfielder for Luton Town F.C., is the
|
||||
first player to rise from England’s lowest tier of professional soccer
|
||||
to its highest with a single team.
|
||||
|
||||
By Simon Akam
|
||||
[45]Why the Godfather of A.I. Fears What He’s Built
|
||||
Profiles
|
||||
Why the Godfather of A.I. Fears What He’s Built
|
||||
[46]
|
||||
Why the Godfather of A.I. Fears What He’s Built
|
||||
Geoffrey Hinton has spent a lifetime teaching computers to learn. Now
|
||||
he worries that artificial brains are better than ours.
|
||||
|
||||
By Joshua Rothman
|
||||
[47]How Jensen Huang’s Nvidia Is Powering the A.I. Revolution
|
||||
Brave New World Dept.
|
||||
How Jensen Huang’s Nvidia Is Powering the A.I. Revolution
|
||||
[48]
|
||||
How Jensen Huang’s Nvidia Is Powering the A.I. Revolution
|
||||
The company’s C.E.O. bet it all on a new kind of chip. Now that Nvidia
|
||||
is one of the biggest companies in the world, what will he do next?
|
||||
|
||||
By Stephen Witt
|
||||
|
||||
[49]The New Yorker
|
||||
|
||||
(BUTTON) Sections
|
||||
* [50]News
|
||||
* [51]Books & Culture
|
||||
* [52]Fiction & Poetry
|
||||
* [53]Humor & Cartoons
|
||||
* [54]Magazine
|
||||
* [55]Crossword
|
||||
* [56]Video
|
||||
* [57]Podcasts
|
||||
* [58]Archive
|
||||
* [59]Goings On
|
||||
|
||||
(BUTTON) More
|
||||
* [60]Customer Care
|
||||
* [61]Shop The New Yorker
|
||||
* [62]Buy Covers and Cartoons
|
||||
* [63]Condé Nast Store
|
||||
* [64]Digital Access
|
||||
* [65]Newsletters
|
||||
* [66]Jigsaw Puzzle
|
||||
* [67]RSS
|
||||
|
||||
* [68]About
|
||||
* [69]Careers
|
||||
* [70]Contact
|
||||
* [71]F.A.Q.
|
||||
* [72]Media Kit
|
||||
* [73]Press
|
||||
* [74]Accessibility Help
|
||||
|
||||
© 2023 Condé Nast. All rights reserved. Use of this site constitutes
|
||||
acceptance of our [75]User Agreement and [76]Privacy Policy and Cookie
|
||||
Statement and [77]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.
|
||||
[78]Ad Choices
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
|
||||
(BUTTON) Do Not Sell My Personal Info
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://www.newyorker.com/feed/rss
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-NX5LSK3
|
||||
3. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38432-7220TMP.html#main-content
|
||||
4. file:///
|
||||
5. file:///newsletters
|
||||
6. file:///account/saved
|
||||
7. file:///auth/initiate?redirectURL=/magazine/2023/11/20/a-coder-considers-the-waning-days-of-the-craft&source=VERSO_NAVIGATION
|
||||
8. file:///search
|
||||
9. file:///latest
|
||||
10. file:///culture/2023-in-review
|
||||
11. file:///news
|
||||
12. file:///culture
|
||||
13. file:///fiction-and-poetry
|
||||
14. file:///humor
|
||||
15. file:///magazine
|
||||
16. file:///crossword-puzzles-and-games
|
||||
17. file:///video
|
||||
18. file:///podcasts
|
||||
19. file:///goings-on
|
||||
20. https://store.newyorker.com/
|
||||
21. file:///
|
||||
22. file:///magazine/personal-history
|
||||
23. file:///contributors/james-somers
|
||||
24. https://www.newyorker.com/newsletter/science-technology
|
||||
25. https://www.newyorker.com/newsletter/science-technology
|
||||
26. https://www.newyorker.com/cartoon/a27287
|
||||
27. file:///magazine/2023/11/20
|
||||
28. file:///science/annals-of-artificial-intelligence/can-we-stop-the-singularity
|
||||
29. file:///news/dept-of-energy/the-great-electrician-shortage
|
||||
30. file:///science/annals-of-artificial-intelligence/there-is-no-ai
|
||||
31. file:///news/annals-of-climate-action/a-security-camera-for-the-planet
|
||||
32. file:///news/our-columnists/whats-the-point-of-reading-writing-by-humans
|
||||
33. file:///news/the-control-of-nature/a-heat-shield-for-the-most-important-ice-on-earth
|
||||
34. file:///news/annals-of-a-warming-planet/the-climate-solutions-we-cant-live-without
|
||||
35. https://www.newyorker.com/newsletter/daily?sourceCode=BottomStories
|
||||
36. file:///contributors/james-somers
|
||||
37. https://www.condenast.com/user-agreement
|
||||
38. https://www.condenast.com/privacy-policy
|
||||
39. https://policies.google.com/privacy
|
||||
40. https://policies.google.com/terms
|
||||
41. https://www.newyorker.com/culture/on-television/why-cant-we-quit-the-morning-show#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
42. https://www.newyorker.com/culture/on-television/why-cant-we-quit-the-morning-show#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
43. https://www.newyorker.com/sports/sporting-scene/the-man-who-completed-football#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
44. https://www.newyorker.com/sports/sporting-scene/the-man-who-completed-football#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
45. https://www.newyorker.com/magazine/2023/11/20/geoffrey-hinton-profile-ai#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
46. https://www.newyorker.com/magazine/2023/11/20/geoffrey-hinton-profile-ai#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
47. https://www.newyorker.com/magazine/2023/12/04/how-jensen-huangs-nvidia-is-powering-the-ai-revolution#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
48. https://www.newyorker.com/magazine/2023/12/04/how-jensen-huangs-nvidia-is-powering-the-ai-revolution#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
49. file:///
|
||||
50. file:///news
|
||||
51. file:///culture
|
||||
52. file:///fiction-and-poetry
|
||||
53. file:///humor
|
||||
54. file:///magazine
|
||||
55. file:///crossword-puzzles-and-games
|
||||
56. https://video.newyorker.com/
|
||||
57. file:///podcast
|
||||
58. file:///archive
|
||||
59. file:///goings-on-about-town
|
||||
60. http://w1.buysub.com/servlet/CSGateway?cds_mag_code=NYR
|
||||
61. https://store.newyorker.com/
|
||||
62. https://condenaststore.com/art/new+yorker+covers
|
||||
63. https://condenaststore.com/conde-nast-brand/thenewyorker
|
||||
64. file:///digital-editions
|
||||
65. file:///newsletter
|
||||
66. file:///jigsaw
|
||||
67. file:///about/feeds
|
||||
68. file:///about/us
|
||||
69. file:///about/careers
|
||||
70. file:///about/contact
|
||||
71. file:///about/faq
|
||||
72. https://www.condenast.com/advertising
|
||||
73. file:///about/press
|
||||
74. file:///about/accessibility-help
|
||||
75. https://www.condenast.com/user-agreement/
|
||||
76. http://www.condenast.com/privacy-policy#privacypolicy
|
||||
77. http://www.condenast.com/privacy-policy#privacypolicy-california
|
||||
78. http://www.condenast.com/privacy-policy#privacypolicy-optout
|
||||
|
||||
Hidden links:
|
||||
80. file://localhost/account/saved
|
||||
81. 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
|
||||
82. 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
|
||||
83. 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
|
||||
84. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38432-7220TMP.html
|
||||
85. file://localhost/var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38432-7220TMP.html
|
||||
86. https://www.newyorker.com/culture/on-television/why-cant-we-quit-the-morning-show#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
87. https://www.newyorker.com/sports/sporting-scene/the-man-who-completed-football#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1
|
||||
88. https://www.newyorker.com/magazine/2023/11/20/geoffrey-hinton-profile-ai#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
89. https://www.newyorker.com/magazine/2023/12/04/how-jensen-huangs-nvidia-is-powering-the-ai-revolution#intcid=_the-new-yorker-bottom-recirc-v2_cdc35741-5fcf-4fa7-807c-c9e46fae6a71_roberta-similarity1_fallback_text2vec1
|
||||
90. https://www.facebook.com/newyorker/
|
||||
91. https://twitter.com/NewYorker/
|
||||
92. https://www.snapchat.com/add/newyorkermag
|
||||
93. https://www.youtube.com/user/NewYorkerDotCom/
|
||||
94. https://instagram.com/newyorkermag/
|
||||
458
static/archive/www-nytimes-com-s2rtib.txt
Normal file
458
static/archive/www-nytimes-com-s2rtib.txt
Normal file
@@ -0,0 +1,458 @@
|
||||
[1]Skip to content[2]Skip to site index
|
||||
(BUTTON)
|
||||
|
||||
[3]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.
|
||||
|
||||
36 Hours
|
||||
|
||||
36 Hours in Durham, N.C.
|
||||
|
||||
By [7]Ingrid K. WilliamsUpdated Nov. 2, 2023
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
164
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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).
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
Correction:
|
||||
Nov. 2, 2023
|
||||
|
||||
An earlier version of this article misstated the days that Monuts, a
|
||||
bakery and cafe, is open on the weekend. It is open on Saturdays, not
|
||||
Sundays.
|
||||
|
||||
(BUTTON) Read 164 Comments
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
164
|
||||
|
||||
Advertisement
|
||||
[76]SKIP ADVERTISEMENT
|
||||
|
||||
Site Index
|
||||
|
||||
Site Information Navigation
|
||||
|
||||
* [77]© 2023 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
|
||||
|
||||
* [93]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
|
||||
|
||||
Visible links:
|
||||
1. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html#site-content
|
||||
2. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html#site-index
|
||||
3. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html#commentsContainer
|
||||
4. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html
|
||||
5. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html
|
||||
6. mailto:letters@nytimes.com
|
||||
7. https://www.nytimes.com/by/ingrid-k-williams
|
||||
8. https://www.nytimes.com/column/36-hours
|
||||
9. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.html#recommendations
|
||||
10. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.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. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L38031-3567TMP.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. file:///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. file:///privacy/manage-settings/?fides-toggle=true&fides-override=true
|
||||
94. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x
|
||||
|
||||
Hidden links:
|
||||
96. file://localhost/
|
||||
506
static/archive/www-programmablemutter-com-8wp6z1.txt
Normal file
506
static/archive/www-programmablemutter-com-8wp6z1.txt
Normal file
@@ -0,0 +1,506 @@
|
||||
#[1]Programmable Mutter
|
||||
|
||||
[2][https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimage
|
||||
s%2F6676303a-e6a9-4e7d-b10e-8662cfcfb435_1024x1024.png]
|
||||
|
||||
[3]Programmable Mutter
|
||||
|
||||
(BUTTON) (BUTTON)
|
||||
Subscribe
|
||||
(BUTTON) Sign in
|
||||
|
||||
(BUTTON)
|
||||
Share this post
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
|
||||
Discover more from Programmable Mutter
|
||||
|
||||
Technology and politics in an interdependent world
|
||||
Over 1,000 subscribers
|
||||
____________________
|
||||
(BUTTON) Subscribe
|
||||
Continue reading
|
||||
Sign in
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
Strange beliefs, fights over money and bad science fiction
|
||||
|
||||
[4]Henry Farrell
|
||||
Nov 20, 2023
|
||||
72
|
||||
(BUTTON)
|
||||
Share this post
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
17
|
||||
Share
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
********
|
||||
|
||||
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).
|
||||
|
||||
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!'
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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).
|
||||
|
||||
********
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
We’re hoping to grow OpenAI into such an institution. As a
|
||||
non-profit, our aim is to build value for everyone rather than
|
||||
shareholders. Researchers will be strongly encouraged to publish
|
||||
their work, whether as papers, blog posts, or code, and our patents
|
||||
(if any) will be shared with the world. We’ll freely collaborate
|
||||
with others across many institutions and expect to work with
|
||||
companies to research and deploy new technologies.
|
||||
|
||||
That … isn’t quite how it worked out. The Sam Altman justification for
|
||||
deviation from this vision, laid out in various interviews, is that it
|
||||
turned out to just be too damned expensive to train the models as they
|
||||
grew bigger, and bigger and bigger. This necessitated the creation of
|
||||
an add-on structure, which would sidle into profitable activity. It
|
||||
also required massive cash infusions from Microsoft (reportedly in
|
||||
[23]the range of $13 billion), which also has an exclusive license to
|
||||
OpenAI’s most recent LLM, GPT-4. Microsoft, it should be noted, is not
|
||||
in the business of prioritizing “a good outcome for all over its own
|
||||
self-interest.” It looks instead, to invest its resources along the
|
||||
very best Friedmanite principles, so as to create whopping returns for
|
||||
shareholders. And $13 billion is a lot of invested resources.
|
||||
|
||||
This, very plausibly explains the current crisis. OpenAI’s governance
|
||||
arrangements are shaped by the fact that it was a non-profit until
|
||||
relatively recently. The board is a non-profit board. The two members
|
||||
already mentioned, McCauley and Toner, are not the kind of people you
|
||||
would expect to see making the big decisions for a major commercial
|
||||
entity. They plausibly represent the older rationalist vision of what
|
||||
OpenAI was supposed to do, and the risks that it was supposed to avert.
|
||||
|
||||
But as OpenAI’s ambitions have grown, that vision has been watered down
|
||||
in favor of making money. I’ve heard that there were a lot of people in
|
||||
the AI community who were really unhappy with OpenAI’s initial decision
|
||||
to let GPT rip. That spurred the race for commercial domination of AI
|
||||
which has shaped pretty well everything that has happened since,
|
||||
leading to model after model being launched, and to hell with the
|
||||
consequences. People like Altman still talk about the dangers of AGI.
|
||||
But their organizations and businesses keep releasing more, and more
|
||||
powerful systems, which can be, and are being, used in all sorts of
|
||||
unanticipated ways, for good and for ill.
|
||||
|
||||
It would perhaps be too cynical to say that AGI existential risk
|
||||
rhetoric has become a cynical hustle, intended to redirect the
|
||||
attentions of regulators toward possibly imaginary future risks in the
|
||||
future, and away from problematic but profitable activities that are
|
||||
happening right now. Human beings have an enormous capacity to
|
||||
fervently believe in things that it is in their self-interest to
|
||||
believe, and to update those beliefs as the interests change or become
|
||||
clearer. I wouldn’t be surprised at all if Altman sincerely thinks that
|
||||
he is still acting for the good of humankind (there are certainly
|
||||
enough people assuring him that he is). But it isn’t surprising either
|
||||
that the true believers are revolting, as Altman stretches their
|
||||
ideology ever further and thinner to facilitate raking in the
|
||||
benjamins.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
72
|
||||
(BUTTON)
|
||||
Share this post
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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·edited Nov 21
|
||||
|
||||
Came here via Dave Karpf's link. Beautiful stuff, and "The Singularity
|
||||
is Nigh" made me laugh out loud.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
No posts
|
||||
|
||||
Ready for more?
|
||||
____________________
|
||||
(BUTTON) Subscribe
|
||||
© 2023 Henry Farrell
|
||||
[32]Privacy ∙ [33]Terms ∙ [34]Collection notice
|
||||
Start Writing[35]Get the app
|
||||
[36]Substack is the home for great writing
|
||||
|
||||
This site requires JavaScript to run correctly. Please [37]turn on
|
||||
JavaScript or unblock scripts
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. file:///feed
|
||||
2. file:///
|
||||
3. file:///
|
||||
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://www.programmablemutter.com/privacy?utm_source=
|
||||
33. https://substack.com/tos
|
||||
34. https://substack.com/ccpa#personal-data-collected
|
||||
35. https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button
|
||||
36. https://substack.com/
|
||||
37. https://enable-javascript.com/
|
||||
|
||||
Hidden links:
|
||||
39. https://substack.com/profile/557668-henry-farrell
|
||||
40. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
41. javascript:void(0)
|
||||
42. https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555fe47f-ac07-4614-b78b-5d269fde7539_1024x1024.webp
|
||||
43. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
44. javascript:void(0)
|
||||
45. https://substack.com/profile/1263175-tarik-najeddine
|
||||
46. https://substack.com/profile/1263175-tarik-najeddine
|
||||
47. https://substack.com/profile/23165546-gerben-wierda
|
||||
48. https://substack.com/profile/23165546-gerben-wierda
|
||||
49. https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer
|
||||
Reference in New Issue
Block a user