Friday, January 27, 2023

Reasons for traveling

 

Reasons for traveling include recreation,[4] holidays, rejuvenation,[5] tourism[4] or vacationing,[4] research travel,[4] the gathering of information, visiting people, volunteer travel for charity, migration to begin life somewhere else, religious pilgrimages[4] and mission trips, business travel,[4] trade,[4] commuting, obtaining health care,[4] waging or fleeing war, for the enjoyment of traveling, or other reasons. Travelers may use human-powered transport such as walking or bicycling; or vehicles, such as public transport, automobiles, trains, ferries, boats, cruise ships and airplanes.

Motives for travel include:

History

Travel dates back to antiquity where wealthy Greeks and Romans would travel for leisure to their summer homes and villas in cities such as Pompeii and Baiae.[8] While early travel tended to be slower, more dangerous, and more dominated by trade and migration, cultural and technological advances over many years have tended to mean that travel has become easier and more accessible.[9] Humankind has come a long way in transportation since Christopher Columbus sailed to the New World from Spain in 1492, an expedition which took over 10 weeks to arrive at the final destination; to the 21st century when aircraft allows travel from Spain to the United States overnight.

Travel in the Middle Ages offered hardships and challenges, however, it was important to the economy and to society. The wholesale sector depended (for example) on merchants dealing with/through caravans or sea-voyagers, end-user retailing often demanded the services of many itinerant peddlers wandering from village to hamlet, gyrovagues (wandering monks) and wandering friars brought theology and pastoral support to neglected areas, traveling minstrels toured, and armies ranged far and wide in various crusades and in sundry other wars.[8] Pilgrimages were common in both the European and Islamic world and involved streams of travelers both locally and internationally.[10]

In the late 16th century, it became fashionable for young European aristocrats and wealthy upper-class men to travel to significant European cities as part of their education in the arts and literature. This was known as the Grand Tour, and included cities such as London, Paris, Venice, Florence, and Rome. However, the French Revolution brought with it the end of the Grand Tour.[8]

Travel by water often provided more comfort and speed than land-travel, at least until the advent of a network of railways in the 19th century. Travel for the purpose of tourism is reported to have started around this time when people began to travel for fun as travel was no longer a hard and challenging task. This was capitalized on by people like Thomas Cook selling tourism packages where trains and hotels were booked together.[11] Airships and airplanes took over much of the role of long-distance surface travel in the 20th century, notably after the Second World War where there was a surplus of both aircraft and pilots.[8] Air travel has become so ubiquitous in the 21st century that one woman, Alexis Alford, visited all 196 countries before the age of 21.[12]

Travel

 

Travel is the movement of people between distant geographical locations. Travel can be done by foot, bicycle, automobile, train, boat, bus, airplane, ship or other means, with or without luggage, and can be one way or round trip.[1] Travel can also include relatively short stays between successive movements, as in the case of tourism.

Etymology

The origin of the word "travel" is most likely lost to history. The term "travel" may originate from the Old French word travail, which means 'work'.[2] According to the Merriam-Webster dictionary, the first known use of the word travel was in the 14th century. It also states that the word comes from Middle English travailen, travelen (which means to torment, labor, strive, journey) and earlier from Old French travailler (which means to work strenuously, toil).

In English, people still occasionally use the words travail, which means struggle. According to Simon Winchester in his book The Best Travelers' Tales (2004), the words travel and travail both share an even more ancient root: a Roman instrument of torture called the tripalium (in Latin it means "three stakes", as in to impale).[citation needed] This link may reflect the extreme difficulty of travel in ancient times. Travel in modern times may or may not be much easier, depending upon the destination. Travel to Mount Everest, the Amazon rainforest, extreme tourism, and adventure travel are more difficult forms of travel. Travel can also be more difficult depending on the method of travel, such as by bus, cruise ship

Wednesday, January 25, 2023

Teacher Builds Better Balance for Fun in Retirement

Many people think of retirement as a period in life full of baking cookies, swinging on the porch, and golfing. But for many retirees, that routine might sound like a nice vacation for a little while but becomes tedious on a daily basis.

Karen J. was one of those retirees. She didn't want to settle quietly into her hobbies after she retired from teaching. The desire to fill up some of her time and satisfy her quest for continual learning took her back to the classroom part-time.

However, it didn't take long for her to realize a traditional teaching role in a classroom was no longer an ideal fit for her retirement years. "Being inside the school working with a very limited and tight schedule, I decided I wanted more flexibility," Karen says.

