Top 5 Best Web Hosts For WordPress 2020 ⭐ 5 Unique Web Hosting Providers For You ⭐ Fully Tested!

Top 5 Best Web Hosts For WordPress 2020 ⭐ 5 Unique Web Hosting Providers For You ⭐ Fully Tested!


hey there YouTube friends how’s everyone
doing today I hope you’re having a great day in today’s video I’m gonna go over
the best web hosts for 2020 so I’m gonna go over the features the pros and cons
and the plans and prices so let’s go ahead and get started all right the
first one on our list is Bluehost all right Bluehost is recommended by
wordpress ideal for bloggers WordPress beginners and entrepreneurs so now let’s go over some of the pros of
Bluehost first they have automatic WordPress
installation plugins and theme up dates so that’s good for WordPress websites second they have guided wordpress site
creation for beginners so that’s great what makes it easy for beginners to
create their WordPress because they have a guide that you can just follow along
with third they have free site lock CDN and then finally they have quick
response and helpful life chat support which is really important because I’ve
had some hosts that you know you try to get help in chat and they take forever
to respond or they don’t respond at all and Bluehost isn’t like that at all so
they’re really good about that so now for the cons using blue coast so the
first con is you cannot use both HTTP and site lock CDN you have to either use
one or the other the second con is the unlimited requires
more expensive plans so you don’t get unlimited with via cheapest plan you
have to upgrade and then three you have less control of automatic data backups
so if you want something that you have more control with your automatic backups
then I wouldn’t recommend Bluehost for you all right and so the next part is
the plants they have a the shared plan which is the basic one it starts at 395
a month and with that you get you know a new website or blog it’s easy to use
customer – dashboard fully managed solution but again there are some limits
to that and if you want to just you know look over the plans and see everything
that it’s included you can just go to their site and see all that stuff I’m
just covering the basics to give you a kind of idea on which one might be best
for you depending on what you’re doing so if you have a wordpress blog or you
have an e-commerce site they’re gonna be different for each one all right moving
on to our next one is site ground all right a site ground is also
recommended by WordPress it’s ideal for bloggers manage web hosting Drupal and
Joomla and these are other platforms that you can build your website off
besides WordPress all right so let’s cover the pros for site ground first they have daily free backup and
restore which is great because I do recommend that you restore or backup a
rather your site every day they are recommended by WordPress which is a
pretty big deal so that’s always good to have they’re easy to set up they have a
pretty fast service and they’re reliable but the biggest thing is that it comes
with a free SSL certificate so that’s also a plus all right so now some of the
cons for using SiteGround are that it requires go big or go geek plans for
managed hosting features so you have to upgrade to get those kind of features so
the the basic plan probably isn’t gonna work for you you’re probably gonna have
to upgrade to one of these two other plans all right so the second con is that you
get 10 to 30 gigabytes that’s the webspace cap for using
SiteGround so if you have more use of gigabytes then you’re gonna have to go
with a different hosting provider SiteGround won’t cover that all right
and their startup plan is 395 a month that’s for one website and 10 gigabytes
of web space and you can only get up to 10,000 visitors monthly so again you’re
either gonna have to go with the grow big or go geek so again depending on
your needs and how you use your website you might want to go with a different
hosting provider but if you have bigger plans than I would recommend SiteGround
they’re great for bigger venues and if you’re gonna do more with your website
it’s a good it’s a good value for what you’re getting all right next one on the
list for web hosts is dreamhost now DreamHost also is recommended by
WordPress it’s ideal for bloggers however you may need the upgrade option
to get some of the other features that they offer so the pros for dreamhost are
number one 100% uptime guarantee so that’s always
great they guarantee that so that’ll be up a
hundred percent which is pretty good number two is they offer a 97 day
money-back guarantee if you’re not satisfied for any reason you can get
your money back within 90 days or 97 days so a lot of them offer less than
that so that’s pretty cool number three is they do have optimized WordPress
hosting so that’s always good and number four is that they
have award-winning customer support all right so now moving on to the cons
for dreamhost number one is as I mentioned there will be additional cost
for WordPress premium hosting and again you know do your due diligence look at
all the other web hosts and look at their plans and see what best fits you
number two is they have extra costs for many other features as well and number
three and this kind of goes against the pros that I put up here earlier because
I’ve experienced this myself they do have long wait time before the
live chat customer support I had contact the customer support and I was holding
for quite a bit before somebody came on the chat and that was not good I was not
happy by the time I reached the customer support person so again something you
want to weigh in your options of who you want to choose for your hosting now here
are the hosting plans for DreamHost now the basic one starts at 259 a month you
do get a 2.59 that is you get one website free domain included the domain
name rather you get a limited traffic and bandwidth and then you get the
WordPress pre-installed and you also get the access to the WordPress builder so
that’s kind of nice because it’s a wordpress isn’t the easiest platform to
use if you’ve never used it in your beginner you do get the free SSL and you
get fast SSD storage now if you want to get an email you’d have to pay another
dollar 67 a month which is one of the features that I mentioned that you would
have to pay more for alright so our next web host is a two hosting they’re also
recommended by WordPress Joomla dooper all magenta and OpenCart
your ideal for bloggers and they the fastest server times so now the pros for hu hosting our they
have a 99.9% uptime and anytime money-back guarantee the number two is
they have auto setup for WordPress so it’s automatically set up three is they
have optimized WordPress hosting just four specifically web WordPress websites
and they also offer the free SSL certificate which is always great to get
that for free now going over some of the cons number
one is they do have additional cost for word press premium hosting so it’s not
the same as the shared hosting the number two is extra costs for many other
features as well so let’s go to the plans that they have and these are the
plans for the WordPress hosting not for the basic and it is pretty cheap I mean
they do start at 296 and again you see all the stuff that you get with each
plan you can go over them and see which best which is best for you and your
needs for your website the next one is Hostgator now Hostgator is owned by the
same parent company that owns Bluehost so they’re very similar although
Hostgator works with wordpress joomla drupal magenta wiki and PHP BB they’re
not actually recommended by wordpress like Bluehost is so that might be
something you want to consider as well alright so let’s go over the pros for
Hostgator they have a ninety nine percent uptime guarantee which is good
number two Pro for a Hostgator is they have a 45 day money-back guarantee which
is great as well number three is they have have unlimited
bandwidth subdomains FTP accounts and email accounts with the beginner plan so
that’s always great and number four is they also have a free SSL certificate
with your website okay so now for the cons of Hostgator which I mentioned
before is that they’re not recommended by WordPress but again they do have
other features and I have used Hostgator in the past and I’ve never had any
issues with it Khanh number two is WordPress hosting is
higher price than the basic it’s a if you’re on a budget you might want to
look at some other web hosts that might fit your budget better and again number
three is you only get one WordPress website with that plan now a lot of
these only offer one website so again you want to look at all that stuff and
make sure that you’re getting the best bang for your buck and I would probably
go with something that has more unlimited websites for your hosting
because you know you might want to have more than one website so you might need
a plan that is better suited for that all right so now here are the plans and
these are for the WordPress hosting as I mentioned I think their basic plan is
295 or $3 for the what they call the baby plan but these WordPress plans
start at 595 a month and as you can see you get everything with it the one site
100k visitors per month one backup or one gigabyte backup the free SSL and you
also get a free dough name domain name with again you want to compare all the
prices and see what’s best for you do your research I always gotta tell you to
do your due diligence on anything you do you want to get the best information so
that you can make a well educated decision based on what you need all
right well I hope you learned a lot from this video thank you so much for
watching please like and subscribe to my channel and hit the fal’cie you’re
always notified on another new video coming out thanks for watching YouTube
friends I hope you have a great rest of your day

The WordPress editor is changing in a BIG way: Hello Gutenberg!

The WordPress editor is changing in a BIG way: Hello Gutenberg!


