Post pobrano z: Do you have what it takes to become a SEO Hero?
Wix, the website building company, is giving away $50,000 to any website designer who can beat them at their own SEO game. They’re running a competition, called the Wix SEO Hero Contest, and inviting anyone who wants to take a stab at both honing their SEO skills and possibly earning $50,000 in the process to […]
Wszystkie wpisy, których autorem jest admin
Introduction to Web Audio API
Post pobrano z: Introduction to Web Audio API
Web Audio API let’s us make sound right in the browser. It makes your sites, apps, and games more fun and engaging. You can even build music-specific applications like drum machines and synthesizers. In this article, we’ll learn about working with the Web Audio API by building some fun and simple projects.
Getting Started
Let’s do some terminology. All audio operations in Web Audio API are handled inside an audio context. Each basic audio operation is performed with audio nodes that are chained together, forming an audio routing graph. Before playing any sound, you’ll need to create this audio context. It is very similar to how we would create a context to draw inside with the <canvas> element. Here’s how we create an audio context:
var context = new (window.AudioContext || window.webkitAudioContext)();
Safari requires a webkit prefix to support AudioContext, so you should use that line instead of new AudioContext();
Normally the Web Audio API workflow looks like this:
create source -> connect filter nodes -> connect to destination” />There are three types of sources:
- Oscillator – mathematically computed sounds
- Audio Samples – from audio/video files
- Audio Stream – audio from webcam or microphone
Let’s start with the oscillator
An oscillator is a repeating waveform. It has a frequency and peak amplitude. One of the most important features of the oscillator, aside from its frequency and amplitude, is the shape of its waveform. The four most commonly used oscillator waveforms are sine, triangle, square, and sawtooth.

