Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

January 18 2020

15:15

Timeless Web Dev Articles

Pavithra Kodmad asked people for recommendations on what they thought were some of the most timeless articles about web development that have changed their perspective in some way. Fun! I'm gonna scour the thread and link up my favorites (that are actually articles, although not all of them are super directly related to web dev).

The post Timeless Web Dev Articles appeared first on CSS-Tricks.

January 17 2020

16:58

18 Best Photoshop Filters All Designers Should Use

Adobe Photoshop has undoubtedly proven to be one of the most efficient photos editing software. It has varied effects and features. However, due to its many customization options, Photoshop can feel a little overwhelming for people with zero or limited experience in photography and editing. However, with practice, you will become more relaxed and comfortable with Photoshop. Even with the wide range of available features that Photoshop has to offer, it can, at times, become redundant or monotonous. To help with that problem, there are some amazing Photoshop Filters that allow innovation in the editing process while they ease the editing process for beginners.

There are many Photoshop filters that one can benefit from. Some of them are free, and some of them charge a premium. However, both kinds are worth the value for money as they change the mood of your picture as per your liking in seconds. Some of the best Photoshop Filters that all designers can benefit from are mentioned below:

1. Old Photo:

old photo

There are two strong ways to create a sense of nostalgia in an image. One is using a sepia overlay; the other is targeting tones and moods of the photo to give it a nostalgic vibe. Old Photo is the ideal free Photoshop Filter for creating a nostalgic and vintage-looking feel to the images. It mainly adjusts the contrast and color aspects of the image to get the right feel. It adds a bit of a greenish-blue tint to the colder regions of the image.

2. Nightmare:

nightmare- Photoshop Filter

As the name suggests, this filter gives the pictures a haunted and dark effect. It is ideal for pictures that are clicked to showcase horror and creepiness in a picture. For instance, it is ideal for Halloween themed picture or a movie poster for a scary movie. It uses a lot of vignette and shadows to give the picture a right look.

3. HDR Tools:

HDR tools- Photoshop Filter

HDR stands for High Dynamic Range. It enhances the picture’s dynamic range in an aspect of Brightness.  This concept adjusts and compensates the light between the lightest and the darkest region of the photograph. HDR tools work similarly. It is a set of four actions that help transform any dull backgrounds for an attractive, detailed photograph. The natural grey tones can be turned to beautiful backgrounds to create a nice contrast with the foreground. This Photoshop filter adds depth and dynamic field to a dull image.

4. Vintage:

Vintage- Photoshop Filter

Vintage is a great Photoshop filter that not only adds a vintage tone to the image but also adds a unique neon effect. Hence it is ideal for images that are meant to convey a back to old times and groovy vibe. For instance, it is ideal for a college reunion poster, where the models can be wearing old fashioned clothes and have this neon effect on top of them.

5. Lithprint:

lithprint photoshop filter

This filter is a great Photoshop filter. It imitates the vintage look that is produced by a black and white lith printing process. However, as compared to other vignette effect filters, this one has more drama in it. It doesn’t only adjust contrast, highlights and shadows to the images; it also adds a gritty texture.

6. ON1 Effects:

This is a great Photoshop filter for easing the process of adding complex effects to an image. It has a wide range of filters for various looks. Some of the filters present in this effect pack are Vignette, HDR look and adjustable contrast. These filters can be used alone for a particular look or also layered on top of each other for more options and moods.

7. Dream Blur:

Dream Blur- Photoshop Filter

Dream Blur is a great filter for creating a subtle dream-like atmosphere. Adding this filter would darken the image, adding a blurry vignette effect around the edges, and increase the saturation level of the image. It is a very subtle yet effective filter that hits the right balance. It doesn’t look overly edited and yet creates the desired look.

8. Dramatic Sepia:

Dramatic Sepia- Photoshop Filter

Adobe Photoshop already has a dedicated filter called Sepia for the classic reddish-brown effect images.  However, Dramatic Sepia tends to do more of a better job when you want the image to have a sense of dynamic range and intensity. It is ideal for anyone who is trying to recreate a nostalgic moment or give the picture a retro era vibe.

9. Comic Oil:

Comic Oil

This is a great Photoshop Filter pack that converts any image into a comic book styled painting. 10 different variations can be easily applied with a single click.  The quality is high enough to be used in web and print media both. The filter comes with an instruction document for easing the process of installing and using. Each layer is editable and customizable.

10. Dessert Dust:

Dessert Dust

Dessert dust is an ideal Photoshop Filter for creating a dry and hot atmosphere in the pictures. It tones down the overall color saturation of any image and gives it a hazy effect. You can apply this filter to the whole image or apply to a specific region and mimic it on the rest of the wanted areas of the image.

11. Underwater Luxe:

underwater luxe- Photoshop filter

This is a great Photoshop filter for underwater photography. Generally, the cameras aren’t optimized for clicking great pictures underwater. They create images with a hazy overlay that reduces the details and sharpness of the image. Underwater Luxe helps to remove this haze, sharpens the image, and also warm-ups the skin tones by removing blue tones specifically from those regions. Such a filter is ideal for editing underwater portrait pictures.

12. Color Pop:

Color Pop

Color Pop is an ideal Photoshop filter for adding life to any washed-out images. It adds a certain contrast and pops to any image.  It enhances the image details and adds punchier effects. The image feels closer to life, and it increases the dynamic range of the image as well. It adds a bit of vignette on the edges of the photo and makes use of shadows as well the highlights. This is ideal for creating an emotional vibe image.

13. Bella:

Bella

Bella is a beautiful Photoshop filter that allows the user to add a certain warmth to their photographs. It brings out the rich tones in skin and hair, also softens the colors with a pink cast effect. The theme is ideal for any romantic, nostalgic feel effect. It softens the image a little, to create a dreamy and lovely effect.

14. 2 Strip Technicolor:

2 strip technicolor

There is nothing better than recreating a major era’s vibe using the 2-strip Technicolor Photoshop filter. It recreates the 2 strip Technicolor film that was popular during the 1920s and 1930s. It used a 2-strip Technicolor film exposed b&w film behind a red and a green filter. The filter merges the blue and green in different layers.

15. Portrait:

portrait

Portrait is a great portrait Photoshop filter that gives any portrait a retro vibe. It desaturates the colors to give the portrait shot a moody vignette look. The filter increases the sharpness and decreases the saturation to achieve this look. It is ideal for portrait photographs that need a bit of an old vibe. For instance, it is ideal for making a grid of cowboy pictures or horse race competitors list.

16. Bold B&W HDR:

bold b&w hdr

This is a great Photoshop filter for applying the HDR-inspired look to Black and White images. It certainly adds a whole new level of depth and dynamic range to a black and white photograph that looks aesthetically appealing. The attention to details and the correct balance between the whites and the blacks make this an interesting filter.

17. Infrared Photo Effect:

infrared

To achieve the right infrared photo effect, you often need to use an infrared film or lens. However, this Photoshop filter is the closest way to providing similar results, in post-production. It helps the user capture a surreal essence of false-colour infrared photography that looks out of the world. The filter is flexible and can turn any normal picture into an interesting one, by its application.

18. Duotone:

duotone

Duotone is a great Photoshop filter to give your photographs a different kind of look. It uses two tones of colors; however, the image still looks colorful. The filter is ideal for creating a rock and punk vibe. It is ideal for rock bands and fans alike. The filter can be used on a rock show invite, banner or website banner image.

There are many advantages of using a filter for editing images on Photoshop:

1. Saves Time:

By using Photoshop filters, you can save massive time in the editing process, as it allows you to have a great start by applying the filter with a single click. If other adjustments need to be made, they are still quick and easy to tweak around. The essential vibe that you want of the image would be set on applying the filter. This proves particularly useful when there are too many photographs to edit and less time.

2. Adds relevant context:

Each Photoshop filter available in the market is made to achieve a specific effect. Hence this makes the filter suitable for a particular niche, and if the brand that is using these filters knows their niche, they can quickly look for filters that complement their niche. This helps create an overall mood board for the brand that helps them connect to the right target audience.

3. Makes editing easier for all:

Generally, people perceive filters to be used by only amateurs who are starting in Photography and editing process. This isn’t true as filters are used by professional photographers and designers as well. These filters are created by people who have mastered the art of editing over the years. Hence it helps the beginners to achieve a professional look in no time. Also, it eases the process of professionals to edit bulk images in batches if they have the same niche or mood.

4. Gives more time for other activities:

If you are a photographer or editor by profession, then it makes sense that you might want to invest time to edit the pictures manually. However, for a business person or a startup that needs to focus on all aspects of business, using photo filters doesn’t only allow the user to edit the photographs with ease, it also gives them time to shift priority and focus on more critical aspects of the business.

5. Non-destructive editing:

This is a great feature that is known to have marked its presence in Adobe Lightroom and Darkroom. However, with filters, there are many filters created in a way to replicate this powerful benefit and implement it in Adobe Photoshop while using that filter. This helps the original image to remain untouched in case applying the filter or making adjustments goes wrong.

These were the 18 Best Photoshop Filters all designers should make use of. Using these filters would help enhance the image, repurpose the image and make all necessary changes to capture a mood of the image that matches the imperative mood of the business/brand. Make use of these filters and create the perfect look for your images.

 

The post 18 Best Photoshop Filters All Designers Should Use appeared first on Line25.

16:35

Eleventy Love

