Shared posts

27 Dec 02:40

If this website has been helpful to you this year, please tell a friend.

by geoffreysteadman

If you have found any of the digital materials helpful in 2020, please consider telling a friend or colleague. This website and its commentaries rely on word of mouth to find new readers. Your reaching out to friends or colleagues–either privately or through social media–will help keep this website active well into 2021.

Thank you, and Happy New Year.

Update: There are several projects currently in the planning stage, but two commentaries, 10 of Seneca’s Moral Letters and Seneca’s De Brevitate Vitae, will be the first new editions to appear in late Spring 2021. These commentaries will include Pharr-formatted commentary and Ørberg-formatted Latin-only pages.

10 Dec 19:10

Clean up your life…

by engrishwebmaster

Life got you down? Toss it!

Photo courtesy of Jay Peterson.
Found in restaurant in Guangzhou, China.

26 Nov 23:04

Linguists

"Do you feel like the answer depends on whether you're currently in the hole, versus when you refer to the events later after you get out? Assuming you get out."
19 Nov 22:55

The Democrats Are About to Be in Shambles, for Years

28 Oct 00:25

Kanojo, Okarishimasu - Chapter 162

Group: Btooom Scan - Uploader: Shujin094 - Language: Spanish (LATAM)
10 Sep 16:00

Who Would've Thought Trump Would Be America's Most Pro-life President?

02 Sep 17:37

The Lockdown Has Gone From a Mistake to a Crime

03 Aug 16:03

Will the Left Pull Down Patton's Statues?

29 Jul 21:54

You Don't Stand a Chance in Dems' Kangaroo Court

12 Jun 19:09

Dynamic Entropy

Despite years of effort by my physics professors to normalize it, deep down I remain convinced that 'dynamical' is not really a word.
08 Jun 16:17

Bruce Momjian: Safety Systems Can Decrease Safety

What is the purpose of safety systems? To make things safer? To make them appear safer? To satisfy some external requirement? The purpose of safety systems is not always clear, but even for safety systems whose sole purpose is to increase safety — do they always succeed in increasing safety? The simple answer is "no". Here are three examples:

In all three cases, safety systems did not prevent disasters — they caused them. Safety systems are often very useful, and the modern world could not operate with them. However, they also add complexity, and that added complexity can introduce failure modes that did not exist without the safety systems.

So, where does that leave us? Safety systems are useful, but too many of them are bad? How many is too many? These are hard questions, but there are some guidelines:

  • How serious is the failure that the safety system is trying to prevent?
  • How likely is the failure that the safety system is trying to prevent?
  • How likely is the safety system to fail?
  • What impact will failure of the safety system have on the overall system?

Continue Reading »

08 May 17:05

A Virtual Tour Inside the Hayao Miyazaki’s Studio Ghibli Museum

by Ayun Halliday

Let us pray that organization expert Marie Kondo never comes within spitting distance of A Boy’s Room, part of the Studio Ghibli museum’s Where a Film is Born installation.

It’s not likely that every single item in the massive (and no doubt well dusted) collection of books, postcards, hand tools, pictures, figurines, and other assorted tchotchkes pictured above sparks joy, but the suggestion is that any one of them might prove the gateway to a fantastical tale, such as those spun by the museum’s executive director, master animator Hayao Miyazaki:

The room seems to belong to someone who was sketching at the desk just a few minutes ago. The room is filled with books and toys. The walls are all covered with illustrations and sketches. Hanging from the ceiling are a model of an airplane and a model of a Pteranodon. It's a place where the owner of the room has stored his favorite things. This room provides lots of inspiration for what will go on to the blank piece of paper on the desk to become the origin of an actual film.

The Museum, which announced it would delay its reopening out of ongoing concerns related to social distancing during the COVID-19 crisis, recently shared some brief video tours of the Miyazaki-designed space, perhaps all the more magical for being empty.




One lucky viewer, who had trekked to the Tokyo suburb of Mitaka for an in-person visit, recalled the experience of actually being in A Boy’s Room:

Open up the drawers in this room, take the books off shelves to look at them, touch things, look through trunks—you might find little secrets to be discovered. One time I took an art book from the shelf and one of the employees came over to me. I was expecting to get reprimanded, but instead she kindly guided me over to a couch so that I could read the book. Miyazaki took care to design the space to be friendly to the exploratory nature of children, making sure that they could play unobstructed. It's one of the reasons why you aren't allowed to take photos inside—he didn't want parents interrupting their experience to pose for photos they could care less about.

That philosophy is enacted throughout the museum. Kids can climb all over a life-size plush recreation of My Neighbor Totoro’s cat bus, but would-be Instagrammers are S.O.L.

A peek at the Space of Wonder room reveals Thumbelina-sized characters from My Neighbor TotoroNausicaä of the Valley of the Wind, and Kiki's Delivery Service frolicking in a fresco of fruit, flowers, and vines.

The architectural elements are a particular treat, and suggest that there’s serious bank to be made, should Miyazaki ever consider extending the brand into a theme park-style hotel. (Something tells us he won’t.)

Once having seen a photo essay featuring some of the fancy refreshments others have enjoyed there, the tour of the empty Straw Hat Café does underwhelm a bit. Those cute little plates are just calling out for a slice of strawberry shortcake…

We’re unsure if museum staffers will be releasing more videos during their downtime, though we’re hopeful, especially since several in-person visitors have noted that the museum’s toilets are pretty noteworthy.

That said we’d happily settle for some of the short films that screen in the museum’s Saturn Theater.

You can follow the Museum’s YouTube channel just in case.

Meanwhile, here is Miyazaki’s manifesto detailing the kind of museum he wanted to make, right down to the café and the gift shop:

A museum that is interesting and which relaxes the soul
A museum where much can be discovered
A museum based on a clear and consistent philosophy
A museum where those seeking enjoyment can enjoy, those seeking to ponder can ponder, and those seeking to feel can feel
A museum that makes you feel more enriched when you leave than when you entered!

To make such a museum, the building must be...
Put together as if it were a film
Not arrogant, magnificent, flamboyant, or suffocating
Quality space where people can feel at home, especially when it's not crowded
A building that has a warm feel and touch
A building where the breeze and sunlight can freely flow through

