Edgium

January 15th, 2020 was the day Microsoft Edge went Chromium. A drop in browser engine diversity. There is a strong argument to be made that's not good for an ecosystem. Looked at another way, perhaps not so bad:

Perhaps diversity has just moved scope. Rather than the browser engines themselves representing diversity, maybe forks of the engnies we have left can compete against each other. Maybe starting from a strong foundation is a good place to start innovating.

It's awesome when browsers compete on features that are great for users but don't affect web standards. Great password managers, user protection features, clever bookmarking ideas, reader modes, clean integrations with payment APIs, free VPNs, etc.

That's sort of the road that Opera went down when they went Chromium, then they turned into a payday loan company. (WTF, right?!) The layoffs at Mozilla don't seem dire, but don't signal anything particularly good either.

I'd say it's also significant that Microsoft's deprecated engines were not open source while Chromium is. While it may be in Google's hands, open source is still a good thing and opens the door to outside involvement, which had done great things, like bringing us CSS grid.

Jeremy Keith, paraphrasing Amber Wilson:

The bar of unity is being raised. Now, a number of separate browser makers—Google, Samsung, Microsoft—not only collaborate on standards but also on implementation, sharing a codebase.

So these browsers are still competing, but the competition is no longer happening at the level of the rendering engine.

Jeremy isn't convinced though. We're down to essentially a two-party political system, but with one side having a crushing majority.

Checks and balances exist, but they’re in peril.

Just as the world is pouring one out for dying browsers, a new totally-from-scratch browser comes out of nowhere: Flow. PPK has an interview with the creator, Piers Wombwell. It's not open source. You can't even download it. But it exists! If I was a betting man I would have lost a lot of money on a bet that nobody would ever seriously try to take on building another browser from scratch.

I'm not even sure what I think about all this. Part of me thinks about Walmart. I feel like I've spent the last 25 years listening to everyone around me be so mad about Walmart. They open up on the outskirts of an old town and sell their cheap shoes and cheap bikes and the nice little shoestore and long-standing bike store downtown go out of business. The face of business just kind of changed. The face of browsers has changed too, and I don't have the energy to be mad about it for another 25 years. That's not to excuse companies that have done and do foul crap, it's more to say all this is complicated and tiring.

The post Edgium appeared first on CSS-Tricks.

Android 11 Adds App Compatibility Testing Features

It is expected that with Android 11, Google will add new App Compatibility features within developer options that will simplify the application testing process. The new features will operate on a per-app basis and display behavior changes based on API level.

Death by a Thousand Scripts

Death by a Thousand Scripts

In my last five years of exposure to open source software, starting with OpenStack, I have noticed an increasing trend of relying on scripts to fill the gaps left by the software system. The gaps can be varied in their scope and size, such as

  • Installation
  • Lifecycle management — upgrades, downgrades, etc.
  • Supporting different environments
  • Troubleshooting
  • Feature extensions

While this approach may help with the initial PoC steps to get things off the ground, it can cause a lot of problems later on during the productization cycle. Ultimately, this leads to a software system that is heavily propped up by a multitude of scripts.

GoDaddy’s ‘Go’ WordPress Theme Offers a Page-Building Experience via the Block Editor

Screenshot of the Go WordPress theme.

GoDaddy launched its Go WordPress theme last week. It has been publicly available through its GitHub repository for several months, but the theme review team finally approved and set it live in the theme directory. Thus far, the theme has garnered 7,000 active installs and is likely to hit the popular list, given GoDaddy’s history of releasing popular themes. It also provides translations in 27 languages out of the box.

Go is simple. After working with the theme through GoDaddy’s managed hosting onboarding process in October last year, I was admittedly a little disappointed this time around. The onboarding process made things almost too easy. I had a predesigned site without thinking about it. After installing and activating Go in my test environment, I couldn’t help but feel like it would take 100 times more work to recreate the magic I once basked in. I knew the power of the theme because I had been presented an ideal set of options that were preconfigured for me in the past. Without the configuration, the theme seemed a little less impressive.

That’s the beauty of great marketing and onboarding. GoDaddy had already reeled me in.

While the Go theme is simple, it is also powerful. A lot of that power is in its block styles. Instead of focusing on theme-specific features, the team behind the project poured their work into creating an experience that allows theme users to piece their sites together with the block editor. The theme is ideal for users who want to utilize the block editor as a page builder.

The theme has a handful of customizer options that provide additional flexibility, but the main selling point is that it gets out of the way and lets the user do the designing. I suspect we will see many similar themes in the next year as theme authors come to grips with building themes in a block world. A large part of the market will want themes that are essentially open canvases for site owners to manipulate the output of their site via blocks.

Go is also designed to work with WooCommerce, which is a large part of the company’s eCommerce hosting service. This integration should make it a nice option for small business owners.

