Thẻ: ChisNghiax

  • Zstandard – Giải pháp nén dữ liệu thay thế Gzip và Brotli

    Zstandard – Giải pháp nén dữ liệu thay thế Gzip và Brotli

    Zstandard (Zstd) đang trở thành giải pháp nén dữ liệu ngày càng phổ biến, được nhiều chuyên gia và doanh nghiệp lựa chọn thay thế cho các thuật toán nén truyền thống như Gzip và Brotli. Với khả năng nén nhanh, hiệu suất cao và tỷ lệ nén vượt trội, Zstandard mang lại nhiều lợi ích thiết thực trong việc tối ưu hóa dung lượng lưu trữ và tăng tốc độ truyền tải dữ liệu trên mạng.

    Đặc biệt, Zstd phù hợp với đa dạng ứng dụng từ lưu trữ dữ liệu lớn đến truyền phát nội dung trực tuyến, giúp giảm chi phí băng thông và cải thiện trải nghiệm người dùng.

    Trong bài viết này, chúng ta sẽ tìm hiểu sâu hơn về ưu điểm nổi bật của Zstandard so với Gzip và Brotli, cũng như cách triển khai Zstd hiệu quả trong các hệ thống công nghệ hiện đại. Nếu bạn đang tìm kiếm một giải pháp nén dữ liệu tối ưu hơn, Zstandard chắc chắn là lựa chọn đáng cân nhắc hàng đầu hiện nay.

    Zstandard là gì?

    Zstandard (Zstd) là một thuật toán nén dữ liệu hiện đại, được phát triển bởi Facebook nhằm tối ưu tốc độ nén và giải nén cùng chất lượng nén cao. Zstandard hỗ trợ nén hiệu quả với tỷ lệ nén tốt hơn so với nhiều thuật toán truyền thống như gzip hay bzip2, đồng thời giữ tốc độ xử lý nhanh, phù hợp cho cả ứng dụng lưu trữ và truyền tải dữ liệu.

    Zstandard - Giải pháp nén dữ liệu thay thế Gzip và Brotli 
    Zstandard – Giải pháp nén dữ liệu thay thế Gzip và Brotli 

    Ưu điểm nổi bật của Zstandard là khả năng nén đa cấp độ từ nhanh đến mạnh, giúp người dùng linh hoạt lựa chọn mức cân bằng giữa tốc độ và tỷ lệ nén. Ngoài ra, Zstandard còn hỗ trợ giải nén nhanh, giảm thiểu tài nguyên hệ thống, rất thích hợp cho các hệ thống cần xử lý dữ liệu lớn hoặc thời gian thực.

    Zstandard được sử dụng rộng rãi trong các hệ thống lưu trữ đám mây, cơ sở dữ liệu, phần mềm mã nguồn mở và nhiều ứng dụng khác. Việc áp dụng Zstandard giúp tiết kiệm băng thông, giảm chi phí lưu trữ và tăng hiệu suất xử lý dữ liệu. Nhờ các ưu điểm trên, Zstandard trở thành lựa chọn hàng đầu cho nhu cầu nén dữ liệu hiệu quả hiện nay.

    Thông số của các giải pháp nén hiện nay

    Dưới đây là phân tích chuyên sâu về các thông số của các giải pháp nén phổ biến hiện nay dựa trên bảng benchmark chính thức:

    CompressorTỷ lệ nén (Ratio)Tốc độ nén (Compression MB/s)Tốc độ giải nén (Decompress MB/s)
    zstd 1.4.5 -12.8845001660
    zlib 1.2.11 -12.74390400
    brotli 1.0.7 -02.703400450
    zstd 1.4.5 –fast=12.4345702200
    zstd 1.4.5 –fast=32.3126402300
    quicklz 1.5.0 -12.238560710
    zstd 1.4.5 –fast=52.1787002420
    lzo1x 2.10 -12.106690820
    lz4 1.9.22.1017404530
    lzf 3.6 -12.077410860
    snappy 1.1.82.0735601790

    Tỷ lệ nén (Compression Ratio)

    • zstd (đặc biệt là bản -1) có tỷ lệ nén cao nhất (2.884), nghĩa là dữ liệu sau khi nén chỉ bằng khoảng 34.7% kích thước ban đầu, cho thấy khả năng giảm dung lượng rất tốt.
    • zlib và brotli cũng có tỷ lệ nén khá cao, lần lượt là ~2.7, phổ biến trong các ứng dụng web và lưu trữ.
    • Các thuật toán như lz4lzosnappy có tỷ lệ nén thấp hơn (~2.07 – 2.1), ưu tiên tốc độ hơn là nén sâu.

    Tốc độ nén

    • Thuật toán nhanh nhất về tốc độ nén là lz4 (740 MB/s) và zstd –fast=5 (700 MB/s), phù hợp cho các ứng dụng cần xử lý nhanh, ví dụ như lưu trữ tạm thời hoặc truyền dữ liệu thời gian thực.
    • zlib có tốc độ nén thấp nhất (90 MB/s), do nó tập trung vào nén hiệu quả hơn hơn là tốc độ.
    • Các tùy chọn fast của zstd cho thấy sự cân bằng tốt giữa tốc độ và tỷ lệ nén, với tốc độ tăng dần khi tăng mức fast.

    Tốc độ giải nén

    • lz4 nổi bật với tốc độ giải nén cực nhanh (4530 MB/s), rất thích hợp khi ưu tiên truy cập dữ liệu nhanh.
    • Các phiên bản fast của zstd cũng có tốc độ giải nén cao, lên đến ~2400 MB/s, cho thấy tính linh hoạt của zstd trong nhiều tình huống.
    • zlib và brotli có tốc độ giải nén khá thấp so với các giải pháp khác, điều này khiến chúng phù hợp hơn với các ứng dụng mà tốc độ giải nén không phải ưu tiên hàng đầu.

    Khuyến nghị

    • Nếu cần tỷ lệ nén cao nhất để tiết kiệm dung lượng lưu trữ, lựa chọn zstd -1 hoặc zlib sẽ hợp lý, tuy nhiên sẽ hy sinh tốc độ nén.
    • Nếu cần tốc độ nén và giải nén nhanh, đặc biệt trong các ứng dụng đòi hỏi xử lý thời gian thực hoặc truy xuất nhanh, nên chọn lz4 hoặc zstd –fast=5.
    • Brotli thường được dùng trong môi trường web vì cân bằng tốt giữa tỷ lệ nén và khả năng giải nén trên trình duyệt, nhưng tốc độ không quá nhanh.
    • Các thuật toán như snappyquicklz, và lzo phù hợp cho các tình huống cần cân bằng nhẹ giữa tốc độ và tỷ lệ nén.

    So sánh Zstd với Gzip và Brotli trong các dự án phổ biến hiện nay

    Trong lĩnh vực phát triển phần mềm và quản trị web server, việc lựa chọn công cụ nén dữ liệu hiệu quả là rất quan trọng để tối ưu tốc độ truyền tải và tiết kiệm băng thông. Ba công cụ nén phổ biến hiện nay là Zstd, Gzip và Brotli đều có ưu điểm và hạn chế riêng, phù hợp với từng nhu cầu khác nhau.

    Tốc độ nén và giải nén

    • Zstd (Zstandard) nổi bật với tốc độ nén rất nhanh, thường nhanh hơn Gzip nhiều lần, đồng thời tốc độ giải nén cũng rất cao. Điều này giúp giảm đáng kể thời gian xử lý trên server và client, rất phù hợp khi cần nén dữ liệu lớn hoặc nén theo thời gian thực.
    • Gzip có tốc độ nén và giải nén ở mức trung bình, lâu đời và được hỗ trợ rộng rãi trên các hệ thống web. Tuy nhiên, Gzip không nhanh bằng Zstd và cũng không tối ưu về tỷ lệ nén như Brotli.
    • Brotli được Google phát triển chủ yếu để tối ưu nén cho web, đặc biệt là tài nguyên tĩnh như CSS, JavaScript. Brotli có tỷ lệ nén tốt hơn Gzip và Zstd nhưng tốc độ nén chậm hơn, thích hợp cho các file cần nén một lần rồi phục vụ nhiều lần.

    Tỷ lệ nén

    • Brotli thường cho tỷ lệ nén tốt nhất trong ba công cụ này, giúp giảm kích thước file đáng kể, đặc biệt khi sử dụng mức nén cao. Điều này giúp tăng tốc tải trang web và giảm băng thông.
    • Zstd có tỷ lệ nén tốt hơn Gzip, gần với Brotli ở một số trường hợp, nhưng thường nhanh hơn đáng kể khi thực hiện.
    • Gzip có tỷ lệ nén thấp hơn so với Zstd và Brotli, nhưng vẫn đủ dùng cho nhiều ứng dụng không cần tối ưu quá mức.

    Hỗ trợ và tương thích

    • Gzip được hỗ trợ rộng rãi trên mọi trình duyệt, server và công cụ, là tiêu chuẩn lâu dài cho nén HTTP.
    • Brotli được hầu hết các trình duyệt hiện đại hỗ trợ tốt, đặc biệt trong HTTPS, tuy nhiên một số hệ thống cũ có thể chưa tương thích hoàn toàn.
    • Zstd đang ngày càng được áp dụng rộng rãi trong các ứng dụng backend, lưu trữ dữ liệu, CDN, nhưng chưa phổ biến trong HTTP/HTTPS như Gzip hay Brotli.

    Ứng dụng thực tế

    • Nếu bạn là lập trình viên hoặc quản trị viên web server cần công cụ nén nhanh, hiệu quả cho API hoặc dữ liệu động, Zstd là lựa chọn tốt nhờ tốc độ cao và tỷ lệ nén hợp lý.
    • Nếu ưu tiên tương thích và đơn giản, Gzip vẫn là chuẩn vàng.
    • Nếu tập trung vào tối ưu tải trang web với tài nguyên tĩnh, Brotli mang lại hiệu quả vượt trội về kích thước file.

    Zstd, Gzip và Brotli mỗi công cụ đều có điểm mạnh riêng. Zstd phù hợp khi cần tốc độ nén nhanh và tỷ lệ nén tốt cho dữ liệu động. Gzip vẫn giữ vị trí ổn định nhờ tính tương thích cao. Brotli là lựa chọn hàng đầu để tối ưu tài nguyên tĩnh trên web hiện đại. Việc lựa chọn nên dựa vào mục đích sử dụng cụ thể của dự án để đạt hiệu quả tốt nhất.

    Có nên sử dụng Zstd cho dự án WordPress?

    Việc lựa chọn giải pháp nén dữ liệu cho dự án WordPress phụ thuộc vào nhiều yếu tố như hiệu suất, tương thích, tính dễ triển khai và mục đích sử dụng. Dưới đây là phân tích chi tiết về việc sử dụng Zstd trong môi trường WordPress:

    Tiêu chíZstdGzipBrotli
    Tốc độ nén/giải nénRất nhanh, phù hợp với dữ liệu động và APITrung bình, được hỗ trợ rộng rãiTốt nhưng chậm hơn Zstd, phù hợp tài nguyên tĩnh
    Tỷ lệ nénTốt, gần bằng BrotliTrung bìnhTốt nhất, tối ưu tài nguyên tĩnh
    Hỗ trợ trình duyệtChưa phổ biến trong HTTP/HTTPSHỗ trợ rộng trên mọi trình duyệtHỗ trợ tốt trên trình duyệt hiện đại
    Dễ triển khai trên serverCần thêm cấu hình, có thể phức tạp nếu dùng cho HTTPĐơn giản, phổ biếnCần hỗ trợ cấu hình HTTPS, phức tạp hơn Gzip
    Ứng dụng phù hợpAPI, dữ liệu động, lưu trữ backendNén trang web đơn giảnTài nguyên tĩnh, tối ưu tốc độ tải trang

    Ưu điểm khi dùng Zstd cho WordPress

    • Nếu dự án WordPress có yêu cầu xử lý dữ liệu lớn hoặc API cần nén nhanh, Zstd giúp giảm tải CPU nhờ tốc độ nén và giải nén cao.
    • Giảm kích thước dữ liệu truyền tải khi sử dụng các plugin cache hoặc CDN hỗ trợ Zstd sẽ cải thiện hiệu suất.
    • Phù hợp với các hệ thống lưu trữ dữ liệu lớn, backup hoặc các dịch vụ chạy song song bên ngoài WordPress.

    Hạn chế khi dùng Zstd cho WordPress

    • Hiện tại, Zstd chưa được hỗ trợ rộng rãi cho nén HTTP/HTTPS trên trình duyệt, nên nếu bạn muốn nén trực tiếp nội dung web (CSS, JS, HTML), Gzip hoặc Brotli vẫn là lựa chọn ổn định hơn.
    • Việc cấu hình Zstd trên server web (Apache/Nginx) và CDN có thể phức tạp, cần kiểm tra kỹ hỗ trợ từ nhà cung cấp hosting hoặc dịch vụ CDN.

    Khuyến nghị

    • Nếu mục tiêu chính là nén dữ liệu động trong backend, API hoặc lưu trữ, Zstd là lựa chọn tốt nhờ hiệu suất cao.
    • Nếu mục tiêu là nén nội dung web gửi đến trình duyệt, Gzip hoặc Brotli vẫn là chuẩn đáng tin cậy hơn do tương thích rộng và dễ triển khai.
    • Có thể kết hợp: dùng Brotli/Gzip cho nội dung tĩnh trên web, còn Zstd dùng trong các phần backend xử lý dữ liệu lớn.

    Zstd được tích hợp sẵn trong Cloudflare CDN – sử dụng Compression Rules!

    Zstd (Zstandard) là thuật toán nén dữ liệu hiện đại, nhanh và hiệu quả, giúp tối ưu băng thông và tăng tốc độ tải trang web. Hiện nay, Zstd đã được tích hợp sẵn trong dịch vụ Cloudflare CDN, áp dụng cho cả gói miễn phí và bản thu phí. Việc sử dụng Zstd trong Cloudflare giúp giảm kích thước dữ liệu truyền tải, từ đó cải thiện trải nghiệm người dùng với thời gian tải trang nhanh hơn và tiết kiệm chi phí băng thông đáng kể.

    Zstandard - Giải pháp nén dữ liệu thay thế Gzip và Brotli 
    Zstandard – Giải pháp nén dữ liệu thay thế Gzip và Brotli 

    Bạn có thể bật Zstd trong phần Rules của Cloudflare như hình dưới. Rất đơn giản!

    Zstandard - Giải pháp nén dữ liệu thay thế Gzip và Brotli 
    Zstandard – Giải pháp nén dữ liệu thay thế Gzip và Brotli 

    Nhiều nhà cung cấp CDN như FlyingCDN, dựa trên nền tảng Cloudflare Enterprise, cũng hỗ trợ nén Zstd để mang lại hiệu suất vượt trội cho website. Việc tích hợp Zstd trong Cloudflare CDN là bước tiến quan trọng giúp các website tối ưu hóa tài nguyên, nâng cao tốc độ truy cập và giữ chân khách hàng hiệu quả hơn. Nếu bạn đang tìm kiếm giải pháp CDN mạnh mẽ, hãy cân nhắc sử dụng Cloudflare với nén Zstd để tận hưởng lợi ích về tốc độ và tiết kiệm chi phí vận hành. Đây là xu hướng phát triển tất yếu trong việc tối ưu hóa nội dung trên Internet hiện nay.

    Hướng dẫn cài đặt Zstd trên máy chủ LINUX

    Zstd (Zstandard) là công cụ nén dữ liệu hiệu quả, được sử dụng phổ biến trên các máy chủ Linux để tăng tốc độ nén và giảm dung lượng lưu trữ. Để cài đặt Zstd trên máy chủ Linux, bạn thực hiện các bước sau:

    • Cập nhật hệ thống
      Mở terminal, chạy lệnh:
    sudo apt update && sudo apt upgrade -y
    • Cài đặt Zstd
      Chạy lệnh:
    sudo apt install zstd -y

    Đối với CentOS hoặc RHEL, dùng:

    sudo yum install epel-release -y
    sudo yum install zstd -y
    • Kiểm tra phiên bản
      Xác nhận Zstd đã được cài đặt bằng lệnh:
    zstd --version
    • Sử dụng Zstd
      Nén file:
    zstd filename

    Giải nén file:

    unzstd filename.zst

    Việc cài đặt Zstd giúp máy chủ Linux tối ưu dung lượng lưu trữ và nâng cao hiệu suất nén dữ liệu nhanh chóng, phù hợp cho các hệ thống lớn. Hãy đảm bảo cập nhật thường xuyên để sử dụng phiên bản mới nhất của Zstd.

    Lời kết

    Zstandard (Zstd) ngày càng được ưa chuộng như giải pháp nén dữ liệu hiện đại, nhanh và hiệu quả, thay thế cho các thuật toán truyền thống như Gzip và Brotli. Với khả năng nén đa cấp độ, Zstd giúp cân bằng giữa tốc độ nén và tỷ lệ nén, mang lại hiệu suất cao trong lưu trữ và truyền tải dữ liệu. Đặc biệt, Zstd có tốc độ nén và giải nén nhanh vượt trội, phù hợp với các ứng dụng xử lý dữ liệu lớn hoặc yêu cầu thời gian thực.

    So với Gzip, Zstd có tỷ lệ nén tốt hơn và tốc độ nhanh hơn, giúp tiết kiệm băng thông và giảm chi phí lưu trữ. Trong khi đó, Brotli thường ưu tiên tối ưu tài nguyên tĩnh trên web nhưng tốc độ chậm hơn. Zstd cũng được hỗ trợ trên nhiều nền tảng backend, lưu trữ đám mây và CDN như Cloudflare, giúp nâng cao hiệu quả vận hành website.

    Đối với các dự án WordPress hoặc hệ thống API, Zstd là lựa chọn lý tưởng nhờ tính năng nén nhanh và hiệu quả. Tuy nhiên, do hạn chế về hỗ trợ trình duyệt, nên kết hợp Zstd với Gzip hoặc Brotli để tối ưu hóa cả nội dung động và tĩnh. Việc triển khai Zstd đúng cách sẽ giúp tăng tốc độ tải trang, giảm chi phí băng thông và cải thiện trải nghiệm người dùng toàn diện.

  • Take a 3D tour through a Microsoft datacenter?

    Take a 3D tour through a Microsoft datacenter?

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente, minima corrupti dolores necessitatibus suscipit accusantium dignissimos culpa cumque.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    It is a long established fact

    It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters.

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Typography should be easy

    So that’s a header for you — with any luck if we’ve done our job correctly that will look pretty reasonable.

    Something a wise person once told me about typography is:

    Typography is pretty important if you don’t want your stuff to look like trash. Make it good then it won’t be bad.

    It’s probably important that images look okay here by default as well:

    What to expect from here on out

    What follows from here is just a bunch of absolute nonsense I’ve written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like bold text, unordered lists, ordered lists, code blocks, block quotes, and even italics.

    It’s important to cover all of these use cases for a few reasons:

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Now we’re going to try out another header style

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente

    Now I’m going to show you an example of an unordered list to make sure that looks good, too:

    • So here is the first item in this list.
    • In this example we’re keeping the items short.
    • Later, we’ll use longer, more complex list items.

    And that’s the end of this section.

    Code should look okay by default.

    I think most people are going to use highlight.js or Prism or something if they want to style their code blocks but it wouldn’t hurt to make them look okay out of the box, even with no syntax highlighting.

    What I’ve written here is probably long enough, but adding this final sentence can’t hurt.

    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(element, document.getElementById('root'));
    } 

    Hopefully that looks good enough to you.

    There are other elements we need to style

    I almost forgot to mention links, like this link to the Tailwind CSS website. We almost made them blue but that’s so yesterday, so we went with dark gray, feels edgier.

    We even included table styles, check it out:

    WrestlerOriginFinisher
    Bret “The Hitman” HartCalgary, ABSharpshooter
    Stone Cold Steve AustinAustin, TXStone Cold Stunner
    Randy SavageSarasota, FLElbow Drop
    VaderBoulder, COVader Bomb
    Razor RamonChuluota, FLRazor’s Edge

    We also need to make sure inline code looks good, like if I wanted to talk about <span> elements or tell you the good news about @tailwindcss/typography.

    We still need to think about stacked headings though.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s make sure we don’t screw that up h4 elements, either.

    Phew, with any luck we have styled the headings above this text and they look pretty good.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s add a closing paragraph.

    Let’s add a closing paragraph here so things end with a decently sized block of text. I can’t explain why I want things to end that way but I have to assume it’s because I think things will look weird or unbalanced if there is a heading too close to the end of the document.

  • How architects visualize design for world’s biggest airport

    How architects visualize design for world’s biggest airport

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente, minima corrupti dolores necessitatibus suscipit accusantium dignissimos culpa cumque.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    It is a long established fact

    It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters.

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Typography should be easy

    So that’s a header for you — with any luck if we’ve done our job correctly that will look pretty reasonable.

    Something a wise person once told me about typography is:

    Typography is pretty important if you don’t want your stuff to look like trash. Make it good then it won’t be bad.

    It’s probably important that images look okay here by default as well:

    What to expect from here on out

    What follows from here is just a bunch of absolute nonsense I’ve written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like bold text, unordered lists, ordered lists, code blocks, block quotes, and even italics.

    It’s important to cover all of these use cases for a few reasons:

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Now we’re going to try out another header style

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente

    Now I’m going to show you an example of an unordered list to make sure that looks good, too:

    • So here is the first item in this list.
    • In this example we’re keeping the items short.
    • Later, we’ll use longer, more complex list items.

    And that’s the end of this section.

    Code should look okay by default.

    I think most people are going to use highlight.js or Prism or something if they want to style their code blocks but it wouldn’t hurt to make them look okay out of the box, even with no syntax highlighting.

    What I’ve written here is probably long enough, but adding this final sentence can’t hurt.

    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(element, document.getElementById('root'));
    } 

    Hopefully that looks good enough to you.

    There are other elements we need to style

    I almost forgot to mention links, like this link to the Tailwind CSS website. We almost made them blue but that’s so yesterday, so we went with dark gray, feels edgier.

    We even included table styles, check it out:

    WrestlerOriginFinisher
    Bret “The Hitman” HartCalgary, ABSharpshooter
    Stone Cold Steve AustinAustin, TXStone Cold Stunner
    Randy SavageSarasota, FLElbow Drop
    VaderBoulder, COVader Bomb
    Razor RamonChuluota, FLRazor’s Edge

    We also need to make sure inline code looks good, like if I wanted to talk about <span> elements or tell you the good news about @tailwindcss/typography.

    We still need to think about stacked headings though.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s make sure we don’t screw that up h4 elements, either.

    Phew, with any luck we have styled the headings above this text and they look pretty good.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s add a closing paragraph.

    Let’s add a closing paragraph here so things end with a decently sized block of text. I can’t explain why I want things to end that way but I have to assume it’s because I think things will look weird or unbalanced if there is a heading too close to the end of the document.

  • People who inspired us in 2019. Post video

    People who inspired us in 2019. Post video

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente, minima corrupti dolores necessitatibus suscipit accusantium dignissimos culpa cumque.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    It is a long established fact

    It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters.

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Typography should be easy

    So that’s a header for you — with any luck if we’ve done our job correctly that will look pretty reasonable.

    Something a wise person once told me about typography is:

    Typography is pretty important if you don’t want your stuff to look like trash. Make it good then it won’t be bad.

    It’s probably important that images look okay here by default as well:

    What to expect from here on out

    What follows from here is just a bunch of absolute nonsense I’ve written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like bold text, unordered lists, ordered lists, code blocks, block quotes, and even italics.

    It’s important to cover all of these use cases for a few reasons:

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Now we’re going to try out another header style

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente

    Now I’m going to show you an example of an unordered list to make sure that looks good, too:

    • So here is the first item in this list.
    • In this example we’re keeping the items short.
    • Later, we’ll use longer, more complex list items.

    And that’s the end of this section.

    Code should look okay by default.

    I think most people are going to use highlight.js or Prism or something if they want to style their code blocks but it wouldn’t hurt to make them look okay out of the box, even with no syntax highlighting.

    What I’ve written here is probably long enough, but adding this final sentence can’t hurt.

    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(element, document.getElementById('root'));
    } 

    Hopefully that looks good enough to you.

    There are other elements we need to style

    I almost forgot to mention links, like this link to the Tailwind CSS website. We almost made them blue but that’s so yesterday, so we went with dark gray, feels edgier.

    We even included table styles, check it out:

    WrestlerOriginFinisher
    Bret “The Hitman” HartCalgary, ABSharpshooter
    Stone Cold Steve AustinAustin, TXStone Cold Stunner
    Randy SavageSarasota, FLElbow Drop
    VaderBoulder, COVader Bomb
    Razor RamonChuluota, FLRazor’s Edge

    We also need to make sure inline code looks good, like if I wanted to talk about <span> elements or tell you the good news about @tailwindcss/typography.

    We still need to think about stacked headings though.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s make sure we don’t screw that up h4 elements, either.

    Phew, with any luck we have styled the headings above this text and they look pretty good.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s add a closing paragraph.

    Let’s add a closing paragraph here so things end with a decently sized block of text. I can’t explain why I want things to end that way but I have to assume it’s because I think things will look weird or unbalanced if there is a heading too close to the end of the document.

  • New tools for Black pregnant and postpartum mothers to save lives

    New tools for Black pregnant and postpartum mothers to save lives

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente, minima corrupti dolores necessitatibus suscipit accusantium dignissimos culpa cumque.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    It is a long established fact

    It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters.

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Typography should be easy

    So that’s a header for you — with any luck if we’ve done our job correctly that will look pretty reasonable.

    Something a wise person once told me about typography is:

    Typography is pretty important if you don’t want your stuff to look like trash. Make it good then it won’t be bad.

    It’s probably important that images look okay here by default as well:

    What to expect from here on out

    What follows from here is just a bunch of absolute nonsense I’ve written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like bold text, unordered lists, ordered lists, code blocks, block quotes, and even italics.

    It’s important to cover all of these use cases for a few reasons:

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Now we’re going to try out another header style

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente

    Now I’m going to show you an example of an unordered list to make sure that looks good, too:

    • So here is the first item in this list.
    • In this example we’re keeping the items short.
    • Later, we’ll use longer, more complex list items.

    And that’s the end of this section.

    Code should look okay by default.

    I think most people are going to use highlight.js or Prism or something if they want to style their code blocks but it wouldn’t hurt to make them look okay out of the box, even with no syntax highlighting.

    What I’ve written here is probably long enough, but adding this final sentence can’t hurt.

    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(element, document.getElementById('root'));
    } 

    Hopefully that looks good enough to you.

    There are other elements we need to style

    I almost forgot to mention links, like this link to the Tailwind CSS website. We almost made them blue but that’s so yesterday, so we went with dark gray, feels edgier.

    We even included table styles, check it out:

    WrestlerOriginFinisher
    Bret “The Hitman” HartCalgary, ABSharpshooter
    Stone Cold Steve AustinAustin, TXStone Cold Stunner
    Randy SavageSarasota, FLElbow Drop
    VaderBoulder, COVader Bomb
    Razor RamonChuluota, FLRazor’s Edge

    We also need to make sure inline code looks good, like if I wanted to talk about <span> elements or tell you the good news about @tailwindcss/typography.

    We still need to think about stacked headings though.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s make sure we don’t screw that up h4 elements, either.

    Phew, with any luck we have styled the headings above this text and they look pretty good.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s add a closing paragraph.

    Let’s add a closing paragraph here so things end with a decently sized block of text. I can’t explain why I want things to end that way but I have to assume it’s because I think things will look weird or unbalanced if there is a heading too close to the end of the document.

  • DIYer and TV host Trisha Hershberger’s journey through gaming keeps evolving

    DIYer and TV host Trisha Hershberger’s journey through gaming keeps evolving

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente, minima corrupti dolores necessitatibus suscipit accusantium dignissimos culpa cumque.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters.

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Typography should be easy

    So that’s a header for you — with any luck if we’ve done our job correctly that will look pretty reasonable.

    Something a wise person once told me about typography is:

    Typography is pretty important if you don’t want your stuff to look like trash. Make it good then it won’t be bad.

    It’s probably important that images look okay here by default as well:

    What to expect from here on out

    What follows from here is just a bunch of absolute nonsense I’ve written to dogfood the plugin itself. It includes every sensible typographic element I could think of, like bold text, unordered lists, ordered lists, code blocks, block quotes, and even italics.

    It’s important to cover all of these use cases for a few reasons:

    1. We want everything to look good out of the box.
    2. Really just the first reason, that’s the whole point of the plugin.
    3. Here’s a third pretend reason though a list with three items looks more realistic than a list with two items.

    Now we’re going to try out another header style.

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. Iure vel officiis ipsum placeat itaque neque dolorem modi perspiciatis dolor distinctio veritatis sapiente

    Now I’m going to show you an example of an unordered list to make sure that looks good, too:

    • So here is the first item in this list.
    • In this example we’re keeping the items short.
    • Later, we’ll use longer, more complex list items.

    And that’s the end of this section.

    Code should look okay by default.

    I think most people are going to use highlight.js or Prism or something if they want to style their code blocks but it wouldn’t hurt to make them look okay out of the box, even with no syntax highlighting.

    What I’ve written here is probably long enough, but adding this final sentence can’t hurt.

    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(element, document.getElementById('root'));
    } 

    Hopefully that looks good enough to you.

    There are other elements we need to style

    I almost forgot to mention links, like this link to the Tailwind CSS website. We almost made them blue but that’s so yesterday, so we went with dark gray, feels edgier.

    We even included table styles, check it out:

    WrestlerOriginFinisher
    Bret “The Hitman” HartCalgary, ABSharpshooter
    Stone Cold Steve AustinAustin, TXStone Cold Stunner
    Randy SavageSarasota, FLElbow Drop
    VaderBoulder, COVader Bomb
    Razor RamonChuluota, FLRazor’s Edge

    We also need to make sure inline code looks good, like if I wanted to talk about <span> elements or tell you the good news about @tailwindcss/typography.

    We still need to think about stacked headings though.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s make sure we don’t screw that up h4 elements, either.

    Phew, with any luck we have styled the headings above this text and they look pretty good.

    Ea nemo et dolorum quidem non est aut. Tempore delectus dolorum delectus omnis velit quia. Nobis eius atque occaeca

    Let’s add a closing paragraph here so things end with a decently sized block of text. I can’t explain why I want things to end that way but I have to assume it’s because I think things will look weird or unbalanced if there is a heading too close to the end of the document.