Knockout Text Effect Illustrator Tutorial
In this tutorial, we’re going to learn how to create a knockout text effect in Adobe Illustrator.
Download Adobe Illustrator.
Read More at Knockout Text Effect Illustrator Tutorial
In this tutorial, we’re going to learn how to create a knockout text effect in Adobe Illustrator.
Download Adobe Illustrator.
Read More at Knockout Text Effect Illustrator Tutorial
Envato Elements is the design industry’s first unlimited download subscription for digital assets, tailored to the needs of agencies, designers, marketers, and professionals. With over 9000 carefully curated fonts, graphics, mockups, templates and more you can save time whilst still creating beautiful design projects.
Join the thousands of subscribers already enjoying unlimited monthly downloads, broad commercial use licensing and the ability to cancel at any time – no strings attached.
Direct Link to Article — Permalink
Netflix for Designers is a post from CSS-Tricks
Alicia Sedlock, on removing a large section of a website:
… it’s the ultimate “I really hope this doesn’t break something else” situation. It was a stressful and tedious effort of triple checking that the things we were removing weren’t dependencies elsewhere. To be honest, we wouldn’t have been able to do this with any amount of success or confidence without our test suite.
Tests don’t just help you when you change code or write new code, then help when you remove it, too. Seems to me testing has settled into the industry mindset as crucially important. As the year closes, I imagine managers worldwide are considering employees ability to write tests in their reviews.
This also reminds me of our unending quest to define “front-end development”, a job description with skill requirements that get broader and broader every day. Testing is a unique skillset with its own learning curve. But if JavaScript is squarely in the front-end bucket, shouldn’t testing that JavaScript also be?
This is also your yearly reminder that 24 ways has kicked off.
Direct Link to Article — Permalink
A Favor for Your Future Self is a post from CSS-Tricks
Some new tools and some new services are only suited for a brief introduction but are not any less useful than others. Today, I’ve collected five of those designer topics you shouldn’t miss.
Tatiana Lapina provides a free version of her Aquaflow Toolkit on Dribble. The download and distribution of the 90 MB large tool are done via Gumroad. Here, you enter an email address, and a purchase price of 0 dollars. The download starts subsequently.
The toolkit contains a bunch of brushes, patterns, shapes, textures, layer styles, and symbols for Adobe Photoshop and Illustrator. Don’t get irritated by the auxiliary “demo.” There is a paid variant of the toolkit, available for 18 dollars. However, this contains about ten times the amount of resources. The only limitation of the demo is that it contains far fewer elements.
The website “Dumb Questions for Smart Designers” delivers exactly what it promises to. Here, designers are interviewed. In general, this is not a bad idea. However, for the most part, these interviews consist of weird questions like “If you had to come up with a slogan for raw oysters, what would it be?”.
To my surprise, a lot of the interviewees gave very smart answers, possibly inspiring creative thinkers more than they would when giving “normal” interviews.
>”>Here’s where you’ll find the dumb questions and smart answers >>
134 books from 32 categories. How does that sound? Great, doesn’t it? And that’s just what it is. At a glance, all recent topics seem to be covered. There are books on React, Angular, Rails, JavaScript, Meteor, SVG, Node, Ember, Backbone.js, and several other topics.
On the information cards of each book, you’ll find the respective release date, language, number of pages, the author, as well as a brief content description. All for free.
>”>Go to the book collection >>
On IconsDB.com, you’ll currently find 4,040 different icons. 2,586 of the available pictograms require no attribution at all, and can freely be used in private, and commercial projects, including the use for clients. 1,454 of them require attribution. Aside from that, these icons are freely usable as well.
All of the symbols are flat design icons and can be downloaded in any color, as long as you know its hex-value. On top of that, the operators also created 36 sets with all 4,040 icons in each of them. Here, they used color gradients, textures, or bicolor concepts, to set the sets apart from each other.
>”>Customize and load some symbols >>
The developer Jennifer Lyn Parsons experienced something that she calls a wake-up call; that told her that she didn’t take care of herself enough. She looked around and found out that in the fast paced web-world, it is common to focus on oneself last.
On Selfcare.tech, Jennifer collects resources that can help developers, and others, to focus a bit more on themselves. This includes links to meditations, fitness, speeches, podcasts, and more. Overall, the project is a good starting point for everyone who has noticed the vital need to protect their performance capability.
If you’ve been following the web development community these last few months, chances are you’ve read about progressive web apps (PWAs). It’s an umbrella term used to describe web experiences advanced that they compete with ever-so-rich and immersive native apps: full offline support, installability, “Retina,” full-bleed imagery, sign-in support for personalization, fast, smooth in-app browsing, push notifications and a great UI.
But even though the new Service Worker API allows you to cache away all of your website’s assets for an almost instant subsequent load, like when meeting someone new, the first impression is what counts. If the first load takes more than 3 seconds, the latest DoubleClick study shows that more than 53% of all users will drop off.
The post Progressive Web AMPs appeared first on Smashing Magazine.
In this tutorial, we’re going to learn how to create a rock texture for your text, in Adobe Illustrator.
Download Adobe Illustrator.
Read More at Rock Text Effect In Illustrator – Tutorial
My name is Mason Ellwood. I am from Tucson, Arizona – a born and raised desert kid.
Growing up I was always interested in coding and what it could unlock once I understood the concept. One of my good friends, Garrett Bolthouse, runs a small remote business which builds and maintains therapeutic boarding school websites called The Envoy Group. I talked to him and I asked how someone with zero experience could go about getting a job with The Envoy Group, or the possibility of an internship? I was shocked when he told me that he would rather me come to him with zero experience than him having to break me of bad habits.
As a content manager intern at 17 years old, I was in over my head and ready to absorb as much as I could. Through the course of a very confusing year, he slowly gave me bigger and bigger projects. He had me do a landing page for him which was my first full build! And this, after hours and hours of banging my head against the wall was, what I came up with…
Let’s just say we never actually used it for anything, but hey haha.
This lead me to ASU’s Graphic Information Technologies program, a new degree they began to offer through the Fulton School of Engineering. Upon graduation and applying to roughly 200 different jobs, I got my first REAL job at a startup, called Freestar, as their developer intern. This lead to a full position within the company as the in-house jr. developer.
My tasks included:
I will wait to get into more of the technicalities of what I am learning in the next post, but what I have found at this school so far is a unique culture. Everyone whom I have met so far, from employees to students, are all very helpful and willing to set aside their own personal projects to help me work through some concepts I have trouble with. Even Avi, the founder of Flatiron School, is online and ready to talk at almost any given moment. Everyone is very willing to help because, as Avi has aggressively stated many times; “We are all here for the same reasons, to learn to love code”.
The material I will cover throughout my time at the school will be very extensive, including many practical skills such as Angular, Javascript, CSS, HTML, RUBY, jQuery, Rails, Mocha, Nokogiri, JSON, Git, SQL, Sinatra, TDD.
With learning anything new, there is always frustration. Working within a culture all striving for the same end-goal will be a very positive experience.
It comes with immediate obstacles that you have to learn to maneuver very quickly, or else it will be hard to progress. So far, I am roughly 21 lessons into the Intro to Ruby Course (this specific Intro To Ruby Course is free to any student that may want to test and see Flatiron’s approach to learning). If you are interested here is the link (https://flatironschool.com/programs/online-intro-ruby-free-course/). There are a few other courses that Flatiron offers for free as well as a trial. This will allow you to check out how the course work will be presented inside the Full-Stack Front End Developer program and see if it is the right fit for you as a student. The free courses are not as extensive as the Full-Stack Front End Developer courses are, but they do a great job as an overview of key concepts you need to understand to progress more effectively.
Flatiron is not cheap, but I do see the value that this school will bring me already. It is not just a time to further your personal growth in the industry, but to further connections with the new generation of programmers, just as you yourself are.
In the Intro to Ruby Course I am currently immersed in, I have learned an immense amount of practical skills that I will take with me to my next role. We have covered what Ruby is and what practicalities Ruby brings to programming. A history on the language itself, as well as Git and Github basics.
Learn.co IDE which is closely related to many products released by Jet Brains such as PHP Storm which encompasses a file tree, easy to navigate lessons and files you may be working on, as well as a text editor and built in terminal, with easy linking options to your personal GitHub account.
One of the tools I have found necessary to excel in the school is a GitHub account. Flatiron works hard at creating a workflow that is as close to industry standards as they can get. You will also need a computer…. but that comes without saying – which is something I currently don’t own at the moment. haha
I’m looking forward to working through the courses that the Flatiron School has to offer.
My next post will focus on some of the challenges I’ve encountered so far with the program, and some things that have been new and taken some getting used to. I will do my best to include working code as well, so you can look at some of the projects I have completed so far with an explanation of how it works.
Thank you for reading and I am looking forward to next week’s post where I can talk less about me and more about course work.
Read More at My Journey Of Learning Programming Through Flatiron School #1
Lately, I’ve been obsessed with optimizing performance through lazy-loading. Recently, I’ve written on how to lazy-load Google Maps and on how to lazy-load responsive Google Adsense. Now it’s time for Disqus, a service for embedding comments on your website. It’s a great service. It eliminates the headache of developing your own local commenting system, dealing with spam, etc. Recently, I’ve been working on implementing the widget in one of my projects.
Layout-wise, comments usually play a secondary role. In many cases, comments are never seen at all by the visitors, because the don’t scroll down to where they are. But guess what? By default, they get loaded on the website no matter what. The wasted bandwidth is a problem.
Take a look at the technical implementation officially recommended by Disqus:
<div id="disqus_thread"></div>
<script>
(function() {
var d = document, s = d.createElement('script');
s.src = '//username.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
Here’s what they say: “Place the following code where you’d like Disqus to load”. Say you’re a good developer and you usually insert all of the fragments right before the closing tag
. Then, one fine day, you decided to implement Disqus comments on your website and placed the above code somewhere in the middle of the document where the commenting section was meant to be.
What happens? The very first JavaScript file to start downloading is username.disqus.com/embed.js
. That does not necessarily mean it will be downloaded first, but it’s the first one in the line of JavaScript files that gets the browser’s attention. Shouldn’t the first be reserved for the main JavaScript file of your website? There are many things (like “sleeping” ‘s, etc.) that could go wrong when your main JavaScript file is late to load, especially if you were not following the principles of graceful degradation or progressive enhancement back then when you developed that website.
This also interferes with other external resources on your website, like images and CSS files. Imagine yourself using a smartphone under 2G network conditions and waiting for the comments widget to load because you came for a kitten photo.
I did a test. Turns out the Disqus widget with zero comments weighs 2.49 MB! A bunch of networks requests for JavaScript, CSS, image, and font files that in many cases unreasonably slow down serving the other, perhaps critical parts or functions of your website.
In order to be able to lazy-load Disqus, I developed a tiny JavaScript plugin which does the job. No matter where the comments zone is, above or below the viewport, it won’t get loaded if there isn’t any reason to:
The plugin itself is a tiny piece of JavaScript. I made two versions of it: vanilla and jQuery. I called it disqusLoader. You can grab the files here:
Here’s you you set it up. First, you need to insert an element into HTML where you want the comments section to be:
<div class="disqus"></div>
Then, initialize the plugin like this:
// vanilla
disqusLoader( '.disqus', { scriptUrl: '//username.disqus.com/embed.js' });
// jQuery
$.disqusLoader( '.disqus', { scriptUrl: '//username.disqus.com/embed.js' });
“That’s great, but what about Disqus-specific config,” you may ask. Sure, there’s one more argument available which accepts a Disqus-native value. There are also a few more plugin-related options:
var options =
{
scriptUrl: '//username.disqus.com/embed.js',
/*
@type: string (url)
@default: none
@required
URL of Disqus' executive JS file. The value is memorized on the first function call
and ignored otherwise because Disqus allows only one instance per page at the time.
*/
laziness: 1,
/*
@type: int (>=0)
@default: 1
Sets the laziness of loading the widget: (viewport height) * laziness . For example:
0 - widget load starts when at the least a tiny part of it gets in the viewport;
1 - widget load starts when the distance between the widget zone and the viewport is no more than the height of the viewport;
2 - 2x viewports, etc.
*/
throttle: 250,
/*
@type: int (milliseconds)
@default: 250
Defines how often the plugin should make calculations during the
processes such as resize of a browser's window or viewport scroll.
250 = 4 times in a second.
*/
/*
@type: function
@default: none
Disqus-native options. Check Disqus' manual for more information.
*/
disqusConfig: function()
{
this.page.title = 'Page Title';
this.page.url = 'http://url.to/your-website';
this.page.identifier = 'unique-identifier';
}
};
// vanilla
disqusLoader( '.disqus', options );
// jQuery
$.disqusLoader( '.disqus', options );
Check it out for yourself:
You can also contribute or follow the project on GitHub.
Callbacks are great because you can react to user’s actions. There’s only one kind of callback officially documented by Disqus. Looking at the source code of `embed.js` file you can see more pre-defined types of callbacks:
However, looks like only two of them are enabled: onNewComment
and onReady
. Which is enough for a tiny but noticeable improvement: a loading indicator.
Loading the Disqus widget usually consists of two parts:
Disqus itself takes care of the 2nd step which they indicate with the animated image. But what about the 1st step? There are many reasons why loading external JavaScript files could take tens of seconds. The catch here is that no matter what the network conditions are, users will still be informed there’s a commenting feature available on your site. User experience is in the details!
The technical approach is simple: a new HTML element and JavaScript callback function which helps to hide the element:
<div class="disqus-placeholder">Loading comments...</div>
<div class="disqus"></div>
// vanilla
disqusConfig: function()
{
this.callbacks.onReady = [function()
{
var el = document.querySelector( '.disqus-placeholder' );
if( el.classList )
el.classList.add( 'is-hidden' ); // IE 10+
else
el.className += ' ' + 'is-hidden'; // IE 8-9
}];
}
// jQuery
disqusConfig: function()
{
this.callbacks.onReady = [function()
{
$( '.disqus-placeholder' ).addClass( 'is-hidden' );
}];
}
.disqus-placeholder.is-hidden { display: none; }
You can see this in action on the demo page. But first, clean the browser’s cache and throttle the network speed.
While working on the technique, I discovered a couple of important limitations that exist today…
Once the script file (e.g. //username.disqus.com/embed.js
) loads, the global variable window.DISQUS
is created, but only if it wasn’t set previously (which is a bad sign, but let’s dig deeper). So, I’ve done a test. I initialized the widget from the source script A. Then freed up some space for the future variable window.DISQUS = undefined
and initialized the widget of the source B. However, the result was a mess: callback functions were fired multiple times, the comments got duplicated, etc. Obviously, the current codebase of Disqus is not designed to support multiple variables and to operate individually with each widget instances.
There’s a public JavaScript method function reset()
available within the DISUQS
object. If you’ve had any technical experience with Disqus, you may know that the widget is inserted into an element which has disqus_thread
value for the id
. I’ve done a test with two elements: loaded the widget within the first element, removed the ID attribute, and appended it to the second element. Finally, I called the reset function, expecting the second instance just to appear next to the first one. However, calling the function to load a new instance also destroys any previously initialized widgets. Unfortunately, today Disqus is designed only for a single instance at the given time.
There’s one good thing! Even though it is not possible to have multiple widget instances at once, you can still destroy the old ones and load in new ones. Let’s turn this theory into practice with probably the most typical situation: tabs. All you need to do is call the plugin each time the new tab is activated:
<div class="tabcontent" data-disqus-id="venus" data-disqus-title="Venus"></div>
<div class="tabcontent" data-disqus-id="earth" data-disqus-title="Earth"></div>
<div class="tabcontent" data-disqus-id="mars" data-disqus-title="Mars"></div>
// call this function every time a tab is clicked:
var initDisqus = function( content )
{
disqusLoader( content,
{
scriptUrl: '//username.disqus.com/embed.js',
disqusConfig: function()
{
this.page.identifier = content.getAttribute( 'data-disqus-id' );
this.page.title = content.getAttribute( 'data-disqus-title' );
}
});
}
You can see this in action or view the full code on the demo page.
This post is not about the flaws in Disqus. It’s about the mistakes we developers make. Our world is full of tools and it is up to us how we use them. Even though these tools solve particular problems, they usually bring some others along if we don’t take the appropriate care when implementing them. Every choice to take the easiest way turns into lost users, decreased conversions, and increased bouncing rates. You can already lazy-load Disqus, Google Adsense, Google Maps, social media buttons, you can also develop and share custom techniques. Be responsible!
Lazy-Loading Disqus Comments is a post from CSS-Tricks
InstantClick is a pretty popular JavaScript library (4,344 stars, as I type). This is the gist:
Before visitors click on a link, they hover over that link. Between these two events, 200 ms to 300 ms usually pass by (test yourself here). InstantClick makes use of that time to preload the page, so that the page is already there when you click.
You hover a link, it Ajaxs for that page and prerenders it. On click, it replaces the and
and changes the URL.
I just heard about it. Seems pretty smart. Progressive enhancement. Increased perceived performance. I can imagine one objection being bandwidth concerns. Downloading every page I hover over seems a bit bandwidth greedy.
It got me thinking though… isn’t there a newfangled prerendering thing? There is:
<link rel="prerender" href="(url)">
It’s not that newfangled, actually. Steve Souders wrote about it in 2013:
This is like opening the URL in a hidden tab – all the resources are downloaded, the DOM is created, the page is laid out, the CSS is applied, the JavaScript is executed, etc. If the user navigates to the specified href, then the hidden page is swapped into view making it appear to load instantly.
Can I Use shows decent support:
This browser support data is from Caniuse, which also reports this feature is in W3C Working Draft status.
Google Chrome | Mozilla Firefox | Internet Explorer | Opera | Apple Safari |
---|---|---|---|---|
13 | No | 11 | 15 | No |
iOS Safari | Android | Opera Mobile | Android Chrome | Android Firefox |
---|---|---|---|---|
No | No | No | 54 | No |
Doesn’t that mean we could do something like this?
var links = document.querySelectorAll('a');
[].forEach.call(links, function(link) {
link.addEventListener("mouseenter", function() {
var newPreLoadLink = document.createElement("link");
newPreLoadLink.rel = "prerender";
newPreLoadLink.href = link.href;
document.head.appendChild(newPreLoadLink);
})
});
The question is if dynamically-inserted link elements like that actually trigger the prerendering. I did a fairly primitive test in Chrome, and it didn’t seem to work. Oh well.
If you wanted to be even more predictive than hover, you could try Premonish, “A library for predicting what element a user will interact with next.”
If you’re interested in this kind of thing, prerendering isn’t the only kid on the block. Robin wrote about it all last year.
Prerender on hover? is a post from CSS-Tricks
The Firebug extension isn’t being developed or maintained any longer. We invite you to use the Firefox built-in DevTools instead.
Looks like the end of an over 2 year process.
Firebug was probably the single most important tooling advancement in front-end developments short life. A glimpse of the future, indeed.
Direct Link to Article — Permalink
EOL Firebug is a post from CSS-Tricks