CoBlocks Companion Recommended

Screenshot of the Features block from the CoBlocks plugin designed in the Go theme.
Features block from the CoBlocks plugin.

The magic of Go is not in the theme itself. It’s in GoDaddy’s companion plugin CoBlocks, which the company acquired last year in a deal with ThemeBeans. The plugin has soared from a mere 3,000 active installs to over 100,000 since.

CoBlocks offers everything from accordions to maps, from logos to pricing tables, and a lot more in between. It covers a lot of ground that the core WordPress editor blocks do not cover.

The Go theme is designed to go hand-in-hand with CoBlocks (can we get GoDaddy to just go ahead and rename the plugin to GoBlocks?). The theme is meant to offer a page-building experience. Because GoDaddy owns both products, it makes sense they would offer one of the nicer integrations between the plugin and a theme.

Not Ideal for Blogging

Screenshot of a blog post with loads of whitespace between paragraphs and other blocks.
A lot of whitespace between text and other blocks in posts.

The theme makes generous use of whitespace, but its overuse can often break the reading flow for blog posts. The flow from paragraph to paragraph is fine. However, the moment you drop an image, gallery, pull-quote, or one of many other blocks into the content, the theme adds an extra 140 pixels of whitespace above and below the block. It completely throws off the vertical rhythm of the post.

Go also displays the full posts on the blog posts page instead of excerpts. There are few things I dislike more when it comes to blogs. Providing an option for users to choose between a full and summary view would be ideal.

The theme does not claim to be well-suited to blogging. None of the demos for the theme show off a blog. If you’re looking for a theme to handle blogging with media mixed in the content, you will find better offerings elsewhere, such as the Blocksy theme

Limited Yet Useful Theme Options

Screenshot of the Go theme's customizer options.
Design style and color scheme options in the customizer.

The theme adds five sections to the customizer:

  • Site Design
  • Header
  • Footer
  • Social
  • Site Settings

Within each section, Go provides a few basic options, most of which are related to colors and layout. The most useful options reside under the “Site Design” section. The theme presents a design style option that changes the theme’s fonts and colors. Currently, there are five design styles: traditional, modern, trendy, welcoming, and playful. Once a design style is selected, users can choose from four color schemes for that style. The design of this system is brilliant. It gives users choices without forcing them to become designers and handpick the perfect hex code for each color.

Users who prefer to manage individual colors are not left out. The theme also provides options for overriding any of the colors from the chosen color scheme.

I was disappointed that Go opted for creating individual options for various social networks instead of using a navigation menu. Using WordPress’ built-in nav menu system for social links has become the de facto standard in the last several years, which allows users to carry their social links from one theme to the next. Unfortunately, users are required to retype all of their links with this theme.

The theme keeps does not go overboard with options but provides enough customizability to make the theme unique to the user.

How Does the Code Stack Up?

The theme offers a solid and well-documented codebase. There is not much PHP or JavaScript code, so there are few areas where it can go wrong. The theme’s strength is in its CSS.

The theme templates were primarily HTML with PHP sprinkled in. For DIY users who like to hack away at theme templates, you should not find any surprises.

Final Thoughts

Users who want to customize every page of their site will likely enjoy this theme. It is well-suited for small business owners and others with small sites. It could work well for artists and others with portfolios as well.

It does not fit with my personal taste because it does not cater to my blogging style, which is my primary interest in themes. However, I would not hesitate to recommend it to anyone who wants a ton of control over their site’s inner page design.

The following is a list of the available demos. There is a lot that can be done in combination with the CoBlocks plugin, which you will want to use in combination with Go.

Demos with the CoBlocks plugin:

Demos with the CoBlocks and WooCommerce plugins:

Create a D3 Dashboard With Cube.js

In this tutorial, I’ll cover building a basic dashboard application with Cube.js and the most popular library for visualizing data — D3.js. Although Cube.js doesn’t provide a visualization layer itself, it is very easy to integrate with any existing charting library. Additionally, you can use Cube.js Templates to scaffold a frontend application with your favorite charting library, frontend framework, and UI kit. The scaffolding engine will wire it all together and configure it to work with the Cube.js backend.

You can check the online demo of this dashboard here and the complete source code of the example app is available on Github.

Elastic Cloud on Kubernetes Now Generally Available

Elastic Cloud on Kubernetes (ECK) is now generally available. ECK offers a seamless method to deploy, manage, and operate the Elastic Stack on Kubernetes. The goal of ECK, which remains the same now as it was during its alpha and beta releases, is to "orchestrate Elasticsearch on Kubernetes and provide a SaaS-like experience for Elastic products on Kubernetes."

Create Charts in an Angular 7 Application Using Chart.js