Been seeing a lot of Eleventy action lately. It's a smaller player in the world of static site generators, but I think it's got huge potential because of how simple it is, yet does about anything you'd need it to do. It's Just JavaScript™.

  • Jason Lengstorf and Zach Leatherman did a Learn with Jason episode on it.
  • Reginald Hunt has a big ol' guide on it.
  • Phil Hawksworth has all these starters for it, like EleventyOne and ElevenTail.
  • Andy Bell has Hylia, another starter that's preconfigured with Netlify CMS and a bunch of other goodies.

The post Eleventy Love appeared first on CSS-Tricks.

16:34

Autumn (macOS window manager)

I love how nerdy this is. Autumn allows you to write JavaScript to control your windows. Get this window, move it over here. Nudge this window over. There are all sorts of APIs, like keyboard command helpers and doing things on events, like waking up from sleep.

I love that it exists, but for the moment, my window management mostly consists of: grab this window and chuck it on the left half of the screen, and grab this window and chuck it on the right half of the screen. That and just a handful of other simple things are handled really nicely by Moom.

Doing life tasks with JavaScript is only gonna get bigger and bigger. I love controlling and querying Spotify with GraphQL.

Direct Link to ArticlePermalink

The post Autumn (macOS window manager) appeared first on CSS-Tricks.

14:00

20+ Best Company Profile Templates (Word + PowerPoint)

Creating a company profile brochure or slideshow is a big responsibility. You especially need to pay careful attention to the design, arranging content in a readable and attractive way. These company profile templates can be a huge time-saver!

Designed by professionals, these templates allow you to easily create a company profile brochure or a PowerPoint presentation without having to spend hours on perfecting the design.

We handpicked a collection of the best company profile templates for Word and PowerPoint, to help you create a modern company profile for your business. These templates are all easily customizable to boot.

What Is A Company Profile Template?

A company profile is mainly a document containing a detailed description of a company or a business made to educate customers, investors, and employees. It’s a multi-page document that includes all the details about the company, its mission, services, and more. Company profiles come in various sizes as well.

A company profile template is a template you can use to craft such documents with ease. These templates come fully formatted with paragraphs, columns, shapes, image placeholders, and more to let you easily design company profiles without having to spend hours perfecting the design.

The templates are also easily customizable. You’ll be able to edit pages, change colors, fonts, and replace images to create your own documents with just a few clicks.

Top Pick

Modern Company Profile Word Template

Modern Company Profile Word Template 2

This is the perfect template for crafting a modern and stylish company profile for any business ranging from corporate businesses to creative agencies and more.

The template comes with 28 unique page layouts, which you can easily customize to your preference. It’s available in both US Letter and A4 size as well.

Why This Is A Top Pick

This template comes with a clean and professional design and you can easily edit it using Microsoft Word. As an added bonus, it also includes an InDesign template for editing the template using the Adobe app.

ZENETA – Agency Company Profile Template

This beautiful and modern company profile template is designed for creative agencies in mind. It comes in both MS Word and InDesign file formats. And the template includes 14 unique page layouts you can use to craft a professional company profile brochure.

Multipurpose Company Profile Brochure Template

This is a multipurpose and multi-format company profile template. The template is available in PowerPoint, Keynote, InDesign, Photoshop and more to let you customize the template using any app you want.

ANTARA – Business Profile PowerPoint Template

Antara is a creative PowerPoint template made specifically for crafting presentations for showcasing your business and company. The template includes 30 unique slide layouts in 5 different color schemes to choose from. It also features master slide layouts and image placeholders for easier editing.

Ovizer – Company Profile PowerPoint Template

Ovizer is a professional PowerPoint template that comes with a total of 36 slide designs. This template is also made with businesses in mind. You can easily customize its slides to create an effective presentation to highlight your business or agency.

Beexey – Free Business Profile PowerPoint Template

This is a free business PowerPoint template you can use to create not just company profiles but many other types of professional presentations. It comes with 20 clean and modern slide designs featuring image placeholders and master slides.

Creative Word Company Profile Template

This Word template features a multipurpose design, which will allow you to create brochures for different types of company profiles with ease. The template features 16 professionally designed page layouts and comes in A4 size. You can edit this template using Word and InDesign.

Minimalist Company Profile Word Template

Minimalist design is a great way to showcase professionalism. This simple and clean company profile template will help you achieve that goal. It includes 16 page designs for including company information with easily editable text, colors, and images. The template is available in A4 size.

A5 Landscape Company Profile Template – Word

This Word template comes in A5 size and landscape design. It supports both InDesign and Word so you can easily edit and customize the template using your favorite app. The template is most suitable for creating company profiles for agencies and corporate businesses.

Company Annual Report Word Template

If you’re working on a company profile showcasing the annual progress and the report of the company, this Word template will come in handy. It features 16 page designs in A4 size, specifically crafted for making annual reports and company profiles. It’s available in Word and InDesign file formats.

INDUXTRY – Company Profile Powerpoint Template

This modern and colorful PowerPoint template is perfect for designing an effective company profile for presentations. The template includes 30 unique slide designs that can be easily customized to your preference.

Minimal Company Profile Presentation Template

This PowerPoint template features a clean and minimal design, making it a great choice for designing company profiles for modern businesses and agencies. The template comes with 30 unique slides with master slide designs.

Free Company Brochure Template for Word

This free Word template comes in a half-fold design, which makes it a great template for crafting a simple company profile to briefly summarize your business. It’s available in A3 size.

Free Business Marketing Brochure Word Template

This is a free tri-fold brochure template that comes in multiple formats, including Word, Pages, InDesign, Photoshop, and more. You’ll be able to design a simple company profile brochure using this free template.

Creative Landscape Company Profile Template

A creative company profile template with a landscape design. This template features a highly visual design that will allow you to create a modern and stylish company profile brochure. It can be customized with MS Word and InDesign and the template includes 18 page designs in A4 and US Letter size.

LIBERO – Company Profile PowerPoint Template

Using a PowerPoint presentation to showcase your company profile is a great way to attract attention in meetings and conferences. This premium PowerPoint template will help you create a professional slideshow to present your company profile without an effort. It includes 30 unique slides in 5 different color schemes with image placeholders and editable designs.

Company Profile PowerPoint Template

This PowerPoint template comes with all the necessary slides you’ll need to make an effective company profile presentation. It includes slide designs for detailing company history, clients, objectives, finances, pricing, and much more. The template can be customized with 5 color designs and features a unique infographic as well.

MADDON – Company Profile Powerpoint Template

Maddon is a PowerPoint template that comes with 30 slide designs featuring 5 different color schemes. The template is fully customizable and includes lots of editable graphics, master slides, and image placeholders for easier editing.

Clean Company Profile Presentation Template

Another professional company profile PowerPoint template featuring a clean design. This template also lets you choose from 20 unique slide designs to create all kinds of company profile presentations.

Free Company Profile Powerpoint Presentation

With more than 20 unique slide designs to choose from, this free PowerPoint template will help you design a simple presentation to highlight your company profile. It includes master slide layouts and image placeholders as well.

Free Simple Company Profile PowerPoint Template

A minimal PowerPoint template for crafting modern company profile presentations. This template comes with 20 unique slides with editable shapes and graphics. It’s also free to use.

FALCON – Company Profile Powerpoint Template

Falcon is a creative PowerPoint template that comes with a total of 150 slide designs. You can choose from 5 different color schemes to create professional company profile presentations as well.

SINDE – Business Powerpoint Template

Sinde is a multipurpose PowerPoint template you can use to create all kinds of business presentations, including company profiles. The template includes 30 unique slides in 5 color schemes.

Business Pitch – PowerPoint Template

A great pitch deck is a must-have for presenting a startup or a business at an event or a meeting. This PowerPoint template is designed for creating those slideshows. It includes 30 unique slides with highly visual designs full of images, which you can easily edit and customize using drag and drop image placeholders.

QUANTUM – Company Profile PowerPoint Template

Quantum is another powerful company profile template for making creative and modern slideshows for presenting your business. The template features a fully customizable design featuring a total of 150 slides and includes vector shapes, graphics, and much more.

Experience – PowerPoint Company Profile Template

This minimal and modern PowerPoint template features a complete slide deck you can use to create all kinds of company profiles for various presentations. It comes in 3 different color schemes as well as both dark and light color designs. The slide designs are easily editable as well.

Creative Company Profile PowerPoint Template

This is a creative PowerPoint template that’s most suitable for making company profile slideshows for marketing agencies and businesses. The template comes with a total of 1200 slides featuring 5 different color variations. It’s available in both widescreen and standard sizes.

Informatics – IT Company PowerPoint Template

Informatics is a creative PowerPoint template designed for information and technology-related companies and businesses. The template is fully customizable and allows you to create all kinds of presentations slideshows, including company profiles. It comes with 54 unique slides with editable vector graphics, icons, and more.

AEGIS – Agency PowerPoint Template

Aegis is a company profile PowerPoint template made for small and corporate agencies. The template includes 30 unique slides in HD resolution and allows you to customize the slide designs with ease using its drag and drop image placeholders, editable charts, and other vector elements.

Porto & Profile PowerPoint Template

Porto is a multipurpose company profile PowerPoint template you can use to create both company profiles for corporations as well as to create personal profiles for creative professionals. The template includes 28 unique slides featuring portfolio slides, gallery slides, team profiles, and much more for making beautiful slideshow presentations.

Quin – Clean & Minimal Company Profile PowerPoint

