The Trickery it Takes to Create eBook-Like Text Columns

There’s some interesting CSS trickery in Jason Pamental’s latest Web Fonts & Typography News. Jason wanted to bring swipeable columns to his digital book experience on mobile. Which brings up an interesting question right away… how do you set full-width columns that add columns horizontally, as-needed ? Well that’s a good trick right there, and it’s a one-liner:

columns: 100vw auto;

But it gets more complicated and disappointing from there.

With just a smidge more formatting to the columns:

main {
  columns: 100vw auto;
  column-gap: 2rem;
  overflow-x: auto;
  height: calc(100vh - 2rem);
  font: 120%/1.4 Georgia;
}

We get this:

Which is so close to being perfect!

We probably wouldn’t apply this effect on desktop, but hey, that’s what media queries are for. On mobile we get…

That herky-jerky scrolling makes this a bad experience right there. We can smooth that out with -webkit-overflow-scrolling: touch;

The smoothness is maybe better, but the fact that the columns don’t snap into place makes it almost just as bad of a reading experience. That’s what scroll-snap is for, but alas:

Unfortunately it turns out you need a block-level element to which you can snap, and the artificially-created columns don’t count as such.

Oh noooooo. So close! But so far!

If we actually want scroll snapping, the content will need to be in block-level elements (like <div>). It’s easy enough to set up a horizontal row of <div> elements with flexbox like…

main {
  display: flex;
}
main > div {
  flex: 0 0 100vw;
}

But… how many divs do we need? Who knows! This is arbitrary content that might change. And even if we did know, how would we flow content naturally between the divs? That’s not a thing. That’s why it sucks that CSS regions never happened. So to make this nice swiping experience possible in CSS, we either need to:

  • Allow scroll snapping to work on columns
  • Have some kind of CSS regions that is capable of auto-generating repeating block level elements as-needed by content

Neither of which is possible right now.

Jason didn’t stop there! He used JavaScript to figure out something that stops well short of some heavy scrolljacking thing. First, he figures out how many “pages” wide the CSS columns technique produces. Then, he adds spacer-divs to the scrolling element, each one the width of the page, and those are the things the scrolling element can scroll-snap to. Very clever.

At the moment, you can experience it at the book site by flipping on an optional setting.

The post The Trickery it Takes to Create eBook-Like Text Columns appeared first on CSS-Tricks.

Change Data Captures CDC from MySQL Database to Kafka with Kafka Connect and Debezium

Introduction

Debezium is an open-source project developed by Red Hat which aims to simplify this process by allowing you to extract changes from various database systems (e.g. MySQL, PostgreSQL, MongoDB) and push them to Kafka


Debezium Connectors

Debezium has a library of connectors that capture changes from a variety of databases and produce events with very similar structures, making it easier for the applications to consume and respond to the events regardless of where the changes originated. Debezium currently have the following connectors

Matt Mullenweg and Matías Ventura Demo New Image Editing Tools Coming to Gutenberg

One of the most exciting parts of Matt Mullenweg’s session at WordCamp Europe 2020 Online was the live demo of the new image editing tools that will land in the next release of the Gutenberg plugin. The video is already available on WordPress.tv (and embedded below). At the 8:30 mark, Mullenweg and Matías Ventura, lead architect of the Gutenberg project, unveil a collection of the latest block editor improvements.

The six-minute demo shows a handful of new features that are coming in WordPress 5.5, which is scheduled for release in August. These include more polished interactions, copying and pasting blocks, block patterns, and new design tools for the cover block.

Ventura also highlighted the team’s progress on adding rich image editing capabilities to Gutenberg.

These new tools allow users to easily rotate, flip, and crop the image inside the block. Cropping with zoom mode (shown in the image below), is particularly useful with the live preview showing the results in context of the rest of the content on the page.