Chart.js is a powerful open source data visualization library. This helps to visualize or represent a data inside a web application using JavaScipt. It helps to plot the data into 8 different types of chart like bars, lines, pies, etc. This Chart.js graphs are highly customizable and used in web application development to build a responsive and beautiful graph.

Prerequisites

  • We should have a basic knowledge of Angular and Web API.
  • Visual Studio Code can be installed.
  • Visual Studio.
  • SQL Server Management Studio.

Project Implementation Steps

  1. Database.
  2. Web API to fetch data from the database.
  3. Angular 7 project.
You may also like: Cube.js and Chart.js Example With Dynamic Dataset.

Step 1

Open SQL Server Management Studio and create a table Tblplayer and add some demo data into this table.

Relational vs NoSQL and RDBMS to NoSQL Migration

Overview

Given the choice of a Relational Database (RDBMS) vs a NoSQL database, it has become more important to select the right type of database for storing data. Not all the requirements fit in a NoSQL database or an RDBMS. RDBMSs are mainly related to managing, storing, and manipulating structured data where the data format, columns, data type, attributes, and schema are fixed, and the relationship between entities needs to be consistently maintained.

SQL is a common query language used when dealing with an RDBMS. Using an RDBMS is a choice for storing transactional data or records where the ACID (Atomicity, Consistency, Isolation, Durability) proprieties of transactions must be provided by an underlying database. An RDBMS is also a choice where the security and accessibility of data are of utmost importance. Typical use cases are financial records, financial transactions, OLTP, ERP, CRM systems, e-commerce applications, etc.

Publication Release: DevSecOps Trend Report

For years, security has been an afterthought — functionality that developers and product managers often address at the last minute, right before a build is about to ship. For some individuals and teams, this practice stems from a reactive approach to security, in which vulnerabilities are expected to be dealt with only once they’re discovered after a release. For others, this stems from prioritizing additional features and functionality (and immediate ROI) over security (and minimizing risk). For most, however, the cause of this issue is more systematic in nature.

Businesses today expect speed from development teams. Too often, the questions that leaders and managers ask concern the time of the next deployment or how soon a bug can be fixed, rather than how well a problem is addressed. This mindset is innately oppositional to ensuring the security of an application. Security, like any other part of software development, is iterative; it takes rounds of testing and attention to detail from all stakeholders involved in order to eliminate vulnerabilities.

Breezing Through Support Vector Machines

When we add "Machine" to anything it looks cool... perhaps due to an assumption made about the introduction of both "intelligence" and "automation" hinted by the use of such a term.

So, let's take that out and we are back to old, classical vector algebra. It's like a person with a bunch of sticks to figure out which one to lay where in a 2-D plane to separate one class of objects from another, provided class definitions are already known. 

The Fastest Way to Create an Event Sign-up System

In this post, I’m going to show you how to create a simple event sign up system. Since one of the goals is to create something quickly, we are going to use Corvid to build the application.

Corvid is a development platform from Wix, which allows you to concentrate on the logic of the application using JavaScript and not spend time on writing HTML/CSS to create the UI. Corvid is focused on helping teams dramatically decrease time spent on development and ship products faster.

Rejection in Akka HTTP: Handle Errors Properly

Learn more about rejection in Akka HTTP and how it helps in handling error scenarios in your application.

In this blog, we will demonstrate rejection in the Akka HTTP and how it helps in handling error scenarios in our application. Let's get started.

How Spring Boot Auto-Configuration Works

In my previous post "Why Spring Boot?", we looked at how to create a Spring Boot application, but you may or may not understand what is going on behind the scenes. You may want to understand the magic behind Spring Boot’s AutoConfiguration.

Before that, you should know about Spring’s @Conditional feature, on which all Spring Boot’s AutoConfiguration magic depends.

Case Study: itsnotviolent.com

SOS Violence Conjugale is an organization that helps victims of violence with the goal of improving their safety. Their objective with It’s not violent was to implement an awareness campaign educating the target audience on the signs of violence through text messaging, a medium where this subject can be addressed a bit more subtly. Our proposal was therefore to provide an interactive conversation experience in which the user would be placed in a victim’s situation and would have to reply to text messages by choosing from the suggested responses. The aim is to denounce the various facets of violence through direct experience.

Concept

Domestic violence being a difficult topic, we decided to use a lighter approach. Firstly, to bring the user to participate in a playful manner, but also to make the message even more striking.

The illustrative universe echoes that of Emojis, with magnified emotions and expressions, which fits well with the theme of text message conversations. A somewhat candy-colour palette was used, in contrast with the dark backgrounds used to emphasize the gravity of the subject.

Typographical choices were also made to amplify this contrast: a bold and more “in your face” font, and one that is a little more playful and naive. Editorial effort was put into the navigation by the use of “stickers”, creating intrigue through the titles without revealing the main subject of the conversation.