This elegant and clean PowerPoint template features a total of 400 slides, allowing you to choose from 4 different color variations, easily edit images with placeholders, vector shapes, editable illustrations, and much more. This template is perfect for making a minimalist company profile presentation for modern businesses.

Check out our best Word brochure templates collection for more inspiration.

11:30

All Things Smashing: Monthly Update

All Things Smashing: Monthly Update

All Things Smashing: Monthly Update

Iris Lješnjanin
2020-01-17T11:30:00+00:002020-01-17T14:21:46+00:00

We can’t repeat enough how wonderful the web performance community is! There are good folks who help make the web faster, and their efforts matter indeed. With the new year sinking in and everyone’s resolutions still being put to the test, personal goals such as reproducing bugs and fixing issues suddenly become something we all have in common: improving the web for everyone involved.

As various areas of performance become more and more sophisticated and complicated throughout the years, Vitaly refines and updates his front-end performance checklist every year. This guide covers pretty much everything from performance budgets to single-page apps to networking optimizations. It has proved to be quite useful to folks in the past years — anyone can edit it (PDF, MS Word Doc and Apple Pages) and adjust it to their own personal needs or even use it for their organization.

Now, without further ado, let’s see what’s been cooking at Smashing!

Exciting Times: New Smashing Book

The cover of the upcoming Smashing Book named “Ethical Design Handbook”Are you ready for the next Smashing book? Well, just like all the printed books we’ve published, each and every is crafted to deliver in-depth knowledge and expertise shared by experts and practitioners from the industry. The Ethical Design Handbook will not be any different. Written by Trine Falbe, Martin Michael Frederiksen and Kim Andersen, the book will be pre-released late January.

As always, there will be a pre-order discount available. We expect to ship printed hardcover copies late February, but in the meantime, feel free to subscribe to the book mailing list so that you can be one of the first folks to get your hands on the book!

Less Speaking, More Time For Questions

Our SmashingConfs are known to be friendly, inclusive events where front-end developers and designers come together to attend live sessions and hands-on workshops. From live designing to live debugging, we want you to ask speakers anything — from naming conventions to debugging strategies. For each talk, we’ll have enough time to go into detail, and show real examples from real work on the big screen.

A photo of Dan Mall standing on stage explaining code shown on the screen behind him Dan Mall, Brad Frost and Ian Frost coding live on stage at SmashingConf in NYC. (Image credit: Drew McLellan) (Watch video)

If you’re eager not to miss out on one of our SmashingConfs, then early-bird tickets are still available. And if you need a lil’ help convincing your boss to send you to an event, let us know! We’ve got your back. 😉

A Taste Of Smashing… Offscreen

Smashing Podcast moderated by Drew McLellanWe’ve reached our 7th episode of the Smashing Podcast! We’re so proud and thrilled to have our dear friends and colleagues, Drew McLellan and Bethany Andrew, managing the bi-weekly interview show so brilliantly! The feedback has been overwhelmingly positive, and now we’re excited for many more!

Shining The Spotlight On TypeScript

Smashing TVIn less than two weeks (Jan. 29), we’ll be hosting a Smashing TV webinar with Stefan Baumgartner who’ll shed light on what type-checking has in store for folks creating and using the web. TypeScript has been one of the most hyped technologies in 2019 — it’s now time to look beyond the hype!

Mark your calendars and join us at 17:00 London time — we’d love to hear your thoughts and experiences you’ve had in your career.

Trending Topics On SmashingMag

We publish a new article every day on various topics that are current in the web industry. Here are some that our readers seemed to enjoy the most and have recommended further:

Best Picks From Our Newsletter

With the start of a brand-new decade, we decided to start off with topics dedicated to web performance. There are so many talented folks out there working on brilliant projects, and we’d love to spread the word and give them the credit they deserve!

Note: A huge thank you to Cosima Mielke for writing and preparing these posts!

Which Metrics Matter Most?

First Meaningful Paint, Time to Interactive, First Input Delay, SpeedIndex. With so many performance metrics floating around, it’s not easy to strike just the right balance for a project. And most of the time, these metrics alone will be too generic and not precise enough, so we’ll need to complement them with custom ones as well. In small and large companies it’s common to define important pixels in the UI, measure how fast we can start render them, and how quickly we can provide input responsiveness for them.

Every project could benefit from a mix of at least 4 metrics. Time To Interactive (TTI) is the key metrics for understanding how much wait a user has to experience to use the site without a lag. First Input Delay (FID) complements TTI very well as it describes the missing part of the picture: what happens when a user actually interacts with the site.

A graph showing JavaScript fetch, parse, and compile loading phases JavaScript fetch, parse, and compile loading phases (Image credit)

Total Blocking Time (TBT) helps quantify the severity of how non-interactive a page is prior to it becoming reliably interactive. And Cumulative Layout Shift (CLS) highlights how often users experience unexpected layout shifts (reflows) when accessing the site. All these metrics will appear in Lighthouse v6 as it starts rolling out in 2020.

Additionally, you can look into FrustrationIndex that looks at the gaps between metrics instead of looking at them individually, ad weight impact and Component-Level CPU costs. Note that First Meaningful/Contentful Paint are being replaced with Largest Contentful Paint, and the role of SpeedIndex has decreased with new metrics showing up.

The Impact Of Performance Optimization

It’s no secret that performance has a direct impact on user experience and business metrics and that sometimes, even a seemingly small web performance optimization like shaving off a few milliseconds load time can lead to a better conversion rate. To demonstrate this impact, WPO Stats collects case studies and experiments from products and e-commerce sites — stories of successes and of things that went wrong. Inspiring!

UX Speed Calculator An open-source visualization tool that helps explain the relationship between page speed, conversion and bounce rates. (Image credit)

To support your performance optimizations with some hard figures and help you better grasp their impact, Sergey Chernyshev built the UX Speed Calculator. It lets you see how speed distribution, error rate, bounce rate, and conversion rate intertwine for the values you enter. A handy little helper.

Automatically Compress The Images In Your PRs

Image optimization is probably one of the easiest tasks on your performance optimization checklist. However, if you have a lot of images to optimize, it can also take up quite some time, and in the hurry, some images might even make it into production skipping this step.

Image Actions “State of the Web: Video Playback Metrics” by Doug Sillars (Image credit)

To change that, the team at Calibre built a GitHub action that automatically compresses all the JPEGs, PNGs, and WebP images in your pull requests. It’s fast, efficient, and, for near-lossless compression, it uses the best image compression algorithms available: mozjpeg and libvips. A real timesaver.

Resources To Stay On Top Of Performance

A lot of people in the web community are committed to performance and to helping spread the word about it. One of them is Tim Kadlec. In his podcast Chasing Waterfalls, he invites people who work to make the web faster for everyone. Three episodes have already been released, with Reefath Rajali sharing insights into PayPal’s performance journey, Malek Kalim exploring how to scale a culture of performance across an organization, and Katie Hempenius talking about performance budgets, third-party challenges, JavaScript, and a lot of other things that impact performance.

Chasing Waterfalls podcast hosted by Tim Kadlec Conversations with the people working to make the web faster for everyone, hosted by Tim Kadlec. (Image credit)

Another handy resource to keep you on top of web performance comes from Ben Schwarz and Karolina Szczur. Together they curate the Performance Newsletter, delivering web performance tools, talks, and other resources to your inbox twice a month. There’s also an archive of previous newsletter issues for you to catch up on until the next issue will be sent out.

Each and every issue of the Smashing Newsletter is written and edited with love and care. No third-party mailings or hidden advertising — you’ve got our word.

Smashing Editorial(cm, vf, ra, il)

January 16 2020

21:49

Third-Party Components at Their Best

I'm a fan of the componentization of the web. I think it's a very nice way to build a website at just about any scale (except, perhaps, the absolute most basic). There are no shortage of opinions about what makes a good component, but say we scope that to third-party for a moment. That is, components that you just use, rather than components that you build yourself as part of your site's unique setup.

What makes a third-party component good? My favorite attribute of a third-party component is when it takes something hard and makes it easy. Particularly things that recognize and properly handle nuances, or things that you might not even know enough about to get right.

Perhaps you use some component that does pop-up contextual menus for you. It might perform browser edge detection, such as ensuring the menu never appears cut off or off-screen. That's a tricky little bit of programming that you might not get right if you did it yourself — or even forget to do.

I think of the <Link /> component that React Router has or what's used on Gatsby sites. It automatically injects aria-current="page" for you on the links when you're on that page. You can and probably should use that for a styling hook! And you probably would have forgotten to program that if you were handling your own links.

In that same vein, Reach UI Tabs have rigorous accessibility baked into them that you probably wouldn't get right if you hand-rolled them. This React image component does all sorts of stuff that is relatively difficult to pull off with images, like the complex responsive images syntax, lazy loading, placeholders, etc. This is, in a sense, handing you best practices for "free."

Here's a table library that doesn't even touch UI for you, and instead focuses on other needs you're likely to have with tables, which is another fascinating approach.

Anyway! Here's what y'all said when I was asking about this. What makes a third-party component awesome? What do the best of them do? (besides the obvious, like good docs and good accessibility)? Some of these might be at-odds. I'm just listing what people said they like.

  • Plug-and-play. It should "just work" with minimal config.
  • Lots of editable demos
  • Highly configurable
  • "White label" styling. Don't bring too strong of design choices.
  • Styled via regular CSS so you can BYO own styling tools
  • Fast
  • Small
  • Is installable via a package manager
  • Can be manually instantiated
  • Can be given a DOM node where it can go
  • Follows a useful versioning scheme
  • Is manintained, particularly for security
  • Has a public roadmap
  • Is framework-agnostic
  • Doesn't have other dependencies
  • Uses intuitive naming conventions
  • Supports internationalization
  • Has lots of tests

