30+ Fresh New UI Kits – Free and Premium

Original Source: http://feedproxy.google.com/~r/1stwebdesigner/~3/kZD40ys-oDE/

Every web designer and developer can use new UI kits to get their project started, speed up delivery time, or just for inspiration to create their own ideas and mockups. Today we are giving you over 30 of the best free and premium UI kits to choose from, so you don’t have to spend your valuable time searching through the thousands that are available. Use these kits however you see fit for your next or future projects, and be sure to bookmark this page so you can come back and find additional kits to utilize whenever you need them.

UX Designer Toolbox: Unlimited Downloads Starting at $16.50/Month

UX & UI Kits

UX & UI Kits
14,000+ UX & UI Kits

Wireframe Kits

Wireframe Kits
1,100+ Wireframe Kits

Icon Sets

Icon Sets
11,000+ Icon Sets

DOWNLOAD NOW
Envato Elements

Karamtaj Gift Shop UI Kit (Free)

 Karamtaj Gift shop UI kit - UX and UI kits

Cassiopeia – Flower Store UI Kit (Free)

Cassiopeia - UI kits

Dasmin Delivery Food App Mobile UI kit (Premium)

Dasmin Delivery Food App Mobile Ui kit - UX and UI kits

RevKit – Design System UI Kit (Free)

RevKit - Design System UI Kit

InsightKit – Dashboard UI Kit (Premium)

InsightKit – Dashboard UI Kit

iPlayMusic – A Free Awesome Music App UI Kit (Free)

iPlayMusic - A Free Awesome Music App UI Kit - UX and UI kits

Climax – Live Game Streaming UI Kit (Premium)

Climax - Live Game Streaming UI Kit - UX and UI kits

E-commerce UI Kit (Free)

E-commerce UI Kit

Snowflake UI Kit (Free)

Snowflake UI Kit

Architect Responsive Landing Page (Premium)

Architect Responsive Landing Page - UX and UI kits

Velocity: A dashboard UI kit with a robust design system (Free)

Velocity dashboard

Unit – Free UI Kit (Free)

Unit – Free UI Kit

Clevr – Book Store Ecommerce Website Template (Premium)

Clevr - Book Store Ecommerce Website Template - UX and UI kits

Smart Home—A digital UI Kit for the physical world (Free)

Smart Home

Furniture Store Mobile App UI Kit Template (Premium)

Furniture Store Mobile App UI Kit Template - UX and UI kits

Rise Free eCommerce UI Kit (Free)

Rise Free eCommerce UI Kit

Shopper UI Kit (Free)

Shopper UI Kit

e-Book Store Detail App UI Kit Bundle (Premium)

e-Book Store Detail App UI Kit Bundle - UX and UI kits

Now: A beautiful cross-platform UI kit (Free)

Now

Covid19 UI Kit (Free)

Covid19 UI Kit

Rasa – Food Recipe iOS App Design UI Template (Premium)

Rasa - Food Recipe iOS App Design UI Template - UX and UI kits

Flame UI Kit for Sketch (Free)

Flame UI Kit for Sketch (FREE)

Financial UI Kit for Adobe XD (Free)

Financial UI Kit for Adobe XD

Wedding Ceremony Template (Premium)

Wedding Ceremony Template - UX and UI kits

Figma Admin Dashboard UI Kit (Free)

Figma Admin Dashboard

Gaming UI Kit (Free)

Gaming UI Kit

Agency Business Landing Page Template (Premium)

Agency Business Landing page Template - UX and UI kits

Components Free UI Kit (Free)

Components

Wallet & Finance Mobile App UI Kit Template (Premium)

Wallet & Finance Mobile App UI Kit Template - UX and UI kits

Summer UI Kit (Free)

Summer UI Kit


5 Best Free Courses and Resources to Level Up As a Web Designer

Original Source: https://www.webdesignerdepot.com/2020/09/5-best-free-courses-and-resources-to-level-up-as-a-web-designer/

I often see freelancers on social media asking what the secret is to working fewer hours, making more money, and helping new clients to find them. While those things tend to happen the longer you’ve been freelancing, it doesn’t happen without some effort.

If you’re wondering how you can change things so that your business becomes more profitable and easier to manage, education is the key.

But it’s not just mastering new design techniques that will take you to the next level. It’s important to invest your time in a well-rounded education so that you can grow not just as a web designer, but also as a freelancer and business owner.

The good news is that you don’t have to spend a ton of cash on courses or resources. In the following round-up, I’m going to share some of the best free courses to help you level up.

5 Best Free Courses and Resources for Web Designers

Rather than sign up for Udemy, Skillshare and other premium course membership sites, I recommend taking a bootstrapping approach to self-education. I mean, the whole point in learning new skills and strengthening existing ones is so you can run a better business and make more money, right?

Once you have extra funds to throw at premium courses, definitely explore those options. For now, let’s focus on the free courses and resources that’ll help get you to that next level:

1. edX

