Shared posts

07 Jun 17:49

Normalization and Further Normalization Part 2: If You Need Them, You're Doing It Wrong

by noreply@blogger.com (Fabian Pascal)

In Part 1 we outlined some fundamentals of database design, namely the distinction between normalization to 1NF, and further normalization (to "full" 5NF), and explained that they are necessary only to repair poor designs -- if you (1) develop a complete conceptual model and (2) formalize it properly using the RDM, (3) adhering to the three core principles of database design, you should end up with a relational database in both 1NF and 5NF.

Here we apply this knowledge to the typical request for "normalization" help we presented in Part 1.
06 Jun 10:23

Comments

NPR encourages you to add comments to their stories using the page inspector in your browser's developer tools. Note: Your comments are visible only to you, and will be lost when you refresh the page.
30 May 11:44

Ufo

"It's a little low for a weather balloon; it might be some other kind." "Yeah. Besides, I know I'm the alien conspiracy guy, but come on--the idea that the government would care about hiding something so mundane as atmospheric temperature measurement is too ridiculous even for me."
23 May 16:11

Andy Wingo: bigint shipping in firefox!

I am delighted to share with folks the results of a project I have been helping out on for the last few months: implementation of "BigInt" in Firefox, which is finally shipping in Firefox 68 (beta).

what's a bigint?

BigInts are a new kind of JavaScript primitive value, like numbers or strings. A BigInt is a true integer: it can take on the value of any finite integer (subject to some arbitrarily large implementation-defined limits, such as the amount of memory in your machine). This contrasts with JavaScript number values, which have the well-known property of only being able to precisely represent integers between -253 and 253.

BigInts are written like "normal" integers, but with an n suffix:

var a = 1n;
var b = a + 42n;
b << 64n
// result: 793209995169510719488n

With the bigint proposal, the usual mathematical operations (+, -, *, /, %, <<, >>, **, and the comparison operators) are extended to operate on bigint values. As a new kind of primitive value, bigint values have their own typeof:

typeof 1n
// result: 'bigint'

Besides allowing for more kinds of math to be easily and efficiently expressed, BigInt also allows for better interoperability with systems that use 64-bit numbers, such as "inodes" in file systems, WebAssembly i64 values, high-precision timers, and so on.

You can read more about the BigInt feature over on MDN, as usual. You might also like this short article on BigInt basics that V8 engineer Mathias Bynens wrote when Chrome shipped support for BigInt last year. There is an accompanying language implementation article as well, for those of y'all that enjoy the nitties and the gritties.

can i ship it?

To try out BigInt in Firefox, simply download a copy of Firefox Beta. This version of Firefox will be fully released to the public in a few weeks, on July 9th. If you're reading this in the future, I'm talking about Firefox 68.

BigInt is also shipping already in V8 and Chrome, and my colleague Caio Lima has an project in progress to implement it in JavaScriptCore / WebKit / Safari. Depending on your target audience, BigInt might be deployable already!

thanks

I must mention that my role in the BigInt work was relatively small; my Igalia colleague Robin Templeton did the bulk of the BigInt implementation work in Firefox, so large ups to them. Hearty thanks also to Mozilla's Jan de Mooij and Jeff Walden for their patient and detailed code reviews.

Thanks as well to the V8 engineers for their open source implementation of BigInt fundamental algorithms, as we used many of them in Firefox.

Finally, I need to make one big thank-you, and I hope that you will join me in expressing it. The road to ship anything in a web browser is long; besides the "simple matter of programming" that it is to implement a feature, you need a specification with buy-in from implementors and web standards people, you need a good working relationship with a browser vendor, you need willing technical reviewers, you need to follow up on the inevitable security bugs that any browser change causes, and all of this takes time. It's all predicated on having the backing of an organization that's foresighted enough to invest in this kind of long-term, high-reward platform engineering.

In that regard I think all people that work on the web platform should send a big shout-out to Tech at Bloomberg for making BigInt possible by underwriting all of Igalia's work in this area. Thank you, Bloomberg, and happy hacking!

20 May 19:21

Bluetooth's Complexity Has Become a Security Risk (Wired)

by corbet
Wired looks at the security issues stemming from the complexity of the Bluetooth standard. "Bluetooth has certainly been investigated to a degree, but researchers say that the lack of intense scrutiny historically stems again from just how involved it is to even read the standard, much less understand how it works and all the possible implementations. On the plus side, this has created a sort of security through obscurity, in which attackers have also found it easier to develop attacks against other protocols and systems rather than taking the time to work out how to mess with Bluetooth."
22 Apr 20:22

'The Quantum Supremacy' Serial Continues

by David P. Goldman
Part four of Spengler’s spy thriller which pits China’s Ministry of State Security against the CIA in a deadly battle of wits
04 Apr 19:29

To Stop the Deep State, Bring Back Mike Flynn!

by David P. Goldman
Why did the Deep State throw caution to the winds in an desperate effort to frame Donald Trump for alleged collusion with Russia--and failing that, to entrap him in an obstruction of justice case? There are a lot of reasons for the Establishment to hate Donald Trump, but one of them stands out. During the campaign, Donald Trump denounced the Obama administration for having created ISIS. That claim drew ridicule from the mainstream media, but it is entirely correct. Lt. Gen. Mike Flynn, Trump's campaign adviser, was head of the Defense Intelligence Agency in 2012 when the DIA blew the whistle on CIA backing for Sunni Islamists fighting the Assad regime during the then-raging Syrian civil war. As my friend Michael Ledeen wrote at PJ Media on March 26, the Mueller investigation was all about Flynn.
01 Apr 16:45

Sebastian Insausti: How to Deploy Highly Available PostgreSQL with Single Endpoint for WordPress

WordPress is an open source software you can use to create your website, blog, or application. There are many designs and features/plugins to add to your WordPress installation. WordPress is a free software, however, there are many commercial plugins to improve it depending on your requirements.

WordPress makes it easy for you to manage your content and it’s really flexible. Create drafts, schedule publication, and look at your post revisions. Make your content public or private, and secure posts and pages with a password.

To run WordPress you should have at least PHP version 5.2.4+, MySQL version 5.0+ (or MariaDB), and Apache or Nginx. Some of these versions have reached EOL and you may expose your site to security vulnerabilities, so you should install the latest version available according to your environment.

As we could see, currently, WordPress only supports the MySQL and MariaDB database engines. WPPG is a plugin based on PG4WP plugin, that gives you the possibility to install and use WordPress with a PostgreSQL database as a backend. It works by replacing calls to MySQL specific functions with generic calls that map them to other database functions and rewriting SQL queries on the fly when needed.

For this blog, we’ll install 1 Application Server with WordPress 5.1.1 and HAProxy, 1.5.18 in the same server, and 2 PostgreSQL 11 database nodes (Master-Standby). All the operating system will be CentOS 7. For the databases and load balancer deploy we’ll use the ClusterControl system.

This is a basic environment. You can improve it by adding more high availability features as you can see here. So, let’s start.

Database Deployment

First, we need to install our PostgreSQL database. For this, we’ll assume you have ClusterControl installed.

To perform a deployment from ClusterControl, simply select the option “Deploy” and follow the instructions that appear.

When selecting PostgreSQL, we must specify User, Key or Password and port to connect by SSH to our servers. We also need a name for our new cluster and if we want ClusterControl to install the corresponding software and configurations for us.

After setting up the SSH access information, we must define the database user, version and datadir (optional). We can also specify which repository to use.

In the next step, we need to add our servers to the cluster that we are going to create.

When adding our servers, we can enter IP or hostname.

In the last step, we can choose if our replication will be Synchronous or Asynchronous.

We can monitor the status of the creation of our new cluster from the ClusterControl activity monitor.

Once the task is finished, we can see our cluster in the main ClusterControl screen.

Once we have our cluster created, we can perform several tasks on it, like adding a load balancer (HAProxy) or a new replica.

ClusterControl
Single Console for Your Entire Database Infrastructure
Find out what else is new in ClusterControl

Load Balancer Deployment

To perform a load balancer deployment, in this case, HAProxy, select the option “Add Load Balancer” in the cluster actions and fill the asked information.

We only need to add IP/Name, port, policy and the nodes we are going to use. By default, HAProxy is configured by ClusterControl with two different ports, one read-write and one read-only. In the read-write port, only the master is UP. In case of failure, ClusterControl will promote the most advanced slave and it’ll change the HAProxy configuration to enable the new master and disable the old one. In this way, we’ll have automatic failover in case of failure.

If we followed the previous steps, we should have the following topology:

So, we have a single endpoint created in the Application Server with HAProxy. Now, we can use this endpoint in the application as a localhost connection.

WordPress Installation

Let’s install WordPress on our Application Server and configure it to connect to the PostgreSQL database by using the local HAProxy port 3307.

First, install the packages required on the Application Server.

$ yum install httpd php php-mysql php-pgsql postgresql
$ systemctl start httpd && systemctl enable httpd

Download the latest WordPress version and move it to the apache document root.

$ wget https://wordpress.org/latest.tar.gz
$ tar zxf latest.tar.gz
$ mv wordpress /var/www/html/

Download the WPPG plugin and move it into the wordpress plugins directory.

$ wget https://downloads.wordpress.org/plugin/wppg.1.0.1.zip
$ unzip wppg.1.0.1.zip
$ mv wppg /var/www/html/wordpress/wp-content/plugins/

Copy the db.php file to the wp-content directory. Then, edit it and change the 'PG4WP_ROOT' path:

$ cp /var/www/html/wordpress/wp-content/plugins/wppg/pg4wp/db.php /var/www/html/wordpress/wp-content/
$ vi /var/www/html/wordpress/wp-content/db.php
define( 'PG4WP_ROOT', ABSPATH.'wp-content/plugins/wppg/pg4wp');

Rename the wp-config.php and change the database information:

$ mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
$ vi /var/www/html/wordpress/wp-config.php
define( 'DB_NAME', 'wordpressdb' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'wpPassword' );
define( 'DB_HOST', 'localhost:3307' );

Then, we need to create the database and the application user in the PostgreSQL database. On the master node:

$ postgres=# CREATE DATABASE wordpressdb;
CREATE DATABASE
$ postgres=# CREATE USER wordpress WITH PASSWORD 'wpPassword';
CREATE ROLE
$ postgres=# GRANT ALL PRIVILEGES ON DATABASE wordpressdb TO wordpress;
GRANT

And edit the pg_hba.conf file to allow the connection from the Application Server.

$ Vi /var/lib/pgsql/11/data/pg_hba.conf
host  all  all  192.168.100.153/24  md5
$ systemctl reload postgresql-11

Make sure you can access it from the Application Server:

$ psql -hlocalhost -p3307 -Uwordpress wordpressdb
Password for user wordpress:
psql (9.2.24, server 11.2)
WARNING: psql version 9.2, server version 11.0.
         Some psql features might not work.
Type "help" for help.
wordpressdb=>

Now, go to the install.php in the web browser, in our case, the IP Address for the Application Server is 192.168.100.153, so, we go to:

http://192.168.100.153/wordpress/wp-admin/install.php

Add the Site Title, Username and Password to access the admin section, and your email address.

Finally, go to Plugins -> Installed Plugins and activate the WPPG plugin.

Conclusion

Now, we have WordPress running with PostgreSQL by using a single endpoint. We can monitor our cluster activity on ClusterControl checking the different metrics, dashboards or many performance and management features.

There are different ways to implement WordPress with PostgreSQL. It could be by using a different plugin, or by installing WordPress as usual and adding the plugin later, but in any case, as we mentioned, PostgreSQL is not officially supported by WordPress, so we must perform an exhaustive testing process if we want to use this topology in production.

25 Mar 16:29

Spengler: 'The Quantum Supremacy: A Novel'

by David P. Goldman
For the past several years I've warned about China's ascendance and the threat to America's world standing. Not enough people are listening, so I've written a spy thriller about China: The Quantum Supremacy. It's available now in an Amazon Kindle edition, but I will publish it as a serial in this space over the next six months, a chapter a week. A lot of people don't like the unvarnished facts, but they like stories. So here's a story about China. I hope you have as much fun reading it as I did writing it.
23 Mar 19:26

Graph Databases: They Who Forget the Past...

by noreply@blogger.com (Fabian Pascal)

Out of the plethora of misconceptions common in the industry[1], quite a few are squeezed into this paragraph:
“The relational databases that emerged in the ’80s are efficient at storing and analyzing tabular data but their underlying data model makes it difficult to connect data scattered across multiple tables. The graph databases we’ve seen emerge in the recent years are designed for this purpose. Their data model is particularly well-suited to store and to organize data where connections are as important as individual data points. Connections are stored and indexed as first-class citizens, making it an interesting model for investigations in which you need to connect the dots. In this post, we review three common fraud schemes and see how a graph approach can help investigators defeat them.”
--AnalyticBridge.DataScienceCentral.com

Relational databases did not emerge in the 80s (SQL DBMSs did);
  • There is no "tabular data" (the relational data structure is the relation, which can be visualized as a table on a physical medium[2], and SQL tables are not relations);
  • Analysis is not a DBMS, but an application function (while database queries, as deductions, are an important aspect of analysis, and computational functions can be added to the data sublanguage (as in SQL), the primary function of a DBMS is data management)[3];
  • A data model has nothing to do with storage (storage and access methods are part of physical implementation, which determines efficiency/performance[4]).

Here, however, we will focus on the current revival (rather than emergence) of graph DBMSs claimed superior -- without any evidence or qualifications -- to SQL DBMSs (not relational, which do not exist) that purportedly "make it difficult to connect data scattered across multiple tables". This is a typical example of how lack of foundation knowledge and of familiarity with the history of the field inhibit understanding and progress[5].

20 Mar 18:31

Craig Kerstiens: How to evaluate your database

Choosing a database isn’t something you do every day. You generally choose it once for a project, then don’t look back. If you experience years of success with your application you one day have to migrate to a new database, but that occurs years down the line. In choosing a database there are a few key things to consider. Here is your checklist, and spoiler alert, Postgres checks out strongly in each of these categories.

Does your database solve your problem?

There are a lot of new databases that rise up every year, each of these looks to solve hard problems within the data space. But, you should start by looking and seeing if they’re looking to solve a problem that you personally have. Most applications at the end of the day have some relational data model and more and more are also working with some level of unstructured data. Relational databases of course solve the relational piece, but they increasingly support the unstructured piece as well. Postgres in particular

Do you need strong gurantees for your data? ACID is still at the core of how durable and safe is your data, knowing how it stacks up here is a good evaluation criteria. But then there is also the CAP theorem which you see especially applied to distributed or clustered databases. Each of the previous links is worth a read to get a better understanding of the theory around databases. If you’re interested in how various databases perform under CAP then check out the Jepsen series of tests. But for the average person like myself it can be boiled down a bit more. Do you need full gurantee around your transactions, or do you optimize for some performance?

While it doesn’t fully speak to all the possible options you can have with databases, Postgres comes with some pretty good flexibility out of the box. It allows both synchronous (guaranteed it makes it) and asynchronous (queued up occurring soon after) replication to standbys. Those standbys could be for read replicas for reporting or for high availability. What’s nice about Postgres is can actually allow you to swap between synchronous and asynchronous on a per transaction basis.

Then there is the richness of features. Postgres has rich data types, powerful indexes, and a range of features such as geospatial support and full text search. By default yes, Postgres usually does solve my problem. But that is only one of my criteria.

How locked in am I to my database?

Once I’ve established that my database I want to know a bit more about what I’m getting myself into. Is the database open source is a factor. That doesn’t mean I require the database to be open source, but it simplifies my evaluation. A closed source database means I’m committing to whatever the steward of that database decides. If the company is well established and is a good steward of the product a closed source database can absolutely satisfy what I need.

On the flip side open source doesn’t immediately mean it is perfect. Is it open source but with an extremely restrictive license? Is there a community around it? Has it been getting new releases? All of these play into my level of comfort in trusting you with my data.

Can I hire for my database?

This one gets missed so often by early stage companies! It is the number one reason I like using open technologies and frameworks because I can hire someone already familiar with my tech stack. In contrast, with a home grown in house framework or database the ability to test knowledge is harder and the ramp up time is considerably more for a new hire. Postgres shines as bright as any database here. A look at Hacker news who is hiring trends, which I view as a leading indicator, from a couple years ago shows Postgres leading the pack of desired database skills. The number of people that know Postgres continues to increase each day. It is not a fading skill.

Whose hiring from HN

What does the future look like?

Finally, I’m looking at what my future needs will be combined with the future of the database. Does the database have momentum to keep improving and advancing? Does it not only have features I need today, but does it have features that can benefit me in the future without complicating my stack? I often favor a database that can solve multiple problems not just one. Combining 10 very specialized tools leads to a much more complex stack, vs. in Postgres if I need to layer in a little full text search I already have something that can be my starting point.

Does it scale is my final big one. If my business is expected to remain small this is no longer a concern, but I want to know what my limits are. Replacing my database is a large effort task, how far can I scale my database without rearchitecting.

Personally Postgres having a good answer to the scale question is what attracted me to join Citus over 3 years ago. It takes Postgres and makes it even more powerful. It removes the scaling question for you, so when I need to scale I have my answer.

These aren’t the only criteria

I’m sure this is not an exhaustive list, but it is a framework I’ve used for many years. In most of those years I’m lead back to the simple answer: Just use Postgres.

What other criteria do you use when choosing your database? Let us know @citusdata

10 Mar 17:18

health @ Savannah: Thalamus 0.9.8 is out. HIS Migration from MongoDB to PosrgreSQL

Dear all