The museum must be run in such a way that...
Small children are treated as if they were grown-ups
Visitors with disabilities are accommodated as much as possible
The staff can be confident and proud of their work
Visitors are not controlled with predetermined courses and fixed directions
It is suffused with ideas and new challenges so that the exhibits do not get dusty or old, and that investments are made to realize that goal

The displays will be...
Not only for the benefit of people who are already fans of Studio Ghibli
Not a procession of artwork from past Ghibli films as if it were "a museum of the past"
A place where visitors can enjoy by just looking, can understand the artists' spirits, and can gain new insights into animation

Original works and pictures will be made to be exhibited at the museum
A project room and an exhibit room will be made, showing movement and life
(Original short films will be produced to be released in the museum!)
Ghibli's past films will be probed for understanding at a deeper level

The café will be...
An important place for relaxation and enjoyment
A place that doesn't underestimate the difficulties of running a museum café
A good café with a style all its own where running a café is taken seriously and done right

The museum shop will be...
Well-prepared and well-presented for the sake of the visitors and running the museum
Not a bargain shop that attaches importance only to the amount of sales
A shop that continues to strive to be a better shop
Where original items made only for the museum are found

The museum's relation to the park is...
Not just about caring for the plants and surrounding greenery but also planning for how things can improve ten years into the future
Seeking a way of being and running the museum so that the surrounding park will become even lusher and better, which will in turn make the museum better as well!

This is what I expect the museum to be, and therefore I will find a way to do it.

This is the kind of museum I don't want to make!
A pretentious museum
An arrogant museum
A museum that treats its contents as if they were more important than people
A museum that displays uninteresting works as if they were significant

Related Content: 

Studio Ghibli Releases Tantalizing Concept Art for Its New Theme Park, Opening in Japan in 2022

Hayao Miyazaki’s Studio Ghibli Releases Free Backgrounds for Virtual Meetings: Princess Mononoke, Spirited Away & More

For the First Time, Studio Ghibli’s Entire Catalog Will Soon Be Available for Digital Purchase

Ayun Halliday is an author, illustrator, theater maker and Chief Primatologist of the East Village Inky zine.  Here latest project is a series of free downloadable posters, encouraging citizens to wear masks in public and wear them properly. Follow her @AyunHalliday.

A Virtual Tour Inside the Hayao Miyazaki’s Studio Ghibli Museum is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

17 Apr 01:32

GNU Guix: GNU Guix 1.1.0 released

We are pleased to announce the release of GNU Guix version 1.1.0!

The release comes with ISO-9660 installation images, a virtual machine image, and with tarballs to install the package manager on top of your GNU/Linux distro, either from source or from binaries. Guix users can update by running guix pull.

If you wonder what installing Guix System is like, this video gives an overview of the guided installation process:

Video of the system installation process.

There are more “getting started” videos.

It’s been 11 months since the previous release, during which 201 people contributed code and packages. This is a long time for a release, which is in part due to the fact that bug fixes and new features are continuously delivered to our users via guix pull. However, a number of improvements, in particular in the installer, will greatly improve the experience of first-time users.

It’s hard to summarize more than 14,000 commits! Here are some highlights as far as tooling is concerned:

On the distro side:

  • The big change is that the package dependency graph is rooted in a reduced set of “binary seeds”—a huge step towards a fully auditable bootstrap. There’s more to come soon!
  • The graphical installer for Guix System benefited from many bug fixes and improvements. Following the bugs found in 1.0.0, we developed an automated testing framework for the installer itself. Continuous integration runs automated tests of the installer for different configurations (encrypted root, non-encrypted root, with or without a desktop environment, etc.).
  • 3,514 packages were added, for a total of more than 13K packages. 3,368 packages were upgraded. The distribution comes with GNU libc 2.29, GCC 9.3, GNOME 3.32, MATE 1.24.0, Xfce 4.14.0, Linux-libre 5.4.28, and LibreOffice 6.4.2.2 to name a few.
  • 19 new services were added, notably providing support for running NFS servers, configuring the nftables firewall, or even a high-level Web service like Patchwork.
  • Build systems for Node, Julia, and Qt were added, making it easier to write package definitions for these ecosystems. In addition there is a new copy-build-system that does what you might expect.

At the programming interface level and under the hood, many things changed as well, notably:

  • The new with-build-handler form allows us to better support dynamic dependencies as introduced by grafts. More on that in a future post, but suffice to say that it fixes a longstanding user interface and performance issue.
  • The remote-eval procedure in (guix remote) supports remote execution of Scheme code as G-expressions after having first built and deployed any code it relies on. This capability was key to allowing code sharing between guix deploy, which operates on remote hosts, and guix system reconfigure. Similarly, there’s a new eval/container procedure to run code in an automatically-provisioned container.
  • The new lower-gexp procedure returns a low-level intermediate representation of a G-expression. remote-eval, eval/container, and gexp->derivation are expressed in terms of lower-gexp.
  • The with-parameters form allows you, for instance, to pin objects such as packages to a specific system or cross-compilation target.
  • Performance was improved for common low-level operations.

That’s a long list! The NEWS file lists additional noteworthy changes and bug fixes you may be interested in.

Enjoy!

About GNU Guix

GNU Guix is a transactional package manager and an advanced distribution of the GNU system that respects user freedom. Guix can be used on top of any system running the kernel Linux, or it can be used as a standalone operating system distribution for i686, x86_64, ARMv7, and AArch64 machines.

In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. When used as a standalone GNU/Linux distribution, Guix offers a declarative, stateless approach to operating system configuration management. Guix is highly customizable and hackable through Guile programming interfaces and extensions to the Scheme language.

01 Apr 18:13

Pharr-formatted Augustine’s Confessions Bk 1 now available as a pdf

by geoffreysteadman

J. S. has written a Pharr-formatted commentary for Book 1 and graciously made the book available as a free download here on his website. A revised edition will appear in paperback  in the next month or two.

The book is well worth a look–and a much-needed redirection for those of us consumed by the daily news cycle.