Seeking a Better Work-Life Balance in Retirement

Karen also needed a job that provided more consistent income to add to her savings and boost her hobby fund. "Not getting a salary when schools are closed, on holidays, during vacation weeks, or over the entire summer was a bit stressful!"

But Karen found that it was challenging to find a part-time job that matched her professional skills and experience on her own, which led her to FlexJobs.

Discovering New Options

Through FlexJobs, Karen was able to land not one but two part-time, flexible positions with TutorMe and Littera Education. And together, they fit her needs perfectly. Now, Karen is busy "enjoying more of life by having time for other pursuits, piano, crafts, church activities, or simply being with friends."

"I enjoy being at home because it is quiet. I can take breaks when needed, schedule work, and not feel rushed to get from one place to another by a certain time. Now, I can leave for appointments or just have additional time for my hobbies."

Beyond balancing her time, Karen enjoys staying relevant and learning new skills that align with her lifelong career. "These roles give me additional training since I am a lifelong learner and still would like to help students achieve success."

Advice to Anyone Considering a FlexJobs Membership

Like many retirees, Karen noted that it's a balancing act to fight against age bias and other stereotypes about retirees. She suggests that other retirees update their resumes strategically with a focus on communicating both their experience and desire to keep working.

And even though budgets can be tight in retirement, Karen thinks the paid membership is well worth it. She says, "Try it for three months and keep looking! FlexJobs has a LOT of jobs."

Create Your Own Retirement Rules

There is no standard blueprint for retirement anymore. As Karen discovered, you can create your work-life balance rules.

If you're ready to explore your flexible work options, FlexJobs can help. We post jobs daily in over 50 career categories, and we have an entire team of real people dedicated to verifying those jobs to ensure that our members only see legitimate opportunities. Take the tour and discover all of the ways FlexJobs can support you!

Balance and a Rewarding Career Using FlexJobs

For many, the United States Census Bureau study about commuting comes as no surprise. The Bureau's report shares that the average time spent commuting back and forth to work has grown to almost 30 minutes each way. And for most professionals who work in an office setting, giving up five hours of life each week for a commute is pretty standard.

But Sara S. struggled with a lengthy commute combined with long, draining hours. She realized that something had to change. Her work life was taking a toll on her family and personal commitments and pushing her to professional burnout. It was time to take back control of her life.

Committing to Pursuing Balance

Recognizing that she needed a change, Sara looked for remote roles independently. It was only a short time before she realized she was spending more time sourcing legitimate positions than she was applying for and following up on them.

"I had been looking for a remote position for a few months and wasted so much time and energy on fake job leads." Even with the many awareness campaigns, job seekers like Sara are often overwhelmed with the number of scams targeting job seekers. Fortunately, she found FlexJobs, and her job search became streamlined and productive.

Building a Rewarding Career

Sara knew that her next role needed to do more than create balance. She was also determined that it would be a quality position aligned with her career goals. "I didn't want to step backward in my career or be stuck in a position with no growth opportunities."

Fortunately, Sara remained focused on her goals and found a perfect fit in a fully remote role with UnitedHealth Group. Now, Sara can be more present for her family without having to put her career to the side. "I found an organization I can grow with, professionally and personally."

Thriving Throughout All Areas

If you ask Sara how working remotely has affected her life, she'll tell you she's enjoying building better balance in the larger, more apparent areas of her life. "I have more time for the things that are important to me—my kids, my education goals, and my health," she says.

But like most professionals new to remote work, Sara discovered that work flexibility has also enhanced her life in other areas. "I am saving on gas and auto expenses, eating healthier, and I can wear activewear to work, so I go for a jog or do Pilates on my breaks!"

Advocating for Work Flexibility

Now that Sara is thriving in a meaningful role supporting her work-life balance, she has become an advocate for others to make effective changes in their lives. "I have recommended FlexJobs to so many people. It was well worth purchasing the membership."

Her guidance to others looking for more work freedom? Your job search is much more than tailoring a resume and hitting "submit." Sara says, "Don't forget about the value of networking," also stating that, "A flawless resume is useless if no one ever reads it."

Create Your Own Success Story

We hear from job seekers like Sara every day, sharing the enormous impact that flexible work has made on their lives.

If you're ready to build a better work-life balance, take the tour and discover all of the resources that FlexJobs offers to support you in your job search.

Tuesday, January 24, 2023

