One place for hosting & domains

      March 2020

      Understanding Default Parameters in JavaScript

      The author selected the COVID-19 Relief Fund to receive a donation as part of the Write for DOnations program.

      In ECMAScript 2015, default function parameters were introduced to the JavaScript language. These allow developers to initialize a function with default values if the arguments are not supplied to the function call. Initializing function parameters in this way will make your functions easier to read and less error-prone, and will provide default behavior for your functions. This will help you avoid errors that stem from passing in undefined arguments and destructuring objects that don’t exist.

      In this article, you will review the difference between parameters and arguments, learn how to use default parameters in functions, see alternate ways to support default parameters, and learn what types of values and expressions can be used as default parameters. You will also run through examples that demonstrate how default parameters work in JavaScript.

      Arguments and Parameters

      Before explaining default function parameters, it is important to know what it is that parameters can default to. Because of this, we will first review the difference between arguments and parameters in a function. If you would like to learn more about this distinction, check out our earlier article in the JavaScript series, How to Define Functions in JavaScript.

      In the following code block, you will create a function that returns the cube of a given number, defined as x:

      // Define a function to cube a number
      function cube(x) {
        return x * x * x

      The x variable in this example is a parameter—a named variable passed into a function. A parameter must always be contained in a variable and must never have a direct value.

      Now take a look at this next code block, which calls the cube function you just created:

      // Invoke cube function

      This will give the following output:



      In this case, 10 is an argument—a value passed to a function when it is invoked. Often the value will be contained in a variable as well, such as in this next example:

      // Assign a number to a variable
      const number = 10
      // Invoke cube function

      This will yield the same result:



      If you do not pass an argument to a function that expects one, the function will implicitly use undefined as the value:

      // Invoke the cube function without passing an argument

      This will return:



      In this case, cube() is trying to calculate the value of undefined * undefined * undefined, which results in NaN, or “not a number”. For more on this, take a look at the number section of Understanding Data Types in JavaScript.

      This automatic behavior can sometimes be a problem. In some cases, you might want the parameter to have a value even if no argument was passed to the function. That’s where the default parameters feature comes in handy, a topic that you will cover in the next section.

      Default Parameter Syntax

      With the addition of default parameters in ES2015, you can now assign a default value to any parameter, which the function will use instead of undefined when called without an argument. This section will first show you how to do this manually, and then will guide you through setting default parameters.

      Without default parameters, you would have to explicitly check for undefined values in order to set defaults, as is shown in this example:

      // Check for undefined manually
      function cube(x) {
        if (typeof x === 'undefined') {
          x = 5
        return x * x * x

      This uses a conditional statement to check if the value has been automatically provided as undefined, then sets the value of x as 5. This will result in the following output:



      In contrast, using default parameters accomplishes the same goal in much less code. You can set a default value to the parameter in cube by assigning it with the equality assignment operator (=), as highlighted here:

      // Define a cube function with a default value
      function cube(x = 5) {
        return x * x * x

      Now when the cube function is invoked without an argument, it will assign 5 to x and return the calculation instead of NaN:

      // Invoke cube function without an argument



      It will still function as intended when an argument is passed, ignoring the default value:

      // Invoke cube function with an argument



      However, one important caveat to note is that the default parameter value will also override an explicit undefined passed as an argument to a function, as demonstrated here:

      // Invoke cube function with undefined

      This will give the calculation with x equal to 5:



      In this case, the default parameter values were calculated, and an explicit undefined value did not override them.

      Now that you have an idea of the basic syntax of default parameters, the next section will show how default parameters work with different data types.

      Default Parameter Data Types

      Any primitive value or object can be used as a default parameter value. In this section, you will see how this flexibility increases the ways in which default parameters can be used.

      First, set parameters using a number, string, boolean, object, array, and null value as a default value. This example will use arrow function syntax:

      // Create functions with a default value for each data type
      const defaultNumber = (number = 42) => console.log(number)
      const defaultString = (string = 'Shark') => console.log(string)
      const defaultBoolean = (boolean = true) => console.log(boolean)
      const defaultObject = (object = { id: 7 }) => console.log(object)
      const defaultArray = (array = [1, 2, 3]) => console.log(array)
      const defaultNull = (nullValue = null) => console.log(nullValue)

      When these functions are invoked without parameters, they will all use the default values:

      // Invoke each function


      42 "Shark" true {id: 7} (3) [1, 2, 3] null

      Note that any object created in a default parameter will be created every time the function is called. One of the common use cases for default parameters is to use this behavior to obtain values out of an object. If you try to destructure or access a value from an object that doesn’t exist, it will throw an error. However, if the default parameter is an empty object, it will simply give you undefined values instead of throwing an error:

      // Define a settings function with a default object
      function settings(options = {}) {
        const { theme, debug } = options
        // Do something with settings

      This will avoid the error caused by destructuring objects that don’t exist.

      Now that you’ve seen how default parameters operate with different data types, the next section will explain how multiple default parameters can work together.

      Using Multiple Default Parameters

      You can use as many default parameters as you want in a function. This section will show you how to do this, and how to use it to manipulate the DOM in a real-world example.

      First, declare a sum() function with multiple default parameters:

      // Define a function to add two values
      function sum(a = 1, b = 2) {
        return a + b

      This will result in the following default calculation:



      Additionally, the value used in a parameter can be used in any subsequent default parameter, from left to right. For example, this createUser function creates a user object userObj as the third parameter, and all the function itself does is return userObj with the first two parameters:

      // Define a function to create a user object using parameters
      function createUser(name, rank, userObj = { name, rank }) {
        return userObj
      // Create user
      const user = createUser('Jean-Luc Picard', 'Captain')

      If you call user here, you will get the following:


      {name: "Jean-Luc Picard", rank: "Captain"}

      It is usually recommended to put all default parameters at the end of a list of parameters, so that you can easily leave off optional values. If you use a default parameter first, you will have to explicitly pass undefined to use the default value.

      Here is an example with the default parameter at the beginning of the list:

      // Define a function with a default parameter at the start of the list
      function defaultFirst(a = 1, b) {
        return a + b

      When calling this function, you would have to call defaultFirst() with two arguments:

      defaultFirst(undefined, 2)

      This would give the following:



      Here is an example with the default parameter at the end of the list:

      // Define a function with a default parameter at the end of the list
      function defaultLast(a, b = 1) {
        return a + b

      This would yield the same value:



      Both functions have the same result, but the one with the default value last allows a much cleaner function call.

      For a real-world example, here is a function that will create a DOM element, and add a text label and classes, if they exist.

      // Define function to create an element
      function createNewElement(tag, text, classNames = []) {
        const el = document.createElement(tag)
        el.textContent = text
        classNames.forEach(className => {
        return el

      You can call the function with some classes in an array:

      const greeting = createNewElement('p', 'Hello!', ['greeting', 'active'])

      Calling greeting will give the following value:


      <p class="greeting active">Hello!</p>

      However, if you leave the classNames array out of the function call, it will still work.

      const greeting2 = createNewElement('p', 'Hello!')

      greeting2 now has the following value:



      In this example, forEach() can be used on an empty array without an issue. If that empty array were not set in the default parameter, you would get the following error:


      VM2673:5 Uncaught TypeError: Cannot read property 'forEach' of undefined at createNewElement (<anonymous>:5:14) at <anonymous>:12:18

      Now that you have seen how multiple default parameters can interact, you can move on to the next section to see how function calls work as default parameters.

      Function Calls as Default Parameters

      In addition to primitives and objects, the result of calling a function can be used as a default parameter.

      In this code block, you will create a function to return a random number, and then use the result as the default parameter value in a cube function:

      // Define a function to return a random number from 1 to 10
      function getRandomNumber() {
        return Math.floor(Math.random() * 10)
      // Use the random number function as a default parameter for the cube function
      function cube(x = getRandomNumber()) {
        return x * x * x

      Now invoking the cube function without a parameter will have potentially different results every time you call it:

      // Invoke cube function twice for two potentially different results

      The output from these function calls will vary:


      512 64

      You can even use built-in methods, like those on the Math object, and use the value returned in one function call as a parameter in another function.

      In the following example, a random number is assigned to x, which is used as the parameter in the cube function you created. The y parameter will then calculate the cube root of the number and check to see if x and y are equal:

      // Assign a random number to x
      // Assign the cube root of the result of the cube function and x to y
      function doesXEqualY(x = getRandomNumber(), y = Math.cbrt(cube(x))) {
        return x === y

      This will give the following:



      A default parameter can even be a function definition, as seen in this example, which defines a parameter as the inner function and returns the function call of parameter:

      // Define a function with a default parameter that is an anonymous function
      function outer(
        parameter = function inner() {
          return 100
      ) {
        return parameter()
      // Invoke outer function



      This inner function will be created from scratch every time the outer function is invoked.


      In this article, you learned what default function parameters are and how to use them. Now you can use default parameters to help keep your functions clean and easy to read. You can also assign empty objects and arrays to parameters upfront to reduce both complexity and lines of code when dealing with situations such as retrieving values from an object or looping through an array.

      If you would like to learn more about JavaScript, check out the homepage for our How To Code in JavaScript series, or browse our How to Code in Node.js series for articles on back-end development.

      Source link

      Are Private Clouds HIPAA Compliant?

      HIPAA compliant practices are in place to protect the privacy and security of protected health information (PHI). With the rise in popularity of cloud infrastructure solutions, more health providers are moving their IT infrastructure off premise. But before a move can happen, providers must ensure their practices, the cloud provider and the solution itself follows HIPAA’s rules and guidelines. Here, we’ll explore whether private clouds meet these guidelines.

      So, are hosted private clouds a HIPAA compliant option? The short answer is, “Yes!” But that doesn’t mean all private cloud environments are ready out of the gate. For more nuance, let’s first discuss some HIPAA basics.

      HIPAA Privacy and Security Rules

      Where does third-party IT infrastructure and HIPAA compliance intersect?

      There are numerous rules around HIPAA, including privacy, security and breach notifications that establish protections around PHI that covered entities (healthcare providers, insurance providers, etc.) and business associates (those performing functions or activities for, or providing services to a covered entity involving PHI) must follow. Cloud service providers are considered business associates.

      PHI includes any identifiable information about a patient, such as last name, first name and date of birth. And today’s electronic health record (EHR) systems store much more identifiable information, such as social security numbers, addresses and phone numbers, insurance cards and driver licenses, which can be used to identify a person or build a more complete patient profile.

      The HIPAA Privacy Rule relates to the covered entities and business associates and defines and limits when a person’s PHI may be used or disclosed.

      The HIPAA Security Rule establishes the security standards for protecting PHI stored or transferred in electronic form. This rule, in conjunction with the Privacy Rule, is critical to keep in mind as consumers research cloud providers, as covered entities must have technical and non-technical safeguards to secure PHI.

      According to U.S. Department of Health & Human Services, the general rules around security are:

      • Ensure the confidentiality, integrity and availability of all e-PHI they create, receive, maintain or transmit;
      • Identify and protect against reasonably anticipated threats to the security or integrity of the information;
      • Protect against reasonably anticipated, impermissible uses or disclosures; and
      • Ensure compliance by their workforce.

      Compliance is a shared effort between the covered entity and the business associate. With that in mind, how do cloud providers address these rules?

      HIPAA: Private vs. Public Cloud

      A cloud can be most simply defined as remote servers providing compute and storage resources, which are available through the internet or other communication channels. Cloud resources can be consumed and billed per minute or hour or by flat monthly fees. The main difference between private and public clouds is that private cloud compute resources are fully dedicated to one client (single-tenant) while public cloud resources are shared between two or more clients (multi-tenant). Storage resources can also be single or multi-tenant in private clouds while still complying with HIPAA policies.

      HIPAA compliancy can be achieved in both private and public clouds by effectively securing, monitoring and tracking access to patient data. Private clouds, however, allow more granular control and visibility into the underlying layers of the infrastructure such as servers, switches, firewalls and storage. This extra visibility into a private cloud, combined with the assurance the environment is physically isolated , is very helpful when auditing your cloud environment against HIPAA requirements.

      Customers and vendors will normally have control and responsibility for PHI protection clearly divided between the parties. For example, a cloud provider may draw the line of responsibility at the physical, hypervisor or operating system layer, while the customer’s responsibility would start from the application layer.

      Other Benefits of Private Clouds for HIPAA Compliance

      As noted, HIPAA has many provisions, but keeping PHI secured from breaches and unauthorized access is the main objective. PHI is worth major money on the black market. While credit card information is sold for about $5 to $10 per record, PHI is being sold at $300+ per single record.

      Private cloud providers ensure that a customer’s environment is protected from unauthorized access at breach points controlled by the cloud provider. Breach points could be described as physical access to building/data center, external threats and attacks over the internet against the core infrastructure, internal threats by malicious actors, viruses, spyware and ransomware. Private cloud providers also make sure that the data is protected from accidental edits, deletions or corruption via backup and DRaaS services. These same breach points apply to on-premise (customer-owned) infrastructure, too.

      A HIPAA compliant private cloud environment will make sure that their security, technology, tools, training, policies and procedures which relate to protection of PHI are used and followed every step of the way throughout this business association with the customer.

      What a HIPAA Compliant Cloud Supports

      Let’s take a closer look at what a HIPAA compliant private cloud needs to have in place and support.

      • BAA: A provider of a HIPAA compliant private cloud will start their relationship with a signed Business Associate Agreement (BAA). The BAA agreement is required between customer and vendor if the customer is planning to have PHI stored or accessed in the private cloud. If a prospective provider hesitates to sign any type of BAA, it’s probably good idea to walk away.
      • Training: Annual HIPAA training must be provided to every staff member of the private cloud vendor.
      • Physical Security: A Tier III data center with SSAE certifications will provide the physical security and uptime guarantees for your private cloud’s basic needs such as power and cooling.
      • External Threats and Attacks: Your private cloud will need to be secured with industry best practice security measures to defend against viruses, spyware, ransomware and hacking attacks. The measures include firewalls, intrusion detection with log management, monitoring, anti-virus software, patch management, frequent backups with off-site storage, disaster recovery with testing.
      • Internal Threats: A private cloud for PHI needs to be able to be secured against internal attacks by malicious actors. Cloud vendors are required to have policies and procedures to perform background checks and regular audit staff member security profiles to make sure proper level of access is provided based on access requirements and thorough on-boarding and termination processes.
      • Data Protection and Security: A private cloud must be able to protect your data from theft, deletions/corruptions (malicious or accidental). Physical theft of data is not common in secured datacenters, however, encrypting your data at rest should be a standard in today’s solutions. In order to protect private clouds from disasters, a well-executed backup and disaster recovery plan is required. Backups and DR plans must be tested regularly to make sure they will work when needed. I recommend twice a year testing for DR and once a week testing for backup restores.

      Private cloud customers also have a responsibility to continue protection of PHI from the point where they take over management duties. This line of responsibility is often drawn at the application level. Customers must ensure that any application that stores and manages PHI has gone through all the necessary audits and certifications.

      Closing Thoughts

      Well-defined policies and procedures, best practice uses of tools and technologies, proper security footprint and regular auditing and testing yields a HIPAA compliant private cloud. Doing the work on the front end to vet a strong partner for your private cloud or putting in the time to review processes with your current provider will go a long way in meeting HIPAA compliance requirements.

      Explore INAP Private Cloud.


      Rob Lerner


      Source link

      20 Ways to Stay Social in an Age of Social Distancing

      A few months ago, working from home sounded like a dream. Now, thanks to a global pandemic and the ever-looming threat of COVID-19, students, parents, workers, and business owners are stuck at home, doing their part to #flattenthecurve. Many of you are under shelter-in-place orders, leaving home only for the essentials, and the rest are carefully practicing social distancing, avoiding gatherings of more than 10 people and staying at least six feet apart.

      We’re right there with you.

      Our DreamHost offices in California and Oregon shut down, sending our diligent employees home to support you remotely. With no real end in sight to all this social distancing, the weeks (and months) are stretching ahead rather bleakly.

      “Loneliness is psychologically poisonous; it increases sleeplessness, depression, as well as immune and cardiovascular problems,” says Stanford psychologist Jamil Zaki. “In fact, chronic loneliness produces a similar mortality risk to smoking 15 cigarettes a day. We must do the right thing for public health and shelter-in-place now, but if doing so produces chronic, widespread loneliness, a long-term mental and physical health crisis might follow this viral one.”

      Social distancing doesn’t have to mean social isolation — Zaki suggests reframing it as “socializing from a distance.” Thanks to the internet, there are plenty of ways to connect with friends, family, and coworkers, all while keeping everyone safe and fighting to reduce coronavirus infections.

      How can you socialize for the sake of your sanity — and your relationships — while safely flattening the curve? We have a few ideas.

      Working From Home?

      Now is the perfect time to build a website. We offer budget-friendly Shared Hosting services with robust features to help you thrive online. Plans start at $2.59/mo.

      Essential Apps

      Before you can bring your social life to the digital world, you’ve got to build up your tool kit. Chances are you already use many of these, and others may be less familiar. Either way, these apps, plus your social media accounts, will keep you connected to others while physically apart.

      Smartphone Video Calling

      Your smartphone probably already has one of your best tools for video calling: FaceTime for iPhones, Google Duo for Android. FaceTime, only available on iOS, hosts up to 32 people; on Google Duo, up to eight people can chat. These apps are best for one-on-one conversations with friends and family.


      Thanks to school and workplace closures sending the masses to work and learn at home, video conferencing software Zoom has become a surprising hero in the age of quarantine — and the inspiration for a wave of memes. It really shines for professional uses, such as connecting with clients, coworkers, and classrooms, but it can work for friend hangouts too. Download it onto your phone or tablet or use on your computer for free one-on-one chats or up to 40-minute meetings; upgrade to $14.99/month for longer meetings.

      Google Hangouts

      Sign in to Hangouts with your Google account (you already have one if you use Gmail) to video chat with friends for free. Up to 25 people can video chat at once, and 150 can join a voice-only group. If your friends or coworkers are all on Google (or willing to get an account), this is an easy option for some group facetime.


      A staple of online communication for years, Skype is free to download and use on phones, tablets, and computers with web cameras. Video call up to 10 people at once, depending on connection speeds, and easily share screens. You can also instant message and make voice calls on Skype. This app is great for a virtual hangout with friends, no matter what devices they use.


      Facebook-owned WhatsApp is an excellent option for free one-on-one messaging, video calling, and voice calls on both iOS and Android. It uses end-to-end encryption for added security, and its popularity around the world makes it a fantastic way to connect with friends and family in other countries.

      Marco Polo

      When video chats are hard to coordinate between conference calls and Netflix-a-thons, Marco Polo can help you still connect “face to face.” Leave a video voicemail of sorts — send a video message to a friend, who will watch and respond when they are ready. This is a helpful app for those with friends and family in different time zones.

      Neighborhood Groups

      Find an online meeting place for your neighborhood and community. Some neighborhoods are more active on Facebook groups, others on Nextdoor. Find your people and use the forum to meet neighbors, connect with friends holed up in their apartment down the block, and trade war stories about tracking down toilet paper.

      How to Use Tech to Socialize from a Distance

      Armed with an internet connection and a webcam or smartphone, plus one or more of the handy apps above, you’re ready for a world of virtual socializing. Try out these ideas with your friends and family.

      1. Meet with Your Book Club

      Move your meetings online, maybe to Skype or Google Hangouts, or start your own group from scratch. Book clubs are a great way to make sure you meet regularly with your friends — and, with all the staying inside you’re doing, you might actually read the book this time.

      2. Throw a Birthday Party

      People with birthdays in the next two months (or more!) can still celebrate with family and friends, albeit digitally. Gather on a group video chat with the birthday boy or girl, each party-goer with their own dessert, to sing “Happy Birthday,” blow out candles, have a dance party, and share memories.

      3. Go on a Date

      There’s no reason your dating life has to fizzle out. You definitely shouldn’t meet up with a stranger in person right now, but don’t delete your Tinder and Bumble accounts: schedule video chat dates with matches for a chance to connect with someone new.

      4. Play Games

      Don’t cancel game night — a number of your favorite board games (including the ever-timely Pandemic) and party games are available online. If you and your friends have a copy of the same physical game you can play together, moving the pieces in sync. Also try Houseparty, a social media app that lets you play digital games over video chat.

      5. Try a Table-Top RPG Game

      Maybe you and your friends have been Adventurers for years — if so, move your Dungeons and Dragons game online. If you’ve never played an RPG game, there’s no better time to try. D&D offers a short version of the rules online for free. Players only need a pencil, paper, and dice; this guide can help you start your first game.

      6. Host a Movie Night

      The Netflix Party Chrome extension lets you and your friends watch a movie or TV show in sync while hosting a chat session. You each need the extension and your own Netflix account. Pop some popcorn, argue over what to watch, and settle down to enjoy together.

      7. Sing Karaoke

      The bars are closed, so take the party to your video app of choice. Get music inspiration from this list of the 50 best karaoke songs, search for karaoke versions of your song choice on YouTube, and sing like no one is listening — but they are, because you invited them into your Skype chatroom.

      8. Take a Zoom Happy Hour

      After a long day of teleconferencing, you and your coworkers could do with a celebration. Schedule a Zoom meeting (or whatever platform your organization uses) just for happy hour, and relax a bit together, while safely separate.

      9. Chat Around the Zoom Watercooler

      No office is strictly business all the time. Make time for your coworkers to take breaks together while working from home, around the proverbial watercooler. Create a Zoom channel or meeting just to chat about anything other than work. These moments can help build the solidarity and connection that are so important to a healthy team.

      10. Eat Out Together

      Log in to your favorite video chat app to host a remote dinner party. Get some takeout (support a local business, as long as social distancing guidelines in your area allow), or pick a recipe that everyone can cook and then eat together.

      11. Play Together

      If you have kids stuck at home with you, chances are they could use some social connection too. Connect with the parents of their friends and hold a virtual playdate. They can color together, play Pictionary, and share quarantine adventures. The family chat app Caribu lets kids read and play games together.

      12. Share on Social Media

      Use Instagram Live or Facebook Live to share something you’re skilled at with your friends who are also stuck at home. Give a concert, read poetry (your own or a favorite poet’s), give a walking tour of local landmarks, teach a few Japanese lessons — the sky’s the limit. Doing a little good for others will go a long way in helping you feel less lonely.

      Low-Tech Ways to Connect

      You can still maintain ties without the smartphone, all while staying a safe distance away from other people. These low-tech ways to connect will build solidarity between neighbors, communities, and friends — just make sure before trying any that you’re following local recommendations and keeping high-risk groups safe.

      13. Plan a Neighborhood Art Walk

      Use your community Facebook group or Nextdoor to put on a neighborhood art walk. Have everyone hang posters, drawings, and messages on their doors or windows, or draw outside with sidewalk chalk, and then take a walk and enjoy your neighbors’ creativity.

      14. Dance with Your Neighbors

      Channel the quarantined Italians who sang together from balconies by putting on your own neighborhood dance party or singalong.

      15. Cheer at 8 p.m.

      A Twitter campaign called #solidarityat8 encourages Americans to stand on their porches or balconies at 8 p.m. every at to applaud the healthcare workers on the frontlines of COVID-19. Stand with your neighbors, wave at them, chat a bit from a safe distance, and cheer together for the workers who don’t get to stay home.

      16. Run a Virtual 5K

      So many walks and runs this spring (and possibly summer) are getting canceled. Instead of throwing in the towel, plan a 5K with your friends, family, or neighbors. Get out and run or walk, wherever you are, at the same time (six feet apart, of course!), and enjoy some solidarity and exercise.

      17. Throw a Social Distancing Concert

      If you live in a suburban neighborhood and play a loud instrument, put on a concert for your neighbors. Stand out in your lawn or backyard and play for all within earshot. Tell your neighbors about it ahead of time, so they can come outside and enjoy — or know when to turn up the volume on Netflix.

      Want More Remote-Work Content?

      Subscribe to our monthly newsletter so you never miss an article.

      18. Send Snail Mail and Play Window Tic Tac Toe

      The elderly are already at high risk for loneliness and depression, so if there’s an age 60+ loved one in your life or neighborhood, don’t forget about them. Call them on the phone, buy them groceries, send letters and cards in the mail — you might head to their home and write messages on their windows, or even play tic tac toe with them on the other side of the glass.

      19. Deck the Halls

      Hallmark is bringing back Christmas to spread some cheer through the coronavirus gloom — why not do the same for your neighbors? Put your Christmas light back up and bust out your tackiest decorations. Walk the dog in your Halloween costume, put Valentines on doors, hang giant paper bunnies in your window — anything to entertain and surprise your neighbors.

      20. Be a Helper

      Fred, AKA Mr., Rogers told children, “When I was a boy and I would see scary things in the news, my mother would say to me, ‘Look for the helpers. You will always find people who are helping.’” Anything to help, from giving to a food bank, to ordering takeout at a local restaurant, to donating blood, will do some good and help you feel connected to your neighborhood and community.

      Now’s the Time

      Between your remote working and your distant socializing, stave off quarantine-induced loneliness and boredom by tackling a project you’ve been putting off. Now is a great time to finally build the website you always dreamed of. Your DreamHost team may be working from home for now, but we are still here to help you get your website up and running.

      Source link