&

[ASAP] Low-Lying Electronic States of FeGe<italic toggle="yes"><sub>n</sub></italic><sup>–/0</sup> (<italic toggle="yes">n</italic> = 1–3) Clusters Calculated with Multireference Second-O

The Journal of Physical Chemistry A
DOI: 10.1021/acs.jpca.0c02521




&

COVID-19 Diary Week 3: I've Never Been More Emotionally Exhausted

After a week seeing cancer patients with COVID-19 as the inpatient consult attending, Don Dizon finds himself more emotionally exhausted than he's ever been before.
Medscape Oncology




&

Neoadjuvant Nivolumab 'Promising' in Merkel Cell Carcinoma

A longer follow-up and larger cohort are needed, but results from a new study showed safety and a survival benefit among patients who received nivolumab as an adjunct to surgery.
Medscape Medical News




&

Let's Not 'Waste' COVID-19: Opportunities for Improvement

Dr Kathy Miller discusses beneficial changes that have resulted from the COVID-19 pandemic and implications for the future of medicine.
Medscape Oncology




&

Are You Honest When Patients Ask, 'What Would You Do?'

Dr David Kerr on when it might be the right decision to tell patients that you believe they're pursuing the wrong treatment.
Medscape Oncology




&

New Options for Rare Cancer Mutations: Basket and 'Just-in-Time' Trials

Basket trials and 'just in time' trials are two new options to target actionable genetic mutations in cancer, regardless of tumor type.
Medscape Oncology




&

Positive Findings from Year 2 of the Centers for Medicare &amp; Medicaid Services’ Million Hearts&#174; Cardiovascular Disease Risk Reduction Model

Mathematica has released positive evaluation findings from Year 2 of the Million Hearts® model, just in time for American Heart Month this February.




&

Food safety & mycotoxins / Aibo Wu, editor

Online Resource




&

Grinnell: America's environmental pioneer and his restless drive to save the West / John Taliaferro

Dewey Library - QH31.G74 T35 2019




&

La nueva humanización del agua: una lectura desde el ambientalismo inclusivo / Aníbal Faccendini ; prólogos de Riccardo Petrella y Leonardo Boff

Online Resource




&

Wild at heart: America's turbulent relationship with nature, from exploitation to redemption / Alice Outwater

Rotch Library - GF75.O87 2019




&

Green heroes: from Buddha to Leonardo DiCaprio / László Erdős

Online Resource




&

Linnaeus, natural history and the circulation of knowledge / edited by Hanna Hodacs, Kenneth Nyberg and Stéphane van Damme

Hayden Library - QH44.L556 2018




&

Landscape impact assessment in planning processes / Ingrid Belčáková, Paola Gazzola, Eva Pauditšová ; managing editor Agnieszka Topolska, language editor Jonathan Wotton

Rotch Library - GF90.B45 2018




&

Sea level rise: a slow tsunami on America's shores / Orrin H. Pilkey Jr. and Keith C. Pilkey

Dewey Library - GC90.U5 P55 2019




&

Big Lonely Doug: the story of one of Canada's last great trees / Harley Rustad

Hayden Library - QH106.2.B7 R87 2018




&

Strategic Corporate Conservation Planning: A Guide to Meaningful Engagement / by Margaret O'Gorman

Online Resource




&

Rebuilding the Earth: regenerating our planet's life support systems for a sustainable future / Mark Everard

Online Resource




&

Volcanoes & wine: from Pompeii to Napa / Charles Frankel

Dewey Library - SB387.7.F73 2019




&

Sustainable management of phytoplasma diseases in crops grown in the tropical belt: biology and detection / Chrystel Y. Olivier, Tim J. Dumonceaux, Edel Pérez-López, editors

Online Resource




&

Le fonio, une céréale africaine / Jean-François Cruz, Famoï Béavogui ; avec la collaboration de Djibril Dramé

Online Resource




&

Les pêches côtières bretonnes: Méthodes d'analyse et aménagement / Catherine Talidec, Jean Boncœur, Jean-Pierre Boude, coordinateurs