Tailwind

 With great UX comes great CSS responsibility. At Yoast, like most other companies, we witnessed first-hand that writing a scalable and maintainable CSS codebase is complicated. We’ve tried everything from plain CSS, preprocessors and CSS-in-JS options to all kinds of frameworks. But we never got a firm grasp on dealing with consistency, exceptions and learning curves. Finally, with Tailwind, we feel we’ve found a durable solution: stop writing CSS altogether.

Tailwind is a utility-first CSS framework and the concept is simple: combine single-purpose CSS classes on your elements to get the styling you need. Instead of combining CSS properties in your stylesheets to get there. Can you see how this immediately solves the scalability issue? Writing CSS becomes a matter of finding the right combinations of utilities instead of, well, writing actual CSS. Of course, Tailwind provides a solution for combining utilities into new class names for easy application, but you’re still not really writing CSS. Tailwind comes with great documentation including many examples, is easy to configure and provides great performance by purging unused styles. I recommend it to everyone.

// Combine multiple Tailwind utility classes into a custom
// .button class using the @apply directive.

.yst-section {
  @apply yst-max-w-5xl lg:yst-grid lg:yst-grid-cols-3 lg:yst-gap-8 yst-mx-8 yst-mb-8 yst-border-b yst-border-gray-200 yst-pb-8;
}

Platform agnosticism

Now let’s get back to that thing I said about this front-end not being built for Shopify at all. With this project, we set out to create a universal Yoast interface, not specifically tailored to one platform. So instead of building a user interface, we will actually be building an interface for building user interfaces. A higher-order user interface, if you will. This kind of agnostic approach offers challenges of its own, mainly those considering flexibility.

Configurability

Not all platforms offer the same editable content types. And some platforms might not even benefit or support certain SEO features at all. In other words, the front-end has to be highly configurable to fit the needs and capabilities of many platforms. Almost like an SEO settings form builder.

We solved this technically by exposing an app initializer function that accepts the configuration for the specific platform at hand. This object mainly consists of a list of content types and their supported SEO features and a list of generally supported SEO features. Based on this configuration, the initializing function creates a Redux store and other contexts, sets up routes and form components and registers callbacks for handling retrieving and saving data. It then returns an app object with a render method. Which is basically just a ReactDOM.render call with its first argument, the component, already supplied. Now the implementor can render the app in a DOM element of choosing while remaining unaware of the technology responsible for that rendering.

This approach has proven to offer the flexibility and decoupling we were looking for. Everything the user interface needs to know from the implementor is shared through a single configuration object. In theory, we could now switch out Redux for React’s useReducer. Or replace React with Vue entirely without having to touch the implementor whatsoever. Magic…

// A basic example of how to initialize
// and render the new Yoast user interface.
import initializeSettings from "@yoast/admin-ui/settings";

const { render } = initializeSettings( {
  isSetting1Enabled: true,
  isSettings2Enabled: false,
  contentTypes: [
    {
      name: "post",
      isContentTypeSetting1Enabled: false,
      ...etc,
    },
  ],
  handleSave: async ( data ) => {
    const response = await saveData( data );
    return response.status;
  },
  ...etc,
} );

// Start rendering React in the #root.
render( document.getElementById( "root" ) );

Behind the front-end

 It is April 2021 and amidst a global pandemic, we are about to embark on our greatest venture yet: developing an SEO app for Shopify. For a development department so focused on WordPress for so long, this is both a dream and a nightmare. Starting fresh on a new platform offers endless possibilities, but even more challenges along the way. Now, after months of intense development, Yoast SEO for Shopify has seen the light of day. And I feel obliged to share this technical journey with you. Not because I think it needs explaining, but because I couldn’t be more proud of the giant leap forwards we took with this project. This is a story of how we, from our attics and kitchen tables, brought ‘SEO for everyone’ to Shopify.

Well, actually… This is merely a look behind the front-end of our new Shopify plugin. My name is Nolle, I’m a front-end developer at Yoast and together with the Components squad, I’m to git blame for just that. I want to start by taking you through the main technologies driving the user interface and I want to end with why we didn’t actually build this front-end for Shopify at all. Come again?

Technologies

Our tech stack was primarily determined by what we’re familiar with and what Shopify promotes. You can experiment when you get a clean slate like this. But creating a really robust solution based on past experiences is even better. And that’s exactly what we did, though there are some firsts in the list below.

React

React obviously needs little introduction. It’s already powering most of our highly interactive interfaces in WordPress and for Shopify we took this even further. The front-end is completely written in React and consists of two single page applications. One for general SEO settings and one for optimizing content (more on this separation later). This makes for a user experience that feels much faster and is packed with cool features like optimistic UI, skeleton loaders and live form feedback.

