Hi everyone, I’m js8435877

Hello! I'm James smith and I'm new user. I've been doing graphic design for over 8 yrs. I've a Bachelor of Fine Arts in Graphic Design. I've worked with several clients over the years to help cultivate their brand identity through print, online, and promotional materials, so that they can focus on whats most important, their business. This includes: Logo and Brand Design, Stationery Design, Business Cards, Promotional Flyers, Social Media set up and design, Web Design There is nothing I love more than to be able to use my creative and problem solving skills to find successful solutions. Starting with an idea and making it come to life. I pride myself on providing quality work on time. I am also very passionate about what I do.

A Short Introduction to Apache Iceberg

Apache Iceberg introduces the concept of hidden partitioning where the reading of unnecessary partitions can be avoided automatically. Data consumers that fire the queries don’t need to know how the table is partitioned and add extra filters to their queries.

A table can be defined as an arrangement of data in rows and columns and in a similar fashion, if you visualize from the Big Data perspective, the large number of individual files that hold the actual data can be organized in a tabular manner too.

Second Annual WPMRR Virtual Summit To Kick Off September 21

WPMRR is gearing up for its second annual WPMRR Virtual Summit after the success of last year’s event. This year’s online-only conference will run from September 21 – 23. WPMRR and WP Buffs founder Joe Howard is hosting the event alongside guest host Brian Richards, the organizer behind WordSesh and WooSesh.

The event is free to attend for everyone. Even for those unable to make it, each session’s recording will be available via the WP Buff’s YouTube channel at no cost.

WPMRR and WP Buffs will be donating $1 per registrant and $1 per comment posted during all three summit days to Lawyers for Good Government, a non-profit organization of lawyers with a mission to fight for equal rights, opportunities, and justice.

A formal announcement of the speaker lineup and schedule is expected next week. As of now, all speakers are confirmed.

“The WPMRR Virtual Summit is a three-day online conference that helps us fulfill our mission: to actively help as many people as possible responsibly achieve their MRR goals,” said Howard.

He also said the WPMRR Podcast carries this mission forward by telling unfiltered stories of successful entrepreneurs. On the WPMRR Community side, the goal is for members to grow their MRR together. The summit provides an onramp for newcomers into the community.

Like 2020, the event’s talks and roundtables will be held over Vimeo Live. However, this year, they will be streamed directly into the WPMRR Virtual Community space. The goal is to make it easier to transition attendees into becoming full-fledged community members, continuing their education and experience beyond a once-per-year event.

“The virtual summit will be a fantastic event, but often it’s difficult for conferences to provide ongoing support, advice, and community to make sure what was learned at the event is actually implemented, tested, and integrated into attendees’ businesses,” said Howard. “This will make it far simpler to give direct access to our community to those who want to responsibly build their MRR alongside others all year round, not just for three days.”

The three-day event will be broken down as follows:

  • September 21: Sales & Marketing
  • September 22: Operations & Systems
  • September 23: Website Management

The summit will use Circle to handle discussions via its commenting system. This should allow communication to happen at everyone’s preferred pace.

“Our plans are to do a Q&A, manage the ‘Hallway,’ and provide a space for attendees, speakers and sponsors to all interact via asynchronous communication via the WPMRR Community,” said Howard.

All About MRR

MRR is an acronym for Monthly Recurring Revenue. It is about generating repeated income every month instead of getting paid once for a product or service — a subscription-based model.

I asked Howard to break down why this concept is crucial for new or potential business owners in the WordPress space. He responded with several reasons for going this route over a one-time revenue model.

“If you’re selling a product for $100 and want to make $100K in a year, you need to find 1,000 new customers to sign up,” he said. “If you’re selling something for $100/mo instead, you need far less because customers are paying you every month instead of just once. In most situations (especially because lead generation is a pain point for most businesses), delivering ongoing value to ~100 customers is far less work than finding 1,000 new customers!”

This leads to having multiple avenues to growing your business. With recurring revenue, entrepreneurs can continue attracting new customers and selling new features to existing ones.

Howard also pointed out that subscriptions representing a chunk of total revenue creates a more predictable financial situation. This can lead to making easier budgeting decisions. Focusing on recurring revenue means constantly delivering value to customers instead of always chasing new sales.

“Running a subscription business is way less stressful because the business model is simply more resilient,” said Howard. “If you rely on SEO to drive new leads to your business and Google penalizes you, your business will literally stop generating any revenue whatsoever if you only serve one-time customers. But if you have subscription revenue and this happens, you still have a collection of customers who pay you every month, giving you far more runway to figure out next steps before the business fails.”

I also asked Howard about the different levels of MRR and how the game changes as revenue increases.

“Often, what gets you to $10K MRR evolves significantly if/when you’re on your way to $83K MRR ($1M/year),” he said. “This is what makes the WPMRR Community so valuable, as we have different spaces folks can join based on what their MRR goals are.”

He also pointed out the crossover between those starting out and those running larger businesses, saying that it was important for both audiences to learn from the other.

“We can listen to advice and best practices all day, but we don’t know when inspiration will hit us,” he said. “That’s why I think it’s important for those starting out to tune into some more advanced talks and for those running larger businesses to listen to beginners as well.

“All our speakers will be instructed by Brian Richards (our day-of technical director and speaker preparer) to be really explicit about the context around any advice they’re giving and how it could apply to businesses of different sizes and scales. That way, we can help people at whatever stage they’re at!”


The entire written interview with Howard is available via the WPMRR Community site. It is worth reading for those who want to learn more about the event and MRR from his experience or an unfiltered version of this story.

How To Set Up Free Email Accounts With WPMU DEV’s Managed WordPress Hosting

Congratulations! Your sites are hosted on WPMU DEV’s next generation WordPress hosting, which includes free email hosting. Now, let’s set up your emails.

Free email hosting is included with all WPMU DEV hosting plans (not sold separately).View our hosting plans

You have probably seen businesses advertising their website on their shopfront, vehicle, promos, etc. using their Gmail, Hotmail, or ISP provider’s email address!

Vehicle advertising business domain and Gmail address.
Nice wrapvertising, shame about the email!

Or, what if you created your email address a long time ago when you thought that having an email address like crazygangsta99@hotmail.com was cool? Would you advertise this on your business card?

This not only looks unprofessional, but what happens if your free email account gets shut down or the business uses an ISP supplied email address and needs to switch service providers?

Using custom domain email addresses not only makes your business look professional, it also allows you to keep your business communications running without disruptions or additional costs if you decide to switch webhosting providers, ISPs, email services, etc.

Vehicle advertising business using domain and email address.
This business is totally on-brand with their email address!

In this tutorial, we’ll show you how to set up email for your (or your client’s) business on WPMU DEV’s email hosting service and take you through practical examples of using email accounts, email aliases, and email forwarding to effectively manage emails in your business.

We’ll cover the following:

Managing Email in Your Business

Using domain email addresses can benefit your business. For example:

  • It makes your business look professional.
  • It strengthens your business brand.
  • It helps to eliminate disruptions in your business communications (e.g. changing ISP or email service providers).

Let’s create a simple setup that will let you manage your emails effectively.

For this example, suppose we manage a small business, where:

  • Sally runs sales.
  • Bob looks after support.
  • Jim manages the accounts.

Our website domain is “MyDomain.com.”

A simple diagram of our business, then, looks like this:

Simple flowchart of a small business.
Our small business team.

Now, let’s suppose we want to:

  1. Set up email addresses using our domain for each of the above areas of our business  (e.g. sales@mydomain.com, support@mydomain.com, and accounts@mydomain.com), and
  2. Make sure that emails sent to those addresses arrive in our team members’ inboxes.

So, this is how we want to set up our domain emails…

Small business team email setup.
How we want to set up emails for our team.

Now that we have worked out a very simple plan for our business emails, let’s set it up using WPMU DEV’s email hosting.

Overview of WPMU DEV’s Email Hosting

WPMU DEV gives you free email hosting with every WordPress managed hosting plan and provides 4 different types of emails for your hosted sites at no additional cost:

  1. Transactional Emails – These are admin emails sent by WordPress and include WordPress update notifications, new user registrations, and user comments.
  2. Email Accounts – These allow emails to be sent from and received on your domain name. We’ll cover email accounts in detail in this guide and show you how to set them up.
  3. Email Forwarding – Email forwarding lets you set up an address like you@yourdomain.com and have all emails sent to this address forwarded to your Gmail, Outlook, or other service’s (e.g. ISP) email address.
  4. SMTP – You can send WordPress transactional emails from another email address that you own using any email service with valid SMTP credentials and our Branda white labeling plugin.

This tutorial focuses mostly on using Email Accounts and Email Aliases to set up emails for your business. We’ll also touch on using Email Forwarding later.

Before we go any further, let’s make sure that you understand the difference between an email account, an email alias, and email forwarding:

  • Email account: An email account has a mailbox where your messages are stored.
  • Email alias: An email alias does not have a mailbox, it just redirects the mail to the account you specify.
  • Email forwarding: We’ve touched on email forwarding above. This is where you create an email address that forwards (i.e. redirects) all emails sent to it to your “real” email address (e.g. a Gmail address). This is an option for individuals and small businesses that want to maintain a professional online reputation without incurring email hosting fees.

Notes:

  • Email hosting and email forwarding cannot be used together on the same domain with WPMU DEV’s hosting, as they are different features and require setting up different MX records for the same domain.
  • Before deciding on an email setup for your business, refer to our email documentation for more information on how to use our email services, how many accounts you can set up, how to configure emails to work with popular email services, etc.

Now that we’ve got this out of the way, it’s time to get our emails on!

Custom Domain Emails Setup Guide

So, you have purchased your domain name.

Before we can set up emails for your domain on WPMU DEV’s hosting, we need to configure a few things.

Set Up Your DNS

Below is a quick set up guide. For an in-depth tutorial, check out our post on using our DNS management tool.

We’ll start with a newly-registered domain.

GoDaddy domain registration record
We’ll use this newly-registered domain to set up our emails.

I’ve also created a brand new site on WPMU DEV’s hosting using a temporary URL. (If you need help creating a new site, see our WordPress tutorial for beginners or refer to our documentation.)

The Hub - New Site
Here’s a brand new site set up on WPMU DEV hosting using a temporary URL.

Once your domain and your new site are set up, we need to connect these two.

First, let’s set up the DNS.

Go to The Hub and select DNS.

The Hub DNS tab
Let’s configure our DNS.

Click on the (+) symbol to add your domain.

DNS - Add Domain
Let’s add our domain.

Enter your domain name and click the Next (blue arrow) button.

The Hub - DNS - Add New Domain screen.
Enter your domain and click Next.

Our servers will scan for any DNS records belonging to your domain and automatically import these into your new DNS configuration.

The Hub - Set up DNS screen.
WPMU DEV scans and automatically imports any DNS records it finds.

Clicking the blue arrow button brings you to the Nameservers screen BUT…don’t click the Check nameservers button just yet…we still need to configure your nameserver settings.

