Automate Your Workflow with Node

Post pobrano z: Automate Your Workflow with Node

You know those tedious tasks you have to do at work: Updating configuration files, copying and pasting files, updating Jira tickets.

Time adds up after a while. This was very much the case when I worked for an online games company back in 2016. The job could be very rewarding at times when I had to build configurable templates for games, but about 70% of my time was spent on making copies of those templates and deploying re-skinned implementations.

What is a reskin?

The definition of a reskin at the company was using the same game mechanics, screens and positioning of elements, but changing the visual aesthetics such as color and assets. So in the context of a simple game like ‘Rock Paper Scissors,’ we would create a template with basic assets like below.

But when we create a reskin of this, we would use different assets and the game would still work. If you look at games like Candy Crush or Angry Birds, you’ll find that they have many varieties of the same game. Usually Halloween, Christmas or Easter releases. From a business perspective it makes perfect sense.

Now… back to our implementation. Each of our games would share the same bundled JavaScript file, and load in a JSON file that had different content and asset paths. The result?

The good thing about extracting configurable values into a JSON file is that you can modify the properties without having to recompile/build the game again. Using Node.js and the original breakout game created by Mozilla, we will make a very simple example of how you can create a configurable template, and make releases from it by using the command line.

Our game

This is the game we’ll be making. Reskins of MDN Breakout, based on the existing source code.

Gameplay screen from the game MDN Breakout where you can use your paddle to bounce the ball and destroy the brick field, with keeping the score and lives.

The primary color will paint the text, paddle, ball and blocks, and the secondary color will paint the background. We will proceed with an example of a dark blue background and a light sky blue for the foreground objects.

Prerequisites

You will need to ensure the following:

We have tweaked the original Firefox implementation so that we first read in the JSON file and then build the game using HTML Canvas. The game will read in a primary color, and a secondary color from our game.json file.

{
  "primaryColor": "#fff",
  "secondaryColor": "#000"
}

We will be using example 20 from the book Automating with Node.js. The source code can be found here.

Open up a new command line (CMD for Windows, Terminal for Unix-like Operating systems) and change into the following directory once you have cloned the repository locally.

$ cd nobot-examples/examples/020

Remember the game server should be running in a separate terminal.

Our JSON file sits beside an index.html file inside a directory called template. This is the directory that we will copy from whenever we want to do a new release/copy.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Paddle Game</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    canvas {
      background: #eee;
      display: block;
      margin: 0 auto;
    }
  </style>
</head>
<body>
  <canvas id="game" width="480" height="320"></canvas>
  <script type="text/javascript" src="../../core/game-1.0.0.js"></script>
</body>
</html>

You see above that every game we release will point to the same core bundle JavaScript file. Let’s have a look at our JavaScript implementation under the core directory.

Don’t look too much into the mechanics of how the game works, more so how we inject values into the game to make it configurable.

(function boot(document) {
  function runGame(config) {
    const canvas = document.getElementById('game');
    canvas.style.backgroundColor = config.secondaryColor;
    // rest of game source code gets executed... hidden for brevity
    // source can be found here: https://git.io/vh1Te
  }

  function loadConfig() {
    fetch('game.json')
      .then(response => response.json())
      .then(runGame);
  }

  document.addEventListener('DOMContentLoaded', () => {
    loadConfig();
  });
}(document));

The source code is using ES6 features and may not work in older browsers. Run through Babel if this is a problem for you.

You can see that we are waiting for the DOM content to load, and then we are invoking a method called loadConfig. This is going to make an AJAX request to game.json, fetch our JSON values, and once it has retrieved them, it will initiate the game and assign the styles in the source code.

Here is an example of the configuration setting the background color.

const canvas = document.getElementById('game');
canvas.style.backgroundColor = config.secondaryColor; // overriding color here