It is also possible to create custom shapes. Different shapes are suitable for different synthesis techniques and they produce different sounds, from smooth to harsh.
The Web Audio API uses OscillatorNode to represent the repeating waveform. We can use all of the above shown waveform shapes. To do so, we have to assign the value property like so:
OscillatorNode.type = 'sine'|'square'|'triangle'|'sawtooth';
You can create a custom waveform as well. You use the setPeriodicWave() method to create the shape for the wave, that will automatically set the type to custom. Let’s listen how different waveforms produce different sounds:
Custom waveforms are created using Fourier Transforms. If you want to learn more about custom waveform shapes (like how to make a police siren, for example) you can learn it from this good resource.
Running the oscillator
Let’s try to make some noise. Here’s what we need for that:
- We have to create a Web Audio API context
- Create the oscillator node inside that context
- Choose waveform type
- Set frequency
- Connect oscillator to the destination
- Start the oscillator
Let’s convert those steps into code.
var context = new (window.AudioContext || window.webkitAudioContext)();
var oscillator = context.createOscillator();
oscillator.type = 'sine';
oscillator.frequency.value = 440;
oscillator.connect(context.destination);
oscillator.start();
Note how we define the audio context. Safari requires the webkit prefix, so we make it cross-browser compatible.
Then we create the oscillator and set the type of the waveform. The default value for type is sine, so you can skip this line, I just like to add it to make it more clear and easy to update. We set the frequency value to 440, which is the A4 note (which is also the default value). The frequencies of musical notes C0 to B8 are in the range of 16.35 to 7902.13Hz. We will check out an example where we play a lot of different notes later in this article.
Now when we know all of that, let’s make the volume adjustable as well. For that we need to create the gain node inside of the context, connect it to the chain, and connect gain to the destination.
var gain = context.createGain();
oscillator.connect(gain);
gain.connect(context.destination);
var now = context.currentTime;
gain.gain.setValueAtTime(1, now);
gain.gain.exponentialRampToValueAtTime(0.001, now + 0.5);
oscillator.start(now);
oscillator.stop(now + 0.5);
Now you have some knowledge of working with the oscillator, here’s a good exercise. This Pen has the oscillator code setup. Try to make a simple app that changes the volume when you move the cursor up and down your screen, and changes the frequency when you move the cursor left and right.
Timing of Web Audio API
One of the most important things in building audio software is managing time. For the precision needed here, using the JavaScript clock is not the best practice, because it’s simply not precise enough. However the Web Audio API comes with the currentTime property, which is an increasing double hardware timestamp, which can be used for scheduling audio playback. It starts at 0 when the audio context is declared. Try running console.log(context.currentTime) to see the timestamp.
For example, if you want the Oscillator to play immediately you should run oscillator.start(0) (you can omit the 0, because it’s the default value). However you may want it to start in one second from now, play for two seconds, then stop. Here’s how to do that:
var now = context.currentTime;
oscillator.play(now + 1);
oscillator.stop(now + 3);
There are two methods to touch on here.
The AudioParam.setValueAtTime(value, startTime) method schedules change of the value at the precise time. For example, you want to change frequency value of the oscillator in one second:
oscillator.frequency.setValueAtTime(261.6, context.currentTime + 1);
However, you also use it when you want to instantly update the value, like .setValueAtTime(value, context.currentTime). You can set the value by modifying the value property of the AudioParam, but any updates to the value are ignored without throwing an exception if they happen at the same moment as the automation events (events scheduled using AudioParam methods).
The AudioParam.exponentialRampToValueAtTime(value, endTime) method schedules gradual change of the value. This code will exponentially decrease the volume of the oscillator in one second, which is a good way to stop sound smoothly:
gain.gain.exponentialRampToValueAtTime(0.001, context.currentTime + 1);
We can’t use 0 as the value because the value needs to be positive, so we use a very small value instead.
Creating the Sound class
Once you stop an oscillator, you cannot start it again. You didn’t do anything wrong, it’s the feature of the Web Audio API that optimizes the performance. What we can do is to create a sound class that will be responsible from creating oscillator nodes, and play and stop sounds. That way we’ll be able to call the sound multiple times. I’m going to use ES6 syntax for this one:
class Sound {
constructor(context) {
this.context = context;
}
init() {
this.oscillator = this.context.createOscillator();
this.gainNode = this.context.createGain();
this.oscillator.connect(this.gainNode);
this.gainNode.connect(this.context.destination);
this.oscillator.type = 'sine';
}
play(value, time) {
this.init();
this.oscillator.frequency.value = value;
this.gainNode.gain.setValueAtTime(1, this.context.currentTime);
this.oscillator.start(time);
this.stop(time);
}
stop(time) {
this.gainNode.gain.exponentialRampToValueAtTime(0.001, time + 1);
this.oscillator.stop(time + 1);
}
}
We pass the context to the constructor, so we can create all of the instances of the Sound class within same context. Then we have the init method, that creates the oscillator and all of the necessary filter nodes, connects them, etc. The Play method accepts the value (the frequency in hertz of the note it’s going to play) and the time when it shall be played. But first, it creates the oscillator, and that happens every time we call the play method. The stop method exponentially decreases the volume in one second until it stops the oscillator completely. So whenever we need to play the sound again, we create a new instance of the sound class and call the play method. Now we can play some notes:
let context = new (window.AudioContext || window.webkitAudioContext)();
let note = new Sound(context);
let now = context.currentTime;
note.play(261.63, now);
note.play(293.66, now + 0.5);
note.play(329.63, now + 1);
note.play(349.23, now + 1.5);
note.play(392.00, now + 2);
note.play(440.00, now + 2.5);
note.play(493.88, now + 3);
note.play(523.25, now + 3.5);
That will play C D E F G A B C, all within the same context. If you want to know the frequencies of notes in hertz, you can find them here.
Knowing all of this makes us able to build something like a xylophone! It creates a new instance of Sound and plays it on mouseenter. You can check the example and try make one by yourself as an exercise.
See the Pen Play the Xylophone (Web Audio API) by Greg Hovanesyan (@gregh) on CodePen.
I’ve created a playground, containing all the required HTML and CSS, and the Sound class we’ve created. Use the data-frequency attribute to obtain the note values. Try here.
Working with a recorded sound
Now that you’ve built something with an oscillator, let’s now see how to work with a recorded sound. Some sounds are very hard to reproduce using the oscillator. In order to use realistic sounds in many cases, you’ll have to use recorded sounds. This can be `.mp3`, `.ogg`, `.wav`, etc. See the full list for more info. I like to use `.mp3` as it’s lightweight, widely supported, and has pretty good sound quality.
You can’t simply get sound by a URL like you do with images. We have to run an XMLHttpRequest to get the files, decode the data, and put into the buffer.
class Buffer {
constructor(context, urls) {
this.context = context;
this.urls = urls;
this.buffer = [];
}
loadSound(url, index) {
let request = new XMLHttpRequest();
request.open('get', url, true);
request.responseType = 'arraybuffer';
let thisBuffer = this;
request.onload = function() {
thisBuffer.context.decodeAudioData(request.response, function(buffer) {
thisBuffer.buffer[index] = buffer;
updateProgress(thisBuffer.urls.length);
if(index == thisBuffer.urls.length-1) {
thisBuffer.loaded();
}
});
};
request.send();
};
loadAll() {
this.urls.forEach((url, index) => {
this.loadSound(url, index);
})
}
loaded() {
// what happens when all the files are loaded
}
getSoundByIndex(index) {
return this.buffer[index];
}
}
Let’s take a look at the constructor. We receive our context there as we did in the Sound class, receive the list of URLa that will be loaded, and an empty array for the buffer.
The we have two methods: loadSound and loadAll. loadAll loops through the list of URLs and calls the loadSound method. It’s important to pass the index, so that we put the buffered sound into the correct element of the array, regardless of which request loads first. This also let’s us see which request is the last, which means that on its completion the buffer is loaded.
Then you can call the loaded() method, which can do something like hiding the loading indicator. And finally the getSoundByIndex(index) method gets the sound from the buffer by index for playback.
The decodeAudioData method has a newer Promise-based syntax, but it doesn’t work in Safari yet:
context.decodeAudioData(audioData).then(function(decodedData) {
// use the decoded data here
});
Then we have to create the class for the sound. Now we have our complete class to work with the recorded sound:
class Sound() {
constructor(context, buffer) {
this.context = context;
this.buffer = buffer;
}
init() {
this.gainNode = this.context.createGain();
this.source = this.context.createBufferSource();
this.source.buffer = this.buffer;
this.source.connect(this.gainNode);
this.gainNode.connect(this.context.destination);
}
play() {
this.setup();
this.source.start(this.context.currentTime);
}
stop() {
this.gainNode.gain.exponentialRampToValueAtTime(0.001, this.context.currentTime + 0.5);
this.source.stop(this.context.currentTime + 0.5);
}
}
The constructor accepts the context and the buffer. We create by calling createBufferSource() method, instead of createOscillator as we did before. The buffer is the note (element from the buffer array) that we get using the getSoundByIndex() method. Now instead of the oscillator we create a buffer source, set the buffer, and then connect it to the destination (or gain and other filters).
let buffer = new Buffer(context, sounds);
buffer.loadAll();
sound = new Sound(context, buffer.getSoundByIndex(id));
sound.play();
Now we have to create an instance of buffer and call the loadAll method, to load all of the sounds into the buffer. We also have the getSoundById method to grab the exact sound we need, so we pass the sound to the Sound and call play(). The id can be stored as a data attribute on the button that you click to play the sound.
Here’s a project that uses all of that: the buffer, the recorded notes, etc:
See the Pen The Bluesman – You Can Play The Blues (Web Audio API) by Greg Hovanesyan (@gregh) on CodePen.
You can use that example for for reference, but for your own exercise, here’s a playground I’ve created. It has all the necessary HTML and CSS and the URLs to the notes that I have recorded on a real electric guitar. Try writing your own code!
Intro to Filters
The Web Audio API lets you add different filter nodes between your sound source and destination. BiquadFilterNode is a simple low-order filter which gives you control over what parts of the frequency parts shall be emphasized and which parts shall be attenuated. This lets you build equalizer apps and other effects. There are 8 types of biquad filters: highpass, lowpass, bandpass, lowshelf, highshelf, peaking, notch, and allpass.
Highpass is a filter that passes higher frequencies well, but attenuates lower frequency components of signals. Lowpass passes lower frequencies, but attenuates higher frequencies. They are also called „low cut” and „high cut” filters, because that explains what what happens to the signal.
Highshelf and Lowshelf are filters are used to control the bass and treble of the sound. They are used to emphasize or reduce signals above or below the given frequency.
You will find a Q property BiquadFilterNode interface, which is a double representing the Q Factor. Quality Factor or Q Factor control the bandwidth, the number of frequencies that are affected. The lower the Q factor, the wider the bandwidth, meaning the more frequencies will be affected. The higher the Q factor, that narrower the bandwidth.
You can find more info about filters here, but we can already build a parametric equalizer. It’s an equalizer that gives full control for adjusting the frequency, bandwidth and gain.
Let’s build a parametric equalizer.
Let’s take a look on how we can apply distortion to the sound. If you wonder what makes an electric guitar sound like one, it is the distortion effect. We use the WaveShaperNode interface to represent a non-linear distorter. What we need to do is to create a curve that will shape the signal, distorting and producing the characteristic sound. We don’t have to spend a lot of time to create the curve, as it’s already done for us. We can adjust the amount of distortion as well:
Afterword
Now that you’ve seen how to work with the Web Audio API, I recommend playing with it on your own and making your own projects!
Here are some libraries for working with web audio:
- Pizzicato.js – Pizzicato aims to simplify the way you create and manipulate sounds via the Web Audio API
- webaudiox.js – webaudiox.js is a bunch of helpers that will make working with the WebAudio API easier
- howler.js – Javascript audio library for the modern web
- WAD – Use the HTML5 Web Audio API for dynamic sound synthesis. It’s like jQuery for your ears
- Tone.js – A Web Audio framework for making interactive music in the browser
Introduction to Web Audio API is a post from CSS-Tricks
Weapons of Math Destruction
Post pobrano z: Weapons of Math Destruction
I think you’d do well to read Cathy O’Neils Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy. I saw her read at the Miami Book Fair several months ago and immediately bought a copy. I even got her to sign it which is kinda cool 😉
Cathy’s big idea is that we’re absolutely surrounded by algorithms that inform big decision making. There are lots of good algorithms that help us. Sadly, there are lots of insidiously, dangerous, bad algorithms that do serious damage, and they are lurking all about disguised as good algorithms.