Getting ready for WordPress’s new
content editor you may be familiar with WordPress content editor but what you
may not know is for over the last year this editor is being rebuilt from the
ground up and will soon be replaced with the launch of WordPress 5.0 this
overhaul of the editor is expect to become part of the WordPress core
software sometime in 2018 and in this video I’m going to show you a preview of
what is called the Gutenberg editor which is a motivational and aspirational
code word used to identify the project surrounding the rebuild of the new
WordPress editor since this editor changes a lot of things for both a
content implementation standpoint and from a programming standpoint there’s a
lot of changes coming to WordPress and it’s a good time to get prepared this
particular enhancement to WordPress really addresses all of the shortcodes
widgets post formats and embeds and turns them more into a user friendly
block system aimed to help content creators like you and me I’ll dive into
some of these cool new features in a bit but I want to step back in time to
explain the significance of why this project is important to the WordPress
community in the early days WordPress themes they were sort of built around a
blog post and page editor so for example you had a header a sidebar and a footer
and a vertical rectangle where users might type in or copy and paste their
post and page content this diagram is what I consider a classic example of a
blog with a 1/3 layout of content in the blue and a sidebar represented by a
purple area sidebars typically house WordPress widgets and other dynamic
content the problem is that the sidebar was rather inflexible in terms of where
you wanted to show and it was global meaning that it was on every page in
every post when the mobile phone revolution started to really take shape
websites and blogs started to conform to mobile responsiveness with fluid layouts
that would sort of stack on a mobile phone and expand on larger desktop
screens since the sidebar and widgets were then pushed down or stacked below
the main content area many developers decided to opt
out – just remove them for more a minimal experience this made for a
better mobile experience but sort of a lackluster desktop screen experience
today the classic editor is being hijacked by plugins and themes that take
the WordPress content is editor as we know it and simply convert it into just
a repository for shortcodes to create columnized layouts these page builder
plugins and themes are popular among content creators including myself
they provide intuitive user interfaces for visualizing content layout but they
are sort of locking in users as there is not a universal language to manage these
type of layouts generated by page builder themes and plugins you may be
familiar with WordPress is existing shortcodes
but here’s an example of a page builder utilizing a shortcode system as you can
see it’s a rather complicated looking when the page builder plug-in or theme
is not active page builders definitely filled a need but the problem is the
dependency on them if you deactivate your theme after using a page builder
today your content will look sort of gobbledygook as WordPress no longer
knows what to do with the short codes that are left over this dependency on a
particular theme our plug-in framework is sort of against everything that
WordPress is core mission is about such as being open source and abiding by the
free software foundation standards with the new Gutenberg editor WordPress is
really stepping up and taken back the content editing experience with an
introduction of gutten blocks which I’m excited to share with you in an early
demo version available for anyone to use to start testing these new features in
2017 the wordpress Gutenberg team launched a beta plug-in so users can
start to test these new features out and prepare their sites for anything that
might be incompatible do not use this plugin on a production site yet it is
just for testing and checking for compatibility with your existing
environment but using it in a way that is not a live production website you may
wish to setup a standalone demo sandbox site to play and learn these new
features if all this sort of don’t fret the classic editor or the
editor that we use today is also now available as a plug-in and will be
supported for the foreseeable future after the release of WordPress version
5.0 if you want to start testing the Gutenberg editor on your own first
you’ll have to install the Gutenberg beta test plug-in one final warning this
is for a demo or non production web site as of right now the plug-in is somewhat
stable but there are still a lot of bugs and other known issues that are being
addressed by the gutenberg development team to add it to your website as a
plugin you can follow the standard wordpress plugin installation features
that you’re probably already familiar with but if you’re not follow along
really quickly and feel free to contact me if you have any additional questions
that how to install or what is a plug-in but first of all let’s login to our
WordPress dashboard and head on over to the plug-in menu and in this menu first
of all hey add new and in this menu you can go ahead and search for a plug-in
called Guttenberg as you can see it pops up and you can read additional
information regarding the Gutenberg beta test plug-in by clicking on it and
learning more about the project for this particular demo I’m gonna go ahead and
click install now excellent WordPress has an install the
plug-in and now I’m going to click activate to enable the WordPress
Gutenberg beta test plug-in by heading over to posts you can see now I have the
option to add a new post with the option to either add a Gutenberg post or add
use the classic editor and this feature or this user interface is only for the
Gutenberg beta test plugin in version 5.0 of WordPress this won’t really be an
option unless you have the classic editor plug-in installed because
Gutenberg will be the official editor for WordPress at that point so I’m gonna
go ahead for this particular demo and hit Gutenberg to show you the new
features as you can see the post editor page of WordPress has a familiar feel
but it definitely is different at the very top we have a new toolbar
that sort of represents the editing toolbar that we may be found in Prior
versions of WordPress and if you click the first button here this will allow
you to view all the gutten blocks that are currently available within the
course version of Gutenberg and you’ll see it starts with recent so your most
recent blocks there are the if you click on block so get the full list of blocks
including the formatting blocks layout blocks and so on I really encourage you
to go through these and sort of explore them yourselves some of them are
somewhat is self-explanatory like cover image gallery image lists and so on
other ones are maybe a little bit more complicated for example pullquote a
table classic classic editor mode if you will and then finally some layout blocks
which these are really what’s new to the wordpress Gutenberg or WordPress editing
experience including blocks designated for building a button building columns
to your layout remember I talked about the vertical editor that you can’t
change well ultimately this is what’s replacing the vertical square vertical
rectangle is columns and then finally separators and other really cool
features that you will find with the Gutenberg editor including some
mainstays here such as custom HTML and so on but we’ll come back to that in a
second additionally you’ll see here there is a button to preview and the
button to publish which these will become active as soon as we start to
create content now I have a little bit of a scenario that I’ve created for this
particular demo which is let’s say I am going to create an article about an
architect for my blog so in this in this demo I’m going to show you a sort of
preview of what it’ll be like if I created a blog post for an architect
that I aspire which is I Daniel Burnham so let’s get started creating a post
using the utilizing new Gutenberg editor beta test plugin so you’ll see here I
have a word document that I have created and I want to essentially copy and paste
this content into my new post so I’ll start with the title and as you can see
the Gutenberg editor has a title section just just as it did in the classic
editor and when you hover over you’ll get the permalink settings where you can
edit the link that people use to come to this particular
and as you navigate away from a block or a module you’ll note that it’s sort of
on highlights which that sort of makes really nice and really clean editing
experience let’s get let’s dive into the actual main body copy so I’m gonna copy
this and then what’s really cool is I can hit control V paste and ultimately
that copy will dive into here and each paragraph is now turned into a block so
let’s say for example this this first paragraph let’s say I wanted to move it
below the next paragraph I can click simply click the buttons the arrows up
and down which I think it’s kind of cool it really helps if you’re editing
content quickly in a fast way and you wouldn’t it all it really saves is the
option to copy and paste but every little second counts when you’re trying
to be the most productive person you can be
additionally let’s say I decide I want to turn this into a different type of
block I can click on the little three dot menu and it will let me convert it
into other blocks including a subhead which I’m going to turn this into a
subhead because it starts the particular content the post it starts the post and
you can see that the editing of this particular post has now changed into a
subhead type mode great now there’s a lot of other really cool features that
Gutenberg has including one feature which i think is cool which is where you
can add a divider so as you can see I simply clicked where I wanted to wanted
it to go and in here I can go ahead and find the the separator block that I want
to add and I’ll drop it in there which creates a nice little division between
the two paragraphs to make it much easier for our readers to to read didn’t
digest now I want to add a I want to add a drop case and you may be familiar with
drop cases from books but basically what it does is it adds a big first letter
which is really cool especially native a native tool within WordPress so if you
click on the little gear icon in the toolbar you’ll get a sort of settings
you get the overall document settings like you have in
press now where you can add your categories and your tags or featured
image and so on and so forth but also this is where you’ll find block
settings and then this block setting for this text block is where I can add the
drop cap and as you can see it was really simple to basically turn that be
into a really decorative B which is cool I love it now I’d like to add an image
and images are very much like it was before except now I would click go to
the area that I want to add the image and then click click on it and then hit
the plus icon and I’ll find the image and it creates a little sort of user
interface where it says what do I want to do when I upload or do I want to add
from my media library and what I’m going to do is I want to drag it right from my
computer so I’m gonna drag an image in here and it will upload you’ll see it’s
like pulsating which that means it’s uploading and then it will save the
draft some of the other cool features with the guttenberg editor is the
ability to create columns so again I want to click the as you can see as I
hover over available sections I can click on it and in here it will give me
the options to add blocks and what I want to do is I want to hit columns
experimental and it’s kind of hard to see right now I think they’re working in
this but ultimately there’s two essentially now there’s two blocks
because of the columns and in this first block I’m going to go ahead and grab
some copy and paste in the paste it into my editor and just like above except now they’re
in two separate columns which makes for some nice interesting layouts I can
change the font size if I want inside of the Gutenberg editor I can also reset to
put it back normal I can change the background color the text color the
alignment and even add a custom CSS class which i think is absolutely
fantastic finally what will be a quote what would be a Daniel Burnham article
without a quote my favorite quote of his so on what I’m going to do is I’m gonna
add a quote module or quote quote gutten block if you will and I’m gonna go ahead
and copy and paste it in there make no little plans which is a sort of a famous
quote by the architect Daniel Burnham and I’m gonna make my quilt block and
you can see that it’s very much like the current wordpress today where it makes
it look the block quotes look a little a little nicer a little bit more style to
be a quote but it was super easy and I can even drag this up to move it up
higher if I want so the Gutenberg editor is pretty fantastic I think I’m really
excited to see all the cool features or to come out of it as the Gutenberg Core
team continues to work on it probably some of the most interesting things I’m
looking at is there is an option to sort of save blocks and convert into a
reusable block so for example if I have a ten different posts but I want one
area of each post to be the same I can create a like save block if you will and
then it will it will save it into my Gutenberg library I’m really interested
to see how this plays out because that could be something really useful for
content strategists if they want to keep up a company boilerplate or a company
restriction or company disclaimer on every particular post and page
additionally Gutenberg sort of makes embedding content from other websites
much easier I think now that we have some content you’ll see that these tools
up here of it have sort of lit up lit up if you will and if I wanted to add like
for example a YouTube video I can simply head on over to see embeds area and then
here I can find a whole bunch of websites that Gutenberg will support
including YouTube and let’s see here I can YouTube is one of the first ones I
click YouTube and in here I could just enter the YouTube URL and hit embed it’s
super simple to use it’s actually sort of similar to what WordPress does now
with oEmbed but the oEmbed process I think was really confusing for people
because it didn’t really show them what to do so this way it gives them a little
bit of an interface to use the Guttenberg
to use the embed feature easier finally obviously I can hit preview it’s gonna
show a preview of my post this is using the wise theme for our website which
this part here is not part of Guttenberg but anything down from here is all
Guttenberg and you can see my two columns you can see that the Gutenberg
is working to make make this site look pretty awesome which I’m excited to see
how this is going to play out in the future there’s obviously still a lot of
stuff they’re working on there’s some bugs or squashing there is some other
formatting issues other ideas that they’re still sort of so sort of hashing
out but this is the time to be part of the conversation because ultimately
we’re the ones who are gonna have to use this meaning the content creators and
this is a time to sort of play with it think about what would make this awesome
and then tell the Gutenberg development team via their various areas to show
them hey wouldn’t it be cool if I had this or I think this could be done this
way so feel free to leave a comment on this particular video and I’d be happy
to share what the Guttenberg team for you or gone over to make that
wordpress.org and you’ll find out how and where the developers of WordPress
sort of hang out and where you could get in touch with them here are some of my
field observations from using and testing the Gutenberg editor number one
it definitely challenges the status quo of what we know as WordPress a lot of
established plugin and theme authors are sort of scrambling to reinvent their
products for the Gutenberg world with some even considering of just completely
opting out which that may cause some compatibility problems or require users
to find alternative solutions to fit their needs given that much of WordPress
is open source and free software there are also some challenges for the
community to sort of reinvent their existing offerings to be compatible but
like anything that changes do also expect to see a land rush of new plugins
and themes that will be that will create more flexibility for the editor which
competition is a great way to spark new ideas within the marketplace and make
the entire experience better for the good number two my best advice is to
start testing and playing now you too can download the Gutenberg beta test
plugin for free at wordpress.org but be sure to start testing and a non
production website there are many features and bugs that are working on
and not all plugins and themes are compatible or will be compatible with
this new editor and framework also I want to point out that the Gutenberg
editing philosophy is poised to enter more areas of the WordPress ecosystem
such as headers footers and other areas in the future finally as always spread
the word be sure to spread the word if you have any ideas on how you think
Gutenberg could better help you or a plug-in for Gutenberg that would make it
better for you feel free to leave a comment on this video and I will share
that with the team or go feel free to go ahead yourself and head on over to make
that wordpress.org and read up on what is going on development world of the
WordPress this is a time to voice your opinion because the development team is
looking for feedback especially from content creators like you and me also be
sure to tell a friend about these new changes and maybe even send them this
video to alert them that this change is coming to WordPress and they probably
want to get prepared for it thanks again for watching this content Academy quick
tip I hope you found it valuable and actionable I know I have a lot of ideas
on how I can use Gutenberg to amp up my content strategy and I will be for sure
to share them with you in this video series please subscribe to our YouTube
channel for more content Academy quick tips and head on over to contentacademy.com
com to learn more about our community of content strategists thank you so much
for watching and bye for now

Mixcraft 9, Waves Berzerk, Steinberg UR-C Interface, Free Plugins & more

Mixcraft 9, Waves Berzerk, Steinberg UR-C Interface, Free Plugins & more


in this episode of the home studio show
I’m looking at Steinberg UR-C audio interfaces mixcraft 9 digital audio
workstation a new distortion from waves plugins, N-track studio 9.1 update
free plugins and much more I’m Zane and this is the home studio show this is a
weekly show where I do audio tech news reviews and sometimes tips basically I
talk about the latest audio tech gear like audio interfaces and microphones I
also look at plugins new and old and digital audio workstations plus I make
sure to review free plugins in every episode you can also download every
episode as a podcast if you want to take me on the road with you and you can go
to the home studio show.com to download that you can also find it on itunes
first up in news steinberg the people behind the great digital audio
workstation Cubase they’ve released updated versions of their UR audio
interfaces and there are three audio interfaces in this new line there’s the
UR22C which is a two input two output audio interface then there’s the
UR44C which has 6 inputs but you can only record four of them at the same
time and then there’s the UR816C which is 16 inputs and of those 16
inputs eight of them are mic preamps all of these interfaces have a rugged metal
housing and offer 32 bit recording up to 192 Khz sample rate they also
claim to have super low latency and can offer faster transmission speeds to and
from your computer thanks to the USB C connection you can even connect these
audio interfaces to your iOS device be sure to check the link in the
description for more information and pricing next in news acoustica
mixcraft has been updated to mixcraft 9 if you
aren’t familiar with mixcraft it’s a digital audio workstation and they claim
to have the best workflow and they also say that it’s the best in ease-of-use
some of the new and notable features in version 9 include the addition
of the voltage modular synthesizer that comes with 45 modules you also get a new
suite of over 10 plugins from tone boosters cherry audio and acoustica
another new and notable feature is you can convert audio tracks into MIDI this
is a very cool feature that can be done with the included Melodyne plug-in there
are numerous other upgrades and features in mixcraft 9 be sure to check the link
in the description for more information there’s a new distortion in town over at
waves plugins and if you were fortunate enough to take advantage of the Black
Friday offer then you’d have this plug-in right now now this new waves
plug-in is called berzerk and it claims to be a creative distortion plug-in
designed to inspire musical ideas you get 10 original distortion shapes that
have wildly different personalities and if you can’t decide which one you want
to use press the go berzerk button and it will randomize each distortion shape
you can throw this plug-in on pretty much anything in your mix and it will
give your tracks new sounds that will stand out from the boring digital audio
that’s out there if you’re not familiar with waves they create some great
professional quality plugins and they offer them at very reasonable prices
again check that link in the description for more information on berserk and the
other waves plugins and more digital audio workstation news N-track studio
has been updated to version 9.1 and with this you get over 10 gigabytes of
royalty-free beats and loops new tools like vocal tune which is an auto tune
style tool and you also get the new guitar and bass amp sims where you can
simulate real life gear again the link is in the description if you want some
more information on N-track studio 9.1 please give this video a big thumbs up
if you’re enjoying it so far and I’ve got that trivia question coming up in
just a bit where if you answer it correctly you’ll get a shout out in the
next episode but right now we’re going to move on to the plugins worth checking
out section and first up I have izotope trash 2 this is another creative
distortion plug-in that can be used on pretty much every track
you can use various modules in trash to like delay and filters that give you a
lot of options for coming up with unique sounds one of my favorite modules in
trash 2 is the convolve module this models realistic amps devices
cabinets effects and speakers there are so many options here and you can even
load your own impulses into trash 2 plus if you need some inspiration to get
started you can check out some of the 100 presets which is what I’m going to
do right now and of course you can check the link in
the description for more information on trash 2 and now the next plugin worth
checking out is tracktion biotek 2 this is a very
cool synth that uses natural and environmental samples to create its
sounds the interface is pretty cool you can adjust this image in the center and
take your sounds even further it also includes over 500 patches to get you
started so let’s give biotech to a listen and check out some of those
patches right now now before we get to the free plugins section of the show I
have the trivia section and last week I had two people answer the trivia
correctly they were innocent bystander and Ronnie Cremer thank you so much guys
for watching and if you want to have a shout out in the next episode be sure to
answer this trivia question correctly name the song and the original band or
artist from these lyrics I’m bulletproof nothing to lose fire away, fire away if
you know the answer be sure to put it in the comments below and if you’re among
the first 10 people to do so you’ll get a shout out in the next episode now
let’s move on to the free plugins of the week and the first plug-in we’re going
to look at is a new one from sampleson and this is called push this is a
one-button generative synth for Mac and Windows and every time you push the one
button in the middle it will create a new patch you can further edit this
patch in the Edit panel but if you’re stuck for a sound this can be a cool way
to come up with some new ideas so let’s give it a try and see what kind of
sounds we get when we push the button be sure to let me know what you think of
push in the comments below and the next free plugin of the week is from a
company called sender spike and this is their signal noise sn-02G vu meter now a
vu meter may look like a fairly simple plugin but this one does offer some
features in addition to the great analog meter looks it can operate as a dual
mono or stereo meter depending on your track it has four fixed nominal
reference levels for 0 DB vu there’s – 12 – 14 – 18 and – 20 dB this can really
help you in your gain staging there’s a switchable display of some mono on both
meters left-right or mid side for stereo tracks only plus there’s some more
features in there if you have a free or paid plugin or any other audio software
that you think I should check out in a future episode be sure to let me know in
the comments below now click up here for the home studio
show playlist or click down here to see what YouTube thinks you should watch
next if you liked this episode of the home
studio show please give it a big thumbs up also subscribe to the channel if
you’d like to see more episodes for the home studio show and simple green tech
I’m Zane and we’ll talk soon