For now, just copy the records shown for Nameserver 1, Nameserver 2, and Nameserver 3 to your clipboard and paste them into a plain text file. Keep this text file open. You will need it to complete the next step.

The Hub DNS - Nameserver information.
Don’t click the button just yet…we still need to configure your nameserver settings!

Configure Your Nameservers

Your domain registrar keeps records of your domain, including where it should point to. If the registrar also provides web hosting services, the domain will typically point to their own hosting servers.

If you want the domain to point to the servers of another hosting company (as we do in this example), then you’ll need to change the server address in the domain registrar’s nameserver records.

We provide detailed guides on how to change nameservers for many popular registrars and hosting companies in our documentation section.

For this tutorial, I’ll use GoDaddy, as this is where I registered the domain used in our example. Check our list of registrars for your specific domain(s) and follow the documentation tutorials to change your domain’s nameservers.

As shown in the screenshot below, I’ve located the Nameserver records in my domain registrar’s DNS Management section, pasted in all three of WPMU DEV’s nameserver records from my text file into the Nameserver fields, and clicked the Save button.

GoDaddy Nameserver screen.
I’ve updated the nameserver with WPMU DEV’s nameserver details.

Changing nameservers in this registrar required one more step, so I have given my permission to change the nameserver records and clicked on the Continue button as shown below.

Nameserver changes warning popup.
I have nothing built on my domain yet, so I’m not spooked by this warning message!

That’s really all there is to changing nameserver records. If you do this step correctly (i.e. enter the correct details and confirm the change), all you need to do is wait a little bit for the information to propagate across the internet.

To check if your domain has propagated, visit a website like dnschecker.org or whatsmydns and either:

  • Type in your domain name into the search field and select the “A” record search, or
  • Enter one of your destination nameserver addresses into the field and selecting the “NS” record search.

The recommended wait time for domain nameservers to fully propagate is normally 24-48 hours.

I checked a few minutes after changing my nameserver records and my domain name had already fully propagated.

DNSChecker.org
Wow…fastest nameserver propagation ever!

Once your nameserver records have updated across the internet, return to the previous screen (The Hub > DNS > Manage DNS > Nameserver) and click the Check nameservers button.

The Hub - Check nameservers
Now, let’s go ahead and click the button.

You should see a confirmation message that your nameservers are propagating correctly.

If not, wait a little while and try again. If you’re still waiting for the nameserver records to propagate, go back to your registrar and make sure that you have entered the correct nameserver addresses. If you’re still experiencing problems after a reasonable amount of time has elapsed, just contact our support team and they will help you out.

The Hub - Nameservers propagating correctly message
The new nameservers are propagating righteously…sweet!

Now that we’re done tinkering under the hood with DNS and nameservers, let’s actually go set up our emails.

Creating Email Accounts

We will assume you have already connected a domain and it is ready to go.

DNS sorted, propagated, all that good stuff.

Now we’re ready to set up our email.

Select one of your sites, go to Hosting, navigate to the Emails tab, and click on Email Accounts.

Hub - email accounts screen.
Let’s set up our email account.

Next, scroll down to find active email accounts and the Create new email account option.

If you have already added your custom domain, select Add email account.

Add email account button.
Click to add an email account.

Add a Custom Domain Name

Note: If you have NOT set your “primary domain” for this particular site, you will see that you need to add it first.

Hub - Email accounts - add domain name.
You’ll need to add a domain before you can set up an email account.

To do this, click on add domain name.

Hub - Add domain
Click on Add Domain…

Enter your domain and click on the Add domain button.

Add Domain to Hub
Enter your domain.

You’ll then be taken to your domains list.

If you’ve elected to have WPMU DEV manage your DNS and have pointed your nameservers to your WPMU DEV hosting account as shown earlier, then DNS and SSL will be automatically configured for you.

Hub - Domains screen
WPMU DEV is managing my DNS and everything has been configured automatically!

Notes:

  • If you’re not seeing all green ticks on this screen, just wait a little bit and recheck your DNS. To recheck, just click on the ellipsis next to the domain name and select Recheck DNS.
Check DNS Status
How to recheck your DNS status.

If everything is set up correctly and you’re seeing all green ticks, then click on the three dots (ellipsis) next to the domain name you want to set up as the primary domain and select set as primary. 

Set domain name as primary.
Set your domain name as the primary domain.

After confirming, your selected options will replace your temporary URL as the primary domain.

Primary domain name
Our custom domain is now set as the primary domain.

Now, when you go back to the Create new email account section, you should see the option to add an email account.

Add email account button.
Now we can add our email account.

Click this and you’ll be greeted with a popup window where you can enter your email account name and copy the automatically generated password (you will need this!).

Add an email account
Create your email account and copy your password details.

Your new email account will then be created.

Email DNS not set up.
Our email account is set up, but our email DNS is not.

Looking good so far, although that DNS status is not ideal.

Note: If you try rechecking the DNS…

Email DNS recheck.
Our email account DNS is not set up yet.

You will see there are missing DNS records, which we need to add to our DNS setup.

Missing email DNS records warning notice.
Our email account is missing these DNS records.

To fix this we’ll need to add our DNS records to the account (after initially setting this up, it will automatically add these records to all subsequent accounts you create).

Add DNS records to email account.
We need to add these DNS records to make our email account work.

Scroll up the page to find the DNS records, then select Add DNS Records.

Add DNS Records button.
Click the Add DNS Records button.

Once you’ve done this, recheck your DNS status and you should see that you’re all good to go.

Note: In some cases, DNS propagation can take few hours (even if we’re managing your DNS).

Email account DNS status ok.
Our email account is now set up.

After configuring the first email account, all new accounts you add will automatically get the green light.

Email accounts added.
New email accounts added after your first is set up will automatically get the green tick.

Now that you’ve created your email accounts it’s only a matter of connecting these to your preferred email provider.

Every provider has their own steps, you can find many examples in our docs.

Let’s use the one for Gmail

To send and receive emails from your WPMU DEV Email Account in Gmail, open Gmail in your browser and click the settings (gear) icon in the top right of the screen.

Gmail Settings
Click on the gear icon.

Click the Accounts and Imports tab and under the Check mail from other accounts option, click the ‘Add a mail account’ link.

Gmail Settings - Add email account
Let’s add an email account in Gmail.

In the “Add a mail account” module, enter the email address from your WPMU DEV hosting account and click next.

Gmail - Add a new account setup field.
Enter your email address here.

If you see the following step, choose the Import emails from my other account (POP3) and click next.

Gmail email import options
Select import email from your POP3 account.

Then enter your WPMU DEV email account credentials and server information:

  • Username – Default is your email address
  • Password – The password you created or the strong password generated when creating the Email Account
  • Pop Server – mailu.wpmudev.host
  • Port – 995
  • And check the box always use a secure connection (SSL) when retrieving mail.
  • Click add account

Note: If you get an error message, go back to The Hub email account settings and check that you’ve copied the correct password to your clipboard, then try again.

Gmail account error message.
If you get an error message, check that you have entered all the correct details.

If you have entered the correct details, you will see a successful notification like the one shown in the screenshot below.

Gmail - email account added.
Your email account has been added to Gmail.

If you would also like to send emails from your Gmail account, choose the Yes, I want to be able to send mail as option, then click Next.

You will then be asked to enter information about your other email address. Make sure to check the Treat as an alias box so that messages received from your WPMU DEV email account will appear in your Gmail inbox. Click Next Step when this is done.

Gmail - Add another email address that you own.
Add additional details about your email account.

Configure the send options:

  • SMTP Server – This is mailu.wpmudev.host
  • Port – 587
  • Username – Default is your email address.
  • Password – The password you created or the strong password generated when creating the Email Account.
Gmail - SMTP server details.
Enter your SMTP server details.

Click the Add account button and verify your account, either by clicking on the verification link or by inputting the confirmation code sent to your email.

Gmail verify email address.
You just need to confirm and verify your account.

When you receive the confirmation email, either enter and verify the confirmation code into the Gmail window as shown in the screenshot above, or click on the verification link in your email.

Gmail email verification account
Check your inbox for the verification email.

If you click on the verification link in the email, you will need to click on the Confirm button.

Gmail confirmation link.
Confirm your email account.

Once you have confirmed this, you will see a Confirmation Success message.

Gmail email account confirmed.
Your email account is now confirmed.

You should now be able to send and receive emails from the Gmail client.

If you encounter an issue connecting to Gmail, contact WPMU DEV live chat support 24/7.

Email Setups and Configurations

Let’s look at different ways we can set up domain emails in your business.

Email Client Setup

What we have covered in the above tutorial is an example of setting up email accounts with email clients.

Diagram of email client setup.
Email client setup.

In this setup:

  • Sally configures the email sales@mydomain.com to send and receive emails on her Gmail account using a POP3 client.
  • Jim configures the email accounts@mydomain.com to send and receive emails on his Outlook service using a POP3 client.
  • Bob configures the email support@mydomain.com to send and receive emails on his Apple Mail account using a POP3 client.

Any emails sent to:

  • sales@mydomain.com will show up in Sally’s Gmail.
  • accounts@mydomain.com will show up in Jim’s Outlook.
  • support@mydomain.com will show up on Bob’s Apple Mail.

Email Alias Setup

If you have people managing different areas of your business like sales, accounts, support, etc., then an effective way to set up emails for your team is to give each member their own mailbox and create “departmental” aliases forwarding emails to your team member’s email accounts.

Each person then sets up their email mailbox as shown in the previous example.

A diagram of email aliases.
Email aliases setup.

In this setup, we first configure each person’s email account as follows:

  • Sally configures the email sally@mydomain.com to send and receive emails on her Gmail account using a POP3 client.
  • Jim configures the email jim@mydomain.com to send and receive emails on his Outlook service using a POP3 client.
  • Bob configures the email bob@mydomain.com to send and receive emails on his Apple Mail account using a POP3 client.

Next, we configure ‘departmental’ email aliases for the following addresses:

  • sales@mydomain.com forwards (i.e. redirects) all emails to sally@mydomain.com.
  • accounts@mydomain.com forwards all emails to jim@mydomain.com.
  • support@mydomain.com forwards all emails to bob@mydomain.com.

To set up an email alias for your domain, go to The Hub, then locate your site, and select Hosting > Emails > Email Accounts…

The Hub - Hosting - Emails - Email Accounts
Go to Email Accounts.

Make sure the prefix you want to use as an alias (e.g. sales@) isn’t already set up as an email account. If it is, you will need to delete the email account for that prefix before you can set it up as an email alias.

Delete email accounts.
Make sure the email alias isn’t already set up as an email account.

Also, make sure the destination mailbox for the alias is already set up. Refer to the tutorial above if you need help setting up a mailbox.

To create your email alias, click on the Add alias button.

Add alias button.
Click on Add alias,

Enter your alias prefix and select an email account to connect it with, then click the Add button.