Anything you'd add to that list?

The post Third-Party Components at Their Best appeared first on CSS-Tricks.

21:49

NetNewsWire and Feedbin

NetNewsWire is one of the classic RSS apps, debuting in 2002. I was pretty stoked when it went 5.0 and was open-sourced in August 2019! You can snag it right here. (Sorry, Mac only.)

It's super nice, is fast, and looks great. It has just the right features.

But... I thought, at least at first, that really prefer websites for reading RSS content. I have multiple machines. I have mobile devices. I don't want my RSS to be limited to my laptop, I want an online service.

NetNewsWire on my Mac

Well! I found out that NetNewsWire syncs with my favorite website for RSS: Feedbin. The syncing works flawlessly. Both unread items and all the organization. In fact, the UI for organizing feeds is so nice in NetNewsWire that I managed everything there and was pleasantly surprised how it all synced perfectly with Feedbin.

Feedbin on the web

I know a lot of people miss Google Reader, but I think we've arrived at an even better place after all these years. The Google Reader UI for Google Reader was OK, but the main benefit was that it was the central place where everything synced together. That meant people could experiment by building readers and could use whatever they wanted. Feedbin clearly has APIs that can handle those types of things, so perhaps it could become that central hub service, which would be awesome.

I use Reeder on iOS, which also syncs with Feedbin. The central hub is real.

Reeder on iOS

I know a lot of people love Feedly too, which is also good. I just click with Feedbin better. I particularly like the Feedbin feature where it gives me an email address I can have newsletters sent to, letting me subscribe to a ton of them the same way I do with sites.

The post NetNewsWire and Feedbin appeared first on CSS-Tricks.

16:02

Thinking Through Styling Options for Web Components

Where do you put styles in web components?

I'm assuming that we're using the Shadow DOM here as, to me, that's one of the big draws of a web component: a platform thing that is a uniquely powerful thing the platform can do. So this is about defining styles for a web component in a don't-leak-out way, and less so a way to get global styles to leak in (although that's very interesting as well, which can be done via custom properties which we'll look at later in the article).

If you're building the template inside the JavaScript — which is nice because of template literals and how we can sprinkle our data into the template nicely — you need access to those styles in JavaScript.

const template = `
  <style>${styles}</style>
  <div class="${class}">
    <h2>${title}</h2>
    ${content}
  </div>
`;

Where does that style variable come from? Maybe also a template literal?

const style = `
  :host {
    background: white;
  }
  h2 {
    font: 900 1.5rem/1.1 -system-ui, sans-serif;
  }
`;

I guess that's fine, but it makes for a big messy block of code just dunked somewhere in the class where you're trying to build this web component.

Another way is to <template> the template and make a <style> block part of it.

<template id="card-template">
  <style>
    :host {
      background: white;
    }
    h2 {
      font: 900 1.5rem/1.1 -system-ui, sans-serif;
    }
  </style>

  <div id="card-hook">
    <h2 id="title-hook"></h2>
    <p id="desc-hook"></p>
  </div>
</template>

I can see the appeal with this because it keeps HTML in HTML. What I don't love about it is that you have to do a bunch of manual shadowRoot.querySelector("#title-hook").innerHTML = myData.title; work in order to flesh out that template. That doesn't feel like a convenient template. I also don't love that you need to just chuck this template somewhere in your HTML. Where? I dunno. Just chuck it in there. Chuck it.

The CSS is moved out of the JavaScript too, but it just moved from one awkward location to another.

If we wanted to keep the CSS in a CSS file, we can sorta do that like this:

<template id="card-template">
  <style>
    @import "/css/components/card.css";
  </style>

  <div id="card-hook">
    <h2 id="title-hook"></h2>
    <p id="desc-hook"></p>
  </div>
</template>

(The use of <link rel="import" type="css" href=""> is deprecated, apparently.)

Now we have @import which is an extra HTTP Request, and notorious for being a performance hit. An article by Steven Lambert says it clocked in at half a second slower. Not ideal. I don't suppose it would be much better to do this instead:

class MyComponent extends HTMLElement {
    
  constructor() {
    super();
    this.attachShadow({ mode: "open" });

    fetch('/css/components/card.css')
      .then(response => response.text())
      .then(data => {
        let node = document.createElement('style');
        node.innerHTML = data;
        document.body.appendChild(node);
      });
  }

  // ...
}

Seems like that would potentially be a Flash-of-Unstyled-Web-Component? I guess I should get off my butt and test it.

Now that I'm digging into this again, it seems like ::part has gotten some steam (explainer). So I can do...

const template = `
  <div part="card">
    <h2>${title}</h2>
    ${content}
  </div>
`;

...then write styles in a global stylesheet that only apply inside that Shadow DOM, like:

my-card::part(card) {
  background: black;
  color: white;
}

...which has a smidge of browser support, but maybe not enough?

These "part" selectors can only touch the exact element it's connected to. You'd have to do all your styling by applying a part name to every single DOM node and then styling each entirely on its own. That's no fun, particularly because the appeal of the Shadow DOM is this isolated styling environment in which we're supposed to be able to write looser CSS selectors and not be worried our h2 { } style is going to leak all over the place.

Looks like if native CSS modules becomes a thing, that will be the most helpful thing that could happen.

import styles from './styles.css';

class MyElement extends HTMLElement {
  constructor() {
    this.attachShadow({mode: open});
    this.shadowRoot.adoptedStyleSheets = [styles];
  }
}

I'm not sure, however, if this is any sort of performance boost. Seems like it would be a wash between this and @import. I have to say I prefer the clarity and syntax with native CSS modules. It's nice to be writing JavaScript when working with JavaScript.

Constructable Stylesheets also look helpful for sharing a stylesheet across multiple components. But the CSS modules approach looks like it could also do that since the stylesheet has already become a variable at that point.

The post Thinking Through Styling Options for Web Components appeared first on CSS-Tricks.

16:02

The Design Squiggle

I think we all have an intuitive understanding that, at the beginning of projects that require our creativity (be it design or code), things feel uncertain and messy. Then, as we go, things tend to straighten out. There is still some wiggling and setbacks, but by the end, we find a single solution and ship it.

Apparently this feeling has a logo: The Design Squiggle

The Process of Design Squiggle by Damien Newman, thedesignsquiggle.com

It comes from Damien Newman who says that a client gave him 30 seconds to sell them on the value of design, and this did the trick.

I find it a little funny to take this little concept and give it such a grandiose presentation. A dedicated website! A story with a boatload of name dropping! Very specific attribution instructions! But hey, I don't have any famous doodles, and I gotta admit, this does a great job of expressing a complex thing quite quickly.

Reminds me of a boss a buddy of mine had who claims to have invented the Curiously Strong motto for Altoids, and didn't mind telling people about it.

Direct Link to ArticlePermalink

The post The Design Squiggle appeared first on CSS-Tricks.

11:03
Understanding the Mobility Adoption – [Infographic]
08:50
AMP – A Waste of Time, or Not?

January 15 2020

23:45

How We Tagged Google Fonts and Created goofonts.com

GooFonts is a side project signed by a developer-wife and a designer-husband, both of them big fans of typography. We’ve been tagging Google Fonts and built a website that makes searching through and finding the right font easier.

GooFonts uses WordPress in the back end and NuxtJS (a Vue.js framework) on the front end. I’d love to tell you the story behind goofonts.com and share a few technical details regarding the technologies we’ve chosen and how we adapted and used them for this project.

Why we built GooFonts

At the moment of writing this article, there are 977 typefaces offered by Google Fonts. You can check the exact number at any moment using the Google Fonts Developer API. You can retrieve the dynamic list of all fonts, including a list of the available styles and scripts for each family.

The Google Fonts website provides a beautiful interface where you can preview all fonts, sorting them by trending, popularity, date, or name. 

But what about the search functionality? 

You can include and exclude fonts by five categories: serif, sans-serif, display, handwriting, and monospace.

You can search within scripts (like Latin Extended, Cyrillic, or Devanagari (they are called subsets in Google Fonts). But you cannot search within multiple subsets at once.

You can search by four properties: thickness, slant, width, and "number of styles." A style, also called variant, refers both to the style (italic or regular) and weights (100, 200, up to 900). Often, the body font requires three variants: regular, bold, and italic. The “number of styles” property sorts out fonts with many variants, but it does not allow to select fonts that come in the “regular, bold, italic” combo.

There is also a custom search field where you can type your query. Unfortunately, the search is performed exclusively over the names of the fonts. Thus, the results often include font families uniquely from services other than Google Fonts. 

Let's take the "cartoon" query as an example. It results in "Cartoon Script" from an external foundry Linotype.

I can remember working on a project that demanded two highly stylized typefaces — one evoking the old Wild West, the other mimicking a screenplay. That was the moment when I decided to tag Google Fonts. :)

GooFonts in action

Let me show you how GooFonts works. The dark sidebar on the right is your  “search” area. You can type your keywords in the search field — this will perform an “AND” search. For example, you can look for fonts that are at once cartoon and slab. 