Creating the stickers

Design

Personifying the objects on the stickers was deliberately done in such a way as to render the illustrations genderless and representative for the widest possible audience. The stickers’ animation gives a playful aspect and adds a narrative side, in addition to encouraging participation. The stickers were created in Illustrator and were then animated with After Effects. Lottie’s Body Movin plugin was used for rendering the web animations.

Implementation

We used the Lottie library, which allowed us to take animations made with After Effects and use them on the site. On the home page, the stickers are in “pause” mode by default, and when we hover on one of them that sticker goes into “play” mode.

 To make the hover state more visible, the title appears in the background in large type in a scrolling strip, while on a conversation page the stickers are in a constant loop.

Initiation of Lottie’s instance:

this.animation = lottie.loadAnimation({
    container: this.el,
    animType: ‘svg’,
    loop: true,
    autoplay: false,
    animationData: data
})

Condition if not in autoplay mode like the home page:

if (!this.autoplay) {
    this.mouseenterBind = this.enter.bind(this)
    this.el.addEventListener('mouseenter', this.mouseenterBind)

    this.mouseleaveBind = this.leave.bind(this)
    this.el.addEventListener('mouseleave', this.mouseleaveBind)
}

On “mouseenter” and on “mouseleave”, we are returning a different function:

enter() {
    this.animation.play()
}

leave() {
    this.animation.pause()
}

Creating the conversations

Design

On desktop, we chose to place the conversation in the context of a mobile phone. Across a few exchanges a choice of three replies is always offered to the user.  The response from “the abuser” varies according to the user’s chosen reply. The choice of using a very large cursor also emphasizes that the user must choose from the suggested answers.

When a conversation is finished, an information page is displayed on the theme of violence exploited through that conversation. Finally, we find the list of conversations, presented as stickers, as an invitation to continue the experience.

Implementation

We used Vue.js to manage dialogues because it was easier to handle the components since the content changes and it has to be responsive to the user’s choices.

All the storylines are included in a JSON file which includes the victim’s reply choices (a short version of which appears in the choices and a detailed version which appears in the conversation), and depending on the reply selected, we return the abuser’s answer associated with it.

Example of JSON structure for a conversation:

"dialogues": [
{
    "choices": [
    {
        "author": "victim",
        "short": "It's not lame...",
        "content": "It's not lame, it's important to me..."
    },
    {
        "author": "victim",
        "short": "You're not OK with it?",
        "content": "You're not OK with it?"
    },
    {
        "author": "victim",
        "short": "I don't understand your reaction.",
        "content": "Um, I don't understand why you're reacting like this..."
    }],
    "replies": [
    {
        "author": "aggressor",
        "content": "Naturally, you're the important one!"
    },
    {
        "author": "aggressor",
        "content": "Wow! So perceptive!! ?"
    },
    {
        "author": "aggressor",
        "content": "And that's the problem!"
    }],
    "outro": [
    {
        "author": "aggressor",
        "content": "No biggie, I'll just come with you."
    }]
}]

When the conversation is finished an overlay is launched with a question for the user, and then it displays the results and some statistics on the subject. A fun, animated GIF transition is then launched depending on the chosen answer.

Challenges

Giving a realistic feel to the dialogues was one of the main challenges. We had to do several tests to give the impression of a real SMS conversation. We decided to display the messages with a delay, as if the abuser was writing. The longer the message, the longer it takes to receive it. We had to set a time limit, however, so that the user experience was not excessively long.

Message delays:

/**
 * Set the duration according to the number of parameters. Longer message will take more time to be send
 *
 * @param {string}
 * @return {int} | duration in ms
 */
messageDuration(message) {
    if (message.length < 100)
        return (message.length * 20)
    else
        return 1600
}

Tech Stack

In order to fully support the accompanying media campaign, we decided to keep the back-end as simple as possible, just like we decided to use flat JSON files for the dialogue instead of storing it in a database, for example. In fact, we ended up rendering static HTML from our PHP templates to ensure there is absolutely no back-end processing necessary.

Although we usually use our Charcoal Content Management System, which is equipped with an aggressive caching system for those kinds of websites, you just can’t beat static files 🙂 With the help of CloudFlare acting as a CDN, we handled 100,000 visits in the first 2 weeks without a hiccup.

Front-end frameworks

Conclusion

Itsnotviolent.com was the kind of project where every star aligned for us. A great cause, a wonderful client and a showcase of creativity through a clever experience. The will and courage to take a lighter, more playful and interactive route to discuss the theme of violence has been so far rewarded with the high popularity of the campaign. It has been embraced by organizations in Canada and is attracting more interest outside the country.

Case Study: itsnotviolent.com was written by Marie-Christine Dion and published on Codrops.