Add email alias
Add your email alias.

Note that all email aliases point to emails using the same domain. If you plan to direct emails to destinations on different domains then use email forwarding instead (see next section below).

Email alias
Email alias added.

Continue setting up email addresses until you are done.

Email aliases
All email aliases are now set up.

Now, all emails sent to:

  • Either sales@mydomain.com or sally@mydomain.com will go to Sally.
  • Either accounts@mydomain.com or jim@mydomain.com will go to Jim.
  • Either support@mydomain.com or bob@mydomain.com will go to Bob.

Note the following:

  • All email aliases must point to emails using the same domain. If you plan to direct emails to destinations on different domains then use email forwarding instead (see next section below).
  • If you want to direct all emails to a specific address regardless of the prefix used in the email address (e.g. type.anything.here@domain.tld), then use the Catch All feature when creating an email alias.
Catch-all email address.
You can also set up a catch-all email address when creating an email alias.

Email Forwarding Setup

The last setup we’ll look at is where we forward any emails sent to domain email addresses (e.g. sales@mydomain.com) to a user’s existing email address without the need to set up separate email accounts for our recipients.

a diagram of email forwarding
Email forwarding setup.

If we go back to the top of this article where we talked about businesses promoting their websites but using email addresses from Gmail, Outlook, or an address supplied by the ISPs, this is where this option comes in handy.

Instead of looking unprofessional, a business can simply set up an email forwarding address using their domain and receive all emails sent to a professional-looking email address on their private email address.

Another instance where email forwarding can be useful, is if you outsource an area of your business (e.g. accounts and bookkeeping) and you want all communications sent to a departmental email address (e.g. accounts@mydomain.com) to be forwarded directly to your outsourced provider’s email address (e.g. jim@outsourcedfirm.com)

Note: As mentioned earlier, email forwarding is a separate feature and cannot be used together on the same domain with WPMU DEV’s email hosting, as each feature requires setting up different MX records for the same domain.

Refer to our email forwarding documentation for instructions on configuring this setup.

Also, see our detailed instructions on how to configure SMTP to send emails using Branda, our WordPress white label plugin and a webmail service like Gmail or a client application like Outlook.

Get Your eMail On With a Custom Domain and WPMU Email Hosting

Email is essential to growing your business. WPMU DEV includes free email hosting with email accounts, email aliases, and email forwarding to all members and with all hosting plans.

Decide which option will work best for your business email setup and check our email documentation or contact our support team if you have any questions.

Image credits: ascension-signs.co.uk pa

How to Start a Photography Business

We live in a time where visuals seem more important than ever. People really need to see things to believe them, so photos are of great importance. 

Whether you’re looking to be a travel photographer, a fashion photographer, an event photographer, or any other type of photographer, you must understand the business side of things from the very start. 

This ensures that your interest in photography is more than just a hobby, but that it actually turns into a business where you can make money, and potentially even make photography your full-time job. 

The advances in technology and the availability of camera gear have made photography a much more realistic job for many people. Thus, you must tap into your skills and your creativity to set you apart from amateur photographers. 

To help you get started in building a photography business that has the potential for success, we have crafted this article. Read on for all the information you need to stick clicking for cash.

The Easy Parts of Starting a Photography Business

As is the case with any kind of business, there are some easy parts and some hard parts. What those specific parts are will vary from business to business. 

When it comes to photography, there are a couple of things that you may think are difficult, but are actually quite easy. 

Finding Your Niche

As mentioned above, the photography industry is quite saturated today, largely thanks to smartphones that can take some pretty incredible photos. 

Thus, you must figure out what type of photography you’re good at. This is a crucial first step in the process of starting your business, but it doesn’t have to be hard. 

If you aren’t sure yet what kind of photography you like, try a few different things. Take a trip and see if you’re able to create photos that way that would push you more towards a career in travel photography. Do a photoshoot with a model and see how that goes–maybe you’ll find that you are great at fashion shoots. Or volunteer to shoot an event and you may be surprised at how well your photos turn out. 

Have fun with this part of the process. Be flexible and open to different styles of photography, and pay attention to what one(s) you are good at, and what one(s) you enjoy. 

Set Boundaries

As much as we all love friends and family discounts, when it comes to your photography business, it is important that you, from the beginning, establish rules about discounts. 

If your rules include no discounted prices, that’s okay! You are trying to make a living, so you have no obligation to offer lower prices to people you know. Just make it clear what your friends and family rules are so that the lines don’t get blurry down the road. 

It is inevitable at some point in your photography career that you will have people ask you to shoot for free, and you have to decide if you are open to that. You may find that as you start in this career, you are willing to do shoots for free to gain experience. 

However, set boundaries so you know at what point you will no longer do free/discounted shoots. 

Start Small

Before you decide to take the plunge into a full-time photography career, begin by doing a few small shoots here and there. 

In other words, don’t quit your day job yet. Especially because building a business like this can take some time. And if you put too much pressure on yourself by quitting your job before you have a steady stream of new income, you may find yourself under a whole lot of stress. 

Do some shoots on nights and/or weekends and grow from there. 

Start Social Media Accounts

Because of the highly visual world that we live in, you must get your photography out there where people can see it. And the best way to do that is via social media.

As a photographer, you will want to utilize Instagram and TikTok but should also consider LinkedIn and Twitter as well to link to your portfolio and Instagram. Some photographers treat Instagram as their portfolio, while some use it in addition to a website portfolio. 

What many people who only use social media for fun don’t realize is that it can be a full-time job running a business social media account. 

That’s where a tool such as Later will come in handy. This social media marketing platform can help you plan, analyze and publish your content. 

We will share more on this below.

The Difficult Parts of Starting a Photography Business

Starting a business in a creative industry is never an easy feat. Though you are likely doing it because you have found your passion, know that following that passion doesn’t come free of struggles. 

Here are some of the difficult things you may face when starting your photography business. 

Create A Business Plan

Though you may think this is unnecessary for your photography business, think again. 

A business plan is essentially a roadmap of what your business is and how you plan to make money from it. This is crucial to do so that you can see whether this business has to potential to provide you real income or now. 

A business plan will cover things such as cash flow, expenses, competitors, and more. 

This part of the process will take a lot of time, research, and thought, but is important to your success. 

If you feel that you can’t do it on your own, hire someone who is experienced in business plans to help you through it. 

Covering Up-Front Expenses

There is no way around it–camera gear is expensive. Even if you start with just the basics, that includes: 

  • Camera body
  • At least two lenses
  • Tripod
  • Adobe Suite subscription
  • SD cards
  • Monitor
  • Lighting (depending upon the type of photography you do) 

You’re looking at thousands of dollars with that equipment alone. And as your business grows you will likely find yourself investing in more lenses, a drone, and much more. 

Photography is an expensive business because of all the equipment involved. And, as much as we love how quickly technology advances because it makes our lives more simple, that means that your camera gear can become outdated quickly. 

Be realistic about how much you need to spend on gear to get things started and what your budget is.

Step 1: Decide Your Business Type

When it comes to a photography business, you have options of how you want the business to be structured legally speaking. 

Here are the top three options that photographers usually go with.

Sole Proprietor

This type of business is the easiest to get started but makes you more vulnerable to issues than the other options. With this business structure, if a client ever sued you, they can go after all of your assets, personal and business.

Limited Liability Corporation (LLC)

This type of business is one of the most popular because it separates your business liability from your personal assets. Thus, if a client sues you, they cannot come after your personal assets. An LLC does require that you fill out some paperwork, which varies depending upon the state you set up your business in.

S-Corp

If you are starting your photography business alone, this is not the right option for you. It is much more expensive than an LLC and will seem quite complicated. This may be a better option for you down the road when your photography business grows.

Step 2: Secure Funds

If you have enough money of your own to get all the gear you need for your photography, and also to fund other things such as branding, a website, social media, and more, then you won’t have to worry much about this step. 

However, if you don’t have the funds to cover all those expenses, then you will have to figure out where that money will come from.

You have a couple of different options here. You can ask family or friends to loan you money and once your business gets rolling, you can pay them back. 

Or you can head to the bank and apply for an official loan.

Either way, you will need your business plan to prove to your friends/family or the bank that you have thoughtfully planned out what each dollar you’re asking for will go towards and how you will pay the money back.

Step 3: Come Up With a Pricing Plan

Once you’ve got your business plan and your gear all sorted, it’s time to decide what you need to charge for your services. 

This is a tough part of the process but is important for setting your value. You can start off with lower prices and as you become more experienced and have more shoots under your belt, you can increase prices. 

There are three parts to pricing: shooting, editing, and picture sales.

Decide on Your Hourly Shooting Rate

Think about what an hour of your time is worth when shooting. Take into account this may include you coming up with ideas for the shoot, finding locations, setting things up for a shoot, taking things down, and more. 

You may decide that a good place to start with this is between $50-75 an hour.

Decide on Your Editing Rate

Many photographers charge different rates for editing than they do for shooting. The choice is yours. If you charge $75/hour for shooting, you may only charge $50/hour for editing, as editing allows you to sit on your computer and do your work at home, or anywhere else you can take your laptop. 

It is a good estimation that for every hour you spend shooting, you spend three hours editing. 

Knowing these prices will help you give clients an estimate of what a shoot will cost. 

Decide How You Will Sell Pictures To Your Clients

Most photographers offer sales packages where clients can purchase print or digital images of pictures from their shoot. And while it’s customary to include a small number of these images at no extra cost as part of the shoot itself, a typical shoot will yield dozens or hundreds of photos. If a client wants more than the included number, these packages allow them to purchase more. 

This is particularly important to keep in mind for more personal shoots where the client is an individual, like weddings, fashion shoots, and branding shoots. Brides and business owners want lots of pictures of themselves!  

Offering picture packages as add-ons also can help cover editing costs–you might choose to have one package where the client gets unedited photos they can play with themselves, and another that covers a certain number of professionally edited photos. 

Step 4: Create Your Brand

Once you’ve decided what kind of photography you want to pursue, an important step is your branding. 

Who is your target client? How do you speak to them using your brand? 

Here is how to create your brand.

Decide What Makes You Unique

What sets you apart from other photographers? Are you the best event photographer in town? Can you capture a model’s identity in just one shot? Are you amazing at corralling kids for family pictures? Figure that out and use it as your selling point.

Create a Visual Identity

Since photography is all about visuals and how those visuals make people feel, your visual identity is key. 

A photographer’s goal is to have someone look at a picture and immediately recognize who took it without seeing the photog’s name. So what will you do in your photos to make that happen? 

Establish Your Editing Style

Your brand is also represented in the way that you edit your photos. Most photographers tend to stick to the same tones and colors in their work, so you should aim to do the same. 

This will also help you save time when it comes to editing. Presets are a major bonus for photographers to work on creating. Though each photo requires special attention, once you’ve established your brand style, you can use the presets you create as a starting point and edit more from there.

This allows your portfolio to be visually cohesive. 

