Build Custom Dashboards with MongoDB, Azure & Serverless Functions

Original Source: https://www.sitepoint.com/build-custom-dashboards-with-mongodb-azure-serverless-functions/

This article was originally published on Ahmad Awais. Thank you for supporting the partners who make SitePoint possible.

TL;DR: I’m building a custom WordPress dashboard for an enterprise client which is powered by React.js on top of Node.js, with MongoDB Atlas as the database.

This dashboard uses several Microsoft Azure services, e.g., Cognitive Services, Azure App Services, and especially serverless Azure Functions. In this post, you’ll learn how to build a small module from it and the reason behind my choice of stack, apps, and products.

One of my enterprise clients who owns a huge networking and media company has a large-scale WordPress site set up. He recently consulted me about the possibility of building a custom WordPress dashboard (based on the WordPress REST API) — to help him make intelligent business decisions via Machine Learning and Artificial Intelligence.

With JavaScript eating up the world and WordPress adapting to the move by creating the Gutenberg project, I thought of an architecture/stack where WordPress would be our content layer, a familiar battle-tested environment that does its job well with a custom dashboard that’s built with JavaScript.

When you’re tasked to build a modern JavaScript application, you find yourself in a mix of different frameworks, tools, and dev workflows. The JavaScript ecosystem has grown a lot over the last couple of years. We have many, many good options available today.

So, after researching my options for a bit, I opted to use React.js on top of Node.js to start building the custom WordPress dashboard. While the project is in its ideation phase at the moment, I think it’s important that I share some of our goals here to define context behind my choice of the stack.

Custom WordPress Dashboard Goals

Imagine you own a large networking company where over 500 hotels (in three different countries) use your services to power their conference halls, IT meetings, and online property management like the sites and blogs. That’s what my client does.

Most of this is powered by a huge multi-site WordPress instance that manages everything for the hotels, websites, online booking, registrations, events, tickets, reviews, and comments. There’re also other systems running different software which are able to produce content via REST API.

We’ve set out to create a custom WordPress dashboard with many goals in mind, but I’m listing a few of them which are related to this particular article. Take a look at what I have built so far, it’s all based on serverless Azure functions — which are pretty awesome.

A Custom WordPress Dashboard with MongoDB Atlas, Microsoft Azure, & Serverless Functions!

? High-level Data Reporting

The custom dashboard will report all the high-level data, e.g. things like live sales happening throughout my client’s portfolio (500+ hotels), entity/time-based and date-based breakdowns.

And how each of his franchise performing on a daily, weekly, monthly basis. All of this data is being fed to MongoDB Atlas. More on that later.

⚡ Serverless Automation

Most of the modules are built upon serverless architecture — which in this case provides huge benefits. All the automation is always running and the cost is paid as you go i.e. pay for what you use.

An initial rough estimate puts this solution 34% more economical than having a server VM running all the time. We are using Azure Functions for this serverless automation.

? IoT (Internet of Things) Hub

There are about ~200 IT managers working for my client who have IoT enabled devices that feed data into several online projects. This custom dashboard also includes that data for making better decisions and connecting the whole registration, management, maintenance team’s hub into a single place.

As you might have already guessed, this project makes use of IoT Hub from Microsoft Azure to connect, monitor, and manage all of the IoT assets.

? Machine Learning and Artificial Intelligence

We’re using a lot of different services from Microsoft Azure for the sake of making this dashboard artificially intelligent by Machine Learning.

There’s a huge dataset that is fed to the ML Studio which later helps us predict different decisions like space management, low registrations trends for IT events, and questions like why and when these things happen.

While the Machine Learning part is beyond the scope of this article, I still plan to touch base with some of the awesome Artificial Intelligence I’ve been able to cook in via Azure’s Cognitive Services.

? Live & Real-time

One of the most important aspects of this custom dashboard is that it’s live and real-time. Which means I need a managed database that can cope with this amount of data and still stay highly available.

But at the same time, it’s for the management purposes and doesn’t need to have any impact on the WordPress sites. That is a crucial system design decision for this dashboard.

By that what I mean is we can do all sorts of experiments with this custom dashboard but it shouldn’t have any impact on the database/servers which are running the multi-site WordPress instance.

MongoDB & MongoDB Atlas

For this custom WordPress dashboard, I am using MongoDB Atlas as a DBaaS (Database as a Service). And I couldn’t be happier. When I first shared that I’d be using MongoDB, many developers had concerns.

Mongodb

Most of the questions asked why I’d add another layer of complexity by adding yet another database to the mix. Why not use the WordPress database as it is? To answer these questions and more I have prepared a list of reasons as to why I am using MongoDB Atlas.

♨ Dislike for RDBMS

I personally dislike relational databases. Most of the time, for me they get in the way of building applications. I have to completely get out of the app I am building, think about my database in the future and design a good schema which always ends up a bad exercise for my dev workflow. It’s counter-intuitive at best — at least for me, it is.

? HDD Is Cheap — CPU/RAM Is Not

Old databases were mostly designed to save disk space, among other things. This led to a plethora of problems like normalization, indexing, and made sharding, auto-scaling, and replication harder.

Nowadays, disk space is dirt cheap. On the other hand, CPU/RAM is not, and your sysadmin costs can skyrocket very quickly if you end up with a bad choice here.

Like you wanted to create a custom dashboard but your system design architect cost you two sysadmins with how they chose to design your system. Similarly, my client wanted a managed solution without having to hire a team of IT/DevOps folks — at least for an experimental custom dashboard.