WordPress Tutorial: How to Change Your Privacy Settings

WordPress Tutorial: How to Change Your Privacy Settings


Hi, and welcome to WordPress.com. This video will show you how to change
the privacy settings on your WordPress.com website or blog. There are three privacy options for your
WordPress.com site: Public, Hidden from search engines,
and Private. To change your privacy settings,
go to My Site and Settings and look for Privacy. If you set your blog to Private,
only users who’ve been invited to the site to view or to contribute
will be able to access it. You can invite users under My Sites,
then on People and Add. If you set your site to Hidden
from search engines, it does not guarantee your site
will not be indexed by search engines. If you’re not sure if this is what you want,
we recommend keeping the default public settings, so your site’s content
will always be searchable. For more tips and tricks,
visit the WordPress.com support site.

Introducing the Store Locator Library for Google Maps API

Introducing the Store Locator Library for Google Maps API


CHRIS BROADFOOT: Hi everyone. My name’s Chris Broadfoot. Welcome to another Google
Maps Developer Relations Screencast. Today I’ll be
showing you how to easily create an interactive
store locator using the Google Maps API. You might have already read this
great article on the maps API developer documentation, but
the piece that’s missing is a really great
user interface. Introducing the Open Source
Store Locator Library for the Maps API. This Utility Library makes it
simple for developers such as yourselves to build a great
store locator application. You get many things for free,
including a list of nearby stores, an info window that
shows details about the selected store, HTML5
GeoLocation, which will determine a good initial
viewport for the user, along with Street View, autocomplete
search like on maps.google.com, and
importantly, driving directions. It’s also very extensible. You can customize your markers,
info windows, map style, and anything else
you can think of. One important note, the
library’s very flexible about where the store data
comes from. The examples I’m going to show
you today have data coming from a CSV file, but there’s
an example in the documentation that shows
stores that come from a database hosted on Google
App Engine. I’m going to begin by showing
you the example that’s powered by a CSV file. The location data has been
obtained through data.gov.au, and it’s a list of all the
Medicare offices in Australia. The first thing you’ll notice
is on the left, a list of stores ordered by the distance
from the center of the map. I might want to change the
center to be where I currently am so I see the store
closest to me. So I’m actually at the Google
Sydney office, so I’m going to go ahead and select that. You’ll see that the
map updates to show my current location. And I see a list of the stores
that are closest to the Google Sydney office. Now, I don’t really want to
venture into the city, so I’m going to see the next closest
store that’s not Sydney. But I live close to Lockhart, so
maybe I’ll choose that one. I can go and hit Street
View to get an idea of where the store is. That looks fine, I can get
plenty of parking there. I’m going to go ahead and zoom
in so I can get more of an idea of where it is. And then maybe get some
driving directions. You’ll see that the map handily
uses my current location as the beginning
point, the Google Sydney office, for the directions. And I get the regular directions
panel that you might be familiar with from
using the Google Maps API. Let’s look at one
final example. This one shows how you can
simply customize the map to your liking. Here we’ve customized the icons,
so we’ve branded the map using the Medicare logo. And you can see as we click
we’ve customized the info window using a library
called InfoBubble. This is really great
to be able to brand the map to your liking. Of course, you can style the
panel using CSS, and the map using the Styled Maps API. So, you’d like one of these
store locators? Download the library from the
website, use several examples and demos including the two that
I showed you today, and refer to the detailed
documentation. All you have to do is
click here to start. Thanks for listening.

GDC 2012: From Console to Chrome

GDC 2012: From Console to Chrome