Xenophon’s Anabasis Book 3 is also available in beta on the Xenophon page.

30 Mar 19:19

Fedora's Git forge decision

by corbet
Back in February, LWN reported on the process of gathering requirements for a Git forge system. That process then went relatively quiet until March 28, when the posting of a "CPE Weekly" news summary included, under "other updates", a note that the decision has been made. It appears that the project will be pushed toward a not-fully-free version of the GitLab offering. It is fair to say that this decision — or how it was presented — was not met with universal acclaim in the Fedora community; see this response from Neal Gompa for more.
23 Mar 22:19

Free Online Drawing Lessons for Kids, Led by Favorite Artists & Illustrators

by Ayun Halliday

When I became the Kennedy Center Education Artist-in-Residence, I didn’t realize the most impactful word in that title would be "Residence." —illustrator Mo Willems

Even as schools regroup and online instruction gathers steam, the scramble continues to keep cooped-up kids engaged and happy.

These COVID-19-prompted online drawing lessons and activities might not hold much appeal for the single-minded sports nut or the junior Feynman who scoffs at the transformative properties of art, but for the art-y kid, or fans of certain children’s illustrators, these are an excellent diversion.

Mo Willems, author of Knuffle Bunny and the Kennedy Center’s first Education Artist-in-Residence, is opening his home studio every weekday at 1pm EST for approximately twenty minutes worth of LUNCHDOODLES. Episode 5, finds him using a fat marker to doodle a Candyland-ish game board (sans treacle).




Once the design is complete, he rolls the dice to advance both his piece and that of his home viewer. A 5 lands him on the crowd-pleasing directive “fart.” Clearly the online instructor enjoys certain liberties the classroom teacher would be ill-advised to attempt.

Check out the full playlist on the Kennedy Center’s YouTube channel and download activity pages for each episode here.

#MoLunchDoodles

If the daily LUNCHDOODLES leaves ‘em wanting more, there’s just enough time for a quick pee and snack break before Lunch Lady’s Jarrett J. Krosoczka takes over with Draw Everyday with JJK, a basic illustration lesson every weekday at 2pm EST. These are a bit more nitty gritty, as JJK, the kid who loved to draw and grew up to be an artist, shares practical tips on penciling, inking, and drawing faces. Pro tip: resistant Star Wars fans will likely be hooked by the first episode’s Yoda, a character Krosoczka is well versed in as the author and illustrator of the Star Wars Jedi Academy series.

Find the complete playlist here.

Illustrator Carson Ellis eschews video lessons to host a Quarantine Art Club on her Instagram page. Her most recent assignment is cartography based challenge, with helpful tips for creating an “impactful page turn” for those who wish to share their creations on Instagram:

DRAW A MAP: When we think of treasure maps, we think of sea monsters, islands with palm trees, pirate ships, anthropomorphic clouds blowing gales upon white-capped seas. YOUR map can be of anywhere: an enchanted wood, a dystopian suburb, your backyard, your apartment that has never felt so small, all of the above, none of the above. Or your map can be a traditional treasure map leading to a pirate’s hoard. It’s totally up to you. Three things that you MUST include are: a compass rose (very important—look this up if you don’t know what it is), the name of the place you are mapping, and a red X.

DRAW THE TREASURE: The first part of this assignment is to draw a map with a red X to mark the location of hidden treasure. The second part of this assignment is to draw the treasure. I don’t know what the treasure is. Only you know what the treasure is. Draw it on a separate piece of paper from the map.

BONUS POINTS: If you’re going to post this on instagram, I recommend formatting it with two images. Post the map first, then the treasure which the viewer will swipe to see. This will create what we in the kids book world call AN IMPACTFUL PAGE TURN. That’s the thing that happens when you’re reading a picture book and you turn the page to discover something funny or surprising. It’s kind of hard to explain, but you know a good page turn when you’ve experienced one.

#QuarantineArtClub

Wendy McNaughton, who specializes in drawn journalism, also likes the Instagram platform, hosting a live Draw Together session every school day, from 10-10.30 am PST. Her approach is a bit more freeform, with impromptu dance parties, special guests, and field trips to the backyard.

Her How to Watch Draw Together highlight is a hilarious crash course in Instagram Live, scrawled in magic marker by someone who’s possibly only now just getting a grip on the platform. Don’t see it? Maybe it’s the weekend, or “maybe ask a millennial for help?”

#DrawTogether

And bless E.B. Goodale, an illustrator, first time author and mother of a young son, who having counteracted the heartbreak of a cancelled book tour with a hastily launched week of daily Instagram Live Toddler Drawing Club meetings, made the decision to scale back to just Tuesdays and Thursdays:

It was fun doing it everyday but turned out to be a bit too much to handle given our family’s new schedule. We’re all figuring it out, right? I hope you will continue to join me in our unchartered territory next week as we draw to stay sane. Tune in live to make requests or watch it later and follow along at home.

(Her How to Draw a Cat tutorial, above, was likely intended for in-person bookstore events relating to her just published Under the Lilacs…)

#drawingwithtoddlers

Our personal favorite is Stickies Art School, whose online children’s classes are led not by multi-disciplinary artist Nina Katchadourian, whose Facebook page serves as the online institution's home, but rather her senior tuxedo cat, Stickies.

Stickies, who comes to the gig with an impressive command of English, honed no doubt by frequent appearances on Katchadourian’s Instagram page, affects a diffident air to dole out assignments, the latest of which is above.

He allows his students ample time to complete their tasksthus far all portraits of himself. The next one, to render Stickies in a costume of the artist’s choice, is due Wednesday by 9am, Berlin time.

Stickies also offers positive feedback on submitted work in delightful follow up videos, a responsibility that Katchadourian takes seriously:

There have been so many conversations at NYU Gallatin where I'm on the faculty about online teaching, how to do it, how to think of a studio course in this new form, etc, and I think perhaps that crossed over with the desire to cheer up some people with kids, many of whom are already Stickies fans, or so I have been told. 

His child proteges are no doubt unaware that Stickies looked ready to leave the planet several weeks ago, a fact whose import will resonate with many pet owners in these dark days:

Maybe a third element was just being so glad he is still around, that having him actively "out there" feels good and life-affirming at the moment.

Stickies Art School is marvelous fun for adults to audit from afar, via Katchadourian’s public Facebook posts. If you are a parent whose child would like to participate, send her a friend request and mention that you’re doing so on behalf of your child artist.

Searching on the hashtag #artteachersofinstagram will yield many more resources.

Art of Education University has singled out 12 accounts to get you started, as well as lots of helpful information for classroom art teachers who are figuring out how to teach effectively online.

Related Content:

Learn to Draw Butts with Just Five Simple Lines

Cartoonist Lynda Barry Teaches You How to Draw

How to Draw the Human Face & Head: A Free 3-Hour Tutorial

Ayun Halliday is an author, illustrator, theater maker and Chief Primatologist of the East Village Inky zine. Given the cancellation of everything, she’s taken to Instagram to document her social distance strolls through New York City’s Central Park, using the hashtag #queenoftheapeswalk  Follow her @AyunHalliday.

Free Online Drawing Lessons for Kids, Led by Favorite Artists & Illustrators is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

16 Mar 18:34

Bruce Momjian: Database Interoperability at Risk

This article parallels Oracle's copying of the SQL syntax from IBM in the late 1970's with Google's copying of the Java API. It also explains the possible impact of the current case soon to be decided by the US Supreme Court.

One thing it does not fully cover is the impact on SQL-level interoperability between databases. If Oracle can claim the Java API as copyrightable, the SQL language could be considered copyrightable, allowing IBM to sue all relational database vendors and users for copyright infringement. It might also allow database vendors to sue competitors when their SQL-level features are copied, requiring either huge payments or the removal of interoperability syntax.

The Postgres copyright is open, so any database vendor copying Postgres syntax is fine, but Postgres copying the syntax of other databases could be problematic. Relational database interoperability has been of huge benefit to data management, and this single case could call that into question.

29 Feb 02:18

Security scandal around WhatsApp shows the need for decentralised messengers and digital sovereignty

Security scandal around WhatsApp shows the need for decentralised messengers and digital sovereignty

The recent security scandal around WhatsApp and access to the content of private groups shows that there is an urgent need for action with regard to secure communication.

Links to private chat groups in the proprietary WhatsApp messenger can be used to show the communication and private data of group members, even if you are not a member. The links could be found on various search engines. Even if they are removed from search results, links still work and give access to private group communication. Among these groups are also administrations like civil servants of the Indonesian Ministry of Finance. This case shows again that digital sovereignty is crucial for states and administrations. The security breach was first reported by Deutsche Welle.

In order to establish trustworthy and secure communication, governments need to strengthen interoperable Free Software solutions using Open Standards and enable decentralisation. This helps administrations as well as individuals to protect their privacy and empowers them to have control of the technology they use. The software is already in place and was used by most of the internet users before Google and Facebook joined the market: XMPP! This open protocol, also known as Jabber, has been developed by the Free Software community since 1999. Thanks to Open Standards it is possible to communicate with people who use a completely different client software and XMPP server. You are even able to communicate with other services like ICQ or AIM - some might remember. XMPP has also been used by tech enterprises like Facebook and Google for their chat systems, but both eventually switched to isolated proprietary solutions, so XMPP has been forgotten by many users.

Still, there are many XMPP servers in use and - as the recent scandal around WhatsApp shows - it should be considered as an alternative by users nowadays. But of course there has also been a development in the field of Free Software and Open Standard messengers in the last decades. For instance the Matrix protocol is a widely recognised and respected standard for secure and decentralised communication. This is proven by the fact that it is being used by large Free Software communities like Mozilla, KDE, but also in the whole French administration or Germany's armed forces.

The Free Software Foundation Europe therefore asks governments to use interoperable, decentralised Free Software messenger solutions and also provide funds for security programmes like bug bounties around these projects. Individuals are advised to change their messenger to a Free Software one.

The FSFE also started an initiative called "Public Money, Public Code!", requiring that publicly financed software developed for the public sector be made publicly available under a Free and Open Source Software licence. If it is public money, it should be public code as well. The campaign is supported by administrations like the city of Barcelona, more than 180 NGOs and 27.000 individuals. You can find more information on publiccode.eu.

For users of Android mobile phones, the Free Software Foundation Europe started the "Free Your Android" campaign. It helps users to regain control of their data and Android device by proprietary components and eventually the complete operating system with Free Software. The FSFE collects information about running an Android system as free as possible and coordinates efforts in this area.

Support FSFE

23 Jan 22:34

Ἡ Ἑλληνικὴ γλῶσσα καθ᾿ αὑτὴν φωτιζομένη

by Ramon Torné Teixidó
A principis de setembre de l'any passat llegíem una entrada al blog de Seumas Macdonald el qual ens assabentava d'aquest projecte, paral·lel del llatí Lingua Latina per se illustrata.

En aquell moment, a inici d'un nou curs, certament podria semblar un tant atrevit posar-se en mans del nou mètode, per bé que som prou conscients de la importància i el gran ajut que comporta posar-se en mans de textos que segueixen un fil conductor, un context, com els ja coneguts Athenaze, Alexandros o A Greek boy at home. Amb tot, LGPSI conté alguns avantatges i característiques que m'agradaria enumerar breument:

Només afegiria que sembla oportú reforçar el paquet d'exercicis amb propostes d'etimologia. Sigui com sigui, caldrà estar atents als progressos de LGPSI durant els propers mesos i anys. Així ho espero!
01 Nov 11:49

Domestic na Kanojo - Volume 26, Chapter 249

Group: Yandere Scans - Uploader: Kastos - Language: Portuguese (Br)
26 Oct 14:18

Hong Kong's Oppression Might Be Ours Too

Britain took control of Hong Kong from China by threat of force in 1841. In 1997 the United Kingdom returned control of Hong Kong to China, to be governed independently as "one country, two systems" until 2047.

While there have been protests in previous years that the Chinese government is eroding the "one country, two systems" policy by increasing its control over Hong Kong, this year's protests (summary) have been even more energetic.