Technically, we’ve moved away completely from class-based components. We’re now committed to a system of smart and dumb functional components. Smart (controller) components are separated from their dumb (view) counterparts so that the latter can be generalized and reused. We’ve also started to follow a ‘hooks over HOCs’ principle. A principle where we favor React hooks over higher-order components (and basically everything else) as much as possible. This all makes for a modern and future-proof React codebase.

Redux and WordPress Data

Like React, Redux is a familiar face here at Yoast. We’ve been using it to manage centralized state in our JavaScript applications for a long time. In our Shopify plugin, we’re using the WordPress Data module to work with Redux because of its familiarity and benefits. It wraps the core Redux API in a thin layer of optimizations like selector memoization and a Redux Saga like system for writing asynchronous actions, called controls.

Next to a nice and nested state structure, we feel like this store has become one of our cleanest yet by adhering to a few simple rules. For instance, we got rid of those dreadful state Booleans (isLoading, isSuccessful, etc.) and replaced them with status constants. That way, the state of something asynchronous for instance can be traced back to one place. Instead of deriving it from multiple Booleans. No more weird edge cases in-between states!

// Replace those bug prone state Booleans
// with status constants.

// Using status booleans in state.
const state = {
  isLoading: true,
  hasError: false,
};

// Using status enums in state.
const state = {
  status: "loading", // || "idle" || "success" || "error"
};

We’ve also tried to be strict in writing actions in an event-like manner. Meaning we don’t ‘set’ anything in the store, we only ‘inform’ it that something (an event) has occurred. For instance, the difference between setActiveItem and itemActivated is subtle. But the latter is not at all coupled to a specific reducer as the former indicates. In a good Redux store, every reducer is able to respond to every action if needed. Again, following simple rules like these has made all the difference for us in creating a robust store.

// Event-like Redux actions promote looser coupling
// between reducers and the actions it responds to.

// Using setter like actions.
const authenticationReducer = ( state, action ) => {
  switch ( action.type ) {
    case "setIsAuthenticated": return {
      ...state,
      isAuthenticated: action.payload.isAuthenticated,
    };

    case "setUsername": return {
      ...state,
      username: action.payload.username,
    };

    default: return state;
  }
};

const notificationReducer = ( state, action ) => {
  switch ( action.type ) {
    case "setAuthenticationNotification": return [
      ...state,
      {
        type: "success",
        message: "You were successfully authenticated!",
      },
    ];

    default: return state;
  }
};

// Using event like actions.
const authenticationReducer = ( state, action ) => {
  switch ( action.type ) {
    case "user/authenticated": return {
      ...state,
      status: "authenticated",
      username: action.payload.username,
    };

    default: return state;
  }
};

// Another reducer reacts to the same action.
const notificationReducer = ( state, action ) => {
  switch ( action.type ) {
    case "user/authenticated": return [
      ...state,
      {
        type: "success",
        message: "You were successfully authenticated!",
      },
    ];

    default: return state;
  }
};

increasing the minimum PHP requirement for Yoast SEO

 In March 2023, we will be increasing the minimum PHP requirement for Yoast SEO, Yoast SEO Premium, and all its add-ons to PHP 7.2. If you’re not running PHP 7.2 or higher yet, you really, really should! It will make your site faster and safer. Not to mention, your site will use less energy. That’s why I started writing about and nudging people to update to PHP 7 in our plugin six years ago (see the original post).

Background information

WordPress statistics show that about 12.1% of all WordPress installations are on PHP versions lower than 7.2. However, our own statistics – gathered through our plugins – show that only 1.86% of sites of our users (who share data with us) are on a low version of PHP. At this point, it’s simply no longer fair to give 98.14% of our customers a plugin that’s less good than what it could be.

Switching the minimum requirement to PHP 7.2 will allow us to write much better code, as the language has evolved quite a bit since PHP 5.6 was released. In addition, dropping PHP 5.6, 7.0, and 7.1 will make it a lot easier for us to get ready for PHP 9.

Help! I don’t know what to do!!

That’s fair, not everyone will know how to update their site’s PHP version. We have an article on how to update PHP that links to a lot of resources for many of the bigger hosts. This should help you get started. If your host isn’t listed, we’ll provide you with an example email.

I’m super excited to see that we’ve come to this point and I want to thank all of you who have updated your site.