Greenpeace: EarthApp

Post pobrano z: Greenpeace: EarthApp
PR, Online, Mobile
Greenpeace

Campaign launched by Isobar Moscow and Greenpeace Russia in which with the help of fake app EarthApp we „aged” popular places on the Earth to draw people’s attention to serious climate issues and global warming.

Nobody cares about ecological issues until he sees touchable effect. To reach the goal we used the hype around the FaceApp – popular app, which ages the user’s face. Together with Greenpeace Russia in July 2019 we introduced the EarthApp – in 24 hours we faked the app-launch which „ages” the Earth. We showed the possible future of 6 recognizable places of Russia if we don’t stop the climate change – Moscow, St. Petersburg, Sochi, Baikal, Siberia, the Arctic – and published them on Greenpeace Russia Instagram account.

Advertising Agency:Isobar, Moscow, Russia

Helly Hansen: Tested by Mountains

Post pobrano z: Helly Hansen: Tested by Mountains

Film
Helly Hansen

When the mountain tests you, trust will set you free.

Advertising Agency:Grey, London, United Kingdom
Creative:Christine Jensen, Thorbjørn Kragh Liljegren
Director:Thorbjørn Kragh Liljegren, Chris Patterson
Creative Director:John Patrick-Racle
Account Director:Jamie Hamill
Business Director:Tim Rogowski
Editor:D-Fran
Colourist:Ben Rogers
Sound Engineer:Liam Conwell
Producer:Luke Mortimer
Planner:Lee Barber, Gemma Bardsley
Josh Haskins:Producer, Warren Miller Entertainment
Warren Miller Entertainment:Chris Patterson
Original Music:WMP Studios
Camera:Colin Witherill
Drone:Colin Witherill
Stills:Cam McLeoud

Helly Hansen: Tested by Mountains

Post pobrano z: Helly Hansen: Tested by Mountains

Film
Helly Hansen

When the mountain tests you, trust will set you free.

Advertising Agency:Grey, London, United Kingdom
Creative:Christine Jensen, Thorbjørn Kragh Liljegren
Director:Thorbjørn Kragh Liljegren, Chris Patterson
Creative Director:John Patrick-Racle
Account Director:Jamie Hamill
Business Director:Tim Rogowski
Editor:D-Fran
Colourist:Ben Rogers
Sound Engineer:Liam Conwell
Producer:Luke Mortimer
Planner:Lee Barber, Gemma Bardsley
Josh Haskins:Producer, Warren Miller Entertainment
Warren Miller Entertainment:Chris Patterson
Original Music:WMP Studios
Camera:Colin Witherill
Drone:Colin Witherill
Stills:Cam McLeoud

The Big Issue: Pay It Forward

Post pobrano z: The Big Issue: Pay It Forward

Online, Mobile
The Big Issue

We’re calling Pay It Forward, the world’s first resellable magazine. With the help of digital bank Monzo, Big Issue magazines will come with individual, scannable QR codes that allow readers to pass magazines on to a friend who can then scan it to pay the original vendor again.

Advertising Agency:FCB Inferno, London, United Kingdom
Chief Creative Officer:Owen Lee
Worldwide Creative Partner:Fred Levron
Creative Director & Lead Art Director:Ben Edwards
Creative Director & Lead Copywriter:Guy Hobbs
Creative Director:Martin McAllister
Senior Art Director:Jessica Giles
Senior Copywriter:Austin Hamilton
Senior Creative Producer:Bridie Scriven
EMEA Director of Communications:CC Clark
Senior Strategist:Laura Pirkis, Lucie Newlan
Senior Account Director:Isabelle Soskice
Account Director:Gemma Corridan
Head Of Film:Nikki Chapman
Tv Producer:Hanna Davis
Photographer:Jack Margerison
Group Marketing & Communications Director:Lara McCullagh
Director:Myles Desenburg
Producer:Kirsty Lane
Engineer:Kunal Singhal, Paul Cuthbertson

Design Deals for the Week

Post pobrano z: Design Deals for the Week

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

26 Best-Selling Bundles: Textures, Stamps, Charts & More

This Best Sellers Bundle offers you 26 different collections to make any graphic designer giddy. These popular collections include symbols, stamps, diagrams, vectors, wallpapers, charts, image masks and more. This wide range of tools is perfect for your latest project from greeting cards to promotional posters.

$21 instead of $375 – Get it now!