While this is a serious issue for Hong Kong and the Chinese government, it also affects others. The Chinese government has pressured Chinese companies to economically punish individuals and companies that are supportive of the Hong Kong protests, even if they are not Chinese nationals or companies. The most dramatic punishment was related to a tweet by an NBA employee supporting the Hong Kong protesters. NBA fans were so upset at China's pressure that they are now expressing support for Hong Kong at basketball games.

Continue Reading »

04 Oct 19:50

Trump's Real Liability Isn't Impeachment: It's China and the Economy

by David P. Goldman
Below is an open letter to Larry Kudlow I posted here on July 19, 2018. I warned that Trump's trade war would backfire. Today we heard that the National Association of Purchasing Managers' industrial production index had fallen to the lowest level since June of 2009. We are in a manufacturing recession, according to the Federal Reserve. Factory output is contracting. Trump won in 2016 by carrying key manufacturing states like Pennsylvania, Ohio, Michigan, and Wisconson. This blunder could lose him the election. This is MUCH more dangerous than the impeachment masquerade. Americans really don't care about Ukraine but they do care about their jobs. The president is trying to deflect blame onto the Federal Reserve, but he's not fooling anybody.
04 Oct 19:38

PostgreSQL 12 Released!

The PostgreSQL Global Development Group today announced the release of PostgreSQL 12, the latest version of the world's most advanced open source database.

PostgreSQL 12 enhancements include notable improvements to query performance, particularly over larger data sets, and overall space utilization. This release provides application developers with new capabilities such as SQL/JSON path expression support, optimizations for how common table expression (WITH) queries are executed, and generated columns. The PostgreSQL community continues to support the extensibility and robustness of PostgreSQL, with further additions to internationalization, authentication, and providing easier ways to administrate PostgreSQL. This release also introduces the pluggable table storage interface, which allows developers to create their own methods for storing data.

"The development community behind PostgreSQL contributed features for PostgreSQL 12 that offer performance and space management gains that our users can achieve with minimal effort, as well as improvements in enterprise authentication, administration functionality, and SQL/JSON support." said Dave Page, a core team member of the PostgreSQL Global Development Group. "This release continues the trend of making it easier to manage database workloads large and small while building on PostgreSQL's reputation of flexibility, reliability and stability in production environments."

PostgreSQL benefits from over 20 years of open source development and has become the preferred open source relational database for organizations of all sizes. The project continues to receive recognition across the industry, including being featured for the second year in a row as the "DBMS of the Year" in 2018 by DB-Engines and receiving the "Lifetime Achievement" open source award at OSCON 2019.

Overall Performance Improvements

PostgreSQL 12 provides significant performance and maintenance enhancements to its indexing system and to partitioning.

B-tree Indexes, the standard type of indexing in PostgreSQL, have been optimized in PostgreSQL 12 to better handle workloads where the indexes are frequently modified. Using a fair use implementation of the TPC-C benchmark, PostgreSQL 12 demonstrated on average a 40% reduction in space utilization and an overall gain in query performance.

Queries on partitioned tables have also seen demonstrable improvements, particularly for tables with thousands of partitions that only need to retrieve data from a limited subset. PostgreSQL 12 also improves the performance of adding data to partitioned tables with INSERT and COPY, and includes the ability to attach a new partition to a table without blocking queries.

There are additional enhancements to indexing in PostgreSQL 12 that affect overall performance, including lower overhead in write-ahead log generation for the GiST, GIN, and SP-GiST index types, the ability to create covering indexes (the INCLUDE clause) on GiST indexes, the ability to perform K-nearest neighbor queries with the distance operator (<->) using SP-GiST indexes, and CREATE STATISTICS now supporting most-common value (MCV) statistics to help generate better query plans when using columns that are nonuniformly distributed.

Just-in-time (JIT) compilation using LLVM, introduced in PostgreSQL 11, is now enabled by default. JIT compilation can provide performance benefits to the execution of expressions in WHERE clauses, target lists, aggregates, and some internal operations, and is available if your PostgreSQL installation is compiled or packaged with LLVM.

Enhancements to SQL Conformance & Functionality

PostgreSQL is known for its conformance to the SQL standard - one reason why it was renamed from "POSTGRES" to "PostgreSQL" - and PostgreSQL 12 adds several features to continue its implementation of the SQL standard with enhanced functionality.

PostgreSQL 12 introduces the ability to run queries over JSON documents using JSON path expressions defined in the SQL/JSON standard. Such queries may utilize the existing indexing mechanisms for documents stored in the JSONB format to efficiently retrieve data.

Common table expressions, also known as WITH queries, can now be automatically inlined by PostgreSQL 12, which in turn can help increase the performance of many existing queries. In this release, a WITH query can be inlined if it is not recursive, does not have any side-effects, and is only referenced once in a later part of a query.

PostgreSQL 12 introduces "generated columns." Defined in the SQL standard, this type of column computes its value from the contents of other columns in the same table. In this version, PostgreSQL supports "stored generated columns," where the computed value is stored on the disk.

Internationalization

PostgreSQL 12 extends its support of ICU collations by allowing users to define "nondeterministic collations" that can, for example, allow case-insensitive or accent-insensitive comparisons.

Authentication

PostgreSQL expands on its robust authentication method support with several enhancements that provide additional security and functionality. This release introduces both client and server-side encryption for authentication over GSSAPI interfaces, as well as the ability for PostgreSQL to discover LDAP servers if PostgreSQL is compiled with OpenLDAP.

Additionally, PostgreSQL 12 now supports a form of multi-factor authentication. A PostgreSQL server can now require an authenticating client to provide a valid SSL certificate with their username using the clientcert=verify-full option and combine this with the requirement of a separate authentication method (e.g. scram-sha-256).

Administration

PostgreSQL 12 introduces the ability to rebuild indexes without blocking writes to an index via the REINDEX CONCURRENTLY command, allowing users to avoid downtime scenarios for lengthy index rebuilds.

Additionally, PostgreSQL 12 can now enable or disable page checksums in an offline cluster using the pg_checksums command. Previously page checksums, a feature to help verify the integrity of data stored to disk, could only be enabled at the time a PostgreSQL cluster was initialized with initdb.