edX was created by Harvard and MIT in order to provide university-level training and education to anyone, anywhere. While you can’t get certified without paying a few hundred dollars, you can go through entire courses for free.

Courses are offered over a wide range of categories. As a freelance web designer, you’d do well to focus on the following areas:

Design
Learn more than just how to design beautiful interfaces. Learn about the technical side of it, too — things like AI, IoT, and cybersecurity.

Computer Science
Learn web development and coding.

Business & Management
Learn essential business skills like:

Project management
Finance management
Leadership
Marketing and analysis

Communication
Learn things like branding, negotiation, reputation management, and critical thinking.

2. Envato Tuts+

Envato Tuts+ might be best known for its succinct step-by-step design and development tutorials. However, it has a new section of free video courses to take advantage of.

Although you won’t learn any soft skills here, this is a great resource if you want to master the tools of your trade.

Free courses give you a deeper look at tools like:

HTML, CSS, and JavaScript
Adobe’s suite of software
Sketch
WordPress
Video conferencing tools

3. YouTube

YouTube is more than just a place to watch entertaining videos. There are some amazing YouTube channels for web designers at all skill levels.

When choosing a design channel and course to follow, look for ones that are well organized. If they’re just posting videos at random without any rhyme or reason, it’ll be difficult to focus on and master one skill set before moving onto the next.

Here are the channels I recommend you follow:

Flux

Learn skills related to:

Web design
Getting started as a freelancer
Strengthening your processes
Building your portfolio
Design theory and strategy

CharliMarieTV

Learn skills related to:

Web design
Building sites with Figma or Webflow
Career paths for designers
Productivity hacks

NNgroup

Learn skills related to UX:

Web design
User psychology
Usability testing
Design thinking
Research and data analysis
Journey mapping
Get access to UX Conference seminars, too

4. Moz Whiteboard Fridays

Even if you don’t offer SEO as a standalone service, it’s important for web designers to understand the role they play in SEO and to stay abreast of the latest and greatest strategies.

If you haven’t tuned in for one of Moz’s Whiteboard Fridays yet, I’d recommend you start now.

Some of the topics might not be relevant to you (like creating a content strategy). However, there are others you’ll get some great tips from, like the one above that talks about creating great visuals, preparing web pages with tags and schema markup, and optimizing for featured snippets.

5. Nir Eyal – Indistractible

Nir Eyal has made a name for himself over the years as an author and presenter on the subject of human psychology and behavior. His first book (Hooked) examined consumer behavior and how to design around it. His second (Indistractible) turned the focus on us — the doers and creators who build experiences and products for consumers.

The first of his free resources to explore is this 30-minute presentation on why we’re so easily distracted and how to keep those distractions (and ourselves) from getting in the way.

The second free resource to snag up is the 80-page workbook available on the homepage. Here’s a preview of what it looks like:

You’ll learn about common distractions, identify those that are specific to you, and then work through exercises to defeat them.

If this is something you’re struggling with, these resources will empower you to make a much-needed change.

BONUS: WebDesigner Depot

Although WebDesigner Depot doesn’t offer video courses, I consider each of the articles contained within this site to be mini-courses of their own. And you’ll learn everything you’ve ever wanted to know about becoming a web designer and growing your freelance business.

 

Featured image via Unsplash.

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;}

Building Microservices with Deno, Reno, and PostgreSQL

Original Source: https://www.sitepoint.com/building-microservices-with-deno-reno-postgresql/?utm_source=rss

Building Microservices with Deno, Reno, and PostgreSQL

In this tutorial, we show you how to go about building microservices with Deno, and introduce you to Reno — a thin routing library for Deno. We’ll explore how we can use this newer JavaScript platform to build a microservice that exposes endpoints for acting on a database.

Deno is a JavaScript and TypeScript runtime from Node.js creator Ryan Dahl that aims to address some of the latter technology’s shortcomings, such as simplifying the module path lookup algorithm and more closely aligning the core APIs with their browser-based equivalents. Despite these fundamental differences, the potential applications of Deno and Node.js are mostly identical. One of Node’s core strengths lies in building HTTP services, and the same can be argued for Deno.

Writing HTTP Servers with std/http

Before we introduce a routing library or contemplate our data access layer, it would be useful to step back and build a simple HTTP server with the std/http module, which is part of Deno’s standard library. If you haven’t already, install Deno. In a Unix-type operating system, you can run:

$ curl -fsSL https://deno.land/x/install/install.sh | sh -s v1.3.0

Note that this tutorial has been developed against 1.3.0 (and std 0.65.0 as we’ll see later), but any later 1.x versions you may be using should be compatible. Alternatively, if you’re running an older version of Deno, you can upgrade to 1.3.0 with the deno upgrade command:

deno upgrade –version 1.3.0

You can verify that the expected Deno version has been installed with deno –version.

We’re now in a position to build an HTTP server. Create a directory, within your usual development directory, named deno-hello-http, and open it in your editor. Then, create a file called server.ts, and use the listenAndServe function within std/http to build our server:

import { listenAndServe } from “https://deno.land/std@0.65.0/http/mod.ts”;

const BINDING = “:8000”;

console.log(`Listening on ${BINDING}…`);

await listenAndServe(BINDING, (req) => {
req.respond({ body: “Hello world!” });
});

Developer Experience Protips

If you’re using VS Code, I’d heavily recommend the official Deno extension, which provides support for Deno’s path resolution algorithm. Additionally, you can run deno cache server.ts to install the dependencies and their TypeScript definitions, the latter serving as an invaluable API guide when writing your code.

We can start our server by running deno run –allow-net server.ts in our shell. Note the –allow-net permissions flag, granting our program with network access. Once listening on port 8000, we can target it with a HTTP request:

$ curl -v http://localhost:8000/ ; echo

> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 12
<

Hello world!

Great! With a few lines of TypeScript, we’ve been able to implement a simple server. That said, it isn’t particularly well-featured at this point. Given that we consistently serve “Hello world!” from our callback function, the same response will be returned for any endpoint or HTTP method. If we hit a server with POST /add, we’ll receive the same headers and body:

$ curl -v -d ‘{}’ http://localhost:8000/add ; echo

> POST /add HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
> Content-Length: 2
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 200 OK
< content-length: 12
<

Hello world!

We can limit the existing response to GET / by conditionally checking the url and method properties of our callback’s req parameter:

import {
listenAndServe,
ServerRequest,
} from “https://deno.land/std@0.65.0/http/mod.ts”;

const BINDING = “:8000”;

console.log(`Listening on ${BINDING}…`);

function notFound({ method, url }: ServerRequest) {
return {
status: 404,
body: `No route found for ${method} ${url}`,
};
}

await listenAndServe(BINDING, (req) => {
const res = req.method === “GET” && req.url === “/”
? { body: “Hello world” }
: notFound(req);

req.respond(res);
});

If we restart our server, we should observe that GET / works as expected, but any other URL or method will result in a HTTP 404:

$ curl -v -d ‘{}’ http://localhost:8000/add ; echo