Procreate Lettering Toolkit with 290+ Brushes

This robust Lettering Toolkit comes jampacked with over 290 Procreate brushes to really up your lettering game. Handle just about any lettering job you need with this holistic set of brushes that cover everything from calligraphy to graffiti with dozens of different angles, weights and styles. You can even easily convert them to vectors through image-trace and other applications.

$14 instead of $35 – Get it now!

220+ Fonts, 100 Vector Objects & More

This Huge Typographic Pack is overflowing with tools for your designer needs. You’ll get 220+ individual fonts, made from 44 typefaces, as well as 60 logo type templates. Not to mention 100 vector objects to really finish off your designs in style.

$15 instead of $2900 – Get it now!

Convert Images, Text or Shapes to Gorgeous Watercolor Paintings

With the Ultimate Watercolor Creator, you can create all sorts of original watercolor paintings from your personal photos, text or shapes in just a matter of minutes. Packed with hundreds of premade templates, watercolor brushes, textures, patterns and shapes, you won’t believe how easy it is to produce gorgeous hi-res premium results.

$16 instead of $87 – Get it now!

Thanks for being a subscriber, here is your FREE house vector icons set.

Design Deals for the Week

Post pobrano z: Design Deals for the Week

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

26 Best-Selling Bundles: Textures, Stamps, Charts & More

This Best Sellers Bundle offers you 26 different collections to make any graphic designer giddy. These popular collections include symbols, stamps, diagrams, vectors, wallpapers, charts, image masks and more. This wide range of tools is perfect for your latest project from greeting cards to promotional posters.

$21 instead of $375 – Get it now!

Procreate Lettering Toolkit with 290+ Brushes

This robust Lettering Toolkit comes jampacked with over 290 Procreate brushes to really up your lettering game. Handle just about any lettering job you need with this holistic set of brushes that cover everything from calligraphy to graffiti with dozens of different angles, weights and styles. You can even easily convert them to vectors through image-trace and other applications.

$14 instead of $35 – Get it now!

220+ Fonts, 100 Vector Objects & More

This Huge Typographic Pack is overflowing with tools for your designer needs. You’ll get 220+ individual fonts, made from 44 typefaces, as well as 60 logo type templates. Not to mention 100 vector objects to really finish off your designs in style.

$15 instead of $2900 – Get it now!

Convert Images, Text or Shapes to Gorgeous Watercolor Paintings

With the Ultimate Watercolor Creator, you can create all sorts of original watercolor paintings from your personal photos, text or shapes in just a matter of minutes. Packed with hundreds of premade templates, watercolor brushes, textures, patterns and shapes, you won’t believe how easy it is to produce gorgeous hi-res premium results.

$16 instead of $87 – Get it now!

Thanks for being a subscriber, here is your FREE house vector icons set.

Understanding How Reducers are Used in Redux

Post pobrano z: Understanding How Reducers are Used in Redux

A reducer is a function that determines changes to an application’s state. It uses the action it receives to determine this change. We have tools, like Redux, that help manage an application’s state changes in a single store so that they behave consistently.

Why do we mention Redux when talking about reducers? Redux relies heavily on reducer functions that take the previous state and an action in order to execute the next state.

We’re going to focus squarely on reducers is in this post. Our goal is to get comfortable working with the reducer function so that we can see how it is used to update the state of an application — and ultimately understand the role they play in a state manager, like Redux.

What we mean by “state”

State changes are based on a user’s interaction, or even something like a network request. If the application’s state is managed by Redux, the changes happen inside a reducer function — this is the only place where state changes happen. The reducer function makes use of the initial state of the application and something called action, to determine what the new state will look like.

If we were in math class, we could say:

initial state + action = new state

In terms of an actual reducer function, that looks like this:

const contactReducer = (state = initialState, action) => {
  // Do something
}

Where do we get that initial state and action? Those are things we define.

The state parameter

The state parameter that gets passed to the reducer function has to be the current state of the application. In this case, we’re calling that our initialState because it will be the first (and current) state and nothing will precede it.

contactReducer(initialState, action)

Let’s say the initial state of our app is an empty list of contacts and our action is adding a new contact to the list.

const initialState = {
  contacts: []
}

That creates our initialState, which is equal to the state parameter we need for the reducer function.

The action parameter