? MongoDB’s Pros

Schema-less. Flexible schema for the win. I don’t have to change anything, my regular app development workflow, creating a Node.js-based app that I am manipulating with JSON type data, I can just feed that into MongoDB and it just works.
Workflow-consistency. Creates documents the way my custom dashboard is represented. Sales, Videos, Talks, Comments, Reviews, Registrations, etc. all of that have similar data representation on the frontend and the backend — and even in the database. I manage 3rd party data via middleware. This consistency translates to clean code.
Ease of scale-out. It scales reads by using replica sets. Scales writes by using sharding (auto-balancing). Just fire up another machine and away you go. Most importantly, instead of vertical scaling via RDBMS, MongoDB lets you scale horizontally with different levels of consistency. That’s a big plus. ➕
Cost. Depends on which RDBMS of course, but MongoDB is free and can run on Linux, ideal for running on cheaper commodity kits.

? Why MongoDB Atlas?

Well, now that I know MongoDB is the right database choice, there are so many different options to host your database. I can self-host on my Linux machine via DigitalOcean, use a cloud provider like AWS/Azure or a choose a DBaaS service specific to MongoDB.

Mongodb Atlas

But I want a fast, secure, and managed MongoDB solution that I can easily scale with the growth of the number of modules we attach in this custom WordPress dashboard. That’s MongoDB Atlas.

MongoDB Atlas is a cloud-hosted MongoDB service engineered and run by the same team that builds the database. And guess what, I trust that they follow the best operational practices since they are the ones who’re building MongoDB in the first place.

I want this custom dashboard to be self-managed, serverless, and using MongoDB Atlas saves me from worrying about software patching, backups, and reliable configuration setup for new DB updates. Again a big plus. ➕

Also, the fact that MongoDB Atlas is supported cross-platform as well as cross-region and across different cloud providers makes it a much better choice. I think each Cluster comes with two replica sets, ready to scale.

? MongoDB Compass

Now that we are going to work with MongoDB, it’d be great to have a tool through which we can explore our database, view the changes, debug and so on. For this purpose, MongoDB again takes the lead with a product called MongoDB Compass. Take a look.

Mongodb Compass

I suggest that you go ahead and download MongoDB Compass. It’s literally the best tool to visualize your MongoDB database. Here’s a set of features:

Visualize and explore: Take a look at your database, find out how things are looking, and even visualize stuff like maps/coordinates.
Insert, modify, and delete: You can also perform CRUD operations for your DB right from MongoDB compass. Makes testing easier.
Debug and optimize: Finally, analyze your data, debug it and even find out about performance issues right inside a great GUI for your database. This tool is a must-have if you work with MongoDB.
Extensible: And the best part is you can build your own plugins to extend MongoDB Compass. Here’s the documentation on building your own Compass plugins.
Enterprise Flavor: MongoDB Compass comes in a few flavors: Community (Free), and Enterprise (Licensed) — the Enterprise version is the one that lets you visualize DB schema.

✅ Getting Started with MongoDB Atlas

Let’s get started and build a simple module that’s part of the custom WordPress dashboard I am building. For this module, we are collecting all the sales related data. For that, we need a MongoDB instance, and of course we’re using MongoDB Atlas here.

Step #1: Go to MongoDB Atlas →

Go to the MongoDB Atlas site and register a completely free MongoDB instance hosted on AWS, with shared RAM and 512 MB storage. Click the Get Started Free button.

Mongodb Atlas

Step #2: Sign up at MongoDB Atlas →

Now go ahead and sign up with your email ID and fill up the details. It’s amazing that you can sign up and use a free MongoDB Atlas hosted DB instance, and they don’t even require you to add a credit card for that.

Mongodb Atlas Signup

Step #3: Create the Cluster

Now you’ll be redirected to a page with a bunch of information about the new MongoDB Cluster you’re about to create. I suggest that you review this information, and move ahead by clicking the Create Cluster button at the bottom just like in the screenshot below.

Mongodb Atlas Create Cluster

Step #4: Create DB Username & Password

It’ll take a minute and your DB will be created. Once that happens, head over to the Security > MongoDB Users and click on the + ADD NEW USER button on the right, to create a new user for your database. Let’s keep all the other settings set to default for the sake of this intro-article.

I’m setting the user/pass as usermongo but you know better.

GIF for MongoDB Atlas, Microsoft Azure, & Serverless Functions

Step #5: Add IP to Whitelist for Access

To be able to access your MongoDB Atlas database, you need to setup the IP Whitelist with the IP of your server where your app is hosted. Authentication is beyond what I am discussing here so for the purpose of this demo let’s just allow everyone (obviously a bad practice in production).

So, again, head over to the Security > IP Whitelist and click on the + ADD IP ADDRESS button on the right, and finally ALLOW ACCESS FROM ANYWHERE button to allow the anonymous access.

GIF for MongoDB Atlas, Microsoft Azure, & Serverless Functions

Step #6: Connect via MongoDB Compass

Now that our DB’s IP access and a user has been created, we can pick up the connection string and use it to connect to our database with our MongoDB Compass application.

Go to Connect then choose Connect with MongoDB Compass and download Compass if you haven’t. Copy the URI Connection String. Finally, open Compass and it should be able to detect the connection string in your clipboard, allow it to connect to your database.

And you are set to visualize your database, analyze its performance, and even run complete CRUD operations. Awesome! ?