LILLI THOMPSON: Hello. I’m Lilli Thompson, and this
is Console to Chrome, HTML5 and JavaScript for
game developers. So first of all, just a little
bit of background on me. So I am an ex-console game
programmer that joined Google as a software engineer. And I did that for a couple of
years, nothing to do with graphics or game, just generic
software engineering. And then, I found that
I really missed game development. So I then joined the
Chrome team as a game developer advocate. And what that means is that what
I do now is that I work with game developers who are
working with technologies that are a priority for Chrome. And the big two for me
are HTML5 and WebGL. So that’s what I do a lot of,
and that’s why I’m here today. So first of all, an overview
of this talk. The thing you really need to
know is that this is a 201-level talk. I’m not going to give
you the HTML5 pitch. And I’m not going to give you an
intro to game development. I’m going to assume that you’re
a game developer type person that already knows that
they want to use HTML5. Maybe you’ve done a WebGL
tutorial and even rendered your first couple
of triangles. But now, there’s a huge
knowledge gap between making a prototype and actually
making a scalable large-scale game engine. And so that’s really what
I want to address today. And there are a couple of topics
that go into that. The first, I’ll just have to
go really briefly over the HTML5 APIs. I’m not going to spend
a lot of time on it. But I want to make sure that
we’re all on the same page. Then the real meat of the
issue for a lot of game developers is JavaScript. Just writing code at that
scale in JavaScript is something that a lot of console programmers struggle with. And so I’m going to spend a lot
of time there in talking about how to do that. And then finally, when you write
an HTML5 game, you’re actually writing a game that
renders inside a much more complicated system of Chrome’s
rendering system. And so there’s all sorts of
things to know there. And if you really understand how
Chrome is set up, you can optimize your game and
make it run better. So those are the topics I’m
going to cover today. So there are two major
ways that people think about HTML5 games. The first is as a means
to get ubiquity. There’s a whole class of people
who look at HTML5 as a way to write one code base and
run it in multiple places. So the dream is that every
phone, every tablet, every PC, every device has a browser. And if you can squish your
game into a browser, into HTML5, then that’s great
for your maintenance. You have one code base, and
it’s running everywhere. That’s awesome. But that particular use of HTML5
comes with a certain set of constraints. So naturally, if you’re really
targeting ubiquity, if that’s your point, then you have to peg
the specification for your game to the lowest common
denominator, both in terms of what APIs you can use, because
you need APIs that are very broadly supported, and also in
terms of what you can demand out of the hardware because you
have to assume that you want to run just as well on a
phone as you do on a desktop. So anyway, very nice use of
HTML5, but then there’s this other way people think about
it, which is as a way to do something awesome with
the browser. So there’s a different set of
people who see the browser as a distribution platform for
their console-style games and are really excited by all the
great new potential that HTML5 had added to the browser. And they really want to take
advantage of that. And there’s a huge potential
there, making sharable, linkable, seamless
experiences. You can get so many
users that way. And it’s so exciting. But as you can imagine, these
people who are really interested in being on the
leading edge, their goals are very different than the people
who are trying to do HTML5 for ubiquity. Because by virtue of being on
the bleeding edge, these things aren’t going to be
supported everywhere. If you’re making a game that’s
a PC-style game that’s really demanding, it’s not going to run
on 10-year-old hardware. And that’s OK for
this use case. So whenever you talk to people
about their opinions about HTML5 and what it’s good for
and what it isn’t good for, you should make sure you
understand which of these cases they’re coming
at it from. And to be very clear here,
what I want to talk about today is the leading
edge of HTML5. I want to talk about credible
console-style experiences rendered in the browser. So to begin talking about that,
we need to talk about HTML5 APIs, at least briefly. So the first one you’re going
to need is WebGL. So WebGL is the way you do 3D
rendering in a browser. It’s a lot like OpenGL. So if you’re already an OpenGL
programmer, it’s going to be pretty familiar to you,
except for it’s actually OpenGL ES 2.0. It’s the embedded systems
version of OpenGL. And what that means is that when
they made the embedded systems versions of the
specifications, they took out everything that was deemed to be
redundant in order to make it small and compact to
fit on mobile devices. But that means that a lot of
stuff is sort of removed. And the first thing you’re going
to notice there is that fixed function lighting
is gone. So all your rendering in WebGL
is going to be done through programmable shaders. You’re going to have to get
used to that if you’re not used to that already. And besides that, there are a
bunch of other little things which, when I talk to game
developers about them, they’re usually described as annoyances,
just random stuff that just is missing for
whatever reason in the specification. So for instance, depth buffer
access, texture compression is only available in a limited
form, instancing is missing, and so on, and so forth. So there are little
stumbling blocks. None of them are
deal breakers. You can still make a
high-quality, graphically impressive 3D game. But you’re going to
have to know that these issues are there. And then, there’s a different
class of things, which is a set of operations in OpenGL
ES that have a different performance profile than you
might expect in Chrome. So, for instance, anything that
starts with a “read,” anything that’s starts with a
“get” and “glFinish,” that kind of operation, they’re
all going to be extra expensive in Chrome. They were always somewhat
expensive. Now they’re going to be
really expensive. And when we get into talking
about how Chrome actually renders things, I’ll be able
to explain why that is. But besides those performance
notes, the rest of the performance of WebGL is
actually pretty great. It’s actually tremendously
impressive. It’s really calling straight
through the hardware, so the performance of WebGL is very,
very similar to the performance of OpenGL. And you can get a
lot out of it. And the other thing to note is
that the specification is evolving very, very quickly. If you look at where WebGL was
a year ago versus where it is today, you’re going to see
a lot of improvements. So especially, when you think
about all these little things that are either annoying, or
missing, or whatever, make sure you check back in with your
assumptions every three to six months because fixes very
well might have come into the specification. Or better still, go to the WebGL
mailing list and start talking about what it is you
need and want, because they’re very responsive, and a lot of
changes are getting made. So you can render polygons. Next thing you need to do on
your way to a prototype is to be able to play some audio. HTML5 audio is a notorious
sticking point. Everyone in the HTML5 games
community has heard everybody else complain about how
painful audio is. And that’s pretty true,
quite honestly. It’s pretty safe to say that
audio in HTML5 is the most important, least standardized
thing. And so there actually is no
specification that’s really suitable for this kind of game
that’s going to work everywhere. So you’re stuck falling back and
doing different things for different browsers. I wish it wasn’t the case, but
that’s sort of the world we live in today. Of all the specifications out
there, the one that I personally think is the best and
most suitable for games is the web audio API, which is
only in Chrome right now. And it offers just a lot
of features, sort of a graph-based audio processing
system, all kinds of out-of-the-box nodes and filters
you can just use. It’s hardware accelerated. It’s very accurate in
its timing, and so on, and so forth. So it will help you out. And then, there’s so much more
that I just don’t have time to get to today. There’s all kinds of new APIs
being added to the HTML5 standards all the time. Instead of trying to go over
them here, because I just don’t have time, I’m going to
add a resources slide at the end where you can go and read
about any one of these particular things. There are also lots of
presentations that sort of catalog APIs for games. But suffice to say for the
moment, there are a lot of things that you should
look into. If these things don’t look
familiar to you yet, then you should go look them up and see
if they’re useful to you. And that’s pretty
much for HTML5. Pretty much two things you need,
You need to be able to render triangles. You need to be able
to play sound. From there, you can
make a prototype. Once you’ve got a prototype, now
comes the hard part where you take prototype
to game engine. And that transition is all about
writing high-performance JavaScript. So that’s what we’re going
to talk about now. And before I get too deep into
it, a great big caveat that what I’m talking about
is JavaScript performance for Chrome. Every browser has its own
JavaScript engine, or there are many different JavaScript
implementations. And they’re all going to have
different performance quirks. Certain operations are going to
be slow over here, and fast over there, and all that. So this presentation, I’m
going to try to give you general information. But this information has been
written in the context of V8 and sort of confirmed with
the V8 team for accuracy. And I’m not trying to
or qualified to speak for other browsers. So let’s talk JavaScript. JavaScript is a high-level
scripting language. And it’s extremely permissive
in what it allows you to do, extremely squishy
in its syntax. It’s typeless. It’s kind of interpreted. It’s just-in-time compiled. There’s no explicit syntax
for memory management. And it’s all running on a single
thread with some HTML5 exceptions called web workers
which you should go look up if you don’t know what
they are already. So the nice thing about
JavaScript is that it’s great to have an application running
in JavaScript in front of your end users because it is great
at not falling down. JavaScript is great at eating
bad input and staying up. Nothing makes it crash. It’s super effective at being
robust. The sort of dark side of that, though, is that because
JavaScript doesn’t have a lot of structure of its
own and because it is really, really permissive in what it
allows you to do, and it never sort of spits errors at you,
that while you’re developing, you’re sort of stuck
in this Wild West kind of lawless world. And it’s really hard to work in
that kind of unstructured environment. So from a developer standpoint,
what I usually think is that you want a really
permissive system for deployment, because you don’t
want to put something in front of end users that will crash. And you want a really strict
system for development so that JavaScript doesn’t allow you
to do anything silly. And JavaScript being way over
on the permissive end of the spectrum, development of
large-scale systems in it can be difficult. So what people do, because
JavaScript doesn’t bring a lot of structure of its own, is that
they impose artificial structure on JavaScript. So either they have their team
follow very strict coding standards, or there are patterns
that allow you to privatize data. Even though JavaScript doesn’t
have an actual way to privatize data, you can
sort of fake it with certain patterns. There are post-processing tools
that will warn you or add static types and tell
you when you’re doing something silly. So there’s all that kind of
stuff that you should be aware if you’re making a large-scale
JavaScript application. And then you should also just
be aware that JavaScript is not going to spit a lot
of errors at you. So when there are problems in a
certain part of your system, it might be hard to figure out
what exactly has gone wrong, because JavaScript always thinks
that everything is OK. So it’s hard to trace
back error chains. And in an environment like that,
you want to code extra defensively. The idea is that you want to
design your system in a modular way, which is
always a good idea. And then, hopefully, you can
design it such that if one of your modules starts behaving
strangely, starts going wonky, and you can’t figure out why,
you can just kill it, and restart a fresh one, and
reconnect it to your system while the whole thing
is running. And if you can design in that
way, you’ll save yourself a lot of pain dealing in the
system that’s sort of squishy. So if you’re still one of those
people who thinks to themselves, well, JavaScript,
that’s a scripting language. You could never actually write
a high-performance credible game in JavaScript. You are dealing with seriously
dated information. JavaScript engines are really
fast these days. They are absolutely capable of
doing the kind of processing required for this
kind of game. The problem is that it’s just
really easy to write bad code in JavaScript. And there are a ton of examples
of bad code in JavaScript that people tend
to follow as patterns. So not only is JavaScript
performance squirrely in that it’s hard to tell what exactly
is going wrong, or small changes in your JavaScript can
have really, really big performance implications, and
that information isn’t really surfaced all that well to you as
a developer, but on top of all that, the VM itself, the
actual virtual machine that’s executing your JavaScript, V8
in Chrome’s case, is under development too. So something that was slow
yesterday might be fast today. And so you have to keep all of
this in your mind as you’re trying to write high-performance
JavaScript. So the best way I know how to
give advice on how to write high-performance JavaScript is
to explain to you the pieces, the general components
of how V8 is actually executing things. And then, you can develop an
intuition for what might be fast and what might be slow,
and go from there. So again, I’m talking about
components of V8 here. In general, these are components
you find in a lot of JavaScript engines. But this, in particular,
is referencing V8’s implementation. So the components are you have
a just-in-time compiler. That compiler compiles two sum
representations, so you have an object model under
the hood. You have an optimizing
compiler that compiles after that. And then, at the end of the
day, you have a garbage collector that’s running around
cleaning up after you. So I’ll talk about each
of these components. First of all, the just-in-time
compiler. So the just-in-time compiler,
what it does is very easy to explain. It looks at the JavaScript
you wrote. And it takes snippets of your
JavaScript, and it turns them into native code. And that translation, the
directive of the just-in-time compiler, is to do that as
quickly as possible. It doesn’t try to be overly
clever or to specialize or optimize at that point. It’s trying to make the
interpretation of JavaScript files fast. So it just
does that translation as fast as it can. And it does a great job of it. So when we talk about the
just-in-time compiler, we’re talking about generating
native code. So now we need to talk
about what kind of native code gets generated. We need to talk about
data types. So the first data type of
interest is numbers, numeric types, of course,
very important. So V8 has two major internal
representations of numbers. There are small ints values
and heap numbers, and they have different performance
profiles. So small ints are the case you
want to be in if you can. They are immediate values as
opposed to heap numbers, which are allocated somewhere
else on the heap. Small ints are something you’re
just holding on to. And that means they’re really
fast to interact with. The size of a heap number is
an interesting question. On 32-bit machines, heap numbers
are ints that are 31 bits or less. On 64-bit machines, small ints
are 32 bits or less. So there’s some sort
of intricacy there. In general, you probably want to
target both 32-bit machines and 64-bit machines. So you probably want
to aim for 31-bit integers if you can. Now, don’t go crazy with this,
because other kinds of numbers can be optimized later too. But if you have a system, like
your OPT tree system or your particle system that lends
itself to being cast in terms of integer math, it might be a
major performance improvement for you if you can get into
these SMI values. So that’s SMIs. Then we have heap numbers. So heap numbers are anything
that won’t fit into an SMI and is not a local variable. So exactly like you’d expect,
these numbers can’t be allocated in an immediate
mode. So they need to be wrapped up
and allocated on the heap, which means that now they’re
going to be slightly slower to deal with because you’re
referencing a number that’s somewhere else. Now, before you go crazy, again,
I want to make sure that I don’t accidentally tell
you to overspecialize. Doubles are sometimes
optimized. V8 knows that math is
really important. It’s something people
want to do a lot of. So we’ll try to optimize
your doubles. It’ll try to allocate them
in immediate mode. It’ll try to allocate them
in registers if it can. But it might not be able to, so
there’s no guarantee there. So again, don’t go crazy trying
to make all small ints. But if you can, if it lends
itself to your system, it could work for you. So that’s numbers. Next, we need to talk
about arrays. So the first type of array to
talk about in JavaScript is the TypedArray. So TypedArrays are going to make
a lot of sense to you if you’re coming from
a C background. They are contiguous blocks of
memory that are specified for a particular data type. So you have Uint32Array,
Float64Array, Uint8Array, and so on, and so forth, which
actually, if you’re familiar with JavaScript, is
sort of unusual. Because most things in
JavaScript have no type. So this idea that we’re
specifying a very specific size for our numbers is actually
like pretty unique. And that’s because the
TypedArray specification grew up alongside the WebGL
specification. And you can imagine how you need
that level of specificity if you’re doing graphics
programming. So that’s sort of where
the TypedArray specification came from. But it’s been adopted
into other things now that it’s there. So again, they’re memory
efficient. You don’t have to box them. They behave as you’d expect. They’re a very nice
option for arrays. But if you can’t use TypedArrays
for whatever reason, you need to use
JavaScript Arrays. So JavaScript Array object– Array with a capital A– has an API which is going to
look a little weird to you if you are used to C-style
arrays. It’s going to have operations
that are different. It’s going to have like
push and pop. It’s going to allow you to
index out of bounds. It’s going to have just sort
of odd behavior to me as somebody coming from C. So as you can imagine, because
the API allows all these non-C array-like things, the backing
storage in V8 is not always something that looks
like an array. There are actually two different
types of backing storage for arrays. There are sparse arrays and
dense arrays, which map to either something that looks
like a C-style array, like you’d expect, or a hash table. And if your array is backed by a
V8 hash table, that’s called being in dictionary
mode, and it’s considerably less efficient. It’s a case that you
want to avoid. There are many factors in V8
that causes you to be kicked into dictionary mode or not. So it’s kind of complicated
to define them all. But one of them, for instance,
is space efficiency. So if the codes you wrote will
be three times more efficient, use three times less space if it
was backed by a hash table than an array, then it’ll be a
hash table on the back end. So there are criteria
like that. Let me give you an example. So this is something that
JavaScript allows you to do. JavaScript allows you to create
a new uninitialized array and then just suddenly
index into it at whatever index. This, of course, doesn’t make
any sense in C. It’s not something you’d actually do. And in V8, it will immediately
trigger dictionary mode. So this, you will now have a
nice, slow array to work with, not something you want. This is an example of a better
way to do things. So real simple change. All you have to do is
declare how much storage you want up front. Now you have declared to V8
that you actually want an array of a certain size. V8 will back your array by a
contiguous array of that size, and you can go from there. Very sensible, kind of
no-brainerish, but again, JavaScript allows you to do it
in a way that ends up being very inefficient, so it’s
important to know. So that is the numeric
representation and the immediate representation
of objects. Now, we’re going to talk about
representing JavaScript objects in V8. So objects in JavaScript
are these very poorly defined things. They are associative arrays. They’re just bundles of key
value pairs of properties. So you have string value for
key, property value. And all property values are
these undefined whatevers, because JavaScript doesn’t
have a notion of type. Objects have prototype chains. You can add and remove
properties anywhere at the prototype chain and on the
object itself at any point. JavaScript doesn’t enforce
any specificity or structure in your code. So if you wanted to, you could
make every single object in your whole program absolutely
a unique set of properties. Nothing in JavaScript will
enforce structure or self-similarity. But just because JavaScript
allows you to do that, you really, really shouldn’t. That’s actually a terrible thing
to do for performance. And I’ll explain why
in a minute. So in V8, the V8 team looked
at trying to write a large-scale application in
JavaScript and thought, hey, you know what’s important in
large-scale systems is object-orientedness. And if you have
object-orientedness in your system, then now, property
access is one of the key things that you need to make
fast. So V8 designed its structure to make property
access on objects as efficient as it could be. So the internal representation
of an object in V8 is three words. So first, we have a hidden class
pointer, which is an internal notion of type, which
I’ll explain in a second. And then we have two pointers
to different kinds of properties. We have properties that have
string names and then properties that have
int names. But really, the only thing
that’s important is you have a type, and then you have
property storage. So what’s this hidden
class thing? So hidden classes, again,
they’re V8’s internal notion of type. JavaScript itself isn’t going to
enforce any kind of notion of type on you. But in order to make things
efficient, V8 itself needs to have some sort of structure in
what it thinks you’re doing. So it introduces
a type system. And that type system
groups objects with the same structure. So as you’re adding properties
to objects, which you can do in JavaScript, V8 will be
looking at the properties on each object and mapping that
bundle of properties to a hidden class, which defines an
object with exactly those properties. So, for instance, if I have this
constructor in JavaScript where I have a point, and it
has an x and y, and the way those values are added by first
adding x to the object and then adding y, that’s going
to generate a hidden class that backs objects that
are created from this function that has exactly the
properties x and y. And that really seems
sort of obvious. But then, the first time this
function is run, that hidden class is going to be built
for the first time. And then, all subsequent times
this function is run, those new objects can share the
same hidden class. So you only pay the price
for building it the very first time. After that, you can just
use the same object. So we went through all this
trouble of building up a notion of type. So now, we have types that
correspond to specifically what exact properties
are on an object. We can use that notion of type
to make property access quick using something called
inline caching. So if you want to look up a
property on an object in JavaScript, you’re going to say,
I am looking for property with name x on object y. The first thing you do when
you’re trying to look up a property is check the hidden
class of the object. If you’ve never tried to look up
that property on an object of that type before, then what
you’re going to have to do is a fully generic search
for that property. So again, we just have a bundle of properties somewhere. They all have string names. You have a string of the
property you’re looking for. And you’re going to have to look
through that list for the property that has
a matching name. That’s a pretty slow
operation. But once you found that
property once, you can remember the offset to it. You can remember where you found
that property and use it later, which means that you can
use that to generate new optimized code which specifies
how you look up that particular property on that
particular object. And the next time you want to
look up property with that name on an object of
that type, you can have direct access. You know exactly where to go
in an object of that type. And it’s much, much,
much faster. So that’s really what the notion
of having hidden class is getting us, is now we can
make property access really fast through inline caching. So this is a classic example
of a bad idea. So I have another constructor. It’s creating a vector object. It’s adding an x and y. But then, after I go through the
trouble of doing that, I decide that I now wanted
property z on this object. The problem with that is that
if you add a property z to that object at some future
point, if you just dynamically do that, you’re going to change
the hidden class of the object, which means that all
this nice caching you’ve done and building up a notion of
where the properties are, that’s just blown away
because now you have a new hidden class. You have to pay to build the new
hidden class, and now you have to deal with a
new hidden class. So one of the best things you
can do to make your code efficient is to create a
few well-defined types. Don’t do a lot of dynamic
property adding and removing outside of constructors. Pretty much set things up once,
have them look alike so that they can share the same
hidden class, and don’t mess with the properties they have. So now we know an object
has properties. Those properties can be in
different storage states. So the first state, the default,
is that they can be stored directly in an
array on the object. That’s great. That’s fast. That’s where
you want to be. A second state they can be in
is being stored in array off the objects. Still great. Still an array. No problem. The third case, which is the
one you really have to look out for, is when they’re
stored in a hash table. So much like just the array case
in general where arrays can have different types of
backing storage, properties can have different types
of backing storage too. So properties can either be in
normal mode where they’re stored as an array or a
dictionary mode where they’re stored as a hash table. And if you have an object in
dictionary mode, it’s going to be much slower to
interact with. So you don’t want that. So what triggers dictionary
mode, and how do you avoid it? Well, one thing that triggers
it is too many properties. So if you have so many
properties that they won’t fit into the internal storage for
properties, then you have to have a hash table elsewhere. And that number of too
many properties is somewhere around 30. It’s quite generous, but you
might hit it in some cases. The other things you can do to
confuse your object and kick it into dictionary mode
are to change the properties on that object. You can change the attribute,
you can delete properties, that kind of thing. Those things are all going
to kick you straight to dictionary mode. Again, and now you’re going to
make your object much slower to interact with. So that’s object storage. And we have a general idea of
what we want to do, which is pretty much create repeating
common stable structures in our code, not change them too
much so we can do all our nice caching and stuff. Now, we’re going to talk about
the optimizing compiler which is how you really make
JavaScript fast. So the optimizing compiler is
the second of two compilers. Remember, we had the
just-in-time compiler first, which is doing its best to just
make the translation from JavaScript to native code
as fast as it can. And then, we have this other
compiler, the optimizing compiler, which is actually
going to look at that code that’s generated and try to make
it really good fast code. So because JavaScript doesn’t
give you any language to tell V8 what you’re intending, the
only thing that the optimizing compiler can do is sit back and
watch your system as it warms up and try to infer
structures in your code. It’s going to watch
what you’re doing. It’s going to watch for what
types are where and how the data is flowing through it, and
then make inferences about the kinds of optimizations
that it can do. So this is a costly operation,
which is why we don’t actually just try to optimize
everything. The system only tries to
optimize functions that have been deemed to be worthwhile,
and that decision is made from a profiler thread. So when Crankshaft, which is
the name of V8’s optimizing compiler, spins up, spins up a
profiling thread to watch for what functions are hot, when
it sees a function that it thinks should be optimized, it
then looks at the type data it’s collected so far. So it’s like, ah, this function
seems to take ints all the time. And it seems to return this
kind of data, and so on, and so forth. And using that type data that
it’s collected, it can do all sorts of optimization. It can inline code. It can do loop invariant
code motion. It can do all sorts of
optimizations and specialize on those types. Then, it can take the new
optimized fast path code it generated, do on-stack
replacement to just swap it out in place, hold on to the old
slow code, just in case it needs it later, and continue on
executing without anybody knowing the difference except
for that the code is much, much faster now. So the optimizing compiler is
really the heart of what will make your game JavaScript
performant. And you really need to be
working with this system to try to play nice with it. So what kind of structures are
optimized by Crankshaft? Well, I’ll tell you,
not everything. Not everything is an eligible
construct in your JavaScript for optimization. When Crankshaft looks at a
function, it’s like, ah, I want to optimize that. It starts trying to
optimize the code. And then in the middle, it hits
something that it can’t actually do. It finds something that
it can’t optimize. That’s a condition
we call bailout. Bailout means I tried
to optimize this. I tried for you, but actually,
I couldn’t do it for some reason. So I’m just going to not
try to optimize that. And there are a number of things
that cause bailouts. And they actually change
a good deal. So one thing is that functions
are too long. Functions that are really,
really long are not candidates for optimization. This is an interesting case
because some of these tools that try to make your JavaScript
fast, like post-processing tools, like
closure, some of those in some cases do such aggressive
in-lining that they create these giant functions. And then, those giant functions
are no longer candidates for optimization
by Crankshaft. And so they actually make the
code a good deal slower. I’ve seen this happen. So when I see function too long,
you probably wouldn’t write it, a function
that long. But something that’s post-processing your code might. So you should keep
your eye on it. And other than that, there are
just a number of specific cases that can’t be optimized. If you want to see what’s
being optimized and what isn’t, you can use these
two handy V8 flags. You can use trace-bailout,
and trace-opt. Tract-bailout will spit out
the function names of what things are bailing
out and why. Trace-opt will tell you what functions are getting optimized. So I have a bunch of specific
output from trace-bailout. These actually came from a
recent trace that I ran. And you can see, this
sort of makes sense. They’re very readable– tryCatch not supported,
Forin not supported, NonStringToString
not supported. I debated a lot putting
them on the slide. I wanted to put something up
here as representative. But just know that these are the
types of things that will change, like the V8 team is
trying to optimize this. They’re trying to handle
more cases. So just keep checking in about
what in your code is bailing out and what is working
well, and keep watching with the flags. So the thing is, all those
wonderful optimizations that Crankshaft made for you when it
does successfully optimize functions are speculative. They are based on the
information that Crankshaft has at the time they are made. So again, the way Crankshaft
works, it just watches the system. It infers what patterns
are where. It sees what the types kind of
are, and then, it tries to specialize based on that. So if your code always did
things a certain way, it always passed this function
ints, and then suddenly, it’s like, nah, I want to pass this
function objects or strings or whatever, suddenly, the
assumptions that were made to optimize that code
are violated. And that results in something
called the deopt, which is where we have to take that slow
code that we kept around just in case and swap it back
in for the fast code. And deoptimizations
are really tragic. They’re sort of a double fail. Because you paid to optimize the
code, which was expensive. And you paid to swap it in. And then you paid to swap
it back out again. And now, you’re running slow
code again on a function that Crankshaft thought it
should optimize. So you really don’t want
deoptimizations. The way you tell whether your
code is deopting is using another handy flag in
V8– trace-deopt. And that, again, it’ll
tell you the names of the functions. It’ll output them to stdout,
the names of the functions that are deopting and why. So keep an eye on that as
you write your game. So in general, what you should
be taking away from all this is that JavaScript, it’s
this wonderfully elegant dynamic language. So once you get used to it,
you can do all this stuff which is very JavaScripty. You can dynamically add
properties and take optional arguments to functions and
use closures in this very elegant way. Whenever you see something
that’s really dynamic and really JavaScripty, you should
be a little bit suspicious, because, just because you’re
not writing native code, doesn’t mean that someone isn’t
writing native code. Remember that Crankshaft is over
here watching what you do and trying to figure out what
you mean, trying to infer from your program’s behavior
what you mean. So if you keep changing what
your program does, it can’t help you optimize. So the more type stable and
predictable and C-like you can make your code, the better
you’re going to be. So again, that’s a
rule of thumb. JavaScripty JavaScriptisms can
be fast. But if you want like a hard-and-fast rule, the more
like C it is, those things are likely to be faster. So in terms of other rules, so
create a few well-defined object types. Don’t add way too many
properties to objects. Keep it reasonable. Don’t start changing the data
types your functions take. Try to make things type
stable and C like. Don’t use functions that
are way too big. And in general, just as you
develop, keep an eye on what’s going on in V8. Profile occasionally with
trace-deopt, trace-GC, trace-bailout, and see what’s
going on and just keep an eye. Now the last thing. We’ll talk about the
garbage collector. So JavaScript, of course, is a
garbage-collected language. And garbage collection hitches
are one of the very first performance problems I hear
people complaining about. When people write large-scale
JavaScript systems, one of the first things they come back
with is like, wow, we’re getting this like sawtooth
performance curve. What’s up with that? And that’s the garbage
collector going. So V8’s garbage collector is
a precise, incremental, generational garbage
collector. Of all those adjectives, the
one you really need to care about is generational, which
really just means there are two areas of memory,
two or more. There are actually more. But two areas of memory for
all intents and purposes. There is a small
area that’s for really short-lived objects. And then, there’s an area for
objects that are going to live a long time. And if you want to see what’s
going on with the garbage collector, you could run again
a handy dandy V8 flag– trace-GC. And that will spew a bunch of
information about what’s going on with the garbage collector
for your perusal. So if you’re trying to make
an application that is garbage-collector friendly, one
of the things you should be aware of is that promotion
is expensive. So again, we have a generational garbage collector. So we have a young generation
and an older generation. And the promotion of objects
from the young to the old generation is expensive because
you’re actually copying an object out of one
area of memory into another area of memory. So one of the worst things you
can do is you can have an object that lives just long
enough to get promoted, and then you forget about it. So you want, in general, either
objects that are going to live a very short time or
objects that are going to live a very long time. Medium-lived objects, you’re
kind of wasting some time promoting them. The other thing you need to be
aware of is that in a system that is garbage collected, it’s
very important that you release your references
to things. Pretty obvious, except for that
in JavaScript, you can have these large systems that
are sort of hard to tell what’s going. Also, there are some tricky
things in JavaScript that can hold on to references for you. So for instance, execution
contexts and closures can both hold onto references
for objects and not let them get collected. So you need to be a little
careful with your JavaScript. Keep track of where all
your memory is. And then, the number one thing
you can do to make a garbage-collector friendly
application is to not generate garbage. And that will help you
avoid GC stalls. So the difficulty with that is
that most things are objects in JavaScript. Temp variables, closures, all of
this other kind of stuff is JavaScript. Very few things aren’t. Small ints, for instance,
are one thing that is an immediate value. So that’s another really good
reason to use small ints. Other than that, good rules of
thumb are to use scratch pads, sort of reuse variables between
functions, and to update things in place
where you can. So, for instance, this is an
example of a classic bad idea. So it’s just a simple
vector add function. One of the first things
you’re going to need is a math library. You might think that this was a
good way to write it, except for that this actually allocates
a brand new vector object every time you try to
do a vector add, which is going to be often. So that’s going to be really,
really garbage-collector unfriendly. This is a much better
way to write it. I actually much prefer
the first syntax. But this is a much better way to
write it in the context of a garbage collector where
you actually add to the first vector. You just update the first
vector in place. You don’t allocate
a new object. So this is going to
work a lot better. Subtle point here is that if
you’re working with doubles again, you might be boxing and
allocating new heap numbers. So this might create
some garbage collector pressure anyway. But it’s still going
to be much better. So now you know how to write a
high-performance JavaScript application. Or hopefully, you have some
intuition as to what might be fast, what might be slow, and
how to check whether things are going well or not
in your JavaScript. That’s awesome. Now, we have to take that
application and put it Chrome in the context of Chrome
where all this other stuff is going on. So let’s talk about that. So first of all, when you’re
in Chrome or when you’re in any browser, it’s just very
different than being on a PC or a console. There’s a lot of stuff
you don’t know. You don’t know what
browser you’re in. And different browsers, they
have different performance profiles for different
operations. And also, they support
different HTML5 API. So every single thing you do,
you need to check whether it’s supported here. You don’t know anything about
the local hardware. And this is a really hard one
for people to get their head around how important this is. Most game developers who are
coming from the console PC space have never had to deal
with a range of hardware so broad as you have
to for the web. Everything from a five-year-old
phone to the latest and greatest desktop
system of today, that’s the range of things that
can run HTML5. And so you can get these huge
performance differences, which means that it’s very important
that you do a lot of checking in your code about what the
local system can handle. Another thing you have
to know is that your game lives in a tab. What does that mean to you? It means that that tab can
actually close at any time. Now, this is always true. If you’re writing a console
game, the user can walk up and hit the power button
on the console. That’s always an issue, except
for that the way people interact with tabs in a browser
is far more ephemeral. It’s very normal for somebody
to be playing a web game and then be like, oh, I want to
check email and just close that tab down. And this is important for you
to know, because if you’re writing files to local cache or
something like that, you’re going to have to be very careful
that you’re ready to be shut down at any time. There might be other
applications running in your same thread. Here, I’m talking about
Chrome specifically. So you might not have the whole
thread to work with. And there’s this other
compositing and rendering cycle that’s going around your
game that’s making the whole web page itself. And so you need to fit
into that as well. So let’s talk about this
local hardware thing. So you know nothing about
the local environment. And I know I just said
this, but I really can’t stress it enough. Because of privacy concerns,
there’s nothing in JavaScript that allows you to ask detailed
questions about a user’s local machine. So there’s no way that
you can ask what kind of hardware is this? What can it support? So you’re just in charge
of being able to scale on your own. And in the PC world,
this is not a problem because PC games– console games don’t have this
problem to begin with. PC games specifically say
on them what the system requirements are. And everybody’s used to that. Everybody’s happy with that. On the web, people have this
expectation that everything be lowest common denominator,
which is a blessing and a curse. I love that you get broad
distribution. However, it makes it really
hard if you’re trying to target the high end. And so what you can do that
this is just be very, very clear with your users about
how your game will run on their machine. The last thing you want is to
have your users buy your game from some web app store, the
Chrome Web Store, for instance, and try to play it,
and then find that it doesn’t run, or it runs at 5 FPS or
whatever, because they’re running on very old hardware. And then, they give you
a one-star review. They’re like, this game sucks. I can’t run it. So you really, really need to
be communicating proactively with your users about
what they can expect from your game. I can’t stress that enough. It’s like really important
for end-user experience. Also, if you can, you want
graceful degradation where it’s not just a binary thing. You want to be able to make your
games gracefully scaled down to fit on lower-end
hardware. So one thing you can do
to that end is micro benchmarking. And so this is where
you, yourself– again, it’s all home brew. Nothing in the JavaScript
standards helps you. But you, yourself, write little
benchmarks that stress what your game is going
to stress and collects data about that. So maybe, during your loading
screen, you run a bunch of tests, get a feeling about what
the local system is, and then suggest settings or send
that data back to your service for analysis. Or while the game is running,
you see what the FPS is and adjust accordingly or take
data accordingly. But you really need to
be proactive about collecting this data. And that’s pretty much it for
dealing with the hardware variation you’re going to
find in HTML5 games. Collect data, communicate, and
make sure, above all, that you set your users’ expectations
appropriately. So up until now, I’ve been
talking about HTML5 specifications. I’ve been talking about how to
make JavaScript fast. Those things all live within V8. So here, we’re talking about
things that live in V8. Let’s talk about what
goes around that. So V8 lives in WebKit alongside
CSS and HTML. So the same way V8 executes
JavaScript, there’s another machine for HTML and another
system for CSS. All of those things
live side by side. When they want to render things,
any one of those things can send commands
on this RPC buffer to the GPU process. All rendering in Chrome is done
in a separate process entirely, not just a separate
thread, a separate process. And it’s done on a separate
process for security reasons. And so this structure is very
important to understand because you’re sharing this
RPC buffer with everything else that’s trying to
render anything. Then from the GPU process, it’ll
actually communicate with the drivers and the
hardware itself to do the actual rendering. But there are a couple of
additional pieces of complexity here. One is that on Windows where
you don’t have good OpenGL drivers, there’s this layer
called ANGLE, Almost Native Graphics Layer Engine. And that will do a translation
from OpenGL to DirectX. And then, there’s this other
translation layer called SwiftShader. So on machines that don’t have
good drivers or drivers that are good enough for WebGL,
SwiftShader will actually do software rasterization. So there’s all this complexity
from your game on down into the actual rendering. So let’s talk about that. So first, let’s talk about
the RPC buffer part. So if you remember way back
when I was talking about WebGL, I mentioned that
certain commands have unexpectedly slow performance. And those are anything that
starts with “read,” anything that starts with “get,” these
things that require round trips to the GPU. And now that you understand that
there’s an RPC buffer in there and rendering is done on a
separate process, I’m hoping that you’ll have some intuition
for why that is and what sorts of command
might be slow. So besides that, the other thing
you have to know about that buffer is that
it’s shared, and it’s limited in size. So there’s a specific size
limit on that buffer. And all the resources that you
upload to the GPU are going to eat up that size. And it’s total size of
resources, not total of number of resources. But all your textures, all
your buffers, all your commands, they’re all
going to go into the budget for that buffer. And if you go over that buffer
size, then you’re going to trigger something called a sink
flush, which is slow. And it’s going to amount
to a stall. So that means that you’re trying
to send another command on that buffer. But the buffer is
already full. And so the buffer is like,
ah, no room for that. So I have to stop and actually
process through the whole thing, have to flush everything
out before I can process this new command. And what that’s going to look
like to you is that suddenly, one of the commands you’re
sending to OpenGL is going to look like it takes a really
long time for no reason in your profiling view. You’re like, wow, that command
was always perfectly fine, and now, it’s taking 40
milliseconds. And that’s because you spilled
the buffer, and you triggered a sink flush. So really, the only thing you
can do here is try to amortize the cost of uploading
across frames. So just try to limit what
you do per frame. If you see these big stalls, you
can have an intuition that you’re probably or might be
spilling that buffer and act accordingly. One note here is that when I
talked about this with the Chrome GPU team, they said yes,
this is true for now. This is good information. But this is something
that’s subject to change in the future. So keep checking back in
with this assumption. Hopefully, this will get better,
that this problem of causing sink flushes won’t be
a problem in the future. But for now, this
is good advice. So now, let’s talk about the
close to the hardware type part of the system. So what do you need to
know about drivers? Really just that they’re
there, and that not all drivers are secure. Not all drivers are stable
for use with WebGL. And that means in order to
keep people’s browsing experiences secure and stable,
that many or some drivers are blacklisted. So sometimes, people running
on a computer that is perfectly a– computer and
browser perfectly capable of playing your game will not be
able to use WebGL because their drivers are blacklisted. And unfortunately, the only way
to test whether the local machine is capable of running
WebGL is by actually trying to create a context and
seeing if it fails. So the first thing you do when
you’re making a WebGL application is make
a WebGL context. And you really just have to try
it, see if it works, and then handle accordingly. There’s no more elegant
way than that. The other thing I mentioned is
this Almost Native Graphics Layer Engine, which in response
to the fact that, in general, DirectX rendering works
better on Windows than OpenGL rendering, or rather,
OpenGL drivers for Windows tend to be somewhat buggy or
unstable, there’s this layer called ANGLE, which will
translate your OpenGL calls into DirectX before rendering
on Windows only. Hopefully, you never need
to know about this. It’s just sort of trivia. But it’s good for you to know
that it’s there just in case. And then, finally, we
have SwiftShader. Again, this is software
rasterization. So if you have a system that’s
capable of running your game, but for some reason, their
drivers don’t work, then you might get SwiftShader,
SwiftShader software rasterization. Now, this is just another case
where you’re going to have to be really proactive about
judging the performance of the local machine, because, of
course, software rasterization is going to be nowhere
near as performant as hardware-accelerated OpenGL. So you need to be really careful
that you’re catching these cases, and testing the
performance, and degrading appropriately, or informing
the user appropriately. Again, you never had any
guarantees about software rasterization or not. It could always have been a
10-year-old graphics card. Now, you have software
rasterization in the mix. That just hammers home that
point a little bit harder. So let’s talk about your
rendering loop for your game. So old-style JavaScript, the
way you would do periodic function calls are with these
two methods, setInterval and setTimeout. But the problem with those is
that there’s no way to tell the browser what you’re doing. And again, much like we were
seeing with the V8 case when we were talking about performant
JavaScript, performant rendering in general,
being performant in general, is about being able
to inform the system what you’re doing in specific
terms so that it can optimize around you. SetInterval and setTimeout are
not specific about what they’re doing. They could be doing anything. We don’t know that this
is an animation. So the browser can’t do
anything to help you. And that’s why they’re
bad ideas. Instead, there’s this nice API
in the HTML5 family of APIs called RequestAnimationFrame. And this is a way to do periodic
rendering in a way that tells the browser exactly
what you mean. So RequestAnimationFrame will
try to call at 60 hertz, and it’ll adapts down if you can’t
actually call at 60 hertz. It’ll never call faster
than that. But it’ll call slower
if it needs to. So because the
RequestAnimationFrame callback is always going to be scaling
its performance to how long your frames are taking, if you
can’t run at 60 hertz, then your frame rate’s going to go
a little jaggy, because it’s going to be based on how long
one of the recent frames took. And so if you don’t want your
frame rate to wander, you need to clamp it to either
60 or 30. If you’re trying to clamp your
frame rate to 30, what you do is just the simplest
thing possible. You’re just going to manually
skip frames by making a counter that counts up, and you
render on even frames and not on odd frames,
or whatever. So that’s what you want to do
if having a jaggy frame rate bothers you. And the other thing that
RequestAnimationFrame can do for you, because it knows that
you are animating, it can feed Chrome’s rendering pipeline
with your data at a consistent rate. And it can adapt the work you do
on the GPU and CPU to make sure that you’re not just
throwing a bunch of commands over the wall that you could
never possibly render on the GPU, that you’re not totally
swamping everything. That’s what RequestAnimationFrame gives you. So this is a typical
game loop. You have update, render, swap,
update, render, swap. That’s pretty normal, you know,
while true, do this. That’s a game. This is the way it
fits into Chrome. So you have
RequestAnimationFrame, which is your JavaScript code. You have composite, which Chrome
takes care of that. That’s where everything is
smooshed together and rendered on the screen, and then, you
have a swap as well. So that loop is going on if you
have the main loop of your game in there. If you didn’t have that, the
browser would just go back to idle and sit idly. User input can also cause a
screen dirty, which causes a composite, which causes a swap,
which then either goes back to idle or goes
back into your RequestAnimationFrame loop. So now, let’s talk about
the life of a frame. So the way frames work in
Chrome is that we have RequestAnimationFrame calls. So first thing that’s done is
that your JavaScript in your RequestAnimationFrame
call is executed. And during that JavaScript,
it’ll kick off a bunch of calls that result in commands
on the GPU. So you’re going to kick off
commands down that RPC buffer that are going to go on to this
other rendering process. When all your JavaScript is
completed, and all your GPU work is completed, you have all
the information you need, so you can composite the whole
frame together, and you could do a swap. So that’s the general cycle. You do your JavaScript
callback, which kicks off your GPU work. When all that’s done,
you can composite. And then you just wait out
the rest of the frame. If your frame is under 16
milliseconds, it’ll just wait until the next call of
RequestAnimationFrame. So yes, it just keeps
on like that. So in that diagram I showed
you before about how all things fit together, one thing
I left out is user input. So I want to talk a little
bit about user input now. One really important thing you
need to know is that while your main JavaScript thread
is busy, input is queued. And that can introduce
a lot of input latency into your code. So let me talk about how
that actually works. So here we have a diagram
similar to before, so it’s showing a series of frames. First, you do your
JavaScript work. Then you do your GPU work. And you just keep doing that. If during my JavaScript work
I get a bunch of mouse move events, I’m not going to
hear them right away. I can’t hear them while the
main thread is busy. And they came in when the
main thread is busy. Once the JavaScript execution
is done, you’re eligible to hear a mouse event. So here, in this case,
I’m going to hear this most freshest– most recent, freshest
mouse click. Then during the next frame,
now I’ve got a m event. Now I’m eligible during the
next frame to process that mouse event. And then at the very end
of the next frame when everything’s rendered, the
result of that mouse input can get rendered. And so you can see, especially
with this queuing delay, where if events come in while the main
thread is busy, they just get queued up, and you can’t
hear them until later, you can have a lot of input latency. The rule of thumb is that your
input latency is going to be approximately twice
your frame length. So if these are 16-millisecond
frames, then the maximum input latency you can get if you’re
unlucky is 32 milliseconds, which is a hell of
a lot of latency. But that’s sort of the system
that you live in. So you just have to be ready
to deal with that. The other thing you can do to
help yourself is to move work off the main thread. So moving work to
the GPU is good. Moving work to web
workers is good. Anything that helps you free up
the main thread to be able to receive user input
is good for you. So one more thing to talk about
user input is that one of the really important things
that RequestAnimationFrame does is it allows Chrome
to schedule your work accordingly. So again, we see the same
simplified version of the diagram we’ve been looking at
where you have your work, and then Chrome’s work,
and then wait. Your work, and then Chrome’s
work, and then wait, and so on, and so forth. This all makes perfect sense,
nice repeating pattern. But when you have outside
events, DOM events or timers, or things going off that cause
things at unexpected intervals, Chrome no longer has
the ability to schedule those things. They just happened
in on events. So in this case, on the slide,
I got this on-click event. It required some work. That processing all would have
fit in this frame nicely. But because Chrome didn’t know
about that work, it couldn’t schedule, it which means that
this frame is actually going to be delivered late. It’s going to wait for that
on-click event to complete. It’s going to deliver
the frame late. And then, the next frame, frame
N+1, is actually going to have a shorter time
in which to execute. So what this means to you is
essentially never do any work outside of
RequestAnimationFrame. If you want like a DOM-based hub
over your WebGL game, what you really want to be doing is
buffering up all user input and then handling those
user inputs in the RequestAnimationFrame
callback. You don’t want to just handle
them whenever they come in. Because you have to think about
how Chrome is actually scheduling the work. You have to give Chrome a chance
to pack that work in nicely, which means that you
have to actually do any processing you want
to do inside the RequestAnimationFrame
callback. So just in summary of what we’ve
learned about living inside Chrome, first
of all, throttle your upload per frame. Watch out for big performance
stalls. Those are probably
sink flushes. And they mean that you’re
uploading too much data at once essentially. Your game lives inside Chrome,
so you have to respect Chrome’s natural rendering cycle
and have to be prepared to give 2 to 4 milliseconds per
frame to Chrome for all the compositing and swapping
and finalizing that Chrome needs to do. So you don’t actually have
16 milliseconds. You actually have 12. Hopefully, it will come in under
4, but you have to be prepared to give
that much away. Never handle outside
events directly. Never handle user events
directly in events. Make sure you queue all the
work you need to do up and handle it in RAF. All the work you do should
be inside your RequestAnimationFrame callback
if you want Chrome to be able to schedule it nicely. And then, if you’re concerned
about input latency, if that’s a big deal for you, then the
best thing you can do there is move work off your
main thread. Move it to the GPU, move it
to Web Workers, whatever. Just know that the input is
blocked or queued while the main thread is busy. And that’s just going to imply
some input latency for you. So in general, all this amounts
to be aware of what Chrome is doing and how you
fit inside it and try to work with that. So we’ve talked about how to
write fast JavaScript. We’ve talked about how to make
that JavaScript work well inside of Chrome. And now, just in the short time
I have left, I’m going to talk about the developer tools
you need to check how well you’re doing. So first of all, just be aware
that Chrome’s got all these handy dandy flags. So you can type about and then
a number of things different into Chrome to get
some cool stats. So there’s about:flags, which
has a lot of graphics options, including an FPS counter,
which I essentially just perpetually leave on. There’s about:memory, which
shows you exactly what’s going on with memory in Chrome. It’s a very in-depth
detailed view. There’s about:gpu, which is
useful for figuring out what Chrome thinks your
GPU stats are. Or if you’re taking bug reports
from external people, it’s really nice to get
them to dump that data and give it to you. So these are all tools you
should be aware of. Then we have the Chrome
developer tools. So the Chrome developer tools
are really, really useful. They were designed. or
had been used most often on web pages. They’re really, really
great for web pages. They’re also good for games,
but they’ve been optimized around that case. So for instance, the CPU
profiler only take samples every 1 or 2 milliseconds. So it’s a lot less resolution
than you would want. But they’re really good
for some things. So how you get to the developer
tools, there’s a wrench icon up in the upper
right hand of Chrome. Then you go to the Tools menu,
go to Developer Tools. And the things you should be
aware of there are the timeline view, which completely
rocks for trying to see how your resource
loads are going. That’s the thing that I find it
most useful for, is seeing where resource requests were
made and how long they took. There’s the CPU profiler,
standard profiler. Again, resolution a little
low, but it still can be really useful. And then there’s the heap
profiler, which is a super useful in-depth look
at exactly where all your memory is. So those are the tools that are
most important, I think, of the Chrome developer tools
for game developers. And then, there’s
about:tracing. So about:tracing is the heaviest
weight tool you should be aware of in Chrome if
you’re actually trying to debug a game. So this view that’s on the
slide, pretty confusing the first time you look at it. Every one of these colored
lines, colored vertical lines, represents a function call
that’s instrumented. And so this actually gives you a
list of all the instrumented function calls on every Chrome
process, so for every open tab, as well as calls
for the GPU. So this is the tool you’re going
to look at if you’re going to want to see how
your CPU work and your GPU work relate. This is what’s going
to be useful. If you zoom way in on that view
I just showed you, you can see that each one of those
colored boxes, actually, you can see a function name in it. And that function name
data is really raw. Again, it’s right out
of the source code. So if you don’t know what draw
layers means in this particular context, then
that’s too bad. But you can kind of look at the
function names and make educated guesses about
what they mean. And then the really useful thing
you can do with this is that from JavaScript, you
can add console.time and console.timeEnd tags with
your own string tag. And that will create a colored
box in this view, just like all the other function calls
that will manually instrument a function call for you. And you can see exactly where
your function call happened within your frame. So this is a tool you
definitely, definitely want to be aware of. And then finally, I know I
mentioned this in the section about JavaScript, but you really
should be checking your code with V8 flags. Unfortunately, this information
about what JavaScript is fast and
slow isn’t surfaced really well to the user. It’s all sort of at
the command line. But it’s very, very important
information. And so I also put up
here exactly how to run this for a Mac. It’s not really friendly being
on a slide, but I wanted people to have these slides
after the fact as reference to be able to refer to it. So that’s actually a call you
can cut and paste into your Mac to make this happen. And then finally, there’s
WebGL Inspector. So WebGL Inspector is an
open-source Chrome extension which patterns itself after
PIX or one of these other heavyweight graphics debugging
tools that people in the games industry especially are
really fond of. So if you want to step through
your draw calls or see exactly how your textures are bound
something like that, WebGL Inspector is going to be very,
very useful to you. So you should definitely
check that out. And then finally, one more note
before I’m out of time. I just want to stress
that we really, really, really want feedback. It’s not at all knowing or
unwelcome to file bugs. It’s really welcome. I really, really look forward to
working with teams that are verbose about what they want. And they file bugs in Chrome. And they sort of squawk a lot
about what’s working and what’s not working. So please, please, please,
when you find things that don’t work in Chrome, or things
you’d like to work better, or features
you want, please log things into crbug.com. That’s the Chrome
bug database. Or if there are features you
want in WebGL or in any of the HTML5 specifications, please go
to those mailing lists and talk about what you need and
what your experience is. The community is not so large
that you can’t make a difference. Really, the decisions are made
by the people who show up. And you are really capable
of influencing what actually gets done. So please, please, please
email those mailing lists, file bugs. Everybody really wants
to hear from you. All right. And that’s it. Thank you very much.