> POST /add HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.58.0
> Accept: */*
> Content-Length: 2
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 404 Not Found
< content-length: 28
<

No route found for POST /add

std/http Beyond Simple Services

Bootstrapping trivial HTTP servers with Deno and std/http has proven to be relatively straightforward. How does this approach scale for more complex services?

Let’s consider a /messages endpoint that accepts and returns user-submitted messages. Following a RESTful approach, we can define the behavior of this endpoint and of our service overall:

Continue reading
Building Microservices with Deno, Reno, and PostgreSQL
on SitePoint.

Diagonal Thumbnail Slideshow Animation

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

The other day I saw this very nice Dribbble shot by Anton Tkachev and couldn’t help but envision it as a slideshow with some large typography. So I went ahead and did a small demo which then turned into an exploration of several animations for the image tiles and the texts.

So the main idea is to animate the tilted thumbnails out of the viewport when navigating to the next or previous slide. While the thumbnails move out, the titles get animated too, in that reveal/unreveal fashion that seems to be quite trendy now. The direction of the motion depends on wether we’re navigating back or forth.

The animations are powered by GreenSock’s GSAP animation library.

I’m totally in love with IvyMode and this demo was just a perfect excuse to use Jan Maack’s typeface again!

The images used in the demos are by generative artist Manolo Ide who offers his artwork for free.

I really hope this gives you a starting point for exploring more effects!

The post Diagonal Thumbnail Slideshow Animation appeared first on Codrops.

20 Neat Workspace Designs to Boost Productivity

Original Source: https://www.hongkiat.com/blog/workspace-design/

Bored with the state of your workspace or office desk? Maybe this post will convince you to do something about it. It doesn’t matter if you work from home work or are chained to an office desk…

Visit hongkiat.com for full content.

8 Easy Ways To Ruin Your User Onboarding

Original Source: https://www.webdesignerdepot.com/2020/08/8-easy-ways-to-ruin-your-user-onboarding/

To understand why user onboarding is such an indispensable tool, we need to empathize with the people using our products; we all come from different backgrounds and cultures, we make different assumptions, and we see the world differently.

User onboarding helps mitigate these differences by making your product’s learning curve less steep.

However, companies often make unfortunate mistakes that hinder user experience and cause frustration. In today’s article, we’ll take a look at eight ways companies ruin their products’ onboarding process.

Let’s dive right in, shall we?

1. No User Onboarding at all

As a part of the team that created a product, you’ve probably spent hundreds of hours going over its features and the most minute detail. Naturally, you know the product like the back of your hand. The user does not.

Naturally, you know the product like the back of your hand. The user does not

We may believe that the app we’ve worked on is straightforward and that user onboarding is probably overkill — but that’s almost never the case. Guiding our users through a product will help with retention, conversion, and their overall satisfaction.

However, there are very rare cases when you can do without user onboarding, here are a few:

Your product is too straightforward to cause any confusion;
Your product has a formulaic structure, similar to that of other products’ in your category, i.e., social media or e-commerce;
Your product relies heavily on Google or iOS design guidelines with common design patterns;
Your product is too complex (enterprise or business-oriented) — in such cases, users need special training, rather than just an onboarding;

2. Assuming That Users “Get It”

 One of the vital UX mottos we should always be mindful of is that “we are not our users.” When onboarding them, we always need to assume that they’re at square one. We should communicate with them as if they have no prior knowledge of our product, its terminology, and the way it works.

Providing freshly-registered users with highly contextual information will most likely confuse them. As a result, this will render your attempts to create a helpful onboarding process useless.  

3. Onboarding Users on a Single Touchpoint

it’s tempting to brainstorm which features should make it into the onboarding, then design and code them; that’s a very bad idea

The main problem with the previous point is that it’s too contextual for new users. However, providing no context altogether can be problematic as well. This is commonly found in onboarding processes that focus on a single touchpoint while leaving out the rest of the product.

By choosing to inform users of our product’s features, we force them to detour from their “normal” course of action. This comes at the cost of the user’s frustration.

Since we’re asking people to pay this price, it’s best to provide them with information that will also help them navigate the entire product. As a result, this will decrease the number of times we’ll have to distract them from their ordinary flow.

4. Forcing Users Through Onboarding

We’ve previously mentioned that we mustn’t assume that users have any background knowledge about our products.

The opposite argument can be made — experienced users don’t need a basic onboarding process. It will most likely frustrate them, and it won’t provide them with any real value. Also, forcing users through this process will most likely take the onboarding frustration to a whole other level.

This is why it’s essential that we allow them to skip the parts they don’t find useful. This way, we’ll address the knowledge gaps of the people who really want it and need it.

5. Onboarding Based Purely on Assumptions

This is yet another point that’s implicit in “we are not our users”. Oftentimes, it’s tempting to brainstorm which features should make it into the onboarding, then design and code them; that’s a very bad idea.

Here’s what every designer should do instead:

Do user interviews: You should conduct these before having anything designed; user interviews will help you shortlist and prioritize features in terms of their significance, so that the onboarding is focused around the features that matter most.
Do usability testing: Once you have a good idea of what features your users consider most important, design onboarding that reflects that; having completed your design, make sure to conduct at least 5 usability testing sessions with users, so that you can make sure that your design works.

6. Just Letting Users Quit

While we shouldn’t force people to go through onboarding, it doesn’t mean we shouldn’t nudge them in the right direction.

find that sweet spot between being front of mind and annoying

People choose not to onboard for many reasons, but showing them around will benefit both parties. Therefore, it’s never wrong to remind them that they can always resume onboarding via email or push notifications (unless you’re too pushy). Make sure to find that sweet spot between being front of mind and annoying. 

Similarly, these two mediums are a great way to deliver valuable information as well.

Here’s a great example of an onboarding email from InVision:

And here’s a clever notification from TripPlanner:

Source: clevertap.com

7. Asking For Too Much Information

We need to always be mindful of the fact that the product’s spokesperson should act as a guide during onboarding. Its goal at the very beginning is to build trust.

We can ask for small favors when we’ve built a solid and lasting relationship

Not only is asking for too much information from the get-go unproductive, but it will also undermine the trust that the user already gave us.

It’s best to abstain from asking freshly-registered users for their credit card information. Nearly 100% of businesses care about profits — and there’s no shame in it. However, today’s most successful companies make money by providing users with value. So it’s best to stimulate users to share their financial data in subtler ways while focusing on customer experience.

The same can be said about subjecting the people using your service to extensive questionnaires. At the first steps of our interaction, it’s all about giving and gaining trust. We can ask for small favors when we’ve built a solid and lasting relationship.

8. Onboarding for the Sake of Onboarding

While there are dozens of reasons why you should guide your users through your product, it needs to be done well. A pointless onboarding process that doesn’t provide users with value is more frustrating than the lack thereof.

Onboarding can be a bit frustrating at times. Pointless onboarding will just raise eyebrows. It will slow users down and disengage them, which is exactly the opposite of what we want.

Conclusion

The process of introducing your users to your product is one of the factors that will define its success.

A critical aspect of user onboarding that we need to always take into account is value. Is this detour from our user’s ordinary course of action valuable to them? Will this improve their experience with the product?

Onboarding demands careful and continuous tailoring. Once perfected, this process will help you win new users’ hearts and help you build brand loyalty.

 

Featured image via Unsplash.

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;}

32 Creative and Interesting Bento Boxes

Original Source: https://www.hongkiat.com/blog/creative-and-interesting-bento-boxes/

For most Japanese mothers, lunch is not just simple food preparation and packing meals for their love ones, they spend their time arranging the meal in aesthetically pleasing way. These lunch boxes…

Visit hongkiat.com for full content.

Adversarial Interoperability

Original Source: https://www.sitepoint.com/adversarial-interoperability/?utm_source=rss

“Interoperability” is the act of making a new product or service work with an existing product or service: modern civilization depends on the standards and practices that allow you to put any dish into a dishwasher or any USB charger into any car’s cigarette lighter.

But interoperability is just the ante. For a really competitive, innovative, dynamic marketplace, you need adversarial interoperability: that’s when you create a new product or service that plugs into the existing ones without the permission of the companies that make them. Think of third-party printer ink, alternative app stores, or independent repair shops that use compatible parts from rival manufacturers to fix your car or your phone or your tractor.

Adversarial interoperability was once the driver of tech’s dynamic marketplace, where the biggest firms could go from top of the heap to scrap metal in an eyeblink, where tiny startups could topple dominant companies before they even knew what hit them.

But the current crop of Big Tech companies has secured laws, regulations, and court decisions that have dramatically restricted adversarial interoperability. From the flurry of absurd software patents that the US Patent and Trademark Office granted in the dark years between the first software patents and the Alice decision to the growing use of “digital rights management” to create legal obligations to use the products you purchase in ways that benefit shareholders at your expense, Big Tech climbed the adversarial ladder and then pulled it up behind them.

That can and should change. As Big Tech grows ever more concentrated, restoring adversarial interoperability must be a piece of the solution to that concentration: making big companies smaller makes their mistakes less consequential, and it deprives them of the monopoly profits they rely on to lobby for rules that make competing with them even harder.

For months, we have written about the history, theory, and practice of adversarial interoperability. This page rounds up our writing on the subject in one convenient resource that you can send your friends, Members of Congress, teachers, investors, and bosses as we all struggle to figure out how to re-decentralize the Internet and spread decision-making power around to millions of individuals and firms, rather than the executives of a handful of tech giants.

Interoperability: Fix the Internet, Not the Tech Companies: a taxonomy of different kinds of interoperability, from “indifferent interoperability” (I don’t care if you plug your thing into my product) to “cooperative interoperability” (please plug your thing into my product) to “adversarial interoperability” (dang it, stop plugging your thing into my product!).
Unix and Adversarial Interoperability: The ‘One Weird Antitrust Trick’ That Defined Computing How do you get a ruthless monopolist to sit on its hands while competitors large and small make interoperable versions of one of its inventions? The story of Unix shows the way.
alt.interoperability.adversarial: The history of the alt. hierarchy shows how an Internet dominated by protocols, not products, ensured that users could shape their online experiences. Restoring legal protections to interoperators could turn today’s Big Tech companies back into protocols that anyone could plug a new service into.
Adversarial Interoperability: Reviving an Elegant Weapon From a More Civilized Age to Slay Today’s Monopolies: The history of adversarial interoperability and how it drove the tech revolutions of the past four decades, and what we can do to restore it.
Gopher: When Adversarial Interoperability Burrowed Under the Gatekeepers’ Fortresses: Before the Web devoured Gopher, Gopher devoured mainframes.
Interoperability and Privacy: Squaring the Circle: Big Tech companies created a privacy dumpster fire on the Internet, but now they say they can’t fix it unless we use the law to ban competitors from plugging new services into their flaming dumpsters. That’s awfully convenient, don’t you think?
A Cycle of Renewal, Broken: How Big Tech and Big Media Abuse Copyright Law to Slay Competition: Cable TV exists because of adversarial interoperability, which gave it the power to disrupt the broadcasters. Today, Big Cable is doing everything it can to stop anyone from disrupting it.
‘IBM PC Compatible’: How Adversarial Interoperability Saved PCs From Monopolization: IBM spent more than a decade on the wrong end of an antitrust action over its mainframe monopoly, but when it created its first PCs, scrappy upstarts like Phoenix and Compaq were able to clone its ROM chips and create a vibrant, fast-moving marketplace.
SAMBA versus SMB: Adversarial Interoperability is Judo for Network Effects: Microsoft came this close to owning the modern office by locking up the intranet in a proprietary network protocol called SMB…That is, until a PhD candidate released SAMBA, a free/open product that adversarially interoperated with SMB and allows Macs, Unix systems, and other rivals to live on the same LANs as Windows machines.
Felony Contempt of Business Model: Lexmark’s Anti-Competitive Legacy: Printer companies are notorious for abusive practices, but Lexmark reached a new low in 2002, when it argued that copyright gave it the right to decide who could put carbon powder into empty toner cartridges. Even though Lexmark failed, it blazed a trail that other companies have enthusiastically followed, successfully distorting copyright to cover everything from tractor parts to browser plugins.
Mint: Late-Stage Adversarial Interoperability Demonstrates What We Had (And What We Lost): The last great hurrah of Adversarial Interoperability, fought the finance sector…and won!
Adblocking: How About Nah?: The early Web was infested with intrusive pop-up ads, and adversarial interoperability rendered them invisible. Today, adblocking is the largest boycott in history, doing more to curb bad ads and the surveillance that goes with them than any regulator.
African WhatsApp Modders are the Masters of Worldwide Adversarial Interoperability: GB WhatsApp started life in the Syrian conflict and is now the leader of the pack in Africa, where it is more popular than Facebook itself — and where it has to compete with other WhatsApp mods, each customized to a different kind of user and use-case.

(Republished from EFF Deeplinks under a Creative Commons Attribution 4.0 license)

Continue reading
Adversarial Interoperability
on SitePoint.

How to Use Deno’s Built-in Tools

Original Source: https://www.sitepoint.com/deno-built-in-tools/?utm_source=rss

How to Use Deno’s Built-in Tools

One surprising difference between Deno and Node.js is the number of tools built into the runtime. Other than a Read-Eval-Print Loop (REPL) console, Node.js requires third-party modules to handle most indirect coding activities such as testing and linting. Deno provides almost everything you need out of the box.

Before we begin, a note. Deno is new! Use these tools with caution. Some may be unstable. Few have configuration options. Others may have undesirable side effects such as recursively processing every file in every subdirectory. It’s best to test tools from a dedicated project directory.

Install Deno

Install Deno on macOS or Linux using the following terminal command:

curl -fsSL https://deno.land/x/install/install.sh | sh

Or from Windows Powershell:

iwr https://deno.land/x/install/install.ps1 -useb | iex

Further installation options are provided in the Deno manual.

Enter deno –version to check installation has been successful. The version numbers for the V8 JavaScript engine, TypeScript compiler, and Deno itself are displayed.

Upgrade Deno

Upgrade Deno to the latest version with:

deno upgrade

Or upgrade to specific release such as v1.3.0:

deno upgrade –version 1.30.0

Most of the tools below are available in all versions, but later editions may have more features and bug fixes.

Deno Help

A list of tools and options can be viewed by entering:

deno help

Read-Eval-Print Loop (REPL)

Like Node.js, a REPL expression evaluation console can be accessed by entering deno in your terminal. Each expression you enter returns a result or undefined:

$ deno

Deno 1.3.0
exit using ctrl+d or close()
> const w = ‘World’;
undefined
> w
World
> console.log(`Hello ${w}!`);
Hello World!
undefined
> close()

$

Previously entered expressions can be re-entered by using the cursor keys to navigate through the expression history.

Dependency Inspector

A tree of all module dependencies can be viewed by entering deno info <module> where <module> is the path/URL to an entry script.

Consider the following lib.js library code with exported hello and sum functions:

// general library: lib.js

/**
* return “Hello <name>!” string
* @module lib
* @param {string} name
* @returns {string} Hello <name>!
*/
export function hello(name = ‘Anonymous’) {

return `Hello ${ name.trim() }!`;

};