Online Resource




&

Housing reform and China's real estate industry: review and forecast / Pengfei Ni, Linhua Zou, Guangchun Gao, Xuemei Jiang

Online Resource




&

Neptune's laboratory: fantasy, fear, and science at sea / Antony Adler

Dewey Library - GC57.A325 2019




&

Estuaries and coastal zones in times of global change: proceedings of ICEC-2018 / Kim Dan Nguyen, Sylvain Guillou, Philippe Gourbesville, Jérôme Thiébot, editors

Online Resource




&

Latin American dendroecology: combining tree-ring sciences and ecology in a megadiverse territory / Marín Pompa-García, J. Julio Camarero, editors

Online Resource




&

Fire effects on soil properties / editors, Paulo Pereira, Jorge Mataix-Solera, Xavier Úbeda, Guillermo Rein and Artemi Cerdà

Online Resource




&

Fire in California's ecosystems / edited by Jan W. van Wagtendonk, Neil G. Sugihara, Scott L. Stephens, Andrea E. Thode, Kevin E. Shaffer, and JoAnn Fites-Kaufman

Dewey Library - QH105.C2 F57 2018




&

Wheat quality for improving processing and human health / Gilberto Igrejas, Tatsuya M. Ikeda, Carlos Guzmán, editors

Online Resource




&

Mixed plantations of eucalyptus and leguminous trees: soil, microbiology and ecosystem services / Elke Jurandy Bran Nogueira Cardoso, José Leonardo de Moraes Gonçalves, Fabiano de Carvalho Balieiro, Avílio Antônio Franco, editors

Online Resource




&

Catfish dream: Ed Scott's fight for his family farm and racial justice in the Mississippi Delta / Julian Rankin

Hayden Library - SH20.S385 R36 2018




&

Models of tree and stand dynamics: theory, formulation and application / Annikki Mäkelä, Harry T. Valentine

Online Resource




&

Neotropical diversification: patterns and processes / Valentí Rull, Ana Carolina Carnaval, editors

Online Resource




&

Plastidules to humans: Leopoldo Maggi (1840-1905) and Ernst Haeckel's naturalist philosophy in the Kingdom of Italy: with an edition of Maggi's letters to Ernst Haeckel / Rainer Brömer ; Deutsche Gesellschaft für Geschichte und Theorie d

Online Resource




&

Future of rice demand: quality beyond productivity / Antonio Costa de Oliveira, Camila Pegoraro, Vívian Ebeling Viana, editors

Online Resource





&

Here's how business needs to change for a new decade


Running a good business carries a responsibility to think about the communities in which they operate.
More RSS Feed for Cisco: newsroom.cisco.com/rss-feeds ...




&

Cisco's new Cybersecurity Co-Innovation Center in Milan


Our newest Co-Innovation Center is focused on cybersecurity, privacy, digital skills and social impact.
More RSS Feed for Cisco: newsroom.cisco.com/rss-feeds ...




&

#CLEUR: Here's how we can build the future internet


The future internet will open new opportunities for remotely training and reskilling workers in a smoother and more effective way.
More RSS Feed for Cisco: newsroom.cisco.com/rss-feeds ...




&

[ASAP] Plasmon-Mediated Coherent Superposition of Discrete Excitons under Strong Exciton–Plasmon Coupling in Few-Layer MoS<sub>2</sub> at Room Temperature

ACS Photonics
DOI: 10.1021/acsphotonics.0c00233




&

[ASAP] Goodbye Juan José Sáenz (1960–2020): A Bright Scientific Mind, an Unusually Prolific Friend, and a Family Man

ACS Photonics
DOI: 10.1021/acsphotonics.0c00526




&

It All Starts with a Humble <textarea>

Andy Bell rings out a fresh call in support of the timeless concept of progressive enhancement. What does it mean to build a modern JavaScript-focussed web experience that still works well if part of the stack isn’t supported or fails? Andy shows us how that might be done.


Those that know me well know that I make a lot of side projects. I most definitely make too many, but there’s one really useful thing about making lots of side projects: it allows me to experiment in a low-risk setting.