An action is an object that contains two keys and their values. The state update that happens in the reducer is always dependent on the value of action.type. In this scenario, we are demonstrating what happens when the user tries to create a new contact. So, let’s define the action.type as NEW_CONTACT.

const action = {
  type: 'NEW_CONTACT',
  name: 'John Doe',
  location: 'Lagos Nigeria',
  email: 'johndoe@example.com'
}

There is typically a payload value that contains what the user is sending and would be used to update the state of the application. It is important to note that action.type is required, but action.payload is optional. Making use of payload brings a level of structure to how the action object looks like.

Updating state

The state is meant to be immutable, meaning it shouldn’t be changed directly. To create an updated state, we can make use of Object.assign or opt for the spread operator.

Object.assign

const contactReducer = (state, action) => {
  switch (action.type) {
    case 'NEW_CONTACT':
    return Object.assign({}, state, {
      contacts: [
        ...state.contacts,
        action.payload
      ]
    })
    default:
      return state
  }
}

In the above example, we made use of the Object.assign() to make sure that we do not change the state value directly. Instead, it allows us to return a new object which is filled with the state that is passed to it and the payload sent by the user.

To make use of Object.assign(), it is important that the first argument is an empty object. Passing the state as the first argument will cause it to be mutated, which is what we’re trying to avoid in order to keep things consistent.

The spread operator

The alternative to object.assign() is to make use of the spread operator, like so:

const contactReducer = (state, action) => {
  switch (action.type) {
    case 'NEW_CONTACT':
    return {
        ...state, contacts:
        [...state.contacts, action.payload]
    }
    default:
      return state
  }
}

This ensures that the incoming state stays intact as we append the new item to the bottom.

Working with a switch statement

Earlier, we noted that the update that happens depends on the value of action.type. The switch statement conditionally determines the kind of update we’re dealing with, based on the value of the action.type.

That means that a typical reducer will look like this:

const addContact = (state, action) => {
  switch (action.type) {
    case 'NEW_CONTACT':
    return {
        ...state, contacts:
        [...state.contacts, action.payload]
    }
    case 'UPDATE_CONTACT':
      return {
        // Handle contact update
      }
    case 'DELETE_CONTACT':
      return {
        // Handle contact delete
      }
    case 'EMPTY_CONTACT_LIST':
      return {
        // Handle contact list
      }
    default:
      return state
  }
}

It’s important that we return state our default for when the value of action.type specified in the action object does not match what we have in the reducer — say, if for some unknown reason, the action looks like this:

const action = {
  type: 'UPDATE_USER_AGE',
  payload: {
    age: 19
  }
}

Since we don’t have this kind of action type, we’ll want to return what we have in the state (the current state of the application) instead. All that means is we’re unsure of what the user is trying to achieve at the moment.

Putting everything together

Here’s a simple example of how I implemented the reducer function in React.

See the Pen
reducer example
by Kingsley Silas Chijioke (@kinsomicrote)
on CodePen.

You can see that I didn’t make use of Redux, but this is very much the same way Redux uses reducers to store and update state changes. The primary state update happens in the reducer function, and the value it returns sets the updated state of the application.

Want to give it a try? You can extend the reducer function to allow the user to update the age of a contact. I’d like to see what you come up with in the comment section!

Understanding the role that reducers play in Redux should give you a better understanding of what happens underneath the hood. If you are interested in reading more about using reducers in Redux, it’s worth checking out the official documentation.

The post Understanding How Reducers are Used in Redux appeared first on CSS-Tricks.

Bidirectional Horizontal Rules in CSS

Post pobrano z: Bidirectional Horizontal Rules in CSS

Say you have a <blockquote> and the design calls for a thick border along the left side. Well, you might not necessarily mean left side, but actually mean on the side of the start of the text.

That’s exactly what CSS logical properties are meant to address, and Hussein Al Hammad has a nice article laying out some use cases, including the blockquote thing I mentioned above.

By using logical properties, you don’t have to mess around with manually writing selectors including [dir="rtl"] or needing to be aware of writing modes and such. The box model stuff (borders, padding, margin…) will adjust where it needs to be.

Hussein’s blockquote is a good baby step example for understanding of all this:

blockquote {
  /* Rather than... */
  border-left: 4px solid #aaa;
  padding-left: 1.75rem;

  /* You'd do... */
  border-inline-start: 4px solid #aaa;
  padding-inline-start: 1.75rem;
}

