arts

It Starts With Clients: Your 100-Day Plan to Build Lifelong Relationships and Revenue


 

World-renowned client relationship authority shows you how to dramatically grow your business by mastering fourteen critical client development challenges

Andrew Sobel, author of the international bestsellers Clients for Life and Power Questions, offers a proven,100-day plan for conquering 14 tough client development challenges and growing your client base in any market conditions. He’s encapsulated 25 years of unique research, including personal interviews



Read More...




arts

Podcast: Tracking Zika, the evolution of sign language, and changing hearts and minds with social science

Online news editor Catherine Matacic shares stories on the evolution of sign language, short conversations than can change minds on social issues, and finding the one-in-a-million people who seem to be resistant to certain genetic diseases—even if they carry genes for them.   Nuno Faria joins host Sarah Crespi to explain how genomic analysis can track Zika’s entry date into Brazil and follow its spread.     [Image: r.a. olea/Flickr]




arts

Furiously beating bat hearts, giant migrating wombats, and puzzling out preprint publishing

This week we hear stories on how a bat varies its heart rate to avoid starving, giant wombatlike creatures that once migrated across Australia, and the downsides of bedbugs’ preference for dirty laundry with Online News Editor David Grimm. Sarah Crespi talks Jocelyn Kaiser about her guide to preprint servers for biologists—what they are, how they are used, and why some people are worried about preprint publishing’s rising popularity. For our monthly book segment, Jen Golbeck talks to author Sandra Postel about her book, Replenish: The Virtuous Cycle of Water and Prosperity. Listen to previous podcasts. [Image: tap10/iStockphoto; Music: Jeffrey Cook]  




arts

The places where HIV shows no sign of ending, and the parts of the human brain that are bigger—in bigger brains

Nigeria, Russia, and Florida seem like an odd set, but they all have one thing in common: growing caseloads of HIV. Science Staff Writer Jon Cohen joins host Sarah Crespi to talk about this week’s big read on how the fight against HIV/AIDS is evolving in these diverse locations. Sarah also talks with Armin Raznahan of the National Institute of Mental Health in Bethesda, Maryland, about his group’s work measuring which parts of the human brain are bigger in bigger brains. Adult human brains can vary as much as two times in size—and until now this expansion was thought to be evenly distributed. However, the team found that highly integrative regions are overrepresented in bigger brains, whereas regions related to processing incoming sensory information such as sight and sound tend to be underrepresented.  This week’s episode was edited by Podigy. Listen to previous podcasts. [Image: Misha Friedman; Music: Jeffrey Cook]




arts

Advances in knowledge discovery and data mining : 22nd Pacific-Asia Conference, PAKDD 2018, Melbourne, VIC, Australia, June 3-6, 2018, Proceedings. Parts I-III / Dinh Phung, Vincent S. Tseng, Geoffrey I. Webb, Bao Ho, Mohadeseh Ganji, Lida Rashidi (eds.)

Pacific-Asia Conference on Knowledge Discovery and Data Mining (22nd : 2018 : Melbourne, Vic.)




arts

Practical highcharts with Angular: your essential guide to creating real-time dashboards / Sourabh Mishra

Online Resource




arts

Positive Findings from Year 2 of the Centers for Medicare & Medicaid Services’ Million Hearts® 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.




arts

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




arts

Phailin starts pounding Orissa, Andhra coast

This might be the second biggest evacuation exercise undertaken since 1990, NDMA officials.




arts

Samsung starts taking online pre-orders for TVs, ACs, and other electronics

Consumers pre-booking on Samsung Shop will get 15 per cent cashback when paying with HDFC cards




arts

Sony India starts advanced booking for home audio-video products

Under its 'Stay Home, Stay Safe' programme, Sony is offering discounts and special price offer on its products




arts

Young people, creativity and new technologies [electronic resource] : the challenge of digital arts / edited by Julian Sefton-Green ; foreword by David Puttnam




arts

Zimbabwe's cinematic arts [electronic resource] : language, power, identity / Katrina Daly Thompson

Thompson, Katrina Daly, 1975-




arts

Product :: Data at Work: Best practices for creating effective charts and information graphics in Microsoft Excel




arts

Product :: Data at Work: Best practices for creating effective charts and information graphics in Microsoft Excel




arts

The state & the arts in Singapore : policies and institutions / edited by Terence Chong




arts

Chemistry in Pictures: Our hearts go out to you this Valentine's Day




arts

Coronavirus starts to weigh on industry