So, now that we have a template that can be configurable, we can move on to creating a Node.js script that will allow the user to either pass the name of the game and the colors as options to our new script, or will prompt the user for: the name of the game, the primary color, and then the secondary color. Our script will enforce validation to make sure that both colors are in the format of a hex code (e.g. #101b6b).

When we want to create a new game reskin, we should be able to run this command to generate it:

$ node new-reskin.js --gameName='blue-reskin' --gamePrimaryColor='#76cad8' --gameSecondaryColor='#10496b'

The command above will build the game immediately, because it has the three values it needs to release the reskin.

We will create this script new-reskin.js, and this file carries out the following steps:

  1. It will read in the options passed in the command line and store them as variables. Options can be read in by looking in the process object (process.argv).
  2. It will validate the values making sure that the game name, and the colors are not undefined.
  3. If there are any validation issues, it will prompt the user to re-enter it correctly before proceeding.
  4. Now that it has the values, it will make a copy of the template directory and place a copy of it into the releases directory and name the new directory with the name of the game we gave it.
  5. It will then read the JSON file just recently created under the releases directory and override the values with the values we passed (the colors).
  6. At the end, it will prompt the user to see if they would like to open the game in a browser. It adds some convenience, rather than us trying to remember what the URL is.

Here is the full script. We will walk through it afterwards.

require('colors');
const argv = require('minimist')(process.argv.slice(2));
const path = require('path');
const readLineSync = require('readline-sync');
const fse = require('fs-extra');
const open = require('opn');
const GAME_JSON_FILENAME = 'game.json';

let { gameName, gamePrimaryColor, gameSecondaryColor } = argv;

if (gameName === undefined) {
  gameName = readLineSync.question('What is the name of the new reskin? ', {
    limit: input => input.trim().length > 0,
    limitMessage: 'The project has to have a name, try again'
  });
}

const confirmColorInput = (color, colorType = 'primary') => {
  const hexColorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
  if (hexColorRegex.test(color)) {
    return color;
  }
  return readLineSync.question(`Enter a Hex Code for the game ${colorType} color `, {
    limit: hexColorRegex,
    limitMessage: 'Enter a valid hex code: #efefef'
  });
};

gamePrimaryColor = confirmColorInput(gamePrimaryColor, 'primary');
gameSecondaryColor = confirmColorInput(gameSecondaryColor, 'secondary');

console.log(`Creating a new reskin '${gameName}' with skin color: Primary: '${gamePrimaryColor}' Secondary: '${gameSecondaryColor}'`);

const src = path.join(__dirname, 'template');
const destination = path.join(__dirname, 'releases', gameName);
const configurationFilePath = path.join(destination, GAME_JSON_FILENAME);
const projectToOpen = path.join('http://localhost:8080', 'releases', gameName, 'index.html');

fse.copy(src, destination)
  .then(() => {
    console.log(`Successfully created ${destination}`.green);
    return fse.readJson(configurationFilePath);
  })
  .then((config) => {
    const newConfig = config;
    newConfig.primaryColor = gamePrimaryColor;
    newConfig.secondaryColor = gameSecondaryColor;
    return fse.writeJson(configurationFilePath, newConfig);
  })
  .then(() => {
    console.log(`Updated configuration file ${configurationFilePath}`green);
    openGameIfAgreed(projectToOpen);
  })
  .catch(console.error);

const openGameIfAgreed = (fileToOpen) => {
  const isOpeningGame = readLineSync.keyInYN('Would you like to open the game? ');
  if (isOpeningGame) {
    open(fileToOpen);
  }
};

At the top of the script, we require the packages needed to carry out the process.

  • colors to be used to signify success or failure using green or red text.
  • minimist to make it easier to pass arguments to our script and to parse them optionally. Pass input without being prompted to enter.
  • path to construct paths to the template and the destination of the new game.
  • readline-sync to prompt user for information if it’s missing.
  • fs-extra so we can copy and paste our game template. An extension of the native fs module.
  • opn is a library that is cross platform and will open up our game in a browser upon completion.

The majority of the modules above would’ve been downloaded/installed when you ran npm install in the root of the nobot-examples repository. The rest are native to Node.

We check if the game name was passed as an option through the command line, and if it hasn’t been, we prompt the user for it.

// name of our JSON file. We store it as a constant
const GAME_JSON_FILENAME = 'game.json';

// Retrieved from the command line --gameName='my-game' etc.
let { gameName, gamePrimaryColor, gameSecondaryColor } = argv;

// was the gameName passed?
if (gameName === undefined) {
  gameName = readLineSync.question('What is the name of the new reskin? ', {
    limit: input => input.trim().length > 0,
    limitMessage: 'The project has to have a name, try again'
  });
}

Because two of our values need to be hex codes, we create a function that can do the check for both colors: the primary and the secondary. If the color supplied by the user does not pass our validation, we prompt for the color until it does.

// Does the color passed in meet our validation requirements?
const confirmColorInput = (color, colorType = 'primary') => {
  const hexColorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
  if (hexColorRegex.test(color)) {
    return color;
  }
  return readLineSync.question(`Enter a Hex Code for the game ${colorType} color `, {
    limit: hexColorRegex,
    limitMessage: 'Enter a valid hex code: #efefef'
  });
};

We use the function above to obtain both the primary and secondary colors.

gamePrimaryColor = confirmColorInput(gamePrimaryColor, 'primary');
gameSecondaryColor = confirmColorInput(gameSecondaryColor, 'secondary');

In the next block of code, we are printing to standard output (console.log) to confirm the values that will be used in the process of building the game. The statements that follow are preparing the paths to the relevant files and directories.

The src will point to the template directory. The destination will point to a new directory under releases. The configuration file that will have its values updated will reside under this new game directory we are creating. And finally, to preview our new game, we construct the URL using the path to the local server we booted up earlier on.

console.log(`Creating a new reskin '${gameName}' with skin color: Primary: '${gamePrimaryColor}' Secondary: '${gameSecondaryColor}'`);
const src = path.join(__dirname, 'template');
const destination = path.join(__dirname, 'releases', gameName);
const configurationFilePath = path.join(destination, GAME_JSON_FILENAME);
const projectToOpen = path.join('http://localhost:8080', 'releases', gameName, 'index.html');

In the code following this explanation, we:

  • Copy the template files to the releases directory.
  • After this is created, we read the JSON of the original template values.
  • With the new configuration object, we override the existing primary and secondary colors provided by the user’s input.
  • We rewrite the JSON file so it has the new values.
  • When the JSON file has been updated, we ask the user if they would like to open the new game in a browser.
  • If anything went wrong, we catch the error and log it out.
fse.copy(src, destination)
  .then(() => {
    console.log(`Successfully created ${destination}`green);
    return fse.readJson(configurationFilePath);
  })
  .then((config) => {
    const newConfig = config;
    newConfig.primaryColor = gamePrimaryColor;
    newConfig.secondaryColor = gameSecondaryColor;
    return fse.writeJson(configurationFilePath, newConfig);
  })
  .then(() => {
    console.log(`Updated configuration file ${configurationFilePath}`green);
    openGameIfAgreed(projectToOpen);
  })
  .catch(console.error);

Below is the function that gets invoked when the copying has completed. It will then prompt the user to see if they would like to open up the game in the browser. The user responds with y or n

const openGameIfAgreed = (fileToOpen) => {
  const isOpeningGame = readLineSync.keyInYN('Would you like to open the game? ');
  if (isOpeningGame) {
    open(fileToOpen);
  }
};

Let’s see it in action when we don’t pass any arguments. You can see it doesn’t break, and instead prompts the user for the values it needs.

$ node new-reskin.js
What is the name of the new reskin? blue-reskin
Enter a Hex Code for the game primary color #76cad8
Enter a Hex Code for the game secondary color #10496b
Creating a new reskin 'blue-reskin' with skin color: Primary: '#76cad8' Secondary: '#10496b'
Successfully created nobot-examples\examples\020\releases\blue-reskin
Updated configuration file nobot-examples\examples\020\releases\blue-reskin\game.json
Would you like to open the game? [y/n]: y
(opens game in browser)

My game opens on my localhost server automatically and the game commences, with the new colors. Sweet!

Oh… I’ve lost a life already. Now if you navigate to the releases directory, you will see a new directory called blue-reskin This contains the values in the JSON file we entered during the script execution.

Below are a few more releases I made by running the same command. You can imagine if you were releasing games that could configure different: images, sounds, labels, content and fonts, you would have a rich library of games based on the same mechanics.

Even better, if the stakeholders and designers had all of this information in a Jira ticket, you could integrate the Jira API into the Node script to inject these values in without the user having to provide any input. Winning!


This is one of many examples that can be found in Automating with Node.js. In this book, we will be looking at a more advanced example using „Rock Paper Scissors” as the basis of a build tool created from scratch.

The post Automate Your Workflow with Node appeared first on CSS-Tricks.

How to Create an Easy Ice Text Effect in Adobe Photoshop

Post pobrano z: How to Create an Easy Ice Text Effect in Adobe Photoshop

Final product image
What You’ll Be Creating

This tutorial will show you how to use layer styles, with simple shapes and textures, to create an easy ice effect in Photoshop. 

This text effect was inspired by the many Layer Styles available on GraphicRiver, like this 3D Ice Cool, Freeze and Snow Effects Styles pack.

3D Ice Cool Freeze and Snow Effects Styles

Let’s get started!

Tutorial Assets

The following assets were used during the production of this tutorial:

1. Create the Background Shape

Step 1

Create a new 1000 x 650 px document.

Create a New Document

Step 2

Pick the Rectangle Tool, and create a rectangle that covers the bottom part of the document. Rename the rectangle layer to Ground.

Create the Ground Rectangle

Step 3

Create another rectangle that covers the upper part, and rename its layer to Back.

Create the Back Rectangle

2. How to Style a Ground Shape

Double-click the Ground layer to apply the following layer style:

Step 1

Add an Inner Shadow with these settings:

  • Blend Mode: Linear Burn
  • Color: #9cb0be
  • Opacity: 15%
  • Distance: 0
  • Size: 250
Inner Shadow

Step 2

Add a Gradient Overlay with these settings:

  • Check the Dither box
  • Blend Mode: Linear Burn
  • Opacity: 20%
  • Style: Radial
  • Scale: 150%
  • Create a Transparent to Fill Color gradient fill using Black on both sides.
Gradient Overlay

Step 3

Click the + icon next to the Gradient Overlay tab to add another Gradient Overlay effect with these settings:

  • Check the Dither box.
  • Check the Reverse box.
  • Use the shown Gradient fill from the CSP True Sky Gradients file.
Gradient Overlay - 2

Step 4

Click the first Gradient Overlay tab again, and then click-drag inside the document to move the gradient so that the light is near the upper part of the rectangle.

Move the Gradient

This is how the first rectangle should look.

Styled Ground

3. How to Copy and Paste Layer Styles

Step 1

Right-click the Ground layer, choose Copy Layer Style, and then right-click the Back layer and choose Paste Layer Style.

Double-click the Back layer to uncheck the Reverse box in the second Gradient Overlay effect.

Copy and Paste the Layer Style

Step 2

This will style the back rectangle. If needed, move any gradient fills as you did before.

Move the Gradient

4. How to Adjust a Background

Step 1

Click the Create new fill or adjustment layer icon at the bottom of the Layers panel and choose Hue/Saturation.

Add a HueSaturation Adjustment Layer

Step 2

Change the Hue to -3, the Saturation to -25, and the Lightness to -20.

HueSaturation Settings

Step 3

Add a Gradient fill layer. Create a Transparent to Fill Color gradient fill using a Black color on both sides.

Then, change the Style to Radial and the Scale to 200, and check the Dither box.

The Gradient Fill Settings

Step 4

Change the Gradient layer’s Blend Mode to Soft Light.

Change the Blend Mode

Step 5

Place the Textures – Golds, Whites, And Greys image on top of all layers, rename its layer to BG Texture, and resize it as needed.

Add the Background Texture

Step 6

Go to Image > Adjustments > Desaturate, and then change the BG Texture layer’s Blend Mode to Soft Light.

BG Texture Layer Settings

5. How to Create Text Layers

Step 1

Create the text in All Caps using the font Kornik.

Then, set the Color to #367497, the Size to 250 pt, and the Tracking value to 25.

Create the Text

Step 2

Duplicate the text layer, change the copy’s Fill value to 0, and then duplicate the copy layer.

Duplicate the Text Layers

6. How to Style the Original Text Layer

Double-click the original text layer to apply the following layer style:

Step 1

Add a Bevel and Emboss with these settings:

  • Style: Emboss
  • Technique: Chisel Soft
  • Depth: 200
  • Size: 10
  • Uncheck the Use Global Light box
  • Angle: 60
  • Altitude: 50
  • Gloss Contour: Sawtooth 1
  • Check the Anti-aliased box
  • Highlight Mode:

    • Opacity: 20%
  • Shadow Mode: Screen

    • Color: #ffffff
    • Opacity: 80%
Bevel and Emboss

Step 2

Add a Contour with these settings:

  • Contour: Rolling Slope – Ascending
  • Check the Anti-aliased box.
  • Range: 100%
Contour

Step 3

Add an Inner Glow with these settings:

  • Blend Mode: Linear Light
  • Opacity: 50%
  • Color: #edf1f4
  • Technique: Precise
  • Source: Center
  • Size: 90
  • Contour: Gaussian
  • Check the Anti-aliased box
Inner Glow

Step 4

Add a Satin with these settings:

  • Blend Mode: Screen
  • Color: #afcbea
  • Opacity: 50%
  • Angle: 30
  • Distance: 38
  • Size: 50
  • Contour: Cone – Inverted
  • Check the Anti-aliased box
  • Check the Invert box
Satin

Step 5

Add a Gradient Overlay with these settings:

  • Blend Mode: Multiply
  • Opacity: 70%
  • Create a Fill Color to Transparent gradient fill using the colors #275c8d to the left and #274a71 to the right.
Gradient Overlay

Step 6

Add an Outer Glow with these settings:

  • Blend Mode: Soft Light
  • Opacity: 50%
  • Color: #b9dfff
  • Spread: 20
  • Size: 10
  • Contour: Cove – Deep
  • Check the Anti-aliased box
  • Range: 80%
Outer Glow

Step 7

Change the text layer’s Fill value to 20%.

Change the Fill Value

7. How to Style the First Copy Text Layer

Double-click the first copy text layer to apply the following layer style:

Step 1

Add a Bevel and Emboss with these settings:

  • Technique: Chisel Hard
  • Size: 50
  • Gloss Contour: Ring
  • Check the Anti-aliased box
  • Highlight Mode: Soft Light

    • Opacity: 50%
  • Shadow Mode: Soft Light

    • Color: #f4ffff
    • Opacity: 70%
Bevel and Emboss

Step 2

Add a Contour with these settings:

  • Contour: Cove – Deep
  • Check the Anti-aliased box.
Contour

Step 3

Add an Inner Shadow with these settings:

  • Blend Mode: Linear Burn
  • Color: #8699a6
  • Opacity: 100%
  • Distance: 0
  • Size: 35

This will style the second text layer.

Styled Text Layer 2

8. How to Style the Second Copy Text Layer

Double-click the second copy text layer to apply the following layer style:

Step 1

Add a Bevel and Emboss with these settings:

  • Technique: Chisel Hard
  • Size: 50
  • Uncheck the Use Global Light box
  • Angle: -158
  • Altitude: 64
  • Check the Anti-aliased box
  • Highlight Mode: Linear Light

    • Opacity: 50%
  • Shadow Mode: Linear Burn

    • Color: #90abc8
    • Opacity: 100%
Bevel and Emboss

Step 2

Add a Contour with these settings:

  • Contour: Cove – Deep
  • Check the Anti-aliased box.
Contour

Step 3

Add a Texture with these settings:

  • Pattern: Molecular
  • Depth: 5%
Texture

Step 4

Add a Pattern Overlay with these settings:

  • Blend Mode: Soft Light
  • Pattern: Satin
Pattern Overlay

Step 5

Add an Outer Glow with these settings:

  • Opacity: 35%
  • Color: #7ab6ef
  • Spread: 20
  • Size: 30
Outer Glow

This will finish off the ice effect.

Styled Text Layer 3

9. How to Create a Reflection

Step 1

Duplicate all three text layers you have, go to Layer > Merge Layers, and rename the merged layer to Reflection.

Create the Reflection Layer

Step 2

Press Command-T to enter the Free Transform Mode, and then right-click the bounding box and choose Flip Vertical.

Flip Vertical

Step 3

Move the reflection text right below the original text, and hit the Return key to accept the changes.

Move the Reflection

Step 4

Right-click the Reflection layer, choose Convert to Smart Object, and then change its Blend Mode to Soft Light and place it below the original text layer.

Convert to Smart Object

Step 5

Go to Filter > Blur > Motion Blur, and change the Angle to 90 and the Distance to 10.

Motion Blur

Step 6

Click the Add layer mask icon at the bottom of the Layers panel to add a mask.

Add a Layer Mask

Step 7

Pick the Gradient Tool, set the Foreground and Background Colors back to Black and White, and select the Reflection layer mask’s thumbnail.

Choose the Foreground to Transparent fill in the Options bar, and make sure that the Linear Gradient icon is active.

Now hold the Shift key and drag from about over the top of the original text to right outside the document’s bottom, in order to fill the mask and hide the lower part of the reflection.

You might need to retry or repeat this step a couple of times in order to get a result you like.

Mask the Reflection

10. How to Create a Simple Shadow

Step 1

Duplicate the original text layer, drag the copy below it, and rename it to Shadow.

Create the Shadow Layer

Step 2

Right-click the Shadow layer and choose Rasterize Type.

Press Command-T, and scale the text down vertically to get the basic shadow shape.

Rasterize Type

Step 3

Use the Move Tool to reposition the Shadow below the text.

Reposition the Shadow

Step 4

Go to Filter > Blur > Gaussian Blur, and set the Radius to 10.

Gaussian Blur

Step 5

Change the Shadow layer’s Blend Mode to Multiply and its Opacity to 70%.

Shadow Layer Settings

11. How to Add a Snow Texture Overlay

Step 1

Place the Heavy Snow Texture image on top of all layers, rename its layer to Snow Texture, change its Blend Mode to Screen, and resize the texture as needed.

Add the Snow Texture

Step 2

Pick the Spot Healing Brush Tool, and make sure that the Sample All Layers box in the Options bar is unchecked.

Use a soft round tip to paint over unwanted spots and get rid of them.

Remove Unwanted Areas

Congratulations! You’re Done

In this tutorial, we created a simple background using shapes, layer styles, and adjustment layers. Then, we created three text layers, and styled all of them to achieve the ice effect.

After that, we created a reflection and a shadow for the ice text. Finally, we added a snow texture overlay to finish the effect off.

Please feel free to leave your comments, suggestions, and outcomes below.

Final Result

Design deals for the week

Post pobrano z: Design deals for the week

Every week, we’ll give you an overview of the best deals for designers, make sure you don’t miss any by subscribing to our deals feed. You can also follow the recently launched website Type Deals if you are looking for free fonts or font deals.

Gigantic Bundle of 1000+ Logos, Elements, Mockups, Textures

When a Mighty Deal is called a Gigantic Bundle, you just know it’s going to be big. And that’s exactly what this Alienvalley deal is: Chock full of 1000s of design graphics. You’ll get 400 premade elegant logos, 200+ textures, multiple typefaces and both a nifty Logo Creator and Mockup Creator to quickly and easily whip up hundreds (or is that thousands?) of creative results.

$19 instead of $110 – Get it now!

30 Gorgeous Fonts from YandiDesigns

If your projects are desperately in need of a fresh look, then cast your eyes on this collection of 30 gorgeous fonts created by YandiDesigns. Mix and match styles with these beautiful brush stroke typefaces that are the perfect answer to any project from logo design to wedding invitations.

$14 instead of $362 – Get it now!

Exclusive! 4 High-Quality Fonts from Zeune Ink Foundry

Another Mighty Deals exclusive coming your way! Zeune Ink Foundry is offering up a fantastic font collection of 4 High-Quality Classy Typefaces at one incredibly discounted price. Designed to create elegant typographic works, this collection is overflowing with OpenType features and characters so you certainly don’t want to miss it. Especially considering they all come with an extended license of use!

$9 instead of $94 – Get it now!

Bundle of 20 Brand Book Templates from ZippyPixels

Showing off a logo or stationery design is standard fare for most graphic designers. But if you really want to blow your clients away, you’ll offer them up a slew of brand designs in a full-fledged brand book! Get higher value for your work without spending days putting it all together. Instead, use these gorgeous Brand Book templates from ZippyPixels to present your designs in a truly stunning manner. And it only takes a few hours! With this incredible Mighty Deal, you’ll get 20 High-Quality Brand Book Templates that are print ready and simple to customize with your info and designs.

$17 instead of $39 – Get it now!

Julia Dreams Bigger Bundle of 7400+ Elements

Exclusive! You won’t find this amazing deal anywhere else on the Interweb! So stop looking. Instead, feast your eyes on the Julia Dreams Bigger Bundle, which is just bursting with more than 7400 professional design elements. We’re talking illustrations, textures, fonts, toolkits, watercolors and more. From adorable to colorful to realistically detailed, this set has you covered literally from head to toe. And at only $9, you’ll be kicking yourselves tomorrow if you pass this one up today.

$9 instead of $1800 – Get it now!

1000+ Unique Characters in Stunning Karima Script Font

If you want to impress your typeface toolbox (and your clients, of course!), grab hold of this discounted deal today! The stunning Karima Script is as elegant as it is curvy. Flowing with smooth, legible letters, Karmia features a regular and italics version, alternates, swashes and ligatures and more, all adding up to more than 1,000 unique glyphs. That’s some serious flexibility in a font.

$7 instead of $20 – Get it now!

How to Create a Cactus Text Effect in Adobe Illustrator

Post pobrano z: How to Create a Cactus Text Effect in Adobe Illustrator

Final product image
What You’ll Be Creating

In the following steps, you will learn how to create a cactus text effect in Adobe Illustrator. For starters, you will learn how to set up a simple grid and how to create a pattern brush.

Moving on, you will learn how to create and save a pretty complex pattern. Taking full advantage of the Appearance panel, you will learn how to create the first piece of your cactus and how to save its attributes. Using two simple shapes and some effects, you will learn how to create the pots. Finally, for the background, you will learn how to apply a radial gradient a built-in pattern.

For more inspiration on how to adjust or improve your final text effect, you can find plenty of resources at GraphicRiver.

1. How to Create a New Document and Set Up Grid

Hit Control-N to create a new document. Select Pixels from the Units drop-down menu, enter 850 in the width box and 500 in the height box, and then click that More Settings button. Select RGB for the Color Mode, set the Raster Effects to Screen (72 ppi), and then click Create Document.

Enable the Grid (View > Show Grid) and Snap to Grid (View > Snap to Grid). You will need a grid every 1 px, so simply go to Edit > Preferences > Guides & Grid, and enter 1 in the Gridline every box and 1 in the Subdivisions box. Try not to get discouraged by all that grid—it will make your work easier, and keep in mind that you can easily enable or disable it using the Control-„ keyboard shortcut.

You can learn more about Illustrator’s grid system in this short tutorial from Andrei Stefan: Understanding Adobe Illustrator’s Grid System.

You should also open the Info panel (Window > Info) for a live preview with the size and position of your shapes. Don’t forget to set the unit of measurement to pixels from Edit > Preferences > Units. All these options will significantly increase your work speed.

setup grid

2. How to Create a Pattern Brush

Step 1

Pick the Rectangle Tool (M) and focus on your toolbar. Remove the color from the stroke, and then select the fill and set its color to R=255 G=188 B=53. Move to your artboard and simply create a 25 x 14 px shape—the grid and the Snap to Grid should make it easier.

rectangle

Step 2

Change the fill color to R=93 G=74 B=27 and pick the Ellipse Tool (L). Create the five squeezed circles shown below and place them exactly as shown in the following image.

Once you’re done, select all these new shapes and turn them into a compound path (Control-8).

ellipses

Step 3

Pick the Rectangle Tool (M), create a 25 x 7 px shape, and place it as shown in the first image. Select this new rectangle along with your compound path and click the Minus Front button from the Pathfinder panel (Window > Pathfinder).

minus front

Step 4

Pick the Anchor Point Tool (Shift-C), focus on your brown shapes, and simply click the top anchor points as shown in the first image.

Select the yellow rectangle and remove the fill color.

anchor point tool

Step 5

Select all the shapes made so far, open the Brushes panel (Window > Brushes), and click the New Brush button. Check the Pattern Brush box and click OK to open the Pattern Brush Options window. Type a name for your new brush, enter all the attributes shown below, and click OK to save your new brush.

new brush

3. How to Create a Pattern

Step 1

Using the Rectangle Tool (M), create a 50 px square and fill it with yellow.

square

Step 2

Using the Pen Tool (P), draw two simple paths and place them on the right edge of your yellow square as shown below. Make sure that both paths are selected and open the Appearance panel (Window > Appearance).

Remove the fill color, set the stroke color to R=93 G=74 B=27, and open the Stroke fly-out panel. Increase the Weight to 2 px and select Width Profile 1.

With one of these shapes still selected, open the Graphic Styles (Window > Graphic Styles). Click the New Graphic Style button to save the appearance of your selected path.

width profile

Step 3

Make sure that the two paths made in the previous step are still selected and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

transform

Step 4

Using the Pen Tool (P), draw five simple paths and place them on the top edge of your yellow square as shown below. Apply your graphic style from the Graphic Styles panel to all these paths.

Select only the second and the fourth paths from this set of new paths. Go to the Appearance panel and change the Weight to 1 px, and then go to the Graphic Styles panel and save a new graphic style.

pen tool

Step 5

Make sure that the two paths made in the previous step are still selected and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

transform

Step 6

Using the Pen Tool (P), create the five paths shown in the first image and apply your first graphic style from the Graphic Styles panel.

Using the same tool, create the eight paths shown in the second image, and apply your second graphic style from the Graphic Styles panel.

paths

Step 7

Select all your tiny brown shapes and go to Object > Path > Outline Stroke, and then turn the resulting shapes into a compound path (Control-8).

compound path

Step 8

Select your yellow square along with the brown compound path and click the Intersect button from the Pathfinder panel. Simply drag the resulting shapes inside the Swatches panel (Window > Swatches) to save them as a pattern.

new pattern

4. How to Create a Graphic Style

Step 1

Disable the Grid (Control-„) and the Snap to Grid (Shift-Control-„).

Pick the Type Tool (T) and open the Character panel (Window > Type > Character). Select the Insaniburger font and set the size to 200 px.

Simple click on your artboard, add the „Cactus” piece of text, and set the color to R=78 G=174 B=99. Place your text as shown below, and then go to the Layers panel and lock it.

text

Step 2

Focus on the first letter of your text. Using the Pen Tool (P) or the Brush Tool (B), draw a simple path roughly as shown in the following image. Make sure that it stays selected and focus on the Appearance panel.

Be sure that there’s no fill color and select the stroke. Set its color to R=93 G=58 B=20, increase the Weight to 4 px, and select Width Profile 1 from the Stroke fly-out panel.

stroke

Step 3

Make sure that your round path stays selected, focus on the Appearance panel, and set the fill color to R=75 G=147 B=106.

fill

Step 4

Make sure that your round path stays selected, keep focusing on the Appearance panel, and add a second fill using the Add New Fill button. Select it, set the color to R=78 G=174 B=99, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

add new fill

Step 5

Make sure that your round path stays selected, keep focusing on the Appearance panel, and add a third fill. Select it and set the color to white (R=255 G=255 B=255). Lower its Opacity to 30%, change the Blending Mode to Overlay, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below, click OK, and go to Effect > Pathfinder > Add, and then go to Effect > Path > Offset Path. Enter a -7 px Offset and click OK.

white fill

Step 6

Make sure that your round path stays selected, keep focusing on the Appearance panel, and add a fourth fill. Select it, apply your pattern from the Swatches panel, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

apply pattern

Step 7

Make sure that your round path stays selected, keep focusing on the Appearance panel, and add a second stroke using the Add New Stroke button. Select this new stroke and apply your pattern brush from the Brushes panel, and then drag it below the other stroke.

With your round path still selected, go to the Graphic Styles panel and save a new graphic style.

apply pattern brush

5. How to Create the Cactus Text

Step 1

Using the Pen Tool (P) or the Brush Tool (B), draw a new path roughly as shown in the first image. Make sure that it stays selected and apply your last graphic style from the Graphic Styles panel.

apply graphic style

Step 2

Make sure that the path made in the previous step stays selected, and focus on the Appearance panel. First, select the bottom two fills and replace the existing colors with the ones shown below, and then click the Transform effect applied for the top fill and adjust the Rotate Angle as shown below.

With this path still selected, go to the Graphic Styles panel and save a new graphic style.

adjust graphic style

Step 3

Keep focusing on the first letter from your text and draw more round paths along that letter, as shown below.

apply graphic styles

Step 4

Select those new round paths and apply the last two graphic styles from the Graphic Styles panel. Try not to have two paths with identical styles one after the other. Also, select these paths one by one, open the Transform effect applied for the top fill (in the Appearance panel), and adjust the Rotate Angle to match the orientation of the selected path.

apply graphic styles

Step 5

Select the smaller cactus pieces and focus on the Appearance panel. Open the Transform effect applied for the top fill, drag both Scale sliders to 50%, and click OK.

scale pattern

Step 6

Move on to the other letters from your text and follow the same techniques used for the first letter. First, create the round paths and apply the graphic styles, and then adjust the pattern rotation and the pattern scale for the smaller paths.

cactus text

6. How to Create the Cactus Flowers

Step 1

Using the Pen Tool (P) or the Brush Tool (B), draw three simple paths as shown in the first image. Fill them with R=239 G=75 B=74 and add a 3 px stroke. Set its color to R=93 G=58 B=20, increase the Weight to 3 px, and don’t forget to select Width Profile 1. Once you’re done, save these attributes as a graphic style.

cactus flower

Step 2

Using the Pen Tool (P) or the Brush Tool (B) along with the graphic style saved in the previous step, add the cactus flower for the other letters. Once you’re done, go to the Layers panel, unlock your piece of text, and delete it.

cactus flowers

7. How to Create the Pot

Step 1

Enable the Grid (Control-„) and the Snap to Grid (Shift-Control-„). For the following steps, you will need a grid every 5 px. Just go to Edit > Preferences > Guides & Grid and enter 5 in the Gridline every box.

Pick the Rectangle Tool (M), create a 75 x 20 px shape, fill it with yellow, and place it as shown in the following image.

yellow rectangle

Step 2

Using the Rectangle Tool (M), create a 65 x 40 px shape, fill it with blue, and place it as shown in the first image.

Switch to the Direct Selection Tool (A) and focus on the bottom side of this new rectangle. Select both anchor points, go to the control panel, and enter 20 px in that Corners box. Once you’re done, send this shape to back (Shift-Control-[).

blue shape

Step 3

Select your yellow shape and focus on the Appearance panel. Replace the yellow with R=188 G=117 B=71 and then add a second fill. Select it, set the color to R=214 G=146 B=97, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

add new fill

Step 4

Make sure that your rectangle stays selected and keep focusing on the Appearance panel. Add a third fill and select it. Set the color to white, lower its Opacity to 25%, change the Blending Mode to Overlay, and then go to Effect > Path > Offset Path. Enter a -8 px Offset, click OK, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

offset path

Step 5

Make sure that your rectangle stays selected and keep focusing on the Appearance panel. Add a 4 px stroke and set its color to R=92 G=59 B=28.

stroke

Step 6

Make sure that your rectangle stays selected and keep focusing on the Appearance panel. Select the entire path (simply click that „Path” piece of text from the top of the panel) and go to Effect > Stylize > Rounded Corners. Enter a 5 px Radius, click OK, and go to Effect > Distort & Transform > Roughen. Enter the attributes shown below and click OK.

rounded corners

Step 7

Select your blue shape and focus on the Appearance panel. Replace the blue with R=188 G=117 B=71 and then add a second fill. Select it, set the color to R=214 G=146 B=97, and go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

new fill

Step 8

Make sure that your bottom shape stays selected and keep focusing on the Appearance panel. Add a third fill and select it. Set the color to white, lower its Opacity to 25%, change the Blending Mode to Overlay, and then go to Effect > Distort & Transform > Transform. Enter the attributes shown below and click OK.

new fill

Step 9

Make sure that your bottom shape stays selected and keep focusing on the Appearance panel. Add a 4 px stroke and set its color to R=92 G=59 B=28.

stroke

Step 10

Make sure that your bottom shape stays selected and keep focusing on the Appearance panel. Add a new fill and drag it to the bottom of the panel. Set the color to black, lower its Opacity to 60%, change the Blending Mode to Soft Light, and then go to Effect > Convert to Shape > Ellipse. Enter the attributes shown below, click OK, and go to Effect > Distort & Transform > Transform. Enter the settings shown in the following image and click OK.

ellipse effect

Step 11

Make sure that your bottom shape stays selected and keep focusing on the Appearance panel. Select the entire path and go to Effect > Stylize > Rounded Corners. Enter a 5 px Radius, click OK, and go to Effect > Distort & Transform > Roughen. Enter the attributes shown below and click OK.

roughen

8. How to Multiply Your Pot

Step 1

Duplicate the two shapes that make up your pot and place the copies as shown in the first image. Using the Direct Selection Tool (A), select the anchor points highlighted in the first image, and drag them to the right as shown in the second image.

Keep focusing on these copies, select only the bottom shapes, and focus on the Appearance panel. Open the Transform effect applied to the top fill and the Ellipse effect applied to the bottom fill and adjust the settings as shown below.

hotchpotch

Step 2

Create another four copies of your smaller pot, and place them as shown in the following image.

hotchpotches

9. How to Create the Background

Step 1

Using the Rectangle Tool (M), create an 860 x 510 px shape, and fill it with R=195 G=224 B=177. Make sure that this rectangle covers your entire artboard and send it to back (Shift-Control-[).

rectangle

Step 2

Open the fly-out menu from the Swatches panel and go to Open Swatch Library > Patterns > Basic Graphics > Basic Graphics_Textures.

Using the Rectangle Tool (M), create a new 860 x 510 px shape and place it on top of the existing rectangle, as shown in the following image. Fill this new shape with the USHS 22 Gravel Beach pattern, lower its Opacity to 50%, change the Blending Mode to Soft Light, and then go to Effect > Artistic > Film Grain. Enter the attributes shown below and click OK.

film grain

Step 3

Make sure that the rectangle made in the previous step is still selected and keep focusing on the Appearance panel. Add a second fill and select it. Lower its Opacity to 50% and change the Blending Mode to Overlay, and then apply the radial gradient shown below. Use the Gradient Tool (G) to stretch your gradient as shown below.

radial gradient

Congratulations! You’re Done!

Here is how it should look. I hope you’ve enjoyed this tutorial and can apply these techniques in your future projects. Don’t hesitate to share your final result in the comments section.

Feel free to adjust the final design and make it your own. You can find some great sources of inspiration at GraphicRiver, with interesting solutions to improve your design.

final product

The History of Emoticons and Emojis

Post pobrano z: The History of Emoticons and Emojis

Final product image
What You’ll Be Creating

Have you ever wondered what emoticons and emojis have in common, or how they even came to be? Well, since we love empowering our readers with knowledge, we took the time and put together this in-depth article which should break down these two modern ways of communication that have changed our lives so greatly.

From the early days of humanity, our ability
to communicate has played a key factor in completely shaping the way we as members
of the same species interact with each other, allowing us to elevate not only
our minds but also the world that we live in.

This all began when our
early ancestors figured out ways of exchanging pieces of information between
different members of a group, through a common system of symbols, signs, and eventually
words. These slowly but surely formed the tools that we now refer to as language,
which the Britannica Encyclopedia defines as:

„Language, a system of
conventional spoken or written symbols by means of which human beings, as
members of a social group and participants in its culture, express themselves.
The functions of language include communication, the expression of identity,
play, imaginative expression, and emotional release.”

As the human population started growing and covering different
geographical areas, the number of languages grew exponentially. SIL
International (originally known as the Summer Institute of Linguistics)
reported that in 2018 it identified and cataloged roughly 7,097 spoken
languages
: 2,300 in Asia alone, 2,143 in Africa, 1,306 in the Pacific, 1,060 in the
Americas, and 288 in Europe.

spoken languages around the world

Just imagine, 7,097 languages and your average person speaks roughly two or three out of all of them. So what happens when two foreigners try to engage in
the act of communication?

In 1948, Claude Elwood Shannon and Warren
Weaver
developed the Shannon-Weaver Model of Communication in which they
postulated that for a successful exchange of information to occur, a sender (the source) needs to encode a message (the information) that will then be
passed down a channel (the medium) to
the receiver which will then decode it.

shannon-weaver model of communication

Even though the model was introduced as a way of improving technical communication for telephone lines, it was later applied to all kinds of communications since it helped develop effective communication.

This all sounds pretty straightforward, but
what happens when the receiver can’t
decode the message due to the fact that
it was encoded using a different set of words, or more precisely a different language?

Well, nothing much
really, since the information simply
won’t be able to make its way across, creating what is commonly known as a language barrier, which can be a great
source of frustration.

Imagine going to your local food market
and trying to buy a few apples. Easy, right? Now let’s say that there’s only one
farmer that sells apples, and this particular person speaks another language, a
foreign one that you don’t know at all.

At first, without knowing it, you’ll open
the conversation and send your message across by telling him the number of
apples that you’d like to buy, but after a few moments you’ll notice that he
doesn’t seem to understand you.

At this point, you
could easily fix the problem by changing the encoding of your message from spoken
words to visual signs, and indicating the product and quantity using your
fingers.

Now let’s take a slightly different example, where the entire conversation takes
place outside of a face-to-face scenario, where the message is encoded using
written text, such as an instant messaging app.

We’ve all been in that situation when we’ve had a huge crush on a person, but we’ve never had the courage to let her/him know how we truly feel. We would start writing long sentences, and then quickly delete them one word at a time, since we couldn’t find the exact words, or we would be frightened of the other person’s reaction.

As with the previous example, a quick and easy solution would be to change the encoding from letters to emoticons or emojis which have a powerful impact on their own. Not only will this engage the other person into partaking in the conversation, but it will also force you to take a shot and express your feelings.

While these might not be the best examples that I could have come up with, the idea is that sometimes words, whether spoken or written, are not the best solution to a communication problem created by language
barriers or social inhibitions. Sometimes, we need to
adapt our message to the situation, and try and make it as clear and succinct as possible
using the easiest way of getting our thoughts across without losing
too much information.

Whether to express love or to communicate things like the weather or your current state of mind (sadness, happiness, etc.), symbols have become powerful means of expression that we intertwine more and more with our other ways of communication.

This is where emoticons and emojis come in play, since they allow you to adapt to almost any conversation, giving you the ability to communicate your inner emotions more quickly and easily using visual symbols that the other person can relate to.

1. Definition and Point of Origin

Most of the time, when people start thinking of emoticons or emojis, for some reason they end up portraying the same visual entity, since both of them are used with the purpose of enhancing an ongoing conversation.

While the latter is true, the two are quite distinct forms of visual representations, as we will get to see in the following moments.

1. Emoticon

The term emoticon (i-ˈmō-ti-ˌkän / plural emoticons) was created by blending together the words emotion and icon, and is commonly defined as a typographic representation composed of
punctuation marks, numbers and letters meant to illustrate a facial expression
capable of conveying emotions in a text-only medium.

example of basic emoticons

The first documented use of the modern concept
dates back to the year 1982, in a message published by computer scientist
Scott Elliott Fahlman within the bulletin boards of the Carnegie Mellon
University.

Back in the day, faculty staff and
students alike constantly created posts in which they discussed different
topics of the day.

As one would expect, many of these posts
were intended to be serious, while others were meant to be humorous. The
problem was that often the reader would fail to catch sarcastic remarks due to the nature of written language, which lacks tone
and body language.

Such was the case with
a specific post, in which during a physics riddle, one Neil Swartz mentioned a
mercury leak within one of the faculty’s elevators.

“16-Sep-82
12:09    Neil Swartz at CMU-750R     
Pigeon type question

This question does
not involve pigeons, but is similar:

There is a lit
candle in an elevator mounted on a bracket attached to  the middle of one wall (say, 2″ from the
wall).  A drop of mercury is on the floor.  The cable snaps and the
elevator falls.

What happens to the candle and the mercury?”

What happened was that other users that
read the post either hadn’t followed the entire conversation or they didn’t
catch his subtlety, so they ended up assuming that there was indeed a mercury
spill, causing a wave of terror among the other students.

Of course, Neil quickly
pointed out that people had gotten it wrong, and was the first to propose that
they use a convention where all subjects that were to be taken as jokes were
marked using a star (*).

“17-Sep-82 10:58    Neil
Swartz at CMU-750R      Elevator posts

Apparently there has been some confusion
about elevators and such.  After talking to Rudy, I have discovered that
there is no mercury spill in any of the Wean hall elevators.  Many people
seem to have taken the notice about the physics department seriously.

Maybe we should adopt
a convention of putting a star (*) in the subject field of any notice which is
to be taken as a joke.”

This started a whole debate on what symbol should be used, to which Professor Fahlman found an elegant solution by suggesting that people should
explicitly mark the posts that were not to be taken serious using the 🙂
character sequence, while using 🙁 for those that were.

“19-Sep-82
11:44    Scott E 
Fahlman 🙂

From: Scott
E  Fahlman <Fahlman at Cmu-20c>

I propose that the
following character sequence for joke markers:

🙂

Read it
sideways.  Actually, it is probably more economical to mark things that
are NOT jokes, given current trends.  For this, use

:-(“

As we now know, this convention quickly became a norm spreading out to
other universities, giving birth to what we now call emoticons.

2. Emoji

The etymology of the term emoji (ē-ˈmō-jē / plural emoji, emojis) comes from within the Japanese
language, where e stands for picture/illustration and moji for
character. An emoji is defined as a pictographic depiction of any small image,
symbol or icon used within a digital text conversation in order to express the
emotional state of the writer, enabling the writer to succinctly convey information in
a playful manner.

simple emoji example

The concept was invented back in the year 1999 by Shigetaka Kurita while working on i-mode, the early mobile internet platform of the Japanese Carrier NTT DoCoMo, which encompassed a wide variety of internet standards including web access and email.

While the system allowed the use of emails, they were limited to 250 characters, which he strongly believed could impair the users’ ability to express themselves,
since they were forced to use words in such a small message.

Kurita sought to ease the communication by conveying information in a simple, succinct manner using pictograms instead of typographic characters. Taking inspiration from marks used in weather forecasts, manga, and other sources, he designed a total of 176 icons, created on a 12 x 12 px grid that incorporated not just facial expressions, but other symbols (hearts, fist bumps, peace signs, etc.) capable of adding emotional subtext to a message.

example of original emoji icons

While the model was instantly replicated by other Japanese telecom companies, it took almost 11 years (1999–2010) for the symbols to be standardized and incorporated into Unicode, which is a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world’s writing systems.

In 2011, Apple started officially supporting emojis within iOS by adding a dedicated set of icons within its own keyboard, and it was followed by Google two years after.

With the official adoption of Unicode and the support of these two tech giants, emoji was finally going to become its own universal language.

2. Similar but Different: A Quick Comparison

Now that we have a better understanding of the two notions, let’s take a couple of moments and see what they have in common and what sets them apart.

2.1. Form

As we already pointed out, emoticons are typographical representations, meaning they are usually built using keyboard characters (punctuation marks, letters and/or numbers) that are positioned in such a way that they end up depicting a sideways facial expression or in some cases a simple real-world object.

example of building an emoticon icon

The complexity of the design is directly influenced by the person creating them and how they choose to use its different composing characters, which means that the person doesn’t necessarily have to be a designer.

complex emoticons example

Emojis, on the other hand, are characters in themselves, which means that instead of having to create them from scratch, you can simply open up your keyboard and find one that suits your needs, or copy them from another source if you’re using an application that doesn’t already have them built in.

Compared to emoticons, emojis are usually created by an experienced designer within a dedicated vector software program, using basic geometric shapes and paths that are then exported and encoded in order to be used with Unicode.

example of modern emoji

Even though many people tend to think that emojis are usually round, today we have a huge variation in terms of form, which allows designers to paint different images of the same concept.

flo emoji icon pack by graphicriver
Flo Emojis Icon Pack by GraphicRiver

Some go to such an extent that they end up anthropomorphizing simple objects or even symbols with human emotion, sometimes managing to bring a bigger emphasis to the message.

pink heart emoji icon pack
Pink Heart Emoji Icon Pack by GraphicRiver

On the other hand, if you need to create a library of emojis, but you’re not a fully fledged designer yourself, you can always head over to Envato Elements, where you can find a great selection of editable vector packs such as these that might help you out.

emoji icon pack example
Emoji Icon Pack by Envato Elements
flat design emoji set
Flat Design Emoji Set by Envato Elements

Another key difference between the two has to do with the use of colors within their different composing elements. In this regard, emoticons suffer a huge disadvantage, since they only come as flat monochromatic symbols, which is understandable if we take a look at their typographic nature.

example of use of colors with emoticons

Emojis usually come with a larger set of colors, due to their more complex nature, yellow usually being the base color used for the character’s skin tone.

While we’re not absolutely sure why, many including myself tend to believe that the design decision was inspired from Harvey Ball, who back in 1963 invented the smiley or smiley face, using out of all the possible colors yellow as the main one to represent the human face.

recreation of harvey balls original smiley face

That being said, a few slimmed-down versions called smileys were popular on older phones that used monochromatic displays. 

Now, while some might jump in and say that these were in fact emoticons, I tend to look at them as being a more primitive version of emojis that were created by converting typographic symbols into pictographic images, so kind of a bridge between the two.

example of smiley icons
Smiley Line Icons by Envato Elements

2.2. Content

As we saw at the beginning, the ability to correctly send a message across can make or break a conversation, which is why the content that’s being depicted needs to be easily understandable.

When using a specific emoticon, the sender needs to be certain that the receiver will be able to decipher its intended meaning, which can sometimes be hard to accomplish since not everybody has the same level of imagination.

This implies that both the sender and receiver need to get good at using them, which is usually done by adding the symbols to their personal lingo through the process of memorization.

example of hard to understand emoticons

Emojis, on the other hand, are designed in such a way that their idea is clearly portrayed at a first glance, which is one of the primary reasons why they’ve been adopted so rapidly.

2.4. Function

When it comes to function, both emoticons and emojis fulfill the same role of enabling users to express themselves in a manner that is more humane than regular plain text, by creating a deeper impact in the reader’s mind when it comes to understanding the intensity and direction of an emotion or attitude. 

As we’ve seen, this is accomplished through the use of lesser or more complex imagery which helps convey not only emotions, but ideas and actual intents from one user to another. By adding these type of symbols within a conversation, the user is able to increase or decrease its tone, thus influencing the other person’s mood and state of mind.

Let’s take a quick and easy example, in which we want to communicate our feelings of love for another person.

If we were to send out a simple text message saying „I love you”, the intensity of the feeling may not be perceived as intended due to the lack of other stimulants.

„I love you”

Of course, we could finish the sentence by adding an exclamation mark, which should give the words more depth and move the love meter a few lines.

„I love you!”

Now, watch what happens if we add a simple heart at the end.

„I love you❤️”

By adding a visual symbol that we are all too familiar with, our brain gets stimulated in a way that allows us to visualize the face of our loved one and experience different feelings that text alone can’t produce.

Let’s take another example in which two people are talking about their current mood and one of them responds by simply saying:

„I’m OK”

Now, if the entire scenario were taking place within a face-to-face environment, one could observe the facial expression and conclude if indeed that person is feeling okay.

If we take the same context and put it within a text-based communication environment, words alone would make it far harder to grasp the true state of the sender.

But what happens if we add a simple sad face at the end of the same sentence?

„I’m OK :(„

If the receiver is familiar with the symbol (which shouldn’t be a problem in this case), it should be easy to understand that the sender is in fact sad and engage in a series of questions aimed towards understanding the root of the problem, which should then be followed by a period of comforting.

Compared to written text, emojis are easier to decipher because their representations are less abstract, which takes away the tinkering process and produces an immediate understanding of the signified intent and language itself.

Due to this fact, emojis will always create a more profound effect than emoticons, allowing the human brain to be stimulated more profoundly.

At the end of the day, it doesn’t really matter what form you end up using, since when introduced to a conversation, both will end up enhancing it by adding substance to what would otherwise be a plain piece of text.

3. Evolution and Cultural Impact

Whether we see it or not, technology is
constantly interfering with our day-to-day lives, slowly shaping who we are and
what we choose to become, giving us new tools to overcome what was once thought
impossible.

From rocket-driven spaceships to instant messaging, the human race is on a course of re-inventing
itself in ways that our grandparents never dared to dream of, and it’s all happening
right now, right here under our very own eyes.

The way we communicate and interact with one another is in a constant state of transformation, as new vehicles of communication are introduced through technology.

That being said, I strongly believe that emoticons can and
should be perceived as the first modern digital form of expression, an attempt at a universal language in its one right, that was
created out of a need for carrying one’s emotions beyond the barrier of any language,
which is exactly what it allowed us to do.

While they haven’t changed at all over the years (which is a statement in itself of their efficiency), these little
typographic creations have enabled us to bring deeper meaning to our otherwise
tone-deaf conversations, making it easier for us to capture the true intent of the message.

Today, emoticons have seen a decrease in use, mainly due to the smaller range of feelings and real-life objects that they can convey, allowing emojis to take the helm of this digital communication revolution. 

Compared to their smaller brothers, emojis have come a long way in terms of both form and function, which can be directly attributed to the ongoing technological advancements (particularly smartphones) and the world population’s increasing access to this technology.

If, in the beginning, they only covered a specific portion of the different known cultures, today we have more and more variations added each year, from different skin tone colors to international cuisine and holidays, which results in an ever-growing glossary of symbols that can be used to create comprehensive sentences on their own.

Just imagine the number of things you can express using just a sequence of visual symbols, from I’m sad (😢) to peace (✌️) or even funny things like 📺🤣🤣🤣 without having to send out a specific set of instructions on how to read them.

Common expressions such as lolI love youI like it that were over-saturated with use have quickly been replaced with mind-pleasing symbols such as 😂, ❤️, 👍, creating a culturally understood link between the image and the concept that is being conveyed.

Now, whether or not we realize it, these forms of expression have become an intrinsic part of our ways of communication, as professor Vyvyan Evans pointed out, surpassing the reach of most common languages and demonstrating their global accessibility and function.

The simple fact that we can send a 😍 to any person on the planet, and they immediately understand it for what it is, demonstrates the impact that this visual form of representation has on culture, by creating bridges where previously language barriers did not permit them.

Going beyond that, emojis have become intermediaries for both one’s self-identity and a broader, cultural identity due to the fact that they depict real-life objects, traits and values that people can identify with, which are reflected within their use.

For example, people who are extremely friendly and socially confident might be inclined to overuse positive, outgoing emojis such as kisses (😚), hugs (🤗), fist bumps (👊), etc.

On the other hand, people who are tend to shy away from social interaction might tend to use more reserved symbols such as 🙄,  😀, 👍.

By simply observing people’s patterns, you can start forming an idea of their personalities, which is something that regular text can’t facilitate to the same extent.

On the other hand, emojis can also provide a digital mask, an ego pumper where a person can become something entirely different, thus enabling both positive and negative behaviors.

At this point, I could go on listing new notions and observations, but I won’t since I’m pretty confident I’ve proved my point. Whether we like it or not, emojis are going to continue shaping our ways of communication, transforming both our interactions with one another and our identities.

4. The Future

When it comes to the future, these days it’s kind of hard to make an accurate prediction, since things are changing at an alarming rate due to different factors from technological breakthroughs to cultural awareness, trends, and fads.

Considering their current state, I tend to believe that emojis are here to stay, but their form and ability to convey information will probably change a lot during the upcoming years, which is clearly suggested by the appearance of Apple’s animoji.

If you don’t know what animojis are, well they’re a new breed of emojis that are capable of imitating a person’s facial expression through the use of powerful face tracking technology.

While I personally haven’t used the feature, I’m amazed at the level of craftsmanship that has been put into it, and I’m looking forward to seeing how people will go about adopting it in the near future.

Emoticons, on the other hand, will probably end up being faded out and completely replaced by emoji in a similar way that older phones took the typographic characters entered by the user and automatically converted them to smileys. You’ll either won’t use them at all, or the app/tool will immediately convert them to similar thought-provoking emojis when used.

Conclusion

While this article started out as a simple guide to what emoticons and emoji are, it slowly but surely ended up becoming a scientific exploration that tries (and for the bigger part of it succeeds) to bring substance to these two visual forms of expression.

That being said, I hope that after reading the piece you’ve managed to expand your knowledge on the subject and most importantly had fun while doing so.

Want to Learn More?!

So, we’ve talked about emojis, but how about taking a stab at creating one? Well, in hopes that we’ve piqued your interest, we’ve set out and hand-picked a collection of in-depth tutorials that will help you create your own sets:

Render Children in React Using Fragment or Array Components

Post pobrano z: Render Children in React Using Fragment or Array Components

What comes to your mind when React 16 comes up? Context? Error Boundary? Those are on point. React 16 came with those goodies and much more, but In this post, we’ll be looking at the rendering power it also introduced — namely, the ability to render children using Fragments and Array Components.

These are new and really exciting concepts that came out of the React 16 release, so let’s look at them closer and get to know them.

Fragments

It used to be that React components could only return a single element. If you have ever tried to return more than one element, you know that you’ll will be greeted with this error: Syntax error: Adjacent JSX elements must be wrapped in an enclosing tag. The way out of that is to make use of a wrapper div or span element that acts as the enclosing tag.

So instead of doing this:

class Countries extends React.Component {
  render() {
    return (
      <li>Canada</li>
      <li>Australia</li>
      <li>Norway</li>
      <li>Mexico</li>
    )
  }
}

…you have to add either an ol or ul tag as a wrapper on those list items:

class Countries extends React.Component {
  render() {
    return (
      <ul>
        <li>Canada</li>
        <li>Australia</li>
        <li>Norway</li>
        <li>Mexico</li>
      </ul>
    )
  }
}

Most times, this may not be the initial design you had for the application, but you are left with no choice but to compromise on this ground.

React 16 solves this with Fragments. This new features allows you to wrap a list of children without adding an extra node. So, instead of adding an additional element as a wrapper like we did in the last example, we can throw <React.Fragment> in there to do the job:

class Countries extends React.Component {
  render() {
    return (
      <React.Fragment>
        <li>Canada</li>
        <li>Australia</li>
        <li>Norway</li>
        <li>Mexico</li>
      </React.Fragment>
    )
  }
}

You may think that doesn’t make much difference. But, imagine a situation where you have a component that lists different items such as fruits and other things. These items are all components, and if you are making use of old React versions, the items in these individual components will have to be wrapped in an enclosing tag. Now, however, you can make use of fragments and do away with that unnecessary markup.

Here’s a sample of what I mean:

class Items extends React.Component {
  render() {
    return (
      <React.Fragment>
        <Fruit />
        <Beverages />
        <Drinks />
      </React.Fragment>
    )
  }
}

We have three child components inside of the fragment and can now create a component for the container that wraps it. This is much more in line with being able to create components out of everything and being able to compile code with less cruft.

Fragment Shorthand

There is a shorthand syntax when working with Fragments, which you can use. Staying true to its fragment nature, the syntax is like a fragment itself, leaving only only empty brackets behind.

Going back to our last example:

class Fruit extends React.Component {
  render() {
    return (
      <>
        <li>Apple</li>
        <li>Orange</li>
        <li>Blueberry</li>
        <li>Cherry</li>
      </>
    )
  }
}

Question: Is a fragment better than a container div?

You may be looking for a good reason to use Fragments instead of the container div you have always been using. Dan Abramov answered the question on StackOverflow. To summarize:

  1. It’s a tiny bit faster and has less memory usage (no need to create an extra DOM node). This only has a real benefit on very large and/or deep trees, but application performance often suffers from death by a thousand cuts. This is one less cut.
  2. Some CSS mechanisms like flexbox and grid have a special parent-child relationship, and adding divs in the middle makes it harder to maintain the design while extracting logical components.
  3. The DOM inspector is less cluttered.

Keys in Fragments

When mapping a list of items, you still need to make use of keys the same way as before. For example, let’s say we want to pass a list of items as props from a parent component to a child component. In the child component, we want to map through the list of items we have and output each item as a separate entity. Here’s how that looks:

const preload = {
  "data" : [
    {
      "name": "Reactjs",
      "url": "https://reactjs.org",
      "description": "A JavaScript library for building user interfaces",
    },
    {
      "name": "Vuejs",
      "url": "https://vuejs.org",
      "description": "The Progressive JavaScript Framework",
    },
    {
      "name": "Emberjs",
      "url": "https://www.emberjs.com",
      "description": "Ember.js is an open-source JavaScript web framework, based on the Model–view–viewmodel pattern"
    }
  ]
}

const Frameworks = (props) => {
  return (
    <React.Fragment>
      {props.items.data.map(item => (
        <React.Fragment key={item.id}>
          <h2>{item.name}</h2>
          <p>{item.url}</p>
          <p>{item.description}</p>
        </React.Fragment>
      ))}
    </React.Fragment>
  )
}

const App = () => {
  return (
    <Frameworks items={preload} />
  )
}

See the Pen React Fragment Pen by Kingsley Silas Chijioke (@kinsomicrote) on CodePen.

You can see that now, in this case, we are not making use of any divs in the Frameworks component. That’s the key difference!

Render Children Using an Array of Components

The second specific thing that came out of React 16 we want to look at is the ability to render multiple children using an array of components. This is a clear timesaver because it allows us to cram as many into a render instead of having to do it one-by-one.

Here is an example:

class Frameworks extends React.Component {
  render () {
    return (
      [
        <p>JavaScript:</p>
        <li>React</li>,
        <li>Vuejs</li>,
        <li>Angular</li>
      ]
    )
  }
}

You can also do the same with a stateless functional component:

const Frontend = () => {
  return [
    <h3>Front-End:</h3>,
    <li>Reactjs</li>,
    <li>Vuejs</li>
  ]
}

const Backend = () => {
  return [
    <h3>Back-End:</h3>,
    <li>Express</li>,
    <li>Restify</li>
  ]
}

const App = () => {
  return [
    <h2>JavaScript Tools</h2>,
    <Frontend />,
    <Backend />
  ]
}

See the Pen React Fragment 2 Pen by Kingsley Silas Chijioke (@kinsomicrote) on CodePen.

Conclusion

Like the Context API and Error Boundary feature that were introduced in React 16, rendering children components with Fragment and multiples of them with Array Components are two more awesome features you can start making use of as you build your application.

Have you started using these in a project? Let me know how in the comments so we can compare notes. 🙂

The post Render Children in React Using Fragment or Array Components appeared first on CSS-Tricks.

What to follow when designing a one-page website

Post pobrano z: What to follow when designing a one-page website

Are one-page websites effective?  Due to their lack of complexity, one-page websites are often dismissed by designers.  However, they can often provide an effective solution to many.

This article aims to explore when a single paged website would be helpful, and how to go about constructing one…

When would a single page website be helpful?

If you’re wondering whether to build a single page site, have a look at your content.  Is your content limited to a single topic?  Do you have only a few chunks of information which can be placed on a single page?

Diluting your content simply so that it will fit on a single page is not always a great solution.  If you have a great deal of content, in different topics, and if this content could span multiple pages, then a single page website may not be for you.

If your content is short and to the point, a single page site would be helpful.  Single page sites are also very useful if content flows into a single narrative or story which would suit a single page.

If you’re starting out small and only wish to share a small amount of information, a single page site would suit you.  You can always build or add onto your site later on.

Single sites are also a great opportunity for people who need a website to be online while a fuller site is being developed.

A single page site is a great addition to social media profiles such as a Facebook page or Instagram account, and these accounts are providing great traffic to your site.

You are not using content or SEO to attract visitors or new clients.

What about SEO strategies?

SEO uses content to attract visitors to your site.  Search engines rank sites with particular keywords as more valuable.  As a result, many websites use SEO techniques such as keywords or questions in order to achieve a higher ranking with Google.

A single page site doesn’t have a high amount of content.  This means there is not a great deal of information to offer search engines and the site might not rank as highly.  However, using a single page site doesn’t mean you won’t be able to use some SEO principles.

You can still ask questions which apply to your services or product and use keywords in your copy.  These basic SEO principles and techniques will still assist you while setting up your site.

What about parallax scrolling?

Parallax scrolling is a website technique which shows the foreground of the site moving more rapidly than the background, as a user scrolls down the site.  This technique helps to create a 3D effect.

Many designers prefer not to use parallax scrolling in site design, believing that although attractive, it does not improve the user experience.

Sometimes the arguments about whether to create a one-page site and whether to use parallax scrolling have combined, and designers speak out about one-page sites because they dislike parallax scrolling.

Parallax scrolling does not have to be a part of a one-page website though.

When should you consider creating a one-page site?

If your site has information that could be condensed into a single page, with contact details placed at the top or bottom of the site, a single page might be ideal.  This may give coherence to your content while keeping your site fresh and modern.

When content is sparse, a single page site can make your content seem more complete.

If your site would be very simple and efficient to use as a single page, it is worth making use of this design.  This will keep your site easy to use for viewers while presenting everything you need to share.

Add navigation links to your site

Your viewers may be able to access all of your content by simply scrolling, but it wouldn’t harm your site to add extra navigation links.  If you have a long page, adding navigation links to the various sections or elements of your site will keep it easy to read.

Try to add these on the top of your page, near your logo design. Your users need to find these links easily.

Use headings and subheadings to divide up your content

Large masses of content can feel difficult for your reader.  Internet users prefer to take in information at a glance.  By using headings and subheadings, your reader will be able to grasp the contents of your site quickly.

Subheadings allow your reader to choose what to read and the sections which appear most interesting.

Make use of imagery

A single site will often have a large amount of white space.  If you’re only using a single page for your website, emotionally resonant and relevant imagery will add interest to your page.

They will also assist you to divide up your content.  Effective imagery will, therefore, assist you to add appeal to your site.

Create a hierarchy

Internet users like their information to be concise and easy to read.  When creating a site, your headings will help your reader to understand your content.  You will also want to structure your site so that your reader is most likely to read important content first.

When constructing your site, keep your most important information at the top of your page.  Interested readers can scroll down and read more if they want to.

Use multimedia to add impact

Although many site holders will tell you that content is king, we also know that pictures speak a thousand words.  Over 65% of people are visual learners.  This is why illustrations, photographs or images are a very effective way to share a message.

Images produce an emotional resonance in viewers, and they will break up your text, helping you to hold your viewer’s interest.  Images are able to give a message clearly without demanding an awful lot of your viewers.

You can use photos, videos or slideshows on your site.

Images:  create visual impact.  If you are creating a one-page website, adding images which resonate with your viewer will enhance your site.  Keep your images relevant, high quality and eye-catching.

An emotionally resonant image will assist your viewer to identify with your brand and keep viewers on your site.  If you take high quality, professional looking photos, you can use these to communicate with your viewers.  Alternatively, there is a range of royalty-free stock images available for use.

Look for stock images which are uncommon in order to make the greatest impact on viewers.

Slideshows:  Photos or illustrations can be combined in the form of a slideshow, which can be used to tell a visual story.  Slideshows can often share complex messages with ease.

Videos:  site viewers deeply appreciate videos.  These videos can be used to share messages which keep viewers engaged.  Videos make a great feature, keeping viewers engaged.

In fact, research shows that viewers spend 100% more time on websites which offer videos as a part of their content.

Keep your calls to action clear and visible

Your call to action is a clear message to guide your viewer into taking action.  Without a clear call to action, your visitors will not know where to go or what to do next.  This is as true with single page sites as it is with complex and intricate ones.

In order for your call to action to be effective, it needs to be persuasive.  This may mean receiving a free offer or coupon when you subscribe to a site or knowing exactly how to place a purchase in your shopping cart.

Keep your call to action clearly visible, use colour to help it to stand out from the rest of your site, and make sure that it is not surrounded by too much information.

When you half close your eyes, your call to action should be the first thing you can see on your site.

Summary

Although websites are often appreciated for their intricacy and ability to convey information, a single page site can be equally effective.  Although single page sites may hold less content, they make an excellent choice for many businesses.

Weigh up the value of creating a single page site for your business.  It may just be the option you need to get your message across.

Agregator najlepszych postów o designie, webdesignie, cssie i Internecie