Step 5: Market Yourself on Social Media

Most photographers turn to social media to promote their work, and we think it’s a great place to do so. 

Instagram is a major platform for photographers, but we are also seeing TikTok grow in that area as well. Get creative on how you turn your photos into videos for TikToks. 

Facebook may not be at the forefront of your mind, but there are still a lot of people out there using it. So make sure you think about social media marketing on this platform as well. You also want to tap into the power of Pinterest, a powerful platform that is underrated. 

A great way to make use of multiple social media platforms without having to spend all of your time on the apps is by using Later

As mentioned above, this marketing platform allows you to plan your content ahead of time and schedule it to post automatically so that you don’t have to deal with manually posting to multiple different platforms. 

Later also provides you with Instagram analytics so you can see how your posts are helping you grow, and whether the strategies you’re using are working. 

Step 6: Network

Though marketing online is a big piece of your photography business, what may be even more important may be putting yourself out there and networking. 

Many photographers get their gigs via referrals from previous clients, so make sure you put in the work to establish relationships with people. 

Networking is also another way to let people know what you do who may not see you on social media. You never know who may need a photographer, so always be on top of networking, even if you’re just out to dinner with friends and happen to meet a stranger. That stranger can easily become a future client who refers you to someone else, and the next thing you know, the domino effect is in full effect.

Step 7: Reinvest in Your Business

It is a good rule of thumb to set aside three months’ worth of income to fall back on in case anything with your business goes wrong. Once you have that in safety, then start thinking about reinvesting money into your business so that you can continue to grow it. 

Since photography gear becomes more and more advanced every year, and your photography skills become more advanced every year, you should invest in new equipment. 

Keep a list of what you need to take your business to the next level, and see how you can make it financially happen. 

Node.js for Real-Time Application Development

If we say that time is perhaps the most valuable asset in the modern world, it will not be an overstatement. Moreover, in this ever-evolving digital business world, the value of time has become even more important.

With the expansion of technology, there are a plethora of technologies available for real-time application development. Among all, Node.js has left a lasting impression on the app development realm with its emphatic features and other advantages.

Java Concurrency – use CyclicBarrier to synchronize tasks across threads

Introduction

This tutorial introduces the CyclicBarrier class and teaches you how to use it.

Goals

At the end of this tutorial, you would have learned:

  1. How to use CyclicBarrier to synchronize tasks across multiple threads.
Prerequisite Knowledge
  1. Intermediate Java.
  2. Basic knowledge of threads.
  3. Executors/ExecutorService.
  4. Lambdas.
Tools Required
  1. A Java IDE with at least JDK 10 support (optionally for LVTI), such as IntelliJ Community Edition.
Concept Overview

CyclicBarrier is a synchronization tool that can be used to synchronize tasks in multiple threads. CyclicBarrier introduces a performance penalty because task(s) in any specific thread is blocked until task(s) in other threads complete, so it is important to weigh the pros and cons when using it.
A CyclicBarrier object keeps count of how many times await() has been called on it. Whenever a thread calls await() on a CyclicBarrier object, that thread is disabled until the CyclicBarrier trips.
The CyclicBarrier object is tripped when the number of threads calling await() is equal to the number that the CyclicBarrier object was initialized with(in the constructor). When a CyclicBarrier object is tripped, all threads waiting are allowed to resume execution.

Scenario

To understand this concept, we are going to create a program to build an apartment building with 3 floors and 4 apartments on each floor.
apartments.png

To simplify the concept, we are going to assume that all the apartments on a floor must be built first before any apartment on the upper floor can be built. It is impossible to build an apartment on the 3rd floor before building apartments on the 1st and 2nd floors because the apartment on the 3rd floor would have no structure to support it.

The picture below depicts the desired logic flow.
barrier.png

The Entry Class

First let us create an Entry class to hold our main() method and two other methods syncBuild() and asyncBuild(). You do not need to understand the code for now as I will explain it later.

package com.example.app;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Entry {
   public static void main(String[] args){
       asyncBuild();
       //syncBuild();
   }

   private static void asyncBuild(){
       final int workerCount = 4; //1

       ExecutorService service = Executors.newFixedThreadPool(workerCount); //2

       try{
           var builder = new ApartmentBuilder(); //3

           for (int i = 0; i < workerCount; i++){ //4
               service.submit(builder::asyncBuildApartments); //5
           }
       } finally {
           service.shutdown(); //6
       }
   }

   private static void syncBuild(){ //7
       final int workerCount = 4;   //8

       ExecutorService service = Executors.newFixedThreadPool(workerCount); //9

       try {
           var builder = new ApartmentBuilder(); //10
           var barrier1 = new CyclicBarrier(workerCount,
                   () -> System.out.println("Done building 1st floor apartments!")); //11
           var barrier2 = new CyclicBarrier(workerCount,
                   () -> System.out.println("Done building 2nd floor apartments!")); //12

           for (int i = 0; i < workerCount; i++){ //13
               service.submit(() -> builder.syncBuildApartments(barrier1, barrier2)); //14
           }
       } finally {
           service.shutdown(); //15
       }
   }
}
The ApartmentBuilder Class

Next we will create the ApartmentBuilder class in the same Entry.java file.

class ApartmentBuilder {
   private void buildFirstFloorApt(){ //16
       System.out.println("Built an Apartment on 1st Floor.");
   }

   private void buildSecondFloorApt(){ //17
       System.out.println("Built an Apartment on 2nd Floor.");
   }

   private void buildThirdFloorApt(){ //18
       System.out.println("Built an Apartment on 3rd Floor.");
   }

   public void syncBuildApartments(CyclicBarrier barrier1, CyclicBarrier barrier2){ //19
       try {
           buildFirstFloorApt(); //20
           barrier1.await();     //21
           buildSecondFloorApt();//22
           barrier2.await();     //23
           buildThirdFloorApt(); //24
       } catch (BrokenBarrierException | InterruptedException e) {
           e.printStackTrace();
       }
   }

   public void asyncBuildApartments(){ //25
           buildFirstFloorApt(); //26
           buildSecondFloorApt();//27
           buildThirdFloorApt(); //28
   }
}

That was quite a lot of code, so I have added numeric comments at the end of some lines to make describing the class content easier. When I refer to line 1, that means the line with the comment //1 and not the line number shown in your IDE or text editor.

  1. The methods on lines 16, 17, and 18 are simple methods that simulate building one apartment on a specific floor at a time. For example, if we want to build enough apartments to fill up the 1st floor, we would have to call buildFirstFloorApt() 4 times.

  2. The asyncBuildApartments() method on line 25 does not make use of any synchronization technique. All it does is building one apartment on each floor and exits. It is not aware of how many workers(threads) are available. This is fine if we only have one worker, but if we have multiple workers working concurrently, then it would be a mess. An experienced worker might complete their tasks faster than a new worker, therefore not satisfying our desired behavior specified in the Scenario section.

  3. To see why there is a problem with asyncBuildApartments() method, we need to look at the asyncBuild() method (in Entry class).
    a. Line 2 is where we create a thread pool with a fixed size that is equal to the number of workers we have.
    b. Line 5 is where we submit new Runnable objects into the thread pool. Because we have 4 workers, we need to submit 4 Runnable lambdas with each calling asyncBuildApartments() once.
    c. When we try to execute asyncBuild() in main(), we would receive output where the workers are completing tasks without waiting on one another at all (output will always be different for each run).

     Built an Apartment on 1st Floor.
     Built an Apartment on 1st Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 1st Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 3rd Floor.
     Built an Apartment on 3rd Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 3rd Floor.
     Built an Apartment on 1st Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 3rd Floor. 
  4. To achieve our desired behavior where all workers must wait until all apartments on each floor are completed before moving to building for the next floor, we would need to use the syncBuildApartments() method declared at line 19.
    a. Take a good look and observe the pattern from line 20 to line 23. Each method that builds an apartment on each floor calls await() before moving onto the next floor. Each call to await() increases the CyclicBarrier counter by one.
    b. The method itself is not aware of how many workers are available or the maximum count of the CyclicBarrier objects. All it cares about is that it needs to call await() after finishing building an apartment on each floor (except for the last(3rd) floor).

  5. The method syncBuild() declared on line 7 is where we would call syncBuildApartments(). syncBuild() and asyncBuild() are similar, but with a few differences on lines 11, 12, and 14.
    a. Because syncBuildApartments() require two CyclicBarrier objects to work properly, we have to create them on lines 11 and 12. In this case we are using the 2nd CyclicBarrier constructor, which optionally executes a Runnable lambda when the barrier is tripped. The first integer argument in the CyclicBarrier constructor is the count until the barrier is tripped.
    b. Line 14 is where we pass the CyclicBarrier objects when calling syncBuild().
    c. When calling syncBuild() in main, we get a result where all workers wait for one another to complete each floor before starting to build on the next floor.

     Built an Apartment on 1st Floor.
     Built an Apartment on 1st Floor.
     Built an Apartment on 1st Floor.
     Built an Apartment on 1st Floor.
     Done building 1st floor apartments!
     Built an Apartment on 2nd Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 2nd Floor.
     Built an Apartment on 2nd Floor.
     Done building 2nd floor apartments!
     Built an Apartment on 3rd Floor.
     Built an Apartment on 3rd Floor.
     Built an Apartment on 3rd Floor.
     Built an Apartment on 3rd Floor.

As we can see, all workers wait for each other before proceeding to the next floor. The Runnable lambdas are also executed as well when the barriers are tripped.

Solution Code
package com.example.app;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Entry {
   public static void main(String[] args){
       //asyncBuild();
       syncBuild();
   }

   private static void asyncBuild(){
       final int workerCount = 4; //1

       ExecutorService service = Executors.newFixedThreadPool(workerCount); //2

       try{
           var builder = new ApartmentBuilder(); //3

           for (int i = 0; i < workerCount; i++){ //4
               service.submit(builder::asyncBuildApartments); //5
           }
       } finally {
           service.shutdown(); //6
       }
   }

   private static void syncBuild(){ //7
       final int workerCount = 4;   //8

       ExecutorService service = Executors.newFixedThreadPool(workerCount); //9

       try {
           var builder = new ApartmentBuilder(); //10
           var barrier1 = new CyclicBarrier(workerCount,
                   () -> System.out.println("Done building 1st floor apartments!")); //11
           var barrier2 = new CyclicBarrier(workerCount,
                   () -> System.out.println("Done building 2nd floor apartments!")); //12

           for (int i = 0; i < workerCount; i++){ //13
               service.submit(() -> builder.syncBuildApartments(barrier1, barrier2)); //14
           }
       } finally {
           service.shutdown(); //15
       }
   }
}

class ApartmentBuilder {
   private void buildFirstFloorApt(){ //16
       System.out.println("Built an Apartment on 1st Floor.");
   }

   private void buildSecondFloorApt(){ //17
       System.out.println("Built an Apartment on 2nd Floor.");
   }