The current iteration only allows for cropping with fixed aspect ratios but contributors are working on adding free-form crop to the lineup. They are also discussing refinements such as adding snackbar notices and queuing up image edits to only apply once all edits are complete.

In the past, WordPress users have frequently had to seek out alternative applications to perform quick image edits, taking them outside of the content editor and interrupting their workflow. With the new inline image editing tools in place, most simple edits can now be handled by the image block, making WordPress a more compelling place for writing content.

Ventura confirmed that these tools change the source image – they do not not just apply CSS changes. He also said the API for image editing will be available in other parts of the editor. The Gutenberg team is working on making the tools more extensible so developers can add things like image filters.

Contributors are hoping the new image editing tools will be ready for inclusion in WordPress 5.5. Users who want to test them ahead of the release can install the Gutenberg plugin and watch for the upcoming 8.3 update.

Image SEO Optimizer: Optimize Images for Search Engines

Image SEO Optimizer: Optimize Images for Search EnginesImages play a lot of vital roles in WordPress websites. For starters, they help you to split long blocks of text, which improves readability, hence user experience. Second, beautiful images add color and life to dull posts making your content more intriguing. And, they add meaning to your textual content, but only if you use […]

The post Image SEO Optimizer: Optimize Images for Search Engines appeared first on WPExplorer.

Chaos Engineering — Simulate AZ Failures on AWS

Chaos engineering is about introducing turbulent conditions that systems are likely to face in production environments.  These chaos experiments uncover new information, which can then be used to make changes to code, making our systems more resilient than they were before. Chaos experiments are not equivalent to Testing.  In Testing, we check system response against a predefined expected result. However, in the case of chaos experiment, we don’t have a predefined outcome.  The experiment gives us new information about the system, which can then be used for the betterment of systems.

In this article, I will walk you through how you can create chaos experiment of Availability Zone (AZ) failure on AWS.  Highly available applications need to be resilient against AZ failures.  Your application, for example, a Kubernetes cluster spanning across multi-AZ, should be able to survive such AZ failures. These chaos simulations allow you to check and prepare for that.

Flutter Tutorial Part 1: Build a Flutter App From Scratch

In this tutorial series, we’ll guide you step by step on how to create an e-commerce mobile application using flutter. The mobile application would be an open-source app for the Aviacommerce platform. The tutorial would focus on this application to introduce the important concepts of the flutter framework.

This tutorial is the first part of the flutter tutorial series:-

Five Data-Driven Reasons To Add Visual AI To Your End-To-End Tests

Do you believe in learning from the experiences of others? If others found themselves more productive adding Visual AI to their functional tests, would you give it a try?

In November 2019, over 3,000 engineers signed up to participate in the Applitools Visual AI Rockstar Hackathon. 288 completed the challenge and submitted tests — comparing their use of coded test validation versus the same tests using Visual AI. They found themselves with better coverage, faster test development, more stable test code, with easier code test code maintenance.

Is the Product Owner Accountable For Return On Investment (ROI)?

I often have this question: "Is the Product Owner accountable for Return on Investment (ROI)?"
Well, yes, The Product Owner is accountable for ROI. The most frequent question I get whenever I am teaching, mentoring, or coaching product owners is, "How do I calculate ROI when I don’t even know the cost of a sprint?"

As a product owner, if you do not know the investment for each sprint, and you are expecting profit, how do you prioritize backlog and engage stakeholders?

Build Versatile Layouts with the GenerateBlocks WordPress Plugin

Over the past few weeks, I have had the GenerateBlocks plugin sitting in my test environment. I have built a few layouts with it, tinkering with the plugin between other projects. The one thing I kept thinking was that it had huge potential. Aside from a couple of issues, I began enjoying the plugin more and more as I played around with its options.

GenerateBlocks was created by Tom Usborne. It was built specifically to work along with his popular GeneratePress theme. However, the plugin claims to work with any WordPress theme.