For a full list of features included in this release, please read the release notes, which can be found at: https://www.postgresql.org/docs/12/release-12.html

About PostgreSQL

PostgreSQL is the world's most advanced open source database, with a global community of thousands of users, contributors, companies and organizations. The PostgreSQL Project builds on over 30 years of engineering, starting at the University of California, Berkeley, and has continued with an unmatched pace of development. PostgreSQL's mature feature set not only matches top proprietary database systems, but exceeds them in advanced database features, extensibility, security, and stability.

Press Release Translations

Links

28 Sep 01:22

No, the President of Poland Didn't Say That Jews Cause Anti-Semitism

by David P. Goldman
In late June of 1941, my father's first cousins Moshe and Dvora fled their house in the tiny town of Kameny Most, about halfway between Slonim and Baranavichy in what is now Belarus. Hitler had launched Operation Barbarossa days before, and their home stood almost on the German-Soviet line that had divided Poland in 1939. Now the Germans had marched into town. The boy and girl, then 15 and 16, reached the woods behind their house before the Germans arrived. Their parents and baby brother fled a minute later, but the Germans already were there. They couldn't reach the woods and hid in the tall grass. A Polish neighbor pointed them out to the Germans, who shot them on the spot. Moshe and Dvora joined the partisan brigade led by the Bielski brothers, made famous in the film Defiance. Not long afterwards they returned at night, barricaded the neighbor in his house, set it afire and burned him alive. By the grace of God the teenagers survived the war and came to the new State of Israel and started large and flourishing families. I had the merit to arrive at Dvora's deathbed in 2004 just in time to receive her blessing upon the American branch of her family.
25 Jul 13:06

Spreadsheets

My brother once asked me if there was a function to produce a calendar grid from a list of dates in Google Sheets. I replied with a single-cell formula that took in a list of dates and outputted a calendar. It used SEQUENCE(), REGEXMATCH(), and a double-nested ARRAYFORMULA(), and it locked up the browser for 15 seconds every time it ran. I think he learned a lot about asking me things.
23 Jul 15:39

Karakai Jouzu no (Moto) Takagi-san - Chapter 95.5

Group: 15avaughn - Uploader: 15avaughn - Language: English
17 Jul 13:17

President Trump Has the Moral High Ground Against the Democrats

by David P. Goldman
I'm tired of hearing conservative friends apologize for President Trump's "go back to where you came from" tweets about the likes of Ilhan Omar. The president has the moral high ground, and the weasel war dance of the mainstream media shouldn't distract us from this fact.
25 Jun 20:41

5Toubun no Hanayome - Chapter 91

Group: /a/nonymous | 5toubun sc/a/ns - Uploader: ThunderCloud - Language: English
19 Jun 12:12

.: O incêndio de Londres (1666) e a Igreja Batista de Petty France :.

by Pedro Issa

O texto diz pouco mais que o título, mas não deixa de ser interessantíssimo.

O incêndio de Londres destruiu tantas igrejas paroquiais que mãos violentas se lançaram sobre algumas das casas de encontro (meeting-houses) erigidas por Batistas, e elas foram apropriadas para uso paroquial. Aparentemente, a casa de Petty France, e certamente a casa de Bishopsgate, em Devonshire Square, foram assim roubadas de seus donos por alguns anos. É uma mostra da crescente confiança das igrejas [batistas] que o pessoal de Kiffin tenha aberto um novo livro para seus registros, o qual, dali em diante, permaneceu em uso regular.

Whitley, A History, p. 116.

O incêndio de Londres foi avassalador. Só não foi pior, talvez, do que a Peste de 1665, semi-fantasiada por Daniel Defoe, um puritano, no delicioso Um diário do ano da peste. Pois bem, sempre alguém me pergunta por que o governo tolerava igrejas sectárias, como as batistas, mesmo sabendo de sua existência e localização. Voilà! Para poder usufruir de suas dependências quando conveniente. Petty France, que tinha Nehemiah Coxe como um de seus pastores, chegou a comportar 600 membros. Minha dúvida é onde esse pessoal se reuniu nesses anos de criptobatistismo. Espero que Sam Renihan nos explique em sua trilogia vindoura sobre Petty France.

*

WHITLEY, W. T. A History of British Baptists. London: Charles Griffin & Company, 1923.

17 Jun 13:52

Avinash Kumar: Bloom Indexes in PostgreSQL

Bloom Indexes in PostgreSQL

PostgreSQL LogoThere is a wide variety of indexes available in PostgreSQL. While most are common in almost all databases, there are some types of indexes that are more specific to PostgreSQL. For example, GIN indexes are helpful to speed up the search for element values within documents. GIN and GiST indexes could both be used for making full-text searches faster, whereas BRIN indexes are more useful when dealing with large tables, as it only stores the summary information of a page. We will look at these indexes in more detail in future blog posts. For now, I would like to talk about another of the special indexes that can speed up searches on a table with a huge number of columns and which is massive in size. And that is called a bloom index.

In order to understand the bloom index better, let’s first understand the bloom filter data structure. I will try to keep the description as short as I can so that we can discuss more about how to create this index and when will it be useful.

Most readers will know that an array in computer sciences is a data structure that consists of a collection of values and variables. Whereas a bit or a binary digit is the smallest unit of data represented with either 0 or 1. A bloom filter is also a bit array of m bits that are all initially set to 0.

A bit array is an array that could store a certain number of bits (0 and 1). It is one of the most space-efficient data structures to test whether an element is in a set or not.

Why use bloom filters?

Let’s consider some alternates such as list data structure and hash tables. In the case of a list data structure, it needs to iterate through each element in the list to search for a specific element. We can also try to maintain a hash table where each element in the list is hashed, and we then see if the hash of the element we are searching for matches a hash in the list. But checking through all the hashes may be a higher order of magnitude than expected. If there is a hash collision, then it does a linear probing which may be time-consuming. When we add hash tables to disk, it requires some additional IO and storage. For an efficient solution, we can look into bloom filters which are similar to hash tables.

Type I and Type II errors

While using bloom filters, we may see a result that falls into a