GIF for MongoDB Atlas, Microsoft Azure, & Serverless Functions

Now that we have created a MongoDB Atlas and connected it with MongoDB Compass, we can move forward and start building our Node.js application.

WordPress REST API — FTW!

This WordPress based Node.js custom dashboard interacts with the WordPress instance via the WordPress REST API. Since this is a Node.js app, I am using an awesome library called wpapi written by K Adam White. He has also built a demo Express based WordPress app. That’s what I got inspired by while building this custom dashboard, so you’ll see a lot of it here.

? WordPress Custom Router Based on Express

The router is set up with Express. Here’s a basic error handler and router template for using WordPress with express.

‘use strict’;

var express = require(‘express’);
var router = express.Router();
var siteInfoMiddleware = require(‘../middleware/site-info’);

// Set global site info on all routes
router.use(siteInfoMiddleware);

// Public Routes
// =============

router.get(‘/’, require(‘./index’));
router.get(‘/page/:page’, require(‘./index’));
router.get(‘/:slug’, require(‘./single’));
router.use(‘/tags/:tag’, require(‘./tag’));
router.use(‘/categories/:category’, require(‘./category’));

// Catch 404 and forward to error handler.
router.use(function (req, res, next) {
var err = new Error(‘Not Found’);
err.status = 404;
next(err);
});

// Error Handling
// ==============

// Development error handler will print stacktrace.
function developmentErrorRoute(err, req, res, next) {
res.status(err.status || 500);
res.render(‘error’, {
message: err.message,
error: err
});
}

// Production error handler. No stacktraces leaked to user.
function friendlyErrorRoute(err, req, res, next) {
res.status(err.status || 500);
res.render(‘error’, {
message: err.message,
error: {}
});
}

// Configure error-handling behavior
if (router.get(‘env’) === ‘development’) {
router.use(developmentErrorRoute);
} else {
router.use(friendlyErrorRoute);
}

module.exports = router;

View the code on Gist.

? Basic Express Based Implementation

I am not hosting this entire thing on WordPress, but the initial plan was to do just that. If you want to go do that, you’d wanna build the index by querying all the info using the RSVP.hash utility for convenience and parallelism. For that here’s what you should do.

‘use strict’;

var wp = require( ‘../services/wp’ );
var contentService = require( ‘../services/content-service’ );
var pageNumbers = require( ‘../services/page-numbers’ );
var pageTitle = require( ‘../services/page-title’ );
var RSVP = require( ‘rsvp’ );

function getHomepage( req, res, next ) {
var pages = pageNumbers( req.params.page );

RSVP.hash({
archiveBase: ”,
pages: pages,
title: pageTitle(),
// Primary page content
posts: wp.posts().page( pages.current ),
sidebar: contentService.getSidebarContent()
}).then(function( context ) {
if ( req.params.page && ! context.posts.length ) {
// Invalid pagination: 404
return next();
}

res.render( ‘index’, context );
}).catch( next );
}

module.exports = getHomepage;

View the code on Gist.

? Authentication Cooked In

For this setup, you’ll also need to authenticate your Node.js app by giving it the authentication data, which along with wpapi can be processed like this. Beware this is not always a best practice if you don’t use correct permissions and environment variables settings.

var WP = require( ‘wordpress-rest-api’ );
var _ = require( ‘lodash’ );

var config = _.pick( require( ‘./config’ ).wordpress, [
// Whitelist valid config keys
‘username’,
‘password’,
‘endpoint’
]);

var wp = new WP( config );

module.exports = wp;

View the code on Gist.

? Site Content Accumulation

And finally, you are able to consume all the content by creating a content service which handles recursively fetching:

All the pages of a paged collection.
Your WordPress site’s info.
An alphabetized list of categories.
A specific category (specified by slug) from the content cache.
An alphabetized list of tags.
A specific tag (specified by slug) from the content cache
Other content required to have some feature parity with WP.

The code for this looks somewhat like this.

‘use strict’;

var wp = require( ‘./wp’ );
var cache = require( ‘./content-cache’ );
var _ = require( ‘lodash’ );
var RSVP = require( ‘rsvp’ );

/**
* Recursively fetch all pages of a paged collection
*
* @param {Promise} request A promise to a WP API request’s response
* @returns {Array} A promise to an array of all matching records
*/
function all( request ) {
return request.then(function( response ) {
if ( ! response._paging || ! response._paging.next ) {
return response;
}
// Request the next page and return both responses as one collection
return RSVP.all([
response,
all( response._paging.next )
]).then(function( responses ) {
return _.flatten( responses );
});
});
}

function siteInfo( prop ) {
var siteInfoPromise = cache.get( ‘site-info’ );

if ( ! siteInfoPromise ) {
// Instantiate, request and cache the promise
siteInfoPromise = wp.root( ‘/’ ).then(function( info ) {
return info;
});
cache.set( ‘site-info’, siteInfoPromise );
}

// Return the requested property
return siteInfoPromise.then(function( info ) {
return prop ? info[ prop ] : info;
});
}

/**
* Get an alphabetized list of categories
*
* All archive routes display a sorted list of categories in their sidebar.
* We generate that list here to ensure the sorting logic isn’t duplicated
* across routes.
*
* @method sortedCategories
* @return {Array} An array of category objects
*/
function sortedCategories() {
return all( wp.categories() ).then(function( categories ) {
return _.chain( categories )
.sortBy( ‘slug’ )
.value();
});
}