We handpicked a bunch of keywords — click any of them! If your project requires some specific subsets, check them in the subsets sections.  You can also check all the variants that you need for your font.

If you like a font, click its heart icon, and it will be stored in your browser’s localStorage. You can find your bookmarked fonts on the goofonts.com/bookmarks page. Together with the code, you might need to embed them.

How we built it: the WordPress part

To start, we needed some kind of interface where we could preview and tag each font. We also needed a database to store those tags. 

I had some experience with WordPress. Moreover, WordPress comes with its REST API,  which opens multiple possibilities for dealing with the data on the front end. That choice was made quickly.

I went for the most straightforward possible initial setup. Each font is a post, and we use post tags for keywords. A custom post type could have worked as well, but since we are using WordPress only for the data, the default content type works perfectly well.

Clearly, we needed to add all the fonts programmatically. We also needed to be able to programmatically update the fonts, including adding new ones or adding new available variants and subsets.

The approach described below can be useful with any other data available via an external API. In a custom WordPress plugin, we register a menu page from which we can check for updates from the API. For simplicity, the page will display a title, a button to activate the update and a progress bar for some visual feedback.

/**
 * Register a custom menu page. 
 */
function register_custom_menu_page() {
  add_menu_page( 
    'Google Fonts to WordPress', 
    'WP GooFonts', 
    'manage_options', 
    'wp-goofonts-menu', 
  function() { ?>        
    <h1>Google Fonts API</h1>
    <button type="button" id="wp-goofonts-button">Run</button>
    <p id="info"></p>        
    <progress id="progress" max="100" value="0"></progress>
  <?php }
  );
}
add_action( 'admin_menu', 'register_custom_menu_page' );


Let's start by writing the JavaScript part. While most of the examples of using Ajax with WordPress implements jQuery and the jQuery.ajax method, the same can be obtained without jQuery, using axios and a small helper Qs.js for data serialization.

We want to load our custom script in the footer, after loading axios and qs:

add_action( 'admin_enqueue_scripts' function() {
  wp__script( 'axios', 'https://unpkg.com/axios/dist/axios.min.js' );
  wp_enqueue_script( 'qs', 'https://unpkg.com/qs/dist/qs.js' );
  wp_enqueue_script( 'wp-goofonts-admin-script', plugin_dir_url( __FILE__ ) . 'js/wp-goofonts.js', array( 'axios', 'qs' ), '1.0.0', true );
});

Let’s look how the JavaScript could look like:

const BUTTON = document.getElementById('wp-goofonts-button')
const INFO = document.getElementById('info')
const PROGRESS = document.getElementById('progress')
const updater = {
  totalCount: 0,
  totalChecked: 0,
  updated: [],
  init: async function() {
    try {
      const allFonts = await axios.get('https://www.googleapis.com/webfonts/v1/webfonts?key=API_KEY&sort=date')
      this.totalCount = allFonts.data.items.length
      INFO.textContent = `Fetched ${this.totalCount} fonts.`
      this.updatePost(allFonts.data.items, 0)
    } catch (e) {
      console.error(e)
    }
  },
  updatePost: async function(els, index) {
    if (index === this.totalCount) {
      return
    }                
    const data = {
      action: 'goofonts_update_post',
      font: els[index],
    }
    try {
       const apiRequest = await axios.post(ajaxurl, Qs.stringify(data))
       this.totalChecked++
       PROGRESS.setAttribute('value', Math.round(100*this.totalChecked/this.totalCount))
       this.updatePost(els, index+1)
    } catch (e) {
       console.error(e)
      }
   }
}

BUTTON.addEventListener('click', () => {
  updater.init()
})

The init method makes a request to the Google Fonts API. Once the data from the API is available, we call the recursive asynchronous updatePost method that sends an individual font in the POST request to the WordPress server.

Now, it’s important to remember that WordPress implements Ajax in its specific way. First of all, each request must be sent to wp-admin/admin-ajax.php. This URL is available in the administration area as a global JavaScript variable ajaxurl.

Second, all WordPress Ajax requests must include an action argument in the data. The value of the action determines which hook tag will be used on the server-side.

In our case, the action value is goofonts_update_post. That means what happens on the server-side is determined by the wp_ajax_goofonts_update_post hook.

add_action( 'wp_ajax_goofonts_update_post', function() {
  if ( isset( $_POST['font'] ) ) {
    /* the post tile is the name of the font */
    $title = wp_strip_all_tags( $_POST['font']['family'] );
    $variants = $_POST['font']['variants'];
    $subsets = $_POST['font']['subsets'];
    $category = $_POST['font']['category'];
    /* check if the post already exists */
    $object = get_page_by_title( $title, 'OBJECT', 'post' );
    if ( NULL === $object ) {
      /* create a new post and set category, variants and subsets as tags */
      goofonts_new_post( $title, $category, $variants, $subsets );
    } else {
      /* check if $variants or $subsets changed */
      goofonts_update_post( $object, $variants, $subsets );
    }
  }
});

function goofonts_new_post( $title, $category, $variants, $subsets ) {
  $post_id =  wp_insert_post( array(
    'post_author'  =>  1,
    'post_name'    =>  sanitize_title( $title ),
    'post_title'   =>  $title,
    'post_type'    =>  'post',
    'post_status'  => 'draft',
    )
  );
  if ( $post_id > 0 ) {
    /* the easy part of tagging ;) append the font category, variants and subsets (these three come from the Google Fonts API) as tags */
    wp_set_object_terms( $post_id, $category, 'post_tag', true );
    wp_set_object_terms( $post_id, $variants, 'post_tag', true );
    wp_set_object_terms( $post_id, $subsets, 'post_tag', true );
  }
}

This way, in less than a minute, we end up with almost one thousand post drafts in the dashboard — all of them with a few tags already in place. And that’s the moment when the crucial, most time-consuming part of the project begins. We need to start manually add tags for each font one by one.
The default WordPress editor does not make much sense in this case. What we needed is a preview of the font. A link to the font’s page on fonts.google.com also comes in handy.

custom meta box does the job very well. In most cases, you will use meta boxes for custom form elements to save some custom data related to the post. In fact, the content of a meta box can be practically any HTML.

function display_font_preview( $post ) {
  /* font name, for example Abril Fatface */
  $font = $post->post_title;
  /* font as in url, for example Abril+Fatface */
  $font_url_part = implode( '+', explode( ' ', $font ));
  ?>
  <div class="font-preview"> 
    <link href="<?php echo 'https://fonts.googleapis.com/css?family=' . $font_url_part . '&display=swap'; ?>" rel="stylesheet">
    <header>
      <h2><?php echo $font; ?></h2>
      <a href="<?php echo 'https://fonts.google.com/specimen/' . $font_url_part; ?>" target="_blank" rel="noopener">Specimen on Google Fonts</a>
    </header>
    <div contenteditable="true" style="font-family: <?php echo $font; ?>">
      <p>The quick brown fox jumps over a lazy dog.</p>
      <p style="text-transform: uppercase;">The quick brown fox jumps over a lazy dog.</p>
      <p>1 2 3 4 5 6 7 8 9 0</p>
      <p>& ! ; ? {}[]</p>
    </div>
  </div>
<?php }

add_action( 'add_meta_boxes', function() {
  add_meta_box(
    'font_preview', /* metabox id */
    'Font Preview', /* metabox title */
    'display_font_preview', /* content callback */
    'post' /* where to display */
  );
});

Tagging fonts is a long-term task with a lot of repetition. It also requires a big dose of consistency. That’s why we started by defining a set of tag “presets.” That could be, for example:

{
  /* ... */
  comic: {
    tags: 'comic, casual, informal, cartoon'
  },
  cursive: {
    tags: 'cursive, calligraphy, script, manuscript, signature'
  },
  /* ... */
}

Next with some custom CSS and JavaScript, we “hacked” the WordPress editor and tags form by enriching it with the set of preset buttons. 

How we built it: The front end part (using NuxtJS)

The goofonts.com interface was designed by Sylvain Guizard, a french graphic and web designer (who also happens to be my husband). We wanted something simple with a distinguished “search” area. Sylvain deliberately went for colors that are not too far from the Google Fonts identity. We were looking for a balance between building something unique and original while avoiding user confusion.

While I did not hesitate choosing WordPress for the back-end, I didn’t want to use it on front end. We were aiming for an app-like experience and I, personally, wanted to code in JavaScript, using Vue.js in particular.

I came across an example of a website using NuxtJS with WordPress and decided to give it a try. The choice was made immediately. NuxtJS is a very popular Vue.js framework, and I really enjoy its simplicity and flexibility. 
I’ve been playing around with different NuxtJS settings to end up with a 100% static website. The fully static solution felt the most performant; the overall experience seemed the most fluid.That also means that my WordPress site is only used during the build process. Thus, it can run on my localhost. This is not negligible since it eliminates the hosting costs and most of all, lets me skip the security-related WordPress configuration and relieves me of the security-related stress. ;)

If you are familiar with NuxtJS, you probably know that the full static generation is not (yet) a part of NuxtJS. The prerendered pages try to fetch the data again when you are navigating.

That’s why we have to somehow “hack” the 100% static generation. In this case, we are saving the useful parts of the fetched data to a JSON file before each build process. This is possible, thanks to Nuxt hooks, in particular, its builder hooks.

Hooks are typically used in Nuxt modules:

/* modules/beforebuild.js */

const fs = require('fs')
const axios = require('axios')