/**
* Returns total of all arguments
* @module lib
* @param {…*} args
* @returns {*} total
*/
export function sum(…args) {

return […args].reduce((a, b) => a + b);

}

These can be used from a main entry script, index.js, in the same directory:

// main entry script: index.js

// import lib.js modules
import { hello, sum } from ‘./lib.js’;

const
spr = sum(‘Site’, ‘Point’, ‘.com’, ‘ ‘, ‘reader’),
add = sum(1, 2, 3);

// output
console.log( hello(spr) );
console.log( ‘total:’, add );

The result of running deno run ./index.js:

$ deno run ./index.js

Hello SitePoint.com reader!
total: 6

The dependencies used by index.js can be examined with deno info ./index.js:

$ deno info ./index.js

local: /home/deno/testing/index.js
type: JavaScript
deps:
file:///home/deno/testing/index.js
└── file:///home/deno/testing/lib.js

Similarly, the dependencies required by any module URL can be examined, although be aware the module will be downloaded and cached locally on first use. For example:

$ deno info https://deno.land/std/hash/mod.ts

Download https://deno.land/std/hash/mod.ts
Download https://deno.land/std@0.65.0/hash/mod.ts
Download https://deno.land/std@0.65.0/hash/_wasm/hash.ts
Download https://deno.land/std@0.65.0/hash/hasher.ts
Download https://deno.land/std@0.65.0/hash/_wasm/wasm.js
Download https://deno.land/std@0.65.0/encoding/hex.ts
Download https://deno.land/std@0.65.0/encoding/base64.ts
deps:
https://deno.land/std/hash/mod.ts
└─┬ https://deno.land/std@0.65.0/hash/_wasm/hash.ts
├─┬ https://deno.land/std@0.65.0/hash/_wasm/wasm.js
│ └── https://deno.land/std@0.65.0/encoding/base64.ts
├── https://deno.land/std@0.65.0/encoding/hex.ts
└── https://deno.land/std@0.65.0/encoding/base64.ts