GenerateBlocks is meant to be the block answer to the page builder question. It is meant to take those elements that make page builders so popular and boil them down to a handful of blocks. It is meant to simplify the process of building complex layouts without the need for heavier solutions. The question is whether it holds up — does it do the job it set out to do?

Overall, it works well, particularly in terms of giving more freedom with layout building. It will not likely eat into the market share of page builders any time soon. However, it may make for a few more converts to the block editor, especially with those who are not tied into an existing solution and are looking for something lightweight.

Watch a quick video on how GenerateBlocks works:

The Plugin’s Blocks

Example output of the GenerateBlocks' editor blocks: container, grid, headline, and buttons.
Using each of the GenerateBlocks plugin’s blocks in a section.

GenerateBlocks’ bread and butter is its Container block. It is the WordPress Cover and Group blocks rolled into one with a gluttonous amount of additional options that cover nearly every need.

The one major area that the Container block falls short is with handling full-width sections. Instead of taking advantage of the standard full-width block alignment option that all themes can opt into, it goes with a custom solution. That solution is to provide a notice that the user’s theme must have some sort of full-width content option (likely via a page template). By choosing this route it means the majority of themes, including those built to style blocks, will not support the GenerateBlocks Container block when set to full width.

For end-users who are using a theme that supports the standard full-width block alignment, there are two tricks to bypass this limitation. The first solution is to enter alignfull into the CSS Classes field under the Advanced block options tab. The second solution is to wrap the Container block with the WordPress Group block and set it to full width. How these solutions work out will largely depend on how the theme handles those elements.

With all the flexibility of GenerateBlocks, this would be the reason that I would not recommend the plugin to users who want full-width layouts. The two tricks are not an ideal user experience. In design, the most important thing is for the user to not have to think. The provided solution should simply work.

If we gave that single element of the plugin a one-star rating, everything else would be an easy five stars.

The plugin’s four blocks can easily replace several other blocks. Instead of creating a library of dozens of one-off blocks, GenerateBlocks adds versatility without going overboard. It is easy to see why users have given it a perfect five-star rating (out of its current 34 reviews).

In total, the plugin adds four blocks to the editor:

  • Container
  • Grid
  • Headline
  • Buttons

Admittedly, I am partial to Automattic’s Layout Grid plugin, primarily because I prefer the visualization of the grid in the background. It puts me at ease. However, the Grid block in GenerateBlocks runs a close second. In practice, it is more flexible, providing more layout options out of the box and fine-grained control. For those who need greater control over column widths and a host of color, typography, background, and spacing options, GenerateBlocks is a no-brainer.

The grid block from the GenerateBlocks plugin in the WordPress editor.
Inserting a new Grid block in the editor.

The Headline and Buttons blocks are essentially recreations of the core Heading and Buttons blocks with all the options that make this plugin useful. Plus, the blocks have an extra icon option, which allows users to choose between entering custom SVG code or selecting from a predefined list of general and social icons. This is a nice touch that I would like to see in core WordPress.

The thing that makes the four plugin blocks so flexible is the bounty of block options. For every block, you will find most of the following options tabs with numerous fields under each:

  • Typography
  • Spacing
  • Colors
  • Background Image
  • Background Gradient
  • Advanced (extra options for the core tab)
  • Icon

The plugin also provides options based on desktop, tablet, and mobile modes. This allows end-users to make changes based on the screen size of the website visitor.

If I had one other nit-pick about the plugin it would be that its color options do not take advantage of the theme-defined color palette. For design consistency, it would be nice to be able to use those without using a color picker or entering the hex code. Update: there is a “Show Color Palette” button that does this, but it was not apparent that it would provide access to my theme colors.

Final Thoughts

Would I recommend the plugin? Absolutely.

I would make sure to note the full-width Container block issue with that recommendation. If you are using this with a theme other than GeneratePress, you will need to have a solution for handling full-width sections. For me, this is the most vital piece of what is essentially a layout builder, and it failed to live up to that expectation.