Auto manufacturing is the first sector to halt demand for chemicals




arts

Gravitational wave astrophysics: early results from gravitational wave searches and electromagnetic counterparts: proceedings of the 338th symposium of the International Astronomical Union held in Baton Rouge, United States, October 16-19, 2017 / edited b

Hayden Library - QC179.I684 2019




arts

Sony India starts advanced booking for home audio-video products

After 40 days of lockdown, certain business activities like opening of standalone stores and e-commerce delivery of non-essential items have been allowed in green and orange zones (locations with few or no COVID-19 cases).




arts

Trauma and expressive arts therapy [electronic resource] : brain, body, and imagination in the healing process / Cathy A. Malchiodi.

New York : The Guilford Press, [2020]




arts

Pravara Arts Studio presents popular monologues online

Starting from May 9, 24 artistes from the theatre company will present monologues live on social media




arts

Bollywood finds a place in Iranian hearts

Indian films, and Raj Kapoor in particular, have a special place in Iranian cinephilia or cinemadoosti, Ranjita Ganesan discovers on a visit to Iran.




arts

[ASAP] Bioactive Compounds from the Aerial Parts of <italic toggle="yes">Evolvulus linarioides</italic>

Journal of Natural Products
DOI: 10.1021/acs.jnatprod.9b01189




arts

RBI MPC starts meeting to decide new rates amid slowdown, rising inflation

The retail inflation that for several months remained in the comfort zone of the central bank has started inching up and crossed the 7 per cent mark during December 2019




arts

Yogi govt to table Budget 2020-21 on February 18; session starts Thursday

The size of the UP Annual Budget 2020-21 is expected to breach the historic mark of Rs 5 trillion





arts

The ultimate ambition in the arts of erudition: a compendium of knowledge from the classical Islamic world / Shihāb al-Dīn al-Nuwayrī ; edited, translated, and with an Introduction and notes by Elias Muhanna

Rotch Library - AE2.N813 2016




arts

Arts of the east: highlights of Islamic art from the Bruschettini collection / edited by Filiz Çakır Phillip

Rotch Library - N6264.I8 G46 2017




arts

Migrations, arts and postcoloniality in the Mediterranean / Celeste Ianniciello

Rotch Library - N8214.5.M48 I23 2018




arts

A saint in the city: Sufi arts of urban Senegal / Allen F. Roberts and Mary Nooter Roberts ; with Gassia Armenian and Ousmane Gueye

Rotch Library - BP195.M66 R66 2003




arts

Visual arts in Cameroon: a genealogy of non-formal training, 1976-2014 / Annette Schemmel

Rotch Library - N7399.C3 S34 2015




arts

Arts and architectures in the Islamic traditions / K. Prakash Dash

Rotch Library - N6260.D37 2018




arts

Performing the arts of Indonesia: Malay identity and politics in the music, dance and theatre of the Riau islands / edited by Margaret Kartomi

Rotch Library - PN2905.R54 P47 2019




arts

Islamic arts and crafts: an anthology / Marcus Milwright

Rotch Library - N72.S6 M56 2017




arts

The arts of ornamental geometry: a Persian compendium on similar and complementary interlocking figures = Fī tadākhul al-ashkāl al-mutashābiha aw al-mutāwafiqa (Bibliothèque Nationale de France, Ms. Persan 169, fols. 180r-199r): a volume commemoratin

Rotch Library - QA464.A78513 2017




arts

U.S. 1 starts here 'at the end of the rainbow'




arts

Summary of low flow data of the Upper Río Guacimal, measured at the Community Arts Center, Monteverde




arts

The marriage record of Campbell, George W. and Martson, Fannie I




arts

Structural framing starts for the arches of Charles and Edith Ringling Mansion built by George Isenberg Construction




arts

Two men standing beside a sign for Roe'Jer Gifts Tropical Arts




arts

Tampa Sweethearts, a cigar label for the Fuentes and Farina Cigar Company.




arts

Dean of Liberal Arts Russell Cooper




arts

Dean of Fine Arts Harrison Covington




arts

Walkways leading to Fine Arts Building




arts

Dean of Fine Arts John L. Smith




arts

Queen of Hearts parade float at Vinoy Hotel, with people in costume and on bicycles, including children




arts

Roser Park. Looking down creek (brick missing in wall), parts of some houses, foliage




arts

Downtown riverfront & arts development options project




arts

Men with carts and mules working on the Tampa Bay with Tampa's cityscape in the distance