   private void buildThirdFloorApt(){ //18
       System.out.println("Built an Apartment on 3rd Floor.");
   }

   public void syncBuildApartments(CyclicBarrier barrier1, CyclicBarrier barrier2){ //19
       try {
           buildFirstFloorApt(); //20
           barrier1.await();     //21
           buildSecondFloorApt();//22
           barrier2.await();     //23
           buildThirdFloorApt(); //24
       } catch (BrokenBarrierException | InterruptedException e) {
           e.printStackTrace();
       }
   }

   public void asyncBuildApartments(){ //25
           buildFirstFloorApt(); //26
           buildSecondFloorApt();//27
           buildThirdFloorApt(); //28
   }

}
Summary

We have learned how to use CyclicBarrier to synchronize tasks across threads, but there are a few things that we should keep in mind:

  • The barrier limit and the thread pool size should match. If the thread pool count is less than the barrier limit, then your threads will wait indefinitely, resulting in a deadlock.
  • Pay attention to the reusable (hence why it is called cyclic) property of the CyclicBarrier. The barrier count is automatically reset once it is broken. Your code might behave unexpectedly if the thread pool size is larger than the barrier limit.

The full project code can be found here: https://github.com/dmitrilc/DaniWebCyclicBarrier

Java Functional – How to use the partitioningBy Collector

Introduction

partitioningBy() collects a Stream into a Map. In this tutorial, we will compare the two different partitioningBy methods and learn how to use them.

Goals

At the end of this tutorial, you would have learned:

  1. What Collectors.partitioningBy does and how to use it.
Prerequisite Knowledge
  1. Basic Java.
  2. Java Streams (java.util.stream, not IO streams).
  3. Functional Interfaces (java.util.function).
  4. Lambdas/Method References.
Tools Required
  1. A Java IDE with support for at least JDK 16 (optionally for Record). If you do not want to use the Record class in the example, JDK 8 is enough.
partitioningBy Concept Overview

When operated on a stream, partitioningBy() returns a Map where the keys are always of Boolean type. This is a great Collector to use when you want the returned Map to contain 2 partitions, one for True and one for False.

Let us use an example to clarify the concept here.

You are given 2 students with different names, John and Mary, in a stream. partitioningBy() can help us to create a table with 2 columns, with the first column containing only students that match a specific Predicate(java.util.function.Predicate), while the other column containing students that do not match that same Predicate. If our Predicate matches only students with names starting with the letter J, then the scenario is depicted below.
partitioningby.png

As you can see, the partitioningBy``Collector along with a Predicate helped us divide our data set into two partitions.

partitioningBy In Action

It is time to write some code to see how partitioningBy() works. We will start with creating the boilerplate code.

  1. Create a new Java project.

  2. Create a new package com.example.collectors.

  3. Create a Java class called Entry. This is where your main method will be.

  4. Copy the code below into Entry.java.

     package com.example.collectors;
    
     import java.util.List;
    
     public class Entry {
        public static void main(String[] args){
            List<Student> students = List.of(
                    new Student("John", 22, Gender.MALE),
                    new Student("Bob", 21, Gender.MALE),
                    new Student("Mary", 23, Gender.FEMALE),
                    new Student("Jessica", 21, Gender.FEMALE),
                    new Student("Sam", 24, Gender.OTHER),
                    new Student("Alex", 20, Gender.OTHER));
        }
     }
    
     record Student(String name, int age, Gender gender){}
    
     enum Gender {
        MALE, FEMALE, OTHER
     }

In Entry.java, we now have an Entry class, which houses the main method. We also have two other reference types, a Student record and a Gender enum. Lastly, there is a List<Student> in main, which we can reuse for our code later (because Stream objects cannot be reused).

There are two versions of partitioningBy(), so let us start with the easier one first.

public static <T> Collector<T, ?, Map<Boolean, List<T>>> partitioningBy(Predicate<? super T> predicate)

The first version only requires a Predicate. To use it, we turn our student list into a stream and pass the Collector into the collect method.

Map<Boolean, List<Student>> result = students.stream().collect(
       Collectors.partitioningBy(student -> student.name().length() < 4));
System.out.println(result);

The Predicate lambda used here returns true if the student name has less than 4 characters, and false otherwise.

If I were to translate this code into plain English, it would mean: For all of the students on the list, put the students whose names have less than 4 characters into the True column, and anything else in the False column.

When we print the resulting Map, we can see all students with names less than 4 characters in the List<Student> associated with the true key.

{false=
    [Student[name=John, age=22, gender=MALE],
    Student[name=Mary, age=23, gender=FEMALE],
    Student[name=Jessica, age=21, gender=FEMALE],
    Student[name=Alex, age=20, gender=OTHER]],
true=
    [Student[name=Bob, age=21, gender=MALE],
    Student[name=Sam, age=24, gender=OTHER]]}

The 2nd version of partitioningBy() is a little bit more complicated because it allows you to chain another Collector to the result.

public static <T,D,A> Collector<T, ?, Map<Boolean, D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T,A,D> downstream)

Here is how to use it.

Map<Boolean, Map<Boolean, List<Student>>> result2 = students.stream().collect(
       Collectors.partitioningBy(student -> student.name().length() < 4,
               Collectors.partitioningBy(student -> student.age() > 22)));
System.out.println(result2);

Remember the Map<Boolean, List<Student>> that we get from the simpler version of partitioningBy()? Now the value for each key in the Map is no longer a List<Student>, but is another Map<Boolean, List<Student>>.

If we print out result2, we will see that the first Predicate(if name length is less than 4) creates the top Map with Boolean keys, but the values are now another Map (withBoolean keys as well). I have formatted the println output so it would be easier to observe what happened. The outermost boolean pairs are the results of the first Predicate, and the inner pairs are the results of BOTH Predicate.

{false={
        false=[
        Student[name=John, age=22, gender=MALE],
        Student[name=Jessica, age=21, gender=FEMALE],
        Student[name=Alex, age=20, gender=OTHER]],

        true=[
        Student[name=Mary, age=23, gender=FEMALE]]},

true={
        false=[
        Student[name=Bob, age=21, gender=MALE]],

        true=[
        Student[name=Sam, age=24, gender=OTHER]]}}
Solution Code
package com.example.collectors;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Entry {
   public static void main(String[] args){
       List<Student> students = List.of(
               new Student("John", 22, Gender.MALE),
               new Student("Bob", 21, Gender.MALE),
               new Student("Mary", 23, Gender.FEMALE),
               new Student("Jessica", 21, Gender.FEMALE),
               new Student("Sam", 24, Gender.OTHER),
               new Student("Alex", 20, Gender.OTHER));

       Map<Boolean, List<Student>> result = students.stream().collect(
               Collectors.partitioningBy(student -> student.name().length() < 4));
       System.out.println(result);

       Map<Boolean, Map<Boolean, List<Student>>> result2 = students.stream().collect(
               Collectors.partitioningBy(student -> student.name().length() < 4,
                       Collectors.partitioningBy(student -> student.age() > 22)));
       System.out.println(result2);
   }
}

record Student(String name, int age, Gender gender){}

enum Gender {
   MALE, FEMALE, OTHER
}
Summary

In this tutorial, we have learned what partitioningBy() does and went over both partitioningBy() variants.

The full project code can be found here https://github.com/dmitrilc/DaniWebPartitioningBy

How to Build HTML Forms Right: Accessibility

Forms are arguably the most important parts of any web application. Without forms, we would not have sites like Google, Facebook, Amazon, Reddit, etc. However, the more I browse the web, the more I see poor implementations of forms.

In this series, we will examine the proper steps to creating forms for the web, how to think about the code we write, and considerations to make along the way. The series is broken up into the following parts:

Collective #675






Breaking the web forward

A sobering article by Peter-Paul Koch on the current lamentable state of browsers and the web where “[c]omplex systems and arrogant priests rule”.

Read it



















The post Collective #675 appeared first on Codrops.

10 Creative Animation Demos in CSS and JavaScript

No matter what kind of website you have, a little bit of animation can go a long way to create visual interest and engage your visitors. From animated tab bars and CSS waves to creative text hovers, there are plenty of ways to spice up your website.

In this post, we’ll share 10 eye-catching CSS and JavaScript animations that you can use as an inspiration for incorporating animated effects in your next web design project.

Your Designer Toolbox
Unlimited Downloads: 500,000+ Web Templates, Icon Sets, Themes & Design Assets


 

Animated Tab Bar

Here’s a simple and stylish tab bar that’s animated whenever a user clicks on a different icon. You can easily use this as a tab bar but you can also implement it in a menu to make your navigation more dynamic.

See the Pen
Animated Tab Bar
by abxlfazl khxrshidi (@abxlfazl)
on CodePen.light

Simple CSS Waves

This animation relies on CSS alone so there’s no JavaScript code. It features a subtle and elegant animation that looks like ocean waves. This would work perfectly on a hotel or a travel website as well as on a website promoting wellness products or services.

See the Pen
Simple CSS Waves | Mobile & Full width
by Goodkatz (@goodkatz)
on CodePen.light

Space Globe

Lately, everyone’s been buzzing about space travel and this animation would highlight that topic perfectly. It features a space globe along with another sphere resembling a meteor. If you have any type of futuristic website or if you’re working on a technology oriented project, this animation could come in handy.

See the Pen
Space globe – Three.js
by isladjan (@isladjan)
on CodePen.light

Gooey Footer

Here’s a fun animation that once again relies on pure CSS. If you decide to add it to your website, your footer will have a fun and playful gooey look. This animation would add a dose of interest to any creative website or website that’s not serving a corporate audience.

See the Pen
CSS Goey footer
by Zed Dash (@z-)
on CodePen.light

Parallax Scroll Animation

Here’s a true work of art when it comes to what’s possible with a little bit of CSS and JavaScript. As you scroll down, the scene changes entirely from morning to night. If you need a creative background for a timelapse, this animation is a must-have.

See the Pen
Parallax scroll animation
by isladjan (@isladjan)
on CodePen.light

Scroll Trigger Demo

At first glance, all you see is white background with black letters. But, when you scroll text and photos come into view and bring the entire thing to life. This animation would be a creative way to display any type of portfolio. Designers, photographers, and artists should definitely check this one out.

See the Pen
GSAP ScrollTrigger – Demo
by Noel Delgado (@noeldelgado)
on CodePen.light

Fun Toggles

Toggles are pretty ubiquitous nowadays. But that doesn’t mean they have to be boring. With a bit of creativity, you can add simple animations and make them more fun. You’ll find a nice collection of various toggle animations, including a beer pong and a Kobe Bryant tribute.

See the Pen
Toggles
by Olivia Ng (@oliviale)
on CodePen.light

Realistic Red Switch

CSS has indeed come a long way since its inception. This realistic red switch that relies on pure CSS animation is the best proof of what’s possible when you master CSS.

See the Pen
Realistic Red Switch (Pure CSS)
by Yoav Kadosh (@ykadosh)
on CodePen.light

Neon Love