Side projects also allow me to accidentally create a context where I can demonstrate a really affective, long-running methodology for building on the web: progressive enhancement. That context is a little Progressive Web App that I’m tinkering with called Jotter. It’s incredibly simple, but under the hood, there’s a really solid experience built on top of a minimum viable experience which after reading this article, you’ll hopefully apply this methodology to your own work.

What is a minimum viable experience?

The key to progressive enhancement is distilling the user experience to its lowest possible technical solution and then building on it to improve the user experience. In the context of Jotter, that is a humble <textarea> element. That humble <textarea> is our minimum viable experience.

Let me show you how it’s built up, progressively real quick. If you disable CSS and JavaScript, you get this:

This result is great because I know that regardless of what happens, the user can do what they needed to do when the loaded Jotter in their browser: take some notes. That’s our minimum viable experience, completed with a few lines of code that work in every single browser—even very old browsers. Don’t you just love good ol’ HTML?

Now it’s time to enhance that minimum viable experience, progressively. It’s a good idea to do that in smaller steps rather than just provide a 0% experience or a 100% experience, which is the approach that’s often favoured by JavaScript framework enthusiasts. I think that process is counter-intuitive to the web, though, so building up from a minimum viable experience is the optimal way to go, in my opinion.

Understanding how a minimum viable experience works can be a bit tough, admittedly, so I like to use a the following diagram to explain the process:

Let me break down this diagram for both folks who can and can’t see it. On the top row, there’s four stages of a broken-up car, starting with just a wheel, all the way up to a fully functioning car. The car enhances only in a way that it is still mostly useless until it gets to its final form when the person is finally happy.

On the second row, instead of building a car, we start with a skateboard which immediately does the job of getting the person from point A to point B. This enhances to a Micro Scooter and then to a Push Bike. Its final form is a fancy looking Motor Scooter. I choose that instead of a car deliberately because generally, when you progressively enhance a project, it turns out to be way simpler and lighter than a project that was built without progressive enhancement in mind.

Now that we know what a minimum viable experience is and how it works, let’s apply this methodology to Jotter!

Add some CSS

The first enhancement is CSS. Jotter has a very simple design, which is mostly a full height <textarea> with a little sidebar. A flexbox-based, auto-stacking layout, inspired by a layout called The Sidebar is used and we’re good to go.

Based on the diagram from earlier, we can comfortably say we’re in Skateboard territory now.

Add some JavaScript

We’ve got styles now, so let’s enhance the experience again. A user can currently load up the site and take notes. If the CSS loads, it’ll be a more pleasant experience, but if they refresh their browser, they’re going to lose all of their work.

We can fix that by adding some local storage into the mix.

The functionality flow is pretty straightforward. As a user inputs content, the JavaScript listens to an input event and pushes the content of the <textarea> into localStorage. If we then set that localStorage data to populate the <textarea> on load, that user’s experience is suddenly enhanced because they can’t lose their work by accidentally refreshing.

The JavaScript is incredibly light, too:

const textArea = document.querySelector('textarea');
const storageKey = 'text';

const init = () => {

  textArea.value = localStorage.getItem(storageKey);

  textArea.addEventListener('input', () => {
    localStorage.setItem(storageKey, textArea.value);
  });
}

init();

In around 13 lines of code (which you can see a working demo here), we’ve been able to enhance the user’s experience considerably, and if we think back to our diagram from earlier, we are very much in Micro Scooter territory now.

Making it a PWA

We’re in really good shape now, so let’s turn Jotter into a Motor Scooter and make this thing work offline as an installable Progressive Web App (PWA).

Making a PWA is really achievable and Google have even produced a handy checklist to help you get going. You can also get guidance from a Lighthouse audit.

For this little app, all we need is a manifest and a Service Worker to cache assets and serve them offline for us if needed.

The Service Worker is actually pretty slim, so here it is in its entirety:

const VERSION = '0.1.3';
const CACHE_KEYS = {
  MAIN: `main-${VERSION}`
};

