<?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 Thomas Fuchs on Medium]]></title>
        <description><![CDATA[Stories by Thomas Fuchs on Medium]]></description>
        <link>https://medium.com/@thomasfuchs?source=rss-9f9e0ab7088b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*Xzv0nSsE62vJOEsd.jpg</url>
            <title>Stories by Thomas Fuchs on Medium</title>
            <link>https://medium.com/@thomasfuchs?source=rss-9f9e0ab7088b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 09:51:29 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@thomasfuchs/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[How to retrobright old yellowed plastic]]></title>
            <link>https://medium.com/@thomasfuchs/how-to-retrobright-old-yellowed-plastic-ac1c70d334d3?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/ac1c70d334d3</guid>
            <category><![CDATA[plastic]]></category>
            <category><![CDATA[retrogames]]></category>
            <category><![CDATA[retrocomputing]]></category>
            <category><![CDATA[restoration]]></category>
            <category><![CDATA[computers]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Mon, 13 Sep 2021 02:19:38 GMT</pubDate>
            <atom:updated>2021-09-13T02:19:38.644Z</atom:updated>
            <content:encoded><![CDATA[<p>Retrobrighting requires two ingredients: hydrogen peroxide and a source of UV light or heat energy.</p><p>All parts to be retrobrighted need to be very thoroughly cleaned in warm soapy (dishwashing fluid) water, very thorougly rinsed and completely dried. I would also recommend wiping everything down with alcohol lens wipe pads while wearing single-use gloves to remove any possible grease.</p><p>I used a plastic tub that was big enough (the AEK is ginormous) and filled it with about a gallon and a half (5.7L) of 3% hydrogen peroxide (you can buy this from e.g. Amazon or probably cheaper locally) and another half gallon (1.9L) of distilled water.</p><p>Left partially covered out in about 8 hours of Arizona sun. <em>It depends on the amount of yellowing and the specifics of the plastics involved and the local sun energy on how long this takes — it may be just a few hours but it could be multiple days for your use case.</em></p><p>The liquid reached a temperature of roughly ~110ºF (~45ºC).</p><p>3% hydrogen peroxide is very safe, people use it e.g. for medically prescribed gargling. (Still you want to use gloves and eye protection when handling it!)</p><p>It’s important to 1) cover everything completely with the liquid so nothing sticks out 2) from time to time move parts around and agitate the liquid (move the box back and forth quickly) to dissolve oxygen bubbles*. Otherwise you might get uneven results as bubbles stick to the plastic.</p><p>*Hydrogen peroxide will harmlessly dissolve into oxygen and water during the process.</p><p>If you live somewhere sunny you won’t need UV lamps or heaters.</p><p>If partially covered, even direct sun won’t heat up the liquid or parts enough for them to bend out of shape.</p><p>If you need to provide UV/heat yourself, don’t let the liquid exceed 120ºF/50ºC so your plastic won’t get soft and get out of shape.</p><p>If you do this inside, you should cover the plastic box airtight and lock it in e.g. a bathroom. The 3% hydrogen peroxide will likely not smell bad but it can be a danger to kids or pets if ingested or on skin contact.</p><p>You can likely reuse the same hydrogen peroxide/distilled water liquid mixture in the future but you will have to replenish the losses.</p><p>Otherwise, have fun!</p><p>P.S. And for the love of science don’t follow ridiculous people’ advice (like the two-bit guy who melts old computers at 160ºF/70ºC with way too much hydrogen peroxide).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ac1c70d334d3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The 5 cringiest tech industry songs]]></title>
            <link>https://medium.com/@thomasfuchs/the-5-cringiest-tech-industry-songs-63a3c209f7af?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/63a3c209f7af</guid>
            <category><![CDATA[retrocomputing]]></category>
            <category><![CDATA[ads]]></category>
            <category><![CDATA[tech-industry]]></category>
            <category><![CDATA[songs]]></category>
            <category><![CDATA[commercial]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Sun, 02 May 2021 14:47:31 GMT</pubDate>
            <atom:updated>2021-05-02T14:47:31.366Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/970/1*4fKvabOEX0sejeoNyVhmCw.png" /><figcaption>This didn’t even make the list</figcaption></figure><p>Self-loathing has a long and celebrated history in Silicon Valley. Here’s my top 5 most cringiest songs brought to you by the tech industry.</p><h4>#5 “Are you keeping up with the Commodore?” (1980s)</h4><p>Let’s get into the mood with some com-pu-ter ter-mi-no-lo-gy.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F95cGh9EeMIY&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D95cGh9EeMIY&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2F95cGh9EeMIY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/7e2ec7bef0b274974d15cdbe21327d38/href">https://medium.com/media/7e2ec7bef0b274974d15cdbe21327d38/href</a></iframe><h4>#4 “On your mark! Get set! We’re riding on the Internet” (1990s)</h4><p>Using Netscape to browse to that MTV world wide web homepage! I’m unsure though about the advice that <em>“your parents or teachers can help you connect to your ISP”</em>.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fs1_yx_Eg9v4%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Ds1_yx_Eg9v4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fs1_yx_Eg9v4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/780ce36466a86a679449fe6982cf62a1/href">https://medium.com/media/780ce36466a86a679449fe6982cf62a1/href</a></iframe><h4>#3 “Playday” (2001)</h4><p>More of collage than a song — but did you ever want to listen to Bill Gates buy sexy antropomorphized apples? Now’s your chance. (If you like this, there’s plenty more song and dance available in the Ballmer-Gates oeuvre; as well as the spoken poetry performances of <a href="https://www.youtube.com/watch?v=EtuDS0ntaJY">Ballmer in this 1986 Windows ad</a>, or “Word-Art” as I call it.)</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FV7PYQCXdX3A%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DV7PYQCXdX3A&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FV7PYQCXdX3A%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/051061356fe730143c8855f31c64f9e3/href">https://medium.com/media/051061356fe730143c8855f31c64f9e3/href</a></iframe><h4>#2 “Only Amiga Makes It Possible” (1987)</h4><p>Poss-eh-bell, Uhh-uhh! Notable for the mix of “professional” singing and customer sound bites.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FPWeO5IkCssk%3Ffeature%3Doembed%26start%3D0&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPWeO5IkCssk&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FPWeO5IkCssk%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9f261c74f1770bbcb5ee78fc4b2bb8fa/href">https://medium.com/media/9f261c74f1770bbcb5ee78fc4b2bb8fa/href</a></iframe><h4>#1 “I Think We’re A Clone Now” (1994)</h4><p>In the early-to-mid 1990’s Apple started to license its operating system to third-party hardware manufacturers. (When Steve Jobs returned to the company, this is unsurprisingly the first thing he axed.) Today few people remember this era, so let me refresh your memory with this jewel:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FPnCqNH7V9R0%3Fstart%3D3&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPnCqNH7V9R0&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FPnCqNH7V9R0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/d1a7bba7f2a005445ea06ffbb0054e65/href">https://medium.com/media/d1a7bba7f2a005445ea06ffbb0054e65/href</a></iframe><p>(Not to be confused with “I think I’m a Clone Now” by Weird Al Yankovic.)</p><p>What’s your favorites?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=63a3c209f7af" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Good riddance, Twitter]]></title>
            <link>https://medium.com/@thomasfuchs/good-riddance-twitter-a572bdf0fb73?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/a572bdf0fb73</guid>
            <category><![CDATA[twitter]]></category>
            <category><![CDATA[jack-dorsey]]></category>
            <category><![CDATA[mastodon]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Sun, 19 Aug 2018 11:19:27 GMT</pubDate>
            <atom:updated>2018-08-19T12:22:19.171Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R6dDKDHRS7cA7GwHC_Yj-w.jpeg" /></figure><p>This week, I quit Twitter.</p><p>I had an 11-year old, verified account with over 30,000 followers, I’ve been to the Twitter offices twice, once when they were a 30-people company for a meeting with <a href="https://medium.com/u/268314bb7e7e">Ev Williams</a>.</p><p>Last week was the last straw. Their hostile stance towards their early users is breathtaking in just how openly they try to fuck us over.</p><p>Instead of properly fighting their harrassment problem, they’re openly siding with Nazis, conspiracy theorists and anyone else really who brings them “engagement”.</p><p>Instead of widening the options for access, despite their dwindling user numbers, they axe access for third party clients.</p><p>Instead of making a new version of their client for macOS, this 4,000 people company decided to no longer make one (after buying the maker of the best app).</p><p>Instead of taking a stance to protect their users, they keep a sociopathic CEO in place, with <a href="https://medium.com/u/ab69c5472679">Jack Dorsey</a> going out of his way to constantly explain away his utter spinelessness and lack of action (<em>“We have do to better!”</em>).</p><p>Fuck you <a href="https://medium.com/u/ab69c5472679">Jack Dorsey</a>. Fuck you, all you douchebros and douchesisters running Twitter.</p><p>You’re abusers. You ceaselessly optimize Twitter for the most possible abuse of its users to drive “engagement” and keep those eyes on the timelines with a never ending barrage of abusive crap.</p><p>You keep showing tweets from people your users never chose to follow.</p><p>You keep invading people’s privacy by syndicating favorites, which no one ever agreed to.</p><p>You keep trying to stir up controversy but willingly allowing criminal assholes to abuse your users just so you can get into the press.</p><p>You had a choice, and you chose to willingly and by your own devices, to be assholes.</p><p>Twitter’s business model boils down to, <em>“convert negative emotions into money”</em>.</p><p><em>Side note: If you work at Twitter, you’re fueling a cult that makes a profit (well, not sure about that actually) by emotionally abusing people. And the leadership of your company is abusing you, too. Your work is designed to make people miserable, enraged and feeling terrible—all so that your advertisers can sell more stuff.</em></p><p>I’ve deleted my account. I will miss the friends I made, but I will not miss the abuse. There’s a line that was crossed recently with Alex Jones and with removing support for various API functions, a move designed to deliberately target power-users and early adopters who prefer 3rd-party clients over the Twitter apps and their force-fed crap.</p><p>It doesn’t have to be like this. Social media can be fun. With friendly people, and with no engagement pressure, and no algorithms force-feeding you content designed to make you feel bad.</p><p>I found a new home in Mastodon (follow me there if you like: <a href="https://mastodon.social/@thomasfuchs">mastodon.social/@thomasfuchs</a>).</p><p>Good riddance, Twitter. Hello meaningful conversations.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a572bdf0fb73" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[So I’ve been making web stuff for a quarter of a century now]]></title>
            <link>https://medium.com/@thomasfuchs/so-ive-been-making-web-stuff-for-a-quarter-of-a-century-now-f3dab31570cf?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/f3dab31570cf</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[design]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Mon, 11 Jun 2018 14:19:57 GMT</pubDate>
            <atom:updated>2018-06-11T14:22:25.126Z</atom:updated>
            <content:encoded><![CDATA[<p>As I’m sitting down here on a NeXT computer (in honor of the machine the web was born on!) to write this—I admit, yes, computers are faster now. But the basics haven’t changed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*efjuJw54RsJa9OaTIUDRFg.jpeg" /><figcaption>My NeXTstation color, yes that’s this article being edited</figcaption></figure><p>There’s still a bunch of companies trying to make things incompatible and pushing proprietary stuff on us <em>(hi, AMP!)</em>.</p><p>You still need to test in every browser, though it’s been easier than it used to be, as there’s fewer bugs and decent debugging tools.</p><p>People still try to fix the perceived shortcomings of the client/server model by trying to make the client do everything.</p><p><em>Hello Java! Hello Flash! Hello Ext.js! Hello Angular! Hello React!</em></p><p>People still eventually give up and try the next thing that promises salvation.</p><p>We still constantly add more features to HTML, to CSS, to JavaScript and to HTTP itself. Often welcome stuff that makes things easier. Often bloat that no one really needs.</p><p>Yet with all the experience and all the new features and all the “new” client-side techniques, so many web sites and apps are horrible. Worse perhaps than 25 years ago.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*T8_syvZaWP5wqfE527k2FQ.png" /></figure><p>I’m not a Luddite, however it’s a good idea to reflect sometimes if you actually need all the crap that supposedly makes things<em> “better”</em>.</p><p>Does it, objectively, improve lives of users?</p><p>Does more code and more complexity really make things easier to maintain? (The idea of componentized architectures pops up every half decade or so—is it really going to last this time? What’s different this time around?)</p><p>If you want to be really great at making web sites and apps—forget about frameworks.</p><p>These are and always will be ephemeral.</p><p>To be good at “Web” you’ll need to understand first and foremost about humans.</p><p>Any web site or web app is ultimately always about a human being wanting to achieve something.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/780/1*zcgYfgbdddfJwmFMo9ZALQ.jpeg" /></figure><p>Concentrate on this first. Make it easy to achieve that something.</p><p>Make things <strong><em>clear, quick, forgiving, enjoyable</em></strong> and get out of the way when the job is done.</p><p><strong><em>To make things clear</em></strong>, learn about psychology. Learn about how (successful) education works. Have empathy. Be kind of users.</p><p><strong><em>To make things quick</em></strong>, master the platform basics: HTML, CSS, DOM, JavaScript, HTTP. Learn how browsers work. What happens when you hand the browser a chunk of HTML, how does it get parsed, layouted, rendered? Staying on top of this will allow you to make well-informed technical choices, like the type of structure your web site or app has (from static pages, to server-side MVC to full-blown client-side apps; or a mixture of these). As you make apps that will (hopefully) be used for many years to come, deep knowledge on these subjects will come in more than handy when you need to maintain code later. Put a sticky note on your monitor with the old adage of “keep it simple, stupid”. (Will people in 10 years from now still know how to use React? Will they even get the toolchain to run?)</p><p><strong><em>To make things forgiving</em></strong>, see what happens when users block trackers and ads. See what happens on slow and brittle connections. Load up the thing on a 10-year old computer. Test in text mode browser (is it at least somewhat comprehensible?), and test for colorblindness. With very little time investment you can show your users that you care. This will be much appreciated.</p><p><strong><em>To make things enjoyable</em></strong>, learn about design. Learn about human-computer interactions. Learn about visual design, space, colors and typography. Design is not some innate magical ability people are born with.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/594/1*CeiM__jznEBAhryzmW6TSw.png" /></figure><p>tl;dr Make great sites and apps that help people kick ass &amp; don’t get tangled up in the pursuit of technical “cleanliness”.</p><p>Here’s to the next 25 years of the web.</p><p><em>P.S. And for everybody’s sake, have fun creating things and don’t take everything super seriously.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f3dab31570cf" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I apologize for the inconvenience]]></title>
            <link>https://medium.com/@thomasfuchs/i-apologize-for-the-inconvenience-a2d2192ca585?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/a2d2192ca585</guid>
            <category><![CDATA[communication]]></category>
            <category><![CDATA[customer-service]]></category>
            <category><![CDATA[support]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Tue, 23 May 2017 12:26:50 GMT</pubDate>
            <atom:updated>2017-05-23T12:26:50.926Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*akPW9dHo_nhiDAWoMZZw2A.jpeg" /></figure><p>These are words you should never write in a support email. Why? Because it’s dishonest and reeks of A/B-optimized corporate technobabble.</p><p>It’s a lot like saying <em>“my thoughts and prayers are with you”</em> to people that you don’t know that are victims of crimes that have nothing to do with you.</p><p>You feel like you need to say something, so you say the acceptable middle-of-the-road default.</p><p>This is wrong, and you’re wrong for doing it. You’re saying these things to make yourself feel better; not to actually express genuine support for those you’re addressing.</p><p>Reverse these situations for a moment and switch the phrases:</p><blockquote>We’re expecting the server to be online again in about an hour.<br>My thoughts and prayers are with you.</blockquote><blockquote>Sincerely,<br>Support Dude</blockquote><p>It literally doesn’t mean anything and fills up space.</p><p>What about a tweet like this?</p><blockquote>Regarding the terrible attack in &lt;x&gt;, I apologize for the inconvenience.</blockquote><p>Would you tweet that?</p><p>Please stop using these phrases. If you need to communicate genuine, heartfelt emotion, take a moment to try to come up with something that expresses what you actually mean.</p><blockquote>This is our fault, and I know that it’s frustrating that our app doesn’t work for you right now. The team is on it and is working hard on getting it up and running again. I’ll let you know when we fixed this!</blockquote><p>How hard is that?</p><p><em>And regarding thoughts and prayers, please feel free to have thoughts and have prayers, but don’t overshare.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a2d2192ca585" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Time Tracking is So Hard]]></title>
            <link>https://medium.com/@thomasfuchs/why-time-tracking-is-so-hard-c2700357c4e1?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/c2700357c4e1</guid>
            <category><![CDATA[time-tracking]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[time-management]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Mon, 15 May 2017 12:24:16 GMT</pubDate>
            <atom:updated>2017-05-15T12:24:16.524Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S4fajvQgtASNIScmdST5Vg.jpeg" /></figure><p>The old saying goes, <em>“Time Tracking ain’t easy”</em>. All you want is accurate and on-time data so you can plan your resources, bill your customers and find those pesky projects that just take longer than they should.</p><p>But instead you’re fighting with your software, eventually not using anymore and then blaming yourself for being <em>“undisciplined”</em>. Well, it’s not you, it’s your software.</p><h4>You can’t just automate it</h4><p>Sure, there’s apps that track which other apps you have open on your computer, and maybe even phone calls — but there’s a lot of work that’s done that happens away from keyboard. Meetings, conversations at the water cooler, or simply having a great idea in the shower. How do you track that? The best way to track time is to manually do it — humans know better than machines what they’re working on. But it has to be easy to do, if it becomes a chore, you end up with bad data.</p><h4>Dependency hell</h4><p>Who wants to configure 7 things after doing a 3 minute phone call? <em>That’s right, no one.</em></p><p>When your software requires that you create a client, create a project, create a sub-project and create tasks before you can even track your time you’re bound to just not do it.</p><p>Why wouldn’t your software anticipate this and let you log time ad-hoc without any formal requirements? And let you do the details (like an hourly rate for a specific client) later?</p><h4>“I’ll do it later”</h4><p>People often log their time perhaps once a week on Friday afternoon, when they’re with one foot out of the office already. Or worse, just quickly log the time for last week on Monday morning.</p><p>Time Tracking software should be aware how actual human beings work and help you achieve better quality by providing ways to make time tracking easier, for example by actively reaching out to you when it looks like you forgot to track your time.</p><h4>Work just doesn’t stop at the office door</h4><p>Even if you’re disciplined about separating work and private life, we’re all just human beings. Have an idea during your morning shower? Discovered the perfect solution for your client during a weekend stroll? Or you have to switch between projects and need time to get into each project without being productive right away (ask any programmer!).</p><p>Your software should know that you’re human. For this reason, in many industries, traditionally time is rounded up to, e.g. quarter hours for billing. This gives a more realistic picture of how much time you actually spend—and minimizes overhead by not making you log every 10-second shower thought.</p><h4>Business software is terrible</h4><p>Most business software is like a visit to the DMV. Everything is grey and beige, you need to fill out confusing forms and you have to wait forever for anything.</p><p>There’s actually a lot of research on human-computer interactions that, not surprisingly, found that friendly applications that treat the user well (for example with forms that are less intimidating, cheerful color scheme, fast load times, etc.) yield better data quality.</p><p>Why? Simply because people don’t feel awful using the apps.</p><p>Software really doesn’t have to hurt—it can be actually helpful to get stuff done. But that involves a bit more than just throwing a few forms on a web page and brewing up a buzzword backend soup. It requires research and understanding the problem &amp; knowing how humans behave.</p><p><em>Want time tracking that does all this? </em><a href="https://letsfreckle.com/"><em>Freckle’s foremost design goal is to be cheerful.</em></a><em> Give it whirl today.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c2700357c4e1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[5 minute challenge: UX bugs in Medium]]></title>
            <link>https://medium.com/@thomasfuchs/5-minute-challenge-ux-bugs-in-medium-d505dffae6b6?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/d505dffae6b6</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[web-design]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Sun, 18 Sep 2016 12:25:27 GMT</pubDate>
            <atom:updated>2016-09-18T12:46:42.119Z</atom:updated>
            <content:encoded><![CDATA[<p><em>#5minutechallenge — </em>I gave myself 5 minutes to look for problems with Medium’s text editor, and here’s the first 5 issues I found (I’m on a Mac on Safari, YMMV).</p><ol><li>Selecting an image via the keyboard (Shift+Cursor keys) shows two context toolbars on top of each other:</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/357/1*JPon12D_m6LgfxVruKPTng.png" /></figure><ol><li>Inserting an image just under an item in an ordered list makes following list items lose their position and start numbering at 1 again. <em>More annoyingly, I can’t find a way to keep the numbering correct, because the ultra-minimalist UI doesn’t have any options to configure this.</em></li><li>Can’t copy or cut + paste images via the keyboard (⌘X, ⌘C, ⌘V).</li><li>Shift+Cursor Up or down to select things stops at images. <em>Moreover, Shift+Cursor Up not only stops at an image, the next time you hit Cursor Up it clears your text selection for no reason.</em></li><li>I can drag selected text to different position, but it doesn’t move the text to the drop point.</li></ol><p>There’s so much hidden refinement in user interfaces, especially with “simple” seeming things like editing text—as a designer or developer it’s a good idea to (once in a while) stop what you’re doing and familiarize yourself again and again with basic user interface controls and patterns.</p><p>These patterns have been tweaked over decades, the result of a lot of thinking by a lot of very clever people combined with a plethora of user feedback. This has lead to widely-used standard behaviors in user interfaces. Unlike many other things in programming, there’s no committees or standards for these behaviors—the best way to learn about them is to try out a known great implementation (I’d recommend macOS controls) and literally keep hitting buttons and see what happens.</p><p><em>Why don’t you try a #5minutechallenge in your app? You’d be surprised how far a little focused testing goes. Plus, you’ll probably learn a lot about how controls should behave. And if you find issues in other apps, do write bug reports. These things seem minor, but add up to a lot of user frustration.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d505dffae6b6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to retinafy your web app (in a hurry)]]></title>
            <link>https://medium.com/@thomasfuchs/how-to-retinafy-your-web-app-in-a-hurry-310f713a7f3a?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/310f713a7f3a</guid>
            <category><![CDATA[design]]></category>
            <category><![CDATA[mobile]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Sat, 17 Sep 2016 12:59:24 GMT</pubDate>
            <atom:updated>2016-09-17T12:59:24.178Z</atom:updated>
            <content:encoded><![CDATA[<p>Supporting multiple screen densities (Retina screen laptops, hi-res phones, etc.) doesn’t have to be complicated. Unfortunately, there’s (still) a lot of bad information out there.</p><p>Here’s a quick flowchart for you, based on creating high resolution graphics for real, existing web applications, both on the web and in mobile web wrappers:</p><figure><a href="http://retinafy.me/"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Q6VAeK6fQewt8HE4MKsXA.png" /></a></figure><p>If you’d like to learn more about the techniques shown here, <a href="http://retinafy.me/">grab a copy my ebook</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=310f713a7f3a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[10 Things Your Help & Support Tab Should Do]]></title>
            <link>https://medium.com/@thomasfuchs/10-things-your-help-support-tab-should-do-12374886e3e?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/12374886e3e</guid>
            <category><![CDATA[design]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Wed, 13 Jul 2016 13:57:06 GMT</pubDate>
            <atom:updated>2016-07-13T13:57:06.268Z</atom:updated>
            <content:encoded><![CDATA[<p>Many websites and apps have a “help”, “support” or “feedback” tab somewhere on the side of the window. And often the user experience is awful, and geared only towards avoiding getting emails.</p><p>It’s such a big missed opportunity for many businesses to get to know their customers, and make them feel amazing that they made the right choice buying from you.</p><p>Here’s what you can do to make your “Help &amp; Support” tab awesome.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iZDp-RgD6siyaBXyOWP0nw.png" /></figure><ol><li><strong>Make it easy to find.</strong> Use a bright color (yay, pink)! Make it clear that it’s something that opens when clicked. You can do this by adding a little disclosure arrow and perhaps having a small animation when the user hovers over it. You can also open it by default on page load until the user closes it for the first time.</li><li><strong>Call it “Help” or “Support”, not “Feedback”.</strong> It’s for people to get help, not free consulting services for you.</li><li><strong>Introduce yourself.</strong> People like to talk to other people. If your users see that your app is made by actual people this can change your users’ mood instantly. Especially when there’s a bug or something bad happening.</li><li><strong>Offer a self-help option, but don’t prefer it</strong> over talking to you and do not force it on people. <em>(This rule might not apply to all types of apps and services. For example, if your customers are all tech-savvy power-users, they might prefer (good) automatic self-help suggestions over having to send an email. You might want to experiment.)</em></li><li><strong>If applicable, show relevant contextual help. </strong>On your sign in page, have a link to your help page on logging in. On your data import page, have a link to the help page that explains how to make a CSV file. Don’t show more than one or two relevant links as users won’t read them all. <em>However, don’t make this more important than contacting you directly (e.g. don’t make people have to “click through” to your email address).</em></li><li><strong>Have a big button to directly send a message right there on the page. </strong>Do not ask for people’s names or email addresses if they’re already logged in to your app.</li><li><strong>Help new users get started quickly.</strong> Using a new app can be daunting to users. Have an option to get them up to speed quickly, a tutorial video or screencast works great for this.</li><li><strong>Send yourself extra information that’s already there in the browser</strong> so you can help your users faster. This includes current URL, the user agent string, the current local time of your user, and more (e.g. screen resolution, but also account information like the account ID or which plan type a customer has, so you don’t need to look them up). It’s better to have too much information than too little.</li><li><strong>Offer a “email us directly” link and clearly indicate your support email address.</strong> Don’t make people hunt for it. Support is likely your #1 sales channel. Always be talking to your users. You’re running a business serving customers, not an experiment in avoiding to have to communicate.</li><li><strong>Indicate your system status right there. </strong>That can instantly communicate to people that you’re aware of an issue and serves two purposes: reduce load on support and make people feel good that you’re monitoring things actively and are already on it.</li></ol><p>With a little bit of effort you can both make the experience amazing and friendly for your users <em>and</em> you get to a better start when answering those support emails.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=12374886e3e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What if we had a great standard library in JavaScript?]]></title>
            <link>https://medium.com/@thomasfuchs/what-if-we-had-a-great-standard-library-in-javascript-52692342ee3f?source=rss-9f9e0ab7088b------2</link>
            <guid isPermaLink="false">https://medium.com/p/52692342ee3f</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Thomas Fuchs]]></dc:creator>
            <pubDate>Sat, 26 Mar 2016 14:32:20 GMT</pubDate>
            <atom:updated>2016-03-28T14:00:27.233Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HfibrfT78nvWzLO1mY47Cw.jpeg" /><figcaption>That’s the Melk Benedictine Abbey Library (<a href="https://commons.wikimedia.org/wiki/File:Melk_-_Abbey_-_Library.jpg">source</a>)</figcaption></figure><p>Over the last few years the “authorities” of the JavaScript world concentrated on adding <a href="http://www.ecma-international.org/ecma-262/6.0/">ever more features</a> to the language and building a <a href="https://www.npmjs.com/">sprawling library</a> of modules and packages.</p><p>As of right now (9:52 AM ET on March 26, 2016) there are 259,191 packages on NPM. Yes, that’s more than a quarter million packages.</p><p>Imagine a library with no books, instead being filled to the gills with fortune cookie fortunes. That are tied with strings to each other.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*CZTmVvPduBuWmnlUGAz2VQ.png" /><figcaption>JavaScript projects—managed like they are serial killer crazy walls?</figcaption></figure><p>The ES6 standard (aka the next major version of JavaScript) adds a huge amount of features to the language, among them <a href="https://github.com/lukehoban/es6features#arrows">arrows</a>, <a href="https://github.com/lukehoban/es6features#classes">classes</a>, <a href="https://github.com/lukehoban/es6features#enhanced-object-literals">enhanced object literals</a>, <a href="https://github.com/lukehoban/es6features#template-strings">template strings</a>, <a href="https://github.com/lukehoban/es6features#destructuring">destructuring</a>, <a href="https://github.com/lukehoban/es6features#default--rest--spread">default + rest + spread</a>, <a href="https://github.com/lukehoban/es6features#let--const">let + const</a>, <a href="https://github.com/lukehoban/es6features#iterators--forof">iterators + for..of</a>, <a href="https://github.com/lukehoban/es6features#generators">generators</a>, <a href="https://github.com/lukehoban/es6features#unicode">unicode</a>, <a href="https://github.com/lukehoban/es6features#modules">modules</a>, <a href="https://github.com/lukehoban/es6features#module-loaders">module loaders</a>, <a href="https://github.com/lukehoban/es6features#map--set--weakmap--weakset">map + set + weakmap + weakset</a>, <a href="https://github.com/lukehoban/es6features#proxies">proxies</a>, <a href="https://github.com/lukehoban/es6features#symbols">symbols</a>, <a href="https://github.com/lukehoban/es6features#subclassable-built-ins">subclassable built-ins</a>, <a href="https://github.com/lukehoban/es6features#promises">promises</a>, <a href="https://github.com/lukehoban/es6features#math--number--string--array--object-apis">math + number + string + array + object APIs</a>, <a href="https://github.com/lukehoban/es6features#binary-and-octal-literals">binary and octal literals</a>, a <a href="https://github.com/lukehoban/es6features#reflect-api">reflect api</a> and <a href="https://github.com/lukehoban/es6features#tail-calls">tail calls</a>.</p><p>Now, what is the point of all this? Will it make it easier to write apps? Will it make them work better?</p><p>How have we been able to make useful software in JavaScript all this time?</p><blockquote>Growth for the sake of growth is the ideology of the cancer cell.—Edward Abbey</blockquote><p>Many of the packages on NPM are literally one-liners. Why would people include a one-line-of-code library in their projects and not just write it themselves? Is it lazyness? I don’t think so—it’s more of a convention in the JavaScript world that everything should be compartmentalized, filed away in neat little modules and all held together by some dependency pyramid scheme.</p><p>I don’t think short and to the point libraries are evil. I actually launched <a href="http://microjs.com/">Micro.js</a> a few years back to highlight useful, small libraries. However, I do not think the proliferation of essentially trivial code snippets that are packaged up is a good thing.</p><p>Guess what? In the real world, this model quickly leads to a multitude of issues. The most obvious example is that if a package is removed for any reason, <a href="http://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm">chaos quickly spreads</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F76tqGC0pAzPI06NVtGa1Q.png" /><figcaption><a href="http://npm.anvaka.com/#/view/2d/browserify">Depency graph for browserify</a></figcaption></figure><p>That’s actually not the main problem though. As a developer of software, your job is it to <em>find the simplest solution to a problem</em>. “Simplest” is a bit vague, so let’s define it as <em>“does functionally work, is performant (enough), is relatively easy to understand and is not taking too long to implement”</em>.</p><blockquote>“There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.”—C.A.R. Hoare</blockquote><p>So let’s break this down:</p><p><strong>“Does functionally work”</strong>. Yes, NPM modules, for the most part, do work. This is kind of a given as you wouldn’t include code in your project that doesn’t work. (<a href="https://medium.com/@wob/the-sad-state-of-web-development-1603a861d29f#.wwml2pwjy">However, you will run into bugs eventually in the modules you include. And then the fun of debugging other people’s code starts…</a>) And when a developer decides to update a module but doesn’t adhere to semver semantics, well, good luck. (Yes, this can happen with any packaging system, and indeed it happens to me for example with Ruby’s gems from time to time. However, the amount of gems included in projects is relatively small compared to JavaScripts’s “everything-in-modules” approach which geometrically increases the chances of something breaking.)</p><p><strong>“Is performant”</strong> is the first hurdle. While the code itself probably is fine (though you won’t know until you measure it yourself), it has to be pulled in from a central repository, and it has to be kept up-to-date, which adds extra time during development and later issues when deploying (imagine the repository is temporarily down, <a href="https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c#.fvvzr2kzn">the package is no longer available</a>, something broke in a minor or patch release, etc.). You’ll need a build system, and you need one that offers workarounds for these problems (like local caches). In essence, this is adds complexity. <em>And complexity is the enemy of productivity.</em></p><p><strong>“Is relatively easy to understand”</strong> is where it gets hairy. Every library and module you add to your code basically creates a black box where input goes in and output comes out and in-between there’s magic. Magic that you have to go in and understand to see if the modules actually behave like you think they do. <a href="https://www.npmjs.com/package/add-ellipsis">This package for example, provides a method that cuts off a string at a given maximum length and adds an ellipsis</a>. Now, to find the package, add it to your build system, review the code if it actually does what you want—is it worth using a module? For something you can implement in one line of code?</p><p><strong>“Not taking too long to implement”</strong>—how long would it take you to write a function that cuts off a string or <a href="https://www.npmjs.com/package/is-positive">checks if a number is positive</a> or adds <a href="https://www.npmjs.com/package/left-pad">left padding</a>? Many functions you’ll find in a standard library are likely trivial in nature, but having an agreed-upon standard API to do things will speed up implementing code (fewer instances of “is there a library for this or should I code it myself”). Bonus: other people reading your code can concentrate on learning about dependencies that actually matter instead of the 5th implementation of “leftpad”.</p><blockquote>“Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.”—Alan Kay</blockquote><p>One thing that strikes people as odd in JavaScript, especially when they come from compiled languages like C, is the utter lack of certain useful functions (for example a function to format numbers in strings, like printf).</p><p>Instead of providing a great standard library (like the one in C, which is actually not that large compared to the standard libraries of other languages), development of the JavaScript language has gone another route. The route of featuritis in the name of “making things better”.</p><p>There’s a great metaphor in the German language, which is “Eierlegende Wollmilchsau” or “Egg-laying-wool-milk-pig”. It means a thing that tries to be everything. And ultimately the never-ending complexity causes it to fail.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/525/1*yQylqU3-qQML1eePtfKAZQ.jpeg" /></figure><p>What if all the energy spent on adding all these features to the language would have gone into creating a great standard library, that’s included in browsers and JavaScript runtimes? And perhaps a few small tweaks to make the language better and easier to write? (Hello, CoffeeScript!)</p><p>A standard library would make it a lot easier to write JavaScript by eliminating the need to come up with similar or same solutions to small issues.<strong> </strong>It would effectively make code easier to read and write as a lot of “searching for a library” and “or maybe I should write this quickly myself” would be eliminated. And as a free bonus side-effect application performance would be better, as there’s less need to load external libraries and the implementation can use native code and thus be highly optimized.</p><p>A standard library could easily be added to JavaScript without years of committee infighting, stalled projects and failed approaches (remember the bat-shit craziness of <a href="https://en.wikipedia.org/wiki/ECMAScript_for_XML">E4X</a>?). ES6 took 6 years to finalize and browsers to this day still don’t fully support it. There are plenty of successful and widely used libraries to draw inspiration (and implementation) for a first round from, like Underscore.js (and it’s predecessor in spirit, Prototype.js).</p><p>I appreciate that some improvements are underway (<a href="https://github.com/lukehoban/es6features#math--number--string--array--object-apis">like the aforementioned additional APIs for some built-in objects</a>), but I’d love to see a concerted effort to cast aside new language features for a while and really get to work on an underlying standard library.</p><p>What if we developers would make things simpler instead of more complex?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=52692342ee3f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>