This animation would work well for any type of Valentine’s Day promotional campaign or on any website that caters to couples. It features a blue and pink neon heart that truly looks like neon lights.

See the Pen
NEON LOVE
by al-ro (@al-ro)
on CodePen.light

Fluid Text Hover

Here’s another animation that at first glance looks like nothing special. Instead of a solid color, the text uses a photo fill. Once you hover over the word, the text becomes fluid. It’s pretty creative and it would work well on any artists or designer’s website that wants to show off their skills.

See the Pen
Fluid text hover
by Robin Delaporte (@robin-dela)
on CodePen.light

 

The Beginner’s Guide to Business Locations

The population of the world is nearly 7.8 billion people. And, according to a recent study, over a quarter of them are shopping online–26%!

There is no denying that online shopping is a significant part of our modern-day lives, especially when it comes to companies such as Amazon and Alibaba. 

Yet, there is something about a physical business location that people still love. While online shopping is convenient and easy, people still love to window shop, see and touch the merchandise, try things on, and get a deeper connection to the company. 

That is certainly the case for retail stores and restaurants, but a business location for an office and other non-customer-facing businesses is also crucial. 

You must take your time when choosing a “home” for the business. It is not something you pick simply because you like the space. Far more goes into it to ensure that you get the best location for your business. 

Not sure what those considerations are? Don’t worry. 

To help you in this endeavor, we have created this guide. Read on to find out all you need to know about business locations.

The Basics of Business Locations

Whatever the purpose of the building, it is a physical spot where your company does its work. That could be a retail shop, restaurant, or office for your employees. 

The business location you choose depends on the type of business that you operate.

The location you’d choose for a retail shop has very different requirements than one for a tech start-up. 

Here are a few different types of business locations so you can decide which best fits your needs.

Retail Business

This type of business sells actual goods or services to a consumer for their use. A retail business needs to be somewhere with a lot of foot traffic and a popular spot for people to pass by. 

Retail businesses include restaurants, clothing and shoe stores, stationery stores, candle shops, and more. These are businesses that often rely on local in-person shoppers.

While storefronts in places like the downtown of a city or a mall are great for retail stores, you can also get creative with it and opt for airports, pop-up shops, and, if your business is big enough, a free-standing building.

Commercial Business

This type of business is one where goods or services are sold. Commercial business can mean anything outside of the manufacturing or production of products, as those are considered industrial businesses.

Examples of commercial businesses are real estate firms, engineering companies, insurance brokerages, mechanics, architecture firms, and other professional services.

The space you want for this type of business does not need to rely on heavy foot traffic.

Home-Based Business

With more people working from home than ever, you may find that your home does not accommodate you living and working in it, along with the others you occupy that space with. 

Home-based businesses can be anything from a photographer, graphic designer, other freelancers, and even salons. Home-based businesses vary widely in the type of business they are and what they sell.

As your business grows, you may need to consider a business location like renting office space, a studio, or expanding into a shop.

Mobile Business

Things such as food trucks and pop-up shops are becoming increasingly popular with the introduction of mobile card readers that you can attach to your smartphone. Also, given the current high real estate prices, this option offers a lower barrier to entry than permanent locations. 

Maybe you have a business that would be well-suited to hop from place to place or work out of something like a truck.

Industrial Business

Locations for something like an industrial business are more limited than some of the other types of companies. 

This is because, with an industrial business, you are operating either a manufacturing or a distribution business and thus need lots of space to store whatever you are making and/or selling. Your factory, farm, or other industrial business usually has specific needs for space and equipment that small retail businesses don’t.

You may want to consider a location close to major highways or airports to make transporting the goods easier or one on the outskirts of a town for lower real estate prices per square foot.

In addition, you will have to look at the pollutants that may be a byproduct of your business to determine the distance you need to be from a city center to keep the air safe and proximity to safe disposal.

3 Tools to Improve Business Locations

Since location is such an essential part of your business, you must have the right information and tools to help you find the best location for you. 

Some great options provide you with information to help you make an educated decision on where your business should be located.

Mapcite

This award-winning software platform helps companies access and use location data. It does this by creating custom data sets based on your specific company needs. 

With that information, Mapcite helps transform the data into usable location data to help you determine the best location for your business. 

This tool is ideal for those not well-versed in location analytics and need some help gathering and understanding the information. 

Mapcite also has an app that allows you to: 

  • Search information based on your current location
  • Get new information and images based on your location
  • Set virtual boundaries around areas (geofences) to create “triggers” for the discovery of information

Mapcite offers a free version that allows you limited access to the app. 

It also offers these pricing plans: 

Free. The free plan comes with a shared cloud, up to 1000 data rows, email support, and limited access to the app.

Standard. $99 per month. This comes with cloud storage, between 1,000 and 100,000 data rows, up to five users, email support, and cloud subscription access to powerful map visualization and analytics. 

Company/Organization-Wide. POA monthly. This comes with an on-premises or dedicated cloud, unlimited data rows, phone and email support, and the ability to deploy Mapcite across an organization.

Mapbox Studio

Want to be able to upload and visualize geodata easily? 

Try the new intuitive user interface of Mapbox Studio

This studio offers all sorts of products and features, including: 

  • Real-time maps
  • Ability to design custom maps
  • Data building
  • JavaScript library for vector maps
  • Mapbox tiling service
  • Static maps
  • Search points of interest
  • Movement data

Movement data may be one of the most important parts to look into for your business location. It provides you with up-to-date insights about where the most people traffic is, which will come in handy for choosing your site. 

Pricing for Mapbox Studio is determined by what you use. They have a free tier of every product in their suite so that you can get introduced to it before diving deeper. They also offer volume discounts that allow you to get volume pricing as your usage grows.

To see more information about their pricing, visit here.

Targomo

This AI-based location intelligence platform out of the UK was built to analyze, plan, and predict data about your location network.

With the information gathered by Targomo, you can get a competitive advantage in your business location.

This software integrates sociodemographic data as well as mobility analysis to determine the performance of different stores. It also helps predict how a competitor may impact your business, which can be a great benefit. 

Targomo offers a free option that allows you to use some of the basics of the software, including: 

  • Analytics
  • Free data sets
  • Free reporting 

The paid pricing plans are as follows: 

Free. The free tier covers one user, 10 locations, one project, population statistics, building and infrastructure data, and some analytics.

Pro. From 899 euros per month (around $1,062 USD). With this, you get tools to optimize your network, enhance your location analytics, use in-depth location data, and build powerful reports. 

Enterprise. Contact for pricing. This package offers everything the Pro package does and the ability to replicate your success with geo AI, receive a customized setup, and get data science consulting & CSM.

6 Tricks for Finding Great Business Locations

Now that you have a better understanding of business locations and the tools available to help you find the best location, it’s time to get into some tips and best practices that can help determine what is best for your business.

Know Your Budget

This may seem obvious, but you’d be surprised at how many people start scouting locations that are way out of their budget. 

When figuring out your budget, you must consider more than the monthly rent or purchase price–there is far more to the budget than that. 

Some additional costs you may run into include: 

  • Taxes
  • New equipment
  • Renovations and updates
  • Minimum wage requirements (if you have employees)
  • Utility upgrades
  • Licenses and insurance
  • Vehicle licensing (if applicable)

As you look at the cost of a new site, you have to keep all staffing and equipment costs in mind, as they are also part of your overall budget. Before signing a new lease or buying land, make sure to cost out whatever you need to purchase or spend to get the company up and running in the new location.

Remain On-Brand

You may find a space you love that gets great foot traffic, but does it fit with your company’s brand? 

If you are in the business of manufacturing mid-range sunglasses, you probably don’t want to put your manufacturing headquarters in the middle of a high-end shopping district. 

Be aware of what your brand is and where it would best fit. Look at what other businesses are in your desired location and see how they do or if there is any overlap. Look to your competitors–what kind of locations have they chosen and why?

Take Safety Into Account 

Safety is a major consideration when finding the right location for your business. Whether your business will be retail or a spot for your employees, anyone that comes to your site needs to feel safe. 

In addition to ensuring it is safe for people, you also need to pick a secure location for your inventory that won’t run the risk of burglary or theft.

In addition, think about the cost of security measures like alarms, cameras, security guards, fences, or other things. If you need to implement any, you’ll have to include it in your budget for the location.

Pay Attention to Demand

You don’t want to pick a location for your business that is right next to your competition. Instead, find an area where your product or services is in high demand, which most of the time means a place where your competition isn’t prevalent.

Research the demographics of the areas you’re searching in to see where your target market is, what they shop for, and what competition is nearby. Understanding the market and demand for your products or services is extremely important.

Note Parking

Regardless of what type of business you have (retail, commercial, mobile, industrial), you need to find a location that offers ample parking. Not only does there need to be a lot of parking available, but the parking also needs to be convenient. 

Take into consideration whether the available parking will require people to pay for it. If so, how much? You may want to offer validation if this is the case. 

Your goal is to make it as easy as possible for people to have access to your business.

Consider Your Employees

Whether your business is a retail store or just an office, you will have employees coming in and out regularly. You want to make it easy for your employees to get to work.

To aid in this, consider a location near public transportation (if available), so they have an easy way of getting to work. This is valuable to employees and may help you in finding higher-quality employees as well.

What to Do Next

When looking for a business location, it is important to have the business’ best interests at heart in addition to those of your employees and customers (if applicable). 

As you can see, many factors go into deciding if a specific location will work, and it’s not a task to be taken lightly. 

To aid you further, one of the first steps to take is defining your company identity. This will help you build the foundation of your business that allows you to grow, which is vital when you choose a permanent location. Here is an article on how you can define your company’s identity

Once you’ve gotten your business location sorted, you can start to think about what you need in the space to make it a place for conducting business. One often overlooked thing is digital signage. Whether you have a retail store or an office, it is important to have signage showcasing your brand and identity. One solution to consider is Telemetry TV. Check out our deep dive into this product here

Apache Kafka in the Gaming Industry: Use Cases + Architectures

This blog post explores how event streaming with Apache Kafka provides a scalable, reliable, and efficient infrastructure to make gamers happy and gaming companies successful. Various use cases and architectures in the gaming industry are discussed, including online and mobile games, betting, gambling, and video streaming.

Learn about:

Perl and Raku: Best Frenemies

The Perl and Raku programming languages have a complicated history together. The latter was envisioned in the year 2000 as Perl 6, a complete redesign and rewrite of Perl to solve its problems of difficult maintenance and the burden of then-13 years of backward compatibility. Unfortunately, the development effort towards a first major release dragged on for ten years, and some developers began to believe the delay contributed to the decline of Perl's market- and mindshare among programming languages.

In the intervening years, work continued on Perl 5, and eventually, Perl 6 was positioned as "a sister language, part of the Perl family, not intended as a replacement for Perl." Two years ago it was renamed Raku to better indicate it as a different project.

How To Build An Ethical User Research Practice At Any Organization