How To Add Plugins To FL Studio (+ Sample packs)

How To Add Plugins To FL Studio (+ Sample packs)


When you download a new plugin, it can be
a bit tricky to figure out what folder to put it in, and where to find it when in FL Studio. This video will show you where you can be
installing your plugins and how to start using them. Stick around, I think you’ll like this one. [How to add plugins to fl studio]
[how to add sample packs to fl studio] Hey everyone, Jake from Transverse Audio here. The first thing I want to mention is that
I made a playlist for free software including synths, orchestral plugins, effects, and even
free DAWs. You can find it in the card on the top right. Now, when you install a new plugin, it will
typically prompt you to send it to one of the following locations. In your C: drive under program files, it might either go to the Steinberg folder
or the VSTplugins folder. It could be in the same folders under program
files (x86) as well. My plugins, they’re all over the place, but
they don’t have to be. When you install your plugins, you can just as easily send them all to the exact same folder. Now, once you figure out what folders your
plugins are in, go in FL Studio and up to Options and down to Manage Plugins. This window will allow you to scan for new
plugins and even drag and drop the plugins you have already into your project. On the plugin search paths menu to the left,
click the add folder button and navigate to the folder you want to have FL Studio scan. After doing this for all of your folders that
have plugins in them, you can go ahead and press Start Scan. After the scan is complete, go to the browser
on the left and to the Plugin database. Go to Installed and depending on what you’re
looking for, go to Effects or Generators (generators being synths or instruments). Under New, you’ll be able to find all of the
plugins installed in your last scan but you can find the rest under the other folders. Now you can go ahead and drag and drop them into your project. Now, adding sample packs and sound libraries
into FL Studio is a very simple process. An easy way to figure out what folder you
need to move the sounds into, is by right clicking on “Packs” and clicking open. Once you’re in the folder, you can just drag
and drop your sounds into this and they will show up in the DAW under Packs. That’s all there is to it. If you liked the video be sure to subscribe
and hit the bell button to be one of the first to know about new uploads. As always, thanks for watching.
[Share the video on Twitter or Facebook!]