function sortedCategoriesCached() {
var categoriesPromise = cache.get( ‘sorted-categories’ );

if ( ! categoriesPromise ) {
categoriesPromise = sortedCategories();
cache.set( ‘sorted-categories’, categoriesPromise );
}

return categoriesPromise;
}

/**
* Get a specific category (specified by slug) from the content cache
*
* The WP API doesn’t currently support filtering taxonomy term collections,
* so we have to request all categories and filter them down if we want to get
* an individual term.
*
* To make this request more efficient, it uses sortedCategoriesCached.
*
* @method categoryCached
* @param {String} slug The slug of a category
* @return {Promise} A promise to the category with the provided slug
*/
function categoryCached( slug ) {
return sortedCategoriesCached().then(function( categories ) {
return _.findWhere( categories, {
slug: slug
});
});
}

/**
* Get a specific tag (specified by slug) from the content cache
*
* The WP API doesn’t currently support filtering taxonomy term collections,
* so we have to request all tags and filter them down if we want to get an
* individual term.
*
* To make this request more efficient, it uses the cached sortedTags promise.
*
* @method tagCached
* @param {String} slug The slug of a tag
* @return {Promise} A promise to the tag with the provided slug
*/
function tagCached( slug ) {
return sortedTagsCached().then(function( tags ) {
return _.findWhere( tags, {
slug: slug
});
});
}

/**
* Get an alphabetized list of tags
*
* @method sortedTags
* @return {Array} An array of tag objects
*/
function sortedTags() {
return all( wp.tags() ).then(function( tags ) {
return _.chain( tags )
.sortBy( ‘slug’ )
.value();
});
}

function sortedTagsCached() {
var tagsPromise = cache.get( ‘sorted-tags’ );

if ( ! tagsPromise ) {
tagsPromise = sortedTags();
cache.set( ‘sorted-tags’, tagsPromise );
}

return tagsPromise;
}

function getSidebarContent() {
return RSVP.hash({
categories: sortedCategoriesCached(),
tags: sortedTagsCached()
});
}

module.exports = {
// Recursively page through a collection to retrieve all matching items
all: all,
// Get (and cache) the top-level information about a site, returning the
// value corresponding to the provided key
siteInfo: siteInfo,
sortedCategories: sortedCategories,
sortedCategoriesCached: sortedCategoriesCached,
categoryCached: categoryCached,
tagCached: tagCached,
sortedTags: sortedTags,
sortedTagsCached: sortedTagsCached,
getSidebarContent: getSidebarContent
};

View the code on Gist.

? Custom Routes & Sales Data

Finally, I have cooked in quite a few custom routes from where I can attain any kind of sales related data. For the particular architecture I have in place, I’m again using the RSVP.hash utility for convenience and parallelism. It works like a charm.

The post Build Custom Dashboards with MongoDB, Azure & Serverless Functions appeared first on SitePoint.

Collective #427

Original Source: http://feedproxy.google.com/~r/tympanus/~3/iuLw0R-AdHg/

C424_Hello

This content is sponsored via Syndicate Ads
HelloSign API: Everything IT requires and Developers love

With a robust SDK, amazing support, detailed documentation, and super clean dashboard, HelloSign API is sure to make your team happy.

Try it free today

C427_Lept

Lepto

A tool for automated image editing, optimization and analysis via CLI and a web interface.

Check it out

C427_devtube

DevTube

A collection of all developer and technical videos in one place.

Check it out

C427_keyframers

Movable Mountains

Watch David Khourshid and Stephen Shaw code up a beautiful parallax scroll effect using CSS and some JavaScript.

Watch it

C427_origami

Rabbit Ear

Rabbit Ear is an interesting JavaScript library for designing origami. By Robby Kraft.

Check it out

C427_access

Accessibility inspector

Read all about Firefox’s accessibility inspector which helps visualizing information exposed to assistive technologies on a web page, allowing you to check what’s missing or needs attention.

Read it

C427_calli

Animate Calligraphy with SVG

Claus Colloseus shows a great technique for animating calligraphic SVG “strokes”.

Read it

C427_uikit

Stream UI Kit

A beautiful open source Bootstrap 4 UI kit.

Get it

C427_githubedu

GitHub Education

GitHub’s new project that aims to make it possible for schools to adopt GitHub and their education offerings. Read more about it in this article.

Check it out

C427_summericons

Tropical Icon Set (PNG, SVG)

A fun seasonal icon set designed by Freepik for Speckyboy.

Get it

C427_githunt

IssueHunt

A funding platform for open-source maintainers and contributors.

Check it out

C427_fontalpha

Free Font: Alpha

Callum Finn designed this interesting minimal display font.

Get it

C427_gameboy

Game boy running zelda links awakening intro

Fantastic demo made by Karl Patrik Johansson.

Check it out

C427_animations

Web Animations in WebKit

Read how Safari Technology Preview 59 will have Web Animations turned on by default.

Read it

C427_globe

Gio.js

Gio.js is an open source library for 3D globe data visualization built with Three.js

Check it out

C427_icons

BoxIcons

A carefully crafted open source icon set with more than 350 icons.

Get it

C427_svg

Using Custom Fonts With SVG in an Image Tag

Thomas Yip explains how to use Nano for SVG optimization.

Read it

C427_portfolio

Simple Portfolio

A super simple way to instantly generate your portfolio website.

Check it out

C427_jelly

Bendy Drinks Menu

A jelly scroll menu by Chris Gannon.

Check it out

C427_font

Free Font: 3-D Sketch

