Making your web app work offline, Part 1: The Setup

Original Source: https://css-tricks.com/making-your-web-app-work-offline-part-1/

This two-part series is a gentle introduction to offline web development. Getting a web application to do something while offline is surprisingly tricky, requiring a lot of things to be in place and functioning correctly. We’re going to cover all of these pieces from a high level, with working examples. This post is an overview, but there are plenty of more-detailed resources listed throughout.

Article Series:

The Setup (you are here!)
The Implementation (posts tomorrow, stay tuned)

Basic approach

I’ll be making heavy use of JavaScript’s async/await syntax. It’s supported in all major browsers and Node, and greatly simplifies Promise-based code. The link above explains async well, but in a nutshell they allow you to resolve a promise, and access its value directly in code with await, rather than calling .then and accessing the value in the callback, which often leads to the dreaded “rightward drift.”

What are we building?

We’ll be extending an existing booklist project to sync the current user’s books to IndexedDB, and create a simplified offline page that’ll show even when the user has no network connectivity.

Starting with a service worker

The one non-negotiable thing you need for offline development is a service worker. A service worker is a background process that can, among other things, intercept network requests; redirect them; short circuit them by returning cached responses; or execute them as normal and do custom things with the response, like caching.

Basic caching

Probably the first, most basic, yet high impact thing you’ll do with a service worker is have it cache your application’s resources. Service worker and the cache it uses are extremely low-level primitives; everything is manual. In order to properly cache your resources you’ll need to fetch and add them to a cache, but then you’ll also need to track changes to these resources. You’ll track when they change, remove the prior version, and fetch and update the new one.

In practice, this means your service worker code will need to be generated as part of a build step, which hashes your files, and generates a file that’s smart enough to record these changes between versions, and update caches as needed.

Abstractions to the rescue

This is extremely tedious and error-prone code that you’d likely never want to write yourself. Luckily some smart people have written abstractions to help, namely sw-precache, and sw-toolbox by the great people at Google. Note, Google has since deprecated these tools in favor of the newer Workbox. I’ve yet to move my code over since sw-* works so well, but in any event the ideas are the same, and I’m told the conversion is easy. And it’s worth mentioning that sw-precache currently has about 30,000 downloads per day, so it’s still widely used.

Hello World, sw-precache

Let’s jump right in. We’re using webpack, and as webpack goes, there’s a plugin, so let’s check that out first.

// inside your webpack config
new SWPrecacheWebpackPlugin({
mergeStaticsConfig: true,
filename: “service-worker.js”,
staticFileGlobs: [ //static resources to cache
“static/bootstrap/css/bootstrap-booklist-build.css”,

],
ignoreUrlParametersMatching: /./,
stripPrefixMulti: { //any paths that need adjusting
“static/”: “react-redux/static/”,

},

})

By default ALL of the bundles webpack makes will be precached. We’re also manually providing some paths to static resources I want cached in the staticFileGlobs property, and I’m adjusting some paths in stripPrefixMulti.

// inside your webpack config
const getCache = ({ name, pattern, expires, maxEntries }) => ({
urlPattern: pattern,
handler: “cacheFirst”,
options: {
cache: {
maxEntries: maxEntries || 500,
name: name,
maxAgeSeconds: expires || 60 * 60 * 24 * 365 * 2 //2 years
},
successResponses: /0|[123].*/
}
});