One aspect of a good algorithm is some kind of feedback and correctional system. Early on Cathy points to some advertising algorithms as an example of a healthy algorithm. For example, if an algorithm is in place to recommend a product you should buy, and it does a terrible job at that, it will be tweaked until fixed, thereby correcting what is has set out to do. Moneyball-style algorithms are the same. The data is open. Baseball team managers use algorithms to help recruit for their team and manage how they play. If it isn’t working, it will be tweaked until it does.
A bad algorithm might lack a feedback loop. One of her strongest examples is in the algorithms that rate teachers. There is plenty of evidence that these algorithms are often wrong, ousting teachers that definitely should not have been. And not in a „they tested badly, but have a heart of gold” way, in a „the algorithm was actually just wrong” way. What makes something like this a „weapon of math destruction” (WMD) then, is the fact that it affects a lot of people, screws up, and there is no correction mechanism. There are lots of interesting criteria, though. I’ll let you read more about it.
There is an awful lot of considerations and nuance here, and I think Cathy delivers pretty gracefully on all that. She has an impressive pedigree academically, professionally, and journalistically. There is some pitchfork raising here, but the prongs are made of research, data, and morals.
Weapons of Math Destruction is a post from CSS-Tricks
Just Another HTTPS Nudge
Post pobrano z: Just Another HTTPS Nudge
I was strongly reminded about the scariness of non-secure websites the other day.
I’m using Xfinity as an internet service provider, and they give you a device that is both a cable modem and a router.
Here’s a tiny bit of backstory. I use a VPN, and I discovered that in using their modem directly, the VPN wouldn’t work. I’m not sure why. I didn’t dig into it very far, because I have a modem of my own I’d prefer to use. So I plugged that in, which worked… but not particularly well. The connection was spotty and slow, even right in my own house.
I think (maybe?) it was competing WiFi signals from the two routers sitting right next to each other. Don’t quote me on that. The reason I think that is because, fortunately, I was able to turn off the router on the Xfinity device, and that solved the problem. Thde speed and connectivity was back. To their credit, it was really fast. The Xfinity device has a featured called „Bridge Mode” that is specifically for turning off the router so that you can use your own. I was able to enable that, use my own router, get the speed back, and connect to the VPN.
Win! That lasted for a few months. Then recently there was some weird big internet outage in our area. Xfinity notified us about it. They had to push some updates or something to our device, and that broke everything again. I struggled with it for days, but what ultimately worked was turning off Bridge Mode, and turning it back on again (isn’t it always?).
In those in-between days, the only thing I could figure out to get online was to connect to the SSID „xfinitywifi” that this router seemed to be emitting. This „xfinity” network is unusual because it behaves kinda like a coffee shop or university hotspot in that it pops up that weird browser modal and you have to log in with your (Xfinity) credentials. It’s a value-add kinda thing for their service. Their routers are dotted all over the place, so if you’re a customer of theirs, you get internet („for free”) a lot of places. My fiance was at the doctor the other day, and she was using it there.
If that’s the network you’re connected to, Xfinity performs man-in-the-middle attacks on websites to send you messages. Here’s an example of me just looking at a (non-secure) website:

Man-in-the-middle, meaning, this website had no such popup in its code. Xfinity intercepted the request, saw it was a website, and forcefully injected its own code into the site. In this case, to advertise an app and to tell you about security. Ooozing with irony, that.
If they can do that, imagine what else they can do. (Highly recommended listening: ShopTalk #250) They could get even more forceful with advertising. Swap out existing advertising with their own. Install a keylogger. Report back information about what you’re doing and where you are. You might not even know if anything is happening at all.
This might seem a little tin foil hatish, but realize: they’ve already been incentivized to do this. All the incentive is there to keep milking value out of this superpower they have.
Some good news: Individual websites can stop this with HTTPS. That’s a massively good step. With HTTPS, the traffic packets are encrypted and Xfinity can’t read or manipulate them effectively. Through metadata, they might be able to guess what they are (e.g. know you’re streaming a video and throttle speed), but there isn’t much else they can do.
It’s not just this one indiscretion, Xfinity also uses this tactic to send you other messages.
@chriscoyier @XFINITY also how they warn you about bandwidth or billing issues. not fun.
— David Bisset (@dimensionmedia) February 24, 2017
@chriscoyier @XFINITY I have seen an ISP adding ads to bing home page. 😕
— AKT (@itsakt) February 25, 2017
It’s this double whammy of scary:
- Seriously?! You require me to have a box in my house that broadcasts a public WiFi hotspot
that I can’t turn off?You’re automatically opted into it, but you can turn it off. - Seriously?! You use that hotspot to perform man-in-the-middle attacks on anybody using it?
I’m sure it’s not just Xfinity, it’s just that’s what I’m using now and have now seen it with my own eyes. To be clear, I’m sure I signed something that allows them to do everything they are doing and I don’t think anything they are doing is technically illegal (again, don’t quote me on that).
Being upset at them, and telling them about it, is a good step. Fighting back is another. Internet access is vital, so you have to use something, but if you have an option, is there an ISP that doesn’t do this available to you? Use them. Money talks.
Again, HTTPS solves this on a per-website basis. Jeff Atwood sums this up pretty well:
You have an unalienable right to privacy, both in the real world and online. And without HTTPS you have zero online privacy – from anyone else on your WiFi, from your network provider, from website operators, from large companies, from the government.
The performance penalty of HTTPS is gone, in fact, HTTPS arguably performs better than HTTP on modern devices.
Using HTTPS means nobody can tamper with the content in your web browser. This was a bit of an abstract concern five years ago, but these days, there are more and more instances of upstream providers actively mucking with the data that passes through their pipes. For example, if Comcast detects you have a copyright strike, they’ll insert banners into your web content … all your web content! And that’s what the good guy scenario looks like – or at least a corporation trying to follow the rules. Imagine what it looks like when someone, or some large company, decides the rules don’t apply to them?
The move to HTTPS is non-trivial, and introduces somewhat complicated dependencies. It’s easy to forget to renew your certificate and break your entire website just like that. I’m not arguing against HTTPS (exactly the opposite), but you should know that it requires some upfront work and some diligent maintenance.
If you’re on WordPress like me, I wrote up how I moved to all-HTTPS going on two years ago. It involved a little database work even, getting URL’s pointing to the right places.
SSL certificates (the main prerequisite for HTTPS) also have traditionally cost money. No more! Let’s Encrypt is here:
Lets Encrypt is a free, automated, and open Certificate Authority.
There is an in-progress WordPress plugin for it. Let’s hope that gets off the ground. Just a few days ago I used the Let’s Encrypt Plesk extention to put HTTPS on ShopTalk’s website and it took me like 5 minutes. I’ll have to write that up soon.
Also check out the really excellent Moving To HTTPS Guide:
A community site to help site owners migrate to HTTPS with a simple tested process. Allowing you to filter the plan based on multiple platforms (WordPress, Magento, and more), hosting environments (cPanel, Apache, and more) along with the level of control / access you have over the site.

Just Another HTTPS Nudge is a post from CSS-Tricks
Majorette Events
Post pobrano z: Majorette Events![]()
Veintidos Grados
Post pobrano z: Veintidos Grados![]()
Ditalia
Post pobrano z: Ditalia![]()
Das Bevo
Post pobrano z: Das Bevo![]()
How to Create Diverse Women Avatars in Adobe Illustrator
Post pobrano z: How to Create Diverse Women Avatars in Adobe Illustrator

Let’s celebrate International Women’s Day by making a dedication! Follow this tutorial and let’s learn together how to design fancy women avatars.
I’ll show you how to use and transform simple geometric shapes in order to create a variety of portraits, making them as diverse as possible! We’ll be using various warp effects, the Shaper Tool, the Pathfinder panel, and other tools and functions to vary the age, nationality, complexion and style of the characters.
By the end of this tutorial, you’ll be able to create hundreds of fancy avatars by simply mixing and combining the elements of the characters that we’ll be creating here. Want to see how it works? Check out this Flat Women Avatar Constructor and try it yourself—it’s really fun!

Apart from that, you can apply these techniques to create any other type of flat avatars, vary the appearance of the character, and try out various styles of flat portraits. For example, check out these profession avatars at GraphicRiver. Feel inspired? Let’s get started!
1. How to Create a Woman With Cornrows
Step 1
Let’s start off by creating a face from a rounded rectangle. You can use either the Rounded Rectangle Tool or the Rectangle Tool (M) to make an 80 x 110 px dark-brown shape with 30 px Corner Radius.
You can find the Corners option panel in the control toolbar on top while the shape is selected with the Direct Selection Tool (A). Another way to adjust the Corners value is either to set it in the Transform panel (Window > Transform) or to do it manually by pulling the circle markers of the Live Corners of the shape with the Direct Selection Tool (A).
Make a rounded rectangle of 14 x 22 px for the nose and place it right in the center of the face. In order to make sure that we’ve centered everything perfectly, select both shapes and click the face shape once again to make it a Key Object. Click the Horizontal Align Center and—voila!—the nose is exactly where it should be.

Step 2
Take the Ellipse Tool (L) and make a 13 x 13 px dark-brown circle for the eye. Select its bottom anchor point with the Direct Selection Tool (A) and delete it by pressing the Delete key (or Backspace if you’re on Mac). Now we have this cheerful look!
Select the eye, hold down Alt-Shift, and drag it to the opposite side of the face, thus creating a copy of the second one.

Let’s work on the eyes a bit more. Use the Rectangle Tool (M) to make a 5 x 2 px shape for the eyelashes. Place it by the outer corner of the eye and align both shapes to the bottom edge. Do the same for the opposite eye.

Step 3
Let’s make another ellipse for the mouth. Create a 25 x 12 px shape and use the Scissors Tool (C) to click the left and right anchor points and split the shape apart.

Step 4
Use the Anchor Point Tool (Shift-C) to move the anchor handles, forming the upper lip.

Step 5
Make a 12 x 25 px dark-brown rounded rectangle for the ear and Send it to Back (Shift-Control-[), beneath the head.
Group (Control-G) the ears and use the Align panel to center the ears to the head, using the head shape as the Key Object.

Step 6
It’s time to add those cornrows! Grab the Rounded Rectangle Tool and form a 5 x 25 px black shape with fully rounded corners. Align the cornrow to the center of the head.
Hold Alt-Shift and drag the shape to the left, creating a copy. Move the new cornrow a few pixels down.

Step 7
Create more cornrows on the left side of the head, placing each new one a bit lower than the previous one.
Now select all the cornrows (except the very first one) and double-click the Reflect Tool (O) to open its options window. Flip the cornrows over the Vertical Axis and click the Copy button. Hold down Shift and move them to the opposite side of the head.

Step 8
Let’s move on and make a 22 x 38 px rounded rectangle for the neck. Don’t forget to vary the brightness of the elements in order to visually separate one part of the body from another as we’re working with solid colors without shadows and highlights. Pick the dark-brown color from the ears using the Eyedropper Tool (I).
Create an 85 x 105 px bright-green rectangle for the body. Make the corners rounded enough (about 37 pt) to form the shoulders.

Step 9
We can also make the cornrows longer by adding some more rounded rectangles of 5 x 55 px size and placing them at the back of the head (Shift-Control-[).
Now Group (Control-G) everything together and let’s finish off our first avatar!

Step 10
Make a 195 x 195 px blue circle for the icon base and Send to Back (Shift-Control-[). Align the character and the icon base to Horizontal Align Center, and let’s see how we can put the character inside the circle, as if inside a container.
Copy the circle and Paste in Front (Control-C > Control-F). Bring to Front (Shift-Control-]), placing the copy on top of everything. In the image below you can see a copy as a circle with black Stroke and no Fill.
Select everything, click the right mouse button, and Make Clipping Mask. There you go! Our first icon is ready. Let’s move on to the next one!

2. How to Create a Woman With Buns
Step 1
Let’s copy the character from our first avatar and modify it to create the second lady! Let’s change her skin color. Use the Select Similar Objects feature from the control panel on top to select the elements filled with the same color faster.

Step 2
Make the face more rounded by increasing the value of the Corner Radius. We can also do this by pulling the circle markers of the Live Corners with the Direct Selection Tool (A).
Now select the bottom anchor point with the Direct Selection Tool (A) and make the chin pointed by Converting selected anchor points to corner from the control panel on top. Adjust the shape of the jaw by moving both side anchor points down.

Step 3
Change the shape of the nose, by making it narrower (11 x 22 px) and more rounded. And recolor it so that it fits the overall color scheme of the face.

Step 4
Use the Ellipse Tool (L) to create a 10 x 10 px black circle and add a 12 x 4 px rounded rectangle for the eyelash to give the impression of a single-fold eyelid. Select both shapes and click the eye once again to make it a Key Object. Use the Align panel to Vertical Align Top, combining the edges of the shape.

Step 5
Let’s add some lipstick there! Make a 15 x 12 px rose-pink ellipse and delete its bottom anchor point to form the upper lip. Keeping the shape selected, double-click the Reflect Tool (O), flip the shape over the Horizontal Axis, and click Copy to create the lower lip. Make the copy slightly larger and make its Fill color lighter.
Add a horizontal stripe between the lips using the Rectangle Tool (M) and make the corners of the mouth by adding a couple of tiny circles there.

Step 6
Now let’s make a stylish haircut. Duplicate (Control-C > Control-F) the head shape and change the color of the copy to black. Keeping the shape selected, double-click the Scale Tool (S) and set the Uniform Scale value to 105% and click OK to make the copy a bit larger.
Now grab the Eraser Tool (Shift-E), hold Alt and erase the bottom part of the shape, leaving only a straight-cut fringe.

Step 7
Let’s use the Shaper Tool (Shift-N) to create a small triangle in the center of the forehead. Just draw a freehand triangle silhouette and it will automatically transform into a real vector shape.
Now select both the triangle and the hair and scribble above the triangle with the Shaper Tool (Shift-N) to cut it out. As you may notice, a black stroke from the triangle may remain on the hair. In this case, just select it and set the Stroke color to none in the Color panel.

Step 8
Let’s add some buns! Use the Rounded Rectangle Tool to make a 20 x 7 px lilac shape for the hair band.
Place a 26 x 26 px black circle on top of the band and Send to Back (Shift-Control-[).
Group the parts of the bun and rotate it about 45 degrees, attaching the bun to the head.
Use the Reflect Tool (O) to flip and copy the bun and attach it to the opposite side of the head.

Step 9
Now let’s change the color of the shirt to the same color as we have for the face and duplicate it (Control-C > Control-F). Change the color of the top copy to pink.
Create a 50 x 65 px rounded rectangle of any color on top of the body and place it as shown in the image below. Select both the new rectangle and the pink shape beneath it and use the Shaper Tool (Shift-N) to scribble above the shape that we want to cut out in order to create the neck of the shirt.

Step 10
This is how the new shirt looks!

Step 11
Let’s copy the icon base from our previous icon and place our fancy woman with buns inside. I’ve tweaked the colors a bit to make them match, changing the color of the circle to pink and the woman’s shift to lilac.
Great work! Let’s move on and create our third avatar!

3. How to Design a Cheerful Young Woman Avatar
Step 1
Let’s use the copy of our first character and change its appearance. First of all, delete the elements of the mouth and create a 35 x 25 px ellipse with dark-brown stroke and no fill. Use the Scissors Tool (C) to click both side anchor points and split the shape apart. Open the Stroke panel (Window > Stroke), and set the Weight to 3 pt, Cap to Round Cap.

Step 2
Replace the eyes with circles and add the eyelashes by creating a small rounded rectangle and rotating it 45 degrees.

Step 3
Let’s rotate the eyebrows as well, creating a cheerful and slightly surprised facial expression. Select the brow and double-click the Rotate Tool (R) to open the options panel. Set the Angle to 30 degrees and click OK.
Do the same for the opposite brow, rotating it -30 degrees.
Make the skin color lighter and add a bindi to the forehead with the Ellipse Tool (L).
Use the Live Corners function to make the face more rounded.

Step 4
How about adding some more accessories? Create a 9 x 9 px ellipse with yellow Stroke and no Fill, depicting a golden ring. Attach it to the right side of the nose and place it behind the nose by dragging the shape down in the Layers panel.

Step 5
Now we’ll draw the hair. Copy the face shape and Paste in Back (Control-C > Control-B). Fill the bottom copy with dark-brown color for the hair.
Drag the top copy (which is for the face) down a bit, making the top part of the hair visible.
Now that the chin is too low, select both copies and use the Shaper Tool (Shift-N) to scribble above the bottom part of the face in order to delete it.
And there we have it, some nice slick hair! Let’s add details to the hairdo.

Step 6
Use the Rectangle Tool (M) to add a narrow part in the center of the hair shape. Select both the hair shape and the rectangle part and scratch out the unneeded piece. Change the color of the rectangle to the same skin color as we have for the face.

Step 7
Let’s zoom out and take a look at our character. Everything looks fine at this stage; however, I’ve decided to make the parting a bit narrower. The shape is still easily editable and accessible from the Layers panel.

Step 8
Now let’s add a low ponytail to the hairdo. Here is a quick and easy way to make it from a rectangle. Create a 30 x 84 px shape on the right side of the head. Select the bottom left and the top right anchor points of the rectangle using the Direct Selection Tool (A) and pull the Live Corners marker to make both corners fully rounded.
Now we can Send the ponytail to Back (Shift-Control-[) and position it as we need.

Step 9
Let’s also change the dress of our character. Copy (Control-C) and Paste in Place (Shift-Control-V) the body shape. Change the color of the copies to skin color.
Now grab the Shaper Tool (Shift-N) and draw an upside down triangle above the body for the V-neck. Once your freehand triangle turns into a vector shape, select it together with the top body shape and use the body as the Key Object to Horizontal Align Center of both shapes.

Step 10
While both shapes are still selected, use the Shaper Tool (Shift-N) and scribble over the triangle to cut it out.
Now we can change the color of the top copy to bright orange for the dress.

Step 11
Use the copy of the circle icon base from our previous icon to replace the character inside the Clipping Mask. Change the color of the icon to green—and there we have it!
Our fashionable young woman avatar is ready!
Just a few more words before we finish…

Step 12
So, let’s take a look at all the variety of facial shapes and forms that we can create using just a rectangle. We can make the face wide and angular if we round the corners just a bit. Otherwise, we can make the face fully rounded by setting the Corner Radius to its maximum.
We can also vary the shape of the chin by making it less or more pointed. Moreover, we can change the shape of the jaw by changing the position of the side anchor points of the shape.
We can also edit the top and bottom parts of the face separately from each other, making the head shape look even more interesting. If we take a look at the bottom example, the forehead is far more rounded than the jaw.
And this is just a small part of all the variations that we can build from one shape. There are round faces, oval faces, square, triangular… Use your imagination and photo references, or look at the people around you to see how really different they are!

Step 13
The last but not the least thing I want to mention here is the age of the characters. We can easily depict women of different generations by just adding such minor details as wrinkles.
Use the Arc Tool (or the Pen Tool (P) or the Pencil Tool (N) if you find it more comfortable to work with) to make some tiny arched lines for the eyes, the corners of the mouth and the chin. Vary the Weight in the Stroke panel to make the wrinkles thicker or thinner and apply them to the face, making the person look older.
Don’t forget the change the facial expressions to make our characters more diverse. Change the position of the lips, the angle of the brows and the eyes to make the person look cheerful or grumpy.

Congratulations! Our Flat Women Avatars Are All Done!
Great job! Our fancy avatars are finished!
I hope you’ve discovered some new interesting tips and tricks while following this tutorial that will help you with your future illustrations.

Try to draw as many different flat portraits as you can come up with!
Don’t forget that you can get a Flat Women Avatar Constructor with premade elements that will help you to get hundreds of combinations just in a few clicks. Apart from that, you’ll get the whole pack of fancy avatars that were demonstrated in this tutorial.

5 great deals no designer should miss
Post pobrano z: 5 great deals no designer should miss
Web hosting and WordPress themes and plugins are essential tools for designers who create on the web. In this post, we give you great opportunities to save on your next purchases. 1. 50% off WPEngine Your hosting account is one of the most important parts of your website. This is particularly true if you’re a […]