const sourcePath = 'http://wpgoofonts.local/wp-json/wp/v2/'
const path = 'static/allfonts.json'

module.exports = () => {
  /* write data to the file, replacing the file if it already exists */
  const storeData = (data, path) => {
    try {
      fs.writeFileSync(path, JSON.stringify(data))
    } catch (err) {
      console.error(err)
    }
  }
  async function getData() {    
    const fetchedTags = await axios.get(`${sourcePath}tags?per_page=500`)
      .catch(e => { console.log(e); return false })
    
  /* build an object of tag_id: tag_slug */
    const tags = fetchedTags.data.reduce((acc, cur) => {
      acc[cur.id] = cur.slug
      return acc
    }, {})
    
  /* we want to know the total number or pages */
    const mhead = await axios.head(`${sourcePath}posts?per_page=100`)
      .catch(e => { console.log(e); return false })
    const totalPages = mhead.headers['x-wp-totalpages']

  /* let's fetch all fonts */
    let fonts = []
    let i = 0
    while (i < totalPages) {
      i++
      const response = await axios.get(`${sourcePath}posts?per_page=100&page=${i}`)
      fonts.push.apply(fonts, response.data)
    }
  
  /* and reduce them to an object with entries like: {roboto: {name: Roboto, tags: ["clean","contemporary", ...]}} */
    fonts = (fonts).reduce((acc, el) => {
      acc[el.slug] = {
        name: el.title.rendered,
        tags: el.tags.map(i => tags[i]),
      }
      return acc
    }, {})

  /* save the fonts object to a .json file */
    storeData(fonts, path)
  }

  /* make sure this happens before each build */
  this.nuxt.hook('build:before', getData)
}
/* nuxt.config.js */
module.exports = {
  // ...
  buildModules: [
    ['~modules/beforebuild']
  ],
// ...
}

As you can see, we only request a list of tags and a list posts. That means we only use default WordPress REST API endpoints, and no configuration is required.

Final thoughts

Working on GooFonts was a long-term adventure. It is also this kind of projects that needs to be actively maintained. We regularly keep checking Google Fonts for the new typefaces, subsets, or variants. We tag new items and update our database. Recently, I was genuinely excited to discover that Bebas Neue has joint the family. We also have our personal favs among the much lesser-known specimens.

As a trainer that gives regular workshops, I can observe real users playing with GooFonts. At this stage of the project, we want to get as much feedback as possible. We would love GooFonts to be a useful, handy and intuitive tool for web designers. One of the to-do features is searching a font by its name. We would also love to add a possibility to share the bookmarked sets and create multiple "collections" of fonts.

As a developer, I truly enjoyed the multi-disciplinary aspect of this project. It was the first time I worked with the WordPress REST API, it was my first big project in Vue.js, and I learned so much about typography.  

Would we do anything differently if we could? Absolutely. It was a learning process. On the other hand, I don't think we would change the main tools. The flexibility of both WordPress and Nuxt.js proved to be the right choice. Starting over today, I would definitely took time to explore GraphQL, and I will probably implement it in the future.

I hope that you find some of the discussed methods useful. As I said before, your feedback is very precious. If you have any questions or remarks, please let me know in the comments!

The post How We Tagged Google Fonts and Created goofonts.com appeared first on CSS-Tricks.

23:44

A Web Component with Different HTML for Desktop and Mobile

Christian Schaefer has a great big write-up about dealing with web advertisements. The whole thing is interesting, first documenting all the challenges that ads present, and then presenting modern solutions to each of them.

One code snippet that caught my eye was a simple way to design a component that renders different HTML depending on the screen size.

<div class="ad">
  <template class="ad__mobile">
    // Mobile ad HTML code with inline script
  </template>
  <template class="ad__desktop">
    // Desktop ad HTML code with inline script
  </template>
  <script>
    const isMobile = matchMedia('(max-device-width: 20em)').matches;
    const ad = document.currentScript.closest('.ad');
    const content = ad
      .querySelector(isMobile ? '.ad__mobile' : '.ad__desktop')
      .content;
    
    ad.appendChild(document.importNode(content, true));
  </script>
</div> 

Clever. Although note that Christian ends up going a totally different route in the article.

Here's that same code where I use a custom element and move the JavaScript to JavaScript just 'cuz.

See the Pen
A Web Component with Different HTML for Desktop and Mobile
by Chris Coyier (@chriscoyier)
on CodePen.

The post A Web Component with Different HTML for Desktop and Mobile appeared first on CSS-Tricks.

16:03

Photoshop Replace Color Tutorial

Photoshop is one of the most known and used software for photo editing and other graphical requirements. It has tons of options for image correction, editing and other related activities. One such feature Adobe Photoshop has is its Photoshop Replace Color feature. As the name suggests, the Photoshop Replace Color feature allows the user to replace the colors of the objects in a picture.

The Replace Color feature works similarly to the Background Eraser tool from Photoshop. It uses the same method for detecting pixels in an image that need to be altered/changed. Background eraser just erases those pixels, whereas Replace color changes the color. Having said this, the replace color feature from Photoshop isn’t the most professional approach to change the colors of an image and doesn’t always give the best results. However, it is a quick and convenient method for simple tasks and gets the work done efficiently for such tasks.  Here is a detailed tutorial on how to use the Photoshop Replace Color tool effectively:

1. Select the Replace Color Tool:

Select the Replace Color Tool

You can access The Color Replacement tool by clicking the Brush Tool icon, from the Tools panel. To get to the replacement color tool, you can right-click the Brush tool and choose the Color Replacement Tool, when the popup menu appears.  Once you select the color replacement tool, the mouse cursor would change in a circular shape with a central crosshair. This cursor is similar to the cursor you would get when you select the background eraser tool.

2. Brush size adjustments:

Brush size adjustments for Replace Color Tool

The image you are dealing with could have a large section of the color you want to change. For instance, the color of the sky needs to be changed. Here if the brush size is big, you would be able to cover more area in a shorter time easily. However, if the color you want to change is minute and requires more accuracy, the brush size would need to be smaller and more refined.  Hence having the flexibility of changing sizes of the brush is essential.

When you pull the Color Replacement tool over an image, Photoshop would continuously sample any color under its crosshair that replaces it with the current foreground color.  If you press the left side bracket key continuously, the cursor gets smaller, and if you press the right bracket key, it gets bigger. Another control you get over the color replacement tool is adjusting the hardness of the brush edges. To do this, press the shift key with the left bracket key to soften the edges, and shift with the right side bracket key to make them harder.

3. Understanding the functioning of Replacement Color Tool:

Understanding the Replacement Color Tool

The basic functioning of the replacement tool is such that when you move the tool over a part of your image, Photoshop would continually sample the color that is right under the crosshair of the centre portion of the cursor. Hence it would replace this color with the color you have set as your foreground color. Also, any pixel of that original color that gets covered in the cursor’s range would be changed to the foregrounds color.  For instance, you can pass the crosshair over an area of the image with the color blue in the photo.  If the foreground is set to green, any pixels under the cursor that are blue would atomically convert to green. To check the foreground color, you can check it in the color swatch situated in the tools panel, bottom portion.

4. Adjusting tolerance for edges:

adjust tolerance for edges

The process is relatively easy when you’re covering such a large subject by pressing down the mouse key and dragging the foreground color over the color you want to change. However if you zoom in to the object you are changing the color for, you can notice the edges of the object would have a blurry blue line that the Photoshop Replace Color tool is not picking up and changing.

Here we make use of the different options for customization available for replacing color tool. The tolerance level for the brush is 30 percent as default. However, if you need to work on edges, you might want to increase this value to 50 per cent. Now the tool would be able to manipulate a broader range of colors. Now if we color the blue balloon again with the changed tolerance settings, you would see that there is no blurry blue line that remains once we are done replacing the color with green. However ensure you use one tolerance level throughout the object, first doing it with 30 percent and just the edges with 50 percent might result in irregularities of the color shades, hence start over with 50 percent tolerance.

5. How to Sample Colors from the picture itself:

sample color from the image

Many times it is possible that you want to replicate the color from a different area of the photo itself, and not use a new color from the color palate. For doing this, select the Replace Color Tool and press the alt button on the keyboard. This would temporarily activate the eyedropper tool. Now select the area which has the color you want to use for replacing the other color. This would change your foreground color to the color you just selected. Now let go of the alt button, and you would switch back to Photoshop Replace Color Tool. Since the foreground color has changed to the color you selected earlier; now you can easily replace the area you want to change color for like you would typically do. Hence now, the balloon is pink since we selected the color from the girl’s jacket.

6. Understanding the different blend modes in the Replace Color Tool:

blend modes in Replace Color Tool

You might have noticed by now, that both the times we changed the color of the balloon, the shine and reflective nature of the color remained intact. Had we used the basic brush tool and changed the color, the balloon would have had a flat color overlay, with no life in it whatsoever. This is because the Replace Color Tool comes with various blend modes that allow it to retain such characteristics of the area we change color for.  Four parameters can be changed in Replace Color Tool- Color, Luminosity, Hue and Saturation. To choose between these, go to the Options bar. The default mode would be set to Color.

Any image makes use of Hue, Saturation and brightness as far as the colour of a particular object is taken into consideration. Each blend mode available in Replace Color Tool affects one or more such property of color. The Hue blend mode changes the primary color of the object. It wouldn’t alter the brightness or saturation of the original color.  This is ideal for images with colors that aren’t too intense, and subtle changes need to be made.  The saturation blend mode, on the other hand, would change the saturation of the color without affecting the Hue and Brightness. This helps to reduce the color’s intensity or to remove a color entirely if needed.