// URLS that we want to be cached when the worker is installed
const PRE_CACHE_URLS = ['/', '/css/global.css', '/js/app.js', '/js/components/content.js'];

/**
 * Takes an array of strings and puts them in a named cache store
 *
 * @param {String} cacheName
 * @param {Array} items=[]
 */
const addItemsToCache = function(cacheName, items = []) {
  caches.open(cacheName).then(cache => cache.addAll(items));
};

self.addEventListener('install', evt => {
  self.skipWaiting();

  addItemsToCache(CACHE_KEYS.MAIN, PRE_CACHE_URLS);
});

self.addEventListener('activate', evt => {
  // Look for any old caches that don't match our set and clear them out
  evt.waitUntil(
    caches
      .keys()
      .then(cacheNames => {
        return cacheNames.filter(item => !Object.values(CACHE_KEYS).includes(item));
      })
      .then(itemsToDelete => {
        return Promise.all(
          itemsToDelete.map(item => {
            return caches.delete(item);
          })
        );
      })
      .then(() => self.clients.claim())
  );
});

self.addEventListener('fetch', evt => {
  evt.respondWith(
    caches.match(evt.request).then(cachedResponse => {
      // Item found in cache so return
      if (cachedResponse) {
        return cachedResponse;
      }

      // Nothing found so load up the request from the network
      return caches.open(CACHE_KEYS.MAIN).then(cache => {
        return fetch(evt.request)
          .then(response => {
            // Put the new response in cache and return it
            return cache.put(evt.request, response.clone()).then(() => {
              return response;
            });
          })
          .catch(ex => {
            return;
          });
      });
    })
  );
});

What the Service Worker does here is pre-cache our core assets that we define in PRE_CACHE_URLS. Then, for each fetch event which is called per request, it’ll try to fulfil the request from cache first. If it can’t do that, it’ll load the remote request for us. With this setup, we achieve two things:

  1. We get offline support because we stick our critical assets in cache immediately so they will be accessible offline
  2. Once those critical assets and any other requested assets are cached, the app will run faster by default

Importantly now, because we have a manifest, some shortcut icons and a Service Worker that gives us offline support, we have a fully installable PWA!

Wrapping up

I hope with this simplified example you can see how approaching web design and development with a progressive enhancement approach, everyone gets an acceptable experience instead of those who are lucky enough to get every aspect of the page at the right time.

Jotter is very much live and in the process of being enhanced further, which you can see on its little in-app roadmap, so go ahead and play around with it.

Before you know it, it’ll be a car itself, but remember: it’ll always start as a humble little <textarea>.


About the author

Andy Bell is an independent designer and front-end developer who’s trying to make everyone’s experience on the web better with a focus on progressive enhancement and accessibility.

More articles by Andy




&

Power to the people: how open technological innovation is arming tomorrow's terrorists / Audrey Kurth Cronin

Dewey Library - U39.C76 2020




&

Also serving time: Canada's provincial and territorial correctional officers / Rosemary Ricciardelli

Dewey Library - HV9506.R53 2019




&

No visible bruises: what we don't know about domestic violence can kill us / Rachel Louise Snyder

Dewey Library - HV6626.2.S59 2019




&

Shadows of doubt: stereotypes, crime, and the pursuit of justice / Brendan O'Flaherty, Rajiv Sethi

Online Resource




&

Monsters to destroy: understanding the "War on Terror" / Navin A. Bapat

Dewey Library - HV6432.B364 2019




&

Assessment of the in-house laboratory independent research at the Army's Research, Development, and Engineering Centers / Army Research Program Review and Analysis Committee, Division on Engineering and Physical Sciences

Online Resource




&

The suspect: an Olympic bombing, the FBI, the media, and Richard Jewell, the man caught in the middle / Kent Alexander & Kevin Salwen

Dewey Library - HV8079.B62 A44 2019




&

We are indivisible: a blueprint for democracy after Trump / Leah Greenberg and Ezra Levin ; [foreword by Marielena Hincapié]

Dewey Library - JC423.G74 2019