A playful, hand-drawn display font made by Linseed Studio.

Get it

Collective #427 was written by Pedro Botelho and published on Codrops.

50 Useful Android Apps for Designers (2018)

Original Source: https://www.hongkiat.com/blog/android-apps-designer/

Long list of Android apps that are useful for designers including photo editing and sharing, and social media apps along with others.

The post 50 Useful Android Apps for Designers (2018) appeared…

Visit hongkiat.com for full content.

Should Freelancers Join a Professional Network?

Original Source: https://www.webdesignerdepot.com/2018/07/should-freelancers-join-a-professional-network/

One of the biggest concerns that freelancers have is that they can be isolated from others in similar fields. So can a professional network offer the additional resources you need to succeed?

The answer is yes if you find the right group. Here are reasons why you should join a professional network and how to find one that’s right for you.

You’ll Build Relationships

The No. 1 reason to join a professional organization is to develop personal and business relationships. This can be vitally important to freelance web designers and developers because you most often work in isolation.

A professional group can help you stay fresh in the design community as well as work with people who have different skills and strengths. You might find someone that you can refer work to when you are busy or a person that will serve as a mentor to you. Professional groups often include members from all different career levels and that have varying experience. There’s a lot to learn from each other.

Professional groups of a more general nature—not field specific—can also come with benefits. These groups are also good for cultivating relationships, but rather than staying on top of design trends and changes, you might actually develop new clients with these connections.

Get Access to Development and Training

Affiliation with a professional group often comes with perks such as free or discounted training opportunities. From live training sessions and speakers to webinars and online training, this is often a major benefit of a professional group.

Professional organizations at a local level are often part of a larger, national organization, which provides many of these opportunities to members. Many groups also include large national directories and access to discounts – from health insurance to web hosting – for members, depending on the organization. These opportunities can often make training and tools that might seem expensive more accessible and affordable (even free in some instances).

Development and training can also extend to national events. Most bigger organizations have local, regional and national gatherings. These conferences are a breeding ground for training and large-scale networking. Often the most active members of an organization at the local level have easy access to these events (and the parent organization often will help foot the bill for participants).

“Free” Promotion for Your Brand

Think of professional networking as “free” promotion for your brand or freelance design or web development business. The more people you meet and talk with about work, the more opportunities you have to generate new business.

Whenever meeting with members of a professional organization, you should always be networking. Engaging in projects with the group will also show others how well you collaborate and what you are good at. (This can result in more freelance work and referrals from group members.)

Make sure to take advantage of opportunities to show off as well. Most professional organizations have some type of honors or awards each year. Make sure to enter your work. Whether you win or not, it puts your name and projects in front of your full organization and a panel of judges. (There’s no better opportunity to show the work you do to a wide – and industry connected – audience.)

Get Involved in the Community Locally and Nationally

A linkage to a professional organization is an easy way to get involved in the design community locally and nationally. You’ve got an immediate network and connection to an established group with events, public service projects and common goals. While not all groups are part of larger organizations, many are. Look for local or affiliated chapters of organizations such as these:

AIGA, the professional organization for design
Freelancers Union
International Web Association
International Council of Design
Graphic Artists Guild
Association of Registered Graphic Designers
The HTML Writers Guild
Interaction Design Association

How to Find a Professional Group That Fits You

Finding the right professional group can take a little time.

Start by looking for organizations that are rooted in things you believe in. What is the mission of the organization? What do they support or promote and is that in line with your goals?
Then look at the meeting and event schedule. Does it work with your calendar? There’s no point in joining an organization if you know you’ll never make any of the meetings.
Attend with a friend. Do you know someone already involved with a specific group? Most organizations allow potential members to visit an event or meeting without a financial commitment; ask a friend if you can tag along.
Think about the budget. Can you afford dues or costs associated with the organization? Costs to join professional networks range from free to hundreds of dollars annually.
Look at the big picture. Does the group have ties to a bigger national organization? It’s almost like interviewing for a job; do you see the potential for personal/professional growth?

When Not to Join a Professional Group

Professional networking groups are not one size fits all. Don’t feel like you have to be a member of a group just because it relates to your field. Professional networking groups and associations only help your resume if you are active and involved. Don’t join a group if:

You don’t connect with current members. Just like workplaces, professional groups have a culture of their own. Find people who feel like part of your tribe.
You don’t believe in the mission or projects the group takes on.
The organization has a bad reputation in your community.
You don’t plan on actually participating.
You don’t get value from membership. (This can happen with the best professional groups over time and sometimes you need to “phase out” of a current role and move on to something else.)

Conclusion

When making a choice to join a professional networking group, look for an organization with ties or a chapter where you live. You’ll almost always get more out of an organization where you get actual face time with other members than an organization that’s all online.

While there are benefits to both kinds of groups, make sure to pick a group that you actually benefit from personally or professionally and that you want to be a part of. You should want to go to meetings and events and spend time working with other members. That’s the true test as to whether a professional networking group is right for you.

Add Realistic Chalk and Sketch Lettering Effects with Sketch’it – only $5!

Source

p img {display:inline-block; margin-right:10px;}
.alignleft {float:left;}
p.showcase {clear:both;}
body#browserfriendly p, body#podcast p, div#emailbody p{margin:0;}

Collective #430

Original Source: http://feedproxy.google.com/~r/tympanus/~3/oII1mpjoJwY/

C430_WOTW

Inspirational Website of the Week: An Interesting Day

No animations but a brilliant layout and a unique design with some nice details. Our pick this week.

