diff --git a/public/_data.json b/public/_data.json index 737d5abae..8da055050 100644 --- a/public/_data.json +++ b/public/_data.json @@ -2,6 +2,9 @@ "feed.xml": { "layout": false }, + "opensearch.xml": { + "layout": false + }, "tia": { "layout": false }, diff --git a/public/_partials/layout.jade b/public/_partials/layout.jade index 91b11a11e..21e731167 100644 --- a/public/_partials/layout.jade +++ b/public/_partials/layout.jade @@ -45,6 +45,8 @@ else meta(name="HandheldFriendly" content="True") meta(name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1") meta(name="theme-color" content="#1A1A1A") + link(rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Remy Sharp's b:log") + block meta block ampalt diff --git a/public/drafts/_data.json b/public/drafts/_data.json index 988fd9361..3dfa1e790 100644 --- a/public/drafts/_data.json +++ b/public/drafts/_data.json @@ -8,9 +8,7 @@ "why-i-prefer-mobile-web-apps-to-native-apps": { "title": "Why I prefer mobile web apps to native apps", "date": "2013-03-14 14:09:57", - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2013-03-14 14:09:00", "draft": true }, @@ -23,82 +21,63 @@ "first-contact": { "title": "First Contact", "date": "2014-05-05 13:35:13", - "tags": [ - "business" - ], + "tags": ["business"], "modified": "2014-05-05 13:35:00", "draft": true }, "git-push-to-live": { "title": "Git push to live", "date": "2014-05-30 13:00:13", - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2014-05-30 13:00:00", "draft": true }, "apple-dont-care": { "title": "My beef with Apple", "date": "2013-05-19 12:00:00", - "tags": [ - "web", - "business" - ], + "tags": ["web", "business"], "modified": "2016-02-15 13:10:23", "draft": true }, "css-compression": { "title": "CSS Compression", "date": "2009-02-01 12:00:00", - "tags": [ - "code" - ], + "tags": ["code"], "modified": "2009-02-01 16:37:30", "draft": true }, "fragmentation": { "title": "Fragmentation", "date": "2012-11-26 12:00:00", - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2012-11-26 23:21:44", "draft": true }, "localstorage": { "title": "Proposal for Async Web Storage API", "date": "2013-09-23 12:00:00", - "tags": [ - "code" - ], + "tags": ["code"], "modified": "2013-09-23 20:54:38", "draft": true }, "offline-panel": { "title": "Offline Panel", "date": "2013-09-27 12:00:00", - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2013-09-27 17:28:42", "draft": true }, "harp": { "title": "Continuous integration with static site generator: Harp.js", "date": "2014-05-05 12:00:00", - "tags": [ - "code" - ], + "tags": ["code"], "modified": "2014-10-04 23:44:57", "draft": true }, "rewrite-it": { "title": "The \"let's just rewrite it\" syndrome", "date": "2014-08-05 12:00:00", - "tags": [ - "business" - ], + "tags": ["business"], "modified": "2014-08-05 11:02:40", "draft": true }, @@ -106,9 +85,7 @@ "title": "11 things you didn't know JS Bin could do", "date": "2014-08-05 12:00:00", "complete": true, - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2014-08-05 11:12:21", "draft": true }, @@ -116,9 +93,7 @@ "title": "Debugging events in devtools inspector", "date": "2014-10-16 11:30:00", "complete": false, - "tags": [ - "code" - ], + "tags": ["code"], "modified": "2014-10-16 17:40:01", "draft": true }, @@ -127,9 +102,7 @@ "date": "2015-01-02 12:00:00", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2014-12-29 10:29:34", "draft": true }, @@ -138,9 +111,7 @@ "date": "2015-06-03 17:56:13", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "modified": "2015-06-18 11:15:54", "draft": true }, @@ -149,9 +120,7 @@ "date": "2015-06-22 17:59:07", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2015-11-25 08:49:15", "draft": true }, @@ -160,9 +129,7 @@ "date": "2016-01-07 11:17:08", "complete": false, "inprogress": true, - "tags": [ - "business" - ], + "tags": ["business"], "modified": "2016-02-21 18:17:33", "draft": true }, @@ -171,10 +138,7 @@ "date": "2016-02-18 10:56:06", "complete": false, "inprogress": true, - "tags": [ - "personal", - "business" - ], + "tags": ["personal", "business"], "modified": "2016-08-15 13:44:28", "draft": true }, @@ -183,9 +147,7 @@ "date": "2016-03-01 10:21:41", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2016-08-13 22:49:35", "draft": true }, @@ -194,9 +156,7 @@ "date": "2016-03-22 11:02:56", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "modified": "2016-03-22 11:22:11", "draft": true }, @@ -206,10 +166,7 @@ "modified": "2016-10-10 13:12:20", "complete": false, "inprogress": true, - "tags": [ - "web", - "personal" - ], + "tags": ["web", "personal"], "draft": true }, "tr-tricks": { @@ -218,9 +175,7 @@ "modified": "2016-08-07 19:29:39", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "how-to-write-a-github-integration": { @@ -229,9 +184,7 @@ "modified": "2017-12-12 14:16:08", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "emoji": { @@ -240,9 +193,7 @@ "modified": "2016-09-02 21:18:52", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "wifi-and-vpns": { @@ -251,9 +202,7 @@ "modified": "2016-06-06 13:29:33", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "csrf-the-service-worker-challenge": { @@ -262,9 +211,7 @@ "modified": "2016-07-10 12:43:47", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "es6-pure-dev-has-finally-arrived": { @@ -273,9 +220,7 @@ "modified": "2017-02-04 18:02:45", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "the-bane-of-build-tools": { @@ -284,9 +229,7 @@ "modified": "2016-09-21 15:10:37", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "living-standard-part-1": { @@ -295,9 +238,7 @@ "modified": "2016-10-12 11:33:11", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "what-i-learnt-from-creating-ffconfs-quine": { @@ -306,9 +247,7 @@ "modified": "2016-10-07 11:35:15", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "living-standard-part-2": { @@ -317,9 +256,7 @@ "modified": "2016-10-10 17:56:58", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "living-standard-part-3": { @@ -328,9 +265,7 @@ "modified": "2016-10-11 13:59:11", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "my-crumble": { @@ -339,9 +274,7 @@ "modified": "2016-12-19 10:49:12", "complete": true, "inprogress": false, - "tags": [ - "personal" - ], + "tags": ["personal"], "draft": true }, "node-cli-workflow": { @@ -350,9 +283,7 @@ "modified": "2016-11-28 20:28:37", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "time": { @@ -361,9 +292,7 @@ "modified": "2016-12-03 09:36:50", "complete": true, "inprogress": false, - "tags": [ - "personal" - ], + "tags": ["personal"], "draft": true }, "when-is-the-font-size-not-the-font-size": { @@ -372,9 +301,7 @@ "modified": "2016-12-07 14:08:45", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "titles-for-blog-posts": { @@ -383,9 +310,7 @@ "modified": "2017-05-29 12:49:10", "complete": false, "inprogress": true, - "tags": [ - "personal" - ], + "tags": ["personal"], "draft": true }, "just-one-thing": { @@ -394,9 +319,7 @@ "modified": "2017-01-01 09:58:35", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "building-the-bike-shed": { @@ -405,9 +328,7 @@ "modified": "2017-01-12 19:20:56", "complete": true, "inprogress": false, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "trimming-the-release-test-cycle": { @@ -416,9 +337,7 @@ "modified": "2017-01-13 11:59:37", "complete": true, "inprogress": false, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "your-own-online-video-course": { @@ -427,9 +346,7 @@ "modified": "2017-02-02 15:32:04", "complete": false, "inprogress": true, - "tags": [ - "business" - ], + "tags": ["business"], "draft": true }, "the-internet-as-explained-to-a-5-year-old": { @@ -438,9 +355,7 @@ "modified": "2017-02-22 09:23:18", "complete": false, "inprogress": true, - "tags": [ - "personal" - ], + "tags": ["personal"], "draft": true }, "universal-js-pe-and-forms": { @@ -449,9 +364,7 @@ "modified": "2017-04-07 11:53:23", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "focus-or-all-the-things": { @@ -460,9 +373,7 @@ "modified": "2017-06-01 11:32:12", "complete": false, "inprogress": true, - "tags": [ - "personal" - ], + "tags": ["personal"], "draft": true }, "recreating-the-zx-spectrum-loader": { @@ -471,9 +382,7 @@ "modified": "2017-06-15 11:34:16", "complete": false, "inprogress": true, - "tags": [ - "web" - ], + "tags": ["web"], "draft": true }, "nextjs-prefetch-testing-fix": { @@ -482,9 +391,7 @@ "modified": "2017-07-11 21:08:43", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "easy-ssr-react-conf-schedule": { @@ -493,9 +400,7 @@ "modified": "2017-09-27 14:52:01", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "typedarrays": { @@ -504,9 +409,7 @@ "modified": "2017-12-30 16:10:36", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "on-compressing-32-character-uuid": { @@ -515,9 +418,7 @@ "modified": "2017-10-16 21:03:57", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "jq-recipes": { @@ -526,9 +427,7 @@ "modified": "2018-11-28 11:05:55", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "opening-windows-again-part-2-dev": { @@ -537,9 +436,7 @@ "modified": "2018-01-12 11:15:14", "complete": false, "inprogress": true, - "tags": [ - "code" - ], + "tags": ["code"], "draft": true }, "trying-arccodes": { @@ -548,9 +445,7 @@ "modified": "2018-03-28 17:55:01", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "a-week-of-serverless": { "title": "A week of serverless", @@ -558,9 +453,7 @@ "modified": "2018-03-23 08:43:22", "complete": false, "inprogress": true, - "tags": [ - "web" - ] + "tags": ["web"] }, "ive-been-doing-reduce-wrong": { "title": "I've been doing reduce wrong!", @@ -568,9 +461,7 @@ "modified": "2018-08-24 08:08:10", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "frictionless": { "title": "Frictionless", @@ -578,9 +469,7 @@ "modified": "2018-07-22 21:42:49", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "gym-tech": { "title": "Gym Tech", @@ -588,9 +477,7 @@ "modified": "2018-09-18 07:34:53", "complete": false, "inprogress": true, - "tags": [ - "personal" - ] + "tags": ["personal"] }, "impressions-of-bitsrc": { "title": "Impressions of bitsrc", @@ -598,9 +485,7 @@ "modified": "2018-11-01 13:42:12", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "sentence-case": { "title": "Sentence case", @@ -608,9 +493,7 @@ "modified": "2018-12-07 14:53:30", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "unpacking-bytes": { "title": "Unpacking bytes", @@ -618,9 +501,7 @@ "modified": "2019-01-14 12:16:05", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] }, "tasty-cookiestore": { "title": "Tasty CookieStore", @@ -628,8 +509,15 @@ "modified": "2019-02-01 16:40:40", "complete": false, "inprogress": true, - "tags": [ - "code" - ] + "tags": ["code"] + }, + "www-wheres-the-writable-web": { + "title": "WWW: Where's the Writable Web?", + "date": "2019-02-18 10:09:46", + "modified": "2019-02-18 10:09:46", + "image": "/images/www-logo.png", + "complete": true, + "inprogress": false, + "tags": ["web"] } -} \ No newline at end of file +} diff --git a/public/drafts/www-wheres-the-writable-web.md b/public/drafts/www-wheres-the-writable-web.md new file mode 100644 index 000000000..c84b2646a --- /dev/null +++ b/public/drafts/www-wheres-the-writable-web.md @@ -0,0 +1,67 @@ +# WWW: Where's the Writable Web? + +_This post is based on my experience and thoughts, and is not backed up by research, aka: speculative, akin more to a rambling in a café!_ + +For my time at CERN recently we rebuilt the first browser: WorldWideWeb (later renamed to Nexus). One unique aspect of this browser was that you could edit web pages. Indeed, the documentation for the web at that time was written in that browser. + +Which makes me wonder: why, and where did it go? + + + +## Thoughts on _why_ + +I heard it mentioned during my CERN week that it was Tim Berners-Lee's _vision_ that browsers of the web would allow you to edit along with read. + +It's entirely possible I misheard, but I half suspect that the vision was influenced by the available technology. + +As with many great ideas, they're based on existing solutions and putting them together in a new way that solves new problems. The secret sauce that made the web was the humble `` tag. It joins the web. + +When it came to building a browser, the available tools were sitting in the [NeXTSTEP](https://en.m.wikipedia.org/wiki/NeXTSTEP), and specifically [Interface Builder](https://en.m.wikipedia.org/wiki/Interface_Builder) (effectively the grandparent of Apple's Xcode). + +When it came to rendering HTML in this would-be browser, you would have to use a text object. I think/suspect: [NSTextView](https://developer.apple.com/documentation/appkit/nstextview). + +In [A brief history of the Web](https://www.w3.org/DesignIssues/TimBook-old/History.html) Tim Berners-Lee writes that it took him a single month to produce the read version of the browser, and another month for the editable version, citing that most "X browsers took around year to be developed". + +I don't think it's a huge leap to see that the text view element can be in a read-only mode or read-write mode. Making the decision to use a read-write allows for a great deal more functionality. + +In fact, if you're writing the _first_ browser for a web that was _just_ invented, it's going to be a huge benefit to ship a way to generate content in the same software. + +So it was either TBL's original vision and _then_ he set out to find software that could realise it, or he saw the available technology and made best use of it to create a vision. + +(I caved and did a _teeny_ bit of research, and looking at ENQUIRE, TBL's earlier system, it [looks like editing](https://en.m.wikipedia.org/wiki/ENQUIRE#Differences_to_the_World_Wide_Web) was always on the table) + +It really doesn't matter which way around it was, it's just me scratching at the idea of which came first. Pretty ingenious either way. + +Jean-François Groff described it during our stay at CERN: + +> [The WorldWideWeb was a] word processor with networked hypertext, and that really floored people who saw it in action for the first time. + +## Thoughts on why it left us + +Today's browsers are not editors for creating HTML, and the WorldWideWeb browser was written with the intention and expectation that both the source HTML and the URL itself should be hidden from the user (possibly to keep things simpler and less daunting). + +Viewing the source in the WorldWideWeb was tucked away inside of diagnostic buttons and URLs would only be entered by "Open using hypertext reference". + +However, in 1991 there is a public list of [upgrade proposals](https://www.w3.org/History/1991-WWW-NeXT/Implementation/Upgrade.html) and interestingly it includes: + +> Make the generated HTML more human-readable (skip lines, etc.) + +This was because, it turned out, humans were reading the HTML. Indeed they were also writing some of the HTML (I think the `` element was one such tag they had to write very early on). + +The browsers that followed didn't have an editable mode: The Line Mode Browser '91, Lynx '92 and Mosaic '93. + +But why? Two big blockers stand out. + +The first is that NeXTSTEP provided Interface Builder and had the components to create editable text _and_ format the text (I think of it like a Rich Text Format object). To make this available to other systems would require implementing the same NSTextView functionality on each OS to support editing in a [<abbr title="wizi wig">WYSIWYG<abbr>](https://en.m.wikipedia.org/wiki/WYSIWYG) element. + +Secondly was the problem of saving back to servers. This was a problem that was never solved the first time around. Understandably it's a huge problem, littered with complexities. Authentication is one of the biggies. + +It makes a lot of sense to use the web page as the editable interface. Why shouldn't I edit and format my blog posts from the browser? There's probably less than a handful of systems that can do that today (I _think_ wordpress.com supports this functionality, but I'm not 100% certain). A handful after 30 years isn't _really_ progress on the editable web front. + +It's not hard to suggest that it was a mountain of technical challenges that kept the writeable browser from being part of technology today. + +As with anything that succeeds, I beleive, the lower the barrier, the higher the success of adoption. + +--- + +Those are my speculative thoughts. Probably better as a café conversation, but having spent the last week with my mind deep in the '90s at CERN, I thought it would be fun to share here instead. \ No newline at end of file diff --git a/public/images/www-logo.png b/public/images/www-logo.png new file mode 100644 index 000000000..f319adc40 Binary files /dev/null and b/public/images/www-logo.png differ diff --git a/public/opensearch.xml.jade b/public/opensearch.xml.jade new file mode 100644 index 000000000..12a23a10e --- /dev/null +++ b/public/opensearch.xml.jade @@ -0,0 +1,8 @@ +doctype xml +OpenSearchDescription(xmlns="http://a9.com/-/spec/opensearch/1.1/") + ShortName #{ site_title } + description #{ site_description } + Url(type="text/html" method="get" template="https://remysharp.com/search?s={searchTerms}") + Image(width="16" height="16") https://remysharp.com/favicon.ico + InputEncoding UTF-8 + SearchForm https://remysharp.com