Ethics are an important part of human-computer interaction because they keep people at the heart of the design process. Unethical practices at companies lead to the creation of technology that we all use but often neglect the influence of those intended to serve. As seen in the discussions about privacy at Facebook and AI-powered imaging at Google among other examples, when there are no ethical considerations during the creation of technology then the interaction between humans is compromised.

A real interaction between computers and humans starts at technological conception by understanding users through a sound and ethical user research discipline.

What Are “Ethics” And Why Should I Care?

To understand why we should build an ethical user research practice at our organizations, we’ll start with the basics. What are ethics anyway?

Ethics are the moral standards by which a person (or in this context, a company or team) should govern the behavior or the conduct of an activity. Ethical user research should then be about protecting the dignity, rights, and welfare of the participants from whom we are asking so much information or data. If we aren’t proactive and prescriptive about our own standards as a research team, we could unconsciously be biased, demoralizing, exclusive, or even in breach of the law.

Here are a few examples of unethical practices:

  • Not recruiting a diverse and inclusive sample.
  • Not informing participants of study requirements or potential harm.
  • Misplacing or not tracking participant data or identifiable information.
  • Misgendering or reinforcing stereotypes in reports, personas, or prototypes.

You may be wondering why you specifically should care. Doesn’t somebody else in the organization focus on ethics? Isn’t there an ethics Internal Review Board (IRB) that is better suited for this? Unfortunately in the user experience industry, that answer is usually no.

While many companies rely on their own Ethics or HR departments to set governing moral standards, their scope typically only relates to their business’ product offerings, services to customers, internal processes, and functions. Rarely, if ever, do these departments take into account the specialty of user research.

For example, try and recall the last time your team’s processes were audited for compliance against the company’s ethical standards. For this reason, it’s really up to each of us; it’s up to each and every practitioner to set standards to which ourselves, our teams, and our company should be held accountable.

Victor Yocco, an avid author and speaker on the intersection of psychology and research, provides a compelling case to self educate, attend training and sustain close review of our practice in his thoughtful article on “Ethical Considerations In UX Research: The Need For Training And Review”:

“Researchers by training and trade have often been required to take courses and pass exams to reflect an awareness of potential ethical issues in research. We can best prepare our colleagues to avoid these situations through similar training and standards.”

Victor Yocco

Unfortunately, many organizations may not have the resources to fund such training, nor provide the time needed to invest in it. Even if your organization did have the time and resources to provide such training, then what? How do you get started leveraging ethics in your user research practice to influence how you do your work in a way that upholds a set of guiding standards? It all starts with a Code of Ethics.

“I do not believe in the immortality of the individual, and I consider ethics to be an exclusively human concern with no superhuman authority behind it.”

— Albert Einstein

A Code Of Ethics: The Backbone Of Ethical Practice

Now that you understand why ethics matter for user research, and why it’s critical that you take it upon yourself to create them for your team, it would certainly help knowing where to start. To begin influencing your work with a set of ethical standards, you need to start by defining what your standards even are.

A Code of Ethics is the standard by which you and others on the team who practice user research will be held accountable.

Starting with a Code versus diving headfirst into changing templates, tools, and processes that allow you to start from a reference point. A Code affords you with a checklist to ensure that with each new process, each new tool or each new study conducted follows your agreed-upon moral standards.

Once you create your own code of ethics, you might notice an improvement not only in your team’s work and performance but also in the team’s culture as well. As UX practitioners, we know empathy is an important part of the design process. Providing a deeper connection and purpose in the work we do and those who we do it with fosters a more inclusive environment, and thoughtful team members as a result.

How To Create Your Own Code Of Ethics

Creating a code of ethics takes only a few thoughtful steps, and from there you will have the backbone for influencing your work through a set of aligned standards. If you’re ready to invest in building a better, more ethical future for your team, your practice, and your organization, read on.

1. Commit To Ethics As A Practice

While it may sound silly or downright obvious, this is one of the most important and often most difficult of steps to truly accomplish. The thing is, to do things correctly aligned to any set of standards means being more thoughtful and taking the necessary steps and time to get it right.

While not monumental, ethical practice is an investment. It takes effort and time to evaluate your process, templates, tools, vendors, and ways of working in order to tweak or even overhaul them in order to align with your ethical principles or moral standards.

That said, building an ethical research practice makes good business sense, which means the time and effort is well spent when you purposely recruit diverse voices, respect their rights to information security and impartially represent them within your company’s walls.

2. Explore Existing Academic And Industry Examples

Why reinvent the wheel when we already have so many inspiring starting points? Once you’re committed to ethics, you should explore other relevant examples of research ethics in the wild. Many organizations proudly share their own code of ethics with the public, serving as a worthy starting point for your own.

It would benefit any team conducting this desk research to include both academic as well as industry examples. Academia tends to include IRBs, which I find are rarely practical for industry — it’s up to us to uphold the ethics of our practice, as previously mentioned.

Here are some great examples to get you started:

Take a 'researcher approach' to reviewing these examples by keeping a log of each organization’s ethical principles or guidelines. Put them each into a long word document or spreadsheet and collate across 15-20 examples. You’ll definitely notice a few strong patterns and a lot of overlap. These overlaps and key themes will serve as a jumping-off point for developing your own principles, relevant to your team, organization, and industry.

3. Familiarize Yourself With Relevant Laws

Whether only relevant to your state, union, or industry, you’ll want to make sure you’re intimately familiar with relevant laws and regulations that force compliance around a certain level of ethical practice.

For example, the General Data Protection Regulation (GDPR) and the California Consumer Privacy Act (CCPA) both have strict rules surrounding how organizations may collect, store and secure consumer data. This not only applies to how companies do business but how they conduct research as well! If you live in the European Union or the state of California and are not yet familiar with these laws, I highly recommend you start reading today.

These regulations are actually quite profound as they almost codify ethics into law, requiring organizations to be compliant or otherwise face penalties such as fines or legal action. While these laws are based on ethical practice, they are still bare-bones and don’t cover the full spectrum of participant welfare or dignity, which are paramount when consumers are in your charge during the course of your research.

Some industries have their own regulations or legal practices which safeguard consumer data even more tightly than GDPR or CCPA. You may be familiar with the Health Insurance Portability and Accountability Act (HIPPA), which protects sensitive patient health information from being disclosed without consent or knowledge.

Many may not be familiar with other specific protections such as Customer Network Proprietary Information (CPNI) which safeguards the type, quantity, configuration, or location of telecommunications and interconnected services you use. Being mindful and educated about your industry’s specific regulations will not only keep you out of trouble but will provide yet another input into creating your own ethical user research principles.

4. Brainstorm Your Core Principles As A Team

Now the fun part! Whether your team is distributed or co-located, you’ll want to use what you’ve learned in steps 2 and 3 in order to brainstorm what principles you want to codify into your own code of ethics. There truly is no right or wrong way to do this, however, following a typical ideation workshop framework will really help add rigor to the process.

Start by affinity mapping your industry and academic examples using sticky notes, google slides or miro/mural board. Working as a team, identify the overlaps across multiple organizations by grouping the principles you feel are similar or otherwise saying the same thing. If you feel two principles are intertwined or tightly related, however, still distinct then by all means include both in the same principle.

For example “Diversity” or “Inclusion” have distinct goals, however, they’re often grouped together as “Diversity, Equity And Inclusion.” If there is strong disagreement between one or more principles that some feel should be combined while others feel should be separate, then run a dot-voting prioritization exercise. Each team member gets a dot and is allowed to cast their vote to either group or keep separate.

Then incorporate industry, state, or special laws/regulations from your research in step 3. Start by identifying any overlaps with your existing principles. If there’s overlap, simply build onto your existing principle! If you find a piece of the law is unique or demands its own dedicated principle, then by all means codify it that way!

Lastly, take a step back and look at your ethical principles as a whole set. Ideally, you would have no more than 10, no less than 4 principles — more than 10 and they’ll be hard to keep track of; less than 4 and creating specific and relevant examples when creating your Ethical Code will be difficult.

The goal is to have specific enough principles where everyone on the team can think of 2-3 examples of exactly how to apply that principle to their everyday work, without being overly general or vague. If you feel you have too many, consider if there are any overlaps or relationships between two or more and combine them accordingly into a larger principle.

Here’re example principles after going through the exercises above:

  • Sensitivity And No Harm,
  • Honesty And Transparency,
  • Confidentiality And Data,
  • Accuracy And Impartiality,
  • Diversity, Equity And Inclusion.

Once you’ve determined your high-level principles and feel good about them as a team, it’s time to make it real and draft your Code of Ethics.

5. Draft Your Code For Feedback

In order to make your Code of Ethics more easily understood, actionable and impactful, you’ll need to expand on each principle with three key components:

  1. A brief description
    This should expound upon the principle itself and provide more detail in its definition and intention. What does honesty mean in the content of user research? When defining this principle, it’s important to note why it’s relevant in the first place and why it is a moral standard. Within this description, you’ll also want to take a moment to identify who the principle is intended for. A team that follows an honorable Code of Ethics is no doubt benefiting its research participants, but it may also apply to internal processes and stakeholder teams as well.
  2. Bulleted agreements
    Perhaps the most important piece of the Code is where it would benefit you to get specific and directly relate to the user research practice at your organization. These agreements should not only exemplify the principle itself but provide more clarity as to how the team may apply the principle in their everyday work. In a way, these become somewhat of a checklist of tactics you’ll execute every time you plan, recruit for, conduct, and report on research.
  3. A few examples
    Like that which is provided below, examples help paint a full picture of the principle in action. You want to be careful to frame your example in the context of an ethical problem, then showcase the appropriate solution which clearly ties to an agreement of the principle. Even better if you have real past experiences that you can use as examples!

Putting these components of the Code together is a great place to have a roundtable discussion about the definition of each principle as well as individual researcher’s past experiences in unique ethical situations. It becomes extraordinarily fruitful to then have an open conversation around what the team believes should be the most appropriate definition, agreements, and examples. This process not only builds collective buy-in for the Code but also deepens everyone’s understanding of each principle as well.

Here’s an example principle in action:

  • Honesty And Transparency
    Maintains the integrity of our individual researchers and our research work. This principle applied not only to participants but also internally when discussing study design or findings.
    • Inform participants of study requirements upfront;
    • Inform participants where their data is going and how it will generally be used;
    • Explain any purposeful manipulation at a session’s end;
    • Explain the pros and cons of methodologies, and study limitations to internal stakeholders.
Example:
When designing a study with biometrics, devices with sensors need to be worn by participants. It should be communicated to participants that they will be wearing devices on or close to the skin which may cause minor irritation. The researcher should clearly explain why and where they’ll be needed in the study.

6. Implement Feedback And Finalize

When you have your first pass at your Code of Ethics and it shares collective buy-in from members of the team, it’s time to get some external validation from partner teams before considering it final.