Tenali Rama – Ep 630 – Full Episode – 2nd December 2019

Tenali Rama – Ep 630 – Full Episode – 2nd December 2019


All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. What happened?
Let us go. All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. All hail King Balakumar!
– Hail King Balakumar.. Help! I am warning you! Look even I have a sword.
I will also attack you. Prime minister, he is the one
who had attacked me. Save me, Minister.
Minister, save me. What are you waiting for?
Hold Pandit Ramakrishna captive. Your Highness,
when did I attack you? No..
You did not attack me. When did I say so? Why are you holding him?
Leave him. Come on! Your Highness, it is possible that out of panic you are unable
to recognise him and he is indeed the attacker. Now tell us if he has attacked
you we will hold him
captive right away. No, Acharya Tathacharya.
I am telling you that he has not attacked me. The one who had attacked me
was a Portuguese. Right, Prime Minister?
He was a Portuguese, right? Your Highness.. What is the matter,
Your Majesty? Please gather yourself.
– Why should I? Why should you?
Act courageously and please be seated
on the throne. Fine.
– Let us go. – Okay. Do not worry, Your Highness. As long as I am around, no harm
will ever come to you. ‘You will be around
and there will be trouble.’ ‘And His Highness
will also get harmed.’ Begin the proceedings
of the court. Your Highness, we have received a strange case today. No matter how strange it is,
the truth cannot escape my eyes. I have found
the solution to it. Acharya, let the case be
presented before him first. Calm down.
I am about to present the case before him.
I am about to do that. You two please step forward.
Please come. Hail His Highness! Your Highness, he is Ram
and he is Shyam. Ram is the elder brother
and Shyam, younger brother. Ram works in another kingdom and Shyam makes a living
by doing farming here. But what is the case? I am coming to that,
Your Highness. I was just giving
the introduction. Your Majesty, their father
is no more. So, as per the social
and judicial practice elder brother, Ram has the right
over their father’s fields. But Shyam does not
want to give him the rights of the fields. What!
How can he deny it? As per the social and judicial
practice the fields should
belong to the elder brother. This is the solution even I had
come up with, Your Highness. Fine.
Both of you may leave now. This case ends here.
Begin the next case. Pardon me, Your Highness. With your permission,
I wish to say something. All right.
You have my permission. Your Highness,
it is a great pity that in today’s world
humans have changed a lot. The relationships have changed. The brothers have turned
into enemies. All the relationships
have faded in front of greed. The society is heading
towards doom. Cunningness and corruption
have become firmly rooted. The sad part is also that our
social and judicial practices are encouraging them.
– Pandit Ramakrishna do you mean to say
that the social and judicial practices
are wrong? That they have no relevance? I never meant that, Acharya.
And kindly let me complete. Fine. – Your Highness, you heard
one side of the story. Let me narrate the other side
of the story. In order to fulfil his ambition leaving his aged and sick father Ram went to another kingdom
to trade and he even
became very wealthy. Whereas Shyam, in the absence of oxen ploughed the fields himself and grew crops. He not only
took care of his family but also got his ailing father
treated. He served him as well. And now when their father
is dead Ram has come back
to take over that farm. So, Your Highness,
in such a condition if the fields are handed
over to Ram it will be injustice. Injustice? Pandit Ramakrishna,
one is subjected to injustice when he is denied justice. Justice is denied when there
is no judicial procedure. But Vijayanagara
has a judicial system. And justice is done
accordingly. The same procedure
will be followed here. So, Acharya, there could be
flaws in the judicial system. Pandit Ramakrishna,
what do you mean? Do you want to say that
Vijayanagara’s judicial system is imperfect! That means, His Highness who made these rules,
is wrong? Does that mean His Highness
does not know about justice
and judicial practice? I did not say that. ‘I can notice
something strange’ ‘in the argument between
Tathacharya and Ramakrishna.’ Pandit Ramakrishna,
you have been constantly questioning the judicial
system of Vijayanagara. What do you mean after all?
– What will he say? What will he say? Your highness,
if because of one person we take a decision
ignoring the judicial process then all the other people
will lose their faith in the judicial system
of Vijayanagara. Everybody will start questioning the judicial system
of Vijayanagara. Your Highness, please do not
pay attention to what he says. He has grown old now. He does not know
what he is saying or doing. Acharya Tathacharya is right. For the sake of one person
our judicial system cannot be changed. Thank you, Your Highness. Your Highness, your decision
will be final. But before taking a decision just give me a chance
to ask a question to both of them. Pandit Ramakrishna do not waste our time. Acharya Tathacharya. Pandit Ramakrishna,
you have my permission. Go ahead.
What do you want to ask them? Thank you, Your Highness. So, my first question
is for you. Tell me how much is left, if we
subtract 4 from 12? – Eight. So, according to you if we subtract
4 from 12, the answer is 8. Fine. Now, Shyam I ask the same question
to you. How much is left, if we subtract
4 from 12? Pandit Ramakrishna even a child can answer this. Acharya, the person
whom I have asked the question let him answer. Tell me, Shyam. How much is left, if we subtract
4 from 12? Zero. Somebody teach him mathematics. Tell me, how is it zero? Yes. It will obviously be zero. Your Highness, I am a farmer. My whole life is planned around the four months
of monsoon. In the absence of four months
of monsoon season we are left with nothing,
Your Highness. Your Highness, how breathing
is important for survival the same way these four months
are important for framing. What? How is all this related
to subtraction? Your Highness, as per the social
and judicial practices.. The social and judicial
practices does not say that if someone is being
subjected to injustice then let it be! It does not even say that if the rules are flawed they cannot be amended. Acharya, if you get injured then you get yourself treated,
right? You do not say
that this is a physical injury and it cannot be cured, right? Pandit Ramakrishna,
rules are rules. And according to the rules the elder brother should get
the field. You are right.
– Yes. Both the statements. Firstly, that rules are rules and secondly, the elder brother
should get the farms. Your Highness,
since rules are rules so according to the rules hereafter the elder brother
will take care of the farm and take the responsibility
of all the family members. Absolutely. And hereafter
the younger brother will sit at home and relax
with his family. The elder brother
will work at the fields and take care of his family the way Shyam did when Ram had gone
to another kingdom. That is not done. What? That is the rule. Your Highness, as per the rules,
the eldest member of the family should work hard and take care
of all the family members. Did I say anything wrong?
– No, Pandit Ramakrishna. You did not say anything wrong. What you said is as per the law.
What you said is not against the law
but in favour of the law. Very good. Thank you, Your Highness. So, Shyam you can lead a comfortable life
with your family hereafter. Because your elder brother will take up all
the responsibilities now. No, Your Highness. I cannot do all this. What!
Why not? You have to. That is the rule. What kind of a rule is this?
That is not right. I will have to plough the field and work hard in the fields
in the burning sun. Whereas, he will
lead a comfortable life along with his family,
without doing any hard work? No, Your Highness.
I cannot do this. But that is the rule, right?
The eldest one in the family should work hard
and take care of his family. Just as your younger brother did when you had been
to another kingdom. No, Your Highness.
I do not want any field. I am happy with my business. Fine then. So, in this way, Shyam will have
rights over the entire field. So, it is up to Shyam to decide if he wants to give you
any share in the field. No, Your Highness.
I do not want anything. I just want to be free
from this case. Wonderful, Pandit Ramakrishna! Today, you have proved
once again that with your sensibility,
you will never let anyone be subjected to injustice. You have saved me from taking
a wrong decision today. Both of you, listen.
So, I am passing the judgement that the younger brother will
have the right over the field. All right? You both may leave. One more thing. If any rule is not appropriate it should be amended.
– Yes, Your Highness. Hail Pandit Ramakrishna!
– Hail.. Hail Pandit Ramakrishna!
– Hail.. Hail Pandit Ramakrishna!
– Hail.. Hail Pandit Ramakrishna!
– Hail.. ‘Tathacharya seems
to be equally jealous’ ‘as I am, upon hearing
Ramakrishna’s praises.’ The messenger of
King Bhim Singh of Vaibhavnagar is arriving! Hail to the king!
As you know the king of Vaibhavnagar,
Bhim Singh gifts Paan
to whoever he respects. I request you
to accept this Paan. That is my favourite. Give it to me. Thank you. But there must be a reason
for you to come here. Yes, there is.
There is a special reason. A Portuguese has made a deadly
attack our king, Bhim Singh. He has also threatened him
to renounce the kingdom and surrender to the Portuguese. Or else,
they will kill His Highness and rule over our kingdom. Our king does not want
to risk his life. That is why.. What?
– Our king wants the king of Vijayanagara
to govern Vaibhavnagar until we get rid of the
threat from the Portuguese. What! What.. What are you saying!
That is not done. A Portuguese
had attacked me too. What do you expect? That I walk up to the king
of Vaibhavnagar and ask him to govern Vijayanagara. That is not possible.
You may inform your king I will not do this.
You may leave. As you say, Your Highness. But, Your Highness..
– What happened? At least have the Paan
presented by our king and honour him. Sure. ‘Why is he insisting the king
to eat Paan?’ Pandit Ramakrishna! Oh, God.. You disrespected the king! Your Highness, a betel leaf
is green in colour. But have a look.
It is blue at the corner. Oh, my God! Do not move from your place! Do not even think of running! I will kill you. He ran.. Prime Minister,
why did you warn him? Why did you not make him
a prisoner? Yes.
– Pandit Ramakrishna do not try to teach me. Hey! Catch hold of him! He should not escape.
Catch hold of him! Soldiers, take the king
safely to his chamber. Prime Minister,
hold him captive. I will kill you! I will not spare you! Prime Minister! Prime Minister.. I might get attacked anytime. My brave soldiers it is your duty
to protect your king and you have to fulfil
your duty. The spear is very sharp
and the sword as well. Do this,
the soldiers with spears go towards the door
and the soldiers with swords go towards the windows. And the rest, stay with me,
to protect me. Where are you all going? No one is there behind me. Come here. All of you, come here. Surround me,
like you surround a fort. What are you looking at?
Look towards the opposite side. Yes. Your Highness. What is going on? Where is His Highness? My Queen! Your Highness, this.. My soldiers have surrounded me. Come, join me.
Quickly! Soldiers, make way. Your Highness, what is all this? I have asked them to surround me so that, no one can reach me. If no one can reach me then how will they attack me? Your Highness,
tell me something. How do you know the disguise the attacker would take? What do you mean? It is possible that the attacker
might be dressed as a soldier. No! It is possible that the attacker
might be one of them.