For further information, see the Deno Manual: Dependency Inspector.

Linter (Syntax Checker)

Deno provides a linter to validate JavaScript and TypeScript code. This is an unstable feature which requires the –unstable flag, but no files will be altered when it’s used.

Linting is useful to spot less obvious syntax errors and ensure code adheres with your team’s standards. You may already be using a linter such as ESLint in your editor or from the command line, but Deno provides another option in any environment where it’s installed.

To recursively lint all .js and .ts files in the current and child directories, enter deno lint –unstable:

$ deno lint –unstable

(no-extra-semi) Unnecessary semicolon.
};
^
at /home/deno/testing/lib.js:13:1

Found 1 problem

Alternatively, you can specify one or more files to limit linting. For example:

$ deno lint –unstable ./index.js
$

For further information, see the Deno Manual: Linter. It includes a list of rules you can add to code comments to ignore or enforce specific syntaxes.

Test Runner

Deno has a built-in test runner for unit-testing JavaScript or TypeScript functions.

Tests are defined in any file named <something>test with a .js, .mjs, .ts, .jsx, or .tsx extension. It must make one or more calls to Deno.test and pass a test name string and a testing function. The function can be synchronous or asynchronous and use a variety of assertion utilities to evaluate results.

Create a new test subdirectory with a file named lib.test.js:

// test lib.js library

// assertions
import { assertEquals } from ‘https://deno.land/std/testing/asserts.ts’;

// lib.js modules
import { hello, sum } from ‘../lib.js’;

// hello function
Deno.test(‘lib/hello tests’, () => {

assertEquals( hello(‘Someone’), ‘Hello Someone!’);
assertEquals( hello(), ‘Hello Anonymous!’ );

});

// sum integers
Deno.test(‘lib/sum integer tests’, () => {

assertEquals( sum(1, 2, 3), 6 );
assertEquals( sum(1, 2, 3, 4, 5, 6), 21 );

});

// sum strings
Deno.test(‘lib/sum string tests’, () => {

assertEquals( sum(‘a’, ‘b’, ‘c’), ‘abc’ );
assertEquals( sum(‘A’, ‘b’, ‘C’), ‘AbC’ );

});

// sum mixed values
Deno.test(‘lib/sum mixed tests’, () => {

assertEquals( sum(‘a’, 1, 2), ‘a12’ );
assertEquals( sum(1, 2, ‘a’), ‘3a’ );
assertEquals( sum(‘an’, null, [], ‘ed’), ‘annulled’ );

});

To run all tests from all directories, enter deno test. Or run tests stored in a specific directory with deno test <dir>. For example:

$ deno test ./test

running 4 tests
test lib/hello tests … ok (4ms)
test lib/sum integer tests … ok (2ms)
test lib/sum string tests … ok (2ms)
test lib/sum mixed tests … ok (2ms)

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (11ms)

$

A –filter string or regular expression can also be specified to limit tests by name. For example:

$ deno test –filter “hello” ./test

running 1 tests
test lib/hello tests … ok (4ms)

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out (5ms)

Longer-running tests can be stopped on the first failure by passing a –failfast option.

For further information, see the Deno Manual: Testing. A few third-party test modules are also available, including Merlin and Ruhm, but these still use Deno.test beneath the surface.

Continue reading
How to Use Deno’s Built-in Tools
on SitePoint.

The Complete Guide to Windows Terminal

Original Source: https://www.sitepoint.com/windows-terminal/?utm_source=rss

In this article, we’ll explore Windows Terminal, the ideal accompaniment to WSL2. It’s fast, configurable, looks great, and offers all the benefits of both Windows and Linux development.

Windows has fully embraced Linux, and WSL2 makes it a seamless pleasure.

Your distro’s terminal can be accessed by:

clicking its Start menu icon
entering wsl or bash at a Powershell or command prompt
using a third-party terminal option such as Cmder, ConEmu, and Hyper with a profile which launches %windir%system32bash.exe ~
setting Linux as the default shell in VS Code by pressing Ctrl + Shift + P and typing/choosing Terminal: Select Default Shell, and selecting WSL Bash.

Windows Terminal offers a further choice, but you won’t regret installing it. The new application features:

support for WSL2, SSH, Powershell, cmd and other command lines
multiple tabs and split panes
configurable themes, background images, and transparency effects
a search box
custom key bindings
GPU accelerated text rendering
a great-looking new font, Cascadia Code
low resource usage (typically 10MB per tab)
auto-updating (if using the Microsoft Store)
good documentation
and it’s open source!

Windows Terminal

How to Install Windows Terminal

The easiest way to install Windows Terminal is via the Microsoft Store:

ms-windows-store://pdp/?ProductId=9n0dx20hk701

If this link fails, try opening the Microsoft Store in your browser or launching the Microsoft Store app from the Windows Start menu and searching for “Terminal”.

Note: be careful not to select the earlier “Windows Terminal Preview” application.

Windows Terminal at the Microsoft Store

Hit Get and wait a few seconds for installation to complete.

If you don’t have access to the Store, you can download the latest release from GitHub.

The Windows Terminal app icon is now available in the Windows Start menu. For easier access, right-click the icon and choose Pin to Start or More, followed by Pin to taskbar.