Get inspired

C430_optin

Our Sponsor
Bloom: eMail Opt-In And Lead Generation Plugin For WordPress

Bloom gives you the power to display opt-in forms using integrations of the most popular email marketing systems available.

Check it out

C430_cms

Publii

Publii is a static-website-building tool for every skill level with a GUI to build a safe, fast and stylish website.

Check it out

C430_IEGrid

CSS Grid in IE: CSS Grid and the New Autoprefixer

Daniel Tonon’s three-part series on CSS Grid in Internet Explorer. In this second part he tackles the common misconception that the IE implementation of CSS grid is extremely difficult.

Read it

C430_feature

Introduction to Feature Policy

Learn everything about “Feature Policy” which allows web developers to selectively enable, disable, and modify the behavior of certain APIs and web features in the browser. By Eric Bidelman.

Read it

C430_subgrid

CSS Grid Level 2: Here Comes Subgrid

Rachel Andrew explains the new features of CSS Grid Level 2.

Read it

C430_cssdoodles

CSS Doodles

A lovely set of CSS doodles by Agathe Cocco.

Check it out

C430_generative

The Mutable Gallery

A collection of generative artworks by Heydon Pickering.

Check it out

C430_text

Textalytic

Textalytic is a free Natural Language Processing service that handles pre-processing, analyzing, and visualization in an easy to use web interface.

Check it out

C430_iconsystems

The guide to integrating and styling icon systems?- SVG sprites, SVG symbols and icon fonts

The second part in a two-part series on icon systems with focus on SVG image sprites, SVG symbols and icon fonts. By Sebastiano Guerriero.

Read it

C430_physics

Physics-Based Background Scroll Effects

In case you missed it: a tutorial on how to create an animated background effect with Matter.js.

Read it

C430_loading

Infinitely drawing icons

A great loading animation of icons by Mikael Ainalem.

Check it out

C430_clocks

Clock Shop

A collection of beautiful and unusual clock demos.

Check it out

C430_ab

The Link Bar, an Ecommerce Mobile Homepage Navigation Alternative (to the Hamburger Menu)

Some interesting AB test results of using the link bar navigation pattern in mobile sites.

Check it out

C430_forms

Beyond Likert scales: how we made boring form-filling more fun

Read how the team at JotForm made their forms more fun to use.

Read it

C430_cssart

picCSSel Art

A tool to create CSS pixel art made by Kushagra Gour.

Check it out

C430_ghost

Ghost Mouse

A fantastic demo by Liam Egan where a blob like element moves with the mouse/finger.

Check it out

C430_brads

Brad’s Homelab

Brad Fitzpatrick’s home lab setup for highly-available internet.

Check it out

C430_clearfix

Clearfix: A Lesson in Web Development Evolution

Jason Hoffman takes a look at the history of the famous CSS clearfix hack.

Read it

C430_svgterm

termtosvg

A Linux terminal recorder written in Python that renders your command line sessions as standalone SVG animations.

Check it out

C430_font

Free Font: Akrotiri

A playful rounded font made by Ilya Zakharov.

Get it

Collective #430 was written by Pedro Botelho and published on Codrops.

Super Clean Brand Identity for Das Flash

Original Source: http://feedproxy.google.com/~r/abduzeedo/~3/wu6oqAlwfWk/super-clean-brand-identity-das-flash

Super Clean Brand Identity for Das Flash
abduzeedo
Jul 05, 2018

Das Flash It is a mini-magazine about the art of tattoo in Poland. Grzegorz Leśniewicz was responsible for creating a concept, name, brand’s philosophy, logotype and all brand identity materials along with a digital image. The final design was further modified in the direction of a more raw and underground appearance. The interesting thing for me is that the term raw and underground bring me different concepts in my head and when I saw this project I was amazed by the clean and simple aesthetics alongside with very organized compositions. Nevertheless, I love the outcome and it’s definitely worth checking it out.

Not paying attention to mainstream, we focus on the underground of the modern tattoo scene in Poland. We document its dynamic development, showing recognized artists and discovering local legends. 

Credits
Design: Concept, Naming, Branding, Web design 
Date: 2018 
Art direction: Grzegorz Leśniewicz 
Brand Identity

 

branding


Using Puppeth, the Ethereum Private Network Manager

Original Source: https://www.sitepoint.com/puppeth-introduction/

We’ve previously written about Geth, one of the most popular Ethereum nodes.

Download screen

When you install Geth with helper tools, it comes with a handy tool called Puppeth, which you can use to maintain and install various helper tools for managing and deploying your private blockchain. Puppeth can also be installed independently if you have Go installed, with the following command:

go get github.com/ethereum/go-ethereum/cmd/puppeth

Let’s take a look at the tool.

Note: this tutorial will require you to have two remote machines at your disposal. Whether that is a virtual machine like Homestead Improved or an actual server on your network, or a combination of the two, doesn’t matter. We’ll go through the setup procedure with VMs in this tutorial.

Note: due to a bug in Puppeth, this approach might not work if your virtual machines (see below) are too small. Either make bigger VMs (more RAM) or wait for a fix if that’s not an option.

Bootstrapping

We’ll follow this process to get two virtual machines up and running. We need two machines because we’ll be running two Ethereum nodes, each on its own IP address.

Note: This is a limitation of Puppeth, as it’s not possible to deploy a sealing node on the same machine using this tool.