ThemeForest Tutorial – A Video Tutorial on Great WordPress Themes from Themeforest

ThemeForest Tutorial – A Video Tutorial on Great WordPress Themes from Themeforest


Ok today I want to talk about what is an important
part of setting up a website, particularly what I call a phase one website. A phase one
website is a website that has the foundations set up, nothing fancy, so you have got a website
that is solid, you have got a website that you can easily make changes to, you have got
a website that has the basis solid SEO and you have got a website that is responsive
which means it looks different on phones and tablets and on PCs, moulding itself to fit
the screen that it is currently on. Well the question is, how do you make all of that actually
happen, well step one is to get yourself a word press installed and the great thing about
word press is, you can see it here as I hunt it down through Google, is that word press
is free and it a contact management system that pretty much everyone uses and most of
the hosting websites, such as like GoDaddy, which is the one I have all my websites on,
allow you to install word press in a single click.
So you don’t even have to use this thing here called website builder which cost you something,
you can just do a free install of word press and you are ready to play. So once you have
got word press however, how do you make it SEO ready and responsive and all of those
other good things? Well my little short cut website is this one here called ThemeForest
I love these guys, these guys have taken all the pain out of setting up your word press
site to be responsive, to be SEO friendly and to have that lovely design foundation
and they have done this by making their word press themes, and a theme can basically involve
a design but also involves the responsiveness and can involve SEO as well. The theme is
available here on ThemeForest for really just a couple of dollars.
Back in the day when I was doing this kind of development and I look here at popular
items just for a second, when I was doing this kind of development we would spend 20-30
thousand dollars trying to develop something like this and more and now you can get it
for 50 bucks, it is just insane. So once you go to themeforest.net, you click on word press
and in this case I have just looked at popular items, you start to see all of these different
templates that they have available which are pretty flexible. I have bought quite a few
of these over time for different clients as they look through and kind of spot one they
like the look of. They are happily specific to e-commerce or mobile or entertainment or
non-profits, but I just look at the best sellers usually and this one here called Avada I have
actually bought a couple of times. So let’s have a little look at what this one looks
like, ok so just what I did there, I right click on the link and opened it in a new tab.
Ok here I am and the first thing you can see by what I mean by responsive, it looks different
on a phone, different on a tablet and different on a pc, it moulds itself to take advantage
of the real estate, that is really important. This particular one says 100% responsive and
retina ready which means you can have a different version of graphics that work on a retina
or high resolution slate or tablet like the iPads though a lot of them are now at that
resolution or above, integrate with a shopping site called woocommerce, so on and so forth.
What I like to do then is click live preview and this actually shows you this thing in
action so you actually start seeing the actual design of this thing and what you will see
it has got this thing up the top here called a slider so you can move images around and
this particular pull out that has this really nice design look, it has got various little
features, nifty things that become a look that then becomes available to you. For example
it has something called the portfolio, a lot of them have the portfolio which allows you
to list say clients maybe, let’s have a look at their grid layout so you can see here it
has this nice roll over look where you can list in this case design portfolio stuff.
You have got galleries so you can list products, you have got different versions of blogs and
headers lots of different things like contact pages lots of different options that are included
in the theme and come pretty much predesigned and of course it is flexible. So if you wanted
to, for example, change the colour of this thing from this green look here, I am going
to press this one button her, this blue one and straight away the things sort of go blue.
All the highlights are blue, all the roll overs are blue, the titles are blue and so
on and so forth. So it is a very flexible and easy to use,
responsive ready, SEO ready in many cases theme that you can buy from themeforest.net
to upload to your wordpress site and have this look and all of those features available
to you in those first moments. So I highly recommend ThemeForest, I am not affiliated
with these guys, I do not get any money every time someone buys this thing, I have just
found it to be tremendously useful to reduce the development costs of a website from thousands
or tens of thousands down to just like 50 bucks, 60 bucks some of the cheaper ones might
be about 30 dollars that really solve all of those coding problems for you. I should
give you a quick example I guess there is another one here called Silicon just to show
you how this one works out it’s just a theme here that costs $40, again I am just having
a little look at how good it looks with their demo page here, so again it is going to be
responsive and all the other things like that, I am going to hit layout so we can see it
live and you can see all the design features and this one just a little bit different it
has got that slider up the top, design pull outs, it has got this roll over system it
is their portfolio roll over system, it has got special pull out buttons like this again
you can just change the colour like pressing this button and suddenly everything goes green,
the blog post layout and that is a portfolio layout as well.
Now how does this look in real life though, this is the particular theme that lives behind
my website if we have a little look here at timlevy.net and what you will see is there
is a real resemblance, instead of having the Silicon logo, you have got my logo. Instead
of having this green, I’ve set it to blue, very easy things to do instead of for example
having multi-purpose, retina ready blah, blah as the roll overs, my one we have used the
same thing to say coaching, writing, speaking. So all I am doing is taking those design elements
and I am making them into what is relevant to my site, for example here is another portfolio
roll over, in their case it is just demo stuff in my case I use the same thing to roll over
to my books and then when you click on them it will go straight to one of those pages.
So that is how this thing looks in real life, you take one of these templates (in this case
it was a $40 one) you buy it and you upload it to your word press website and hey presto
you have got all of those design features, all of the responsiveness, in many cases SEO
as well built into your website with 0 cost well 40 bucks incredibly small costs and amazing
benefits I highly recommend ThemeForest.