See the Pen
Logical properties demo: blockquote
by Hussein Al Hammad (@hus_hmd)
on CodePen.

Support is pretty good.

This browser support data is from Caniuse, which has more detail. A number indicates that browser supports the feature at that version and up.

Desktop

Chrome Opera Firefox IE Edge Safari
69 62* 41 No 76 12.1

Mobile / Tablet

iOS Safari Opera Mobile Opera Mini Android Android Chrome Android Firefox
12.2-12.4 46* No 76 76 68

One thing that threw me off in the article is the term „Horizontal Rules.” First I imagined the <hr> element. Then I imagined wanting to reverse the direction of the design with logical properties. Usually an <hr> is just a line so horizontal direction doesn’t matter, but let’s say it’s like a shorter line along the edge where new lines start after wrapping.

We could draw the shorter line with backgrounds that cover different parts of the box model, then use logical properties where the padding applies. This is a pretty unique edge case, but it’s fun to fiddle with:

See the Pen
<hr>s that are direction aware kinda
by Chris Coyier (@chriscoyier)
on CodePen.

It would be even easier if we had logical gradients.

Direct Link to ArticlePermalink

The post Bidirectional Horizontal Rules in CSS appeared first on CSS-Tricks.

The Landscape of Cross-Platform App Development

Post pobrano z: The Landscape of Cross-Platform App Development

I don’t track this stuff very well, but I get it. If you want a native app for Android and iOS, it sure would be nice to only have to write it once rather than two very different languages. Roughly double your reach without doubling the work. More and more of these things are reaching into desktop as well, meaning three targets for one.

Stuff like PhoneGap comes to mind. They say, „Reuse existing web development skills to quickly make hybrid applications built with HTML, CSS and JavaScript.” That’s obviously compelling for web developers who would have to learn minimal new things. My brain leans more toward, „Well if I’m going to write this thing in HTML, CSS, and JavaScript, why don’t I leave it at that?” Progressive Web Apps are doing great things. Still, I’m curious what the flagship PhoneGap apps are. Do I use any great ones and not even know it?

If you’re going to layer on a framework, but still stay in JavaScript-land, I’d think the biggest player is React Native. I hear it’s almost always used with Expo these days, which apparently has a thing to help React Native work on the web. Plus, there is literally React Native for Web.

In React-land, there is another new player: Ionic React. It targets all three platforms (iOS, Android, and Desktop) right out of the gate. Ionic isn’t new though — it’s long been a framework that does this in JavaScript (alternatively in Angular) and is apparently coming soon to Vue. Compelling. Nader Dabit has a first-look blog post that is pretty well done.

This all starts to get confusing to me as apparently Ionic ultimately uses Cordova under the hood… just like PhoneGap does? Or something? But now Ionic is moving to their own thing? I guess it makes sense that there are some low-level interpreter things that translate web primitives to native primitives and that people build developer tooling on top of that.

Google’s got a stake in this game with Flutter. Flutter is about hitting all three targets and helping you build the UI. Material design, animation and performance are all first-class citizens. It’s all in Dart though. Dart can compile to JavaScript (so it can be used for web stuff) but it also compiles to machine code. I imagine Flutter apps are compiled that way when they become native apps for bonus performance. I don’t have a good sense of how popular Dart is, but I’d assume web developers really won’t care what they’re writing in if great performance on all three targets is the outcome.

Ever further outside my wheelhouse is Xamarin, which is Microsoft’s take on unifying development on multiple platforms. The languages involved here are .NET and C#. It has all the same promises as everything else: build with this and it works everywhere! This is for developer convenience! It’s fast and you will make amazing things with it!

I’m always of two minds with all this stuff. Some part of me is envious of really nice native apps. Most of my favorite apps on my phone feel very native, although I’m not sure I could spot which framework created them, if any. For example, I have a Dribbble app on my phone and I quite like it. It’s simple and nice. I open it up and I’m logged in, which is usually not the case when I open a web app. It feels fast and has all the in-page animation stuff you expect from a native app. I totally wish we had an app like that for CodePen. Maybe if we were starting over today we’d write it in some cross-platform framework that targets all three platforms and maybe gives us some cool competitive advantage. Another part of me is like, meh, I’m a web guy on purpose. I think the native open web is the place to be and has the most longevity. A codebase that serves that well will be the least regrettable over time.

The post The Landscape of Cross-Platform App Development appeared first on CSS-Tricks.

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