Color blend mode is the default setting mode that affects both the hue and saturation of an image. It still wouldn’t affect the brightness of the image. Lastly, luminosity blend mode would bridge the gap between the brightness of the previous color to the brightness of the new color. It would not affect the saturation or the hue of the image.

7. Using the Sampling Options in the Replace Color Tutorial:

sampling options in Replace Color tool

When you have the options pop up menu opened, you would be able to see there are three small icons right next to blend mode options.  All three icons are different forms of sampling method for the Color Replacement tool. The three options are Continuous,  Background Swatch and Once. You can click between the three sampling options to switch between them.

These sampling method options help Photoshop control how it samples colors in the image when crosshair moves over them. Continous sampling method would make Photoshop keep looking for new colors to replace as the Color Replacement tool would be dragged around. Any color that comes under the crosshair would become the new color to be replaced. Such a setting is ideal for projects where the image has many colors in the object you want to change color for.

Once sampling tool would only sample the color, click on initially no matter how many of the other colors the cursor drags over. This is the best sampling method for filling a large area of a solid color. It is also a great alternative for continuous replace colour tool if using continuous is leading to much bleeding into nearby areas. Lastly, the Background Swatch sampling method would replace the color that is set as a background color currently.  This is an ideal sampling method when the other two methods don’t seem to be working for your requirement.  You can click on the background color swatch from the tools panel and then select a color by using the color picker that matches the color you want to replace in the image. If both the colors have a visible difference in shade, try increasing the tolerance level to reduce the gap.

8. Using Limits aspect of the Replace Color Tool:

Changing Limit modes- Replace Color Tool

This works similar to the Replace Color Tool. This tool controls the places Photoshop can look for colors for replacing process. It comes with three modes- Contagious, Discontiguous, and Find Edges. Contagious is the default setting.  If you use this, the Color Replacement Tool would only be able to change the pixels that are in the same area of the crosshair’s central area where the cursor is touching. It wouldn’t affect the matching pixels of the sampled colors that are blocked by an area that has a different color.

The discontiguous mode would allow the color replacement tool to replace any color and any pixel that matches the sample color and is under the area of the cursor. It doesn’t matter if the pixels are in the same area as the crosshair or not.  Lastly, the Find Edges option is very similar to Contagious tool when it comes to the aspect that it can only change the color of the pixels in the same area as the crosshair. However, it is more accurate at detecting edges. There can be a sharp and well-defined object that the Color Replacement tool is having difficulty with.  Using tolerance settings isn’t helping either. Here, Find Edges would be a great solution.

These were the 8 essential steps and considerations for using Photoshop Replace Color tool. This tutorial covered the important aspects of using each of the elements of the Replace Color tool for getting the desired results. Each project and object has different characteristic and requirements, hence making necessary changes to the blend modes, sampling methods and limit aspects become essential to get the right feel of the replaced color, to match the client’s requirement. Make sure you practice changing the colors enough with each style to understand their relevance and where to use what.

The post Photoshop Replace Color Tutorial appeared first on Line25.

15:20

The Deal with the Section Element

Two articles published the exact same day:

  1. Bruce Lawson on Smashing Magazine: Why You Should Choose HTML5 <article> Over <section>
  2. Adam Laki on Pine: The Difference Between <section> and <div> Element

They are comparing slightly different things, but they both involve the <section> element.

I find it pretty clear when you reach for a <div>: When you want that element to be essentially meaningless. You're only using it for styling purposes.