If you don’t know what Vagrant is, and what tools we’re using here, we recommend you read this introduction to Vagrant, which breaks it down in a newbie-friendly way.

mkdir my_project; cd my_project
git clone https://github.com/swader/homestead_improved hi_puppeth1
git clone https://github.com/swader/homestead_improved hi_puppeth2

Change the IP address of the second clone by going into the hi_puppeth2 folder and modifying the IP address field to be 192.168.10.11 instead of 192.168.10.10.

Next, open up some ports on the VMs by modifying each clone’s Homestead.yaml’s final section, like so:

ports:
– send: 8545
to: 8545
– send: 30301
to: 30301
– send: 30302
to: 30302
– send: 30303
to: 30303
– send: 30304
to: 30304
– send: 30305
to: 30305
– send: 30306
to: 30306

Don’t forget to add these virtual hosts into your host machine’s /etc/hosts file as well. Otherwise the VMs won’t be accessible by their domain name!

192.168.10.10 homestead.test
192.168.10.11 puppethnode.test

Note: change the IP addresses if the addresses of your VMs differ.

Finally, run vagrant up; vagrant ssh to boot each machine and SSH into it. Remember to run this from two separate tabs so you can keep both machines open and running.

Prerequisites

Now let’s install the prerequisite software on each machine.

Puppeth runs helper applications and Ethereum nodes for you in Docker containers, so we need Docker. It’s also useful to install Geth itself.

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install
apt-transport-https
ca-certificates
curl
software-properties-common
ethereum
docker.io
docker-compose

All other prerequisites will be pulled in by Puppeth through docker itself, but we need to make sure the current user is allowed to operate Docker commands first:

sudo usermod -a -G docker $USER

On the host machine (outside the VMs), we should create new Ethereum accounts in the folder where we’re running our project.

If you’re using the VMs as suggested above, that can be in myproject if myproject is the parent folder which contains hi_puppeth1 and hi_puppeth2.

mkdir node1 node2
geth –datadir node1 account new
geth –datadir node2 account new

Make a note of the addresses generated by this process:

$ mkdir node1 node2
$ geth –datadir node1 account new
INFO [05-20|10:27:20] Maximum peer count ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {aba88be2dc16eaed464e3991eed5a1eaa5e7b11b}
$ geth –datadir node2 account new
INFO [05-20|10:27:35] Maximum peer count ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {655a6ea9950cdf9f8a8175fda639555f17277bdf}

We need two accounts because at least two signers are needed in a Proof of Authority blockchain (more on that later).

Puppeth

Now that our VMs are running and our accounts are initialized, let’s see what Puppeth offers. With the remote servers/VMs still running, in a new tab on your host machine run Puppeth with puppeth.

The first thing it’ll ask for is the network name. This is useful for identifying various blockchains if you’re running several on your local machine. We’ll use “puptest” here.

Please specify a network name to administer (no spaces or hyphens, please)
> puptest

Sweet, you can set this via –network=puptest next time!

INFO [05-20|10:32:15] Administering Ethereum network name=puptest
WARN [05-20|10:32:15] No previous configurations found path=/Users/swader/.puppeth/puptest

Now let’s connect to our “remote” servers so that Puppeth has them in the list and can do operations on them.

The post Using Puppeth, the Ethereum Private Network Manager appeared first on SitePoint.

Collective #428

Original Source: http://feedproxy.google.com/~r/tympanus/~3/XzJuKjYpdOw/

C428_WOTW

Inspirational Website of the Week: 2018 Foosball World Cup

A fantastic table football implementation for this year’s soccer world cup. Our pick this week.

Get inspired

C428_Udemy

Our Sponsor
Need a course to broaden your skill set?

From web dev beginners courses to accelerated JavaScript training, Udemy has something for everyone. Learn basically anything and discover new skills and passions.

Pick your course

C428_face

face-api.js

A JavaScript API for face detection and face recognition in the browser implemented on top of the Tensorflow.js core API.

Check it out

C428_gradients

Drawing Images with CSS Gradients

An in-depth tutorial on how to use CSS gradients to draw complex shapes by Jon Kantner.

Check it out

C428_currentstate

Current state of webdesign

Will you realize what this is about in less than 3 seconds? ?

Check it out

C428_gobelins

Heraclos

The magical final WebGL project by students of GOBELINS Paris.

Play it

C428_layoutlab

The Experimental Layout Lab

Jen Simmons relaunched her labs section and added some more demos that show the possibilities of CSS Grid.

Check it out

C428_backspace

Backspace Rethought

Louis Anslow shares a brilliant idea for backspace using the drag interaction.

Read it

C428_babel

On Consuming (and Publishing) ES2015+ Packages

A very interesting article by Henry Zhu how the community might move to a “post-ES5” package ecosystem.

Read it

C428_menu

CodePen Challenge: Menu

A fun, bouncy menu created by Adam Kuhn.

Check it out

C428_audiovis

Plexus Shaders

A futuristic WebGL music visualizer made with Three.js together with Vertex Shaders and Fragment Shaders.

Check it out

C428_mkcert

mkcert

A simple tool for making locally-trusted development certificates without requiring any configuration.

Check it out

C428_sass

How and Why We Unit Test Our Sass

Lindsey Wild shares how unit testing Sass code is done at Sparkbox.

Read it

C428_font

Free Font: Kalpazan

Vladimir Fedotov shares one of the styles of his new font family “Kalpazan”.

Get it

C428_ml5js

ml5.js