type I error
but never a
type II error
. A nice example of a type I error is a result that a person with last name: “vallarapu” exists in the relation: foo.bar whereas it does not exist in reality (a
false positive
conclusion). An example for a type II error is a result that a person with the last name as “vallarapu” does not exist in the relation: foo.bar, but in reality, it does exist (a
false negative
conclusion). A bloom filter is 100% accurate when it says the element is not present. But when it says the element is present, it may be 90% accurate or less. So it is usually called a
probabilistic data structure
.

The bloom filter algorithm

Let’s now understand the algorithm behind bloom filters better. As discussed earlier, it is a bit array of m bits, where m is a certain number. And we need a k number of hash functions. In order to tell whether an element exists and to give away the item pointer of the element, the element (data in columns) will be passed to the hash functions. Let’s say that there are only two hash functions to store the presence of the first element “avi” in the bit array. When the word “avi” is passed to the first hash function, it may generate the output as 4 and the second may give the output as 5. So now the bit array could look like the following:

All the bits are initially set to 0. Once we store the existence of the element “avi” in the bloom filter, it sets the 4th and 5th bits to 1. Let’s now store the existence of the word “percona”. This word is again passed to both the hash functions and assumes that the first hash function generates the value as 5 and the second hash function generated the value as 6. So, the bit array now looks like the following – since the 5th bit was already set to 1 earlier, it doesn’t make any modifications there:

Now, consider that our query is searching for a predicate with the name as “avi”. The input: “avi” will now be passed to the hash functions. The first hash function returns the value as 4 and the second returns the value as 5, as these are the same hash functions that were used earlier. Now when we look in position 4 and 5 of the bloom filter (bit array), we can see that the values are set to 1. This means that the element is present.

Collision with bloom filters

Consider a query that is fetching the records of a table with the name: “don”. When this word “don” is passed to both the hash functions, the first hash function returns the value as 6 (let’s say) and the second hash function returns the value as 4. As the bits at positions 6 and 4 are set to 1, the membership is confirmed and we see from the result that a record with the name: “don” is present. In reality, it is not. This is one of the chances of collisions. However, this is not a serious problem.

A point to remember is – “The fewer the hash functions, the more the chances of collisions. And the more the hash functions, lesser the chances of collision. But if we have k hash functions, the time it takes for validating membership is in the order of k“.

Bloom Indexes in PostgreSQL

As you’ll now have understood bloom filters, you’ll know a bloom index uses bloom filters. When you have a table with too many columns, and there are queries using too many combinations of columns  – as predicates – on such tables, you could need many indexes. Maintaining so many indexes is not only costly for the database but is also a performance killer when dealing with larger data sets.

So, if you create a bloom index on all these columns, a hash is calculated for each of the columns and merged into a single index entry of the specified length for each row/record. When you specify a list of columns on which you need a bloom filter, you could also choose how many bits need to be set per each column. The following is an example syntax with the length of each index entry and the number of bits per a specific column.

CREATE INDEX bloom_idx_bar ON foo.bar USING bloom (id,dept_id,zipcode)
WITH (length=80, col1=4, col2=2, col3=4);

length
is rounded to the nearest multiple of 16. Default is 80. And the maximum is 4096. The default
number of bits
per column is 2. We can specify a maximum of 4095 bits.

Bits per each column

Here is what it means in theory when we have specified length = 80 and col1=2, col2=2, col3=4. A bit array of length 80 bits is created per row or a record. Data inside col1 (column1) is passed to two hash functions because col1 was set to 2 bits. Let’s say these two hash functions generate the values as 20 and 40. The bits at the 20th and 40th positions are set to 1 within the 80 bits (m) since the length is specified as 80 bits. Data in col3 is now passed to four hash functions and let’s say the values generated are 2, 4, 9, 10. So four bits – 2, 4, 9, 10 –are set to 1 within the 80 bits.

There may be many empty bits, but it allows for more randomness across the bit arrays of each of the individual rows. Using a signature function, a signature is stored in the index data page for each record along with the row pointer that points to the actual row in the table. Now, when a query uses an equality operator on the column that has been indexed using bloom, a number of hash functions, as already set for that column, are used to generate the appropriate number of hash values. Let’s say four for col3 – so 2, 4, 9, 10. The index data is extracted row-by-row and searched if the rows have those bits (bit positions generated by hash functions) set to 1.

And finally, it says a certain number of rows have got all of these bits set to 1. The greater the length and the bits per column, the more the randomness and the fewer the false positives. But the greater the length, the greater the size of the index.

Bloom Extension

Bloom index is shipped through the contrib module as an extension, so you must create the bloom extension in order to take advantage of this index using the following command:

CREATE EXTENSION bloom;

Example

Let’s start with an example. I am going to create a table with multiple columns and insert 100 million records.

percona=# CREATE TABLE foo.bar (id int, dept int, id2 int, id3 int, id4 int, id5 int,id6 int,id7 int,details text, zipcode int);
CREATE TABLE
percona=# INSERT INTO foo.bar SELECT (random() * 1000000)::int, (random() * 1000000)::int,
(random() * 1000000)::int,(random() * 1000000)::int,(random() * 1000000)::int,(random() * 1000000)::int,
(random() * 1000000)::int,(random() * 1000000)::int,md5(g::text), floor(random()* (20000-9999 + 1) + 9999)
from generate_series(1,100*1e6) g;
INSERT 0 100000000

The size of the table is now 9647 MB as you can see below.

percona=# \dt+ foo.bar
List of relations
Schema | Name | Type  | Owner    | Size    | Description
-------+------+-------+----------+---------+-------------
foo    | bar  | table | postgres | 9647 MB | (1 row)

Let’s say that all the columns: id, dept, id2, id3, id4, id5, id6 and zip code of table: foo.bar are used in several queries in random combinations according to different reporting purposes. If we create individual indexes on each column, it is going to take almost 2 GB disk space for each index.

Testing with btree indexes

We’ll try creating a single btree index on all the columns that are most used by the queries hitting this table. As you can see in the following log, it took 91115.397 ms to create this index and the size of the index is 4743 MB.