I am proud to announce the availability of Thalamus 0.9.8, which has been migrated from MongoDB to now interact with PostgreSQL .
(see related news https://savannah.gnu.org/forum/forum.php?forum_id=9366 )

Please make sure you update the package

$ pip3 install --user --upgrade thalamus

The interaction for the enduser and from GNU Health HMIS node will be transparent.

The Health Information System installation has been updated in Wikipedia. You can refer to https://en.wikibooks.org/wiki/GNU_Health/Federation_Technical_Guide#Installing_Thalamus

Please don't forget to report any issues you find to health@gnu.org

Bests
Luis

09 Mar 15:48

Light Pollution

It's so sad how almost no one alive today can remember seeing the galactic rainbow, the insanity nebula, or the skull and glowing eyes of the Destroyer of Sagittarius.
04 Mar 22:50

Rosenzweig: The federation fallacy

by corbet
Here's a lengthy piece from Alyssa Rosenzweig on preserving freedom despite the inevitable centralization of successful information services. "Indeed, it seems all networked systems tend towards centralisation as the natural consequence of growth. Some systems, both legitimate and illegitimate, are intentionally designed for centralisation. Other systems, like those in the Mastodon universe, are specifically designed to avoid centralisation, but even these succumb to the centralised black hole as their user bases grow towards the event horizon."
09 Feb 12:56

Huawei case demonstrates importance of Free Software for security

Huawei case demonstrates importance of Free Software for security

The discussion of the Huawei security concerns showcases a general trust issue when it comes to critical infrastructure. A first step to solve this problem is to publish the code under a Free and Open Source Software licence and take measures to facilitate its independently-verifiable distribution.

The ongoing debate about banning Huawei hardware for the rollout of 5G networks, following earlier state espionage allegations, falls too short. It is not just about the Chinese company but about a general lack of transparency within this sector. As past incidents proved, the problem of backdoors inside blackboxed hard- and software is widely spread, independently from the manufacturers' origins.

However, it is unprecedented that the demand to inspect the source code of a manufacturer's equipment has been discussed so broadly and intensely. The Free Software Foundation Europe (FSFE) welcomes that the importance of source code is recognised, but is afraid that the proposed solution falls too short. Allowing inspection of the secret code by selected authorities and telephone companies might help in this specific case, but will not solve the general problem.

To establish trust in critical infrastructure like 5G, it is a crucial precondition that all software code powering those devices is published under a Free and Open Source Software licence. Free and Open Source Software guarantees the four freedoms to use, study, share, and improve an application. On this basis, everyone can inspect the code, not only for backdoors, but for all security risks. Only these freedoms allow for independent and continuous security audits which will lead citizens, the economy, and the public sector to trust their communication and data exchange.

Furthermore, in order to verify code integrity – so that the provided source code corresponds to the executable code running on the equipment – it is either necessary that there are reproducible builds in case of binary distribution, or that providers are brought into the position to compile and deploy the code on their own.

"We should not only debate the Huawei case but extend the discussion to all critical infrastructure." says Max Mehl, FSFE Programme Manager. "Only with Free and Open Source Software, transparency and accountability can be guaranteed. This is a long-known crucial precondition for security and trust. We expect from state actors to immediately implement this solution not only for the Huawei case but for all comparable IT security issues."

Support FSFE, join the Fellowship
Make a one time donation

09 Feb 12:38

Invisible Formatting

To avoid errors like this, we render all text and pipe it through OCR before processing, fixing a handful of irregular bugs by burying them beneath a smooth, uniform layer of bugs.
03 Feb 01:40

James Coleman: PostgreSQL at Scale: Database Schema Changes Without Downtime

Braintree Payments uses PostgreSQL as its primary datastore. We rely heavily on the data safety and consistency guarantees a traditional relational database offers us, but these guarantees come with certain operational difficulties. To make things even more interesting, we allow zero scheduled functional downtime for our main payments processing services.

Several years ago we published a blog post detailing some of the things we had learned about how to safely run DDL (data definition language) operations without interrupting our production API traffic.

Since that time PostgreSQL has gone through quite a few major upgrade cycles — several of which have added improved support for concurrent DDL. We’ve also further refined our processes. Given how much has changed, we figured it was time for a blog post redux.

In this post we’ll address the following topics:

First, some basics

For all code and database changes, we require that:

  • Live code and schemas be forward-compatible with updated code and schemas: this allows us to roll out deploys gradually across a fleet of application servers and database clusters.
  • New code and schemas be backward-compatible with live code and schemas: this allows us to roll back any change to the previous version in the event of unexpected errors.

For all DDL operations we require that:

  • Any exclusive locks acquired on tables or indexes be held for at most ~2 seconds.
  • Rollback strategies do not involve reverting the database schema to its previous version.

Transactionality

PostgreSQL supports transactional DDL. In most cases, you can execute multiple DDL statements inside an explicit database transaction and take an “all or nothing” approach to a set of changes. However, running multiple DDL statements inside a transaction has one serious downside: if you alter multiple objects, you’ll need to acquire exclusive locks on all of those objects in a single transactions. Because locks on multiple tables creates the possibility of deadlock and increases exposure to long waits, we do not combine multiple DDL statements into a single transaction. PostgreSQL will still execute each separate DDL statement transactionally; each statement will be either cleanly applied or fail and the transaction rolled back.

Note: Concurrent index creation is a special case. Postgres disallows executing CREATE INDEX CONCURRENTLY inside an explicit transaction; instead Postgres itself manages the transactions. If for some reason the index build fails before completion, you may need to drop the index before retrying, though the index will still never be used for regular queries if it did not finish building successfully.

Locking

PostgreSQL has many different levels of locking. We’re concerned primarily with the following table-level locks since DDL generally operates at these levels:

  • ACCESS EXCLUSIVE: blocks all usage of the locked table.
  • SHARE ROW EXCLUSIVE: blocks concurrent DDL against and row modification (allowing reads) in the locked table.
  • SHARE UPDATE EXCLUSIVE: blocks concurrent DDL against the locked table.

Note: “Concurrent DDL” for these purposes includes VACUUM and ANALYZE operations.

All DDL operations generally necessitate acquiring one of these locks on the object being manipulated. For example, when you run:

https://medium.com/media/b1ba327e98b89a84461c915a075c77aa/href

PostgreSQL attempts to acquire an ACCESS EXCLUSIVE lock on the table foos. Atempting to acquire this lock causes all subsequent queries on this table to queue until the lock is released. In practice your DDL operations can cause other queries to back up for as long as your longest running query takes to execute. Because arbitrarily long queueing of incoming queries is indistinguishable from an outage, we try to avoid any long-running queries in databases supporting our payments processing applications.

But sometimes a query takes longer than you expect. Or maybe you have a few special case queries that you already know will take a long time. PostgreSQL offers some additional runtime configuration options that allow us to guarantee query queueing backpressure doesn’t result in downtime.

Instead of relying on Postgres to lock an object when executing a DDL statement, we acquire the lock explicitly ourselves. This allows us to carefully control the time the queries may be queued. Additionally when we fail to acquire a lock within several seconds, we pause before trying again so that any queued queries can be executed without significantly increasing load. Finally, before we attempt lock acquisition, we query pg_locks¹ for any currently long running queries to avoid unnecessarily queueing queries for several seconds when it is unlikely that lock acquisition is going to succeed.

Starting with Postgres 9.3, you adjust the lock_timeout parameter to control how long Postgres will allow for lock acquisition before returning without acquiring the lock. If you happen to be using 9.2 or earlier (and those are unsupported; you should upgrade!), then you can simulate this behavior by using the statement_timeout parameter around an explicit LOCK <table> statement.

In many cases an ACCESS EXCLUSIVE lock need only be held for a very short period of time, i.e., the amount of time it takes Postgres to update its "catalog" (think metadata) tables. Below we'll discuss the cases where a lower lock level is sufficient or alternative approaches for avoiding long-held locks that block SELECT/INSERT/UPDATE/DELETE.

Note: Sometimes holding even an ACCESS EXCLUSIVE lock for something more than a catalog update (e.g., a full table scan or even rewrite) can be functionally acceptable when the table size is relatively small. We recommend testing your specific use case against realistic data sizes and hardware to see if a particular operation will be "fast enough". On good hardware with a table easily loaded into memory, a full table scan or rewrite for thousands (possibly even 100s of thousands) of rows may be "fast enough".

Table operations

Create table

In general, adding a table is one of the few operations we don’t have to think too hard about since, by definition, the object we’re “modifying” can’t possibly be in use yet. :D

While most of the attributes involved in creating a table do not involve other database objects, including a foreign key in your initial table definition will cause Postgres to acquire a SHARE ROW EXCLUSIVE lock against the referenced table blocking any concurrent DDL or row modifications. While this lock should be short-lived, it nonetheless requires the same caution as any other operation acquiring such a lock. We prefer to split these into two separate operations: create the table and then add the foreign key.

Drop table

Dropping a table requires an exclusive lock on that table. As long as the table isn’t in current use you can safely drop the table. Before allowing a DROP TABLE ... to make its way into our production environments we require documentation showing when all references to the table were removed from the codebase. To double check that this is the case you can query PostgreSQL's table statistics view pg_stat_user_tables² confirming that the returned statistics don't change over the course of a reasonable length of time.

Rename table

While it’s unsurprising that a table rename requires acquiring an ACCESS EXCLUSIVE lock on the table, that's far from our biggest concern. Unless the table is not being read from or written to, it's very unlikely that your application code could safely handle a table being renamed underneath it.

We avoid table renames almost entirely. But if a rename is an absolute must, then a safe approach might look something like the following:

  1. Create a new table with the same schema as the old one.
  2. Backfill the new table with a copy of the data in the old table.
  3. Use INSERT and UPDATE triggers on the old table to maintain parity in the new table.
  4. Begin using the new table.

Other approaches involving views and/or RULEs may also be viable depending on the performance characteristics required.

Column operations

Note: For column constraints (e.g., NOT NULL) or other constraints (e.g., EXCLUDES), see Constraints.

Add column

Adding a column to an existing table generally requires holding a short ACCESS EXCLUSIVE lock on the table while catalog tables are updated. But there are several potential gotchas:

Default values: Introducing a default value at the same time of adding the column will cause the table to be locked while the default value in propagated for all rows in the table. Instead, you should:

  1. Add the new column (without the default value).
  2. Set the default value on the column.
  3. Backfill all existing rows separately.

Note: In the recently release PostgreSQL 11, this is no longer the case for non-volatile default values. Instead adding a new column with a default value only requires updating catalog tables, and any reads of rows without a value for the new column will magically have it “filled in” on the fly.

Not-null constraints: Adding a column with a NOT NULL constraint is only possible if there are no existing rows or a DEFAULT is also provided. If there are no existing rows, then the change is effectively equivalent to a catalog only change. If there are existing rows and you are also specifying a default value, then the same caveats apply as above with respect to default values.

Note: Adding a column will cause all SELECT * FROM ... style queries referencing the table to begin returning the new column. It is important to ensure that all currently running code safely handles new columns. To avoid this gotcha in our applications we require queries to avoid * expansion in favor of explicit column references.

Change column type

In the general case changing a column’s type requires holding an exclusive lock on a table while the entire table is rewritten with the new type.

There are a few exceptions:

Note: Even though one of the exceptions above was added in 9.1, changing the type of an indexed column would always rewrite the index even if a table rewrite was avoided. In 9.2 any column data type that avoids a table rewrite also avoids rewriting the associated indexes. If you’d like to confirm that your change won’t rewrite the table or any indexes, you can query pg_class³ and verify the relfilenode column doesn't change.

If you need to change the type of a column and one of the above exceptions doesn’t apply, then the safe alternative is:

  • Add a new column new_<column>.
  • Dual write to both columns (e.g., with a BEFORE INSERT/UPDATE trigger).
  • Backfill the new column with a copy of the old column’s values.
  • Rename <column> to old_<column> and new_<column> inside a single transaction and explicit LOCK <table> statement.
  • Drop the old column.

Drop column

It goes without saying that dropping a column is something that should be done with great care. Dropping a column requires an exclusive lock on the table to update the catalog but does not rewrite the table. As long as the column isn’t in current use you can safely drop the column. It’s also important to confirm that the column is not referenced by any dependent objects that could be unsafe to drop. In particular, any indexes using the column should be dropped separately and safely with DROP INDEX CONCURRENTLY since otherwise they will be automatically dropped along with the column under an ACCESS EXCLUSIVE lock. You can query pg_depend for any dependent objects.

Before allowing a ALTER TABLE ... DROP COLUMN ... to make its way into our production environments we require documentation showing when all references to the column were removed from the codebase. This process allows us to safely roll back to the release prior to the one that dropped the column.

Note: Dropping a column will require that you update all views, triggers, function, etc. that rely on that column.

Index operations

Create index

The standard form of CREATE INDEX ... acquires an ACCESS EXCLUSIVE lock against the table being indexed while building the index using a single table scan. In contrast, the form CREATE INDEX CONCURRENTLY ... acquires an SHARE UPDATE EXCLUSIVE lock but must complete two table scans (and hence is somewhat slower). This lower lock level allows reads and writes to continue against the table while the index is built.

Caveats:

  • Multiple concurrent index creations on a single table will not return from either CREATE INDEX CONCURRENTLY ... statement until the slowest one completes.
  • CREATE INDEX CONCURRENTLY ... may not be executed inside of a transaction but does maintain transactions internally. This holding open a transaction means that no auto-vacuums (against any table in the system) will be able to cleanup dead tuples introduced after the index build begins until it finishes. If you have a table with a large volume of updates (particularly bad if to a very small table) this could result in extremely sub-optimal query execution.
  • CREATE INDEX CONCURRENTLY ... must wait for all transactions using the table to complete before returning.

Drop index

The standard form of DROP INDEX ... acquires an ACCESS EXCLUSIVE lock against the table with the index while removing the index. For small indexes this may be a short operation. For large indexes, however, file system unlinking and disk flushing can take a significant amount of time. In contrast, the form DROP INDEX CONCURRENTLY ... acquires a SHARE UPDATE EXCLUSIVE lock to perform these operations allowing reads and writes to continue against the table while the index is dropped.

Caveats:

  • DROP INDEX CONCURRENTLY ... cannot be used to drop any index that supports a constraint (e.g., PRIMARY KEY or UNIQUE).
  • DROP INDEX CONCURRENTLY ... may not be executed inside of a transaction but does maintain transactions internally. This holding open a transaction means that no auto-vacuums (against any table in the system) will be able to cleanup dead tuples introduced after the index build begins until it finishes. If you have a table with a large volume of updates (particularly bad if to a very small table) this could result in extremely sub-optimal query execution.
  • DROP INDEX CONCURRENTLY ... must wait for all transactions using the table to complete before returning.

Note: DROP INDEX CONCURRENTLY ... was added in Postgres 9.2. If you're still running 9.1 or prior, you can achieve somewhat similar results by marking the index as invalid and not ready for writes, flushing buffers with the pgfincore extension, and the dropping the index.

Rename index

ALTER INDEX ... RENAME TO ... requires an ACCESS EXCLUSIVE lock on the index blocking reads from and writes to the underlying table. However a recent commit expected to be a part of Postgres 12 lowers that requirement to SHARE UPDATE EXCLUSIVE.

Reindex

REINDEX INDEX ... requires an ACCESS EXCLUSIVE lock on the index blocking reads from and writes to the underlying table. Instead we use the following procedure:

  • Create a new index concurrently that duplicates the existing index definition.
  • Drop the old index concurrently.
  • Rename the new index to match the original index’s name.

Note: If the index you need to rebuild backs a constraint, remember to re-add the constraint as well (subject to all of the caveats we’ve documented.)

Constraints

NOT NULL Constraints

Removing an existing not-null constraint from a column requires an exclusive lock on the table while a simple catalog update is performed.

In contrast, adding a not-null constraint to an existing column requires an exclusive lock on the table while a full table scan verifies that no null values exist. Instead you should:

  1. Add a CHECK constraint requiring the column be not-null with ALTER TABLE <table> ADD CONSTRAINT <name> CHECK (<column> IS NOT NULL) NOT VALID;. The NOT VALID tells Postgres that it doesn't need to scan the entire table to verify that all rows satisfy the condition.
  2. Manually verify that all rows have non-null values in your column.
  3. Validate the constraint with ALTER TABLE <table> VALIDATE CONSTRAINT <name>;. With this statement PostgreSQL will block acquisition of other EXCLUSIVE locks for the table, but will not block reads or writes.

Bonus: There is currently a patch in the works (and possibly it will make it into Postgres 12) that will allow you to create a NOT NULL constraint without a full table scan if a CHECK constraint (like we created above) already exists.

Foreign keys

ALTER TABLE ... ADD FOREIGN KEY requires a SHARE ROW EXCLUSIVE lock (as of 9.5) on both the altered and referenced tables. While this won't block SELECT queries, blocking row modification operations for a long period of time is equally unacceptable for our transaction processing applications.

To avoid that long-held lock you can use the following process:

  • ALTER TABLE ... ADD FOREIGN KEY ... NOT VALID: Adds the foreign key and begins enforcing the constraint for all new INSERT/UPDATE statements but does not validate that all existing rows conform to the new constraint. This operation still requires SHARE ROW EXCLUSIVE locks, but the locks are only briefly held.
  • ALTER TABLE ... VALIDATE CONSTRAINT <constraint>: This operation checks all existing rows to verify they conform to the specified constraint. Validation requires a SHARE UPDATE EXCLUSIVE so may run concurrently with row reading and modification queries.

Check constraints

ALTER TABLE ... ADD CONSTRAINT ... CHECK (...) requires an ACCESS EXCLUSIVE lock. However, as with foreign keys, Postgres supports breaking the operation into two steps:

  • ALTER TABLE ... ADD CONSTRAINT ... CHECK (...) NOT VALID: Adds the check constraint and begins enforcing it for all new INSERT/UPDATE statements but does not validate that all existing rows conform to the new constraint. This operation still requires an ACCESS EXCLUSIVE lock.
  • ALTER TABLE ... VALIDATE CONSTRAINT <constraint>: This operation checks all existing rows to verify they conform to the specified constraint. Validation requires a SHARE UPDATE EXCLUSIVE on the altered table so may run concurrently with row reading and modification queries. A ROW SHARE lock is held on the reference table which will block any operations requiring exclusive locks while validating the constraint.

Uniqueness constraints

ALTER TABLE ... ADD CONSTRAINT ... UNIQUE (...) requires an ACCESS EXCLUSIVE lock. However, Postgres supports breaking the operation into two steps:

  • Create a unique index concurrently. This step will immediately enforce uniqueness, but if you need a declared constraint (or a primary key), then continue to add the constraint separately.
  • Add the constraint using the already existing index with ALTER TABLE ... ADD CONSTRAINT ... UNIQUE USING INDEX <index>. Adding the constraint still requires an ACCESS EXCLUSIVE lock, but the lock will only be held for fast catalog operations.

Note: If you specify PRIMARY KEY instead of UNIQUE then any non-null columns in the index will be made NOT NULL. This requires a full table scan which currently can't be avoided. See NOT NULL Constraints for more details.

Exclusion constraints

ALTER TABLE ... ADD CONSTRAINT ... EXCLUDE USING ... requires an ACCESS EXCLUSIVE lock. Adding an exclusion constraint builds the supporting index, and, unfortunately, there is currently no support for using an existing index (as you can do with a unique constraint).

Enum Types

CREATE TYPE <name> AS (...) and DROP TYPE <name> (after verifying there are no existing usages in the database) can both be done safely without unexpected locking.

Modifying enum values

ALTER TYPE <enum> RENAME VALUE <old> TO <new> was added in Postgres 10. This statement does not require locking tables which use the enum type.

Deleting enum values

Enums are stored internally as integers and there is no support for gaps in the valid range, removing a value would currently shifting values and rewriting all rows using those values. PostgreSQL does not currently support removing values from an existing enum type.

Announcing Pg_ha_migrations for Ruby on Rails

We’re also excited to announce that we have open-sourced our internal library pg_ha_migrations. This Ruby gem enforces DDL safety in projects using Ruby on Rails and/or ActiveRecord with an emphasis on explicitly choosing trade-offs and avoiding unnecessary magic (and the corresponding surprises). You can read more in the project’s README.

Footnotes

[1] You can find active long-running queries and the tables they lock with the following query:

https://medium.com/media/90ee0e73f1d666273b12ad4df0ce2dfd/href

[2] You can see PostgreSQL’s internal statistics about table accesses with the following query:

https://medium.com/media/571d5801ea7602f91f4c6cf98361de39/href

[3] You can see if DDL causes a relation to be rewritten by seeing if the relfilenode value changes after running the statement:

https://medium.com/media/4526240441c8b45733d22b7b04326d48/href

[4] You can find objects (e.g., indexes) that depend on a specific column by running the statement:

https://medium.com/media/5dfc04bc00958bcd9a44f3568c73a49c/href

PostgreSQL at Scale: Database Schema Changes Without Downtime was originally published in Braintree Product and Technology on Medium, where people are continuing the conversation by highlighting and responding to this story.

16 Jan 22:50

Missal of Silos

Welcome to Wyoming, motto "We'd like to clarify that Cheyenne Mountain is in Colorado."
16 Dec 01:12

Laptop Issues

L

Computiŋ is becomiŋ unſuſtainable.

Hang on, we got a call from the feds. They say we can do whatever with him, but the EPA doesn't want that laptop in the ocean. They're sending a team.
07 Nov 20:12

ENEM – Exame Nabucodonosor do Ensino Médio

by Helder Nozima

Entra ano, sai ano, e há duas certezas que você ter sobre o Exame Nacional do Ensino Médio (Enem). A primeira é a de que você vai poder fazer vídeos constrangedores dos alunos que chegam atrasado. A segunda é a de que a prova será criticada por suas questões com forte viés ideológico. O ENEM 2018 não podia ser diferente.

De todas as polêmicas, a que está causando mais barulho é a que pergunta sobre o “dialeto secreto” dos travestis, o pajubá, que usa termos da língua iorubá. A maneira usada pelo examinador para saber se o aluno sabe o que é um dialeto foi questionada até pelo presidente eleito do Brasil, Jair Bolsonaro, que considerou a pergunta uma supervalorização da questão LGBT. Por outro lado, há pessoas que consideram exagerada a reação à pergunta. Ela não encorajaria nenhum tipo de engajamento homossexual e tamanha aversão apenas contribuiria para o avanço da homofobia no Brasil.

Quem tem a razão? Antes de responder, gostaria de explorar um outro exame feito na Bíblia. Assim como o Enem, esse exame era um pré-requisito para ascender socialmente, era promovido pelo Estado e tinha objetivos bem específicos.

A escola de Nabucodonosor
A história deste exame está no livro de Daniel. No século VI a.C., o grande imperador da Babilônia, Nabucodonosor, havia acabado de conquistar vários povos, entre eles, os judeus. Como parte de sua política de dominação, os babilônios transportavam as elites dos povos conquistados para a sua capital, de modo a deixar o populacho sem liderança. Mas Nabucodonosor tinha mais um objetivo: ele queria desconstruir a identidade nacional de seus conquistados. E, para isso, ele queria que os jovens dessas elites se tornassem babilônios (também conhecidos como caldeus).

Disse o rei a Aspenaz, chefe dos seus eunucos, que trouxesse alguns dos filhos de Israel, tanto da linhagem real como dos nobres, jovens sem nenhum defeito, de boa aparência, instruídos em toda a sabedoria, doutos em ciência, versados no conhecimento e que fossem competentes para assistirem no palácio do rei e lhes ensinasse a cultura e a língua dos caldeus. Determinou-lhes o rei a ração diária, das finas iguarias da mesa real e do vinho que ele bebia, e que assim fossem mantidos por três anos, ao cabo dos quais assistiriam diante do rei. Entre eles, se achavam, dos filhos de Judá, Daniel, Hananias, Misael e Azarias. O chefe dos eunucos lhes pôs outros nomes, a saber: a Daniel, o de Beltessazar; a Hananias, o de Sadraque; a Misael, o de Mesaque; e a Azarias, o de Abede-Nego. (Daniel 1:3-7)

Não adiantava tentar transformar homens adultos em caldeus. Jovens eram mais flexíveis. Afinal, eles não deveriam apenas adquirir o conhecimento técnico necessário para trabalhar para o rei: eles deveriam aprender a cultura e a língua. Seus hábitos alimentares seriam mudados: agora eles comeriam a mesma comida do rei. E ganharam outros nomes, na língua babilônica. Foi isso o que aconteceu com o profeta Daniel e seus amigos Hananias, Misael e Azarias.

Há muitas similaridades entre o método de educação babilônico e a educação considerada ideal no Brasil. Recentemente, o Supremo Tribunal Federal (STF) proibiu a educação domiciliar.  Em seu voto, o ministro Ricardo Lewandowski enfatizou que o Estado deve participar da educação das crianças. O ministro Luiz Fux lembrou que a lei brasileira determina o acesso e a permanência da criança na escola. No Brasil, o Estado deve interferir na educação.

Além da interferência estatal, um outro ponto de excelência seria a educação integral, onde a criança passa o dia inteiro na escola e só entra em contato com a sua família à noite, quando todos estão cansados. Assim, o Estado não apenas participa, como acaba sendo o protagonista da educação, em se tratando de escolas públicas. Afinal, até a maioria das refeições acaba sendo dada pelo Governo. Acrescente a isso a noção de que o educador ideal forma um cidadão, e você tem a receita babilônica a pleno vapor. As escolas brasileiras não transmitem conhecimentos, elas querem educar, elas querem formar a cultura de seus alunos. Em outras palavras, há uma cultura e até uma “língua” a ser ensinada. Qualquer semelhança com o pajubá é mera coincidência.

Por fim, há a questão do nome. Nos tempos bíblicos, quando pais nomeavam seus filhos, isso era um sinal de autoridade. O nome escolhido transmitia alguma mensagem ou ideia, e era uma espécie de definidor de caráter. Ao mudar o nome de Daniel e seus amigos, a Babilônia estava exercendo essa autoridade em um nível extremamente pessoal. Era um sinal externo de que eles não eram mais judeus, mas caldeus. De certa forma, a educação brasileira quer forjar uma nova identidade. Por isso que ministros como Luiz Fux, consideram a educação domiciliar por motivos religiosos como uma “uma superproteção nociva à criança”.

O exame de Nabucodonosor
Mas, muito antes em se falar em mensuração de resultados, os caldeus já sabiam que era preciso medir a eficácia de sua filosofia educacional. E o examinador era a própria encarnação do Estado da época: o rei Nabucodonosor. Ele faria perguntas sobre matérias de “sabedoria e inteligência” e o resultado seria comparado com o da elite intelectual caldéia: os magos e encantadores. Se aprovados, os estrangeiros seriam parte dessa elite. Se reprovados, até a cabeça dos professores poderia ser cortada. Não há motivador melhor para o ensino do que esse.

Duvida? Basta ver a reação de Aspenaz quando Daniel e seus amigos se recusam a seguir a dieta real:

 Resolveu Daniel, firmemente, não contaminar-se com as finas iguarias do rei, nem com o vinho que ele bebia; então, pediu ao chefe dos eunucos que lhe permitisse não contaminar-se. Ora, Deus concedeu a Daniel misericórdia e compreensão da parte do chefe dos eunucos. Disse o chefe dos eunucos a Daniel: Tenho medo do meu senhor, o rei, que determinou a vossa comida e a vossa bebida; por que, pois, veria ele o vosso rosto mais abatido do que o dos outros jovens da vossa idade? Assim, poríeis em perigo a minha cabeça para com o rei. (Daniel 1:8-10)

Se Daniel e seus amigos estivessem “fora do padrão”, abatidos, diminuídos em relação aos demais, a vida de Aspenaz estava em risco. Por analogia, talvez Daniel até ficasse vivo, mas seria o fim de qualquer possibilidade de ascensão social, e é quase certo que uma vida de servidão o aguardava. Não havia meio termo: a vida dependia daquele exame.

O Enem está se tornando um exame assim. Há uma pressão para que o exame seja o critério principal e decisivo para ingresso em qualquer estabelecimento de ensino superior. Outras formas de seleção são desencorajadas e mal vistas. Não se faz o mesmo que outros países, como os EUA ou o Canadá, onde há o exame mas pode-se ingressar em uma faculdade pelo currículo, pelo desempenho esportivo ou artístico ou outros fatores que podem ser decisivos. Pior: no Brasil, considera-se que não há possibilidade de sucesso profissional fora das faculdades. Em países realmente desenvolvidos, um emprego de ensino médio pode muito bem te pagar mais do que certas faculdades.

“Se fere minha existência, eu serei resistência”
Aqui já deve estar claro qual o meu posicionamento sobre a pergunta do pajubá. Sim, talvez a resposta da pergunta seja sim algo válido de se aprender. Em se tratando de línguas, é bom que alunos saibam o que é um dialeto. O problema é a fôrma usada para a pergunta. Porque, ao analisarmos o quadro maior da educação brasileira, o que podemos ver é que o Enem é um instrumento de submissão ideológica, como afirma o crítico literário Rodrigo Gurgel:

Como afirmei em 25 de outubro de 2015 — e como muitos amigos estão lembrando aqui e em outras redes sociais —, o ENEM não é um exame, não é uma prova. Não… É um exercício de submissão ideológica. É o primeiro exercício de submissão ideológica antes da entrada na universidade, onde a submissão ideológica se completará. O governo não quer saber a opinião do estudante. Não… Quer apenas que o estudante concorde com a ideologia que o próprio governo defende, ensina e estimula. Se isso não é uma forma de totalitarismo, então o que é?

Há uma pauta política e cultural que justifica o uso dos travestis e de um dialeto derivado de uma língua africana na pergunta. Há método ao destacar um advogado como alguém que conhece o pajubá e o usa em ambientes mais formais. O objetivo está ligado à ideologia de gênero: legitimar o travestimento. Por isso a pergunta em um exame de acesso universitário, a ligação com a cultura africana, o uso de um advogado e o ambiente formal: tudo para dar legitimidade a um comportamento que não é bem visto por toda a sociedade. Isso explica também porque a imprensa está querendo eleger “Pablo Vittar como mulher mais sexy do Brasil” e Thammy como “homem mais sexy do Brasil”. Os fatos estão ligados. É essa a língua e a cultura que está se querendo ensinar.

E aí é que entra a lição que a Bíblia nos dá diante de um quadro educacional assim: resistir. Capitular pode não ser o fim da existência física, mas é o fim da existência identitária. Daniel não teve como escapar do exame, nem mesmo como evitar o aprendizado da língua e da cultura dos caldeus. Mas ele nunca capitulou diante de Nabucodonosor. Ele resistiu dentro do cabível, rejeitando as iguarias do rei e preservando a dieta prescrita na Lei de Moisés. Daniel e seus amigos se mantiveram como uma microcomunidade judia na corte babilônica. Preservaram sua fé, seus valores e sua consciência. E porque resistiram, o nome deles foi escrito na Bíblia e perdura até hoje.

Posteriormente, Daniel e seus amigos foram examinados por Nabucodonosor e aprovados. Eles entraram para o serviço público da Babilônia. E aí agiram como “sal na terra”, influenciando por dentro a máquina imperial, de modo que até o próprio Nabucodonosor reconheceu a superioridade do Deus de Daniel:

 Mas ao fim daqueles dias, eu, Nabucodonosor, levantei os olhos ao céu, tornou-me a vir o entendimento, e eu bendisse o Altíssimo, e louvei, e glorifiquei ao que vive para sempre, cujo domínio é sempiterno, e cujo reino é de geração em geração. Todos os moradores da terra são por ele reputados em nada; e, segundo a sua vontade, ele opera com o exército do céu e os moradores da terra; não há quem lhe possa deter a mão, nem lhe dizer: Que fazes? (Daniel 4:34-35)

O nosso papel no Brasil do século XXI é imitar a Daniel e a seus amigos. Como eles confiaram em Deus, devemos confiar em Jesus, que é Soberano sobre Nabucodonosor e sobre toda a máquina ideológica do Estado brasileiro. Devemos resistir, cada um em sua esfera.

Se alunos, façamos as provas e aprendamos os conteúdos, mas que a nossa comida verdadeira seja a Palavra de Deus, e não o alimento imundo da ideologia de gênero e do marxismo cultural. Se somos professores, servidores públicos, escritores, pais ou até presidentes, precisamos desmontar essa máquina e influenciar do lado de dentro. Como? Tendo uma conduta profissional irrepreensivel, colocando Deus no nosso trabalho, orando e falando o que é correto. Se até Nabucodonosor se curvou, por que não os discípulos de Gramsci e Marx?

Graça e paz do Senhor,

Helder Nozima
Barro nas mãos do Oleiro

01 Nov 20:28

A Reforma Anti-Totalitária e suas lições para o Brasil

by Helder Nozima

Publicado originalmente em 5 Calvinistas.

Sinto saudades de quando as eleições eram realizadas apenas no dia 15 de novembro. Então, outubro ainda podia ser o mês das crianças e da Reforma Protestante. No entanto, quis a Providência Divina que o Brasil realizasse eleições em outubro. Mais do que isso: em 2018 elas acontecem no domingo em que, tradicionalmente, celebraríamos o aniversário da Reforma Protestante. E há sabedoria nisso.

Martinho Lutero ainda não sabia disso, mas quando ele pregou suas 95 Teses na Catedral de Wittenberg, ele começou um movimento religioso que teria implicações políticas, culturais e econômicas. Até os estudiosos seculares se sentem obrigados a explicar a Reforma em seus cursos de História, porque ela é indispensável para compreender o mundo em que vivemos hoje. A fé nunca é apenas um assunto privado, ela é sempre o centro de um abalo sísmico que vai impactar toda a vida do fiel. E, no campo político, a Reforma foi um grito contra o totalitarismo simbolizado pelo papa.

A Bíblia e as constituições
O papado moderno foi forjado durante a Idade Média e é filho de seu tempo. A Igreja sempre foi descentralizada enquanto era perseguida no Império Romano. Houve um início de centralização quando Constantino reconheceu o cristianismo, no século IV, mas o fim do Império Romano voltou a fragmentar a Igreja ocidental. Ao longo da Idade Média, reis buscaram legitimar seu poder e centralizá-lo, lutando para diminuir o poder dos senhores feudais. De modo análogo, o Papado também reivindicou para si a supremacia sobre toda a Igreja e lutou contra reis para assumir o controle das nomeações eclesiásticas e sufocar aqueles que contestassem sua teologia e autoridade. O período medieval termina com reis absolutistas e papas com um imenso poder. Em suma: a Idade Média começa com uma Europa quase anárquica e termina com uma Europa quase totalitária.

Ao questionar publicamente as indulgências (o perdão de pecados concedido por meio de ofertas à Igreja) e apontar os desvios do catolicismo romano, Lutero fez um desafio imperdoável. O erro do reformador foi ter afirmado que, além de Deus, havia uma outra autoridade superior à do papa: a Bíblia Sagrada. Quando ele colocou as Escrituras como a norma a ser observada até mesmo pelo suposto sucessor de Pedro, Lutero desferiu um golpe inconsciente contra o totalitarismo medieval.

Esse deslocamento de autoridade teve repercussões que se fazem sentir até no Brasil do século XXI. Ao colocar a autoridade sobre as leis divinas, e não sobre o seu intérprete, Lutero deu uma justificação teológica para os governos constitucionais de nosso tempo. O poder de reis, presidentes, parlamentares e juízes é definido e limitado pelo texto constitucional. Em caso de abusos de poder, assim como Lutero apelou para a Palavra de Deus, hoje podemos apelar para o texto fundador do país: a Constituição.

Vale lembrar que isso afetou até mesmo os príncipes que protegeram Lutero quando a reação católica colocou a vida do reformador em perigo. Os príncipes alemães gostaram da descentralização de poder, mas talvez aspirassem a um totalitarismo local, menor. Com o passar do tempo, o apelo à Lei acabou alcançando todas as esferas de poder político ocidental, enterrando também o feudalismo e toda a estrutura política medieval.

Concílios e parlamentos
Uma vez estabelecida uma nova fonte de autoridade, é preciso ouvir o que ela diz. A Reforma foi, antes de tudo, uma tentativa de retorno e de resgate do ensino bíblico. E algo interessante a se notar é que nenhuma das denominações filhas da Reforma de Lutero adotou o episcopalismo, o governo da Igreja pelos bispos. As denominações protestantes que possuem bispos ou são filhas da Reforma Inglesa (metodistas, por exemplo) ou são filhas do movimento neopentecostal, o qual tem seu caráter protestante questionável.

De modo geral, duas formas de governo eclesiástico procederam do movimento inicial da Reforma: o governo congregacional e o governo presbiteriano da Igreja. A figura do bispo acima dos demais que decide as questões doutrinárias foi substitúido pelos concílios. O luteranismo formou seu corpo doutrinário na Confissão de Augsburgo, que teve Melanchton como principal redator, e não Lutero. João Calvino defendeu o governo da Igreja por meio de uma pluralidade de presbíteros e as doutrinas do calvinismo foram definidas em concílios posteriores, que produziram documentos como Os Cânones de Dort e a Confissão de Fé de Westminster, entre outros. Até mesmo os batistas decidiram sua doutrina de modo conciliar, produzindo as Confissões Batistas de Londres no século XVII.

A importância dos concílios é que eles são uma espécie de equivalente dos parlamentos. Diferentes pontos de vista são examinados por comissões, discutidos e chega-se a um acordo sobre o texto final. A primeira grande controvérsia teológica cristã foi resolvida de modo similar, no que ficou conhecido como Concílio de Jerusalém, registrado em Atos 15. De modo mais rotineiro, tanto as assembleias congregacionais como as reuniões de Conselhos de igrejas locais também cumprem uma espécie de papel legislativo. O clero não decide sozinho, ele precisa do consentimento da assembleia ou de seus representantes (os presbíteros) para governar a Igreja.

Liberdade: a doença e o antídoto
Contudo, há uma implicação negativa da Reforma, sempre lembrada pelos católicos. Ao evitar a centralização, a Reforma levou a um quadro nunca antes de visto de desfragmentação da Igreja. Ninguém sabe ao certo quantas denominações se divide o protestantismo, e muitas delas sequer carregam os fundamentos teológicos dos reformadores.

Por que isso acontece? Porque o maior problema da Reforma é uma de suas maiores virtudes: a liberdade. Ao tirar o poder de uma pessoa e lançá-lo sobre a Bíblia em si, a Reforma abriu a possibilidade de qualquer um examinar livremente a interpretação bíblica. Como é inevitável (e explico por quê a seguir), divergências surgiram. E, sem uma autoridade central a apelar, nada impediu que se criassem denominações diferentes.

Essa fragmentação era inevitável porque é uma consequência da liberdade em um mundo caído. O ensino bíblico afirma claramente que o pecado afetou o ser humano como um todo, inclusive nas áreas da razão, das emoções e dos desejos e vontades. Por esse motivo, a unidade espontânea de pensamento é inatingível neste mundo. Alie a isso a finitude dos seres humanos e você verá que é impossível que nós enxerguemos todos os lados de uma questão e vejamos tudo como Deus vê.

Mas essa fragmentação tão indesejada acaba sendo uma virtude celebrada na política. Os partidos políticos são como as diferentes denominações protestantes. Cada um deles possui (ou deveria possuir) um programa ideológico, com propostas concretas diferentes sobre como a Constituição deve ser interpretada e executada. E como a Constituição não é a Bíblia Sagrada, eles possuem visões diferentes até de como deveria ser o texto constitucional. Mas, embora sejam partidos diferentes, ainda são parte de um mesmo país. E essa pluralidade político-partidária tem evitado totalitarismos e corrigido erros por meio da alternância de poder.

E é aí que a liberdade trazida pela Reforma se transforma em cura. O que os católicos não entendem é que, embora existam muitas denominações, os protestantes se vêem como parte de uma única Igreja de Cristo. Por isso não digo “igrejas” protestantes, mas sim “denominações”. E, assim como os partidos políticos podem ser classificados em grandes categorias, também as denominações, embora muitas, acabam seguindo um número bem menor de escolas protestantes de pensamento. Há esquerda e há direita, mas há calvinistas, luteranos, herdeiros do anglicanismo, batistas e pentecostais. Dificilmente alguma denominação estaria fora desse enquadramento geral.

Mais do que isso: as diferentes tradições protestantes se complementam. Por mais que eu, por exemplo, considere a tradição calvinista como sendo a mais fiel intérprete do texto bíblico, aprecio muito as contribuições que outras tradições trouxeram ao cristianismo. Este blog é uma pequena demonstração disso, pois embora sejamos cinco calvinistas, todos temos algumas afinidades com outras tradições que moldaram ou moldam a nossa fé até hoje.

E o Brasil?
Mas vamos parar de falar de 1517 e irmos a 2018. Hoje, às vésperas do segundo turno de eleições presidenciais, o país todo teme a volta do totalitarismo. Um grupo teme o advento de uma ditadura socialista, outro o de uma ditadura militar. E aqui eu convido os dois lados a encontrarem na Reforma e nas Escrituras os princípios que podem evitar esse perigo.

A Reforma é o reconhecimento de que o ser humano é pecador e que nenhum de nós pode ter poderes em excesso. Se trouxermos esse reconhecimento para a esfera civil, entenderemos que nenhum político, partido ou Estado pode ter um poder ilimitado. É preciso que tenhamos um documento, uma constituição para a qual possamos apelar, inclusive contra as autoridades constituídas, caso elas se corrompam.

Além do limite constitucional, é preciso que o poder seja compartilhado. Esse compartilhamento pode ser maior ou menor (congregacionais e presbiterianos que o digam), mas é necessário. O povo não apenas deve ser ouvido, mas também deve assumir a responsabilidade de aprovar leis e governar.

E, uma vez que a unidade perfeita só virá quando Cristo voltar, é preciso que convivamos com uma pluralidade de opiniões. Claro, é preciso que exista um consenso em torno de valores básicos e essenciais. Mas há amplo espaço para debates e discordâncias respeitosas em assuntos secundários. A liberdade sempre trará diferenças consigo. E, desde que o principal seja preservado, a liberdade não é uma inimiga da unidade que desejamos como Brasil.

Graça e paz do Senhor,

Helder Nozima
Barro nas mãos do Oleiro

01 Nov 15:33

Ponha mais Evangelho nisso, Antônio!

by Helder Nozima

No início da minha carreira ministerial, um dos pastores que me foram apontados como exemplo era o Rev. Antônio Carlos Costa, pastor da Igreja Presbiteriana da Barra da Tijuca e fundador da ONG Rio de Paz. Ele foi um referencial de como seria possível ser evangélico e ter um profundo engajamento social na tentativa de transformar o Brasil em um país mais seguro e melhor. E, indiscutivelmente, Antônio Costa tem obras que o credenciam nesse sentido. Protestou contra as condições de presídios fluminenses, contra assassinatos não resolvidos e ajudou a atrair a imprensa estrangeira para a violência no Rio de Janeiro, entre outros. De fato, eu cheguei a admirá-lo e eu mesmo o apontei como exemplo a outros colegas. Mas, algo mudou.

O discurso de Antônio Costa foi tornando-se cada vez mais próximo do marxismo. Suas críticas vêm sendo cada vez mais desbalanceadas, com um tom muito mais forte com a direita do que com a esquerda. Um dos sinais disso é ver que, para Costa, o apoio de vários grupos evangélicos a Bolsonaro foi pior para a democracia do que a tentativa de assassinato do candidato, a faca, em Juiz de Fora. Nas próprias palavras dele: “Vou morrer afirmando: o apoio ACRÍTICO, EFUSIVO, INSTITUCIONAL, da igreja a Jair Bolsonaro foi página mais triste da história do protestantismo brasileiro.”

A página mais triste? Creio que eventos muito mais escandalosos, como o adultério de líderes evangélicos de projeção nacional, a oração da propina feita por parlamentares evangélicos e até o pastor dizendo na TV que a Bíblia mandou que ele adulterasse com a mulher de um amigo dele foram páginas mais tristes!

Mas há mais. Para Costa, a postura evangélica nas eleições de 2018 mostraram a necessidade de uma nova Reforma. Veja bem: concordo que há necessidade. Os púlpitos estão tomados de psicólogos baratos. Pastores e presbíteros não confrontam o pecado e nem usam a disciplina eclesiástica porque usam um conceito barato de graça. Temos evangélicos que não sabem o que é Trindade e a maioria nunca leu a Bíblia toda. Mas nada disso é tão grave quanto Jair Bolsonaro. Costa chegou inclusive a gravar um vídeo sobre o assunto. E entendo que é necessário responder às acusações feitas por ele.

Apoio acrítico, incondicional e institucional
Costa aponta cinco pecados “gravíssimos” da Igreja brasileira. O primeiro seria o apoio “acrítico, incondicional e institucional” a Jair Bolsonaro. Que tal começarmos com a própria denominação do pastor: a Igreja Presbiteriana do Brasil (IPB). Em nota, o presidente do Supremo Concílio, Rev. Roberto Brasileiro, afirmou: “Entendemos que os membros de nossas igrejas e seus oficiais e ministros têm liberdade de escolha nas eleições e a Igreja, de maneira alguma indicará em quem se deve ou não se deve votar.” Onde há apoio, de qualquer tipo, da instituição a um candidato?

O mesmo pode ser dito da Convenção Batista do Estado de São Paulo (CBESP), que diz muito claramente que: “acreditamos que cada pessoa tem o direito de exercer sua escolha e voto conforme a sua consciência”. O mesmo fez a Igreja Metodista: “deixamos claro que a Igreja Metodista não apoia nenhum candidato ou candidata de maneira específica.” Tampouco vi qualquer palavra institucional de outras denominações protestantes históricas de apoio à candidatura de quem quer que seja.

Não nego que tenham existido pastores, igrejas locais e até denominações que possam ter dado um apoio institucional à campanha de Jair Bolsonaro. Tal fato, porém, não caracteriza todo o protestantismo brasileiro, e nem seria novo, já que há muito tempo denominações pentecostais e neopentecostais declaram apoio a algum candidato. Mesmo quando pastores, usando seu direito de cidadãos, declararam tal apoio, não conheço um que não tenha deixado claro que apoio não significa endosso total do posicionamento do candidato. Ao contrário, cheguei a ver pastores que declararam voto em Bolsonaro, mas deixando bem claro suas críticas. Um exemplo é o Pr. Yago Martins: “Eu não gosto nada do BOLSONARO. Mas é ele ou o que há de pior, de mais vilanesco, de mais imoral, de mais corrupto, de mais anti-cristão de TODA política nacional. Achar que tanto faz, que BOLSONARO é pior que PT, é estar sujeito a uma mentalidade de trevas.”

Antônio Costa mente. Sua primeira acusação é que é pecaminosa, por querer imputar uma culpa que não existe. Os evangélicos votaram individualmente, seguindo a sua consciência, em Bolsonaro. Costa deveria expor os pecados do petismo para entender porquê.

Ataques aos cristãos nas redes sociais
Costa afirma considerar inadmissíveis os “ataques dos cristãos nas redes sociais”. Nenhuma doutrina central do cristianismo estaria em jogo para justificar os ataques que ele presenciou em redes sociais. Sobre isso, concordo que houve, há e haverá muitos pecados de língua cometidos por cristãos em debates na Internet. Tais pecados devem ser combatidos, lamentados e até disciplinados. Solidarizo-me com ele quanto a isso. Mas, infelizmente, ainda há parcialidade na acusação do pastor.

Costa se queixa de que cristãos antipetistas não teriam preservado a honra de pessoas por quem Cristo morreu quando falaram de modo agressivo na Internet. Porém, eu me pergunto se ele teve o mesmo cuidado:

“Usaram em vão o nome de Deus nessa eleição. Associaram o evangelho à espécie de mundo que botou Cristo num pau de arara chamado cruz. Quem permanecer calado perante esse crime de lesa-cristianismo terá dificuldade de dizer que o evangelho é o valor supremo da sua vida.” (Desde quando votar em Bolsonaro é um endosso à tortura? Que pesada acusação é essa?)

“Difícil de entender, em nome da moral evangélica evangélicos permitiram nessas eleições que o evangelho fosse pisoteado. Associaram-no ao discurso -anti-processo civilizatório-, e milhões se silenciaram por não quererem prejudicar seus interesses políticos.” (Você disse mesmo que milhões de evangélicos pisotearam o Evangelho, favorecem o anti-civilismo, por causa de interesses políticos?)

“Um santo estragado, um fariseu, um inquisidor ou um mágico propiciam mais diversão no inferno do que um simples tirano ou libertino”. C.S. Lewis” (Citou C S Lewis pra acusar quem pensa diferente de ser um santo estragado, fariseu, inquisidor e mágico? Que leve acusação contra irmãos em Cristo!)

Quem é Antônio Costa para emitir julgamentos tão pesados sobre a salvação e a moral de milhões que, democraticamente, não votaram como ele? Como ele pode posar de santo ofendido com o nível das críticas se ele faz generalizações tão gritantes em seu Twitter? Um tom polido e erudito tiram a ofensa dessas declarações?

E pergunto mais: não houve ofensas do outro lado? Basta uma visita a página “Ódio do Bem” (presente em várias outras redes sociais) para ver como petistas lançaram acusações pesadíssimas contra quem pensa e vota diferente. Eu mesmo desfiz amizades com cristãos que afirmaram serem fascistas os que votam em Bolsonaro. Por que Costa só aponta o pecado dos antipetistas? Por que ele não condena os excessos verbais, os xingamentos, a condenação de fariseus lançada por vários eleitores de Fernando Haddad? Talvez porque ele tenha feito o mesmo em seus tuites, como mostrei acima.

Desrespeito à diversidade de opinião
O terceiro pecado gravíssimo seria o desrespeito à diversidade de opinião na igreja, a ponto de “deixar o ar irrespirável” para quem não apoiava Bolsonaro. Segundo ele, esse ar irrespirável vem do apoio institucional, sobre o qual já demonstramos acima que não é verdadeiro. Logo, o fundamento colocado pelo próprio Costa é inválido.

Mas aqui ainda quero acrescentar algumas ponderações. O grande problema dos evangélicos não foi com eleitores de Amoedo, Marina Silva ou Geraldo Alckmin. O problema foi o PT e sua agenda moral e econômica, onde se viu um risco real à liberdade religiosa e à segurança econômica. Não é um temor infundado: basta ver o que acontece com países que seguem o socialismo, como Cuba, Venezuela e Coreia do Norte. Se foi formada uma maioria, isso não é, per se, algo ruim. Talvez a maioria exista por ser um desdobramento natural da própria fé evangélica.

O documento que melhor mostra é isso é a Carta Aberta à Igreja Brasileira, assinada por vários pastores protestantes de renome. A carta não apóia Bolsonaro, mas recomenda “Rejeite candidatos com ênfases intervencionistas na esfera familiar, educacional, eclesiástica e artística”. Outra recomendação é “Apoie propostas que defendam a dignidade do ser humano e a vida em qualquer circunstância, desde sua concepção no ventre materno”. Sobre esses assuntos deveria haver unidade dentro do meio evangélico. Querer liberdade para, por exemplo, não considerar o embrião no ventre materno como tendo direito à vida, seria totalmente indesejável! Ou apoiar interferências do Estado na vida eclesiástica!

A maioria é desejável. Mas, se há discordância, a Carta Aberta aconselha: “ao indicar um candidato para amigos e familiares, faça-o com respeito às opiniões diferentes da sua”. Onde há o tal desrespeito à diversidade de opiniões? Ele pode até ter ocorrido individualmente e até em algumas igrejas ou denominações pentecostais e neopentecostais. Mas não ocorreu, de modo institucional, dentro do protestantismo como um todo.

Faltou preocupação com os não cristãos
Para Costa, o apoio evangélico a Bolsonaro prejudicou a credibilidade da Igreja na evangelização. Segundo ele, os brasileiros, ao verem o comportamento evangélico nas eleições, não desejarão ouvir a pregação. Milhões estariam escandalizados.

Há várias maneiras de responder. Jesus escandalizou várias pessoas em seu ministério (Mateus 13:57, Marcos 6:3, etc). O derramar do Espírito Santo no dia de Pentecostes gerou perplexidade e zombaria (Atos 2:1-13). A carreira do apóstolo Paulo foi marcada por vários tumultos causados por pessoas que se escandalizavam com o Evangelho (Atos 13:45, 16:19-23, 19:23-41, etc). O Evangelho causa escândalos, anormal é quando ele não escandaliza a ninguém. Costa mesmo dá um exemplo disso: o vídeo onde várias pessoas de esquerda marcham ameaçando a Igreja, dizendo “Igreja fascista, tu tá na nossa lista”. O “fascismo” da Igreja não é por causa do voto em Bolsonaro: é porque a Igreja condena o homossexualismo, a imoralidade sexual e o comunismo, em respeito aos ensinos do próprio Evangelho.

Mas, a julgar pelo resultado das votações, a maior parte dos brasileiros não concorda com Costa. Afinal, a maioria votou Bolsonaro. Além disso, de modo conveniente, Costa se esquece do escândalo que foi causado pelos pastores que demonstraram apoio a Fernando Haddad, o candidato do PT. Ou do escândalo causado pela própria presença de Haddad em uma missa. Por que o escândalo apenas de um lado?

Na verdade, não havia uma saída para a Igreja nessas eleições que não pudesse escandalizar não cristãos. Até o silêncio seria condenável. Como pode a Igreja ficar calada no meio de tantas acusações de corrupção, da ameaça de uma ditadura bolivariana, do candidato que recebia ordens de um presidiário?

Não cristãos seriam escandalizados de qualquer maneira. A questão é assumir um posicionamento que traga o escândalo correto. Costa erra ao imaginar que havia alguma possibilidade que não escandalizasse a ninguém.

Não preocupação com a pureza do Evangelho
Por fim, o último pecado gravíssimo seria a falta de preocupação com a pureza do Evangelho pelo fato de Bolsonaro usar como slogan “Brasil acima de tudo, Deus acima de todos”. Para Costa, isso foi uma espécie de sacrilégio. Como ele mesmo diz: “Tire o Evangelho disso!”

E é aqui que eu me permito rir um pouco. Normalmente, os fariseus é que se preocupam com formalismos e ritualismos enquanto se esquecem da substância das coisas. Os fariseus são os que, por causa de uma única regra, se esquecem de todo o resto e condenam pecadores. E Costa vê mais problemas em colocar Deus no slogan de uma campanha do que em outras campanhas que desejam promover uma agenda frontalmente contrária à lei de Deus: minando a família, o casamento, promovendo o aborto, sendo benigna com os criminosos, indultando corruptos, interferindo cada vez mais no dia-a-dia das igrejas. Sério mesmo, Costa?

A grande luta dos protestantes reformados (calvinistas) é exatamente a de proclamar com Abraham Kuyper que Jesus é soberano sobre cada centímetro quadrado da vida! O grande anseio de qualquer pastor cristão é que sua congregação entenda que tudo é de Deus e deve ser feito para a glória d’Ele! Até o Estado e suas autoridades:

” Portanto, quer comais, quer bebais ou façais outra coisa qualquer, fazei tudo para a glória de Deus.” (1 Coríntios 10:31)

“Porque dele, e por meio dele, e para ele são todas as coisas. A ele, pois, a glória eternamente. Amém!” (Romanos 11:36)

Todo homem esteja sujeito às autoridades superiores; porque não há autoridade que não proceda de Deus; e as autoridades que existem foram por ele instituídas. De modo que aquele que se opõe à autoridade resiste à ordenação de Deus; e os que resistem trarão sobre si mesmos condenação. (Romanos 13:1-2)

E é sobre Romanos 13 que eu quero chamar a atenção. Paulo estava ensinando ali que a Igreja deveria reconhecer a instituição divina da autoridade dos Césares, dos imperadores romanos, e de todas as demais autoridades romanas. Foi Roma quem crucificou a Cristo. Os judeus recorriam aos romanos para pedir a morte de Paulo. Roma não era uma sociedade sem injustiças, torturas e corrupção. Se seguir a lógica de Costa, Paulo manchou o Evangelho ao colocar a submissão aos imperadores romanos como uma ordem à Igreja! E Pedro cometeu o mesmo erro:

Sujeitai-vos a toda instituição humana por causa do Senhor, quer seja ao rei, como soberano, quer às autoridades, como enviadas por ele, tanto para castigo dos malfeitores como para louvor dos que praticam o bem. (…) Tratai todos com honra, amai os irmãos, temei a Deus, honrai o rei. (1 Pedro 2:13, 14, 17)

Eu entendi o que Costa quis dizer: Bolsonaro não tem um programa evangélico o suficiente para poder dizer “Deus acima de todos”. Mas ele nunca se propôs a isso. Bolsonaro nunca disse que ele era ungido de Deus para governar em nome dele (embora a autoridade do Presidente venha de Deus). O que o slogan dele mostra é que ele, Jair Bolsonaro, reconhece que Deus existe, que Ele está acima de tudo, e que Bolsonaro vai governar tendo isso em vista. E nada disso desonra o Evangelho ou o Novo Testamento. Na verdade, apenas constata uma verdade bíblica.

O slogan não difere do significado da Coroa britânica. No topo da coroa usada pelos reis ingleses, há uma cruz. O significado é o de que o imperador britânico não deve obediência a ninguém, a não ser a Deus. É essa coroa um objeto de blasfêmia ou um objeto de louvor a Deus? Ao meu ver, tanto a coroa como a frase possuem o seu lado positivo. Em um mundo secularizado, é louvável quando governantes ainda reconhecem que Deus existe e é superior. Calar-se e fingir que Deus não existe é ainda pior, é o sinal de um governante que vai agir como deus de si mesmo e que sequer reconhece a autoridade divina para julgar suas ações.

Back_of_the_Imperial_State_CrownBolsonaro pode estar apenas manipulando a fé? Pode, não conheço o coração dele. Mas aí, Deus é quem o julgará por isso. E a solução, Antônio Costa, não é “tirar o Evangelho disso”. A solução é por mais Evangelho nisso! Esse reconhecimento inicial, incipiente, vindo ainda de uma visão católico-romana e neopentecostal é um começo muito tímido, mas louvável em uma sociedade anticristã. É preciso mais Evangelho para que o reino de Cristo na esfera civil se torne ainda mais e mais visível.

Uma nova Reforma
Encerro dizendo que sim, a Igreja brasileira precisa de uma nova Reforma, mas não pelos motivos apresentados. Falta colocar Cristo e a Bíblia no centro das pregações, da vida cristã e da atuação dos cristãos em todas as áreas da vida. Falta usar a Bíblia como centro e ponto de partida para as reflexões sobre política, economia e direito. Falta mais Sola Scriptura.

Agora, Reforma também é purificação. É colocar a Bíblia como Rainha e a psicologia, a sociologia, o direito, a economia, a filosofia e a política como servas. É remover do ensino bíblico e teológico qualquer impureza trazida por visões de mundo anticristãs, como a marxista. É denunciar e destruir os ídolos do materialismo, da dialética hegeliana, do desejo de conformar-se ao que ensina uma Academia secularizada e relativista. Reforma é acreditar mais no que a Bíblia ensina sobre combate à pobreza e à violência do que naquilo que marxistas ensinam.

Sonho com uma Reforma de vida também, onde pastores não se coloquem tão precipitadamente como profetas, acusando injustamente homens que, como o próprio Antônio Costa admite, são melhores do que ele. Sonho com uma Reforma onde pastores que afirmam que o Espírito Santo sairá do nosso meio sejam cobrados pelo que dizem e, se não se cumprir, que sejam excluídos como falsos profetas. Sonho com uma Reforma na igreja brasileira onde pastores que mentem, exageram e são parciais em seu juízo sejam chamados ao arrependimento e se retratem.

Antônio, eis aí o meu apelo a você. Ponha mais Evangelho nisso! Antes que você siga pela estrada que Rubem Alves e Caio Fábio já trilharam em nossa amada Igreja Presbiteriana do Brasil (IPB).

Graça e paz do Senhor,

Helder Nozima
Barro nas mãos do Oleiro

01 Nov 15:33

FSF Blogs: Innovative biography of RMS returns to GNU Press Shop

After a period of unavailability, the GNU Press Shop is proud to once again offer Free As In Freedom (2.0), the innovative biography of Free Software Foundation founder and president Richard M. Stallman.

free as in freedom book cover

In 2002, Sam Williams wrote Free as in Freedom, a biography of Richard M. Stallman. In its epilogue, Williams expressed hope that choosing to distribute his book under the GNU Free Documentation License would enable and encourage others to share corrections and their own perspectives through modifications to his work.

Free as in Freedom (2.0) is Stallman's revision of the original biography. While preserving Williams's viewpoint, it includes factual corrections and extensive new commentary by Stallman, as well as new prefaces by both authors written for the occasion. It is a rare kind of biography, where the reader has the benefit of both the biographer's original words and the subject's response.

You can find Free As In Freedom (2.0) -- available with or without RMS's autograph -- here: https://shop.fsf.org/books/free-freedom-20-richard-stallman

31 Oct 20:43

Ballot Selfies

There were actually some good reasons for those laws, but IMO they now do more harm than good. Which raises a question: If there's a ballot measure to strike them down, how can I resist the urge to take a picture of my "yes" vote?
23 Oct 17:21

Um pouquinho de empatia

by Norma
Vejo que alguns antigos amigos meus de esquerda estão muito magoados porque Bolsonaro disse recentemente que vermelhos serão banidos (ou algo assim).
Primeiro, eu acho que Bolsonaro estava falando de um banimento do poder. Ou seja, da morte política, por meio do voto, dos que tocam o terror no país há mais de dez anos. De "marginais", não deles. Porém, como votam no PT, doem-se por ouvir coisas assim. Não estão acostumados.
O interessante é que, em anos de convivência, pessoal ou internética, eu nunca vi esses mesmos amigos reclamarem de todo tipo de difamação e piada contra direitistas em todo canto. Ora, eu sou cristã de direita - uma aberração em qualquer meio educacional ou profissional de humanas - desde a década de 2000. Pessoas como eu aguentaram caladas muita animosidade, indireta e direta. Eu disse caladas? Aguentamos sorrindo, isso sim. Dando de ombros e continuando a empurrar o carrinho. Eles viram muita coisa, mas ou fizeram cara de paisagem, ou engrossaram o coro, ou nos culparam por não compreenderem como podíamos ser do jeito que éramos.
Eu não gosto da animosidade que se levanta contra vermelhos hoje. Toda unanimidade é burra: seja de esquerda, como anteriormente, seja de direita, como parece formar-se agora. Mas isso tudo pode ser muito educativo e até fomentar uma esquerda realmente aberta ao diálogo. Afinal, quem sabe agora esses amigos desenvolvam um pouquinho de empatia pelos outrora vilipendiados "reaças" (na época do Nelson Rodrigues), "neoliberais" (na época do FHC e do Lula), "coxinhas" (na época do impeachment) e "fascistas" (hoje) expulsos do debate público há décadas, né? Não custa sonhar.
Dê cá a mão, amigo. Bolsonaro te despreza, mas a maioria dos nossos professores e empregadores também nos desprezava... Tamo junto.
© 2016 - Norma Braga. Todos os Direitos Reservados.
17 Oct 18:29

Bruce Momjian: "Get Off My Lawn"

As you might know, Postgres is old-school in its communication methods, relying on email for the bulk of its development discussion, bug reports, and general assistance. That's the way it was done in 1996, and we are still doing it today. Of course, some projects have moved on to github or Slack.

As a project, we try to take advantage of new technologies while retaining technologies that are still optimal, and email is arguably one of them. Email hasn't changed much since 1996, but email clients have. Previously all email was composed using a text-editor-like interface, which allowed for complex formatting and editing. New email tools, like Gmail, provide a more simplified interface, especially on mobile devices. This simplified interface is great for composing emails while commuting on a train, but less than ideal for communicating complex topics to thousands of people.

This email captures the requirements of communicating technical points to thousands of people, and the need for fine-grained composition. Basically, when you are emailing thousands of people, taking time to make the communication clear is worthwhile. However, this email explains the reality that many email tools are more tailored for effortless communication on devices with limited features.

Continue Reading »

26 Sep 18:23

Bad Opinions

I thought of another bad opinion! I couldn't find anyone who expressed it specifically, but still, the fact that I can so easily imagine it is infuriating! I'm gonna tell everyone about it!
19 Sep 19:28

Curve-Fitting

Cauchy-Lorentz: "Something alarmingly mathematical is happening, and you should probably pause to Google my name and check what field I originally worked in."
11 Sep 00:44

Sandboxing Cycle

All I want is a secure system where it's easy to do anything I want. Is that so much to ask?
05 Sep 21:04

"Call to Action: Save Free Software this September"

Call to Action: Save Free Software this September

Free Software is at risk! On the 12th of September the EU is getting ready to vote on a "Copyright Reform" package, which undermines the foundations upon which Free Software is built. The proposed Article 13 of the EU Copyright Directive targets every online service that allows its users to upload and share content with each other, including code hosting platforms.

Let’s call upon European policy makers to delete the threat posed against Free Software in the Copyright Directive.

The widespread reuse of Free Software is a foundation of the Internet, as code can be used, studied, shared and improved by each user. It would be wrong to take this freedom for granted. Since most of the internet medium is compiled and reused as Free Software, the ruling would dismantle the media ecosystem.

We are getting ready for the EU’s vote on a "Copyright Reform" package, in order to remove a section of its terms and conditions that looks to hamper Free Software development and code-sharing. Every Internet user, who shares information, media, and code with the public, has been targeted in the proposed directive. The idea in Article 13 is that Free Software is a cause for copyright violations and that, therefore, upload-filters should be created by internet platforms.

Share graphics hand-made by Save Your Internet

There are even a variety of types of governmental organisations, facilitated and powered by Free Software. In fact, on just one of the major code hosting platforms, over 128 government organisations from over 17 European governments have, in total, licensed 4594 instances of Free Software, at the time of writing. They are, as follows: Open Government initiatives, Cultural heritage directories, Ecology research departments and agencies, Digitalisation projects, Emergency Services, Information Systems, Election Services, Transport networks, Education institutions, Energy services, Mapping and Geographical research institutes, Statistical bureaus, Business departments, Law courts, Security groups, and Departments of Finance.

So, for those inside the EU, now’s the time to do your bit and to communicate with an MEP, who represents your country, in order to notify your support for Free Software in the face of Article 13 in the Copyright Directive.

Do that at saveyourinternet.eu, where there are tips on who and how to address and send your message. When you’re ready, you can even use a tool, created by EDRi and Open Media, to directly call and e-mail your MEP.

Let’s call upon European policy makers to delete the threat posed against Free and Open Source Software in the Copyright Directive.

Support FSFE, join the Fellowship
Make a one time donation