<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Marcin Wichary on Medium]]></title>
        <description><![CDATA[Stories by Marcin Wichary on Medium]]></description>
        <link>https://medium.com/@mwichary?source=rss-b55535a4ac78------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*yemLwBKuCnBh79HADuLAGQ.jpeg</url>
            <title>Stories by Marcin Wichary on Medium</title>
            <link>https://medium.com/@mwichary?source=rss-b55535a4ac78------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 12 Nov 2026 01:58:14 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mwichary/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[The Kickstarter for my book about keyboards is live!]]></title>
            <link>https://mwichary.medium.com/the-kickstarter-for-my-book-about-keyboards-is-live-89e4a7e17890?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/89e4a7e17890</guid>
            <category><![CDATA[kickstarter]]></category>
            <category><![CDATA[keyboard]]></category>
            <category><![CDATA[shift-happens-book]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Tue, 07 Feb 2023 17:14:54 GMT</pubDate>
            <atom:updated>2023-02-07T17:14:54.889Z</atom:updated>
            <content:encoded><![CDATA[<p>It all started here, in a way. I wrote <a href="https://mwichary.medium.com/what-i-learned-about-languages-just-by-looking-at-a-turkish-typewriter-fc840aab1b0a">about the Turkish typewriter in 2015</a>, and people seemed to like it. I <a href="https://medium.design/death-to-typewriters-9b7712847639">wrote about how typewriters (sort of, not really) ruined typography</a> and it was a staple of my public talks that year. For years, the <a href="https://mwichary.medium.com/shift-happens-5b049f5a93a8">book announcement page</a> — the book that started out of these articles — was here at Medium.</p><p>Today, the book that started is one big step closer to reality.</p><p><a href="https://www.kickstarter.com/projects/mwichary/shift-happens?ref=9re92c"><strong>My book about the 150 years of keyboards, from typewriters to the newest mechanical marvels, is now on Kickstarter</strong></a><strong>.</strong></p><p>I hope you will find it interesting and good enough to back — and/or tell others about it. Thank you!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PZE9iLehauyZQzCLQqnNgw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hz7MZGffxVsxvu5LZZkRCg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yIwFPpzTuvrit8waqv_KlQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eTVq5SNGJJKwct8WeeCcUg.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=89e4a7e17890" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The making of Four Laps]]></title>
            <link>https://medium.com/the-rectangle-behind-you/the-making-of-four-laps-e20dd59271af?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/e20dd59271af</guid>
            <category><![CDATA[ignite]]></category>
            <category><![CDATA[the-rectangle-behind-you]]></category>
            <category><![CDATA[obs]]></category>
            <category><![CDATA[presentations]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Sat, 29 May 2021 21:21:13 GMT</pubDate>
            <atom:updated>2021-06-01T19:47:03.549Z</atom:updated>
            <content:encoded><![CDATA[<h4>The rectangle behind you</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p>On May 27, 2021, during an internal lightning talk session at Figma, I gave a remote “Ignite” 5-minute talk.</p><p>(This is a live recording; there was no video editing after the talk.)</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F556626779%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F556626779%2F68ce72d210&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F1150281796_1280&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/eb5b96767f0d60d9479a00ecf5cf80ac/href">https://medium.com/media/eb5b96767f0d60d9479a00ecf5cf80ac/href</a></iframe><p>I <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-why-i-love-ignite-talks-38bf35e6480f">love Ignite talks</a> and occassionally <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-the-ignite-talk-that-changed-room-colours-92581debe69e">experiment with them</a>, but this was the first one I’ve done remotely, and I’ve never spent so much time and effort putting together tech for it (mostly using <a href="https://obsproject.com/">OBS</a>, which is an exciting experimental software used by streamers and remote presenters), and practicing.</p><p>In this post, I’ll be sharing a lot of details of how I did this. I don’t assume you will want to create another video like this (although why not?), but you might find bits and pieces of what I learned interesting.</p><p>This article has three sections:</p><ol><li><a href="https://medium.com/p/e20dd59271af#d277"><strong>The creative process and the setup</strong></a></li><li><a href="https://medium.com/p/e20dd59271af#20b5"><strong>Specific tech questions</strong></a></li><li><a href="https://medium.com/p/e20dd59271af#3107"><strong>What I learned about controlling and scripting OBS</strong></a> (incl. all of my code)</li></ol><p>Hope you enjoy!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h3>1. The creative process and the setup</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/424/1*9VdUdtdzHJlCIExWeqcMeA@2x.png" /></figure><p>Why did I do this? It seemed like a weird gimmick and a fun challenge. Like with many of my weird creative projects, for most of the time I assumed that this will fail — after all, I haven’t heard of anyone doing something like this, and I had no idea if the tech was even available — but at least I will learn something.</p><p>Very quickly, I came up with basic questions:</p><ul><li>Can one do compositing in OBS? (can I overlap myself?)</li><li>Can one feed the recording into itself as playback?</li><li>How capable is OBS scripting? Can I do everything programmatically?</li><li>Do I know how to make a consistently white background?</li><li>Can I practice enough for this to feel good?</li><li>Do I actually have something to say here?</li></ul><p>I started answering the big ones first, and soon each one of them was replaced by a fractal of small ones. You’ll see most of them below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>The story</h4><p>I knew I wanted to include <a href="https://www.youtube.com/watch?v=63vqob-MljQ">Come into my world</a>, <a href="https://www.youtube.com/watch?v=PyeWRd7ZEBs">Opportunities</a>, and <a href="https://www.youtube.com/watch?v=lo8O8lYDzIU">Tango</a>. I quickly created a spreadsheet to try to map it out:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Hf0GQMN2FbbsVTOhdTPIUA@2x.png" /></figure><p>I originally planned to have five laps — one for each section — but this would leave less than a minute for each one. This felt tight time-wise, and also I didn’t know if I could make myself small enough using my camera/lens.</p><p>So, I ended with four laps, 70 seconds each, with a little room at the end to breathe. This coincidentally was exactly the structure of <em>Come into my world,</em> except that video’s laps were 61 seconds each.</p><p>I thought it’d be fun to mess in time in another way, by moving backwards — from 2002, to 1986, to 1980.</p><p>Quickly after establishing the early structure, I wrote down my script and started reading it out loud to gauge time needed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/621/1*NdZXGXPp2dvlzMTjuMMR9w@2x.png" /></figure><p>As always with Ignite talks, I realized there is much less time than I expected: I had to drop more details about Minogue, there was a whole passage about rotoscoping her hair, and later on a reference to a Stanisław Lem short story <a href="https://en.wikipedia.org/wiki/The_Star_Diaries">about multiple Ijon Tichys</a>.</p><p>In terms of a story, I struggled with ending, eventually arriving at a (cute?) hypothetical of describing something I was already doing… not sure if it ever quite landed.</p><p>I started practicing in front of camera as soon as I could, seeing how much time I need for certain things (e.g. putting the jacket on), and how do the gestures feel.</p><p>It was interesting to me how the structure pushed back on some of the ideas:</p><ul><li>I didn’t originally plan to fast forward, but that would make the first lap much too long. I hated this for the longest time, but now I think it works nicely.</li><li>Originally, I wanted to put on the hat at the end at the exact moment I take it off originally — creating an impression this was the same hat — but the structure actually made it impossible without introducing a visible fifth lap!</li></ul><p>Lastly, here are some of my ideas that didn’t happen:</p><ul><li>programmatically changing colours of the shirt or making me lighter with each loop</li><li>cough at the same time (too hard to sync up)</li><li>duck/throw something (dangerous)</li><li>yawn (weird pause)</li><li>subvert the glasses thing at the end by wearing weird glasses (didn’t fit with the story)</li><li>instead of spelling F·O·U·R, do something more sophisticated (didn’t have a better idea)</li><li>some more advanced choreo (ran out of time)</li><li>turn on the light above me or pull up a banner or change the environment (ran out of time)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>The setup</h4><p>These are photos of the setup from both sides:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CNXdwr_6v8Uarbnqj4JKnw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eCjCRvoN28GTuboxuF21kQ.jpeg" /></figure><p>This is the diagram of the entire setup:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N9bLjJmMyHgUTOJOszNfFQ.png" /></figure><ul><li><strong>Mac computer:</strong> This computer was grabbing the video from my camera, then in OBS the recording from that camera was fed back into OBS as video input after a 70s delay via a set of Lua scripts I wrote. The video camera source was always on top, so it required color key so that the white was “transparent” and the delayed videos in the background could be seen.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aK5xfIBMRh8XCoroYMfdNg.png" /></figure><ul><li><strong>Windows computer: </strong>The video output from the Mac computer was fed to a Windows computer’s OBS and composited with a pre-recorded 5-minute After Effects video that contained titles, “slides,” and all the music via another set of Lua scripts I wrote. The Mac computer output was always on top, and required a similar color key as above to allow the slides to be “behind me.” This computer also grabbed the sound from the mic, recorded everything, and sent things to Zoom.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nPf-NdyxgStlRyrTh5pD0g.png" /></figure><ul><li><strong>iPad:</strong> The iPad was responsible for showing the “timer” that alerted me to various events that were supposed to happen — it was like live <a href="https://en.wikipedia.org/wiki/Quick_time_event">quick time events</a>. Most of the events were announced in real time, but for crucial things like moving to a new position (where I absolutely needed to do it at the right moment) there were counted down.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*tLOLu0TtfSSil1KwBXo9Tw.gif" /></figure><ul><li>There was also a <strong>fourth computer</strong>, but this was mostly used to connect to the Zoom independently, and just wait for my cue during the lightning talk session.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>I’m surprised this actually worked</h4><p>I almost quit many times:</p><ul><li>when the first attempts to script OBS resulted mostly in crashes, and when I realized how poorly documented everything is</li><li>when I realized I would have to have <em>two</em> computers</li><li>when my other Mac was too slow to handle OBS</li><li>when the Windows computer that replaced it worked well for a while, and then stopped performing well</li></ul><p>This was a project that reminded me of very early days of personal computers, where the technology was so young, the documentation so scarce, and the reliability so low, that you <em>really needed to want it. </em>I guess I really wanted this? But also, at some point, I wanted to keep going because I thought writing down</p><p>I learned a lot of little things from this: OBS scripting, Lua, After Effects, how to create a white background, how to make a blooper video (keep reading!), how to mount an iPad and use it as a helper, and even how to (very poorly) apply make-up.</p><p>The follow two sections have more details about the tech, all the way to source code:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h3>2. Specific tech questions</h3><h4>How was the video looped?</h4><p>In OBS, at least on a Mac, you can add the video of the current recording (if you figure out the filename) to the scene as a regular video. You can’t do it immediately, but since my loops were 70 seconds, that leaves more than enough time.</p><p>This is a snippet from a pretty creepy-looking early timing practice, with a lap length of 8 seconds (you will notice that it’s in reverse order, with the youngest me behind the older ones):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8D8w-mQ9AWh-LoWNTyEuRQ.gif" /></figure><h4>How did you make the slides/titles/etc.?</h4><p>I used After Effects, and it was a pretty straightforward work.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qSElwP_3dtmdylIOWFs47Q.png" /></figure><p>I later used VLC to transcode the After Effects output to a .ts file that had a more manageable size. (ffmpeg also would’ve been great.)</p><h4>How did you do the little rotoscoping bit?</h4><p>There was a (short) video of the making of <em>Come into my world </em>from which I lifted the camera crane snippet, but I didn’t see any videos showing actual rotoscoping. So I used the After Effects function called Roto Brush, which was nice — and kind of magical — although really slow.</p><h4>How did you know where to stand?</h4><p>I put sticky notes on the floor and the table I used. Since the table wasn’t wide enough, I taped the sticky to a chopstick:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5NtMZmWn9pJsoUZv0UnfKQ.png" /></figure><h4>What kind of white screen did you have?</h4><p>I don’t remember. I bought it a while back. It’s cloth.</p><p>I generally never quited figured out the best way to set this up. I put a random assortment of diffused lights in the back, and two diffused lights in front, but it never quite coalesced, and was painful to keep white — particularly at the edges and in the corners, where there was always some falloff (my space is very small).</p><p>I used a LUT to help with the background, and increased brightness/contrast as an OBS filter just enough. It was also important to switch my camera’s metering mode to “entire screen average.”</p><p>This is an example of me testing the light:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AEbg4Jn_ucH8gfzslKRUWg.gif" /></figure><h4>Why white screen and not green screen?</h4><p>I think green screen is probably the way to go — see fringing in my video that I could never fully get rid of — but I already had a white background. I was also worried green screen would require even more lights. Something to try for next time!</p><h4>How did you make the timer?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gnxA-guVf3YZYon2_uWqmA.jpeg" /></figure><p>I mounted an iPad on a stand just below the camera, and wrote myself a little HTML/JavaScript app. It’s not very complicated.</p><p>You can <a href="https://aresluna.org/kylie/timer/">see the timer here</a> (click or press Enter to activate) or <a href="https://github.com/mwichary/The-rectangle-behind-you/blob/master/four-laps/timer.html">check out the source code</a>.</p><p>Notes:</p><ul><li>most of the UI is at the top of the screen. It was originally centered vertically, but I noticed that this resulted in my eyes moving on the screen much more visibly</li><li>there are special annotations when the music plays loudly. I actually didn’t hear any music as I was speaking, because I was worried it would create feedback or be recorded twice. So I needed a visual indication that music is playing so that I wouldn’t speak at that time.</li></ul><p>If you are interested, here’s an entire talk with the timer overlaid so you could see what I saw. (This is a different take than above, because… why not.)</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F556706892%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F556706892&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F1150466678_640&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="864" height="720" frameborder="0" scrolling="no"><a href="https://medium.com/media/f001fe0f474d176d7cf3ebce49ed4f24/href">https://medium.com/media/f001fe0f474d176d7cf3ebce49ed4f24/href</a></iframe><h4>How did you mount the iPad below the camera?</h4><p>I got <a href="https://www.amazon.com/dp/B07D99724N">this stand</a>.</p><h4>How did you mount the Windows computer close to the camera, so it could serve as a monitor?</h4><p>I put it on my trashcan, and I put the trashcan on my piano seat. D’oh.</p><h4>How much did you practice?</h4><p>I recorded all of my practice videos, and so I know it was exactly 56 practice runs before the final one: ten reading the script, and 46 actually saying things from memory.</p><p>You can see here how it all changed over time:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F556521563%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F556521563%2F833a6e4379&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F1150019606_1280&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/fc2bd45aa915e65914e7dd36ac803a81/href">https://medium.com/media/fc2bd45aa915e65914e7dd36ac803a81/href</a></iframe><h4>What kind of mic did you use?</h4><p>Since I was moving a lot, I thought the only reasonable way would be to use a lavalier mic. I also thought a cabled one would be better so I don’t rely on wireless. <a href="https://www.rode.com/microphones/lavaliergo">This is the one I used</a>.</p><p>I think the lav in the videos introduces a bit too much noise and also it’s coming in a bit hot. Something to improve for the next time!</p><h4>How to connect the lav mic to a Windows laptop?</h4><p>I bought a <a href="https://www.amazon.com/dp/B00IRVQ0F8">little cheap device</a> that connected via USB and exposed a mic input.</p><h4>How did you prepare for failure?</h4><p>This was incredibly complex system with a lot of moving parts I didn’t fully understand or control. So I did a lot of work to prepare myself for contingencies:</p><ul><li>a few days before, I made a “release candidate” video recording to have in the backpocket for the audience</li><li>in the next few days, I kept replacing that video as I kept improving</li><li>I had a pretty extensive checklist for the day off (this is only about 25% of it) and also a last-minute checklist on the wall:</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/408/1*G_GeTxmWkVEoEq1h1YWSOQ@2x.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tkRU1L9DjnfiJyqKJKCFBQ.jpeg" /></figure><ul><li>for the Mac, the checklist started from actually rebooting (sometimes connecting HDMI would make it go into an endless loop)</li><li>I made both OBS have a deterministic start state (by default, OBS starts the way you left it last)</li><li>on my Mac, I had this wallpaper set up just in case OBS decided to randomly crash in the middle (which it did once in a while):</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BfMdH3UEKfJKX71k5Qgnpw.png" /></figure><h4>What kind of camera did you use and how did you connect it?</h4><p>I have a Sony Alpha a7R III. I used a 20mm (relatively wide angle) prime lens.</p><p>I had the ISO and focus set to manual. Also, I had the metering mode switched to “entire screen average”— that helped a lot.</p><p>I used a mini-HDMI/HDMI cable and connected it via Cam Link 4K to my Mac. That exposed it as a virtual camera that I could just use in Zoom (but not, for some reason, FaceTime). This is normally how I dial into work meetings.</p><p>Lastly, I used a <a href="https://www.adorama.com/gygvusba7iii.html">fake battery connected to the mains</a>.</p><h4>How did you maximize room?</h4><p>I don’t have a huge apartment, so I tried a few tricks:</p><ul><li>wide angle lens</li><li>tilted the camera a bit up</li><li>I didn’t know how to raise the camera so I didn’t cover so much of the screen… so instead I moved the recording down by 100 pixels. (Just needed to be careful not to move my hand up too much so they’d appear clipped.)</li></ul><h4>How did you pipe the video from Mac into the Windows computer?</h4><p>I changed my MacBook’s resolution to 1920×1080 (non retina). I made OBS go full screen, I disabled True Tone and Night Shift, and I used (another, borrowed) <a href="https://www.elgato.com/en/cam-link-4k">Cam Link 4K</a> with an HDMI cable.</p><p>(My friend recommended <a href="https://www.amazon.com/dp/B089VWHGJH">a cheaper capture device</a>, but I never got it to work reliably in 1080p, only in 720p.)</p><h4>Why did you use a Windows computer as a second computer?</h4><p>I had a second MacBook, and an older Surface Book (first generation). I originally used the former, but it couldn’t handle even the compositing required, let alone also outputting to Zoom.</p><p>What I learned was that OBS on Mac for some reason isn’t hardware accelerated, but it is on Windows. So I dusted off the Surface Book, changed my code a bit, and run it there.</p><p>It handled everything swimmingly! Well…</p><h4>How did you make Windows computer perform better?</h4><p>After many days of working well, for some reason at some point the OBS on Windows started behaving poorly — skipping frames, choppy mouse cursor, that kind of stuff.</p><p>Nothing seemingly changed in the setup, and internet research proved inconclusive. I was despairing enough to consider buying a newer Windows laptop just for this… until I realized that just reducing the screen resolution to something much smaller (1920×1080, non retina) made it behave okay again.</p><p>The Windows computer used the virtual camera for Zoom, and recorded to file, and they were both using 1920×1080 regardless of the screen resolution. And I only looked at the screen as a monitor a few times during the presentation (the timer was the main source of info), so the actual resolution didn’t matter.</p><h4>How did you share the video to Zoom?</h4><p>Normally, Zoom combines two separate video sources:</p><ul><li>your webcam (prioritizes framerate over quality)</li><li>your screen share (prioritizes quality over framerate, although there is an option to make it more closer to the webcam if you’re sharing video). Also, no pixels are cropped</li></ul><p>If you are sharing with OBS, you can combine your screen and your webcam and potentially many other sources into one frame before Zoom even gets to it. And you can also send it back to Zoom in two different ways:</p><ul><li>as a webcam (making OBS create a fake webcam in your system that basically has your OBS screen)</li><li>as a “projector” or just screen sharing an OBS window</li></ul><p>It’s the former that I chose for this project, as I cared more about framerate than quality.</p><h4>How did you share the audio to Zoom?</h4><p>Unfortunately, the virtual camera doesn’t have the audio component.</p><p>I had to install a piece of software called <a href="https://vb-audio.com/Voicemeeter/">Voice Meeter</a>, which allowed me to redirect my microphone input from the USB dongle to a virtual output called B1. And this virtual output was also set as the output in Windows, ensuring the music from the pre-recorded slides was also mixed in.</p><p>(You might wonder why I didn’t just allow the microphone to be output to speakers in OBS. However, that also made the microphone be recorded twice in the recording, with a small delay, creating an awkward echo.)</p><p>Here are my settings:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vA4VNQ6oG4nX0o-iUPo5JQ.png" /></figure><p>Please note that the computer itself was muted, so I didn’t hear anything as I was talking.</p><h4>How did you solve the issue of Voice Meeter audio getting garbled?</h4><p>Voice Meeter’s audio engine sometimes makes the audio garbled and robotic (choppy). This seems to just happen once in a while.</p><p>You can fix this by choosing A1 menu and resetting the audio engine there.</p><p>To know whether my audio was garbled or not, I temporarily unmuted my computer, enabled A1 output in the first column (HARDWARE INPUT 1), and then plugging headphones to avoid feedback. If I could hear my microphone in my ear correctly, it means it worked. If not, I reset the audio engine as many times as it was necessary.</p><h4>How did you solve the sync issue between video and audio?</h4><p>Since I was recording the video on one computer, and audio on the other, there was a delay betwen video and audio as recorded and as sent to Zoom.</p><p>I actually didn’t solve it for Zoom — I didn’t get to it, thinking it won’t be very noticeable, since it was Zoom and I wasn’t that big on the screen.</p><p>For the recording, I adjusted the delay using ffmpeg:</p><pre>ffmpeg -ss 00:00:28.00 -i input.mkv -itsoffset 0.3 -ss 00:00:28.00 -i input.mkv -map 0:v -map 1:a -c copy -t 05:00:00 output.mkv</pre><h4>How did you make Zoom go 1080p?</h4><p>I don’t think I did. Don’t ask me more Zoom questions; I really hate Zoom.</p><h4>How did you make sure the three devices started at the same time?</h4><p>I connected a regular Logitech presentation remote to the Mac computer. In OBS on that computer, I assigned the script to the right arrow key.</p><p>Then, my Lua script would ping my server upon receiving that event, telling it to switch its time stamp to the current date.</p><p>The Windows computer and the iPad with the timer were both asking the server every 500ms for the saved timestamp. If they noticed the timestamp being newer than the last one, they started their own parts.</p><p>This wasn’t very precise, of course, but it was precise enough for me.</p><p>(Also, this was an external server, which was a bad idea — it would’ve been better for it to be internal, but then again I needed internet to give that talk, so…)</p><p>(Also, I used regular GET/PUT, rather than something smarter like websockets. Seems to have worked well.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TFDJP8ds6pbM_GrTXP8wPQ@2x.png" /></figure><h4>What font is that?</h4><p><a href="https://djr.com/font-of-the-month-club#2020-06">Bild Compressed</a> from David Jonathan Ross.</p><h4>How did you stop your cat from interfering with your practice or messing up your sound by meowing?</h4><p>Trick question. You can’t control cats.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h3>3. What I learned about controlling and scripting OBS</h3><p>I found OBS to be pretty poorly documented – there is a bit of documentation, but few solid examples… and there is a community of people who share scripts, but the coverage seems low.</p><p>I put up my source in GitHub here (with some comments):</p><ul><li><a href="https://github.com/mwichary/The-rectangle-behind-you/blob/master/four-laps/kylie-1-mac.lua">OBS Lua script for the first computer (Mac)</a></li><li><a href="https://github.com/mwichary/The-rectangle-behind-you/blob/master/four-laps/kylie-2-windows.lua">OBS Lua script for the second computer (Windows)</a></li><li><a href="https://github.com/mwichary/The-rectangle-behind-you/blob/master/four-laps/timer.html">Timer app (iPad)</a></li></ul><p>And below I’ll tell you every tricky part about OBS that I learned in the process.</p><p>Note: All of the below require this line, which seems to be a standard way to shorten obslua in all the scripts I’ve seen online:</p><pre>local obs = obslua</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>Why OBS and not Streamlabs OBS?</h4><p>I couldn’t get the virtual camera to work on my Mac with Streamlabs OBS, but could in OBS. (Eventually, I ended up not needing it, but was already used to OBS by then.)</p><h4>How to log to OBS’s console (called Script Log)?</h4><p>I found this somewhere:</p><pre>local function log(name, msg)<br>  if msg ~= nil then<br>    msg = &quot; &gt; &quot; .. tostring(msg)<br>  else<br>    msg = &quot;&quot;<br>  end</pre><pre>obs.script_log(obs.LOG_DEBUG, name .. msg)<br>end</pre><h4>How to effectively iterate in OBS?</h4><p>OBS crashed a lot, particularly if I wanted to run the same script again. It’s possible that I was doing something wrong — perhaps not releasing the resources properly, etc.</p><p>But it’s also a bit clunky to reload the scripts since there is no keyboard shortcut, and the button is in a window rather than exposed.</p><p>So I learned that the best way to iterate is to quit OBS and quickly open it again. Qutting even as the file was being recorded seemed to have finished the recording properly, and restarting the app forced my script to reload, too.</p><p>One challenge was that OBS remembers its state (all the scenes and items) between openings — so I had to make OBS forget the latest changes and always wake up in a predefined state:</p><h4>How to start OBS in a certain state (Mac)?</h4><p>When I was happy with my OBS settings, I duplicated the entire directory ~/Library/Application Support/obs-studio and renamed the result obs-studio-kylie</p><p>I wrote this shell script:</p><pre>rm -rf ~/Library/Application\ Support/obs-studio</pre><pre>cp -R ~/Library/Application\ Support/obs-studio-kylie <br>  ~/Library/Application\ Support/obs-studio</pre><pre>open /Applications/OBS.app</pre><p>I named the file startObs.sh.command — the last addition allowed me to drag it into the dock.</p><p>Lastly, in the Terminal app, I went to Preferences, and then Shell, and set <em>When the shell exists: </em>to <em>Close if the shell exited cleanly. </em>This made sure that my script didn’t leave behind a terminal window. (Which would be visible to the audience if OBS crashed.)</p><h4>How to start OBS in a certain state (Windows)?</h4><p>I created a .bat file. Instead of replacing the whole setup, it only deletes all the scenes, and replaces with the new one. I probably would’ve deleted the entire directory instead, like above, for simplicity:</p><pre>del /q c:\users\mwich\AppData\Roaming\obs-studio\basic\scenes\*.*</pre><pre>copy c:\users\mwich\desktop\kylie\bat\z.json <br>  c:\users\mwich\AppData\Roaming\obs-studio\basic\scenes</pre><pre>cd &quot;C:\Program Files\obs-studio\bin\64bit&quot;<br>obs64.exe</pre><h4>How to make OBS go full screen?</h4><p>I wanted a pure 1920×1080 output from OBS so I could redirect it to the Windows computer.</p><p>Normally, one would use a virtual camera or a recording, but this needed to go live over HDMI. I think long time ago I’ve used something called a projector, but:</p><ul><li>the last time I used them, they still had bits and pieces of UI</li><li>I only had one display, and I felt this would’ve made things complicated</li><li>I remembered it taking extra CPU</li><li>I actually, believe it or not, couldn’t find it in the UI</li></ul><p>The solution I found was basically configuring OBS to remove all the UI:</p><ul><li>I toggled all of these options off, and used <em>Lock UI </em>so that they wouldn’t reset</li><li>In the <em>Edit</em> menu (why there???), I opened Preview Scaling, and changed it to be 1:1 (otherwise even in fullscreen, there was a bit of a bezel)</li><li>I made OBS go fullscreen via Mac’s regular “green button”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*47B6hDObA5wGBX9Nh-BpDQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/854/1*x8eNID4weEd5Yn49UqPQSQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>How to move an item in the scene?</h4><p>This is how to move it down by 100px:</p><pre>local item = obs.obs_scene_add(current_source, camera)<br>local pos = obs.vec2()<br>pos.x = 0<br>pos.y = 100<br>obs.obs_sceneitem_set_pos(item, pos)</pre><h4>How to resize an item?</h4><p>I ended up not needing that, since all of my items were matching the 1920×1080 resolution of the whole scene, but just in case:</p><pre>local item = obs.obs_scene_add(current_source, camera)<br>local scale = obs.vec2()<br>scale.x = 0.9375<br>scale.y = 0.9375<br>obs.obs_sceneitem_set_scale(item, scale)</pre><h4>How to move an item in the z-index?</h4><pre>local item = obs.obs_scene_add(current_source, camera)<br>obs.obs_sceneitem_set_order(item, obs.OBS_ORDER_MOVE_BOTTOM)</pre><h4>How to remove all items in a scene?</h4><pre>local sceneitems = obs.obs_scene_enum_items(current_source)</pre><pre>for i, sceneitem in ipairs(sceneitems) do<br>  local sourceSrc = obs.obs_sceneitem_get_source(sceneitem)<br>  local type = obs.obs_source_get_id(sourceSrc)<br>  local settings = obs.obs_source_get_settings(sourceSrc)<br>  obs.obs_sceneitem_remove(sceneitem)<br>end</pre><h4>How to prevent a red border from appearing around things?</h4><p>Newly-created items are selected and therefore have a red border around them. This doesn’t matter for a virtual camera (used by Zoom) or for recording, but it matters when you capture the Zoom UI to another computer as per above.</p><p>I could not find a way to deselect items programmatically in OBS, but locking them does the tricky:</p><pre>local color_item = obs.obs_scene_add(current_source, color_source)<br>obs.obs_sceneitem_set_locked(color_item, true)</pre><h4>How to set up a color key filter programmatically?</h4><pre>local recording_filter_settings = obs.obs_data_create()</pre><pre>obs.obs_data_set_int(recording_filter_settings, &quot;key_color&quot;, 0xffffffff)<br>obs.obs_data_set_string(recording_filter_settings, &quot;key_color_type&quot;, &quot;custom&quot;)<br>obs.obs_data_set_int(recording_filter_settings, &quot;similarity&quot;, 57)<br>obs.obs_data_set_int(recording_filter_settings, &quot;smoothness&quot;, 94)</pre><pre>local recording_filter = obs.obs_source_create_private(&quot;color_key_filter&quot;, &quot;Recording Filter&quot;, recording_filter_settings)</pre><pre>obs.obs_source_filter_add(camera, recording_filter)<br>obs.obs_data_release(recording_filter_settings)<br>obs.obs_source_release(recording_filter)</pre><h4>How to fade out?</h4><p>First, create a completely white scene:</p><pre>fadeout_scene = obs.obs_scene_create(&#39;Fadeout&#39;)<br>local new_something = obs.obs_scene_get_source(fadeout_scene)<br>local new_source = obs.obs_scene_from_source(new_something)</pre><pre>local color_settings = obs.obs_data_create()</pre><pre>obs.obs_data_set_int(color_settings, &quot;width&quot;, 1920)<br>obs.obs_data_set_int(color_settings, &quot;height&quot;, 1080)<br>obs.obs_data_set_int(color_settings, &quot;color&quot;, 0xffffffff) <em>-- White<br></em>local color_source = obs.obs_source_create(&quot;color_source&quot;, <br>  &quot;Color&quot;, color_settings, nil)<br>local color_item = obs.obs_scene_add(new_source, color_source)<br>obs.obs_sceneitem_set_locked(color_item, true)<br>obs.obs_data_release(color_settings)</pre><p>Then, set a fadeout timer:</p><pre>obs.timer_add(start_fadeout, (5 * 60 + 25) * 1000) <em>-- 5m25s</em></pre><p>And then, transition:</p><pre>function start_fadeout()<br>  obs.timer_remove(start_fadeout)</pre><pre>local new_something = obs.obs_scene_get_source(fadeout_scene)</pre><pre>local transitions = obs.obs_frontend_get_transitions()<br>  local fade = find_source_by_name_in_list(transitions, &quot;Fade&quot;)</pre><pre>obs.obs_frontend_set_current_transition(fade)</pre><pre>obs.obs_transition_start(fade, obs.OBS_TRANSITION_MODE_AUTO, <br>    2000, new_something)<br>end</pre><h4>How to only fire a timer once?</h4><p>You initialize a timer this way:</p><pre>obs.timer_add(something, 2000)</pre><p>This will call a something function every 2 seconds. To do it only once, do this:</p><pre>function something() {<br>  obs.timer_remove(something)</pre><pre>...<br>}</pre><p>Yeah, I know, it’s weird.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>How to add CamLink capture programmatically? (Mac)</h4><pre>local camera_settings = obs.obs_data_create()</pre><pre>obs.obs_data_set_string(camera_settings, &quot;device&quot;, &quot;0x1100000fd90066&quot;) <em>-- Cam Link </em></pre><pre>obs.obs_data_set_string(camera_settings, &quot;preset&quot;, &quot;AVCaptureSessionPresetHigh&quot;) <em>-- This means 1920x1080</em></pre><pre>local camera = obs.obs_source_create(&quot;av_capture_input&quot;, &quot;Camera video&quot;, camera_settings, nil)<br>local item = obs.obs_scene_add(current_source, camera)<br>obs.obs_data_release(camera_settings)</pre><h4>How to add CamLink capture programmatically? (Windows)</h4><p>Very similar, but some parameters are named differently :</p><pre>local camera_settings = obs.obs_data_create()</pre><pre>obs.obs_data_set_string(camera_settings, &quot;video_device_id&quot;, &quot;Cam Link 4K:\\\\?\\usb#22vid_0fd9&amp;pid_0066&amp;mi_00#227&amp;71832f1&amp;0&amp;0000#22{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global&quot;)</pre><pre>local camera = obs.obs_source_create(&quot;dshow_input&quot;, &quot;Camera video&quot;, camera_settings, nil)<br>local item = obs.obs_scene_add(current_source, camera)<br>obs.obs_data_release(camera_settings)</pre><h4>How to get the necessary CamLink id? (Mac)</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/667/1*hJI_7LlZlm4P7qfPyi2KmQ@2x.png" /></figure><p>After opening System Information and going to Camera, the Unique ID is listed here. Then, you can plug it here:</p><pre>obs.obs_data_set_string(camera_settings, &quot;device&quot;, &quot;0x12000000fd90066&quot;)</pre><p>Note that the first digits of the id will change if you connect it to a different USB port… so don’t do it.</p><h4>How to get the necessary CamLink id? (Windows)</h4><p>If you go to Device Manager, then Cameras, then Details, and then just sort of click around, you will find all the necessary part to construct the id:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/781/1*fTqoeaELWf9DqawIhAVL9w.png" /></figure><p>Here’s an example:</p><pre>obs.obs_data_set_string(camera_settings, &quot;video_device_id&quot;, &quot;Cam Link 4K:\\\\?\\usb#22vid_0fd9&amp;pid_0066&amp;mi_00#227&amp;71832f1&amp;0&amp;0000#22{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global&quot;)</pre><h4>How to know the various names of settings for various items you can put in the scene?</h4><p>This seems (or is) poorly documented. The best luck I’ve had was looking at the source code.</p><p>For example, wanting to know how to programmatically create a color key filter, I looked at <a href="https://github.com/obsproject/obs-studio/blob/01d065fa7dc6574e0dba8fbb84ea1c0d106421c5/plugins/obs-filters/color-key-filter.c#L8">settings here in GitHub</a> to know the right string ids, and then looked further down in the file to see whether they’re numbers, strings, bools, etc.</p><p>To find the filter id I needed, I searched for .id and found it <a href="https://github.com/obsproject/obs-studio/blob/01d065fa7dc6574e0dba8fbb84ea1c0d106421c5/plugins/obs-filters/color-key-filter.c#L458">here</a>.</p><p>This led me to knowing that I need to do this, in this example:</p><pre>local recording_filter_settings = obs.obs_data_create()</pre><pre>obs.obs_data_set_int(recording_filter_settings, <strong>&quot;key_color&quot;</strong>, 0xffffffff)<br>obs.obs_data_set_string(recording_filter_settings, <strong>&quot;key_color_type&quot;</strong>, <strong>&quot;custom&quot;</strong>)<br>obs.obs_data_set_int(recording_filter_settings, <strong>&quot;similarity&quot;</strong>, 57)<br>obs.obs_data_set_int(recording_filter_settings, <strong>&quot;smoothness&quot;</strong>, 94)</pre><pre>local recording_filter = obs.obs_source_create_private(<strong>&quot;color_key_filter&quot;</strong>, &quot;Recording Filter&quot;, recording_filter_settings)</pre><pre>obs.obs_source_filter_add(camera, recording_filter)<br>obs.obs_data_release(recording_filter_settings)<br>obs.obs_source_release(recording_filter)</pre><p>(Random note: it seems that color_key_filter has a v2 version! Either this is new, or I didn’t notice it before.)</p><h4>How to figure out what are the right setting values if those are not obvious?</h4><p>What I found useful is creating the right item by hand, and then writing a script to inspect and output the setting:</p><pre>local sceneitems = obs.obs_scene_enum_items(current_source)<br>for i, sceneitem in ipairs(sceneitems) do<br>  local sourceSrc = obs.obs_sceneitem_get_source(sceneitem)<br>  local type = obs.obs_source_get_id(sourceSrc)<br>  local settings = obs.obs_source_get_settings(sourceSrc)</pre><pre>log(&#39;local_file&#39;, obs.obs_data_get_string(settings, &quot;local_file&quot;))<br>  log(&#39;looping&#39;, obs.obs_data_get_bool(settings, &quot;looping&quot;))<br>end</pre><p>That was useful, for example, to know the expected values of these two settings, for example:</p><pre>obs.obs_data_set_string(camera_settings, &quot;device&quot;, &quot;0x1100000fd90066&quot;)<br>obs.obs_data_set_string(camera_settings, &quot;preset&quot;, &quot;AVCaptureSessionPresetHigh&quot;)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>How to start and stop recording?</h4><p>Easy:</p><pre>obs.obs_frontend_recording_start()</pre><p>and:</p><pre>obs.obs_frontend_recording_stop()</pre><h4>How to start a virtual camera? (Windows)</h4><p>Contrary to the above, this is not available directly. But I found somewhere a pretty weird recipe that goes back to C.</p><p>Somewhere at the top, you have do this. This, I believe, creates a link to C and writes some code in C that’s necessary to supplement Lua:</p><pre>local ffi = require &#39;ffi&#39;<br>local obsffi<br>if ffi.os == &quot;OSX&quot; then<br>  obsffi = ffi.load(&quot;obs.0.dylib&quot;)<br>else<br>  obsffi = ffi.load(&quot;obs&quot;)<br>end</pre><pre>ffi.cdef[[<br>typedef struct obs_hotkey obs_hotkey_t;<br>typedef size_t obs_hotkey_id;</pre><pre>const char *obs_hotkey_get_name(const obs_hotkey_t *key);</pre><pre>typedef bool (*obs_hotkey_enum_func)(void *data, obs_hotkey_id id, obs_hotkey_t *key);<br>void obs_enum_hotkeys(obs_hotkey_enum_func func, void *data);<br>]]</pre><p>Then, this function does the rest:</p><pre>function start_virtual_cam()<br>  local target = &#39;OBSBasic.StartVirtualCam&#39;<br>  local htk_id</pre><pre>  function callback_htk(data, id, key)<br>    local name = obsffi.obs_hotkey_get_name(key)</pre><pre>    if ffi.string(name) == target then<br>      htk_id = tonumber(id)<br>      return false<br>    else<br>      return true<br>    end<br>  end</pre><pre>  local cb = ffi.cast(&quot;obs_hotkey_enum_func&quot;, callback_htk)<br>  obsffi.obs_enum_hotkeys(cb, data)</pre><pre>  if htk_id then<br>    obs.obs_hotkey_trigger_routed_callback(htk_id, false)<br>    obs.obs_hotkey_trigger_routed_callback(htk_id, true)<br>    obs.obs_hotkey_trigger_routed_callback(htk_id, false)<br>  end</pre><pre>end</pre><p>The code seems to indicate it’s cross-platform, but I only tested this on Windows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>How to check whether a file exists?</h4><pre>function file_exists(name)<br>  local f = io.open(name, &quot;r&quot;)</pre><pre>  if f ~= nil then<br>    io.close(f)<br>    return true<br>  end</pre><pre>  return false<br>end</pre><h4>How to read from a local file?</h4><pre>local handle = io.open(&quot;c:\\Users\\xxx\\Desktop\\yyy.txt&quot;, &quot;r&quot;)<br>local result = handle:read(&quot;*a&quot;)<br>handle:close()</pre><p>Note I only tested this on Windows.</p><h4>How to access a certain URL (Mac)?</h4><pre>local url = &quot;https://aaa.bbb/ccc&quot;<br>local status = os.execute(&quot;curl --connect-timeout 1 --max-time 1 &#39;&quot; .. url .. &quot;&#39;  2&gt;&amp;1 &amp;&quot; )</pre><p>Please note that I just needed to ping a URL, without worrying about status.</p><h4>How to access a certain URL without blocking the UI (Mac)?</h4><p>In OBS, executing commands blocks the main thread, which is really not great. However, accessing a local file doesn’t (or if it does, it’s imperceptible). Therefore, I just ran a local Node script that connected to the server and updated a local file… and then had OBS check the local file instead.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>How to mute a video source?</h4><p>Add a gain filter with a lot of negative gain. (Maybe even more than -30dB?)</p><pre>local recording_filter_settings = obs.obs_data_create()<br>obs.obs_data_set_double(recording_filter_settings, &quot;db&quot;, -30.0)<br>local recording_filter =<br>  obs.obs_source_create_private(&quot;gain_filter&quot;, &quot;Mute&quot;,<br>  recording_filter_settings)<br>obs.obs_source_filter_add(recording, recording_filter)<br>obs.obs_data_release(recording_filter_settings)<br>obs.obs_source_release(recording_filter)</pre><h4>What’s audio output and monitoring and how does it work?</h4><p>I don’t know if I fully understand this, but here’s what I think:</p><ul><li>By default, all the audio input sources in OBS are in <strong>Monitor Off</strong> mode, which means they get sent to streaming if you enable streaming (I didn’t use that functionality), and recorded properly. However, they are not actually output through the speakers (“monitored”) since you might not want to e.g. hear yourself again.</li><li>You can switch any audio mode to <strong>Monitor And Output, </strong>which means they will both get recorded and output to speakers.</li><li>You can switch any audio mode to <strong>Monitor Only (Mute Output)</strong>, which means you can only hear it, but it doesn’t get streamed/recorded.</li><li>You can also just disable any audio input, although I am not sure how.</li></ul><p>(If you are the person who arranged the options this way and labeled them, I have some harsh words for you. This is <em>really</em> confusing for something that could be three simple checkboxes.)</p><p>Some of the controls are available in the main window, next to meters, and the rest is in the Edit menu (for some reason) when you choose Advanced Audio Properties. Here’s a picture of both:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UiylvUIyUiRBRwF5XngJpg.png" /></figure><h4>How do you set it programmatically?</h4><p>First, you register a handler that tells you when any of those sources get activated or deactivated:</p><pre>function script_load(settings)<br>  local sh = obs.obs_get_signal_handler()<br>  obs.signal_handler_connect(sh, &quot;source_activate&quot;, source_activated)<br>  obs.signal_handler_connect(sh, &quot;source_deactivate&quot;, source_deactivated)<br>end</pre><p>Then, redirect both of these handlers to one function:</p><pre>function source_activated(cd)<br>  set_monitoring(cd, true)<br>end</pre><pre>function source_deactivated(cd)<br>  set_monitoring(cd, false)<br>end</pre><p>And then, in that function, turn the monitoring options:</p><pre>function set_monitoring(cd, enable)<br>  local source = obs.calldata_source(cd, &quot;source&quot;)</pre><pre>  if source ~= nil then<br>    local source_id = obs.obs_source_get_unversioned_id(source)</pre><pre>    if (source_id == &#39;ffmpeg_source&#39;) then</pre><pre>      if enable then</pre><pre>        obs.obs_source_set_monitoring_type(source, 2) <br>        <em>-- OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT</em></pre><pre>      else</pre><pre>         obs.obs_source_set_monitoring_type(source, 0) <br>         <em>-- OBS_MONITORING_TYPE_NONE</em></pre><pre>      end</pre><pre>    end</pre><pre>    if (source_id == &#39;scene&#39;) then<br>      obs.obs_source_set_monitoring_type(source, 0) <br>      <em>-- OBS_MONITORING_TYPE_NONE<br>    </em>end</pre><pre>    if (source_id == &#39;wasapi_input_capture&#39;) then<br>      obs.obs_source_set_monitoring_type(source, 0) <br>      <em>-- OBS_MONITORING_TYPE_NONE<br>    </em>end</pre><pre>  end<br>end</pre><p>I found the source ids the same way as I described above. <strong>ffmpeg_source </strong>was the After Effects video playing, <strong>scene</strong> was the entire scene, and <strong>wasapi_input_capture</strong> and <strong>wasapi_output_capture </strong>was input/output from the little USB device. (This is on Windows.)</p><h4>How to change the volume or set the audio source to be active or not?</h4><p>I never got this to work. Fortunately, it wasn’t necessary. But in theory, it’s this:</p><pre>obs.obs_source_set_volume(source, 0)<br>obs.obs_source_set_audio_active(source, false)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><h4>What is the difference between “scene” and “source” in OBS?</h4><p>I seriously never got it. Sometimes I think the names are reversed, or don’t match the UI names. I basically button-mashed my code into working.</p><p>This works, for example, but I have no idea why, the names of the functions don’t seem to match the output, and at some point I just gave up understanding. Please let me know what I’m missing.</p><pre>new_scene = obs.obs_scene_create(&#39;NAME&#39;)<br>new_something = obs.obs_scene_get_source(new_scene)<br>new_source = obs.obs_scene_from_source(new_something)</pre><h4>What’s the importance of “local” in front of a variable?</h4><p>Honestly, no idea. I assume it’s related to scope, but it didn’t seem to matter in my case a lot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/418/1*YS9p6OzEMZFtAcogtfp3ww@2x.png" /></figure><p><em>Thank you so much to </em><a href="https://medium.com/u/912fc31e8da7"><em>Lauren Budorick</em></a><em> for being patient, and testing the setup with me on multiple occasions. Additional thanks to Basia Wichary and Matt Braithwaite.</em></p><p><a href="https://medium.com/p/103179fcfc32/"><em>The rectangle behind you</em></a><em>, a series of articles about interactive presentations.</em></p><p><em>By Marcin Wichary (@</em><a href="https://twitter.com/@mwichary"><em>mwichary</em></a><em>)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e20dd59271af" width="1" height="1" alt=""><hr><p><a href="https://medium.com/the-rectangle-behind-you/the-making-of-four-laps-e20dd59271af">The making of Four Laps</a> was originally published in <a href="https://medium.com/the-rectangle-behind-you">The rectangle behind you</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The rectangle behind you: The Ignite talk that changed room colours]]></title>
            <link>https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-the-ignite-talk-that-changed-room-colours-92581debe69e?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/92581debe69e</guid>
            <category><![CDATA[the-rectangle-behind-you]]></category>
            <category><![CDATA[hue]]></category>
            <category><![CDATA[presentations]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Sat, 29 May 2021 20:28:29 GMT</pubDate>
            <atom:updated>2021-05-29T20:28:29.848Z</atom:updated>
            <content:encoded><![CDATA[<h4>The rectangle behind you</h4><h3>The Ignite talk that changed room colours</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p>This is a five-minute <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-why-i-love-ignite-talks-38bf35e6480f">Ignite</a> talk I gave at ORD Camp 2019:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F328091305%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F328091305%2Fb3cfac0a4c&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F772554727_1280&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/00da110699df12c9012b9937abf3dae9/href">https://medium.com/media/00da110699df12c9012b9937abf3dae9/href</a></iframe><p>I got excited about the idea of using the room’s ambient lights after seeing a demo of the light setup and console in the conference room at Google in 2018, and witnessing that room change colours:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BBZLixPhCAxyO8woigMp-A.jpeg" /></figure><p>I thought it’d be fun to use that capability, so I reached out to the event technician, Nicholas Carroll, to ask him if we could collaborate on a talk.</p><p>Eventually I came up with a script talking about ambient colours in technology. But since Nick was in a different city, I had to create two artifacts:</p><ul><li>a spreadsheet that showed the cues and general ideas</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OVFLVwtQi0YCvpFcFXdWRw@2x.png" /></figure><ul><li>a reference video, with Hue lights roughly showing what I was after</li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F308842060%3Fapp_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F308842060&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F749088251_1280&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/e055230ada3cc7666edc11002d08a9cd/href">https://medium.com/media/e055230ada3cc7666edc11002d08a9cd/href</a></iframe><p>Nick helped me with fine-tuning a lot of this and adapting it for the room, whose lightning capabilities were much more sophisticated. He added some light animations, and note how in the talk I’m lit differently to be always visible… with one slide being a crucial exception.</p><p>(Note: We couldn’t make the room completely black, because emergency exit signs had to remain illuminated. Steve Jobs movie, anyone?)</p><p>To synchronize my slide deck and his script, we went an old-fashioned route. I just had a quick countdown timer at the beginning, so Nick knew to start his programmed routine at the right moment.</p><p>That’s it! If it helps, the snippet of code I used to control my hue lights was this:</p><pre>function changeLight(lightNo, lightData) {<br>  let oReq = new XMLHttpRequest()</pre><pre>  oReq.open(<br>    &quot;PUT&quot;,<br>    `http://192.168.7.238/api/ACVASCN7N-muRklx8jmHwfa5NP7QSf3xTAMSrzKG/lights/${lightNo + 1}/state`</pre><pre>  )</pre><pre>  let data = {<br>    on: true,<br>    bri: Math.round(lightData.bri * 254),<br>    hue: Math.round(lightData.hue * 1.0 / 360 * 65535),<br>    sat: Math.round(lightData.sat * 254),<br>    transitiontime: 10, <em>/* x100ms */<br>  </em>}<br>  oReq.send(JSON.stringify(data))<br>}</pre><p>Thank you so much, Nick!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p><a href="https://medium.com/p/103179fcfc32/"><em>The rectangle behind you</em></a><em>, a series of articles about interactive presentations.</em></p><p><em>By Marcin Wichary (@</em><a href="https://twitter.com/@mwichary"><em>mwichary</em></a><em>)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=92581debe69e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-the-ignite-talk-that-changed-room-colours-92581debe69e">The rectangle behind you: The Ignite talk that changed room colours</a> was originally published in <a href="https://medium.com/the-rectangle-behind-you">The rectangle behind you</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The ghosts of technology in today’s language]]></title>
            <link>https://mwichary.medium.com/the-ghost-tech-in-todays-language-c3becc9ae30b?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/c3becc9ae30b</guid>
            <category><![CDATA[language]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Mon, 31 Dec 2018 22:02:27 GMT</pubDate>
            <atom:updated>2020-11-08T20:22:54.465Z</atom:updated>
            <content:encoded><![CDATA[<p>Yesterday, <a href="https://twitter.com/mwichary/status/1079608499083059200">on Twitter</a>, I asked:</p><blockquote><em>I wonder sometimes what would be the oldest extant word based on technology no longer in use. Taping an interview? Dialing someone?</em></blockquote><p>I received many more answers than I expected, although it soon became obvious how my rules were impossible to follow, even by me: What exactly <em>is</em> technology, and which technology ever truly goes away?</p><p><strong>Scrolling </strong>(who remembers <a href="https://en.wikipedia.org/wiki/Scroll">scrolls</a>?) feels different than <strong>fonts </strong>(used more than ever, in a digital form directly evolved from a physical predecessor), and somewhere in between these would be a <strong>tablet </strong>— a new tech inspired by old one, although without a direct connection.</p><p>But despite (or maybe <em>because</em>) the fuzzy rules, it was fun to comb through the answers, and ponder how often technology hides in everyday language long past its own <strong>limelight</strong>. So, let’s check out some examples.</p><p><em>Note: The following will be very English-centric.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j-q_zc6YwLxueJW3TEhXtQ.jpeg" /><figcaption>A phone with a dial and a hanging earpiece</figcaption></figure><p>We <strong>dial a number</strong> — or <strong>dial someone </strong>— even though dials disappeared from phones decades ago. And we <strong>hang up </strong>even though there’s rarely a handset that actually needs to be hung up.</p><p>Both radio and TV stations still ask us to <strong>tune in, </strong>even though tuners don’t really exist in television any more (and in the radio, tuning is much more automatic, using buttons and programs rather than… <a href="https://www.youtube.com/watch?v=hz_mMLhUinw">another dial</a>.)</p><p>(Side note: to tune in, someone needs to <strong>broadcast, </strong>which originally meant <a href="https://www.merriam-webster.com/dictionary/broadcast">scattering seeds in a broad field, by hand</a>. And even if you don’t broadcast, you can still <a href="https://en.wikipedia.org/wiki/Telegraphing_(sports)"><strong>telegraph your intentions</strong></a>…<strong> </strong>without the actual telegraph.)</p><p>The user interface component where you choose one of a few options is called <strong>radio buttons, </strong>based on old radio buttons you’d toggle to… tune in to different frequency bands.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Dj_hKiL1La0I78YF.jpg" /><figcaption>A tuning dial and radio buttons</figcaption></figure><p>(To add to an already massive confusion, the user interface component on a Mac that actually looks like old radio buttons is called “<a href="https://developer.apple.com/design/human-interface-guidelines/macos/windows-and-views/tab-views/">tabs</a>.”)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-pFiJJVBtbFXPGSxuOeKnA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*EdWWihVa9SMJDYrr.jpg" /><figcaption>Left: Tabs (conceptual) that look like radio buttons (physical), above radio buttons (conceptual) · Right: Tabs (physical)</figcaption></figure><p>People still talk about <strong>rolling down a window </strong>in a car, even though they don’t roll a circular handle — it’s the motor that does it today. (And you can still ask to <a href="https://idioms.thefreedictionary.com/crank+up"><strong>crank up the volume</strong></a><strong>, </strong>too.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6tjwCkMYtxRyL0uJ" /><figcaption>Rolling down a window long time ago</figcaption></figure><p>We still talk about <strong>rewinding </strong>video, long after we stopped using <a href="https://en.wikipedia.org/wiki/Magnetic_tape">magnetic tape</a> that needed to be wound and rewound. And yes, we also <strong>tape </strong>things (meaning: record them), and some of us get good enough to start <strong>filming </strong>things, often on a digital camera that never touched <a href="https://en.wikipedia.org/wiki/Photographic_film">film</a>. When you tape or when you film, you amass <a href="https://www.merriam-webster.com/dictionary/footage"><strong>footage</strong></a><strong> </strong>— although no longer measured in actual feet of film or tape length.</p><p>(Taping should not be confused with <strong>wiretapping,</strong> which used to mean <a href="https://people.howstuffworks.com/wiretapping.htm">a tap on an actual wire</a>, and now largely outgrew it.)</p><p>In some places, a finished artwork is still called <a href="https://en.wikipedia.org/wiki/Camera-ready"><strong>camera-ready</strong></a><strong>, </strong>from the days it needed to be photographed in order to be reproduced. And the <strong>camera</strong> itself? The word means “room,” from when <a href="https://en.wikipedia.org/wiki/Camera_obscura">camera obscuras</a> were room-sized. To think if <a href="https://www.computerhistory.org/timeline/1944/">earliest giant computers</a> arrived first, they could be called cameras today… (And speaking of which, an interesting inversion: <strong>computer </strong>used to mean a person doing computing, before it became a term for a machine — a distinction once awkwardly preserved in two spellings: <a href="http://uccomputinghistory.blogspot.com/2015/10/computor-vs-computer.html">computer and computor</a>.)</p><p>In a visual world, play button triangle refers to moving tape from one reel to another — <a href="https://gizmodo.com/5612630/the-secret-histories-of-those-ing-computer-symbols">more of those abstract symbols are documented here</a> — and don’t even get me started on <a href="https://www.hanselman.com/blog/TheFloppyDiskMeansSaveAnd14OtherOldPeopleIconsThatDontMakeSenseAnymore.aspx">the save icon</a>!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/0*jJd6ZLE9ZGvUT4dk.jpg" /><figcaption>The play, rewind, and fast forward triangles tell you exactly which reel you’re moving to, and how fast</figcaption></figure><p>Many of today’s terms come <a href="https://en.wikipedia.org/wiki/Glossary_of_nautical_terms">from the nautical world</a>. <strong>Taken aback </strong>used to mean a wind suddenly reversing, and your sailing ship going backwards. <strong>Bitter end</strong> refers to the <a href="https://en.wikipedia.org/wiki/Bitts">bitts</a>, where the end of a rope was attached (also see: <strong>at the end of one’s rope</strong>). <strong>Pooped?</strong> Originally: <a href="https://www.instructortoolkit.co.uk/2014/03/04/what-is-pooping/">swamped by a following wave</a>. And, on a good day you might have find yourself <strong>on an even </strong><a href="https://en.wikipedia.org/wiki/Keel"><strong>keel</strong></a><strong>, </strong>as your boat once was.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*EDm3g-juSnLu9QRY.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*blmDqDSmtQ59I339.jpg" /><figcaption>Bitts on the ship · The thing at the bottom is a keel, normally submerged</figcaption></figure><p>Some of these terms might still be in use, although here’s the kicker. As someone reported:</p><blockquote>I’ve worked for 13 years in the modern maritime industry, and I can confidently assert (because I’ve asked them) that none of the modern maritime workers I’ve worked with even know that these terms came originally from their own field.</blockquote><p>One of the most interesting examples is an <strong>album. </strong>A<strong> </strong>photo album<strong> </strong>was — still sometimes is — a physical item, but so was a music album once: early records were packaged with many records in one big book, each song occupying a whole side of a record. The word that meant a physical item evolved to mean more of a concept…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xdwFO3uMuUm1-Q1o.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/812/0*kfugSEOJtCoq-514.jpg" /><figcaption>A vintage music album and a vintage photo album (is Picard a hipster or did the movie creators lack imagination? you decide!)</figcaption></figure><p>…but maybe not really! The word <em>album</em> itself comes with a Latin noun meaning “blank tablet.” And, today, there are once more multi-record vinyl albums, so maybe — excuse the pun — all of these things are just revolutions.</p><p>(A meta inversion: in a conversation a few people referred to older shellac records as vinyl records, and I called an old phonograph a gramophone. Of course, <a href="https://www.bbc.com/news/magazine-11692885"><strong>shellacking</strong></a><strong> </strong>might be a good candidate, since shellac is no more in common use.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/0*40v2nBhmoDi9xPmA.jpg" /><figcaption>A record label</figcaption></figure><p>Some people say <a href="https://www.quora.com/What-does-%E2%80%9CI-will-catch-you-on-the-flip-side%E2%80%9D-mean"><strong>catching you on the flip side</strong></a><strong> </strong>originated from two sides of the record: you’d see someone later, after the record finished its current side and had to be switched to another.</p><p>And, one of my favorites: a <strong>record label </strong>— once a physical attribute of a physical artifact, now a faraway business concept.</p><p>(And, in the world of sounds, the common example might be the <a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/RecordNeedleScratch">record needle scratch</a>, even recently turned into a <a href="https://www.youtube.com/watch?v=PSTDHNNQ2qw">meme</a>.)</p><p><strong>Knots</strong> as a measure of speed comes from sailors using a <a href="https://en.wikipedia.org/wiki/Knot_(unit)">knotted rope to determine a speed of ship</a>. (Knots exist today, of course, but maybe aren’t used for that specific purpose.)</p><p>Horses do little that’s measured by<strong> </strong><a href="https://en.wikipedia.org/wiki/Horsepower"><strong>horsepower</strong></a> (although that unit is slowly disappearing, too), and <a href="https://en.wikipedia.org/wiki/Candela"><strong>candela</strong></a><strong> </strong>as a unit refers to the candle — candles still exist, of course, but we usually measure light output of more advanced technologies. Likewise, you can still be <strong>in the limelight </strong><a href="https://en.wikipedia.org/wiki/Limelight">without any actual limelight</a>.</p><p><a href="https://www.phrases.org.uk/meanings/80200.html"><strong>Burning the midnight oil</strong></a><strong> </strong>comes from working late by a lamp literally burning oil. And <a href="https://en.wikipedia.org/wiki/Gaslighting"><strong>gaslighting</strong></a> is particularly interesting — referring to vintage and forgotten technology, too, although abstractly so, the word itself based on a 1938 play called <em>Gas Light</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PChmP4rGsqXwnksz.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/512/0*GZvN5VDzkxl-kTsM" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*Il7gwyatkl9zjrCs.jpg" /><figcaption>(Midnight) oil lamp, a limelight, and “Gas light”</figcaption></figure><p>(Speaking of horses, <strong>dashboard</strong> used to <a href="https://en.wikipedia.org/wiki/Dashboard#Etymology">mean something very different</a>: a barrier of wood or leather fixed to the front of a carriage to protect the driver from mud or debris “dashed up” by the horses’ hooves. And <strong>typewriter carriage </strong>harkened back to the horse carriage, although it was outlived by it — except in the extant technical term <strong>carriage return</strong>, or <a href="https://en.wikipedia.org/wiki/Carriage_return">CR</a>.)</p><p>Refrigerators are no longer <a href="https://en.wikipedia.org/wiki/Icebox"><strong>iceboxes</strong></a><strong> </strong>(even though some people still call them that). <strong>Ringing up a sale </strong>used to mean a cash register actually ringing. Even your Apple Watch still <a href="https://en.wikipedia.org/wiki/Striking_clock"><strong>strikes twelve</strong></a><strong>.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/752/1*H5QPPetqDRWB2Qn67g4ewA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7qqt6qIkzxjbWtVlXOe27g.png" /><figcaption>One of my favourite patent illustrations: carbon paper. It’s pretty goddamn straightforward · A carbon copy made with pen</figcaption></figure><p>We still talk about <strong>CC,</strong> coming from pen and typewriter <strong>carbon copies</strong> — either many pages interspersed with carbon paper, or later special paper with carbon backing that would duplicate itself during typing.</p><p><strong>Typing </strong>itself is related to type (metal letters) through typewriting — we no longer often call onscreen letters “type,” although we still talk about typography.</p><p>And, on the modern keyboards, we still see <strong>Shift </strong>that does no physical shifting, and <strong>Backspace</strong> that does quite a bit more than just going back one space. They date back to the 1880s, but changed in 1980s as computers took over typewriters.</p><p>Slide decks or slideshows in your PowerPoint or Keynote consist of <strong>slides, </strong>originally physical objects which the projector (or magic lantern before it) <a href="https://www.charlestonmuseum.org/news-events/the-magic-of-lantern-slides/">used to <em>slide</em> into place in front of the source of light</a>. (Yes, sometimes limelight.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/0*-n4obJavHW9tojZW.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/0*ZsiIel9QfntX_VUD.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IKGPTl6hW7fgfAUa.jpg" /><figcaption>Early magic lantern doing some sliding of slides · Lantern slides · Their 35mm children</figcaption></figure><p>The world of typesetting is filled with probably as many historic terms as the nautical world, but the one that achieved widespread attention is <strong>uppercase </strong>to mean big letters, and <strong>lowercase </strong>for small letters — coming from two physical cases, one above the other, holding the type used for printing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*NyYmUfpF27SiwhS2-e1L1w.png" /><figcaption>The upper case above the lower case. The upper case also contained small caps, not to be confused with small letters, which are in the lower case. Obviously.</figcaption></figure><p>Then there is the story of <a href="https://blog.oxforddictionaries.com/2017/10/11/origin-stereotype-cliche/"><strong>stereotype and cliché</strong></a>, twin technologies whose names were adopted and evolved to mean something very similar.</p><p>And we scroll around on our computers, even though we barely remember an ancient technology of <a href="https://en.wikipedia.org/wiki/Scroll"><strong>scrolls</strong></a>. (Funnily enough, in 1970s computing a word “roll” battled for dominance, too, meaning scrolling, and referring to <a href="https://en.wikipedia.org/wiki/Scroll#Rolls">pretty much the same item</a>.)</p><p>There are <strong>tablets </strong>that harken back to <a href="https://en.wikipedia.org/wiki/Clay_tablet">very different tablets</a> — and even without one, you can still talk about a <a href="https://www.merriam-webster.com/dictionary/blank%20slate"><strong>blank slate</strong></a><strong> </strong>or <a href="https://www.merriam-webster.com/dictionary/wipe%20the%20slate%20clean"><strong>wiping the slate clean</strong></a><strong>.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_X0WwMRqw3Kmyu7Z" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*iVjcQoxHcMFK8mOy.jpg" /><figcaption>A tablet (made of clay) and a scroll (made of papyrus)</figcaption></figure><p>Today’s <strong>branding </strong>comes from a <a href="https://en.wikipedia.org/wiki/Branding_iron">branding iron</a> used to brand cattle and claim it as belonging to you, and <a href="https://en.wikipedia.org/wiki/Earmark_(agriculture)"><strong>ear-marking</strong></a><strong> </strong>is of similar nature.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_-My5Nejhb_yruZ1.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-UPPacfRX8-S_Z3u.JPG" /><figcaption>A vintage branding iron, and cattle earmarking tools. Ouch.</figcaption></figure><p>Some terms are even more niche and specific, but nonetheless interesting. <strong>Priming the pump </strong>is an economic term meaning seed money or bootstrapping, coming from pouring liquid into a pump to expel the air and make it work, <a href="https://idioms.thefreedictionary.com/prime+the+pump">in the late 1800s</a>. And, <strong>bootstrapping </strong>itself has <a href="https://en.wikipedia.org/wiki/Bootstrapping">vintage connotations</a>.</p><p>People in the U.K. talk about it being <strong>cold enough to freeze the balls off a</strong> <strong>brass monkey; </strong>the origins of that phrase are only partly technological, but <a href="https://en.wikipedia.org/wiki/Brass_monkey_(colloquialism)">wholly fascinating</a>.</p><p><strong>Cinderblocks</strong> no longer contain cinder. A <a href="https://en.wikipedia.org/wiki/Cornerstone"><strong>cornerstone</strong></a><strong> </strong>no longer refers to the the first stone set in a masonry foundation, guiding the orientation and placement of the whole building.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*X3Ld1soNRjzaDU9C.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/1*5_zOPm0GJhMb1d8hFDcLkg.png" /><figcaption>A modern cinderblock (sans cinder) and a modern bootstrap</figcaption></figure><p><a href="https://en.wikipedia.org/wiki/Teamster"><strong>Teamsters</strong></a> originally drove teams of horses, now they’re driving trucks. <strong>Freelancers</strong> are people for hire, but no longer required to <a href="https://www.merriam-webster.com/words-at-play/freelance-origin-meaning">carry a lance</a>. Original <strong>saboteurs </strong>wore noisy sabots and <a href="https://en.wikipedia.org/wiki/Sabotage#Etymology">were <em>generally </em>noisy</a>, interrupting work with constant labour disputes.</p><p>A computer <strong>directory </strong>harks back to a physical book. (Unless your computer calls it a <strong>folder, </strong>but those can still be found in an office supply store.) Similarly, people <strong>pencil you in</strong> — pencils still exist, although the term refers to a physical agenda that sees less and less use. Some people <strong>pen a novel, </strong>but on their keyboards. Or do <strong>bookkeeping </strong>without books designed to hold your finances. Or, still refer to their list of contacts as a <a href="https://en.wikipedia.org/wiki/Rolodex"><strong>rolodex</strong></a><strong>.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*r0TJdbiyYvIuA6OG.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*EFq-3rjP-B-fuLKL.jpg" /><figcaption>A beautiful rolodex and a directory</figcaption></figure><p>And one of those things really goes back in time: <strong>Pen</strong> as a writing instrument dates from the proto-Indo-European word for “feather,” although though quill pens became obsolete two centuries ago. A clay pot <em>(</em><a href="https://en.wikipedia.org/wiki/Ostracon"><em>ostracon</em></a><em>)</em> shards were used to vote on banishment from ancient Athens, which morphed into <strong>ostracizing. </strong><a href="https://en.wikipedia.org/wiki/Divan_(furniture)"><strong>Divan</strong></a><strong> </strong>comes from a Sumatran word for “clay tablet” + “house.” (“I guess that’s like if we had an iPad chair and 4000 years later people were still calling it a padchair but the meaning of <em>pad</em> was completely obscured.”)</p><p>And even the very letter <strong>A:</strong> it <a href="https://nypost.com/2015/02/08/the-stories-behind-the-letters-of-our-alphabet/">original shape from 4 millennia ago</a> was derived from an <a href="https://en.wikipedia.org/wiki/Ox">ox</a>, early technology of castrated male cattle used for plowing, pulling carts, or threshing grain (and possibly also influenced <a href="https://en.wikipedia.org/wiki/Threshold_(door)"><strong>threshold</strong></a><strong>?</strong>).</p><p>And there are cases where we don’t have to go far at all. The very <a href="https://twitter.com/mwichary/status/1079608499083059200">original question</a> started from a recent word <strong>podcasting, </strong>peculiar in a few ways: the rare word here related to a commercial product, a product that feels ancient even though it is still being <em>sold, </em>and a device that has never been actually very good at podcasting to begin with.</p><p>But then again, what do you expect when you intersect a messy world of languages with the messy world of technology?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*B-A6J6BXn4-wlHVo.jpg" /><figcaption>Remember all the iPod ads about podcasting? Me neither.</figcaption></figure><p><em>Thank you to everyone who participated </em><a href="https://twitter.com/mwichary/status/1079608499083059200"><em>in the original thread</em></a><em>,</em> <em>and </em><a href="https://medium.com/u/3a6461168355"><em>Helen Rosner</em></a><em> for </em><a href="https://twitter.com/hels/status/679059633949011970"><em>instigating it with her tweet</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c3becc9ae30b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The best laid tracks]]></title>
            <link>https://mwichary.medium.com/the-best-laid-tracks-554adf9590a9?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/554adf9590a9</guid>
            <category><![CDATA[san-francisco]]></category>
            <category><![CDATA[infrastructure]]></category>
            <category><![CDATA[abandoned-places]]></category>
            <category><![CDATA[muni]]></category>
            <category><![CDATA[public-transit]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Wed, 12 Dec 2018 06:44:44 GMT</pubDate>
            <atom:updated>2018-12-14T03:05:40.675Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ffMct7Pbg_ubP4IUwJ-NFA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IheB3djLRDAADvT2e_gZ6g.png" /><figcaption>First photo author unknown · <a href="https://www.flickr.com/photos/chris-cf/8715129931">Second photo courtesy Christopher Cirrincione</a></figcaption></figure><h4>Stories of San Francisco’s ghost stations</h4><p>New York has <a href="http://www.columbia.edu/~brennan/abandoned/">abandoned subway stations in all sorts of configurations</a>: never opened, opened and then closed, half-closed, incomplete — some with <a href="http://www.columbia.edu/~brennan/abandoned/bowling.html">ghost platforms</a>, others with <a href="http://www.columbia.edu/~brennan/abandoned/bowery.html">doors floating in the air</a>, not to mention <a href="https://www.nycsubway.org/wiki/IRT_East_Side_Line#City_Hall">a closed station that looks better than many opened ones</a>. <a href="https://en.wikipedia.org/wiki/Category:Defunct_Chicago_%22L%22_stations">Chicago</a> has <a href="https://en.wikipedia.org/wiki/Kostner_station_(CTA_Congress_Line)">politics</a>, <a href="https://en.wikipedia.org/wiki/Washington_station_(CTA_Red_Line)">shutdown blocks-long superstations</a>, <a href="http://www.chicago-l.org/stations/conservatory.html">carcasses of some stations used to build others</a>, and even eleven <em>former ghost stations: </em>opened, closed, and then <a href="https://en.wikipedia.org/wiki/List_of_former_Chicago_%22L%22_stations#Reopened_stations">reopened again</a>. Ah, even L.A. has a <a href="https://la.curbed.com/2016/3/2/11104206/subway-terminal-building-tunnels-los-angeles">secret subway</a> from before it sold its soul to automobiles.</p><p>And then there’s San Francisco, with only a few mildly interesting abandoned transit spaces: <a href="https://en.wikipedia.org/wiki/Fort_Mason_Tunnel">a tunnel in Fort Mason</a>, <a href="https://www.thrillist.com/entertainment/san-francisco/bayshore/abandoned-bayshore-train-yard-photos-in-san-francisco">Bayshore roundhouse</a>, <a href="https://www.google.com/maps/@37.7863404,-122.3904485,3a,75y,245.5h,95.94t/data=!3m6!1e1!3m4!1srLEPYLxrWzEn0lGgdIqiiQ!2e0!7i16384!8i8192">former (possible) transit stops on the Bay Bridge</a>. Counting proper ghost stations gets you to… one. Well, maybe two, if you bend the rules a bit.</p><p>But they’re still <em>our </em>two ghost stations, so let’s spend some time learning their history and looking at some wonderful photos (some never before seen online). If you’re like me, you might be surprised to find out how much both stations have in common, and what tumultuous journeys got them to where they were.</p><h3>Part I. Eureka (Valley) Station, 1918–1972</h3><p>At the turn of last century, we treated Twin Peaks, one of the city’s most famous hills, as a billboard. In 1901, someone adorned it with an ad for Cook’s Water (not a proto LaCroix, as I assumed, but rather <a href="https://blog.sfgate.com/thebigevent/2015/03/10/our-sf-some-dummy-put-an-ad-on-twin-peaks-in-1901/">a popular resort</a>)…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*uMKl2gcLQKuVtEWRniVSVQ.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp26.561.jpg">Source</a></figcaption></figure><p>…and by 1913, with <em>two</em> separate big-lettered ads:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*ZmJ2UfBpcndxRBU6DK4G_Q.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.00684.jpg">Source</a></figcaption></figure><p>Luckily, the tradition didn’t continue for much longer — from now on, only the things on the ground and below it would multiply.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3WtVS6PuZafHQqRAICe4yg.jpeg" /><figcaption>Detail from <a href="https://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~29710~1140763:San-Francisco-?sort=Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No&amp;qvq=w4s:/where%2FSan%2BFrancisco%2B%252528Calif.%252529%2Fwhen%2F1904;q:%22san%20francisco%22;sort:Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No;lc:RUMSEY~8~1&amp;mi=2&amp;trs=5">1904 San Francisco map</a> via David Rumsey Map Collection</figcaption></figure><p>Both of the photos above point to the end of Market Street, already the city’s <a href="https://en.wikipedia.org/wiki/A_Trip_Down_Market_Street">biggest and most important street</a>, although much abbreviated from present day’s perspective.</p><p>Today, you can get into a car at the bottom of Market Street by the Ferry Building, and witness its five personalities without ever changing a lane: first a straight line cutting through downtown like a solidus, then a winding road that sheds most of transportation and hugs the bottom of Twin Peaks, followed by its renamed continuation — Portola Drive — sneaking by San Francisco’s <a href="https://en.wikipedia.org/wiki/Glen_Canyon_Park">most famous canyon</a> right before the city’s <a href="https://en.wikipedia.org/wiki/Mount_Davidson_(California)">highest natural point</a>, to then morph into to a <a href="https://en.wikipedia.org/wiki/Junipero_Serra_Boulevard">Boulevard</a>, and eventually become an <a href="https://en.wikipedia.org/wiki/Interstate_280_(California)">Interstate</a> claiming to be “the world’s most beautiful,” leading all the way to San Jose.</p><p>But in 1913, Market Street just… ended. You could turn left into Castro Street and visit a brand-new Castro Theater (<a href="http://opensfhistory.org/Display/wnp67.0034.jpg">not the one you’re thinking of</a>! and <a href="http://opensfhistory.org/Display/wnp67.0033.jpg">not as impressive</a>!), or choose to turn right into 17th Street towards the largely uninhabited western parts of the city. Alternatively, you could stay at the intersection and visit the well-known pharmacy… or even move into the new, shining, white four-story apartment building that sprang up next to it in the recent few years.</p><p>But the last one would’ve been a bad idea. For the first steps to extend Market Street and turn it into a 60-mile ribbon would start within a year — and its first casualty would be that very building.</p><p>The plan was far more ambitious, however, than just making Market Street longer. It was to make Market Street longer <em>twice — </em>split it into a more impressive thoroughfare for cars, but also allow the trams already traversing the diagonal street to simply <em>keep on going,</em> through a streetcar tunnel that would become the world’s longest and take them all the way to the other side of Twin Peaks, considerably shortening the downtown commute of people living there.</p><p>The following maps show Market Street before the extension, the Twin Peaks Tunnel during construction, and the eventual outcome with both the tunnel and Market Street continuing southwestward: overlapping for a few blocks, then going their separate ways.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3WtVS6PuZafHQqRAICe4yg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ve9TEMExTDCNy1IuB9Z5uA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2-YBsRz3Yw8DJQiKzVAsOQ.jpeg" /><figcaption>Details from <a href="https://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~29710~1140763:San-Francisco-?sort=Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No&amp;qvq=w4s:/where%2FSan%2BFrancisco%2B%252528Calif.%252529%2Fwhen%2F1904;q:%22san%20francisco%22;sort:Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No;lc:RUMSEY~8~1&amp;mi=2&amp;trs=5">1904</a>, <a href="https://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~306181~90076538:The-up-to-date-map-of-San-Francisco?sort=Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No&amp;qvq=w4s:/where%2FSan%2BFrancisco%2B%252528Calif.%252529%2Fwhen%2F1915;q:%22san%20francisco%22;sort:Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No;lc:RUMSEY~8~1&amp;mi=0&amp;trs=8#">1915</a>, and <a href="https://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~29556~1130602:San-Francisco-?sort=Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No&amp;qvq=w4s:/where%2FSan%2BFrancisco%2B%252528Calif.%252529%2Fwhen%2F1929;q:%22san%20francisco%22;sort:Pub_List_No_InitialSort%2CPub_Date%2CPub_List_No%2CSeries_No;lc:RUMSEY~8~1&amp;mi=3&amp;trs=4">1929</a> maps via David Rumsey Map Collection</figcaption></figure><p>Construction on the tunnel started at the end of 1914…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*H01zciHMyrw0QTiuWbSVwQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*vBvSDBXsz_eFNED-GWlMTg.jpeg" /><figcaption>First photo via <a href="http://opensfhistory.org/Display/wnp36.00704.jpg">OpenSFHistory</a> · Second photo courtesy <a href="https://sfmta.photoshelter.com/image/I00002gWKKTlYk6Q">SFMTA</a></figcaption></figure><p>…with the extension of Market Street hugging both sides of its entrance (called the East Portal), and a bunch of buildings sacrificed to create room for both:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*dhM23ZnL5_g58Cw4LhOrug.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*YwZgf0zyvhaGcvjod2DxLg.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.01469.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp36.01468.jpg">Source</a></figcaption></figure><p>The project was ambitious in another way. It recognized, even in the early 1910s, that the future of the already-congested Market Street was public transit running <em>below </em>it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*exvhsStEPM8GYgTtuDLPUA.jpeg" /></figure><p>And so, at the entrance to the new Twin Peaks tunnel, the tracks dipped down sharply so they could get underground really quickly — and, in the future, the rest of Market Street would join them there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*nIsuLZtPQ2z5ObZQPHWdUg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*yOg2U2w-p7sEs6WGWIMFWg.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.04578.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp36.01951.jpg">Source</a></figcaption></figure><p>The tunnel, called by then-mayor Rolph “the last tunnel which reveals to the eyes of the people of the East the Golden Shores of the Pacific,” opened in 1918, frequented by streetcar lines with letters — K, L, M — recognizable to any rider today.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*810DSjT5aUrnhcazZLT90A.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DkuAaGRpIY-jjpSOyiwE0Q.jpeg" /><figcaption>First photo via <a href="http://opensfhistory.org/Display/wnp26.107.jpg">OpenSFHistory</a> · Second photo via <a href="https://www.flickr.com/photos/sfmtaphoto/22539771770/in/album-72157625986172897/">SFMTA</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I5c9SixedfHo1cfMF-n-og.jpeg" /><figcaption>Photo taken January 13, 1959</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vkTBidX0Vnu3J1nOGGJKNw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LNC5SU_KZdT0STxKEyGJPA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RN1Xw4EnfCJYv-IHjJSNWA.jpeg" /><figcaption>Photo taken January 13, 1959 · <a href="https://sfmta.photoshelter.com/image?&amp;_bqG=554&amp;_bqH=eJxtkFFrwyAUhX9N89KXbCSUBXywXluk1WxXDbgXCSPQkc2FNW3Zv5.GsoWt9.H6nXM9ipoeJWC7c1biUDwVX5dmE87h2XzQanVfVGWeV3d5rEp40IyMl9ewHLq2Py7HUwjdWya8Bmr4olxLuSiBzAyAZADMLBcrmWmNNv8b5f.j_HaUCeOmy0wcJ2C1VQadF7pOskbBVZyJWiUptEe.51RzuMrHudY1GoJU7bLpnZ4qIGNkqzl6AcSmP2APTQ9nM7yf.jhqBBpL955uuWIubco8W3sRD47RK9ofxM0vyoSUGXLs2s.XQ9ZM6e3UWerftnN2Zw--&amp;GI_ID=">Photo courtesy SFMTA</a> · Photo from May 9, 1958, Call-Bulletin Library</figcaption></figure><p>There were two small boarding platforms just before the entrance to the East Portal but, of course, with the entire Market Street streetcar traffic soon moving underground, the stop would disappear and was meant as temporary.</p><p>Instead, not far from the entrance <em>inside</em> the subway, a proper station was built. Named after both the valley and the nearby street, it was called either Eureka Valley Station, or Eureka Station. (We could never truly decide.)</p><p>Streetcars entered the station <em>via</em> the tunnel. For pedestrians, there were four small kiosks located by the sides of Market Street, still in the process of being extended, with the tunnel running directly underneath. In the photo below, the four brand-new kiosks are clearly visible — as is a guy hanging his laundry:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n8Lroz57gw30vXRGRzn-7Q.jpeg" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=0&amp;_bqH=eJxtT21LwzAQ_jXr54kWNiEf0tw5DtekJmmh.xJG7SaUMalO_PnelaFFDdzlebkn4c7H6E6fT8OKnqvj7WG8y5uiO_fVrlvd3yxzrqUUd0oQjOovYz_sM0oBdMRFXpTlIgc1EwBEAJhJLR8R5WYZf0fxbxT_jxqK7fRZZFuAcbWNvk0UnFDnCS175KxQCsnjFnVAuNJqzoPzUXltH7NpuaQtqHfGdUCfCFQti5t1M8BHfD1dBrYa8rHW26Q3aE0rQ1kyRSJ.mKNXWH9D__ADS4HaRPXW78fuJWum9GbqRvoXDD1yAw--&amp;GI_ID=">Photo courtesy SFMTA</a></figcaption></figure><p>The kiosks were tiny, although elegant, each one hiding stairs leading to platforms below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xUQPp5L2DZYumcBeQyMrfQ.jpeg" /><figcaption>Scan from <a href="https://babel.hathitrust.org/cgi/pt?id=uc1.$c24013;view=1up;seq=5">Source</a></figcaption></figure><p>In this photo from July 1919 — the kiosks and the tunnel already open — it becomes obvious how little-developed that part of the city still was (and also the apparent popularity of hanging out white laundry):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*S6TXHtUPsYGxTXKJovB9dw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.02204.jpg">Source</a></figcaption></figure><p>In later photos, we can watch the process of paving first the cross streets…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*wYvkPIfTkQF3m1rPBOnKUA.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp15.166.jpg">Source</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*fKgZJykB5c5ltYKxZ5Xyig.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*z2p7L4kYW1wcFBCOUnE8EA.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp27.0538.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp36.02203.jpg">Source</a></figcaption></figure><p>…and, by 1920, the extension of Market Street itself:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*cqCzMjRCaj5LmBG8FQCIXw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*IFtxtNXtUCNvp2ZUfrR6Rw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.02347.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp36.02918.jpg">Source</a></figcaption></figure><p>The diagram below shows how the kiosks connected to the subway platforms:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7stuRJ-t-fPW8Z-synXwYQ.jpeg" /><figcaption>Scan from <a href="https://babel.hathitrust.org/cgi/pt?id=uc1.$c24013;view=1up;seq=5">Source</a></figcaption></figure><p>But the plan was even more ambitious. It wasn’t just extending Market Street for cars and public transit. It wasn’t just anticipating Market Street streetcars going underground. It was also planning for <em>another tunnel — </em>Sunset Tunnel, which meant to start at the same place, and Eureka Station to become a crucial connector that would send you off to your journey west, or your journey north.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BJOCxfuVisavDuDC8kJAxA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uSKdvu2mP4W4qI6vqG5fvg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*COqpOcqi-V6DBEr9-tdIWQ.jpeg" /><figcaption>Scan from <a href="https://archive.org/details/reportonimprovem1913arno/page/n619">Source</a></figcaption></figure><p>Then, as you probably anticipate, life did what life does to best laid plans.</p><p>But we should finally take a look at the station itself.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rwf4WnG0pYeB8PrLqMviLw.jpeg" /><figcaption>Scan from <a href="https://babel.hathitrust.org/cgi/pt?id=uc1.$c24013;view=1up;seq=5">Source</a></figcaption></figure><p>We know it was simple, spartan even — so rudimentary that few bothered to take the time to describe or photograph it. A few photos of its construction remain, with the East Portal visible in the background:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*kOQEfHgXdSVUKTLxB8Z1jA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jQS8vQgsip6jDF9ZHYRjvg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UOB7Dglb87935ikaoQ5_Xg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SQZQMRbt2ItQBC1GLmJoPg.jpeg" /><figcaption>Station under construction, facing both directions</figcaption></figure><p>There is also a short surviving video, showing the project’s officials – among them the legendary civil engineer <a href="https://en.wikipedia.org/wiki/Michael_O%27Shaughnessy">Michael O’Shaughnessy</a> who started this whole project:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*uYZfPnWG3GD4Z-bJkiJFfQ.gif" /><figcaption>The whole 1917 video can be seen <a href="https://archive.org/details/TwinPeaksTunnel1917">on Internet Archive</a>.</figcaption></figure><p>After tons of searching, I eventually found a rare Eureka Station photo in normal use, showing a simple construction with brightly lit platforms. This could almost be a tiny subway station in London or uptown Manhattan, if not for a K streetcar promising Ocean To Phelan, its single light shining into a camera and giving us a pretty flare.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ffMct7Pbg_ubP4IUwJ-NFA.jpeg" /></figure><p>San Francisco waited to put Market Street streetcars underground for so long that streetcars themselves became obsolete. What was eventually moved underground — in mid-1970s, six solid decades after Twin Peaks Tunnel — were more advanced light railway vehicles, kind of an SUV version of a streetcar.</p><p>In the meantime, Castro Theater №2 appeared in its current location, the classic Bank of America building moved in at the corner, boxy cars and streetcars of the beginning of the century evolved into more modern equivalents, and the volume of traffic increased:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*cZjZT0Jb2iqUoFBcXYK40g.jpeg" /><figcaption>A scene of an accident in 1950s (<a href="http://opensfhistory.org/Display/wnp26.2016.jpg">source</a>). The classic rainbow flag wouldn’t be there until 1997.</figcaption></figure><p>And, we invented colour photography:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*LqQnmCMukvLUrLDjFHdjyQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*e5ALuAls5hQURv725_RTsw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp28.1765.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp25.4293.jpg">Source</a></figcaption></figure><p>Sunset Tunnel was built, too, but its entrance portal ended up located much farther to the north, shattering the Eureka Station’s dream to become a transit hub.</p><p>As the 1970s approached, the station and the tunnel faced another challenge: how to stay in operation as the East Portal was being replaced by a wholly underground connection to the newly-built Market Street subway. What transpired was the most fascinating ballet of construction work and track realignments with a singular purpose: to allow Market Street surface streetcars to continue into the old tunnel, and everyday commute to stay uninterrupted.</p><p>It started with the excavation of the area around the East Portal. In both photos below you can see the streetcars and their passengers continuing on their merry way as if nothing was happening when, in fact, literal tons of things <em>were:</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/938/1*8nCt5Ffdc6HDUkMWKMkkIA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/938/1*M3z6-w8Pp4LULBA8tAmoGg.jpeg" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=5&amp;_bqH=eJxtT21LwzAQ_jXr54kWNiEf0tw5DtekJmmh.xJG7SaUMalO_PnelaFFDdzlebkn4c7H6E6fT8OKnqvj7WG8y5uiO_fVrlvd3yxzrqUUd0oQjOovYz_sM0oBdMRFXpTlIgc1EwBEAJhJLR8R5WYZf0fxbxT_jxqK7fRZZFuAcbWNvk0UnFDnCS175KxQCsnjFnVAuNJqzoPzUXltH7NpuaQtqHfGdUCfCFQti5t1M8BHfD1dBrYa8rHW26Q3aE0rQ1kyRSJ.mKNXWH9D__ADS4HaRPXW78fuJWum9GbqRvoXDD1yAw--&amp;GI_ID=">Photo courtesy SFMTA</a> · <a href="https://sfmta.photoshelter.com/image?&amp;_bqG=8&amp;_bqH=eJxtT21LwzAQ_jXr54kWNiEf0tw5DtekJmmh.xJG7SaUMalO_PnelaFFDdzlebkn4c7H6E6fT8OKnqvj7WG8y5uiO_fVrlvd3yxzrqUUd0oQjOovYz_sM0oBdMRFXpTlIgc1EwBEAJhJLR8R5WYZf0fxbxT_jxqK7fRZZFuAcbWNvk0UnFDnCS175KxQCsnjFnVAuNJqzoPzUXltH7NpuaQtqHfGdUCfCFQti5t1M8BHfD1dBrYa8rHW26Q3aE0rQ1kyRSJ.mKNXWH9D__ADS4HaRPXW78fuJWum9GbqRvoXDD1yAw--&amp;GI_ID=">Photo courtesy SFMTA</a></figcaption></figure><p>Then, temporary side tunnels were built, connecting the surface of Market Street with the underground. (Compare the two photos below.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/811/1*1-BCYjHOQOTXOkRYY_dQcA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5m7x2vG_Tg8w3Ks9s7rNoQ.png" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=7&amp;_bqH=eJxtT21LwzAQ_jXr54kWNiEf0tw5DtekJmmh.xJG7SaUMalO_PnelaFFDdzlebkn4c7H6E6fT8OKnqvj7WG8y5uiO_fVrlvd3yxzrqUUd0oQjOovYz_sM0oBdMRFXpTlIgc1EwBEAJhJLR8R5WYZf0fxbxT_jxqK7fRZZFuAcbWNvk0UnFDnCS175KxQCsnjFnVAuNJqzoPzUXltH7NpuaQtqHfGdUCfCFQti5t1M8BHfD1dBrYa8rHW26Q3aE0rQ1kyRSJ.mKNXWH9D__ADS4HaRPXW78fuJWum9GbqRvoXDD1yAw--&amp;GI_ID=">Photo courtesy SFMTA</a> · Photo by San Francisco Public Utilities Commission</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*5TbW5vjVOkTEwz7JVC8Ixg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/740/1*X172fz4tNAM7IpUcq9YAmw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vtevFs4QRPFcuEvLiSBxLw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp25.4623.jpg">Source</a> · <a href="https://sfmta.photoshelter.com/image?&amp;_bqG=682&amp;_bqH=eJxtkFFrwyAUhX9N89KXbCSUBXywXluk1WxXDbgXCSPQkc2FNW3Zv5.GsoWt9.H6nXM9ipoeJWC7c1biUDwVX5dmE87h2XzQanVfVGWeV3d5rEp40IyMl9ewHLq2Py7HUwjdWya8Bmr4olxLuSiBzAyAZADMLBcrmWmNNv8b5f.j_HaUCeOmy0wcJ2C1VQadF7pOskbBVZyJWiUptEe.51RzuMrHudY1GoJU7bLpnZ4qIGNkqzl6AcSmP2APTQ9nM7yf.jhqBBpL955uuWIubco8W3sRD47RK9ofxM0vyoSUGXLs2s.XQ9ZM6e3UWerftnN2Zw--&amp;GI_ID=">Photo courtesy SFMTA</a> · <a href="https://www.flickr.com/photos/milantram/3751896553/">Photo courtesy Peter Ehrlich</a></figcaption></figure><p>The rather unnerving temporary configuration of a streetcar running<em> above an open trench</em> earned itself a hilarious nickname “Collingwood Elevated,” a rare elevated transit line in the history of San Francisco (Collingwood is a name of a nearby street):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Sv4xeVbaw3bk025uN4aHMA.jpeg" /><figcaption><a href="https://www.flickr.com/photos/sfmtaphoto/9077033327/">Photo courtesy SFMTA</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RfsIdJGYn0lLcS9W54qScQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FsuIIQwdixcNXp1Tr4gQjA.jpeg" /><figcaption>September 5, 1974; views in both directions taken by a police helicopter</figcaption></figure><p>Eventually, the main Market Street streetcar tracks were connected to the side tunnels more directly. (Look carefully at the first photo below, and you will also see the now-gone twin-decked Central Freeway crossing Market Street):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/736/1*7dDpKaBDcEEUgfL8ieZf6g.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*6x1e4BCJyuNuGz2va8kI-w.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/652/1*TlB6YhZ-cDdohfWFV36faA.jpeg" /><figcaption>Unknown photographer · <a href="http://opensfhistory.org/Display/wnp25.2905.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp25.4052.jpg">Source</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/682/1*n4iYVXHOX5jBnxsuWuSW3Q.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*FSJjTUc22zVhtZaOw355Eg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*cG9naXsJxSuLh2szilJ9QA.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp25.0305.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp25.4641.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp25.4642.jpg">Source</a></figcaption></figure><p>Things went on like this for a few years, with streetcars entering the Twin Peaks tunnel from the sides, cars driving from the old Market Street straight into its extension, and the work on Market Street subway proceeding out of sight.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lfeqw1ovrlj3Nm6ELwSyhg.jpeg" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=4&amp;_bqH=eJxtT21LwzAQ_jXr54kWNiEf0tw5DtekJmmh.xJG7SaUMalO_PnelaFFDdzlebkn4c7H6E6fT8OKnqvj7WG8y5uiO_fVrlvd3yxzrqUUd0oQjOovYz_sM0oBdMRFXpTlIgc1EwBEAJhJLR8R5WYZf0fxbxT_jxqK7fRZZFuAcbWNvk0UnFDnCS175KxQCsnjFnVAuNJqzoPzUXltH7NpuaQtqHfGdUCfCFQti5t1M8BHfD1dBrYa8rHW26Q3aE0rQ1kyRSJ.mKNXWH9D__ADS4HaRPXW78fuJWum9GbqRvoXDD1yAw--&amp;GI_ID=">Photo courtesy SFMTA</a>. Today, the area on the right became Pink Triangle Park, a memorial to homosexuals persecuted during Holocaust (<a href="https://www.google.com/maps/place/2500+Market+St,+San+Francisco,+CA+94114/@37.7622727,-122.4360936,3a,75y,276.12h,94.41t/data=!3m6!1e1!3m4!1sZNPOD6SgSqNwM4H5Ms450Q!2e0!7i13312!8i6656!4m5!3m4!1s0x808f7e03592a5d77:0x245ed5bbd93efad0!8m2!3d37.7622805!4d-122.4364483">see on Street View</a>)</figcaption></figure><p>Finally, in 1980, the seventy-year old dream came to be. The first car — a light rail vehicle — drove all the way underground from the top of Market Street to the very end of the Twin Peaks Tunnel.</p><p>But neither that car, nor any car after, would ever stop at Eureka Station.</p><p>In the end, for all its once grand ambitions, Eureka Station was an old, tiny box with twin platforms and little else. Upgrading it to new light rail standards (which meant, at the very least, raising all the platforms) and making it more accessible would be harder and more expensive than starting from scratch. And starting from scratch had another benefit: we could do it in a more convenient place.</p><p>After thinking about it, it turned out that the simple boarding platform just by the East Portal, always meant to be temporary, was actually in a better location for many people. And so a completely new station, called Castro, was built on that very spot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H-fnL6U0kNkDa4lENHpH7Q.jpeg" /><figcaption><a href="https://www.nycsubway.org/perl/show?45281">Photo by Doug Grotjahn</a> from July 1, 1980</figcaption></figure><p>Castro Station was bigger, equipped with a mezzanine level taking care of ticketing, and more modern styling including chrome pillars, sans serif fonts, and better lights. Instead of kinked stairs inside small kiosks, it gave people elevators and escalators.</p><p>Eureka Station, now obsolete, was put out of circulation in that way that’s only possible in controlled environments: The kiosk entrances were boarded up, and streetcars started skipping it as if it was never there.</p><p>The station name survives today, although perhaps only in the minds of people working in public transit or admiring it from afar: the 1970s side entrances to the tunnel were named Eureka Portals and for a while at least have seen occasional use during special transit events.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZxrJ85U3ps6YIxdgvHhQEw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*70x1tkaccvGFNV73nYMLvQ.jpeg" /><figcaption>Two PCCs lined up for the 1983 Trolley Festival (<a href="https://www.flickr.com/photos/milantram/27508172396">courtesy Peter Ehrlich</a>) and a car pulling out of “Eureka Carhouse” on July 1982 (<a href="https://www.flickr.com/photos/milantram/15225350772">courtesy Peter Ehrlich</a>).</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/620/1*TELyo0DDNEXaMudJmNducA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/930/1*GjCAS4xtt4juftzCTuu_uQ.jpeg" /><figcaption>Boeing LRV during 1983 Trolley Festival (<a href="https://www.flickr.com/photos/milantram/9524575524">courtesy Peter Ehrlich</a>) and cars stored at Eureka Portal in July 1982 (<a href="https://www.flickr.com/photos/milantram/5795035138">courtesy Peter Ehrlich</a>).</figcaption></figure><p>The story of Eureka Station seems filled with ignominy. The Sunset Tunnel disappointment, the decades of waiting to have a chance to shine as a connector between the Market Street tunnel and the Twin Peaks one, and then the closure that felt like a complete surprise — as late as 1969, Herb Caen wrote about “the newly refurbished station” and the new “rainbow-hued pillars.”</p><p>The station was abandoned in 1972, even before the Collingwood Elevated. In the years after, it gained a bit of a notoriety as people started venturing down there to take drugs, party, cover the walls in graffiti.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5q_mYf6FqLQJdzb5MbehQQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5z0-q0x7n0eBvb-_WxSLvg.jpeg" /><figcaption>Unknown photographer · <a href="https://www.flickr.com/photos/brasstaxproductions/321936827/">Source</a></figcaption></figure><p>Seeing that, the transit authority decided to double down, adding more security around the Eureka Portal entrances, and — in 1980 — destroying the four graffitied aboveground kiosks that once saw Market Street becoming what it is today.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hg-nopSBG9gG1lkxg_1OqA.jpeg" /><figcaption>One of the kiosks before being vandalized and eventually dismantled</figcaption></figure><p>Other ghost stations sometimes live on to get second lives: as <a href="https://en.wikipedia.org/wiki/New_York_Transit_Museum">transit museums</a>, movie shooting locations, repurposed spaces.</p><p>Eureka Valley ended up serving a role in the end, although not a particularly exciting one: it became an entrance to the tunnel for people working in it — and as emergency exits for everybody, just in case.</p><p>Today, the whole area feels like a time machine in a shuffle mode. Market Street continues through the intersection as if it’s always done so, even though this is far from its first configuration.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-1p4gQcis-VXM3kvYI7GJw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9h4uJgfVkAXZsO77lfLXrQ.jpeg" /><figcaption>Aerial photo of the area from 1938 (<a href="https://www.davidrumsey.com/blog/2011/10/24/san-francisco-aerial-photographs-1938">David Rumsey Map Collection</a>) and a satellite photo in 2018 (<a href="https://www.google.com/maps/@37.7628811,-122.4350234,3a,75y,235.73h,90t/data=!3m6!1e1!3m4!1s9l2t5E2SDw1s_kVoXD3N6Q!2e0!7i16384!8i8192">see on Street View</a>)</figcaption></figure><p>The two Eureka Portals look as if they were the original streetcar entrances, now abandoned with abandon — but they’re barely half the tunnel’s age.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mJzoHBLVsvKFr3AvSctDEg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iRp_EJzSQYCjGjgbTSQnsg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yxKa3csxsuyRJIJZyu9AEg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mSxcpbcJIi8N3KfsXXislw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8o3wp5e2QL5WZoI9X8jqEg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8SBt5BeStRqwpZPsq_bz7Q.jpeg" /></figure><p>The Castro Station, a many-million investment, is in the exact place of the original surface stop that was meant to be there for but a few years… and itself feels <em>old, </em>in that weird way brutalist creations can often appear more out of time than buildings from a hundred years ago.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KTdutthRDh756PIzaQ1yBg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_2Ifx4yQRppwofqN-CwsQg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4tU6FjwjRjTHf8qk30yItA.jpeg" /></figure><p>The two Eureka Station kiosks became two barely visible metal grates in the sidewalk. (The other pair was removed, as it ended up right above the new tracks.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aJTWKZ5xKmKhK8CIul7o2Q.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fCGMajOrHrOq4wC9ltVq7g.jpeg" /></figure><p>But you can still see Eureka Station — the oldest in the subway and the only one given up on — if you board a K or L or M train in Castro heading westward toward <a href="https://twitter.com/mwichary/status/1069482125869498368">Forest Hill</a>. Its platforms will be removed, it will whiz by quickly, and people around you won’t even notice. But it will be there.</p><p>And sometimes, when I do that, I imagine that station watching you wistfully — like it does in a photo I found in the Public Library, and which appears online for the first time:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tpmGI3XwWSD5nOy-hN1ALQ.jpeg" /><figcaption>Eureka Station in late August 1964. Photo by Alan J. Canterbury</figcaption></figure><h3>Part II. 19th Street Dolores Park stop, 1917–1981+</h3><blockquote>By a peculiar combination of topography, San Francisco is virtually shut in on all four sides, with the exception of a narrow pass down the Mission Valley around the base of the San Bruno Range. But the possession of perhaps the finest harbor in the world is more than compensation, and the City should consider itself fortunate in not having more impassable barriers.</blockquote><p>These were the words of Bion J. Arnold, a renowned transit specialist, who — after successes advising New York railroads and subways — was hired by the city of San Francisco to help devise a public transit strategy.</p><blockquote>Within the city limits numerous ridges and hills interpose obstacles which not only render transportation expensive, but which inevitably result in the comparative isolation of various districts (…) whose interests have become so diverse (although, in reality, identical) as to constitute an almost insuperable barrier to wholesome municipal progress.</blockquote><p>At that time in particular — the year 1913 — one area in dire need of public transit was “heavily-settled Noe Valley district, now requiring additional service perhaps more than any other district in the city.”</p><blockquote>The remedy for this is quick and convenient intercommunication…</blockquote><p>The plan for the new J streetcar line connecting Noe Valley to downtown couldn’t have been more simple. Start on Market Street, go almost all the way to its end, and then take one solitary turn to continue straight down the tree-lined Church Street — a gorgeous street passing by a beautiful sloped expanse of grass known as Mission Dolores Park, or Dolores Park (today), or Mission Park (once):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Nfh5aOZMuswLox2_eqVQ2g.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1hHilegzhcQcrUZrD4kOfQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1013/1*HOO_4CL8sIWBYk4Ds7tPkw.jpeg" /><figcaption>Mission Dolores Park in 1915 · <a href="http://digitalassets.lib.berkeley.edu/calheritage/ucb/cook/figures/I0049645A.jpg">Source</a>/<a href="http://digitalassets.lib.berkeley.edu/calheritage/ucb/cook/figures/I0049644A.jpg">Source</a>/<a href="http://digitalassets.lib.berkeley.edu/calheritage/ucb/cook/figures/I0049646A.jpg">Source</a></figcaption></figure><p>There was just one problem.</p><blockquote>…which can hardly be achieved until these barriers are removed by means of tunnels through the intervening hills.</blockquote><p>Church Street was steep as hell.</p><p>It was a weird time for public transit. Cable cars could traverse hills, but they were already obsolete: cramped, slow, dangerous, expensive. Buses that conquer those hills today with relative ease were not quite ready yet. And streetcars, the preferred mode of public transportation, came with heavy bodies and slippery wheels that couldn’t handle the 14.4% climb of the Church Street block that gave Dolores Park such beautiful views — let alone the 19.3% ascent two blocks later, followed by an immediate roller-coaster-like drop.</p><p>And so, Bion J. Arnold went full Robert Moses. He proposed cutting a trench inside a park to create a new street, then continue that street through <em>a bunch of existing buildings</em>, and then — when the going got really rough — put that street inside a popular solution <em>du jour: </em>a tunnel.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/688/1*IZZxoZs41qadZyqniBLWoA.jpeg" /><figcaption><a href="https://archive.org/details/reportonimprovem1913arno/page/278">Source</a></figcaption></figure><p>But the Board of Supervisors was not impressed. This felt like an expensive, drastic incision, with half of its immense cost swallowed by land acquisition from property owners. The Twin Peaks and Sunset tunnels, cutting through some of San Francisco’s biggest hills, seemed unavoidable. This one felt like overkill.</p><p>The city solicited other ideas, and a dozen ideas came. One suggested building a viaduct connecting nearby streets. Another one cutting off the top of the hill — somehow — to reduce the incline. Someone came up with an awkward cable assist proposal, or a battery of few small bridges. All of these solutions were eventually discarded, but they all needed to be looked at, and that took a long time: out of all the planned new lines, J was the only one that failed to be ready in time for the Panama–Pacific International Exposition of 1915. The press reported with exasperation that “another scheme for disputed railway bobs up to cause still further delay.” The official, usually dispassionate reports mentioned “considerable useless and costly conflict.”</p><p>The eventual solution to the J problem was surprising and ingenious. It was revisiting Arnold’s original idea, but multiplying it by a simple realization: a streetcar can still be a streetcar even without a street.</p><p>A narrower cut through Dolores Park for two streetcar tracks alone — no pedestrians, no cars — would be cheaper and wouldn’t compromise the park nearly as much. And for the next two blocks, having its own tracks meant the streetcar could snake through the buildings in a more complex way that would allow to smooth the grade, reduce the need for too much of eminent domain, and avoid the expensive tunnel. One solitary turn was now what seemed like a dozen, but the wavy route would not be any less safe given a streetcar is glued to the tracks and doesn’t share them with anyone else — and the whole project would be much cheaper.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Astj-9YtQ5YHIGHIy1M22Q.jpeg" /></figure><p>After years of frustrations, everything worked out beautifully.</p><p>The map on the left shows four blocks where the route otherwise shooting straight down Church Street moves inland: the two blocks between 18th and 20th Street through the edge of Mission Park in its own cut, and the next two blocks with the streetcar snaking through people’s backyards.</p><p>(You can also see the beginning of Twin Peaks tunnel and the Eureka Station in the upper left corner, and the Sunset Tunnel — then called Duboce Tunnel — some blocks above it.)</p><p>The work to lay tracks started in 1916:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*17_ry0_LVCcs8ZdkrXi6Fg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*AGra4hN11_DMev5J4V8o5w.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.01108.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp36.01182.jpg">Source</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*R2RTrZd4fjAhh9d4_xI9Wg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*VM1gmaan-J-xjWCrxy4sZA.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp36.01181.jpg">Source</a> · <a href="http://opensfhistory.org/Display/wnp15.479.jpg">Source</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DD2SKyC_fBnrTGDvux8Xsw.jpeg" /></figure><p>The two construction snapshots below give a hint how beautiful the ride would eventually be. They also show a small footbridge that replaced the street running through the park.</p><p>And below that bridge, a few platforms and staircases were added to create a picturesque stop, right next to where 19th Street met Church.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AV0QepWSj3v_NyFw6vH6ig.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IfIicdV-H3zLpfVLvXH4FQ.jpeg" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=0&amp;_bqH=eJxtT9tKAzEQ_Zruc0pZtAt5SDMxDHYTyWVlnwYtgrC1FLdW8eudLEUX9TxMziUnYezp8GHzfT5.Xgu92.fh_XC2Iz0OY26WTS1EsxSMBgmillnUq6tVhRRBJbOoN227qEHODIBiAMysnlHMcrJtflfN36r5v6ox9dNnieNCtM8uhZ4w.iJ9QOM4Q..KxEjBbI2KBi7ybq6jD0kG5W6raTlSDuSJeY4mEAIvy9DrboBzOr68DRx1GFJWW1LWON2XSxXpDSE_zNULzd803PzQtlClkxyfHl53z1U3te00dZlfHFBxVA--&amp;GI_ID=">Photo courtesy SFMTA</a> · <a href="https://sfmta.photoshelter.com/image?&amp;_bqG=0&amp;_bqH=eJxtj1trwzAMhX9N85wuZLCAH1xLLWKJ3fmS4SexhZVBGZTu9vdnhbKFbXqQv3PkY6Ppc0oHuOMtnHWfaT.ZoTmlx5AO1K27tq67dV2qI4Zg1H3dNFfXFXEAHXHVboZh1YJaGABiACysXEpMOYuNv6P4N4r_Rw3FPH8Wy1jAuGSjz0zBiXSe0JYZOSuSAnvsUQeEi9wvdXA.Kq_tbTUvx9qCeiucAnomUEkWNzfjET7i6eX9WEYj.Zh0z3qH1mS5VLHZMJWHS_SC6Rv99gcHQW2ien16OE_P1Tind3M30r8AkW9wRw--&amp;GI_ID=">Photo courtesy SFMTA</a></figcaption></figure><p>At the opening, on August 11, 1917, three years later than anticipated — please insert your favourite joke about J line never being on time — mayor Rolph boasted about the new streetcar going through “the new Mission, the most prosperous section of San Francisco.” (He also mentioned the Twin Peaks tunnel less than a year away from completion.)</p><p>He then jumped into a J streetcar to take it for its first spin. Among the route, the 19th Street Dolores Park Stop was the perfect place for thousands of people to come and check out the inauguration — with the only exception apparently being a guy walking away unimpressed.</p><p>(It turns out, there’s always a guy.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZOajuhdtbLzB83sWDa8pMQ.jpeg" /></figure><p>But disinterest seemed rare. Finally, a brutally hilly area was conveniently connected to downtown. Many years later, in 1981, a reader of San Francisco Examiner/Chronicle reminisced the first actual ride:</p><blockquote>I lived in a flat at the corner of 30th and Church Street, and I sat in the window with my infant son on my lap — he is now sixty-four years old — and waited for the approach of the first J-car. Eventually it came, crowded with City Hall Executives, a small band, and Mayor Jimmie Rolph at the controls.</blockquote><p>If it was a nice stop during its opening, unique and old-fashioned, the 19th Street stop only grew more beautiful as the trees made themselves welcome around it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XylW4_mFBh4MjeJ9DlXpyA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mGMdMclXfDNu-r4efJqDrQ.jpeg" /><figcaption><a href="https://sfmta.photoshelter.com/image?&amp;_bqG=0&amp;_bqH=eJxtj91OwzAMhZ9mvc5KC6JSLtLYTBZtwpK0UG4iNCEhVRNj40d7e.JqgorhC.c7xzmJvMu3x8vHWrTN8eqwL8a3df7g11.vXm.qZVUKUS1FqooieC3vxUWRFxlFDyrgoqzbdlGCnBkAbADMrCEVm3wmG_9G8TyK_0c1hWH6LKQxg7adCW6I5C1L6whNmpE1LMlHhw0qj3CSd3PtrQvSKXObTctFZUC.J.48ukggO15cX_cjfIbd9mNMo55c6FQT1QqNHvhSFnUdKT2coifsftDd_GLLqHSQh.en_eYl66f0auqa.ze0GHBh&amp;GI_ID=">Photo courtesy SFMTA</a> · <a href="https://sfmta.photoshelter.com/image?&amp;_bqG=0&amp;_bqH=eJxNjssOgjAQRf.GdUlgAUkXtS1mIrbaFgluGh8kJgQRH038e1tC1NnMOYu5c8fmuqy3LCuH87sAIl2r3Ni7434_5HGeIpTHyE8OlmmKa5SkcRJNYolg.OmZgmmw39oQwwNQWQmjGgtaBgVtFS850ZzNuvl3qYALfwpSTClSGayIWHmuNFcWGK5CBZrtOubMrX91kaULCz7G_5.x.qIqfrgOSKjBj_ZwP10iGtI.ZHJIpg--&amp;GI_ID=">Photo courtesy SFMTA</a></figcaption></figure><p>Here are some early photos from the bottom of the hill, with the footbridge visible in the distance:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9EnI3HOAHeUxQ01DBW_liw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NoJyNVM8rk6KFxgR9fIAow.jpeg" /><figcaption>Unknown photographer · Photo by Alan J. Canterbury, August 12, 1964</figcaption></figure><p>19th Street stop might have been as simple as Eureka, but it was infinitely more attractive — and if today we can find barely two photos of the underground station, many photographers tried to capture this one’s interplay of metal, stone, nature, and buildings in the distance:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*RBvG0GEVNect2TnuumtSVg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Twba4xl2sLUnF8U-JIPdEQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*w3EViuxgxlWg0uVg1u2vhw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp67.0782.jpg">Source</a></figcaption></figure><p>A few photos captured kids playing around and even “nipping the fender,” as the daring/dangerous practice of hitching a ride on the back of the streetcar was once known.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*2s7PhapBZAiBxuEgN1t6KQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/743/1*g-GsRRflFt-O8Bbb-bv7yw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*Ry6MDkutXWayk_EWssrMmQ.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp14.1630.jpg">Source</a> · <a href="https://sfmta.photoshelter.com/gallery-image/J-Church/G0000dNrnz3Atzm0/I0000nzTIFQ8d2KQ/C00001T4YTtxFMnU">Photo courtesy SFMTA</a> · <a href="http://opensfhistory.org/Display/wnp27.2643.jpg">Source</a></figcaption></figure><p>“A streetcar track runs along one side of the park, under a bridge, giving the park the feel of a quaint model-train layout,” mentioned one article, and many photographers found that hard to disagree with — particularly as the park was often desolate, far away from the extreme popularity it sees in present days:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*HYTBLYhNKHkjRhznXbktnw.jpeg" /><figcaption><a href="http://opensfhistory.org/Display/wnp25.2192.jpg">Source</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ycqAcBAt-3uCAMl2sfaFXw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*oCrb7zgv3kLSvucHnJFj0w.jpeg" /><figcaption>Unknown photographer · <a href="http://opensfhistory.org/Display/wnp25.0313.jpg">Source</a></figcaption></figure><p>The 19th Street Dolores Park Stop was so beautiful it even made it onto the cover of a brochure in 1976, with two PCC streetcars portrayed almost as if enjoying a secret <em>rendez-vous:</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FSly6B2kdk9Mdly3qnbtjA.jpeg" /><figcaption>Scan courtesy <a href="https://www.flickr.com/photos/walkingsf/4257323915/">Eric Fischer</a>. You can also <a href="https://sfmta.photoshelter.com/gallery-image/J-Church/G0000dNrnz3Atzm0/I0000Kc2tFDx6LMM/C00001T4YTtxFMnU">see the original photo taken by Ken Snodgrass on the SFMTA website</a>.</figcaption></figure><p>But just like Eureka Station’s new coat of paint was the beginning of the end, so this photo was the last moment of glory for the 19th Street Dolores Park stop.</p><p>As far as I can tell, the stop was removed from service in 1981 under circumstances mirroring Eureka — the J, late as usual, was the last letter line to finally upgrade to light rail vehicles. But the exact reasons are unclear to me. Perhaps it was trying to make the line faster by removing stops (after all, the J line has two nearby stops in the corners of the park). Perhaps to avoid maintenance costs of an underused stop. Perhaps the platforms were too short or otherwise inadequate for the new service.</p><p>Either way, some time in the 1980s, the scenic “backyard streetcar” — now a backyard light rail vehicle — started going from 18th Street straight to the <a href="https://www.atlasobscura.com/places/the-golden-fire-hydrant-san-francisco-california">Golden Fire Hydrant</a>. The 19th Street Dolores Park stop was no more.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WXCWA1Ydc1OuAOF7fegCKg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*WofeMv-nkfAAhZUA27vmlA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*fgJh3mMpqFwmCu_29VAqCg.jpeg" /></figure><p>But there was one more reason that likely contributed to the closure — and it’s the same reason few people mourned Eureka Station in 1972. It was safety.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/784/1*Ke-v3s267Kny8LJyyAXCYQ.png" /><figcaption>A sensational article in <a href="https://infoweb.newsbank.com/resources/doc/nb/image/page/v2%3A142051F45F422A02%40EANX-NB-14FA9AEB0C377C7A%402426294-14FA923D387A227D%400?p=EANX-NB&amp;drefer=image%2Fv2%3A142051F45F422A02%40EANX-NB-14FA9AEB0C377C7A%402426294-14FA923D387A227D%400-14FA923D387A227D%40">S.F. Chronicle from November 13, 1930</a></figcaption></figure><p>Yes, both stations saw their fair share of transit accidents.</p><p>In the 1930s, at Eureka Station, an K streetcar crashed into the L streetcar in front of it because of what seems like an unbelievable reason: the driver of the L started backing up to retrieve a 50¢ coin lost by a passenger.</p><p>In 1996, a towed streetcar detached atop Dolores Park and ran away downhill, crashing into parked cars. Just a few months later, a J light rail vehicle <a href="https://www.sfgate.com/news/article/New-Muni-Railcars-Jump-Track-Crash-3-Workers-2834331.php">jumped the tracks</a>, immediately causing millions of dollars in damage.</p><p>But transit accidents happen all over the city. What joined both stations was concerns about <em>personal</em> safety.</p><p>Remember that brightly lit photo of Eureka Station with a lone streetcar above? The blurry doors betray that it was an unusually long exposure. In reality, the station was dim, and the dogleg staircases created perfect spots for thieves to hide — or even throw people down the stairs. “It was a haven for muggers and rapists, a place as dangerous as any in the city,” mentioned a 1980 article, quoting one of the people living nearby as saying “It was worth your life to go in there alone.”</p><p>19th Street Dolores Park stop also felt unsafe — its sunken location and stair access made it in many ways similar to a small underground station. In one particularly tragic event in 1961, a 27-year-old teacher, William Hall, was assaulted by three teenagers who beat him into semi-unconsciousness and left on the track in the way of an incoming streetcar. The streetcar failed to stop in time, and Hall died before he could be removed from under the vehicle. (The assailants, motivated by homophobia, were eventually found guilty and convicted of first-degree murder.)</p><p>And while Eureka Station could be thoroughly removed from public presence, the aboveground 19th Street Dolores Park stop still exists. Even just a year ago, the San Francisco Chronicle reported that “numerous residents” called the bridge “a magnet for criminal activity and homeless encampments.” Here and there, suggestions arise to <a href="https://uptownalmanac.com/2011/07/city-looking-demolish-old-dolores-park-muni-stop">remove the bridge and the disused stop altogether</a>.</p><p>I took to aerial photos to look at the J line as it was then, and as it is today. Compared to the former terminus of Market Street, here it seemed not much has changed, and how! In a beautiful bit of historical symmetry, even the two light rail vehicles in the 2018 photos appeared in the exact same spots as their predecessors in 1938 — by the entrance and the exit of the four blocks where the streetcar said good-bye to the street — as if passing a baton through eight decades.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kIgKALitnyekeqS3nOe-4A.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1EclCymJTMnULR_5nL39tw.jpeg" /><figcaption>First photo 1938 (<a href="https://www.davidrumsey.com/blog/2011/10/24/san-francisco-aerial-photographs-1938">David Rumsey Map Collection</a>), second photo 2018 (Apple Maps)</figcaption></figure><p>But I had another option that Eureka Station didn’t give me — I could go and see the 19th Street stop myself.</p><p>I did it just a few days ago. Like any lazy person, I started from the top of the hill, on 22nd Street, peeking into all the secret streetcar spaces I wasn’t allowed to see, admiring nary a straight line in sight:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kWwBiZZ_Q56Zif7AV_xIHw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Ykb9m3d5Ay6e7nMcSjJdQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2w_p0eMB4TqiuT7aKc1-1Q.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OjtqWRUHKlnXH34zf4mUgA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QevnksLQPBQCMOY0GKPBIw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SJ4WnBHwpN_oxjUkVhzC5Q.jpeg" /></figure><p>I saw a great visual confirmation of how important it was to flatten the streetcar route, rather than sending it straight up the hill:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WJJ8A8ZgJqgAPURUTh2Eiw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SuRxsdiELltpmkxEcbK5OQ.jpeg" /></figure><p>Two blocks down, I entered Dolores Park, beautiful even on a gloomy winter day, the view making it immediately obvious why people fell in love with it then, and still enjoyed it today. Indeed, even the boxy modern light railway vehicles still felt a bit like model trains.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6b3UQO02KcepDYJb3dqEhg.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mat9Nga7735W5DUU_lkRzQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VZQkyW_i-s60UXwRocAjVg.jpeg" /></figure><p>But the abandoned 19th Street stop itself, the very place that once saw thousands cheering the mayor behind the (figurative) wheel, wasn’t particularly picturesque or welcoming.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Wt3o0RGJa0l-yOOHUBVY0w.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4fbn_O7TsoZXhP-M7v1fMg.jpeg" /></figure><p>Instead, it was rather honest in showing me some of what I understand are Dolores Park’s — and maybe even the <em>city’s </em>— biggest problems.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gyNAkFFSZtOMJT8j-VURMQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_cPqrKctTFzOc4NTIEEAwA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Il5fLcNb014ieyngw8W1EQ.jpeg" /><figcaption><a href="https://www.google.com/maps/@37.7597234,-122.4282926,3a,75y,87.47h,91.38t/data=!3m7!1e1!3m5!1suJ85MFFi0Kxb6WlUXBeekA!2e0!6s%2F%2Fgeo0.ggpht.com%2Fcbk%3Fpanoid%3DuJ85MFFi0Kxb6WlUXBeekA%26output%3Dthumbnail%26cb_client%3Dmaps_sv.tactile.gps%26thumb%3D2%26w%3D203%26h%3D100%26yaw%3D135.08136%26pitch%3D0%26thumbfov%3D100!7i16384!8i8192">See yourself on Street View</a></figcaption></figure><p>I didn’t plan to stay very long either way. There was one more stop for me, right where we started: a house on 17th Street, somewhere in between the ghosts of Eureka Station and the Dolores Park stop. Remember the four-story residential building from the beginning of this story, sacrificed to the extension of Market Street even before it turned ten? I learned later that it wasn’t demolished, but <a href="https://www.google.com/maps/@37.7625799,-122.4342822,3a,75y,173.79h,102.57t/data=!3m6!1e1!3m4!1su23WQYzm2hfGNtapJXQ1bg!2e0!7i13312!8i6656"><em>moved</em></a><em>, </em>a century ago — and I simply wanted to see how it was doing, perhaps starting an altogether new adventure.</p><p>But I couldn’t help myself. I turned around for the last time, and tried to imagine the 19th Dolores Park Stop’s in its idealized best moment of existence, one summer day long ago, shrubbery covering its arch, a gorgeous PCC streetcar climbing the magnificent hill that once confounded so many.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eHqQ-jOToJT7ThRlsoe5uA.jpeg" /><figcaption>19th Street Dolores Park stop in June 1971. (<a href="https://www.flickr.com/photos/chris-cf/8715129931">Photo courtesy Christopher Cirrincione</a>)</figcaption></figure><p>I’m glad I did this all in this order. That I spent time in libraries and online figuring out as much as I could about Eureka Station and 19th Street Dolores Park stop, before visiting them properly for the first time.</p><p>It’s possible — of course — to check out a ghost station, an abandoned building, a half-realized urban plan, and enjoy them without much introduction. Decay can be attractive. Nostalgia, even for times you haven’t yourself witnessed, potent. There is certain universal awe in how infrastructure gets a free pass: its end of life doesn’t automatically mean death.</p><p>But those two ghost stations were no longer just the above. I saw them as stories of how San Francisco felt exactly a hundred years ago, of city planners trying to wrangle the city’s complex topography, of grandiose plans gone awry and adjusted, and adjusted, and adjusted again. The fact that both stations were simple and unglamorous made this all feel even more special. It was so easy to ride past them and never even notice. But I knew now they existed, I knew where to look for them, and I knew a way to see them as neither “they don’t make them like they used to,” nor “a place as dangerous as any in the city,” but <em>both</em> — and so much more — at the same time.</p><p>And now, I hope, you do too.</p><p><em>If you liked this, I also wrote about </em><a href="https://medium.com/urban-explorations/mr-phelans-building-839fe6441405"><em>The Phelan Building</em></a><em>, </em><a href="https://medium.com/urban-explorations/the-yard-610ad90849d0"><em>Muni Kirkland bus yard</em></a><em>, </em><a href="https://medium.com/urban-explorations/the-palace-d5c2227b21a3"><em>Paramount Theatre in Oakland</em></a><em>, </em><a href="https://medium.com/urban-explorations/artificial-pt-3-bce6d7404a19"><em>The Embarcadero Center</em></a><em>, </em><a href="https://medium.com/urban-explorations/the-granite-lady-5cd5f2d30d5e"><em>The Old Mint</em></a><em>, </em><a href="https://medium.com/urban-explorations/six-seasons-and-counting-a86b1bbdb6c9"><em>The High Line</em></a><em>, bridges in </em><a href="https://medium.com/urban-explorations/seesaws-for-giants-27bf86035302"><em>Chicago</em></a><em> and </em><a href="https://medium.com/urban-explorations/a-bridge-too-far-8164847fbe1d"><em>New York</em></a><em>, </em><a href="https://medium.com/urban-explorations/the-other-golden-gate-bridges-28e8512b1a08"><em>The Golden Gate Bridge</em></a><em>, and </em><a href="https://medium.com/re-form/in-the-footsteps-of-robert-moses-2780ee00a648"><em>a road trip following Robert Moses’s footsteps</em></a><em>.</em></p><p><em>More info on Eureka Station: </em><a href="https://www.sfchronicle.com/bayarea/article/SF-Muni-Metro-s-ghost-station-at-darkened-12511934.php"><em>SF Chronicle</em></a><em>, </em><a href="https://sf.curbed.com/2014/2/14/10143304/the-buried-and-abandoned-eureka-valley-station"><em>Curbed</em></a><em>, </em><a href="https://www.sfmta.com/blog/haunted-muni"><em>SFMTA</em></a><em>, </em><a href="https://www.sfmta.com/blog/video-dive-deep-munis-only-ghost-station"><em>SFMTA</em></a><em>, </em><a href="http://www.outsidelands.org/twin-peaks-tunnel.php"><em>OutsideLands</em></a><em>, </em><a href="http://www.outsidelands.org/cgi-bin/mboard/stories2/thread.cgi?1282,0#msgtitle"><em>OutsideLands</em></a><em>, </em><a href="https://www.youtube.com/watch?v=GNUHsj27Xx0"><em>YouTube/SFMTA,</em></a><em> </em><a href="https://www.youtube.com/watch?v=nuhwRjr_B3A"><em>YouTube/KRON</em></a><em>.</em></p><p><em>Main sources of research: </em><a href="https://sfpl.org/?pg=0200002501"><em>San Francisco History Center</em></a><em> in person (photos, books, ephemera), </em><a href="https://www.flickr.com/photos/walkingsf/albums/72157622518464203"><em>Eric Fischer’s archive</em></a><em> online, </em><a href="https://infoweb-newsbank-com.ezproxy.sfpl.org/resources/?p=EANX-NB"><em>SF Chronicle/Examiner archive</em></a><em> online (SFPL library card needed), </em><a href="https://www.davidrumsey.com/"><em>David Rumsey Historical Map collection</em></a><em> online, </em><a href="http://opensfhistory.org/"><em>Open SF History</em></a><em> online, </em><a href="https://sfmta.photoshelter.com/"><em>SFMTA Photo Archive</em></a><em> online, </em><a href="http://www.prelingerlibrary.org/home/"><em>Prelinger Library</em></a><em> in person, Mr. Therkelson’s collection in person.</em></p><p><em>Massive thank you to </em><a href="https://medium.com/u/debb31d563e6"><em>Eric Fischer</em></a><em> for reviewing this article, and forwarding multiple sources. Thank you to Devin Smith, Matt Braithwaite, and </em><a href="http://www.outsidelands.org/"><em>Western Neighborhoods Project</em></a><em> (who </em><a href="https://twitter.com/outsidelandz/status/1069828266259701762"><em>forwarded me a photo that started this entire project</em></a><em>). Additional appreciation to </em><a href="https://www.flickr.com/photos/milantram"><em>Peter Ehrlich</em></a><em>, </em><a href="https://www.flickr.com/photos/chris-cf/"><em>Christopher Cirrincione</em></a><em>, and </em><a href="https://sfmta.photoshelter.com/"><em>SFMTA Photo Archive</em></a><em> for allowing me to use their photos.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=554adf9590a9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The rectangle behind you: Follow along and up]]></title>
            <link>https://mwichary.medium.com/the-rectangle-behind-you-follow-along-and-up-460005e1daa4?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/460005e1daa4</guid>
            <category><![CDATA[the-rectangle-behind-you]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Tue, 20 Nov 2018 20:23:41 GMT</pubDate>
            <atom:updated>2018-11-20T20:23:41.080Z</atom:updated>
            <content:encoded><![CDATA[<h4>The rectangle behind you</h4><h3><strong>Follow along and up</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p>I crave follow-ups. When I was little, I loved opening the encyclopedia to learn more about something I just heard — particularly when it felt the volumes were roughly as big as I was. Later on, I cherished coming back from the movie just to read Roger Ebert’s review, or ⌘+clicking every link in the young Wikipedia.</p><p>Today, I still like looking up a newly-discovered word in a dictionary, an obscure product on Internet Archive, or a historical event on Google. In the middle of a conversation, you might find me scribbling something down to look up myself — or to send you later. When I worked <a href="https://medium.design/crafting-link-underlines-on-medium-7c03a9274f9">on Medium underlines</a>, part of my excitement of it was just working on <em>better linking.</em></p><p>And I’ve always dreamed of creating a “link” that would work when I delivered talks.</p><p>Yes, as an audience member, you can easily write down something I’m saying to look it up later. But the act of jotting might be distracting and — more importantly — the best links to find are not always the first results Google spits out.</p><p>But <em>I</em>, the speaker, know all the links! If I do my job right and prepare for the talk, I am aware of exactly the obscure pages and documents you should check out if you want to dig deeper… and yet, there is no obvious way for me to give them to you.</p><h3><strong>The idea</strong></h3><p>My idea was to create a small talk companion: a web app you could open on any device you have, at any moment during the talk. During my talk, the app would slowly reveal new topics I brought up, and allow you to say “I’m interested in this! I would love to know even more” by simply tapping on a topic — in effect bookmarking it for the very near future.</p><p>The only remaining thing would be to provide your email address. And then, some time after the talk ended, you would get a perfectly curated follow-up email with more high-quality links about the things you expressed interest in — and only them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8UHnecQqVDLHU61-RHx2vw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oseuKIIePmf02Hwfq6wUlA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PdUiHMAU6XxHr8wfIOhv-Q.png" /></figure><h3><strong>Preparations</strong></h3><p>I built and tested a rudimentary version of this idea recently for my Beyond Tellerrand talk about <a href="https://www.youtube.com/watch?v=3u22w2t0DV4">fun and keyboards</a>.</p><p>I started by looking at my slides and grouping them into topics. I ended up with 20 of them: the evolution of typewriters, ATASCII movies, overtyping, semigraphics, and so on. Here are the first five, matched with the slides:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rjn4g6w17THKV5x_4pLqmw.png" /></figure><p>I then created a little follow-up block of text for each section. Each topic contained anything from one to five links: sometimes they would point to obvious things like Wikipedia, sometimes to rare Internet Archive books, sometimes to Medium posts I made just for this occasion. Either way, each one would be the best possible companion to a given topic, for example:</p><blockquote><strong><em>How do mechanical typewriters work?</em></strong></blockquote><blockquote><em>A nice Olivetti manual explaining different parts of a typewriter: </em><a href="http://machinesoflovinggrace.com/manuals/OlivettiLettera22Manual.pdf"><em>http://machinesoflovinggrace.com/manuals/OlivettiLettera22Manual.pdf</em></a></blockquote><blockquote><em>For comparison, here’s a much older one: </em><a href="https://archive.org/details/TheBookOfTheNewCentury"><em>https://archive.org/details/TheBookOfTheNewCentury</em></a></blockquote><blockquote><em>A fantastic book about the insides of a typewriter: </em><a href="https://archive.org/details/MechanicalDevicesOfTheTypewriter"><em>https://archive.org/details/MechanicalDevicesOfTheTypewriter</em></a></blockquote><p>Then I added a way for my slide deck to communicate its progress with a custom simple Node server (I hosted it on <a href="https://www.dreamhost.com/">DreamHost</a>, although I bet there are many other options).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tiWIKboLWgDHVwI7SiY5Sw.png" /><figcaption>Each card had a different URL, but that wasn’t strictly necessary</figcaption></figure><p>Before my talk, on every seat, we put out URLs and QR codes for the second component: the companion app. Before or during (or even after) the talk, anyone in the audience could open the app to “follow along.”</p><p>The app would talk to the server as well (<em>via</em> Websockets), and receive any new topics I just revealed. It would also allow people to tap on the topics they were interested in, and save that information back so that eventually a proper email could be sent.</p><p>The design goal was for the companion app to provide a distraction-free experience (after all, fiddling with the UI as I was speaking would go against the whole idea). That meant two things: UI simplicity, and high robustness.</p><p>In the visible UI department, the app needed just one tap on a topic to express interest. You could also enter your email address at any point, before, during, or after the talk. Everything you did was saved automatically and silently… and that was it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Y5GnW0pn_kaCZqvYSLopkg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e-S2P0QrjY_EMY0ueKx-ng.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2cR7PtXhxD7SU_b25SAFOw.png" /></figure><p>Once I started talking about a new topic, it would appear at the top, like in a chat. This made saying “I want to know more about what he’s talking about right now” — likely the most common use case — to be always in a consistent place under your finger. And, if the new topic arrived as you were looking at the page, it would slide in and animate slowly, making it harder to tap on something wrong by accident.</p><p>A lot more stuff happened behind the scenes. I was worried about wi-fi failing, and I anticipated people jumping in and out as the talk went along. And so, saving was silent and automatic… but if the connection was spotty, you’d get an error message warning you — and you didn’t have to do anything, as the app would continue trying to reconnect in the background (with <a href="https://en.wikipedia.org/wiki/Exponential_backoff">exponential backoff</a>). A bunch of code was also dedicated to saving the data in local storage so that reloading the page would never lose any data.</p><p>At any given moment you could also input your email… and the app would warn you if you started selecting topics without providing the email address.</p><blockquote>You can play with <a href="https://aresluna.org/bt-2018-talk-companion-simulator/">the simulation of the companion</a>. It is not synced to the server in any way. Rather, it pretend the talk starts 5 seconds after you load the page, and each topic takes 4 seconds.</blockquote><blockquote>And, here is <a href="https://medium.com/@mwichary/an-example-email-if-you-selected-all-the-topics-5d784ed40e8a">an example of the email you’d have gotten</a> if you selected all the topics.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2DAQIxGRrjYHUr8YupG6yw.png" /></figure><h3><strong>The outcome</strong></h3><p>Did it all work? I <em>think</em> so.</p><p>About 100 people (out of the ~450 in the audience) provided their email address, and eventually got a follow-up email. (This was an <a href="https://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a>, so I sent the emails myself one by one, after writing the script that helped me put them together them).</p><p>I didn’t track the open rate on the emails, and didn’t embellish the URLs so that I could see how many of them were eventually opened. Those would be improvements for a future edition — although, to be honest, I hate the interim URLs in newsletters as they obfuscate the destination.</p><p>The most the experiment failed so far was in the UI department: I made saving <em>too </em>smooth and people were confused whether their choices were actually being sent to the server. (One way to solve it would be either to provide an explicit Saving/Saved UI, or arrange the UI to look more like a form with an explicit Submit button.)</p><p>I plan to continue working on this and report back. If you’ve done or will do something similar, please <a href="https://aresluna.org/">let me know</a>. I won’t mind sharing my code, either, if you’re interested.</p><p>(I have previously worked on a different type of a talk companion — <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-an-interactive-talk-companion-189fdbcd244c">one that would allow you to see the slides in real time and save or tweet them</a>. This feels better, rewarding longer-term interest over short-term reactions.)</p><p>And either way, once you have a talk companion built, you can also allow the audience to send <em>you</em> something… but that’s a whole different story.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p><em>This was part of </em><a href="https://medium.com/p/103179fcfc32/"><em>The rectangle behind you</em></a><em>, a series of articles about interactive presentations.</em></p><p><em>By Marcin Wichary (@</em><a href="https://twitter.com/@mwichary"><em>mwichary</em></a><em>)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=460005e1daa4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The rectangle behind you: Choose your own (secret) adventure]]></title>
            <link>https://mwichary.medium.com/the-rectangle-behind-you-choose-your-own-secret-adventure-d357a0298aad?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/d357a0298aad</guid>
            <category><![CDATA[the-rectangle-behind-you]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Tue, 20 Nov 2018 20:23:30 GMT</pubDate>
            <atom:updated>2018-11-20T20:23:30.276Z</atom:updated>
            <content:encoded><![CDATA[<h4>The rectangle behind you</h4><h3><strong>Choose your own (secret) adventure</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p>As a grandson of someone who worked on the railways I might be predisposed to extreme punctuality, but as a speaker it’d my job to be timely either way. Going over your time limit in a talk is unprofessional and disrespectful towards the organizers and — more importantly — the audience.</p><p>Practice makes better. However, recently, for my Beyond Tellerrand talk about <a href="https://www.youtube.com/watch?v=3u22w2t0DV4">creative uses of keyboards</a>, that would not be enough. I wanted to try out a brand-new experimental exercise with audience participation… but I had no idea how long it was going to take. It was not something I had experience with, or something I could easily test beforehand.</p><p>What’s even worse, the exercise was highly dependent on good wi-fi and my code being bug-free, and those two are always in question. It was possible that I would skip the entire interactive portion altogether… but then I had to do something else during the suddenly empty time.</p><p>This situation was too complex for the simple <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-skip-slides-and-bonus-slides-4493ad863f55">“I’m running out of time” mode</a> I tried out earlier, which allowed to quietly skip or show certain slides. I decided to design my talk as a “choose your own adventure” scenario — a bunch of possible pathways, from which I would choose just one… and the audience would never know others were even an option.</p><p>There were a bunch of pathways, ranging from “the audience part went so well we’re going to do it again” to “the audience part fails miserably and we jump into a special-made section that talks about failures” to “I already know it’s not going to work, so I will just never attempt this.” Here’s the entire chart, with black squares denoting decision points:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sB6_85vhDfvLQqWmxzlhvw.png" /></figure><p>How was I supposed to choose my pathway as I was speaking? I went for the same cheap UI I’ve already tried before: <a href="https://medium.com/the-rectangle-behind-you/the-rectangle-behind-you-the-cheapest-invisible-ui-4422934468ff">the keyboard attached to the presenter’s laptop</a>.</p><p>At the boundaries of each section, I blocked the arrow keys from being able to navigate forwards or backwards, so that jumping to each section was always a deliberate decision. And then I gave each section a secret keyboard shortcut — Shift+Ctrl+1, Shift+Ctrl+2, and so on — wrote myself a cheat sheet, and taped it onto my computer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4kjEZZeSCPerkJHB-gkvvQ.jpeg" /></figure><p>This worked well, and — <a href="https://www.youtube.com/watch?v=3u22w2t0DV4">if you watch the video</a> — you will notice that there’s never any hint of me choosing a section, or quickly advancing through slides in a way that’s never too pleasant for the audience.</p><p>Alas, of all the scenarios I planned, I had to execute the “I already know it’s not going to work, so I will just never attempt this.” The interactive portion had a bug I only learned of minutes before the talk… so I could not fix it in time.</p><p>But the strategy proved itself: The only person knowing anything failed was me.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*ECmLaMOnLgSMuTaVj5FIOg@2x.png" /></figure><p><em>This was part of </em><a href="https://medium.com/p/103179fcfc32/"><em>The rectangle behind you</em></a><em>, a series of articles about interactive presentations.</em></p><p><em>By Marcin Wichary (@</em><a href="https://twitter.com/@mwichary"><em>mwichary</em></a><em>)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d357a0298aad" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Figma’s new finger tips]]></title>
            <link>https://medium.com/figma-design/figmas-new-finger-tips-b463bfdf14d7?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/b463bfdf14d7</guid>
            <category><![CDATA[product]]></category>
            <category><![CDATA[ui]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Wed, 10 Oct 2018 15:35:21 GMT</pubDate>
            <atom:updated>2018-10-12T03:09:19.312Z</atom:updated>
            <content:encoded><![CDATA[<h4>How Doug Engelbart’s famous demo inspired a designer’s lifelong obsession with keyboard shortcuts</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SIkbS8suzn1hMr0p26E8ZQ.png" /></figure><p><em>Today we introduced a new way to master keyboard shortcuts: a redesigned panel that shows up at the bottom of your Figma screen. It will respond to your behavior by highlighting patterns in your keyboard use and help you discover new key combinations in a fun way. We’ve taken our inspiration from computing pioneer Douglas Engelbart, and wanted to briefly share how his work shaped our approach. (Read to the end for the deep dive into our new keyboard panel.)</em></p><p>One Monday afternoon fifty years ago, on a stage by San Francisco’s Civic Center, computer pioneer Douglas Engelbart gave <a href="https://www.youtube.com/watch?v=yJDv-zdhzMY">a demonstration that forever altered the course of computing</a>.</p><p>At the time, computers were known to serve corporate and government needs: calculations, simulations, payroll. But Engelbart focused on something different: computers that were <em>personal</em> and could help with daily tasks<em>.</em> Collaborating with a few team members thirty miles away, he showed the audience how to write documents together, add graphics to make them better, create links between them and chat while doing it.</p><p>The session received a standing ovation and helped inspire other tech industry leaders. Some of the most significant strides in people-oriented computing that came afterward — like Apple’s first Macintosh — can be traced directly back to this demo.</p><p>But for me, just as important as the events shown on Engelbart’s screen was what was happening with his <em>hands. </em>On a custom-made tray, a traditional QWERTY keyboard was surrounded by two never-before-seen accessories: on the right, a thick box named a “mouse,” and on the left, an unusual one-handed device called a “keyset.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ckYl3oNzF7UOqkX7Uy0cZA.png" /><figcaption>Doug Engelbart used a mouse in the right hand and a keyset in the left</figcaption></figure><p>The mouse initially stole all the glory, as it felt simple and friendly. But the keyset — a cross between a keyboard and a piano — was just as fascinating. With the mouse, Engelbart could point to things; with the keyset, he could describe what to do with them. At one point, he started aiming at a word with the mouse and then — still on the way there — used his other hand to quietly key in two letters: DW (“delete word”). The word disappeared.</p><p>The alliance between two hands and two devices made Engelbart’s presentation feel like nothing less than magic, the closest to a mind-meld with a machine we’d ever witnessed — or, in words of one of the attendees, like Engelbart was “dealing lightning with both hands.”</p><p>Part of the wonder could be traced to the properties of our motor memory, which allow us to master physical actions to the point they become instinctive and subconscious. If you know a pianist or a dancer, ask them to describe their performance. They will struggle; they internalized their movements so much that they no longer even register as actions. The motor memory allows them to simply play or dance.</p><p>Engelbart applied those same properties of motor memory to computer tasks. By mastering the mouse and the chords on his keyset, he was able to operate the computer with astonishing fluidity — and his prowess with both devices was a significant part of the demo’s impact.</p><h3>What Engelbart’s demo has to do with Figma</h3><p>I can’t count how many times I’ve watched the Engelbart demo in awe. As a designer, I’ve long been fascinated by the universe of input devices — enough that I’ve decided to write a <a href="https://medium.com/@mwichary/shift-happens-5b049f5a93a8">book about the history of keyboards</a>. So when I joined forces with Figma to help with a few projects, I started thinking about not just the screen, but also the hands underneath it.</p><p>Much like Engelbart’s demo, witnessing someone really good at using Figma will feel like a miracle. They’ll traverse the canvas, restyle objects, and create new designs at a miraculous pace, without ever glancing down at their hands. Just like watching an experienced pianist or dancer, it will almost feel like a performance.</p><p>And all this happens using a setup similar to Engelbart’s: one hand on the mouse, another on the keyboard. It’s still the best combination to free your mind to engage in the state of flow<em>.</em> Let your hands do their job, and instead of thinking of the tool you’re using, think about the problems you want to solve.</p><p>But just as in 1968, one of those devices is much harder to master than the other. The mouse and its successors are easy to grab and use, even by a beginner. However, the long-gone keyset or modern keyboard shortcuts are a different story. They require practice and dedication to first explore and then commit into motor memory.</p><p>So today, we’re adding a small improvement to Figma that might help: a better keyboard shortcut panel. Before now, that part of Figma hadn’t received much love. It was hard to scan and would take over the entire screen — making it hard to learn by actually trying.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WiwAlakcrJRZp5xloQiVaA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yhN8Iq4ns7JAU_S_mW_R-Q.png" /><figcaption>The old and new keyboard panel</figcaption></figure><p>The new keyboard panel will appear underneath your canvas instead. You can summon it the same way — by clicking the question mark in the bottom right hand corner of your screen and then choosing Keyboard Shortcuts (or pressing <strong>Ctrl+Shift+?</strong>).</p><p>When you open the new panel, you can click through categories to learn new shortcuts specific to the type of work you’re doing. If you’re dealing with vectors, go straight to the shape tab to see a few power shortcuts like bending. If you — like me — usually work with fonts, head to the type section instead.</p><p>We also added a tab for some of the most rewarding combinations — those, just like the famous Engelbart demo, that come from a two-handed effort. For example, did you know holding <strong>Alt</strong> while moving the mouse around allows you to measure objects in Figma with ease?</p><p>And if you feel overwhelmed by all this, there’s one simple tab on the left hand side. It will introduce you to starter key combinations you will never want to live without, like how <strong>⌘+\</strong> takes away all of the “chrome” so you can focus on your work.</p><p>Our hope is that this new setup will make it easier to learn shortcuts and help you discover related shortcuts you never knew existed. By working on this project, I personally discovered and learned how useful <strong>Shift+2</strong> in the Zoom panel can be — it always does just the right thing to make the selection visible.</p><p>We also added one more thing: the panel will actually listen to your fingers, highlight the shortcuts you just pressed, and remember them for the future. We hope this detail will make it easier and more fun to reflect on your use of keyboard with Figma, and notice the shortcuts you never had a chance to try.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*bptSenEK-H4w24Ztz0-S3g.gif" /><figcaption>The panel will highlight shortcuts you press and remember them in the future</figcaption></figure><p>And yes, I know it feels a little silly contrasting a small improvement like this with a seminal moment in computing history known as “The Mother Of All Demos.” But even small steps are worth celebrating, particularly if they can give your motor memory a chance to shine. :·)</p><p><em>P.S. On a related note — I’ll be </em><a href="https://www.meetup.com/Figma-SF/events/255246644/?isFirstPublish=true"><em>co-hosting an Engelbart-themed bash at Figma</em></a><em> on December 9th, to celebrate the 50th anniversary of his famous presentation! </em><a href="https://www.meetup.com/Figma-SF/events/255246644/?isFirstPublish=true"><em>RSVP here</em></a><em>.</em></p><p><em>Thank you to Ryan Kaplan and Peter Herbert Barnaba for their help on this project.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b463bfdf14d7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/figma-design/figmas-new-finger-tips-b463bfdf14d7">Figma’s new finger tips</a> was originally published in <a href="https://medium.com/figma-design">Figma Design</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Dark theme in a day]]></title>
            <link>https://mwichary.medium.com/dark-theme-in-a-day-3518dde2955a?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/3518dde2955a</guid>
            <category><![CDATA[colors]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[css]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Tue, 15 May 2018 20:22:59 GMT</pubDate>
            <atom:updated>2018-05-16T23:45:02.302Z</atom:updated>
            <content:encoded><![CDATA[<h4>Using a bunch of modern CSS to create a night mode for an app</h4><p>I recently spent some time with a startup called <a href="https://kite.com/">Kite</a> to work on the typography of their tools. Among their group of smart utilities helping programmers code, the centerpiece is a native/web app named Kite Copilot that sits by your editor to lend a helping hand. It looks like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ftfw60OYkLlm7t7ZmsZAhw.png" /></figure><p>One early afternoon, a programmer using Copilot wrote to us suggesting adding a second, dark colour theme: a way to convince the app to use light text on a darker background. It made sense. The dark theme is something preferred by many programmers — indeed, a default in many modern editors like <a href="https://atom.io/">Atom</a> or <a href="https://code.visualstudio.com/?wt.mc_id=adw-brand&amp;gclid=Cj0KCQjw5-TXBRCHARIsANLixNwqQDNNMqrtO8JMknNRxQm4qO36C43gQ0p_UtDDF2VPuqzPApQFUycaAomXEALw_wcB">Visual Studio Code</a>. Right next to an editor with a dark theme, Copilot can feel like it dressed up for a wrong kind of party:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lC7PMuelEfZR3XqoAJUzBA.png" /></figure><p>I started wondering if it was possible to add a dark theme <em>that very</em> <em>afternoon, </em>promising myself that I would move on to other things the next day rain or shine, whether I finish or not.</p><p>This is a story of how a few new-ish CSS options came together like a bunch of superheroes in a summer blockbuster movie, and allowed for this project to indeed take up <em>one afternoon,</em> <em>and not much more.</em></p><h3><strong>CSS variables</strong></h3><p>I knew immediately that this project could not happen without <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables">CSS variables</a>, and I was excited to try them for the first time in native CSS (I’ve only known them before courtesy of <a href="http://lesscss.org/features/">LESS</a>). I started by turning all the existing hardcoded colors into variables, and then reducing the number of variables to the absolute minimum. It looked something like this:</p><pre><strong>Before</strong></pre><pre>.main {<br>  background-color: #eef4f7;<br>  color: #0a244d;<br>}<br>.docs {<br>  color: #0c2959;<br>}</pre><pre><strong>After</strong></pre><pre>html {<br>  --background: #eef4f7;<br>  --text-color-normal: #0a244d;<br>}</pre><pre>.main {<br>  background: var(--background);<br>  color: var(--text-color-normal);<br>}<br>.docs {<br>  color: var(--text-color-normal);<br>}</pre><p>I didn’t, however, wait to systematize everything in the light theme, and only then come up with a nightly alternative. As a matter of fact, I did the exact opposite. I created the simplest scaffolding of the second theme… and immediately enabled it. The reason for this was simple: this approach made it easier to see which colours among the dozens of CSS files (most I have never traversed before) I missed and didn’t turn into variables yet. Anything that was off was easy to spot in the increasingly darker and darker universe:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wxkfpmvu-AQ1XNppiVLB0g.png" /></figure><p>I also cleaned up a few other adjacent areas. I removed any opacity that was paired with colours, and baked the lightness into the colours themselves. I removed any alpha values (rgba), too. That made it easier for me to trust them again, since some of the half-transparent colours could become backgrounds atop other elements with other background colours, and it was impossible to predict their interaction.</p><pre><strong>Before</strong></pre><pre>.home {<br>  color: #0a244d;<br>}<br>.home__version {<br>  opacity: 0.7;<br>} </pre><pre><strong>After</strong></pre><pre>html {<br>  --text-color-normal: #0a244d;<br>  --text-color-light: #8cabd9;<br>}<br>.home {<br>  color: var(--text-color);<br>}<br>.home__version {<br>  color: var(--text-color-light);<br>}</pre><p>The only opacity I kept was for disabled UI elements — its presence was well-defined, and made things simpler.</p><p>Lastly, I also created a variable for shadows used on popovers, as I needed the shadows to be more prominent in the dark theme.</p><h3><strong>Expressing colours</strong></h3><p>Then, I took variables one tiny step further. I didn’t want to assume that the colours would always come from the Design world and the job of Engineering would only be to plug them in. There was a practical reason, too: playing with colours live by editing the file seemed like the best way to optimize the palette.</p><p>And so, in order to make everyone’s life easier (starting with my own), I moved to describing all the colours as <a href="https://css-tricks.com/yay-for-hsla/">HSL</a>:</p><pre><strong>Before</strong></pre><pre>html {<br>  --text-color-normal: #0a244d;<br>  --text-color-light: #8cabd9;<br>}</pre><pre><strong>After</strong></pre><pre>html[data-theme=&#39;dark&#39;] {<br>  --text-color-normal: hsl(210, 10%, 62%);<br>  --text-color-light: hsl(210, 15%, 35%);<br>  --text-color-richer: hsl(210, 50%, 72%);<br>  --text-color-highlight: hsl(25, 70%, 45%);<br>}</pre><p>I find HSL the most satisfying way to navigate the world of colours, the three components having clearer responsibilities than the opaque and arbitrary dials of RGB (where brightness is a complicated formula rather than just a number, and saturation is buried very deeply).</p><p>But there was another benefit: I could add secondary variables for main hues of the colour theme.</p><pre>html[data-theme=&#39;dark&#39;] {<br>  --hue: 210; <em>/* Blue */</em><br>  --accent-hue: 25; <em>/* Orange */</em></pre><pre>  --text-color-normal: hsl(var(--hue), 10%, 62%);<br>  --text-color-highlight: hsl(var(--accent-hue), 70%, 45%);<br>}</pre><p>I wanted to make it easy for the person coming after me to understand the relationships between colours. Even without the hue variables, HSL would make it easier; all the colours starting with hsl(210 would be immediately recognizable as a family. But making 210 another tightened the screws a little bit. It was my way of saying “feel free to experiment with colours, but the act of adding another hue should be an intentional one.”</p><p>Plus, changing the hue value was another way to test the integrity of the theme. Any colour not changing would mean a colour accidentally left behind:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*puFET3hME2Ir9AYwbgIyNA.png" /></figure><p>I considered going even further, expressing some colours as variations on others. But that felt like overkill here. The slightly inelegant way CSS expresses variables, combined with the need for calc() would make this CSS much less readable.</p><p>And so, this is what I ended up with:</p><pre>html[data-theme=&#39;dark&#39;] {<br>  --hue: 210; <em>/* Blue */</em><br>  --accent-hue: 25;<em> /* Orange */</em></pre><pre>  --text-color-normal: hsl(var(--hue), 10%, 62%);<br>  --text-color-light: hsl(var(--hue), 15%, 35%);<br>  --text-color-richer: hsl(var(--hue), 50%, 72%);<br>  --text-color-highlight: hsl(var(--accent-hue), 70%, 45%);</pre><pre>  --link-color: hsl(var(--hue), 90%, 70%);<br>  --accent-color: hsl(var(--accent-hue), 100%, 70%);<br>  --error-color: rgb(240, 50, 50);</pre><pre>  --button-background: hsl(var(--hue), 63%, 43%);<br>  --button-text-color: black;</pre><pre>  --background: hsl(var(--hue), 20%, 12%);<br>}</pre><h3><strong>Switching between themes</strong></h3><p>The theme was applied to a data attribute on top of &lt;html&gt;. A class would be okay, too, but in my head classes feel like checkboxes, whereas data attributes act more like radio buttons. It felt like a moot distinction at this very point — we only had two themes — but I wanted to think a bit ahead.</p><pre><strong>Definition in CSS</strong></pre><pre>html {<br>  --hue: 210; <em>/* Blue */</em><br>  --text-color-normal: hsl(var(--hue), 77%, 17%);<br>  ...<br>}</pre><pre>html[data-theme=&#39;dark&#39;] {<br>  --text-color-normal: hsl(var(--hue), 10%, 62%);<br>  ...<br>}</pre><pre><strong>Invocation in JavaScript</strong></pre><pre>document.documentElement.setAttribute(&#39;data-theme&#39;, &#39;dark&#39;)<br>document.documentElement.setAttribute(&#39;data-theme&#39;, &#39;light&#39;)</pre><p>(Note that the default theme was expressed without any qualifiers. This ensured that if something went wrong and the data attribute disappeared, things would still remain readable.)</p><p>This was perfectly functional, but switching the theme back and forth felt abrupt. This was effectively a light switch, but there was a reason I installed fade-in and fade-out light switches in all the rooms I spend significant amount of time in. And so, I installed one in Copilot’s CSS, too:</p><pre>html.color-theme-in-transition,<br>html.color-theme-in-transition *,<br>html.color-theme-in-transition *:before,<br>html.color-theme-in-transition *:after {<br>  transition: all 750ms !important;<br>  transition-delay: 0 !important;<br>}</pre><p>This class, color-theme-in-transition, effectively tells the browser “for literally <em>any style that changes from now on, </em>make it a transition.”</p><p>Applied all the time, and every incidental hover color change or transition would become a slo-mo nightmare, belonging more in a Zack Snyder movie than in a productivity tool for programmers. But if we were to add this class tactically a moment before changing the theme, and remove as soon as the transition was over, it would give us in a beautiful crossfade:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n5EzGYBTnh5twaVKqr398w.gif" /></figure><pre>document.documentElement.classList.add(&#39;color-theme-in-transition&#39;)<br>document.documentElement.setAttribute(&#39;data-theme&#39;, theme)<br>window.setTimeout(function() {<br>  document.documentElement.classList.remove(&#39;color-theme-in-transition&#39;)<br>}, 1000)</pre><p>This was possibly my favourite bit of the project, seeing different departments of CSS working together as a team. The change to the attribute made the new set of variables take over the old ones, automatically. After that, all of the new colours inside those variables would then slot themselves in all the places where they were used… but not before another department of CSS would hold them gently in place, stretching what would otherwise be a blink of an eye into a better part of second. Just one new class and one attribute change, and the complex machinery of CSS would come to life in one magically coördinated moment.</p><p>CSS often feels clunky and awkward. I can’t say I’m a fan of the way you express variables in it — it looks weird and I keep putting the double dashes in the exact wrong place. But when CSS goes, it <em>goes. </em>And in that very moment, it was fun to watch it go.</p><p>(Caveat: this worked really well in Firefox, but Chrome sometimes still struggled, transitioning some parts too late or not at all.)</p><h3><strong>Theming vector icons</strong></h3><p>The colour variables took great care of text. But then the dreaded moment came when it came to taking care of the visual elements. A bunch of iconography in Kite’s Copilot existed as vector SVGs as backgrounds:</p><pre>.sidebar__icon__settings {<br>  width: 2rem;<br>  height: 2rem;<br>  background-image: url(https://medium.com/icon-settings.svg);<br>}</pre><p>As far as I know, you can only colorize SVGs with CSS in some circumstances — when you embed them inline, or when you use them as images. But you couldn’t do it in this scenario. And without it, icons in the dark theme would look bad if not downright disappear:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AOn7_OF1dzmjeyuarQRgAA.png" /></figure><p>Fortunately, there was another way than creating two versions of all the SVG files. I could use a <em>mask</em> instead of a background:</p><pre>mask-image: url(https://medium.com/icon-refresh-white.svg);<br>mask-repeat: no-repeat;<br>mask-position: center;<br>background: blue;</pre><p>What the above bit means is “turn the entire thing blue, but then cut away everything that’s not covered by the shape of the SVG.” If the SVG has a transparent background, it works beautifully. And in that case, it did:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L-ASu3nezgkVdvw_LJRTfw.png" /></figure><p>And, to make the transition even easier, the syntax for mask and background is basically interchangeable — with things like <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background"><em>background-repeat,</em> <em>background-position, </em>and <em>background-size</em></a><em> </em>having perfect doppelgängers <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/mask">on the mask side</a>.</p><pre><strong>Before</strong></pre><pre>background-size: contain;<br>background-repeat: no-repeat;<br>background-position: center;<br>background-size: 1rem;<br>background-image: url(https://medium.com/icon-back.svg);</pre><pre><strong>After</strong></pre><pre>mask-size: contain;<br>mask-repeat: no-repeat;<br>mask-position: center;<br>mask-size: 1rem;<br>mask-image: url(https://medium.com/icon-back.svg);<br>background-color: var(--link-color);</pre><p>There are caveats, of course. You can only use a single colour this way. Plus masks, while <a href="https://caniuse.com/#feat=css-masks">supported relatively well</a>, still require to be prefixed for webkit.</p><p>Most importantly, applying a mask prevents you from doing anything else in the same element: any border, any outline, any text becomes masked away too. In a few instances I had to creatively demote the icon to a :before or :after <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::before">pseudo-element</a>, which fortunately can be masked independently of the main one.</p><p>Without this method, the project would probably stop in its tracks. The thing is I feared it was about to anyway, since there was one type of visuals standing in my way.</p><h3>Theming images</h3><p>Kite also has regular bitmapped images interspersed through some of the developer documentation. They looked something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I19P12klUjdEG4q21uKg1A.png" /></figure><p>Seeing a big rectangle of white scroll into view wasn’t just aesthetically displeasing. I imagined that while for some people a dark theme is just a visual choice, some — even many — might enable it to take a better care of their eyes. I didn’t want the theme to go 95% there, but then behave like an annoying moviegoer pulling out their smartphone on maximum brightness, and texting in the middle of the aforementioned Zack Snyder movie.</p><p>Fortunately, modern CSS saved me from redoing all the images by hand, or writing a script to process and re-save them. I could use a CSS filter to easily invert every image:</p><pre>html[data-theme=&#39;dark&#39;] img {<br>  filter: invert(100%);<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mnh0Vhu2kPhVZeqnhUVxnA.png" /></figure><p>The image didn’t look quite right, though, with completely different colours. But I remembered a trick I picked up in Photoshop years ago: Invert the image image and then rotate its hue halfway through, and the image will look much more natural. It doesn’t work so well for photos, but for any charts and diagrams it is basically flawless. Luckily, those were the kind of photos you’d encounter in Kite app.</p><p>And, luckily once again, there was also a CSS filter that allowed me to do the exact same thing automatically:</p><pre>html[data-theme=&#39;dark&#39;] img {<br>  filter: invert(100%) hue-rotate(180deg);<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-h7bSl10L1a4gFaTw5fJhw.png" /></figure><p>And then, I could go even further! Another once-photoshoppian thing is now available in CSS; using a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode">blending mode</a> I could make the visuals feel even more at home — by making its darkest pixels effectively become transparent:</p><pre>html[data-theme=&#39;dark&#39;] img {<br>  filter: invert(100%) hue-rotate(180deg);<br>  mix-blend-mode: screen;<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V3UeR0VEMro8s1VerslAoQ.png" /></figure><p>I could even bring back the blending mode to the original theme, and make that one better as well (multiply is the opposite of screen, so it’d work as well for outputting on light background). Once again, the addition of a dark theme ricocheted into improving the original one, too.</p><pre>img {<br>  mix-blend-mode: multiply;<br>}</pre><pre>html[data-theme=&#39;dark&#39;] img {<br>  filter: invert(100%) hue-rotate(180deg);<br>  mix-blend-mode: screen;<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GaWevYyeZtMkI3q9QZEz7Q.png" /></figure><p>And that was it. Those few lines of CSS made the project complete. (Depending on your needs, you could consider simply reducing the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness">brightness</a> or <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast">contrast</a> rather than inverting — both also available <em>via</em> CSS filters.)</p><h3><strong>Theming the scrollbar</strong></h3><p>Well, almost complete. If images and icons kept their bright liveries and had to darkened, we faced the opposite issue with Mac’s autohiding scrollbar — it was black (and basically invisible) even in the dark mode.</p><p>I first started by experimenting with the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/::-webkit-scrollbar">vintage Webkit scrollbar CSS values</a> and got somewhere half-decent, but we soon learned it came with a terrible price: any change to those made the scrollbars visible all the time, even if your Mac option was set to have them hidden until you scroll.</p><p>I went back to the drawing board. It turned out I didn’t need to worry about styling the scrollbar, but <em>convincing the scrollbar to style itself.</em> Mac’s scrollbar can actually turn light when needed. Except we weren’t scrolling the whole page, just a smaller element inside it, and for some reason that confused the scrollbar’s inner chameleon. Applying the background again directly to that scrollable element, even though redundant, made the scrollbar understand that it should become lighter:</p><pre>.docs-page__content {<br>  background: var(--background);<br>  overflow-y: auto;<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Y9OS0d13bV7stAlf3KvyNQ.png" /></figure><p>I also made sure that the scrollbar was glued to the edge. It’s annoying when the autohiding scrollbar sits in the middle and overlaps the content, and even more so in the dark theme. (And it makes it harder to grab if it’s <a href="https://en.wikipedia.org/wiki/Fitts%27s_law">by the edge of the screen</a>!)</p><p>The solution was as simple as taking the padding from the parent element that wrapping the scrolling content, and moving it inside the scrolling element instead:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CEosdPlUqM5rxkfDIrW97w.png" /></figure><h3><strong>A high contrast theme</strong></h3><p>I also wanted to extend this project in another direction. I added one more theme — a high contrast one:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TsnAWZe4YnWApcylf-7suA.png" /></figure><p>I will be the first to admit that this is not the best high contrast theme. Not only that: I am not even entirely sure what a good high contrast theme means. But I feel that it was important to at least start, to send the message that colours are not only about aesthetics, fashion, or comfort — to people with visual impairments, they might be the difference between being able to use the app or not.</p><p>The variables for the high contrast theme are beautiful in their simplicity…</p><pre>html[data-theme=&#39;high-contrast&#39;] {<br>  --text-color-normal: white;<br>  --text-color-light: white;<br>  --text-color-richer: white;<br>  --text-color-highlight: white;</pre><pre>  --link-color: white;<br>  --bright-color: white;<br>  --error-color: white;</pre><pre>  --button-background: white;<br>  --button-text-color: black;</pre><pre>  --background: black;<br>  --popup-background: black;<br>}</pre><p>…and the new theme also became another unexpected test for the integrity of my set of variables and how I applied them. If a high contrast theme ended up putting white text on white background — or black on black — it meant something went profoundly wrong in my thinking, and that the contrast on any of the other two themes was probably in trouble, too.</p><p>In this way, I once more experienced that tried-and-true effect: accessibility gives universally. Trying to increase accessibility doesn’t just benefit a certain group of people; it benefits <em>everybody.</em></p><p>(I do believe that a proper high contrast theme needs to have more borders and other elements for the eye to hang onto. Please let me know if you know. The one thing I changed was the shadow becoming more of a border, as demonstrated below.)</p><pre>html {<br>  --popup-shadow: 0 5px 16px rgba(0, 0, 0, .25);<br>}<br>html[data-theme=&#39;dark&#39;] {<br>  --popup-shadow: 0 5px 32px black;<br>}<br>html[data-theme=&#39;high-contrast&#39;] {<br>  --popup-shadow: 0 0 5px white, 0 0 5px white;<br>}</pre><p>That was it. I was done with the dark theme late afternoon, and I spent a few more hours over the next few days adding a couple of finishing touches and bug fixes.</p><p>I was kind of amazed that all of this could happen <em>via</em> CSS and CSS alone: the colours, the transitions, the vectors, and even the images:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q0aTFq6ZrUdO2709viz52w@2x.gif" /></figure><p>I’m curious if you have any other tricks to share? Any other new CSS properties that could come in handy? Or a different understanding of dark themes? Please respond to this post or <a href="https://twitter.com/mwichary">let me know <em>via</em> Twitter</a>.</p><p><em>Thank you to Dane Bratz at Kite for overseeing the implementation, and to </em><a href="https://medium.com/u/48357292b09c"><em>Kathy Ahn</em></a><em> for being my writing buddy for this article.</em></p><p><em>BTW Kite is hiring! I had a great time there. If you’re a designer excited about engineering — or an engineer with strong interest in design, </em><a href="https://kite.com/jobs"><em>reach out to them</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3518dde2955a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Notes after writing a long, participatory thread on Twitter]]></title>
            <link>https://mwichary.medium.com/notes-after-writing-a-long-participatory-thread-on-twitter-b6f1f302da8c?source=rss-b55535a4ac78------2</link>
            <guid isPermaLink="false">https://medium.com/p/b6f1f302da8c</guid>
            <category><![CDATA[twitter]]></category>
            <category><![CDATA[threads]]></category>
            <dc:creator><![CDATA[Marcin Wichary]]></dc:creator>
            <pubDate>Tue, 20 Feb 2018 05:44:56 GMT</pubDate>
            <atom:updated>2018-02-20T17:11:31.750Z</atom:updated>
            <content:encoded><![CDATA[<h4>(This is meant for the Twitter design team, but feel free to read and comment if you want)</h4><p>I recently wrote a 427-tweet thread that a great many people contributed to, with many wonderful replies:</p><h3>Marcin Wichary on Twitter</h3><p>Things that surprised/amazed me about Japan, an ongoing thread. (More likely UI than food, but you know this already.) It&#39;s my first time here. Please comment away and/or point out my cultural insensitivities!</p><p>It was a great deal of fun for me, and I am not sure this could’ve happened anywhere else but on Twitter. However, creating and maintaining the thread was painful, and — much more than ever before — reading and participating in it seemed also to be painful to <em>others.</em></p><p>This is a list of my observations and suggestions on how to make it better. I don’t know how common this use case is, and how exactly it relates to other Twitter/threading use cases; I wanted to share this in case there’s something useful in here.</p><p>I bolded my suggestions so it’s easier to scan this quickly.</p><p>Setup: I used my iPhone 6S to take photos, and posted most of the tweets using the official Twitter iOS app on the same phone.</p><h4>1. Threads are slow to load</h4><p>In the iOS app, opening any tweet in a thread shows it immediately, but the context of the thread (surrounding tweets) and the UI to append to the thread are slower and slower to load the longer the thread gets.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*z-HgclL9ALfGeFc4DXL3Jg.png" /><figcaption>One and a half minute is a really long time</figcaption></figure><p>This feels like an unintentional punishment for creating longer threads. It’s there for me as a writer, and — more importantly — it’s also there for readers. Currently, looking at the later tweets in the thread (<a href="https://twitter.com/mwichary/status/964761202902446080">example link to one</a>) on good wi-fi takes over 90 seconds to load the surrounding context and UI. (And looking at it on cellular made me worried about data charges, as it seems consistently slow and therefore probably not cached?)</p><p>It seems like this <strong>could be optimized to load in constant time</strong> (perhaps show the first few items in the thread and then a <em>Load more </em>item, in between, similarly to what’s done in notifications?). Or <strong>cached once loaded. </strong>It’d also be good — and it feels like good practice — to <strong>see the related UI (<em>Add another Tweet</em> button) appear immediately<em> </em>without having to wait for the content</strong>. Lastly, <strong>some sort of a loading indicator would be nice to add, </strong>although perhaps only if the thread is expected to be long.</p><p>(The desktop web experience doesn’t seem to have that problem.)</p><h4>2. There is a nasty scroll up bug</h4><p>In the iOS app, if you open any tweet further down the thread and scroll up or down even just a bit before the context/UI finish loading (or even <em>attempt</em> to scroll)… the moment they do, you get moved up all the way to the top of the thread, losing whatever orientation you had.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/299/1*vYdEbV-UyStLZUI4aRyPiw@2x.gif" /><figcaption>Scrolling also includes a natural (in this situation) pull-down-to-refresh gesture that also causes the scroll bug</figcaption></figure><p>It’s really confusing at worst, and infuriating at best, when you understand what’s going on but — after having waited 90 seconds and accidentally touched the screen and scrolled it— are still powerless to stop it.</p><p><strong>Please fix this bug.</strong> It’s been there for so long.</p><h4>3a. It seems easy to lose track of the thread</h4><p>As you read, the thread gets truncated at some point, with responses to the “selected” tweet (the tweet with big letters) taking over. There is a call to action to keep reading the thread, but it’s tiny and that makes it easy to miss it — and that assumes you know to look for it.</p><p>The call to action also says <em>X more replies, </em>not using the word “thread,” even though the UI to enter the thread calls it that <em>(Show this thread).</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Fy-RQubPY46SmaMWg7BKvQ.png" /><figcaption>Never-ending chase to get the rest of the thread (notice the scrollbars). The thing you will see most often is the first response to the first tweet (“if you run into…”).</figcaption></figure><p>Even when you find that call to action in the middle of scrolling and tap on it, you’ll have to fish for it next time, too, as the responses to the original tweet keep hanging in there at the bottom of the chute.</p><p>(There is also a <strong>bug</strong> you could see above, where for some reason the number never goes above 171? That might add to the confusion — you tap it once, scroll down, and the number remains the same.)</p><h4>3b. The conversation UI seems confusing, in general</h4><p>The above three problems — slowness, scrolling bugs, extending UI — contribute to the confusion, but I think even without them it’d still be hard to participate in a conversation where people respond to various tweets in the thread. Here’s a sample of the problem:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f8vojRwVFF-9VwxoYWp3Bw.png" /><figcaption>The right four screens is just a subset of all the responses like these this tweet received</figcaption></figure><p>I don’t think people intended to respond with the same answer <em>despite </em>others having done so before them. I believe they responded because they never saw the other answers.</p><p>This was the first time I actually wrote a little explainer…</p><h3>Marcin Wichary on Twitter</h3><p>Pro tip if you&#39;re following this thread: tap or click on tweets that interest you; many have feedback and thoughts from awesome people who understand things better than I do. (Also, thanks for following this thread!)</p><p>…and I had so many questions — on Twitter or otherwise — about <em>how </em>to read the replies to a tweet in the thread. It’s confusing (<a href="https://twitter.com/nishaspillai/status/959678739700318208">here</a> <a href="https://twitter.com/kevintwohy/status/959765625966092288">are</a> <a href="https://twitter.com/jimcalliu/status/960049170819067904">some</a> <a href="https://twitter.com/footnotesrising/status/960279633416638465">comments</a>), even if it’s explained to you: the replies to the “selected/current” tweet appear nowhere close to the tweet but far below, separated by 30 subsequent tweets in the thread.</p><p><strong>I have a few tactical suggestions:</strong></p><ul><li>Make the “tap here to extend the thread” UI more visible, and tie its label more to the notion of a thread (right now it reads as replies from others).</li><li>If you tap on the action to extend the thread, consider making the initially “selected” tweet not selected any more — or at least remove the replies to it from the bottom. This way, reaching the end of the visible part of the thread will also mean reaching the bottom of the scrollable chute, Fitts’s Law and all that.</li><li>When you start navigating within the thread (<em>e.g. </em>tapping on various tweets to make them “selected”), maybe reduce the distance between the currently “selected” tweet and the tweets replying to it from 30 to much lower? Since the intent of the reader is then to engage with the replies first, and the thread later.</li></ul><p>I do have a sense that a more profound redesign of this entire UI would be in order, however, to better accommodate threads with replies to them.</p><h4>4. It’s hard to stay on top of notifications</h4><p>The very moment your tweet/thread become nanoviral, your notifications get shot. It feels like the service punishing you for doing a good job. Two things in particular are frustrating:</p><ul><li>You can very quickly run out of notifications buffer — you scroll back and at some point the notifications just stop without any warning. If you don’t want to miss out on a reply to you, this forces you to be on top of your notifications, and that’s stressful. <a href="https://twitter.com/mwichary/status/899307294181146624">I talked about it a bit more before</a>. <strong>One idea would to be to extend the notifications buffer. The other, to perhaps allow you to paginate notifications, or allow to choose a specific date </strong>and be more intentional about reading notifications than just the rudimentary (and getting slower and slower) infinite scroll.</li><li><em>Notifications </em>pane has two modes: <em>All</em> and <em>Mentions. </em>I expect the second tab<em> </em>to also include quote tweets, but they’re not there. That forces me to use <em>All</em> not to miss anything — and wade through tons of likes and retweets that are not pertinent. Suggestion:<strong> Please add quote tweets to the <em>Mentions view.</em></strong></li></ul><h4>5. It’s easy to make a mistake and mess up the thread</h4><p>If you mess up and continue the thread not from its last tweet, the whole thing breaks — you can follow up to the beginning from a misplaced tweet, but you will no longer be able to read the entire thread when you start from the beginning.</p><p>This makes sense, but it feels too easy to arrive at this state. It happened to me twice in the above thread alone, where I later had to delete some tweets and republish them in the correct order. (<a href="https://twitter.com/ja2ke/status/959623320822890496">Leftover proof where someone else helped me figure it out</a>.)</p><p>I think a feature to reconnect/reshuffle tweets in a thread would be an overkill. <strong>Making the UI appear faster (as per above) would help.</strong> Perhaps there’s a chance to <strong>introduce some sort of a thread </strong><a href="https://en.wiktionary.org/wiki/end_mark"><strong>end mark</strong></a><strong>, maybe even visible just to the author? </strong>It could be a typographical glyph, or it could be just a change in the UI. Right now in my own stream the last tweet in a thread has the same text as any tweet before: <em>Show this thread. </em>Maybe there’s an opportunity to make the last one special?</p><h4>6. It’s hard to keep track of which photos were already included</h4><p>Managing photos is a small private hell: choosing photos to be portrayed, remembering to filter them, remembering which ones were already used. This is mostly on iOS, not on Twitter. As a matter of fact, Twitter has a pretty good photo selection UI.</p><p>However, one feature request that would make this so much easier:<strong> when I’m selecting photos to be attached to a tweet, please indicate (gray out?) photos I already attached to (other) tweets before.</strong></p><p><em>That’s it! </em><a href="http://twitter.com/mwichary"><em>My DMs are open</em></a><em> if anything here needs clarification. Screenshot frames thanks to </em><a href="https://mockuphone.com/"><em>mockuphone.com</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b6f1f302da8c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>