Getting Started with Windows Terminal

When it’s first run, Windows Terminal starts with Powershell as the default profile. A drop-down menu is available to launch other tabs and access the settings:

Windows Terminal start

Terminal automatically generates profiles for all WSL distros and Windows shells you have installed, although it’s possible to disable generation in the global settings.

Managing Tabs and Panes

Open a new tab for the default profile by clicking the + icon or Ctrl + Shift + T. To open a tab for a different profile, choose it from the drop-down menu or press Ctrl + Shift + N, where N is the profile’s number.

Press Alt + Shift + D to duplicate and split the pane. The active pane is split in two along the longest axis each time it is used:

Windows Terminal split panes

To force creation of a:

vertical pane, press Alt + Shift + +, or
horizontal pane, press Alt + Shift + –

To open another profile in a new pane, hold down the Alt key when choosing it from the drop-down menu.

Hold down Alt and use the cursor keys to switch between active panes from the keyboard. The size of a pane can be adjusted by holding Alt + Shift and using the cursor keys to resize accordingly.

Tabs can be renamed by double-clicking the text. You can also change the name or color by right-clicking the tab and choosing a menu option:

Windows Terminal tab name and color

This only affects the current tab; it doesn’t permanently change the profile.

To close the active pane or tab, press Alt + Shift + W or enter the terminal’s standard exit command (usually exit).

Text size

The text size of the active terminal can be resized with Ctrl + + and Ctrl + -. Alternatively, hold down Ctrl and scroll the mouse wheel.

Scrolling

Use the scroll bar to navigate through the terminal output. Alternatively, hold down Ctrl and press cursor up, cursor down, Page Up or Page Down to navigate using the keyboard.

Search

Press Ctrl + Shift + F to open the search box:

Windows Terminal search

Enter any term then use the up and down icons to search the terminal output. Click the Aa icon to activate and deactivate exact-case matching.

Copy and Paste

By default, copy and paste are bound to Ctrl + Shift + C and Ctrl + Shift + V respectively, although Ctrl + C and Ctrl + V will also work.

Note: be wary that Ctrl + C can terminate a Linux application, so using Shift is advisable.

An automatic copy-on-select option is available in the global settings, and you can also paste the current clipboard item by right-clicking the mouse.

Settings

Settings are accessed from the drop-down menu or Ctrl + , (comma). The configuration is defined in a single settings.json file, so you may be prompted to choose a text editor. VS Code is a great choice, although Notepad is fine if you’re happy to edit without color-coding and syntax checking.

settings.json controls:

global settings, which apply to all profiles
profile settings, which define profiles
custom color scheme settings, and
keybinding settings

The file uses the following format:

// This file was initially generated by Windows Terminal
{

// general settings, e.g.
“initialRows”: 40,

// profile settings
“profiles”:
{

“defaults”:
{
// settings that apply to all profiles
}
“list”:
[
// list of individual profiles, e.g.
{
“guid”: “{81d1dceb-c123-5678-90a1-123abc456def}”,
“name”: “Windows PowerShell”,
“commandline”: “powershell.exe”
},
{
“guid”: “{91d1dceb-c123-5678-90a1-123abc456def}”,
“name”: “Ubuntu”,
“source”: “Windows.Terminal.Wsl”
}
]

}

// custom color schemes, e.g.
“schemes”: [
{
“name”: “My new theme”,
“cursorColor”: “#FFFFFF”,
“selectionBackground”: “#FFFFFF”,
“background” : “#0C0C0C”,
“foreground” : “#CCCCCC”
}
],

// custom key bindings, e.g.
“keybindings:
[
{ “command”: “find”, “keys”: “ctrl+shift+f” }
]

}

Defaults are defined in defaults.json. Open it by holding down Alt when clicking Settings in the drop-down menu.

Warning: do not change the defaults file! Use it to view default settings and, where necessary, add or change a setting in settings.json.

Global Settings

The following global settings are the most useful, although more are documented in the Windows Terminal documentation.

“defaultProfile” defines the GUID of the profile used as the default when Windows Terminal is launched.

Set “copyOnSelect” to true to automatically copy selected text to your clipboard without having to press Ctrl + Shift + C.

Set “copyFormatting” to false to just copy plain text without any styling. (I wish this were the default for every application everywhere!)

Set “initialColumns” and “initialRows” to the number of characters for the horizontal and vertical dimensions.

“tabWidthMode” can be set to:

“equal”: each tab is the same width (the default)
“titleLength”: each tab is set to the width of its title, or
“compact”: inactive tabs shrink to the width of their icon.

“disabledProfileSources” sets an array which prevents profiles being automatically generated. For example:

“disabledProfileSources”: [
“Windows.Terminal.Wsl”,
“Windows.Terminal.Azure”,
“Windows.Terminal.PowershellCore”
],

This would disable all generated profiles; remove whichever ones you want to retain.

Continue reading
The Complete Guide to Windows Terminal
on SitePoint.