3 Reasons To Stop Buying Plugins Now – BehindTheSpeakers.com

3 Reasons To Stop Buying Plugins Now – BehindTheSpeakers.com


We all love buying new plug-ins, right? But do you really need them to make great
mixes? And what if more plug-ins are actually making
your mixes worse? Hey, it’s Jason from Behind The Speakers. And in this video, you’ll learn three reasons
you should stop buying third-party plug-ins. But before we get started, make sure you grab
my free e-book, “35 Mixing Mistakes You Don’t Know You’re Making” by clicking
the link above or in the description below right now. The first reason to stop buying third-party
plug-ins is because you don’t actually need them to make great mixes. The truth is, if you’re working with one
of the major DAWs out there – whether it’s ProTools or Cubase or Logic or Ableton – you
have everything you need. Just the stock plug-ins in your DAW alone
are more than enough to make really good-sounding mixes. Now just to illustrate this point, I wanted
to share with you a demo that my friend Rob Mayzes over at Musician On A Mission put together,
where he actually mixed the same song twice – one time using stock plug-ins alone, and
I think he uses Logic, so stock plug-ins in Logic, and then one time using third-party
premium plug-ins. So let’s take a listen, and I want you to
see if you can tell the difference between these two versions of the mix. ♪ ‘Cause my routine has bled into one, ♪ ♪ I’m cruel, disgusting, and fun. ♪ ♪ ‘Cause I can’t see how it’s come to be,
♪ ♪ My desire, desire, desire. ♪ So I don’t know about you, but I can’t
hear the difference between those two. They sound pretty much identical. The moral of the story here is that you don’t
actually need to go out and buy a bunch of third-party plug-ins. If your mixes don’t sound as good as you
want them to, it’s not because you don’t have the tools, it’s because there’s some
information gap. Maybe you don’t know how to use the tools
yet, or you just haven’t put in the time and practice to develop the skills needed
to make really good-sounding mixes. So the good news is that that’s stuff that
you can work on. And you don’t have to go out and spend a
bunch of money to do it. So again, tools aren’t the answer. You don’t need a bunch of third-party premium
plug-ins in order to make great mixes. You probably have everything you need right
now. The second reason you should stop buying third-party
plug-ins is that too many plug-ins cause something that I call decision fatigue. The truth is when we’re working on a mix,
there are so many decisions we have to make, so many choices of what plug-ins to use, what
processing to add. And the mix itself is just a result of thousands
of tiny little decisions. Now, the modern-day music making process is
already overwhelming enough, right? We have millions of choices, whether it’s
virtual instruments or plug-ins or track counts are higher than ever. And all of these choices make the music making
process so complicated as is. But when we start buying lots of plug-ins,
what happens is we add another layer of complexity to the music making process. So now when I’m listening to my mix and
suddenly I hear the track needs to be compressed, instead of just grabbing my go-to compressor,
I have to say okay, well I have twenty different compressor plug-ins, which one of those compressor
plug-ins am I going to need to grab, right? And so now before we even got to the actual
work of compressing, we’re already adding this other layer of decision making. And when you think about the mixing process
as a whole, that additional layer adds so much complexity because you’re thinking
about these choices. Every time you add a plug-in, every time you
add compression, every time you add EQ, you have to go through this additional process. So suddenly the mixing process becomes even
more complicated, right? And it’s already complicated enough. So what I recommend people to do is rather
than having a million different plug-ins to choose from, build a small library of plug-ins
that are workhorse tools, that are fairly flexible that you know you can adapt to a
variety of different circumstances. And that way when you’re thinking about
grabbing a compressor, you have one compressor that you can go for, or maybe two or three. You don’t have to worry about twenty different
options that you have to choose from. So by paring down your plug-in library and
really going for workhorse, flexible plug-ins – and these can be the stock plug-ins in your
DAW, they don’t have to be third-party plug-ins – but the idea here again by paring things
down, we’re removing that additional layer of decision making, and mixing becomes a lot
easier. And the third reason I think you should stop
buying third-party plug-ins is because spending more money on plug-ins actually pulls us away
from investing in the things that make a much bigger impact. When it comes to things that really make a
difference in terms of the sound of your music, plug-ins are way down at the bottom of the
list. There are so many more important things that
you could be spending your money on – acoustic treatment, education, monitoring – just to
name a few. The problem is that every dollar that we invest
into plug-ins actually gets taken away from those areas in many cases. We have a limited amount of resources. For most of us, music making is a part-time
thing, right? We’re not doing this full time and we don’t
have a million dollars in the bank that we can spend on this stuff. So what happens is we end up spending money
on plug-ins, and we don’t have that money to invest in the areas that actually are going
to make a much bigger impact in many cases. So instead of investing in plug-ins, I recommend
that you take a step back and actually think how can I maximize my investment when it comes
to my music? If I only have ten dollars or fifty dollars
a month to spend on this, where can I spend it to make it count? And chances are it’s not going to be plug-ins. So that’s the third and one of the biggest
reasons really that I recommend you don’t spend a bunch of money on third-party premium
plug-ins. So hopefully you found this video helpful,
and make sure you grab my free e-book, “35 Mixing Mistakes You Don’t Know You’re
Making” too. There’s lots of great content in there that
will help steer you away from some of these bad decisions, whether it’s buying plug-ins
or other things that will actually take you off the path in the mixing process. So you can grab that e-book again for free
by clicking the link above or in the description below. And before you go, leave a comment below this
video and let me know – do you think people should avoid buying plug-ins? Do you agree with me or disagree with me? What are your thoughts? I’d love to hear from you, so leave your
response in the comments section below. Thanks so much for watching, and you can check
out more mixing videos and tutorials like these right here on my YouTube channel or
at BehindTheSpeakers.com.