I always think of RSS when I think of <article>: Would this little bit of stuff make sense as an entry (which doesn't necessarily need to be the entire content of the article)? If yes, use <article>; if not, don't.

Bruce has a go-to answer:

[...] think of <article> not just as a newspaper article, or a blog post, but as an article of clothing — a discrete entity that can be reused in another context. So your trousers are an article, and you can wear them with a different outfit; your shirt is an article, and can be worn with different trousers; your knee-length patent leather stiletto boots are an article.

More importantly, it has some actual functionality. Bruce mentions that Apple WatchOS specifically uses it to find content on pages.

But <section> is more nebulous. At one point, you were supposed to think of sections as places where your <h1>-<h6> headings would reset, but that never came to fruition because it required a thing called "HTML5 Outlining" which zero browsers support.

So should we use <section> it at all? According to Bruce, sometimes! Smashing Magazine's design for articles has a summary at the beginning of the article. Visually, that's fairly clear, but less-so for screen reader users. The solution was wrapping the summary in an element with an aria-label to make that clear. But you aren't supposed to use aria-label unless that element also has a role. You could apply a role to a <div>, but <section> already has a good default role, so:

<section aria-label="quick summary">
  Summary text
</section>

Adam's article (sorry, Adam) is very vague on the points.

The main difference comes from the semantic. If you have a part in your site or application which has its logic you need to use the <section> tag to declare it...

... use <section> when it is logically correct to make a part of your site or app readable to the assistive technology. It is an excellent approach if you keep in mind the screen readers.

So you get a role="region" automatically for sections, but I'm not sure that does anything for screen readers, sans the label. In a quick test (Chrome for desktop with VoiceOver enabled), a <section> without an aria-label just wasn't there in the Landmarks section of the Web Rotor, but it showed up once it had an aria-label.

Point is: don't just use <section> and assume you're doing something good for accessibility. Its purpose is pretty limited and only useful for establishing landmarks. Even then, you aren't helping that much. Leonie Watson in the comments:

When the choice is between a visually hidden heading and a section element with an accessible name there are a couple of things to consider before deciding which approach is the right one.

When a section element has an accessible name it becomes a navigable landmark element, so a screen reader user can use their screen reader's shortcut key for navigating from one to the next - just like they can do with headings.

According to the most recent WebAIM screen reader user survey though, 68% of screen reader users prefer to navigate by headings compared to 2.9% who prefer landmarks.

So from a strict accessibility point of view, you could probably drop the heading, but from a usability point of view you really want to keep the heading - at least until more screen reader users express a preference for using landmarks to navigate content.

The post The Deal with the Section Element appeared first on CSS-Tricks.

15:20

Debunking the Myth: Accessibility and React

I find it notable when the blog of a major accessibility-focused company like Deque publishes an article called Debunking the Myth: Accessibility and React. Mark Steadman is essentially saying if a site has bad accessibility, it ain't React... it's you. The tools are there to achieve good accessibility.

React didn't use a <div> for a <button>, you did. React didn't force extra markup all over the page when you decided to not use a Fragment. React didn't forget to change the title of the page because that was something you neglected.

Is it different how you have to do it in React versus how you have to do it in some other framework or CMS? Yes, it is. Different, but neither worse nor harder.

I'm optimistic that well-made React components focused on accessibility can have a positive impact on the web. Just today I was pair programming and looking at some HTML for a toggle UI in a Rails template. It had a little bug we wanted to fix, which required an HTML change. But this toggle wasn't a component, it was a chunk of HTML used in dozens of places on the site. Gosh, did I wish this part of the site was architected with a proper components instead, so the change would have fixed all toggles on the site at once. All JavaScript frameworks encourage this kind of component building, which is just smart front-end architecture if you ask me.

Where did the bad wrap on React come from? Well, we could debate that for days. Is it that JavaScript-focused developers never got the HTML training they needed? Maybe. Was it gnarly, unsemantic React code that was written/shared in the early days that others copy and pasted too many times? Maybe. I'm not sure we'll ever know. The important thing is that we all do a better job now.

Direct Link to ArticlePermalink

The post Debunking the Myth: Accessibility and React appeared first on CSS-Tricks.

14:00
What Is “Headless” WordPress?
13:00

The Mythical Mythical Man-Month

The Mythical Mythical Man-Month

The Mythical Mythical Man-Month

John Foreman
2020-01-15T13:00:00+00:002020-01-16T12:05:52+00:00

As a product leader at a tech company, I am a bottomless pit of need. My job as the Chief Product Officer at Mailchimp is to bring the product to market that’s going to win in a very competitive space. Mailchimp’s aspirations are high, and to realize them we need to deliver a substantial amount of product to the market. Oftentimes to many at the company, it feels like we are doing too much. We’re always at the edge of the wheels coming off.

And when you’re doing too much and you decide to do more than even that, you will inevitably begin to hear The Mythical Man-Month referenced. It’s like one of those stress-relief balls where if you squeeze one end, then out pops the Mythical Man-Month at the other end.

Published by Frederick Brooks back in 1975 (you remember 1975, right? When software development 100% resembled software development in 2020?), this book is rather famous amongst software engineers. Specifically, there’s one point in the entire book that’s famous (I’m not convinced people read anything but this point if they’ve read the book at all):

“...adding more men lengthens, not shortens, the schedule.”

Easy fix. I’ll just staff women to projects from now on (see the Return of the King and the fight against the Witch King of Angmar).

But let’s assume that Brooks’ point holds regardless of the gender identification of the software engineers in question. Here’s the point: software is difficult to build with lots of complex interdependencies. And everyone needs to work together to get it done.

As I add people to a team, they need to be onboarded and grafted into the project. Someone’s gotta carve off the right work for them. The team has to communicate to make sure their stuff all works together, and each additional person increases that communication complexity geometrically. And at some point, adding people becomes a burden to the project — not a benefit.

Here’s the graph from the book illustrating that point:

As you add people to tasks with complex interdependencies, progress grinds to a halt Add people to go slow (Large preview)

This is absolutely a fair point. That’s why I hear it so much at work. Exhausted individual contributors and exhausted leaders alike will toss it out — we can’t go faster, we can’t do more, stop the hiring, read The Mythical Man-Month and despair! The only solution is apparently to stop growing and kill some projects.

When I as CPO say, “we’re going to do this thing!” the reply then is often, “OK, so then what are we going to kill?” The Mythical Man-Month turns product development into a zero-sum game. If we want one thing, we must stop another. Now, that’s an actual myth, and I call hogwash.

And taken to its pathologically misinterpreted (we’ll get to this) conclusion, the book apparently says that the fastest tech company is one that employs all of four people — four men, apparently. Anything more just slows it all down. Someone should send Amazon, Apple, and Google copies of the book, so they can fix their obviously bloated orgs.

The only problem with this approach is that in a space where the competition is growing and iterating and executing — merely tamping organizational growth — editing and focusing the workload to match can be a recipe for extinction. You’ll be more sane and less stressed — right until you’re out of a job.

And as the owner of product management for my company, I’m not unsympathetic with this need to slow down and focus. We must ruthlessly prioritize! No doubt. But running a product is an exercise in contradiction. I must prioritize what I’ve got while simultaneously scheming to get more done. But what am I to do in the face of the Mythical Man-Month?

Surprisingly, the answer to this question comes from Brooks’ same book. Here’s another graph in the same chapter:

Partitionable tasks requiring communication can still add workers and go faster (Large preview)

There is a battle in scaling product development. If the work you’re trying to accomplish is purely partitionable, then go ahead and add people! If your work is all connected, then at some point adding people is just wrong.

If someone says that I absolutely have to kill a project in order to start another one, that’s just not the case. If the two projects require very little communication and coordination, then we can scale away.

This is why adding cores to a CPU can increase the experienced speed of your computer or phone up to a point — something engineers should know all about. Sure, adding cores won’t help me complete a complex single-threaded computation. But it may help me run a bunch of independent tasks.

The conflict for a product executive then between scaling and ruthless prioritization can be managed.

  1. You ruthlessly prioritize in places that are single-threaded (the backlog for a product team let’s say).
  2. You scale by adding more cores to handle independent work.

Very rarely, however, is anything fully-independent of all else at a company. At the bare minimum, your company is going to centralize supporting functions (global IT, legal, HR, etc.) leading to bottlenecks.

It’s All About Dependency Management

The job of a product executive then becomes not only creating a strategy, but executing in a way that maximizes value for the customer and the business by ensuring throughput and reducing interdependency risk as much as possible. “As much as possible” being key here. That way you can make the company look as much like the latter graph rather than the former. Interdependency is a disease with no cure, but its symptoms can be managed with many treatments.

One solution is to assemble a strategic direction for the company that minimizes or limits dependency through a carefully-selected portfolio of initiatives. The funny thing here is that many folks will push back on this. Let’s say I have two options, one where I can execute projects A, B, and C that have very little coordination (let’s say they impact different products), and another option with projects D1, D2, and D3 that have tons of interdependencies (let’s say they all impact the same product). It’s often the case that the Mythical Man-Month will be invoked against the former plan rather than the latter. Because on paper it looks like more.

Indeed, it’s less “focused.” But, it’s actually less difficult from a dependency perspective and hence fairs better with added personnel.

Keep in mind, I’m not saying to choose a bunch of work for the company that’s not related. Mailchimp will not be building a microwave oven anytime soon. All work should drive in the same long-term direction. This approach can increase customer experience risk (which we’ll discuss later) as well as the burden on global functions such as customer research. Keep an eye out for that.

Another treatment is to create a product and program management process that facilitates dependency coordination and communication where necessary without over-burdening teams with coordination if not required. Sometimes in attempting to manage coordination so we can do more we end up creating such onerous processes that we end up doing less. It’s a balance between doing too little coordination causing the pieces to not inter-operate and doing too much coordination causing the pieces to never get built because we’re all in stand-ups for eternity.

The contention in the Mythical Man-Month is that as you add folks to a software project, the communication needs to increase geometrically. For example, if you have 3 people on the project, that’s 3 lines of communication. But if you have 4, that’s 6 lines of communication. One extra person, in this case, leads to double the communication! Fun. (This is, of course, an over-simplification of communication on software development projects.)

Different people have different roles and hence receive different amounts of autonomy. Perhaps the project manager needs to communicate with everyone on the team. But does an engineer working on the API need to communicate with the product marketer? Or can the marketer just go through the product manager? A good process and meeting cadence can then eliminate unnecessary communication and meetings. The point is that Brooks’ intercommunication formula is an upper bound on coordination, not a death sentence.

Finally, use tools, principles, and frameworks combined with independent work over actual collaboration to combat interdependency symptoms. For example, if I can coordinate two teams’ key performance indicators (KPIs, i.e. measurements of success) to incentivize movement in more-or-less the same direction, then their independent work is more likely to end up “closer together” than if their KPIs incentivize orthogonal movement. This won’t ensure things fit together perfectly, only that the work I need to do to make them fit together in the future is less than it might otherwise be. Other examples might include using “even-over” statements, design systems, and automated testing.

So there’s a start. But interdependencies take on lots of forms beyond code. Let me give an example from Mailchimp.

Customer Experience Risk: The Hidden (But Acceptable?) Cost Of Firewalling Work

Since Mailchimp’s customer is often a small business owner who’s a marketing novice (and there are millions of small business owners turned marketers worldwide), we must deliver an experience that is seamless and immediately understandable end-to-end. We’re not afforded the luxury of assembling a Frankenstein’s monster of clouds via acquisition the way that enterprise players can. We can’t paper over poorly-integrated software with consultants and account managers.

As a consumer product (think Instagram or a Nintendo Switch or a Roomba), we have to be usable out of the box. For an all-in-one marketing platform meant to power your business, that’s hard! And that means each thing Mailchimp builds must be seamlessly connected from an experience perspective.

But, perfectly partitioning projects then introduces experience risk. It’s not that the code can’t be written independently. That can be achieved, but there’s still a risk that the products will look like they’ve been built by different teams, and that experience can be really damn confusing for the user. We bump up against Conway’s law — our customers can tell where one team’s work ends and the other team’s work begins.

So you try to connect everyone’s work together — not just on the back-end but on the front-end, too. In the ecosystem era, dominated by CX excellence from players like Apple, this has become almost table stakes in the consumer space. But this is a Mythical Man-Month nightmare, though not from an engineering perspective this time. It’s from a service design perspective. As we add more people to all of this “end-to-end” connected work, everything slows to a collaborative crawl.

Other than the third fix I noted above, using tools and frameworks rather than over-watchers and stage-gates, there is another release valve: make some deliberate customer experience trade-offs. Specifically, where are we comfortable releasing an experience that’s disconnected from the rest (i.e. that’s sub-par)? Accepting risk and moving forward is the product leader’s job. And so you use some criteria to sort it out (perhaps it’s not holding new, low-traffic areas of the app to the same experience standards as your “cash cows”), and make a decision (e.g. iteration and learning over polish on adjacent innovations). This, of course, extends beyond design.

You can always short-circuit Brooks’ law by choosing to firewall efforts, including efforts that, in a perfect world, shouldn’t be firewalled!

I’ll caveat this by saying the software I build doesn’t kill anyone. I wouldn’t advocate this approach if I were building a medical device. But at a marketing software company, I can deliberately isolate teams knowing that I’ve increased the odds of incompatibility as a trade-off for scaling up personnel and moving faster.

I’m sad to admit that the Mythical Man-Month is a reality at my company, and I suspect at yours as well. But it’s manageable — that’s the bottom line. Parallelization and dependency mitigation offer us a way out that limits the near-mythical status of the Mythical Man-Month. So the next time the stark dichotomy is raised at your company (scale to go slower or give up your aspirations) remember that if you’re smart about how you line up the work, you can still grow big.

Don’t Forget About The Softer Side Of Scaling

Keep in mind that managing the Mythical Man-Month will not stop engineers from invoking it like dark magic. They’re invoking the principle not only because there’s some truth in it, but because scaling just sucks (always) from an emotional and cognitive perspective. If I think I’m paid to write code and solve customer problems, the last thing I wanna do is change up my routine and figure out how to work with new people and a larger team.

As you scale your company, remember to empathize with the pain of scaling and change. A team that adds even a single member becomes a whole new team from a trust and cultural perspective. People are tired of this change. That means that while you go about managing and mitigating the Mythical Man-Month, you’ll need to manage the emotions surrounding growth. That’s perhaps the most critical task of all.

Strong belief in the Mythical Man-Month by a team in and of itself can bring its conclusions into reality. It’s basically the equivalent of the belief in flying in Peter Pan. If the team believes that scaling will slow them and they don’t buy into the change, they will indeed slow down.

So as you work to manage dependencies and introduce tools to help scale, make sure you clearly communicate the why behind the practices. Get folks involved in selecting the work and processes that mitigate man-month issues, because when they’re part of the change and their outlook changes, suddenly scaling becomes at least culturally possible.

Smashing Editorial(ra, il)
12:38
5 Ways to Improve Customer Experience on Your WordPress Site
Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.

Don't be the product, buy the product!

Schweinderl