new SWPrecacheWebpackPlugin({

runtimeCaching: [ //pulls in sw-toolbox and caches dynamically based on a pattern
getCache({ pattern: /^https://images-na.ssl-images-amazon.com/, name: “amazon-images1” }),
getCache({ pattern: /book/searchBooks/, name: “book-search”, expires: 60 * 7 }), //7 minutes

]
})

Adding the runtimeCaching section to our SWPrecacheWebpackPlugin pulls in sw-toolbox and lets us cache urls matching a certain pattern, dynamically, as needed—with getCache helping keep the boilerplate to a minimum.

Hello World, sw-toolbox

The entire service worker file that’s generated is pretty big, but let’s just look at a small piece, namely one of the dynamic caches from above:

toolbox.router.get(/^https://images-na.ssl-images-amazon.com/, toolbox.cacheFirst, {
cache: { maxEntries: 500, name: “amazon-images1”, maxAgeSeconds: 63072000 },
successResponses: /0|[123].*/
});

sw-toolbox has provided us with a nice, high-level router object we can use to hook into various URL requests, MVC-style. We’ll use this to setup offline shortly.

Don’t forget to register the service worker

And, of course, the existence of the service worker file that’s generated above is of no use by itself; it needs to be registered. The code looks like this, but be sure to either have it inside an onload listener, or some other place that’ll be guaranteed to run after the page has loaded.

if (“serviceWorker” in navigator) {
navigator.serviceWorker.register(“https://cdn.css-tricks.com/service-worker.js”);
}

There we have it! We got a basic service worker running, which caches our application resources. Tune in tomorrow when we extend it to support offline.

Article Series:

The Setup (you are here!)
The Implementation (posts tomorrow, stay tuned)

Making your web app work offline, Part 1: The Setup is a post from CSS-Tricks

The Internet of Conference Tables

Original Source: http://feedproxy.google.com/~r/buildinternet/~3/5OSXFUuwQ-E/

At One Mighty Roar, we’ve spent a lot of time thinking about how to tackle physical and digital overlap. After creating a textable office sign, a logical next step was to tackle our conference table. We wanted to bring conference furniture to the next level — and to do that, we were going to need lights, proximity sensors, and a “can do” attitude.

The Goal

To spruce up our meetings we wanted a table that not only was classy but served as a memento for our office. We wanted a table that knows if someone is present, is easily accessible over the web, and can show off its lights and hydraulic lift on command. This table would be one of the first stepping stones towards our hackable office.

The Table

With a surface composed of sweet American walnut and was crafted by our friends at Erik Rueda Design Lab. It’s no surprise that our team was huddled in the conference room for an hour admiring the view (we also suddenly became very strict about our drink coasters rule).

Just like most tables in existence, ours has four legs as support, but these aren’t just any normal table stands. If you take a closer look, we found that our logo actually serves as a great reinforcement for table tops.

On top of all of that, our table also comes equipped with some LED housing that runs through the center and around the bottom of the surface. The lights we chose were Adafruit’s WS2801 LEDs so we could easily slap on an Arduino and start programming away.

Finally, the centerpiece is not just a placeholder for our logo, it serves a much greater purpose:

A hydraulic engine lifts up the piece to expose a collection of outlets and Ethernet jacks for laptops and alike to receive some juice. A small switch at the bottom of the table controls the centerpiece vertically, so hopefully we’ll install some sensors to ensure a power cable (or a hand for that matter) will never get crushed in the process.

The Work

After some brainstorming and coffee-sipping, I found some downtime during the week to hack away at this side project. Since we already had an awesome setup for our sign, I began to adapt and expand this codebase for the conference table.

To get started, I gathered up some supplies:

Arduino Uno
Arduino Ethernet Shield
HCSR04 Ultrasonic Sensor
Various wiring and power supplies

For libraries we used:

Webduino
Adafruit WS2801 Library
HCSR04Ultrasonic

As a quick proof-of-concept, we had previously implemented a RESTful API for our office’s sign, using Webduino.

Once the “tableduino” API library was banged out, the setup was as simple as attaching the Arduino Ethernet shield and wiring the Ultrasonic sensor to the board. We gave the Arduino some power and an Ethernet hookup then started to fire away some API calls.

Here are some of our requests and results!

POST /m-animate
Red = 255
Blue = 0
Green = 0
action = line-fill

 

POST /m-animate
Red = 255
Blue = 255
Green = 0
action = fade

 

POST /b-animate
Red = 255
Blue = 255
Green = 0
action = detect-mode

Making cURL requests or using Postman to hit these endpoints is nice and all, but co-worker Trevor Suarez also created a web GUI to easily interact with the sign and the table using your phone. In the coming weeks we plan on expanding this app for all of our office devices.

You can grab the code for the table from the GitHub repo here.

The Future

What we have so far is only the beginning of what we want to accomplish with our office devices. Down the road we want our API to control the table’s hydraulic motor, halt the engine if an object is detected before closing, and change LED color as more individuals sit at the table.

These are only a few of the possibilities we could think of for the time being. We’re sure as more people play with our table (and possibly hack themselves) in the next few months, there will be more ideas than we’ll know what to do with.


Learn How to Build a Chatbot with IBM Watson APIs

Original Source: http://blog.teamtreehouse.com/build-a-chatbot-with-ibm-watson-apis

ibm_watson_logotype_reg_pos_rgb

We’re excited to announce that Treehouse has partnered with IBM on a new course called Build a Chatbot with Watson APIs. Watson is the AI platform for business from IBM (made famous by its appearance on Jeopardy! in 2011), and it’s a collection of AI services designed to work together. If you’re new to AI, you might be wondering why it matters or how you can use it yourself. Below is my own explanation, and the course can help take you even further.

Start learning to code today with your free trial on Treehouse.

From protein folding, to Twitter, to stock markets, the amount of data in the world is growing at an unprecedented pace; there’s no way for humans to sift through it all. This is a problem, because our ability to turn raw data into useful information and knowledge is a limiting factor on the pace of technology and innovation.  If the world is generating more data than we can interpret, then we’re not getting the full value from the data or reaching our full potential. In many cases there are low consequences to slower data processing, but as someone that lives in Florida where we get hurricanes annually, I depend on computer models and human experts to predict the path and severity of each storm in real-time. If more sophisticated models and better predictions are available, there would be less guesswork when making preparations, and hopefully a less severe aftermath.

Even when we apply clever algorithms, it’s extremely difficult to create the perfect set of rules for interpreting and understanding a given data set. For example, let’s say we want to create an algorithm that’s capable of identifying a piece of fruit from a photograph. Maybe we could create rules to identify a fruit based on its shape. But then, what if the photo is taken at a strange angle (for example, the silhouette of a pear is similar to other spherical fruit from a top-down perspective)? Then, maybe we could add rules to identify the fruit based on color. However, what if a banana is transitioning from yellow to brown, or what if there are green apples instead of red apples, or what if the photo is in black and white?

Sure, it’s probably possible to come up with a rule set that will work, but it could be hundreds of rules and branching decision trees, and that’s just for identifying one type of thing. This is the type of problem that can be addressed by machine learning. Rather than telling a computer to check a set of rules created by a human, we instead “train” the computer on a set of a data and it writes the rules itself. In most cases this still involves a human to build an initial data set and work with an artificial intelligence to guide it to the initial correct answers, but after viewing enough different photos of fruit, the AI will start to gain more confidence in its own predictions.

Image recognition and computer vision is just one application of AI. Similar principles of machine learning can be applied to problems like speech recognition, natural language processing, and much more. In the Treehouse course Build a Chatbot with Watson APIs, you’ll create an AI that you can talk to in the same way you might chat with someone over an instant messaging service. This type of “chatbot” can assist businesses that need help with customer service, but may not have the capacity to answer a high volume of customers, or want to offer assistance outside of normal business hours; a chatbot never has to sleep. Just like AI, chatbots also have broad applications – for example, perhaps someday we might interact with domain-specific chatbots rather than using so many different phone apps.

If you want to browse some of IBM Watson services before getting started, head over to ibm.com/watson. Then when you’re ready to start creating, check out the Build a ChatBot course!

The post Learn How to Build a Chatbot with IBM Watson APIs appeared first on Treehouse Blog.

Desktop Wallpaper Calendars: April 2012

Original Source: http://feedproxy.google.com/~r/visualswirl/~3/QBoB-rcRBmw/

No April Fools joke today. Instead let me present a roundup of Desktop Wallpaper Calendars for April 2012. With spring in full swing, I’ve gathered several beautiful desktop wallpapers featuring April 2012 calendars. Freshen up your desktop and check back next month for a brand new calendar update.  Feel free to share these with your friends and email me if you ever would like your calendar featured in a similar roundup.

6 Beautiful Desktop Wallpaper Calendars for March 2012
Wallpaper by Ibrandstudio

Wallpaper by Paper Leaf

Wallpaper by MonkeyMan504

Wallpaper by Shrimp Salad Circus

Wallpaper by Webgranth

Wallpaper by Studio of Mae

Wallpaper by Kriegs

The post Desktop Wallpaper Calendars: April 2012 appeared first on Visual Swirl Design Resources.

6 Must-Have Tools in a PHP Developer’s Toolkit

Original Source: http://blog.teamtreehouse.com/6-must-have-tools-in-a-php-developers-toolkit

PHP is a popular back-end programming language that allows you to quickly and effortlessly create simple, dynamic websites. It’s so popular, in fact, that around 80% of all websites now use it! Once you’ve decided to learn PHP and join the awesome community of developers, you may be wondering, what are some essential tools I’ll need? We asked expert PHP teacher, Alena Holligan to share her top picks!

Start learning to code today with your free trial on Treehouse.

Reference PHP.net documentation

The first and most fundamental tool you should have at your disposal as a PHP developer is the PHP.net documentation manual bookmarked in your browser or downloaded to your desktop. This go-to resource will cover everything PHP from installation and configuration to a full list of language references and features. As a developer, don’t expect to be able to remember everything (no one can!), but keeping this manual handy is a great way to look something up quickly.

Access or download the PHP.net manual here.

Be part of the collaborative GitHub community

Octocat via GitHub

GitHub is a collaborative development platform built on top of a distributed version control system called Git. As a PHP developer – and any developers for that matter – GitHub can be the most valuable place for you to share & collaborate with other developers. If you’re new to GitHub, we also recommend checking out the GitHub Basics course on Treehouse to learn how to navigate the GitHub site, explore open source software, and best practices.

Sign up for GitHub here.

Rely on Xdebug to exterminate bugs

Xdebug is a great debugger and profiler tool for PHP. Use it to test your code and assist with debugging and development. Trust us, it’ll save you valuable time and avoid unnecessary frustrations!

Install Xdebug here.

Master management with Composer

php developer's toolkit

Composer is a dependency manager for PHP that allows you to manage both dependencies of PHP software and required libraries in one place, saving you time and effort. Since the software’s initial released in 2012, it has literally changed how PHP is developed and is a popular choice among the PHP community, from beginners to pros.

Download Composer here.

Testing, testing with PHPUnit

If you’re going to write unit tests in PHP, look no further. PHPUnit is a programmer-oriented unit testing framework for PHP and is a favorite tool with our teachers for writing unit tests in PHP. It’s flexible, powerful and easy to use. The great news is that we teach a course on PHP Testing with guest teacher, Chris Hartjes and there’s even a section specifically about using PHPUnit!

Get started with PHPUnit here.

Tap into the power of PHPStorm

php developer's toolkit

PHPStorm is an awesome super tool. It’s a PHP IDE from JetBrains that can also integrate with the other tools we’ve mentioned above. PhpStorm works with frameworks like Drupal, WordPress, Laravel, Magento, CakePHP, and the list goes on… With built-in developer tools, you can also carry out routine tasks right from the IDE. With so many capabilities, the editor is also able to truly understands your code and offers valuable code completion, error prevention, and more to help you code efficiently and productively.

Learn more and buy PHPStorm here to start coding.

BONUS: Join Local User Groups

Another top tip from Alena is to make an effort to connect with local PHP user groups. The PHP community is awesome, welcoming and supportive, and always happy to welcome new members. So how do you find your local group? Easy, just head on over to php.ug to access every PHP-Usergroup worldwide, find your local group and sign up for their next event!

These are only a few of the PHP tools out there, we’d love to hear what you would add to the list in the comments below!

8 Must-Have Tools in a Beginner Developer’s Toolkit

The post 6 Must-Have Tools in a PHP Developer’s Toolkit appeared first on Treehouse Blog.

Animating Border

Original Source: https://css-tricks.com/animating-border/

Transitioning border for a hover state. Simple, right? You might be unpleasantly surprised.

The Challenge

The challenge is simple: building a button with an expanding border on hover.

This article will focus on genuine CSS tricks that would be easy to drop into any project without having to touch the DOM or use JavaScript. The methods covered here will follow these rules

Single element (no helper divs, but psuedo-elements are allowed)
CSS only (no JavaScript)
Works for any size (not restricted to a specific width, height, or aspect ratio)
Supports transparent backgrounds
Smooth and performant transition

I proposed this challenge in the Animation at Work Slack and again on Twitter. Though there was no consensus on the best approach, I did receive some really clever ideas by some phenomenal developers.

Method 1: Animating border

The most straightforward way to animate a border is… well, by animating border.

.border-button {
border: solid 5px #FC5185;
transition: border-width 0.6s linear;
}

.border-button:hover { border-width: 10px; }

See the Pen CSS writing-mode experiment by Shaw (@shshaw) on CodePen.

Nice and simple, but there are some big performance issues.

Since border takes up space in the document’s layout, changing the border-width will trigger layout. Nearby elements will shift around because of the new border size, making browser reposition those elements every frame of the animation unless you set an explicit size on the button.

As if triggering layout wasn’t bad enough, the transition itself feels “stepped”. I’ll show why in the next example.

Method 2: Better border with outline

How can we change the border without triggering layout? By using outline instead! You’re probably most familiar with outline from removing it on :focus styles (though you shouldn’t), but outline is an outer line that doesn’t change an element’s size or position in the layout.

.border-button {
outline: solid 5px #FC5185;
transition: outline 0.6s linear;
margin: 0.5em; /* Increased margin since the outline expands outside the element */
}

.border-button:hover { outline-width: 10px; }

A quick check in Dev Tools’ Performance tab shows the outline transition does not trigger layout. Regardless, the movement still seems stepped because browsers are rounding the border-width and outline-width values so you don’t get sub-pixel rendering between 5 and 6 or smooth transitions from 5.4 to 5.5.

Strangely, Safari often doesn’t render the outline transition and occasionally leaves crazy artifacts.

border artifact in safari
Method 3: Cut it with clip-path

First implemented by Steve Gardner, this method uses clip-path with calc to trim the border down so on hover we can transition to reveal the full border.

.border-button {
/* Full width border and a clip-path visually cutting it down to the starting size */
border: solid 10px #FC5185;
clip-path: polygon(
calc(0% + 5px) calc(0% + 5px), /* top left */
calc(100% – 5px) calc(0% + 5px), /* top right */
calc(100% – 5px) calc(100% – 5px), /* bottom right */
calc(0% + 5px) calc(100% – 5px) /* bottom left */
);
transition: clip-path 0.6s linear;
}

.border-button:hover {
/* Clip-path spanning the entire box so it’s no longer hiding the full-width border. */
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}

clip-path technique is the smoothest and most performant method so far, but does come with a few caveats. Rounding errors may cause a little unevenness, depending on the exact size. The border also has to be full size from the start, which may make exact positioning tricky.

Unfortunately there’s no IE/Edge support yet, though it seems to be in development. You can and should encourage Microsoft’s team to implement those features by voting for masks/clip-path to be added.

Method 4: linear-gradient background

We can simulate a border using a clever combination of multiple linear-gradient backgrounds properly sized. In total we have four separate gradients, one for each side. The background-position and background-size properties get each gradient in the right spot and the right size, which can then be transitioned to make the border expand.

.border-button {
background-repeat: no-repeat;

/* background-size values will repeat so we only need to declare them once */
background-size:
calc(100% – 10px) 5px, /* top & bottom */
5px calc(100% – 10px); /* right & left */

background-position:
5px 5px, /* top */
calc(100% – 5px) 5px, /* right */
5px calc(100% – 5px), /* bottom */
5px 5px; /* left */

/* Since we’re sizing and positioning with the above properties, we only need to set up a simple solid-color gradients for each side */
background-image:
linear-gradient(0deg, #FC5185, #FC5185),
linear-gradient(0deg, #FC5185, #FC5185),
linear-gradient(0deg, #FC5185, #FC5185),
linear-gradient(0deg, #FC5185, #FC5185);

transition: all 0.6s linear;
transition-property: background-size, background-position;
}

.border-button:hover {
background-position: 0 0, 100% 0, 0 100%, 0 0;
background-size: 100% 10px, 10px 100%, 100% 10px, 10px 100%;
}

This method is quite difficult to set up and has quite a few cross-browser differences. Firefox and Safari animate the faux-border smoothly, exactly the effect we’re looking for. Chrome’s animation is jerky and even more stepped than the outline and border transitions. IE and Edge refuse to animate the background at all, but they do give the proper border expansion effect.

Method 5: Fake it with box-shadow

Hidden within box-shadow’s spec is a fourth value for spread-radius. Set all the other length values to 0px and use the spread-radius to build your border alternative that, like outline, won’t affect layout.

.border-button {
box-shadow: 0px 0px 0px 5px #FC5185;
transition: box-shadow 0.6s linear;
margin: 0.5em; /* Increased margin since the box-shado expands outside the element, like outline */
}

.border-button:hover { box-shadow: 0px 0px 0px 10px #FC5185; }

The transition with box-shadow is adequately performant and feels much smoother, except in Safari where it’s snapping to whole-values during the transition like border and outline.

Pseudo-Elements

Several of these techniques can be modified to use a pseudo-element instead, but pseudo-elements ended up causing some additional performance issues in my tests.

For the box-shadow method, the transition occasionally triggered paint in a much larger area than necessary. Reinier Kaper pointed out that a pseudo-element can help isolate the paint to a more specific area. As I ran further tests, box-shadow was no longer causing paint in large areas of the document and the complication of the pseudo-element ended up being less performant. The change in paint and performance may have been due to a Chrome update, so feel free to test for yourself.

I also could not find a way to utilize pseudo-elements in a way that would allow for transform based animation.

Why not transform: scale?

You may be firing up Twitter to helpfully suggest using transform: scale for this. Since transform and opacity are the best style properties to animate for performance, why not use a pseudo-element and have the border scale up & down?

.border-button {
position: relative;
margin: 0.5em;
border: solid 5px transparent;
background: #3E4377;
}

.border-button:after {
content: ”;
display: block;
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
border: solid 10px #FC5185;
margin: -15px;
z-index: -1;
transition: transform 0.6s linear;
transform: scale(0.97, 0.93);
}

.border-button:hover::after { transform: scale(1,1); }

There are a few issues:

The border will show through a transparent button. I forced a background on the button to show how the border is hiding behind the button. If your design calls for buttons with a full background, then this could work.
You can’t scale the border to specific sizes. Since the button’s dimensions vary with the text, there’s no way to animate the border from exactly 5px to 10px using only CSS. In this example I’ve done some magic-numbers on the scale to get it to appear right, but that won’t be universal.
The border animates unevenly because the button’s aspect ratio isn’t 1:1. This usually means the left/right will appear larger than the top/bottom until the animation completes. This may not be an issue depending on how fast your transition is, the button’s aspect ratio, and how big your border is.

If your button has set dimensions, Cher pointed out a clever way to calculate the exact scales needed, though it may be subject to some rounding errors.

Beyond CSS

If we loosen our rules a bit, there are many interesting ways you can animate borders. Codrops consistently does outstanding work in this area, usually utilizing SVGs and JavaScript. The end results are very satisfying, though they can be a bit complex to implement. Here are a few worth checking out:

Creative Buttons
Button Styles Inspiration
Animated Checkboxes
Distorted Button Effects
Progress Button Styles

Conclusion

There’s more to borders than simply border, but if you want to animate a border you may have some trouble. The methods covered here will help, though none of them are a perfect solution. Which you choose will depend on your project’s requirements, so I’ve laid out a comparison table to help you decide.

My recommendation would be to use box-shadow, which has the best overall balance of ease-of-implementation, animation effect, performance and browser support.

Do you have another way of creating an animated border? Perhaps a clever way to utilize transforms for moving a border? Comment below or reach me on Twitter to share your solution to the challenge.

Special thanks to Martin Pitt, Steve Gardner, Cher, Reinier Kaper, Joseph Rex, David Khourshid, and the Animation at Work community.

Animating Border is a post from CSS-Tricks

Logo Wave Awards International: Open for Entries

Original Source: http://justcreative.com/2017/10/10/logo-wave-awards-international/

Want more logo design & branding gigs?

Need to attract more qualified design clients so you can land those $2k, $5k, $20k logo identity and branding projects?

If you’re anything like me, I’m always finding ways to up my value to potential clients.

But to add value, you need to establish credibility and trust.

And the way to do this, is by gaining recognition.

So if you want to add “Award-Winning” to your title and win more design projects, I’ve got the answer…

» Logo Wave Awards International

Did I mention you can win $1000 + a crystal trophy?

Awards Reinvented

How does Logo Wave work?

With Logo Wave, you simply upload your best logos into the latest “wave” consisting of 25-50 other designers. Then the judges pick the winners!

I’m part of the judges panel, along with David Airey, Bill Gardner (LogoLounge), Kyle Courtright, Nadir Balcikli and Ian Paget.

LogoWave Judges

What do you win?

The 1st place winner from each wave receives $1,000.00 cash, a crystal engraved trophy, official certificate, digital badge set and recognition on the site & social media. The top 5 winners will receive all of the above, minus the $1k and trophy.

Crystal Award

Enter Logo Wave Awards Today

Entries are just $49 (one of the cheapest in the industry), but unlike traditional design awards sites, there aren’t specific entry dates. Once they hit that 50 designer (max) threshold, then a new wave begins right away–just like waves in the ocean, it’s continuous in nature.

» Enter your logos today before this wave washes to shore!

Good luck!

A Big List of Typography Books

Original Source: http://mediatemple.net/blog/tips/big-list-typography-books/

For your holiday gift shopping needs! These my picks for some of the most popular books out there on typography, with a tilt toward web typography. Plus a couple of bonus picks by our own Robin Rendle.

Direct Link to Article — Permalink

A Big List of Typography Books is a post from CSS-Tricks

Common WordPress Errors & How to Fix Them

Original Source: http://webdesignerwall.com/tutorials/common-wordpress-errors-fix

WordPress is an amazingly stable platform thanks to the dedication and talent of the hundreds of professionals contributing to it, and the strict code standards they follow. Even so, the huge variety of themes, plugins and server environments out there make it difficult to guarantee nothing will ever go wrong. This guide will help you […]

The post Common WordPress Errors & How to Fix Them appeared first on Web Designer Wall – Design Trends and Tutorials.

The Three Developers and the Insightful User Tester

Original Source: https://www.24a11y.com/2017/three-developers-and-the-insightful-user-tester/

A story by Scott O’Hara:

The first of the developers, why he thought he knew best.
“I’ll get this done ever so quick!” he said, puffing out his chest.

“While the others review wikis, knowledge bases, and specifications,
I’ll lean on my deep knowledge of CSS to circumvent such onerous proclamations.

Specificity will be lax, and BEM classes will be king!
Everyone will marvel at the CSS of this thing.

Direct Link to Article — Permalink

The Three Developers and the Insightful User Tester is a post from CSS-Tricks