postgres=# CREATE INDEX idx_btree_bar ON foo.bar (id, dept, id2,id3,id4,id5,id6,zipcode);
CREATE INDEX
Time: 91115.397 ms (01:31.115)
postgres=# \di+ foo.idx_btree_bar
                             List of relations
 Schema |     Name      | Type  |  Owner   | Table |  Size   | Description
--------+---------------+-------+----------+-------+---------+-------------
 foo    | idx_btree_bar | index | postgres | bar   | 4743 MB |
(1 row)

Now, let’s try some of the queries with a random selection of columns. You can see that the execution plans of these queries are 2440.374 ms and 2406.498 ms for query 1 and query 2 respectively. To avoid issues with the disk IO, I made sure that the execution plan was captured when the index was cached to memory.

Query 1
-------
postgres=# EXPLAIN ANALYZE select * from foo.bar where id4 = 295294 and zipcode = 13266;
                                       QUERY PLAN
-----------------------------------------------------------------------------------------------------
 Index Scan using idx_btree_bar on bar  (cost=0.57..1607120.58 rows=1 width=69) (actual time=1832.389..2440.334 rows=1 loops=1)
   Index Cond: ((id4 = 295294) AND (zipcode = 13266))
 Planning Time: 0.079 ms
 Execution Time: 2440.374 ms
(4 rows)
Query 2
-------
postgres=# EXPLAIN ANALYZE select * from foo.bar where id5 = 281326 and id6 = 894198;
                                                           QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
 Index Scan using idx_btree_bar on bar  (cost=0.57..1607120.58 rows=1 width=69) (actual time=1806.237..2406.475 rows=1 loops=1)
   Index Cond: ((id5 = 281326) AND (id6 = 894198))
 Planning Time: 0.096 ms
 Execution Time: 2406.498 ms
(4 rows)

Testing with Bloom Indexes

Let’s now create a bloom index on the same columns. As you can see from the following log, there is a huge size difference between the bloom (1342 MB) and the btree index (4743 MB). This is the first win. It took almost the same time to create the btree and the bloom index.

postgres=# CREATE INDEX idx_bloom_bar ON foo.bar USING bloom(id, dept, id2, id3, id4, id5, id6, zipcode)
WITH (length=64, col1=4, col2=4, col3=4, col4=4, col5=4, col6=4, col7=4, col8=4);
CREATE INDEX
Time: 94833.801 ms (01:34.834)
postgres=# \di+ foo.idx_bloom_bar
                             List of relations
 Schema |     Name      | Type  |  Owner   | Table |  Size   | Description
--------+---------------+-------+----------+-------+---------+-------------
 foo    | idx_bloom_bar | index | postgres | bar   | 1342 MB |
(1 row)

Let’s run the same queries, check the execution time, and observe the difference.

Query 1
-------
postgres=# EXPLAIN ANALYZE select * from foo.bar where id5 = 326756 and id6 = 597560;
                                                             QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on bar  (cost=1171823.08..1171824.10 rows=1 width=69) (actual time=1265.269..1265.550 rows=1 loops=1)
   Recheck Cond: ((id4 = 295294) AND (zipcode = 13266))
   Rows Removed by Index Recheck: 2984788
   Heap Blocks: exact=59099 lossy=36090
   ->  Bitmap Index Scan on idx_bloom_bar  (cost=0.00..1171823.08 rows=1 width=0) (actual time=653.865..653.865 rows=99046 loops=1)
         Index Cond: ((id4 = 295294) AND (zipcode = 13266))
 Planning Time: 0.073 ms
 Execution Time: 1265.576 ms
(8 rows)
Query 2
-------
postgres=# EXPLAIN ANALYZE select * from foo.bar where id5 = 281326 and id6 = 894198;
                                                             QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on bar  (cost=1171823.08..1171824.10 rows=1 width=69) (actual time=950.561..950.799 rows=1 loops=1)
   Recheck Cond: ((id5 = 281326) AND (id6 = 894198))
   Rows Removed by Index Recheck: 2983893
   Heap Blocks: exact=58739 lossy=36084
   ->  Bitmap Index Scan on idx_bloom_bar  (cost=0.00..1171823.08 rows=1 width=0) (actual time=401.588..401.588 rows=98631 loops=1)
         Index Cond: ((id5 = 281326) AND (id6 = 894198))
 Planning Time: 0.072 ms
 Execution Time: 950.827 ms
(8 rows)

From the above tests, it is evident that the bloom indexes performed better. Query 1 took 1265.576 ms with a bloom index and 2440.374 ms with a btree index. And query 2 took 950.827 ms with bloom and 2406.498 ms with btree. However, the same test will show a better result for a btree index, if you would have created a btree index on those 2 columns only (instead of many columns).

Reducing False Positives

If you look at the execution plans generated after creating the bloom indexes (consider Query 2),  98631 rows are considered to be matching rows. However, the output says only one row. So, the rest of the rows – all 98630 – are false positives. The btree index would not return any false positives.

In order to reduce the false positives, you may have to increase the signature length and also the bits per column through some of the formulas mentioned in this interesting blog post through experimentation and testing. As you increase the signature length and bits, you might see the bloom index growing in size. Nevertheless, this may reduce false positives. If the time spent is greater due to the number of false positives returned by the bloom index, you could increase the length. If increasing the length does not make much difference to the performance, then you can leave the length as it is.

Points to be carefully noted

  1. In the above tests, we have seen how a bloom index has performed better than a btree index. But, in reality, if we had created a btree index just on top of the two columns being used as predicates, the query would have performed much faster with a btree index than with a bloom index. This index does not replace a btree index unless we wish to replace a chunk of the indexes with a single bloom index.
  2. Just like hash indexes, a bloom index is applicable for equality operators only.
  3. Some formulas on how to calculate the appropriate length of a bloom filter and the bits per column can be read on Wikipedia or in this blog post.

Conclusion

Bloom indexes are very helpful when we have a table that stores huge amounts of data and a lot of columns, where we find it difficult to create a large number of indexes, especially in OLAP environments where data is loaded from several sources and maintained for reporting. You could consider testing a single bloom index to see if you can avoid implementing a huge number of individual or composite indexes that could take additional disk space without much performance gain.