However, one issue does not discount the usefulness of what the developer has built. It is a solid plugin. Under the hood, it is a well-coded and documented piece of software. I have no doubt that it will be serving many more users in the years to come and will only continue to improve.

Exit The Test Maintenance Road to Nowhere Through Visual AI

On the Test Maintenance Road to Nowhere? Your Visual AI Exit Is Just Ahead.

Congrats! You just spent hours authoring new tests. They all passed 100% of the time. Now you can start the real work of managing quality. That is until the application under test starts to change. Now, the potential for instability in code-based assertions surfaces, and your maintenance nightmare ensues.

Best Linux Distros for Developers

Linux is an awesome ecosystem for a variety of uses. For instance, Linux is the de facto server environment, powering over 96% of the top 1 million servers. And for programming, Linux is arguably better than Windows. Check out the best Linux distros for programmers and developers!

Why Is Linux Better for Devs and Programmers?

My Linux journey began back in the day when I inherited an ancient Shuttle XPC desktop sans an operating system (OS). Rather than purchasing a copy of Windows, I decided to install the Ubuntu derivative Lubuntu, and since then I've been a convert. Likewise, one of the reasons many motivations for programmers to use a Linux OS is that it's free and open-source.

From a Computation Machine to a Coordination Machine

Today there is a huge amount of technology for dealing with different aspects of cloud computing. In particular, containerization and microservices lead us to think of software applications as distributed applications whose components can be easily deployed and moved in the cloud. In my opinion, what we are facing today is a revolution that is not only a matter of technologies, it is something so profound that it can alter the way we conceive software and software infrastructures.

My idea is that we need new abstractions and concepts for dealing with such a revolution. In science, we are always looking for the best model which captures the essence of reality. We are doing this because on top of that model we can build the right technologies for satisfying our human needs. The same happened in computer science from the beginning when researchers started to automatize the ability of the mind: calculation. From that moment, the calculation machine has been always used as the basic reference for dealing with automatic calculation, and on top of this model, different technologies have been developed.
In this article, I start to reason about the usage of a new reference idea for dealing with computational resources which best fit with the reality of cloud computing, instead of the traditional computing machine model: the communication machine.

Service Mesh: The Next Step to Kubernetes in the Era of Microservices

Often designed as a group of distributed microservices running in containers, cloud-native applications are better known as containerized applications. Increasingly, the containerized applications are Kubernetes-based, Kubernetes being the de-facto standard for container orchestration. But the exponential growth in microservices makes it quite challenging to find out how to enforce and standardize routing between multiple services, encryption, authentication and authorization, as well as load balancing within a Kubernetes cluster. Building on service mesh helps to tackle these challenges. Like containers abstract away the operating system from the application, a service mesh abstracts away how inter-process communications are tackled.

What Is a Service Mesh?

A service mesh refers to a dedicated infrastructure layer for tackling service-to-service communication. It enables reliable delivery of requests through the complex topology of services constituting a modern, cloud native application. Practically, the service mesh implements as an array of lightweight network proxies deployed alongside application code. In other words, it is made up of sidecar proxies attached to all the pods in an application. The concept of the service mesh in terms of a distinct layer is connected to the growth of the cloud native application. Remember service-to-service communication is not only complex, but a fundamental aspect of runtime behavior and ubiquitous. Managing it is crucial to assure end-to-end performance and reliability.

Hasura Introduces New GraphQL Data Federation Feature: Remote Joins

Hasura, a GraphQL data and services company, has introduced a new data federation feature: Remote Joins. Remote Joins allows developers to treat data across sources as a single database. The existing data sources do not need to be modified in order to utilize Remote Joins. With a point and click, a relationship across the sources is created and unified access is created through the GraphQL API.

50 Creative Law Firm Logos

These are the most creative law firm logos and ideas for designers. With these, you can get inspiration for designing logos for law firms.

Visit The Site For More...