In this step, you should schedule meetings with your points of contact from the legal and ethics departments within your organization in order to share the great work you’ve done as well as to check to make sure you’re not missing anything. It’s important to make sure you have this second pair of eyes because these groups are responsible for upholding ethics across the business and have deep knowledge of CCPA, GDPR, and other regulations which may affect your final Code.

Be warned that if you don’t already work closely with these teams, you may need to first introduce them to the type of work you do and the purpose of your team. This could mean two separate meetings; an introduction meeting may be needed to explain your team and a follow-on meeting to deep dive into your Code of Ethics.

If they’re unfamiliar with or not aware of any user research currently being done, they may already have strong concerns regarding privacy law. Remind them that’s why you’re creating this Code and why you’ve reached out to them — to ensure everyone is on the same page!

Putting It Into Practice

Now that you have a strong Code of Ethics that has internal and external team support, you’ll want to put it to work. The following are examples of where your Code of Ethics directly affects the processes, tools, and practices of your team. This is the part where the investment really comes in as each of these could take hours or even days to set the foundation for.

If you don’t proceed beyond this point and stop only when you’ve made your Code, then you run the risk of never really practicing what you’ve created. While the following isn’t quite ‘set it and forget it,’ rest assured the majority of the work is upfront in building the documentation vs. the ongoing maintenance and practice. Keep in mind these are great starting points, however, you may have other areas which could be improved using your new principles!

Screeners And Recruitment

Assuming you have an ethical principle-centered around or associated with Diversity, Equity, and Inclusion (DE&I), updating your screener questionnaire template and recruitment practices will help ensure every study accounts for the diversity and uniqueness of the customers for whom you serve.

In screener questionnaires, care should be taken in the administration and wording of questions relating to race, ethnicity, and gender. Because people identify in different and unique ways, these questions are asked and what responses you allow should reflect that flexibility. While there is plenty of literature out there to help you with crafting most demographics related questions, here are some ethical considerations:

  • Before asking for personal information such as gender or race, provide a very brief explanation as to why you’re asking for it in the first place. Providing this context can ease the minds of those who fear their information may be used for exploitation.
  • Allow ‘select all that apply’ checkbox answer options. Many may identify as mixed-race or on a spectrum of gender — providing them with multiple ways of identification more accurately represents them.
  • Provide a ‘prefer not to answer’ option for those who don’t feel comfortable disclosing this information.
  • For race, be exhaustive with the answer options to account for diverse classification and to avoid misrepresentation.
  • For gender, include ‘non-binary’ and ‘prefer to self identify’ options to accommodate those who don’t identify within a fixed gender.

In addition to screener wording, the individuals or team responsible for study recruitment efforts should make a purposeful effort to recruit a diverse group, even for small sizes for qualitative research. When working with recruitment firms or advanced panel tools, this should be relatively straightforward.

However, committing to diversity may mean canceling a few sessions and re-recruiting if your first round of recruitment efforts result in 9/10 participants being middle-aged white men, for example.

Data Retention And Management

Participants often provide sensitive, personally identifiable information that they may expect will be kept private and secure. This may even be a requirement of the law, as per the aforementioned regulations (GDPR And CCPA). In order to do this, you will need to create a comprehensive Data Retention Policy for all types of information that you’re collecting from participants. While there are many GDPR And CCPA templates and resources available to help you create your own policy, the key questions that must be asked are:

  • What data are you collecting?
  • Are you storing it? Why/for what purpose?
  • How long are you storing it for before deletion?
  • How is this data being secured?
  • Who, if anyone else, has access to this data?

Once you create your own Data And Retention policy, be sure to gain alignment with your own Legal team to ensure it meets the standards of local or federal requirements — especially in regards to specialized data related to CPNI or HIPPA. Then, share and train your team to uphold this policy, explaining the importance of safeguarding sensitive participant information.

An easy but effective way to hold everyone accountable to this policy is to include a ‘Data Retention Plan’ section within every Test Plan document which outlines what data is being collected during the course of the research, how it will be used, if it will be stored, and how it is being protected. For example, an in-situ contextual inquiry where COVID-19 vaccination status is being discussed, you’d want to document:

Data Instrument Retention Plan Notes
Name And Likeness Video/Audio Recording And Recruitment firm Codify as ID # Identification is not important. Participant will be anonymized.
Mailing Address Recruitment Firm Delete after data collection Only needed for moderator’s arrival during the study.
Vaccination Status Video/Audio Recording Maintain for 6 months Needed to create personas. Data not needed after study completion.

Informed Consent And NDAs

A key component of ethical user research is keeping the participant comfortable and informed at all times in order to protect their dignity and welfare. This may be done by providing them proper documentation and a forum in which to address questions or concerns that they may have prior to the study.

In addition, if a body of work is internally safeguarded or confidential, you may wish that the participants remain undisclosed. Non-disclosure Agreements must not be lengthy legal documents that are difficult to follow and require an advanced degree to read and understand.

There is more than one way to write an Informed Consent document, however, the key components are mostly the same:

  • Begin by thanking the participant for their consideration of participating in the study.
  • Explain the topic of the study at a high level by providing just enough detail to build an understanding of the subject matter.
  • Provide a clear, bulleted list of expectations or activities the participant will be required to participate in during their session.
  • Disclose any potential risk of harm, danger, or manipulation as part of the study.
  • Remind them of the time commitment for the session, any follow on activities after the study, and the nature of the incentive for their involvement.
  • End with a clear request to provide written consent of the above, including both their signature as well as today’s date.

It is paramount that participants are able to deny or withdraw their consent at any time, without warning or reason and without penalty — informed consent is useless if the participant is penalized or coerced into providing and maintaining their consent.

At times, our research may touch on triggering, emotional topics. Other times, there may be sudden emergencies that come up in the middle of the session. When these things happen, the participant should feel empowered to take a break or step away without fear of losing their incentive or fear of any form of retaliation.

Internal Representation: Reports, Prototypes And Personas

Ethical user research extends beyond the study and data collection, permeating into our internal artifacts that may be used for many months afterward. While there are more examples than will be covered here, the primary three areas where ethical considerations should be top of mind are in your findings reports, design prototypes, and especially in your user personas.

Findings Reports

When reporting a study’s findings, care should be taken to be as representative and impartial as you were during the design and administration of the study itself so that the audience or readers of the report have the full, accurate picture of what was learned and how.

  • Provide a ‘study setup’ section of the report which outlines a brief, but robust study methodology description. Include both Pros and Cons of the study method so that you’re being transparent in its limitations and reach.
  • Include a ‘participants’ section of the report which includes a bulleted list of the participant attributes. If necessary, include any footnotes around a limitation of diversity (i.e. if against all efforts you recruited 30 women of 40 total participants, this should be noted).
  • When using photos, avoid participant’s faces (likeness, PII) unless you’ve been provided explicit consent to do so from the participant. This is especially important when discussing personal or sensitive topics.
  • Use direct quotes, audio recordings, or photos from a range of participants to reflect and promote the diversity of your recruit. This provides the fullest picture of who you spoke with during the study.
  • Don’t paraphrase direct quotes nor infer too heavily without solid context or understanding. This maintains impartiality and avoids unconscious bias.
  • Avoid reporting demographic information for individual qualitative findings as it may inadvertently support institutionalized biases or stigma (i.e. 2 male Caucasians said X, 1 black woman said Y). It is best practice to segment by demographics only with quantitative samples where meaningful differences may be found through statistical analysis.

User Personas

A common framework for communicating generative user research findings is the user persona — an archetypical representation of a group of users that exhibit similar attitudes and behaviors. While incredibly powerful for making design decisions for months or even a year after the completion of research, they’re just as powerful in reinforcing gender, age, or racial stereotypes.

Care should be taken in the crafting of user personas so that they uphold their humanizing character while avoiding enforcing bias. While there are other resources for creating agnostic user persons, here are a few highlights:

  • Try to avoid using human names altogether. Using human names often promote biased stereotypes given strong societal expectations around different gender roles, positions of authority, or occupational status. Instead, you may lean into pithy 2-3 word titles which better exemplify who your Personas are (i.e. ‘Cautious Comparer,’ or ‘Impulsive Spender’).
  • Use gender-neutral and culturally diverse names. If you insist on using names in order to humanize the personas, use gender-neutral names to fight the unconscious gender bias. There are also many cultures and backgrounds with which your users may identify — using only names from western European etymology may incidentally erase their unique identity. Using names from diverse etymology helps fight this bias. Here are a few examples of gender-neutral, culturally diverse names: Adrian, Armani, Brett, Devon, Kai, Krishna, Maren, Noor, Nilam, Sam, Jaylin, Jordan, Yoshi.
  • As with the above, leverage artistic visualizations which exemplify the Persona more accurately than a fictitious image or photo. For example, in a Persona for a car manufacturer, it is much more telling to see a weighted scale with a dollar sign on one side and the word ‘safety’ on the other side than it is to see a stock photo of a worried looking person in the front seat. Using photos or illustrations for Personas further stigmatizes race, gender, and body type. If insistent on using humanizing imagery, consider artful illustrations which are ambiguous in gender, race, and body types in order to remain inclusive.
  • Do not include disability status unless this was directly part of your research or you’re creating a set of personas specifically focused on people of varying abilities or with a focus on intersectionality. Consider if this level of information or detail is important for the product you’re creating. While the goal of including this information may be with good intentions, you may be misrepresenting already marginalized communities.
  • Try and avoid gender, race, sexual orientation, or other demographics that are more akin to segmentation analysis and not user personas. Personas should be representations of like-attitudes and especially behaviors which often transcend basic demographics.

As apparent by the above guidance, creating Personas tows a very fine line between creating a useful fictitious archetype and promoting bias and stigma. The latter is highly unethical and leads to false assumptions and even worse design and content strategy decisions.

Design Prototypes

Similar to the above guidance given to User Personas, the same care should be taken with users personified through prototype designs. Often we create situations or scenarios to stress test the content and interaction design of our systems by placing a fictitious character at the heart of our mock-ups.

Consider leveraging the gender-neutral and culturally diverse names above for use within your prototypes (i.e. the account name of an authenticated user). For account or profile images, leverage artistic illustrations, or a diverse range of stock photography to depict your users. When creating designs where multiple individuals will be represented, take a step back to ensure diversity in the holistic group rather than a focus on one gender, race, culture, or body type.

Bringing It All Together

Ethical user research isn’t only the right thing to do but it makes good business sense. Principles of ethical conduct guide our decision-making, keeping us out of trouble and holding us accountable to our users and society.

By influencing your practices, templates, and processes with a foundation of ethical principles you will show your team and your organization that you value the dignity and welfare of your users. Building an ethical user research practice at any organization is not inherently difficult, however, requires upfront and ongoing conscious investment in order to do so effectively.

It’s up to us to put the humans we design for at the center of our own business practices and create a true form of human-computer interaction. No one will do this work for us. Noone will hold us accountable. After all, ethics (especially in our field) are an exclusively human concern with no superhuman authority behind it.

Are you ready to make a difference?