<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nathan Pasko</title>
    <description>The latest articles on DEV Community by Nathan Pasko (@sprite421).</description>
    <link>https://dev.to/sprite421</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F274483%2F10e4c842-f6a9-48c5-88c8-e258d907f37d.png</url>
      <title>DEV Community: Nathan Pasko</title>
      <link>https://dev.to/sprite421</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sprite421"/>
    <language>en</language>
    <item>
      <title>I'm Making a New V. Pet</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Mon, 12 Jul 2021 18:50:02 +0000</pubDate>
      <link>https://dev.to/sprite421/i-m-making-a-new-v-pet-585e</link>
      <guid>https://dev.to/sprite421/i-m-making-a-new-v-pet-585e</guid>
      <description>&lt;p&gt;The rumors are true.... I'm making a new virtual pet! Last time around, I made &lt;a href="https://avknights.itch.io/s-pet"&gt;S. Pet&lt;/a&gt;, a retro v. pet inspired by Tamagotchi, Digimon, and the v. pets of my childhood. Someday I'd love to make a pet that's a physical, pocket-sized toy, but S. Pet was native to Android, and my new pet, called &lt;strong&gt;G. Pet&lt;/strong&gt;, is in development for Mac, Windows, and Linux.&lt;/p&gt;

&lt;p&gt;G. Pet, like its predecessor, is inspired by old toys and rendered in a retro video game style. G. Pet uses a &lt;a href="https://github.com/pastasfuture/com.hauntedpsx.render-pipelines.psx"&gt;PSX-style pipeline&lt;/a&gt; and features 3D graphics and even &lt;strong&gt;physics&lt;/strong&gt;. Watch your pet walk around the stage, drop in a boombox with five original tracks, plus push it all around with Unity physics (you can push your pet's poop, too). Another big distinction for G. Pet is that each pet will be sold as an individual adoption. Everybody will have a pet unique to them (DRM-free, of course). For now, G. Pet is in free alpha, and everybody can get a behind-the-scenes peek via George the giraffe/tortoise thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ttZR-d_m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/feoje1yvssr0a0wepijn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ttZR-d_m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/feoje1yvssr0a0wepijn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've already pushed a few rounds of updates on itch.io. You can read more about the early development on the &lt;a href="https://avknights.itch.io/g-pet/devlog"&gt;devlog over there&lt;/a&gt;. Now I'm starting a new series for G. Pet stuff here on Dev; it might turn into reposts of the devlog at itch.io, or it might be more like digests or ruminations on the process. Not sure yet! Thanks for tuning in though, and don't forget to &lt;a href="https://avknights.itch.io"&gt;download the G. Pet alpha here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>My First Year with React</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 16 May 2021 14:55:00 +0000</pubDate>
      <link>https://dev.to/sprite421/my-first-year-with-react-2p0j</link>
      <guid>https://dev.to/sprite421/my-first-year-with-react-2p0j</guid>
      <description>&lt;p&gt;Around this time last year, I was focused more on JavaScript and HTML than any front end framework. I had spent some time learning Angular, but I was also several months removed from working on any Angular project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learning React
&lt;/h1&gt;

&lt;p&gt;So around this time I finally gave in and started learning &lt;strong&gt;React&lt;/strong&gt;. My first impression was actually less related to the framework and more to the quality of the React introductory tutorial. I was surprised how easy it was to read and understand.&lt;/p&gt;

&lt;p&gt;As I toured through the different areas of the framework, that feeling just expanded to encapsulate how I felt about React on the whole. I love the straightforwardness that seems to permeate React's design.&lt;/p&gt;

&lt;h1&gt;
  
  
  Class Components
&lt;/h1&gt;

&lt;p&gt;One thing I was reading about in the documentation but not quite understanding: &lt;strong&gt;Hooks&lt;/strong&gt;. Maybe it was the terminology, the explanation, or maybe I just needed more time to wrap my head around everything, but I wasn't sure exactly what I was looking at with Hooks. So I started writing &lt;strong&gt;class components&lt;/strong&gt;. This was great in and of itself because even though the docs made it clear that Hooks were the new thing, the docs made it just as clear that they were an optional enhancement to the React framework. I was simply encouraged to come back and check out Hooks when I was ready.&lt;/p&gt;

&lt;p&gt;Instead I focused on what seemed the older, more stable core of React. &lt;strong&gt;I got my footing and then shipped my first React app about four months later.&lt;/strong&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  Learning Hooks
&lt;/h1&gt;

&lt;p&gt;Sometime after the launch that project, after I'd had some time to rest, I found myself getting ready to start a new side project (built on React, since I was fascinated). Checking something on Stack Overflow, I saw a comment that reminded me of React Hooks. Finally I doubled back to the React docs to get a clear idea of what those durn Hooks were.&lt;/p&gt;

&lt;p&gt;What can I say? I love em. Writing all &lt;strong&gt;functional components&lt;/strong&gt; and using a retooled &lt;strong&gt;State&lt;/strong&gt; save me code (and clutter). Everything feels lighter on its feet; more streamlined. Maybe I can't truly wish that I'd employed Hooks from the beginning—since their depiction as &lt;strong&gt;optional&lt;/strong&gt; was part of the welcoming, practical air that drew me in—but I do feel that Hooks have been a huge improvement to the way I work with React.&lt;/p&gt;

&lt;h1&gt;
  
  
  One Year Anniversary
&lt;/h1&gt;

&lt;p&gt;It's been about a year since I started messing around with React, and I like the framework quite a lot. Its popularity led to the release of so many helpful packages, and that goes a long way. Its popularity also makes it easier to learn because there are more people asking and answering questions online, more people creating more learning resources for more people of different learning styles. Today I'm still maintaining React apps for a couple clients, but if I were to start a new side project right now, I might reach for a more lightweight framework. That'd be more out of curiosity than anything else. Like anything you practice regularly for a year, it's easy for me write with React brain right now. Maybe in another year's time, I'll be hooked on a different framework.&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Should only the app toolbar use h1?</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Fri, 12 Mar 2021 14:01:21 +0000</pubDate>
      <link>https://dev.to/sprite421/should-only-the-app-toolbar-use-h1-45c8</link>
      <guid>https://dev.to/sprite421/should-only-the-app-toolbar-use-h1-45c8</guid>
      <description>&lt;p&gt;Every day I ask myself.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Pokémon + Dev ?</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 28 Feb 2021 18:24:56 +0000</pubDate>
      <link>https://dev.to/sprite421/pokemon-dev-5dl1</link>
      <guid>https://dev.to/sprite421/pokemon-dev-5dl1</guid>
      <description>&lt;p&gt;Any other devs out there celebrating the 25th anniversary of the Pokémon games? A little bit of childhood nostalgia is going a long way for me this weekend. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what’s your favorite Pokémon-related dev tool?&lt;/strong&gt; Mine’s gotta be &lt;a href="https://www.npmjs.com/package/pokemon"&gt;this Node package &lt;strong&gt;pokemon&lt;/strong&gt;&lt;/a&gt;. I like to use it to generate text when I get tired of lorem ipsum. No, it’s not coherent, but it makes me chuckle during those prototyping long hauls. &lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Discovering the WebAudio API &amp; Making a Simple Synth</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 21 Feb 2021 17:54:07 +0000</pubDate>
      <link>https://dev.to/sprite421/discovering-the-webaudio-api-making-a-simple-synth-2l5g</link>
      <guid>https://dev.to/sprite421/discovering-the-webaudio-api-making-a-simple-synth-2l5g</guid>
      <description>&lt;p&gt;I work primarily as a web developer, but you might not know that I'm also a musician. I have a special appreciation for the creativity found in experimental electronic music. Recently I was curious about where audio tools for the web were at, and &lt;strong&gt;I was impressed by the HTML &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; element, though I ran up against what I considered a pretty big shortcoming: it can't loop seamlessly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's what led me the &lt;strong&gt;WebAudio API&lt;/strong&gt;. It's an API intended for people like me who have a little background in messing with sound and I had no idea it was out there. I quickly learned how to repeat an audio clip without the interruption in the loop provided by the standard &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; element, and in the process I did some reading about WebAudio's other capabilities.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Few WebAudio Offerings
&lt;/h1&gt;

&lt;p&gt;WebAudio features a number of different types of audio sources; in the documentation I noticed an oscillator type and I was inspired to see what kind of &lt;strong&gt;web-based synthesizer&lt;/strong&gt; I could make with the WebAudio API. My goal wasn't to make something with a keyboard for playing pop music, but something simpler, more suited to creating &lt;strong&gt;atmosphere&lt;/strong&gt; or sound effects.&lt;/p&gt;

&lt;p&gt;WebAudio uses a metaphor carried over from physical sound equipment that describes the flow of audio through a number of nodes &lt;strong&gt;connected&lt;/strong&gt; in a designated order. In JavaScript, I set up a couple oscillator nodes and connected them to the WebAudio destination; it felt like the JavaScript equivalent of &lt;strong&gt;plugging instruments and effects units into a mixer&lt;/strong&gt;. I added some other nodes like &lt;strong&gt;gain&lt;/strong&gt; nodes to control volume at different points in the "circuit", and &lt;strong&gt;convolution&lt;/strong&gt; nodes to add reverb.&lt;/p&gt;

&lt;p&gt;The controls for the synth? Simple HTML &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements. I was absolutely tickled to learn that a &lt;strong&gt;range input&lt;/strong&gt; would stand in for a &lt;strong&gt;potentiometer&lt;/strong&gt; in this WebAudio world. One of the reasons I left my synth visually unstyled is to emphasize the webbiness of it all—playing sounds involves yanking a bunch of browser-default sliders around and selecting from dropdown  menus. It brings a smile to my face.&lt;/p&gt;

&lt;h1&gt;
  
  
  Introducing Dulce Baby
&lt;/h1&gt;

&lt;p&gt;The final features of my synth, the &lt;a href="//nathanpasko.com/dulcebaby"&gt;Dulce Baby&lt;/a&gt;, include one oscillator with variable waveform, coarse tone control, and volume control, another oscillator that plays a drone and fine tone control, and a master gain for overall volume. The drone options are frequencies borrowed from Cousto's &lt;em&gt;The Cosmic Octave:&lt;/em&gt; they're the frequencies of the planets in our solar system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wn4nCiud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmnbldfoyqu4dtnesn4x.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wn4nCiud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmnbldfoyqu4dtnesn4x.PNG" alt="my web-based synthesizer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Time to Explore
&lt;/h1&gt;

&lt;p&gt;Overall the WebAudio API is a very exciting discovery for me. It's inspired this start to a new series about experimenting with WebAudio. Today I haven't shown much process or code, but in the future this series will delve more into the nitty gritty. Read along for some creative coding and non-visual web design!&lt;/p&gt;

</description>
      <category>html</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Happy Valentines Day</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 14 Feb 2021 14:41:35 +0000</pubDate>
      <link>https://dev.to/sprite421/happy-valentines-day-4p5a</link>
      <guid>https://dev.to/sprite421/happy-valentines-day-4p5a</guid>
      <description>&lt;p&gt;Happy Valentines Day, devs!&lt;/p&gt;

&lt;p&gt;I’m taking this week off from blogging because it’s been a busy one. Got a big project to announce soon, so see you then!&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>How to Check Whether a  Device Supports Hover with a CSS Media Query</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 07 Feb 2021 19:00:02 +0000</pubDate>
      <link>https://dev.to/sprite421/how-to-check-whether-a-device-supports-hover-with-a-css-media-query-4bh5</link>
      <guid>https://dev.to/sprite421/how-to-check-whether-a-device-supports-hover-with-a-css-media-query-4bh5</guid>
      <description>&lt;p&gt;This series is all about &lt;strong&gt;expanding our definition of responsive web design&lt;/strong&gt; beyond the commonly-held starting point of handling different screen sizes. Similar to our &lt;a href="https://dev.to/sprite421/how-to-write-css-for-both-light-dark-display-modes-4bok"&gt;discussion of automatically responding to devices' light/dark display settings&lt;/a&gt;, today we'll once again use a CSS media query to respond to the context presented by client devices.&lt;/p&gt;

&lt;h1&gt;
  
  
  Interactivity &amp;amp; Hover
&lt;/h1&gt;

&lt;p&gt;Hover effects are important! We know we should &lt;strong&gt;never&lt;/strong&gt; hijack the cursor icon to highlight interactive UI elements like buttons. That compromises the spec and has snowballing accessibility complications. Finding another way to &lt;strong&gt;communicate interactivity&lt;/strong&gt; will help users navigate our interfaces effortlessly, so let's use CSS to make our hover effects smarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;What makes hover effects tricky is the difference between devices with traditional mouse-like pointers, and devices with touch input like smart phones. We don't really have the same continuous pointer input on a touch device that we do when using a mouse, but a site's design should still communicate what elements are interactive.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Solution
&lt;/h2&gt;

&lt;p&gt;Today let's solve this problem by communicating interactivity with color. Users with a mouse-like pointer will be able to test an element's interactivity by hovering over it. When they hover, interactive elements will be highlighted with a bright background color. Touch device users won't have that opportunity to hover, so we'll set interactive elements to have the highlighted background color at all times.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Detect Hover Support in CSS
&lt;/h1&gt;

&lt;p&gt;Let's build a basic example to test our solution. We can start with a blank HTML page. We'll add some CSS styles shortly, but first we'll give ourselves an interactive element to play with: a button.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt;Button&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buttons are familiar in function but they take many different forms, so it's important to communicate visually that they're interactive. We'll use a &lt;strong&gt;yellow background&lt;/strong&gt; to indicate interactivity.&lt;/p&gt;

&lt;p&gt;Like usual, we'll write our stylesheet to default to mobile device styles, and use media queries to make changes in styles for other devices. So let's start by styling &lt;code&gt;button&lt;/code&gt; to have the yellow background associated with interactivity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll use the &lt;code&gt;hover&lt;/code&gt; media feature in a query to test whether hover is supported by the client device. Let's add this media query to our stylesheet so that we can apply styles for hover-capable devices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the capability to hover over buttons will override the default button styles and allow users to test interactivity by hovering. It's that easy! Sad to say I went years without using this helpful media query and was stymied by my hover styles predicament the whole time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;em&gt;Note!&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The &lt;code&gt;hover&lt;/code&gt; media feature can report either &lt;code&gt;hover&lt;/code&gt; or &lt;code&gt;none&lt;/code&gt;. Devices capable of hover report &lt;code&gt;hover&lt;/code&gt;, and devices incapable of hover report &lt;code&gt;none&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Get Out There and Use It
&lt;/h1&gt;

&lt;p&gt;This kind of responsiveness is a big deal. I think it's the &lt;strong&gt;highest priority&lt;/strong&gt; responsiveness technique we've talked about in this series. It's tied into the rampant &lt;strong&gt;misuse&lt;/strong&gt; of the cursor icon reserved for hovering over hyperlinks 👆 and results in a spec-friendly fix to the problem of communicating interactivity. Oh, &lt;code&gt;@media (hover)&lt;/code&gt;, where have you been all my life?&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Check the Current Time with JavaScript</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 31 Jan 2021 19:22:08 +0000</pubDate>
      <link>https://dev.to/sprite421/how-to-check-the-current-time-with-javascript-2e55</link>
      <guid>https://dev.to/sprite421/how-to-check-the-current-time-with-javascript-2e55</guid>
      <description>&lt;p&gt;This series is all about expanding our definition of responsive design. At its core, responsiveness is all about adapting a design to its context, but that context can mean a lot more than a device's screen size; we're brainstorming to respond to light &amp;amp; dark display modes, location, and now, the current time and date.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Date Object
&lt;/h1&gt;

&lt;p&gt;JavaScript has a built-in type called &lt;strong&gt;Date&lt;/strong&gt; that encapsulates &lt;strong&gt;a moment in time&lt;/strong&gt;. Date objects also have built-in methods to manipulate them, but even so, the JavaScript Date object is considered a bit broken by our community. It can be difficult to use, but I've seen promising alternatives on the horizon, and for our purposes today we can stick to Date's most basic features.&lt;/p&gt;

&lt;p&gt;Let's build up an example web page to demonstrate &lt;strong&gt;how to make a design respond to the current time&lt;/strong&gt;. All we need to start is a fresh HTML page.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Check the Current Time and Date in JavaScript
&lt;/h1&gt;

&lt;p&gt;In JavaScript a constructor is a special function that creates a new instance of a class. By using the &lt;strong&gt;basic Date constructor&lt;/strong&gt;, we can get a Date object representing the &lt;strong&gt;current time&lt;/strong&gt;. We can use &lt;code&gt;console.log()&lt;/code&gt; to try it out; we'll log the time that we refresh the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use Date constructor to get current time&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since a Date object encapsulates so much data, all describing a single moment, Date provides a number of functions that we can use to grab a single slice of that data. For example, &lt;code&gt;Date.getMinutes()&lt;/code&gt; and &lt;code&gt;Date.getHours()&lt;/code&gt; will return just the minutes or hours values of the Date object respectively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get just the hours or just the minutes&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Use a colon to log a clock-like readout&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll make use of &lt;code&gt;Date.getHours()&lt;/code&gt; in particular to demonstrate a time-based responsive design.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Write a Simple Responsive Design Using Time
&lt;/h1&gt;

&lt;p&gt;Let's use JavaScript and CSS together to create a responsive design using Date. &lt;strong&gt;We'll change the background color of the page in accordance with he current time of day.&lt;/strong&gt; First things first: let's give ourselves a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; called &lt;code&gt;#container&lt;/code&gt; to ensure we have control over the page background. We'll add some CSS styles to the container in a moment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Morning, afternoon, evening, and night&lt;/strong&gt; will each have their own corresponding background color. Our approach will be to check the current time upon page load, use &lt;code&gt;Date.getHours()&lt;/code&gt; to infer which time period we're currently in, and then set the answer to a data attribute in order to apply the correct styles. &lt;/p&gt;

&lt;p&gt;In our stylesheet, we'll first guarantee the container &lt;strong&gt;fills the page&lt;/strong&gt; for visual effect, and then we'll write style &lt;strong&gt;rules that hinge on an attribute called &lt;code&gt;data-time&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;#container&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"morning"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;pink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;#container&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"afternoon"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;aqua&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;#container&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"evening"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;#container&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-time&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"night"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back in our JavaScript, we need a reference to our container element, so we'll declare that. Now we'll add a small &lt;strong&gt;array&lt;/strong&gt; of data that describes the &lt;strong&gt;four times of day&lt;/strong&gt; that we want to work with, including their start and end.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Grab container element&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Times of day data&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;morning&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;afternoon&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;evening&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;night&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That array of times of day will help us figure out what time  we're currently in. Let's use a variable called &lt;code&gt;currentTime&lt;/code&gt; to hold the current time of day. Because of the way night wraps around multiple days, complicating the logic, let's set the default value for &lt;code&gt;currentTime&lt;/code&gt; to night.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use times array to default time to night&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using night as our default value will let us write simpler code checking just the other three times of day.&lt;/p&gt;

&lt;p&gt;Finally, we'll write a &lt;strong&gt;&lt;code&gt;for&lt;/code&gt; loop&lt;/strong&gt; to complete the example. Since we have night set as our default time, we only need to iterate through the first three objects in our &lt;code&gt;times&lt;/code&gt; array. To find the correct time of day we'll compare the hours value of our Date object to the start and end times of each time of day. The &lt;strong&gt;hours&lt;/strong&gt; value will be &lt;strong&gt;greater than or equal to the start value&lt;/strong&gt; of the current time of day, and &lt;strong&gt;less than its end value&lt;/strong&gt;. Our &lt;code&gt;for&lt;/code&gt; loop will iterate through the data in our array, and when it reaches the correct time of day, it will store the answer in &lt;code&gt;currentTime&lt;/code&gt; and set our container div's &lt;code&gt;data-time&lt;/code&gt; attribute accordingly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Grab hours from Date object&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Iterate through times of day&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// If this time of day matches&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hours&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;hours&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Store correct time of day&lt;/span&gt;
    &lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="c1"&gt;// Communicate time of day to styles via data attribute&lt;/span&gt;
    &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have a basic responsive design that reflects the time of day! When we reload the page, the container's background color sets itself accordingly.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;The example above proves how simple it can be to respond to current time in our designs. Responsiveness based on screen size is everywhere now, but &lt;strong&gt;other kinds of responsive design&lt;/strong&gt; are more scarce. Let's take our expanded definition of responsiveness out into the world and create more interactive designs!&lt;/p&gt;

&lt;p&gt;A note about the JavaScript Date object before we go. The Date object was sufficient for today's example, but it can be difficult to work with when we get more in depth. There are alternatives out there; &lt;a href="https://momentjs.com"&gt;&lt;strong&gt;moment&lt;/strong&gt;&lt;/a&gt; has proven to be a mainstay and it's so easy to use that I think it's &lt;a href="https://momentjs.com/docs/#/parsing/"&gt;worth a look&lt;/a&gt;. I think there's great value in familiarizing oneself with vanilla JavaScript's many features (I recently penned a &lt;a href="https://dev.to/sprite421/series/9508"&gt;series of examples&lt;/a&gt; of jQuery operations written in vanilla JS), but Date is often the first exception to that rule that I make in any project. Sometime last year I read about a promising proposal for a replacement for Date called &lt;strong&gt;Temporal&lt;/strong&gt; which probably deserves some attention. All of this is to say that Date can be tricky, and while I usually prefer to paint JavaScript as a forgiving language for beginners, Date is a place where I don't think there's any shame in acknowledging the off-putting implementation provided by vanilla JavaScript. &lt;/p&gt;

&lt;p&gt;Though the state of date and time in JavaScript is complicated, the main idea behind this article is to expand what we think about when we consider the term "responsive." If you were following along with the code, you felt how quick and easy it is to tap into the current time and date. Let these ideas percolate and see what new kinds of responsive designs you're able to create!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>css</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Check a User's Location with JavaScript</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 24 Jan 2021 17:35:41 +0000</pubDate>
      <link>https://dev.to/sprite421/how-to-check-a-user-s-location-with-javascript-142b</link>
      <guid>https://dev.to/sprite421/how-to-check-a-user-s-location-with-javascript-142b</guid>
      <description>&lt;p&gt;This little series is all about expanding our definition of "responsive design" to consider more than just screen size. Last time we talked about using CSS media queries to automatically shift between light and dark display modes. Today, let's talk about another part of the environment we can respond to: the user's location.&lt;/p&gt;

&lt;h1&gt;
  
  
  Location-Based Responsiveness
&lt;/h1&gt;

&lt;p&gt;Responsiveness is all about embracing the &lt;strong&gt;context&lt;/strong&gt; that surrounds our users and their devices. The most urgent responsive concerns are undoubtedly the wide variety of screen sizes that those devices might employ, but there's a lot more context beyond screen size that designers can respond to. &lt;strong&gt;What if our responsive designs could respond not just to screen size, but to the user's location as well?&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Geolocation
&lt;/h1&gt;

&lt;p&gt;To achieve this, we can use the &lt;strong&gt;Geolocation API&lt;/strong&gt;. This API is available only in secure contexts—HTTPS—in some supporting browsers, and yet it provides a super easy way to read a device's location. Today we'll look at two different geolocation approaches: one to check location a single time, and one to watch location continuously.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Get the User's Location Once
&lt;/h2&gt;

&lt;p&gt;Let's start with a blank HTML page to try getting device location. We'll just add a button that will trigger the location check. Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"get-location"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Get Location&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We want to be able to click this button and &lt;strong&gt;get location data in the console&lt;/strong&gt;. To achieve this, we'll write three JavaScript functions. The first is the function we'll stick to our button via event listener. We can access the Geolocation API at &lt;code&gt;navigator.geolocation&lt;/code&gt;. Inside our first function, we'll check whether the Geolocation API is supported by testing &lt;code&gt;navigator.geolocation&lt;/code&gt;, and if it is supported, we can get our location data using &lt;code&gt;navigator.geolocation.getCurrentPosition()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getLocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;geolocation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Geolocation API not supported by this browser.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Checking location...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;geolocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCurrentPosition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Geolocation API provides &lt;code&gt;getCurrentPosition()&lt;/code&gt; so we can quickly locate users. This function will get the job done quite easily, but you might have noticed that it &lt;strong&gt;expects two arguments&lt;/strong&gt;, called &lt;code&gt;success&lt;/code&gt; and &lt;code&gt;error&lt;/code&gt; in this example. These are the two other functions we need to write.&lt;/p&gt;

&lt;p&gt;The first argument should be a function to call if geolocation is &lt;strong&gt;successful&lt;/strong&gt;. We need to carve out an argument in this function, too; this argument is called &lt;code&gt;position&lt;/code&gt; and it's how the browser will pass the geolocation results back to us.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;error()&lt;/code&gt; function will only be called if the &lt;strong&gt;geolocation fails&lt;/strong&gt;. Hopefully we won't even hit this function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Geolocation error!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't forget to attach &lt;code&gt;getLocation()&lt;/code&gt; to the button by adding a click event listener!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get-location&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getLocation&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have all the JavaScript we need to grab some location data. If we try it out by clicking the Get Location button, it'll ultimately result in a GeolocationPosition object being printed in the console. This object is a packet of the &lt;strong&gt;results from our geolocation check&lt;/strong&gt;. Its keys include a timestamp and another object called &lt;code&gt;coords&lt;/code&gt; that contains data like latitude, longitude, and so on. &lt;strong&gt;The data found in &lt;code&gt;coords&lt;/code&gt; is what we can work with to create a responsive design that consider's the user's location.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can use the console to poke around the &lt;code&gt;coords&lt;/code&gt; object or we can directly log values from &lt;code&gt;coords&lt;/code&gt; to the console in &lt;code&gt;success()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Latitude:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Longitude:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;em&gt;Note!&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Latitude traditionally precedes longitude. If you explore location APIs on the web you might see latitude and longitude out of order, but just remember they should usually appear in alphabetical order!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Continuously Watch the User's Location
&lt;/h2&gt;

&lt;p&gt;Instead of getting the user's location once, we can also watch their location continuously. Using the &lt;code&gt;watchPosition()&lt;/code&gt; function we can set up a handler function that will be called each time geolocation updates. We need to pass in a function to call when a new location is successfully returned, so let's reuse our &lt;code&gt;success()&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;This example is pretty easy to set up for our purposes. We can just add one line of JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;geolocation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;watchPosition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can continuously get location data! This comes with the processing, data, and energy overhead that you'd expect, but maybe you're as pleased as I was to learn how simple it is to start working with the Geolocation API.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Word of Caution
&lt;/h1&gt;

&lt;p&gt;This series offers practical examples illustrating how to add different kinds of responsiveness, but it's also a conversation starter; a brain teaser. It's worthwhile to look at a user's location as part of the context they bring to our app or website, especially as a mental exercise, but devices will need to get permission to check location, and this will prove a UX wrinkle.&lt;/p&gt;

&lt;p&gt;It's really not a good idea for our users to be faced with a dialog in the browser immediately upon arriving at our site, however the kind of location-based responsiveness that we used as an example above will trigger those dialogs to get permissions for the location check. That's not ideal. Putting this stuff into practice will require a more thoughtful approach, or at least the deferral of location responsiveness away from the initial landing experience. Nevertheless, I think you'll find the expansion of the commonly held definition of responsiveness to include location is an exciting addition to your web design playbook. &lt;/p&gt;

</description>
      <category>html</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Is Angular Dead?</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 17 Jan 2021 21:55:56 +0000</pubDate>
      <link>https://dev.to/sprite421/is-angular-dead-56d5</link>
      <guid>https://dev.to/sprite421/is-angular-dead-56d5</guid>
      <description>&lt;p&gt;It's been almost two years since I've used Angular. The last thing I used it for is a web app that is likely to be revived this year. It feels like I haven't heard much about Angular these past couple years, and I know I've seen complaints about the latest updates to the framework slide across my feed. &lt;/p&gt;

&lt;p&gt;So is Angular still in the ring? Should I polish up my ng skills and bring old projects up to speed? Or should I keep learning React like I was throughout 2020 and let Angular drift away?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>How to Write CSS for Both Light &amp; Dark Display Modes</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Sun, 10 Jan 2021 21:52:30 +0000</pubDate>
      <link>https://dev.to/sprite421/how-to-write-css-for-both-light-dark-display-modes-4bok</link>
      <guid>https://dev.to/sprite421/how-to-write-css-for-both-light-dark-display-modes-4bok</guid>
      <description>&lt;p&gt;This is the beginning of a little series about responsive design and some cool new ways to make your web projects—sites, apps, games—more responsive. In this article we'll check out a quick and easy way to use CSS media queries to check if the client device is using light or dark display mode, and set different styles for light and dark.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Light/Dark Mode Shifting is Cool
&lt;/h1&gt;

&lt;p&gt;Responsive web design has accelerated to meet the needs of an ecosystem full of different web-capable devices. Designers no longer take screen sizes for granted, so the web has become more fluid as designers create sites that adapt to context. Responsiveness dovetails with the industry standardization of "&lt;strong&gt;Dark Mode&lt;/strong&gt;"—that is, the capability of your OS to switch between a light- or dark-toned UI.&lt;/p&gt;

&lt;p&gt;I was converted to Dark Mode fandom when I discovered I could set my phone and laptop to switch &lt;strong&gt;automatically&lt;/strong&gt; from light to dark at sunset (and back to light at sunrise).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tapping into users' light/dark mode setting and presenting a version of our site to match is another powerful form of responsiveness.&lt;/strong&gt; From a design standpoint, an OS with these display features is an invitation to create more fluid images and brand identities; the proliferation of these features &lt;strong&gt;encourages designers to express the same identity using multiple color schemes&lt;/strong&gt;, where in the past they might've stopped at one. This makes media more comfortable for users and helps images, websites, apps, and brands feel more intelligent and less static.&lt;/p&gt;

&lt;p&gt;We can use a CSS media query to set up alternate styles for when users switch their client device between light and dark display modes. Now our site is responsive not only on a basis of screen size, but a basis of color scheme as well. Remember, responsiveness is all about responding to the context that different users and situations bring to our site.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Use &lt;code&gt;prefers-color-scheme&lt;/code&gt; to Set Styles Specific to Light or Dark Mode
&lt;/h1&gt;

&lt;p&gt;Here's the media query that we can use to tap into the display color scheme, light or dark:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* These styles will be applied only in dark mode */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;light&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* These styles will be applied only in light mode */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, CSS gives us everything we need with media queries. Let's whip up a very basic example to test it out.&lt;/p&gt;

&lt;p&gt;Let's start by making a blank HTML page. We just need to add some text to demonstrate the change from light to dark.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Light vs. Dark&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Testing&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Testing&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similar to the way, in working with screen width, we write base styles assuming a very narrow breakpoint and use media queries to adapt to progressively wider breakpoints, we will write some CSS assuming light mode to start. Then we use the &lt;code&gt;prefers-color-scheme: dark&lt;/code&gt; media query to write corrective styles for dark mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Default styles */&lt;/span&gt;
&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* Black text on a white background */&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Style changes to use in dark mode */&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;/* White text on a black background */&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we use that CSS on our page and then switch between light and dark display modes... voilà!&lt;/p&gt;

&lt;p&gt;This example just inverts text color and background color on our page. That's a basic and pretty common application of light/dark mode responsiveness, but it's pretty useful. Like  the other building blocks of CSS, the possibilities this provides are endless.&lt;/p&gt;

&lt;h1&gt;
  
  
  Go Make Something More Responsive
&lt;/h1&gt;

&lt;p&gt;The changes between light and dark mode can be subtle if diluting a brand or aesthetic is too risky, or they can be drastic, putting full emphasis on readability or low-light operation. Responsive design is all about expanding a design's preparedness and creating opportunities for a more specific and intuitive user experience. Using the &lt;code&gt;prefers-color-scheme&lt;/code&gt; query will help you invest more in your designs and serve users a more engaging experience.&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Any advice on how to get the most out of wireframing?</title>
      <dc:creator>Nathan Pasko</dc:creator>
      <pubDate>Mon, 04 Jan 2021 16:06:20 +0000</pubDate>
      <link>https://dev.to/sprite421/any-advice-on-how-to-get-the-most-out-of-wireframing-16m1</link>
      <guid>https://dev.to/sprite421/any-advice-on-how-to-get-the-most-out-of-wireframing-16m1</guid>
      <description>&lt;p&gt;Does anybody have some advice to share on the wireframing process? What are your tips and tricks to get the most out of wireframing and keep the process focused? I work with a small team of designers and developers and it's time we took more advantage of this practice.&lt;/p&gt;

&lt;p&gt;Thanks devs!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>discuss</category>
      <category>help</category>
    </item>
  </channel>
</rss>
