Archive for December 21, 2020

Monday, December 21, 2020

LG 27UK850-W: An Acceptable 27-inch Display

Josh Centers:

I decided to spend a bit more than I had hoped and buy the LG 27UK850-W, which usually sells for $450 but was on sale for $380. Even at full price, it’s $250 cheaper than the LG UltraFine 4K display and $850 less than the LG UltraFine 5K.

The LG 27UK850-W features a 27-inch IPS panel with a 3840-by-2160 resolution, which I calculate to be about 163 ppi. By comparison, the 21.5-inch iMac with Retina 4K display features 219 ppi, and the 27-inch iMac with Retina 5K display offers 218 ppi.


I like how the cables connect in the rear. Unlike my old Dell monitor, which awkwardly forced me to insert cables upward, the cables on the LG 27UK850-W plug straight into the back, making life much easier.


Upon close inspection, I noticed that text on it is ever so slightly fuzzy compared to the 27-inch iMac.


You may be wondering if the scaling affects text crispness. The first option (from left to right) makes text look huge. I couldn’t see any difference between the first and second options in terms of crispness. Text gets smaller as you go to the right, which might lead you to think that it will sharpen up, but in fact, the opposite happens: not only does it get smaller, it gets blurrier as well.


Zoom Executive Charged With Suppressing Calls

Department of Justice (via Hacker News):

According to the complaint, Jin served as Company-1’s primary liaison with PRC law enforcement and intelligence services. In that capacity, he regularly responded to requests from the PRC government for information and to terminate video meetings hosted on Company-1’s video communications platform. Part of Jin’s duties included providing information to the PRC government about Company-1’s users and meetings, and in some cases he provided information – such as Internet Protocol addresses, names and email addresses – of users located outside of the PRC. Jin was also responsible for proactively monitoring Company-1’s video communications platform for what the PRC government considers to be “illegal” meetings to discuss political and religious subjects unacceptable to the Chinese Communist Party (CCP) and the PRC government.

As alleged in the complaint, between January 2019 to the present, Jin and others conspired to use Company-1’s systems in the United States to censor the political and religious speech of individuals located in the United States and around the world at the direction and under the control of officials of the PRC government. Among other actions taken at the direction of the PRC government, Jin and others terminated at least four video meetings hosted on Company-1’s networks commemorating the thirty-first anniversary of the Tiananmen Square massacre, most of which were organized and attended by U.S.-based participants, such as dissidents who had participated in and survived the 1989 protests.

John Gruber:

How in the world can Zoom ever claim that calls are private and encrypted when they’ve clearly demonstrated the ability to monitor them, and abused that in patently offensive ways?

Just about everyone I know continues to use Zoom because it’s easy and works well.


FFmpeg Is 20 Years Old

FFmpeg (Hacker News):

Here’s to 20 more years of open source multimedia! 🎉


FFmpeg is a free and open-source software project consisting of a large suite of libraries and programs for handling video, audio, and other multimedia files and streams. At its core is the FFmpeg program itself, designed for command-line-based processing of video and audio files. It is widely used for format transcoding, basic editing (trimming and concatenation), video scaling, video post-production effects and standards compliance (SMPTE, ITU).

FFmpeg includes libavcodec, an audio/video codec library used by many commercial and free software products, libavformat (Lavf), an audio/video container mux and demux library, and the core ffmpeg command-line program for transcoding multimedia files.

FFmpeg is part of the workflow of hundreds of other software projects, and its libraries are a core part of software media players such as VLC, and has been included in core processing for YouTube and iTunes. Codecs for the encoding and/or decoding of most audio and video file formats is included, making it highly useful for the transcoding of common and uncommon media files into a single common format.


FFmpeg is a miraculous tool and I have relied on it for a couple decades now. Beyond the plethora of personal use-cases, it has enabled individuals and smaller companies to possess the same abilities as the bigger guys, who themselves are all pretty much using FFmpeg these days. The only folks who need to build/use alternatives are the platforms at the top of the market and/or with immense scaling needs who are truly pushing beyond the realm of FFmpeg’s practical abilities.

Ruby 3

Ruby (Hacker News):

Ruby 3.0 ships with rbs gem, which allows parsing and processing type definitions written in RBS.


Currently, TypeProf serves as a kind of type inference.

It reads plain (non-type-annotated) Ruby code, analyzes what methods are defined and how they are used, and generates a prototype of type signature in RBS format.


Ractor is an Actor-model like concurrent abstraction designed to provide a parallel execution feature without thread-safety concerns.


Fiber#scheduler is introduced for intercepting blocking operations. This allows for light-weight concurrency without changing existing code.

Update (2021-01-01): Ruby (Hacker News):

We are pleased to announce the release of Ruby 3.0.0.


The PHP Group (Hacker News, Slashdot):

PHP 8.0 comes with numerous improvements and new features such as:

  • Union Types
  • Named Arguments
  • Match Expressions
  • Attributes
  • Constructor Property Promotion
  • Nullsafe Operator
  • Weak Maps
  • Just In Time Compilation
  • And much much more…

Take a look at the PHP 8.0 Announcement Addendum for more information.

Omar Reiss:

In the first part of this report we’ll outline the changes in PHP 8 that are likely to significantly impact WordPress and other legacy codebases. In the second part of this report, we’ll try to provide a perspective on past, present and future challenges regarding WordPress and PHP compatibility.


One of the most important breaking changes in PHP 8 has to do with strict typing. User-defined functions in PHP already throw a TypeError. However, internal functions emitted warnings and returned null. PHP 8 makes this consistent and internal functions now also throw a TypeError. This will not only impact functions that already threw warnings prior to PHP 8, but also magic methods (which previously weren’t type checked) and functions that have had type declarations introduced. For this reason, it’s not possible to catch all issues that arise from this change by fixing the type warnings in PHP 7.4 environments.

S3 Strong Consistency

Amazon (via Tim Bray, Hacker News):

Amazon S3 now delivers strong read-after-write consistency automatically for all applications. Unlike other cloud providers, Amazon S3 delivers strong read-after-write consistency for any storage request, without changes to performance or availability, without sacrificing regional isolation for applications, and at no additional cost.

Jeff Barr:

One of the more interesting (and sometimes a bit confusing) aspects of S3 and other large-scale distributed systems is commonly known as eventual consistency. In a nutshell, after a call to an S3 API function such as PUT that stores or modifies data, there’s a small time window where the data has been accepted and durably stored, but not yet visible to all GET or LIST requests.


Effective immediately, all S3 GET, PUT, and LIST operations, as well as operations that change object tags, ACLs, or metadata, are now strongly consistent. What you write is what you will read, and the results of a LIST will be an accurate reflection of what’s in the bucket. This applies to all existing and new S3 objects, works in all regions, and is available to you at no extra charge! There’s no impact on performance, you can update an object hundreds of times per second if you’d like, and there are no global dependencies.

They don’t say how this works, but presumably the tradeoff is reduced availability, with the expected latency and error rate low enough that you don’t mind.


The most devious s3 consistency issue I encountered was that S3 bucket configs are actually stored in S3, and were not read-after-write consistent.

It was bad. In order to “update” a bucket config programmatically you need to read the entire existing config, make an update, and then PUT it back (overwriting what’s there). The problem is when you went to read the config it’s possibly 15 minutes old or more, and when you put it back you overwrite any changes that may not be consistent.