A library that aims to make machine learning approachable for a broad audience of artists, creative coders, and students. It provides access to machine learning algorithms and models in the browser, building on top of TensorFlow.js with no other external dependencies.

Check it out

C428_shapesdesandro

Solids

Some 3D magic by Dave DeSandro using the <canvas> drawing API.

Check it out

C428_painting

The Garden of Earthly Delights by Jheronimus Bosch

A beautiful, interactive documentary that provides an in-depth tour though “The Garden of Earthly Delights” painting.

Check it out

C428_icons

150 Free Vector Icons

A great set of beautifully designed and versatile vector icons in three different styles. By Elmira Gokoryan.

Get it

C428_truchet

Truchet

Amazing experiments in GLSL Truchet tiling and patterns by Liam Egan.

Check it out

C428_stationary

Stationery Branding & Identity Mockup (PSD)

A modern stationery and identity branding mockup by the folks of GraphicPear.

Get it

C428_500

Thank You

Liam Egan celebrates his 500 Codepen followers mark with this beautiful demo.

Check it out

C428_RevealSlideshow

From Our Blog
Triple Panel Reveal Slideshow

A fullscreen image slideshow with lateral image previews and a reveal animation using TweenMax.

Check it out

Collective #428 was written by Pedro Botelho and published on Codrops.

Collective #429

Original Source: http://feedproxy.google.com/~r/tympanus/~3/VZrxaI__Y-c/

C429_mockup

Shotsnapp

A fantastic tool for creating mockup presentations for your design. Made by Gaddafi Rusli.

Check it out

C429_Be

Our Sponsor
Use pre-built websites to avoid making unforgivable design mistakes

Even the best web designers make mistakes. A solution to this problem is using pre-built websites. Be Theme offers over 350 of them, each of them at one click away from being installed on your website.

Check them out

C429_access

Designing for accessibility is not that hard

Pablo Stanley shows us seven easy-to-implement guidelines to design a more accessible web.

Read it

C429_tenori

Tenori-off

A smart music sequencer that uses Machine Learning to try to match drums to a synth melody. Made by Monica Dinculescu.

Check it out

C429_scrollgradient

Scrolling Gradient

Mike Riethmuller created this demo where a background gradient changes according to the scroll position.

Check it out

C429_tree

Reduce JavaScript Payloads with Tree Shaking

Jeremy Wagner explains how to use tree shaking, a form of dead code elimination, to improve JavaScript performance.

Read it

C429_doodle

SVG Pattern Doodler

Niklas Knaack created this fantastic demo where a simple algorithm draws patterns and doodles into an SVG element.

Check it out

C429_array

An adventure in sparse arrays

Remy Sharp explores sparse arrays and shares some common pitfalls when dealing with them.

Read it

C429_singlie

Singlie

A progressive and minimal implementation of the circular and linear singly linked list data structures in modern ES6.

Check it out

C429_leira

Free Font: Leira

A playful brush font designed by Evita Vilaka.

Get it

C429_interneting

Interneting Is Hard

In case you missed it: A resource of friendly web development tutorials for complete beginners.

Check it out

C429_scroll

fakeScroll

A lightweight and robust custom-looking HTML scrollbar script.

Check it out

C429_react

React From Zero

A simple yet comprehensive React tutorial.

Check it out

C429_ch

What is the CSS ‘ch’ Unit?

Eric Meyer explains the ch unit in CSS.

Read it

C429_generative

Generative WorldCup

An experiment with the world cup statistics API and canvas to generate abstract patterns for each soccer match.

Check it out

C429_fontsize

Pixels vs. Ems: Users DO Change Font Size

An interesting article with data on how many users actually change the font size in their browsers. By Evan Minto.

Read it

C429_chart

ChartGen

An SVG chart generator that utilizes the Box-Muller transform to generate random trending data for realistic SVG line and bar charts.

Check it out

C429_transemails

Everything You Need To Know About Transactional Email But Didn’t Know To Ask

Some advanced best practices for transactional emails by Garrett Dimon.

Read it

C429_fittext

Fitting Text to a Container

Chris Coyier explores the different ways of making a text size itself to fill a container.

Read it

C429_css4

Where is CSS4? When is it coming out?

Jen Simmons explains why CSS4 does not exist.

Watch it

C429_firejs

‘Fire’ visual effect in JavaScript

A short tutorial on how to create a pixel fire effect in JavaScript with just about 20 lines of code.

Read it

C429_more

More

A nice link animation made by Chris Gannon.

Check it out

C429_svgiconsystems

The guide to integrating and styling icon systems?- inline SVG and icon components

In this two-part series, Claudia Romano explains integration techniques for icon systems using practical code examples.

Read it

C429_vue

The Vue Handbook

A guide to Vue written by Flavio Copes. Free for a subscription.

Check it out

C429_gridtut

The simpleton’s guide to CSS Grid

An easy-to-follow guide to CSS Grid by Dennis Gaebel.

Read it

Collective #429 was written by Pedro Botelho and published on Codrops.

How to Plan a Website Overhaul in 2018

Original Source: http://feedproxy.google.com/~r/Designrfix/~3/HCRVANLXSI4/how-to-plan-a-website-overhaul-in-2018

It’s 2018, and you know what that means. Time for a website overhaul! Sure, if you’ve been building, managing, and growing websites long enough, then the thought of a website or a logo redesign will probably scare you away. Overhauling a website is just one of those things that cause more headaches and ruins by adding a […]

The post How to Plan a Website Overhaul in 2018 appeared first on designrfix.com.