Shared posts

07 Oct 20:58

PG Phriday: Postgres as Middleware

by Shaun

One of the cool things I like most about Postgres, is that it’s probably the most inclusive database software I’ve ever encountered. It’s so full of features and functionality these days, it’s practically middleware. Almost anything plugs into it, and if it doesn’t, there’s usually a way to make it happen.

Want a demonstration?

SciDB is often used for large analytical data warehouses. They even use Postgres for metadata storage. Despite this, they still haven’t written a foreign data wrapper for back-and-forth interaction. But they have written a Python API. So what can we do with it?

This isn’t a SciDB tutorial, so let’s just create a very simple data array with one attribute over one dimension. Nothing crazy here:

CREATE ARRAY thing <msg:string> [id=0:10,10,0];
store(build(thing, 'Thing ' + string(id)), thing);
scan(thing);
 
{id} msg
{0} 'Thing 0'
{1} 'Thing 1'
{2} 'Thing 2'
{3} 'Thing 3'
{4} 'Thing 4'
{5} 'Thing 5'
{6} 'Thing 6'
{7} 'Thing 7'
{8} 'Thing 8'
{9} 'Thing 9'
{10} 'Thing 10'

The hardest part about accessing this data via Postgres, was actually getting the SciDB python driver to work. Instead of directly utilizing their own client libraries, it actually obtains data through an HTTP proxy they called shim. Once that was done, I just had to find the right calls in the SciDB-Py documentation and refresh my memory on PL/Python.

Given all of those parts, our whole stack resembles something like this:

  1. SciDB
  2. Shim
  3. SciDB-Py
  4. PL/Pythonu
  5. Postgres

If there were an actual foreign data wrapper, we could use it to replace the middle three layers. Until then, that’s the overhead involved. And here is all of the magic for viewing that external data:

CREATE TYPE scidb_thing AS (
  id   INT,
  msg  text
);
 
CREATE OR REPLACE FUNCTION get_scidb_things()
RETURNS SETOF scidb_thing
AS $$
  import numpy
  import scidbpy AS scidb
  sdb = scidb.CONNECT('http://localhost:8080')
 
  FOR pair IN sdb.afl.scan('thing').tosparse():
    yield pair
 
$$ LANGUAGE plpythonu;
 
CREATE OR REPLACE VIEW v_scidb_thing AS
SELECT *
  FROM get_scidb_things();

This usage comes in two parts, with a third for the sake of convenience. We create a type because we want to interact with this data as if it were a table. Then we create a function that uses python to access the external data, and cast it into that type. The end result is that we can get the external data rather easily. With a bit more coding, we could make the function generic and use it to access any external SciDB array.

The view merely obfuscates the function call to emulate local usage. Let’s use the view and see what we get:

SELECT *
  FROM v_scidb_thing
 WHERE id = 9;
 
 id |   msg   
----+---------
  9 | Thing 9

Given a lot of time and inspiration, we could write a local Postgres API with the capability to create, fill, or otherwise treat any SciDB array like any other external data object. I would never advocate such an approach in this case simply because of the awful overhead. The above query required 300ms to execute in my VM, which is about 100x slower than directly querying SciDB. But this is also all of the old stuff! Imagine what we could do with more recent techniques like a FDW extension.

The thing about Postgres is that it’s a database, and an interface. I just used Python to give it access to data in another system without a native client library or extension. The fact that the whole process only took about an hour makes it even more ludicrous. For small to medium-sized objects, we could combine this technique with materialized views for speedy local access.

Really, the only thing preventing Postgres from doing something is your imagination. That’s pretty liberating.

05 Oct 21:39

PG Phriday: Fancy Partitioning

by Shaun

This week we’ll be covering another method of Postgres partitioning. This is a technique I personally prefer and try to use and advocate at every opportunity. It’s designed to straddle the line between traditional partitioning and standard monolithic table structure by using table inheritance as a convenience factor. The assumption here is that end-user applications either:

  1. Know that partitioning is in use.
  2. Only load “current” data and don’t care about partitions.

These two things may seem mutually exclusive, but they can actually be complementary. There are also notable performance benefits to this approach that we’ll explore later.

The SQL for this structure is similar to what we used last week, but there are a couple of notable omissions.

TRUNCATE TABLE sensor_log;
 
CREATE TABLE sensor_log_part_2012 (
    LIKE sensor_log INCLUDING INDEXES,
    CHECK (reading_date >= '2012-01-01' AND
           reading_date < '2013-01-01')    
) INHERITS (sensor_log);
 
CREATE TABLE sensor_log_part_2013 (
    LIKE sensor_log INCLUDING INDEXES,
    CHECK (reading_date >= '2013-01-01' AND
           reading_date < '2014-01-01')    
) INHERITS (sensor_log);
 
CREATE TABLE sensor_log_part_2014 (
    LIKE sensor_log INCLUDING INDEXES,
    CHECK (reading_date >= '2014-01-01' AND
           reading_date < '2015-01-01')    
) INHERITS (sensor_log);

This time, we don’t need the function that distributes the rows to the correct partition, or the associated trigger. Further, note that the 2015 partition is missing. This is possible because we’ve made two assumptions about how partitions will be used:

  1. Current data will be stored in the base table.
  2. Old or “archived” data will be moved into partitions.

To fulfill the first requirement, we made a slight change to the python loader script introduced at the beginning of this series. We could have done this with the partitioning introduced last week as well, but while that is a performance tweak for that format, this method depends on it.

# Set these to modify how large the COMMIT blocks will be,
# and how many days the data will represent.
# Total row count = chunk_size * date_range.
 
chunk_size = 100000
date_range = 1000
 
# Main program body
 
import psycopg2
from StringIO import StringIO
from datetime import datetime, timedelta
 
raw_data = StringIO()
db_conn = psycopg2.connect(database = 'postgres', user = 'postgres', port = 5433)
cur = db_conn.cursor()
 
print 'rows,seconds,microseconds'
 
for j in xrange(0, date_range):
    raw_data.seek(0)
    raw_data.truncate(0)
 
    usedate = datetime.now() - timedelta(days = j)
    stamp = datetime.combine(usedate.date(), usedate.time().max)
 
    for i in xrange(1, chunk_size + 1):
        stamp -= timedelta(seconds = 0.5)
        raw_data.write(
            '%s\t%s\t%s\n' % (i % 1000, i % 100, stamp)
        )
 
    raw_data.seek(0)
    t1 = datetime.now()
 
    # This is the part where we become partition-aware.
    # If this script only handled current data, we wouldn't
    # even need the 'part' variable at all.
 
    part = ''
    if stamp.year != datetime.now().year:
        part = '_part_%s' % stamp.year
 
    cur.copy_from(
        raw_data, 'sensor_log%s' % part, '\t',
        columns = ('location', 'reading', 'reading_date')
    )
 
    t2 = datetime.now()
    diff_s = str(t2 - t1).split(':')[2]
 
    print '%s,%s' % (
        (j + 1) * chunk_size, diff_s.replace('.', ',')
    )
 
    db_conn.commit()
 
raw_data.close()
db_conn.close()

As the comments in the code note, if the loader script only handles a stream of new and current data, we could remove the partition handling block entirely. We should also note that the script loads all of the partitions about 10% faster than a single monolithic table. Likely this is due to the index calculations being reduced in cost from reduced tree depth.

The primary benefit from this structure is that we can get more use out of the ONLY keyword. Most of the partitioned tables I’ve encountered are primarily concerned with “hot” data. Since know that Postgres will always check the base table regardless of partition contents, why not use that to our advantage? The ONLY keyword makes that the first and last step.

This is how that looks to the planner:

EXPLAIN ANALYZE
SELECT COUNT(*)
  FROM ONLY sensor_log
 WHERE reading_date >= CURRENT_DATE;
 
                            QUERY PLAN                             
--------------------------------------------------------------------
 Aggregate  (cost=5141.55..5141.56 ROWS=1 width=0)
            (actual TIME=140.079..140.080 ROWS=1 loops=1)
   ->  INDEX ONLY Scan USING idx_sensor_log_date ON sensor_log
              (cost=0.57..4853.80 ROWS=115099 width=0)
              (actual TIME=0.043..75.019 ROWS=100000 loops=1)
         INDEX Cond: (reading_date >= ('now'::cstring)::DATE)
         Heap Fetches: 0
 
 Planning TIME: 0.184 ms
 Execution TIME: 140.126 ms

We can see that we only touched the base sensor_log table, ignoring any partitions that might exist. This is the part where being partition-aware is beneficial. Now systems that focus on current data can directly restrict queries to the “current” partition without having to know anything about the naming scheme or distribution process. And as we’ve already seen, table loading can also ignore any partitions if processing recent entries.

Of course, now we have a new problem. Since the current partition is the base table, once the data no longer matches our desired constraints, it needs to be relocated. When 2016 arrives, we need to move the 2015 data, or reorganize the tables themselves. Depending on partition granularity, the latter actually isn’t so bad. In fact, here’s a process that does it all at once in a transaction:

BEGIN;
 
DELETE FROM pg_inherits
 WHERE inhparent = 'sensor_log'::REGCLASS;
 
ALTER TABLE sensor_log RENAME TO sensor_log_part_2015;
CREATE TABLE sensor_log (LIKE sensor_log_part_2015 INCLUDING ALL);
 
ALTER TABLE sensor_log_part_2015
  ADD CONSTRAINT sensor_log_part_2015_reading_date_check
CHECK (reading_date >= '2015-01-01' AND
       reading_date < '2016-01-01');
 
INSERT INTO pg_inherits
SELECT oid, 'sensor_log'::REGCLASS, 1
  FROM pg_class
 WHERE relname LIKE 'sensor_log_part_%'
   AND relkind = 'r';
 
COMMIT;

Alternatively, we can maintain a more elastic system. Another way to use the base table + partition style is to only keep extremely recent data in the base table, such as the most recent week. Then, move any older data to a prepared partition. In this case we would already have the 2015 partition, and then every night we would run this maintenance SQL:

BEGIN;
 
INSERT INTO sensor_log_part_2015
SELECT *
  FROM ONLY sensor_log
 WHERE reading_date >= CURRENT_DATE - INTERVAL '1 week';
 
DELETE FROM ONLY sensor_log
 WHERE reading_date >= CURRENT_DATE - INTERVAL '1 week';
 
COMMIT;

In either case, this maintenance is easily scriptable, though clearly a bit more invasive than simply distributing the data outright with a trigger. What do we gain from that caveat?

  1. No more performance-robbing redirection trigger. This is great for high transaction volumes.
  2. The root table contains only the most relevant data. This allows us to treat inherited tables like optional extended archives.
  3. Data in the root table does not need to match the granularity of our partitions. Given the second data-movement approach, the base partition could hold one week of data, while each archive table reflects month or year distributions.
  4. Data readers only need to remember one rule: fast, recent data should use the ONLY keyword.
  5. Both readers and writers can remain blissfully ignorant of the naming scheme, distribution rules, and any other partitioning overhead. Everything can just target the base table and maintenance will sort it out later.

In the end, maybe this structure doesn’t qualify as “fancy”, but it is most definitely a departure from the methodology discussed in the Postgres documentation. It has some benefits beyond the traditional approach, and of course brings its own drawbacks to the table. As always, choosing is up to the DBA and the development teams.

I wrote a Postgres extension for my current employer that abstracts much of this and automates the rest. I hope to open-source it soon so everyone can squeeze some benefits out of applicable use cases. But now that you know about it, there’s no reason to wait for me to wade through red tape; explore!

13 Sep 13:48

Trouble for Science

Careful mathematical analysis demonstrates small-scale irregularities in Gaussian distribution
04 Sep 19:50

A pedido de garoto com paralisia, Nike cria tênis especial para ajudar pessoas com mobilidade reduzida

by Redacao_Hypeness
Como qualquer outro garoto recém saído do ensino médio, o norte-americano Matthew Walzer adora os tênis da Nike. Contudo, ele não conseguia usá-los. Com paralisia cerebral, o jovem só tem habilidade motora com uma das mãos, o que torna impossível o ato simples de amarrar cadarços. Cansado de precisar pedir ajuda o tempo todo para […]
04 Sep 19:49

Indicações de sexta (10)

by Francisco Nunes
A verdade está neste Livro!

 

Toda sexta-feira, uma pequena lista de artigos cuja leitura recomendamos. Além disso, indicaremos também uma mensagem e um hino para serem ouvidos. Nosso desejo é que lhe sejam úteis para aprofundar seu conhecimento do Senhor, para capacitar você a servi-Lo melhor e para despertar em você mais amor por Ele.
É sempre importante relembrar o que dizemos em Sobre este lugar: as indicações a um autor ou a alguma fonte não implica aprovação total ou incondicional de tudo o que é ali ensinado nem indicado em outros links ou em vídeos relacionados, etc; indica, outrossim, que naquele artigo específico há conteúdo bíblico a ser apreciado.

Artigos que merecem ser lidos

  1. Você está descontente?, de Erik Raymond. O contentamento é uma ordem bíblica. Mas como cumpri-la? E como saber que não a estamos cumprindo?
  2. O problema de Mateus 11.12, de Clóvis Gonçalves. O que este versículo descreve é uma coisa boa ou ruim?
  3. Tudo o que não provém de fé é pecado — sério?, de John Piper. Qual o significado da afirmação de Paulo? Ele estava mesmo se referindo a tudo?
  4. O lado vida da cruz, de Jessie Penn-Lewis. Sem dúvida, a cruz implica morte, mas há também um aspecto de vida nela, e é fundamental que o conheçamos.

Mensagem que merece ser ouvida

Deserto, oração e avivamento, por Wilson Porte

Hino que merece ser ouvido

I have a Friend whose faithful love

Letra de C. A. Tydeman, música de autor anônimo.

I have a Friend whose faithful love

I have a Friend, whose faithful love
Is more than all the world to me:
’Tis higher than the heights above,
And deeper than the soundless sea;
So old, so new,
So strong, so true;
Before the earth received its frame,
He loved me—Blessed be His name!

He held the highest place above,
Adored by all the sons of flame,
Yet such His self-denying love,
He laid aside His crown and came
To seek the lost,
And at the cost
Of heavenly rank and earthly fame
He sought me—Blessed be His name!

It was a lonely path He trod,
From every human soul apart;
Known only to Himself and God
Was all the grief that filled His heart,
Yet from the track
He turned not back,
Till where I lay in want and shame,
He found me—Blessed be His name!

Then dawned at last that day of dread,
When desolate, yet undismayed,
With wearied frame and thorn-crowned head,
He, God-forsaken, man-betrayed,
Was then made sin
On Calvary,
And, dying there in grief and shame,
He saved me—Blessed be His name!

Long as I live my song shall tell
The wonders of His dying love;
And when at last I go to dwell
With Him His sovereign grace to prove,
My joy shall be
His face to see,
And bowing there with loud acclaim
I’ll praise Him—Blessed be His name!

Tradução

Eu tenho um Amigo cujo amor fiel

Eu tenho um Amigo, cujo amor fiel
é mais do que o mundo todo para mim:
é mais elevado do que as mais altas alturas
e mais profundo do que o mar em som.
Tão antigo tão novo,
tão forte, tão verdadeiro.
Antes que a Terra fosse desenhada,
Ele já me amava. Bendito seja Seu nome!

Ele mantinha o lugar mais elevado nos céus,
adorado por todos os filhos de chama;
no entanto, por esse Seu amor abnegado,
Ele pôs de lado Sua coroa e veio
Para buscar os perdidos,
E, ao custo
Do posto celestial e da fama terrena,
Ele me procurou. Bendito seja Seu nome!

Foi um caminho solitário que Ele trilhou,
De cada alma humana em pedaços;
conhecida apenas por Si mesmo e por Deus
era toda a tristeza que Lhe enchia o coração.
No entanto, desde que veio
Ele não voltou atrás;
foi até onde eu estava em falta e vergonha:
Ele me encontrou. Bendito seja Seu nome!

Então, raiou o último dia de temor de,
quando, desolado, no entanto impávido,
com um quadro sobre a cabeça coroada de espinhos,
Ele, esquecido por Deus e traído pelo homem,
foi, então, feito pecado
no Calvário
e lá morreu em tristeza e vergonha.
Ele me salvou! Bendito seja Seu nome!

Enquanto eu viver, minha canção irá falar
das maravilhas de Seu amor que O levou à morte.
E quando, por fim, eu for morar
com Ele, Sua graça soberana provar,
minha alegria será
Seu rosto ver,
E, curvando-me ali, com voz alta clamarei,
vou louvá-Lo: “Bendito seja Seu nome!”

Versão em português

Do meu Senhor, o amor fiel
É mais que o mundo pode dar:
Mais alto que os mais altos céus,
E mais profundo que o mar.
Antigo amor,
Superior,
Pois antes da criação de Deus
Amou-me — glória ao nome Seu!

O alto trono era Seu,
Dos anjos, tinha adoração;
Mas tudo, por amor, deixou,
Descendo aqui em servidão.
Me procurou —
Sacrificou
A alta posição do céu;
Buscou-me — glória ao nome Seu!

Sozinho a senda percorreu,
Sofreu do homem rejeição;
E conhecido só por Deus,
De angústia, encheu Seu coração.
Não hesitou
Nem recuou,
Mas indo aonde estava eu,
Achou-me — glória ao nome Seu!

Rompendo o dia de temor,
Mui só, mas com intrepidez,
Cruéis escárnios suportou;
Deus O abandonou e O fez
Pecado, sim,
Na cruz por mim;
E em vergonha e dor morreu.
Salvou-me — glória ao nome Seu!

Enquanto aqui viver, direi
Das maravilhas desse amor.
Por fim com Ele estarei
Provando a graça superior.
Oh! que prazer
Seu rosto ver!
Prostrado, renderei, fiel,
Louvores — glória ao nome Seu!

História

A única informação que encontramos foi esta: “Afirma-se que esse hino foi escrito por certo C. A. Tydeman, mas, quem ele é, ninguém sabe.”

Send to Kindle

O post Indicações de sexta (10) apareceu primeiro em Campos de Boaz.

04 Sep 19:49

Professora brasileira aposentada usa tempo livre para alfabetizar adultos de graça

by Redação Hypeness
Em Pato de Minas (MG), um cartaz no portão de uma casa chamou a atenção: “Ensino Grátis Ler e Escrever (adulto)”. Com o intuito de ajudar analfabetos e a continuar a dar aulas, a professora aposentada Eunir Alves Moreira de Faria, 77, decidiu usar o espaço de sua varanda e o tempo livre para ensinar. […]
02 Sep 15:00

Gotas de orvalho (13)

by Francisco Nunes
O sustento ao nascer do dia

Nenhum homem é maior do que sua vida de oração.

(Leonard Ravenhill)

Quando procuramos honras, desviamo-nos de Jesus.

(Hugo de São Victor)

Alegria santa é o óleo que lubrifica as rodas de nossa obediência.

(Matthew Henry)

Pegue um santo, coloque-o sob quaisquer circunstância, e ele saberá como regozijar-se no Senhor.

(Walter Cradock)

Cada família cristã deveria ser uma pequena igreja consagrada a Cristo, plenamente influenciada e governada por Suas regras.

(Jonathan Edwards)

A oração não é um esforço contínuo para ser ouvido por Deus, mas é o resultado natural da união com o grande Intercessor no trono.

(J. C. Metcalfe)

O único método deliberado de Deus é trabalhar por meio de homens consagrados.

(William Carey)

Aprendemos algo importante quando aprendemos a não lutar contra as circunstâncias que Deus determina para nós.

(H. L. Sydney)

Send to Kindle

O post Gotas de orvalho (13) apareceu primeiro em Campos de Boaz.

02 Sep 14:58

Designer cria abrigo que pode ser montado em 1 hora e acolher vítimas de desastres durante 4 meses

by Redação Hypeness
A humanidade é tão vulnerável e está constantemente fadada à desastres naturais, que desabriga milhares de pessoas ao longo dos anos. Pensando em dar o mínimo de condições às vítimas, o estúdio turco Designnobis criou uma solução: abrigos que podem ser montados em 1 hora para acolher pessoas durante quatro meses. Somente em 2013, cerca de 22 milhões de […]
02 Sep 14:56

Vencedores

by Francisco Nunes
Promessas aos vencedores

“Ao que vencer, Eu lhe concederei que se assente Comigo no Meu trono” (Ap 3.21).

Como tudo depende do significado das palavras “Ao que vencer”, pode ajudar os que não têm conhecimento dessa verdade ou até agora duvidaram dela, ouvir alguns estudiosos competentes no assunto dos vencedores1.

David Morrieson Panton

“Assim como a glória eterna de Cristo, a glória que Ele tinha com o Pai antes que o mundo existisse, Ele a herda como o Filho de Deus, Sua glória milenar descansa em Sua perfeita obediência como homem; por isso, nossa glória eterna repousa unicamente em sermos filhos de Deus, enquanto nossa glória milenar só pode ser alcançada por nossa obediência como servos.”

“A vitória de nosso Senhor, sendo perfeita, alcança uma recompensa que é única; ninguém, homem ou anjo, compartilha com Ele do trono de Deus. ‘Ao que vencer, Eu lhe concederei que se assente Comigo no Meu trono; assim como Eu venci e Me assentei com Meu Pai no Seu trono’ (v. 21). Nosso Senhor venceu para ter o reino milenar, Ele não o herdou. Assim, o prêmio do reino milenar também foi um dos incentivos que inspiraram a vitória de nosso Senhor: “Pelo gozo que Lhe estava proposto, suportou a cruz, desprezando a afronta, e assentou-se à destra do trono de Deus” (Hb 12.2). Os laodicenses, os apóstatas, que se despertarem do sono, que deixarem o ouro terrestre pelo celestial, que se erguerem para o santo, feliz e inabalável serviço – até mesmo os laodicenses podem alcançar a incomparável dignidade, a impressionante maravilha da glória vindoura: na verdade, partilhar do trono de Cristo.”

G. H. Lang

“A exortação ao final de todas as sete epístolas [de Apocalipse] para vencer denota a vitória de uma vida de fé inabalável sobre as tentações e provações e sobre todas as coisas adversas em geral.”

Professor Henry Barclay Swete

“O Filho Unigênito confere a Seus irmãos, na medida em que a filiação deles é já confirmada pela vitória, Seu próprio poder sobre as nações.”

Horatius Bonar

“Ele fala aos vencedores. Embora os dons não sejam salários, eles dependem de vencermos uma batalha. Eles são algo além da mera salvação.”

Professor Moses Stuart

“Esta entronização será concedida a todos os que provarem ser vencedores na luta contra o mundo, a carne e o diabo.”

Steir

“Seguramente é para o reino milenar que, em certo sentido, todas essas promessas apontam: que o poder sobre as nações está aqui estendido, como galardão, àqueles que venceram está muito claro.”

“A colheita é composta por aqueles por quem Cristo venceu, as primícias são aqueles em quem e por meio de quem Ele venceu, bem como venceu por eles.”

A. Champion

“O apóstolo Paulo não tinha nenhuma dúvida sobre seu lugar no corpo principal, pois seu testemunho é claro: ‘Eu sei em quem tenho crido e estou certo de que [Ele] é poderoso para guardar o meu depósito até aquele dia” (2Tm 1.12). Quando, porém, escreveu aos filipenses, disse-lhes que havia uma coisa que ele estava buscando acima de tudo, “o prêmio da soberana vocação de Deus em Cristo Jesus” (3.13), para que ele pudesse, de alguma maneira alcançar a ressurreição extraordinária2 dentre os mortos (v. 11). Ele tinha certeza de ter um lugar na colheita geral, mas não tinha certeza, ainda, de ser uma das primícias como vencedor.”

“Se Pedro, Tiago, João e André precisavam das advertências dadas por nosso Senhor para acautelarem-se, para vigiar e orar (Mc 13.3,5,9,23,33) e para estarem apercebidos (Mt 24.44), é claro que algo mais se requer de nós, além da fé em Cristo para a [eterna] salvação, se quisermos estar maduros o suficiente para as primícias. O ensinamento de que todo aquele que crê está pronto para a vinda do Senhor é um narcótico mortal. Não é de admirar que a Igreja esteja dormindo!”

“Se, por outro lado, vemos que, sendo salvos, há ainda um prêmio a ser ganho pelo qual vale a pena considerar tudo como lixo, então encontramos nele um poderoso estimulante para uma vida santa e vitoriosa em união com nosso Senhor que virá.”

Governantes no milênio, vencedores e tronos

Governantes no milênio

James Black, em suas críticas drásticas à verdade sobre o milênio (Edingburgh Record, jan. de 1925), aponta o dedo – como outros críticos hostis fizeram antes dele – em um ponto fraco do ensino atual sobre o reino de Deus. “Esses mártires (são somente os mártires, lembre-se!)”, diz ele, comentando sobre Apocalipse 20.4, “ressuscitam e juntam-se a Ele [Cristo], reinando com Ele mil anos. As únicas pessoas mencionadas como ‘reinando com Cristo’ são os mártires. Se você interpretar isso literalmente, não há base alguma nessa passagem para toda a elaborada doutrina dos pré-milenaristas, que dizem que eles representam Cristo e todo Seu povo cristão governando este mundo por mil anos.”

Vencedores

É fato que muitos da Igreja sub-apostólica assim entendiam o apóstolo João. Além disso, é verdade que a ênfase extraordinária colocada sobre os mártires deveria ter alertado a Igreja de que a co-realeza com Cristo na era vindoura – distinta do reino eterno após ela – não abrangia, de forma alguma, todos os redimidos como tem sido suposto. Mas também é verdade que esses críticos têm negligenciado a primeira divisão dos tronos quádruplos: (1) vencedores: “E vi tronos; e assentaram-se sobre eles” (Ap 20.4); (2) mártires cristãos; (3) mártires do Antigo Testamento e (4) mártires sob o anticristo. O primeiro grupo, vencedores não necessariamente martirizados, é assim definido por nosso Senhor: “Ao que vencer e guardar até o fim as Minhas obras, Eu lhe darei poder sobre as nações e com vara de ferra as regerá” (2.26,27).

Tronos

“Que objetivo refulgente! ‘E vi tronos.’ Tronos! Não um, mas muitos; não o grande trono branco, erguido em solidão, sem nenhum outro trono perto dele, mas uma grande multidão de tronos, tronos co-iguais. Não um cetro, mas milhões de cetros. Não o exercício independente de autoridade, mas, sim, em dominação associada: há união entre essa confederação de reis celestiais.” (Arthur Augustus Rees).

 

Notas

1 “Nós fazemos bem em lembrar que a consciência do que está em jogo, uma condicional participação no trono, fornece um incentivo de poder extraordinário, enquanto o ensino comum – de que o pior apóstata irá partilhar o trono de Cristo – rouba cada crente deste tremendo impulso.” (D. M. Panton) (N. do E.)

2 No v. 10, Paulo usa a palavra grega anastasis, que significa “ressurreição”, mas no v. 11 a palavra usada é exanastasis, indicando uma ressurreição superior, extraordinária, adicional. (N. do T.)


(Traduzido por Francisco Nunes de “Overcomers”, sem indicação de autor. Este artigo pode ser distribuído e usado livremente, desde que não haja alteração no texto, sejam mantidas as informações de autoria e de tradução e seja exclusivamente para uso gratuito. Preferencialmente, não o copie em seu sítio ou blog, mas coloque lá um link que aponte para o artigo.)

Send to Kindle

O post Vencedores apareceu primeiro em Campos de Boaz.

01 Sep 21:29

Generating Iptables Rules With TrafficCop

by Chris Dorros

Today the OpenDNS engineering team is releasing Traffic Cop, a simple, open source tool to uncover to where your host is communicating, and help you write iptables rules. In a nutshell, it does three things:

  • Configures and enables logging of all inbound and outbound connection attempts (by default it looks for TCP SYN packets).
  • Generates a report showing the IPs and services of the peers the host is communicating with.
  • Generates iptables rules for each connection type.

 

Motivation

Let’s start with a quick example:

You have a fresh host for your new project and want to “lock it down.” You know it needs to talk to your database server and a few backend services, and that it will need inbound access from admins over SSH, plus web access for your clients. Writing the rules is not very easy either, but there are a few good tools out there for helping with that. You finalize your ruleset and put them in place. Everything works good for a few days, until your users can’t login because you forgot to enable access to your NTP (time) server, and the auth components need to stay in sync with time!

This is just one simple example, but the big picture is that in today’s fast-paced development world, where we’re building widgets using libraries built on top of other libraries, we don’t always know what our dependency chains looks like. This can make whitelisting for security difficult, and sometimes a bit scary, as we want to do the right thing but not break anything.

 

How TrafficCop Helps

Let’s redo our example. This time we configure Traffic cop to log all connections on our server in a development/test environment (you probably don’t want to experiment in production). We let it run for a few days to get a good sense of the traffic. At the end of the learning phase, we’ve captured a rough baseline for the host. We review the rules it generated, select the ones that make sense, tweak the IP ranges as we see fit, and put them in place.

Note that we’re not just talking about inbound firewall rules here. We’re putting outbound rules in place too. This is traditionally an uncommon practice on host-based firewalls, as outbound traffic is typically more painful to classify and understand per application, but we’re using live data to drive the configuration, therefore we can take advantage of outbound traffic filtering. A blanket allowance of outbound traffic is one of the big drivers for malware to be primarily outbound focused (connecting back to “the mothership”), rather than attempting to communicate with the target inbound.

 

Demo Time!

We spin up a fresh EC2 instance, in a public subnet, using the default security groups (allows port 22 inbound from anywhere and all outbound).

SSH into the instance:

$ ./tcop enable
$ curl google.com (to show outbound log)

(waited about 5 minutes)

$ ./tcop report

Screen Shot 2015-08-31 at 3.39.27 PM

Screen Shot 2015-08-31 at 3.40.02 PM

That first inbound IP is us logging into the instance. The others are not! Notice that within just a few minutes we’re already getting IPs from around the world hitting our SSH port.

 

Great, How do I get Started?

Head over to the GitHub page for instructions on setting it up and generating reports. Contributions definitely welcome! Feel free to fork & feature requests! Hope you find it useful.

The post Generating Iptables Rules With TrafficCop appeared first on OpenDNS Engineering.

01 Sep 21:08

DatabaseCast: Currículo de DBA

by DatabaseCast

VitrineDatabaseCast60

Olá, pessoal! Neste episódio do DatabaseCast, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e os convidados Rodrigo Almeida (@dbarodrigo) e Airton Lastori (@alastori) abrem a caixa de entrada e analisam currículos para a vaga de DBA Oracle, SQL Server e MySQL. Neste episódio você vai descobrir o que colocar em um currículo para vagas de DBA júnior, pleno e sênior, indicar o quanto quer ganhar, citar sua experiência no condomínio, gastar um tempo no LinkeIn, contar sua história e como (não) mentir no currículo.

DatabaseCast 60: Currículo de DBA

Confira o preço promocional da camiseta do DatabaseCast Fluxo Matrix com tecido especial (tipo tradicional econômico) clicando aqui.

Camiseta DatabaseCast Fluxo MatrixVeja também a caneca Datas SQL com a sintaxe para manipulação de datas no Oracle, SQL Server, MySQL e PostgreSQL.

FINAL_FotoColocaoReal

Não deixe de nos incentivar digitando o seu comentário no final deste artigo, mandando um e-mail para  databasecast@gmail.com, seguindo o nosso twitter @databasecast, vendo informações de bastidores e as músicas do programa no nosso Tumblr e curtindo a nossa página no Facebook e no Google+.

feed-rss1

Veja no gráfico abaixo a duração e os tempos aproximados de início e fim de cada bloco:

GraficoTamanhoDatabaseCastEpisodio60

Veja na tag cloud abaixo a contagem das palavras mais usadas nos e-mails, comentários e tweets do episódio anterior:

TagCloudEp60

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)

Você pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link. Veja também:

Links do episódio:

01 Sep 15:44

Prefeitura de SP adota home office

by Juliana Franzon

A partir de setembro os funcionários da Prefeitura de São Paulo estão liberados para trabalhar em casa. O sistema home office será adotado na Secretaria de Finanças de Desenvolvimento Econômico com o objetivo de reduzir custos de infraestrutura e aumentar a produtividade.

Os servidores que cuidam do sistema de computadores da Prefeitura serão os primeiros a testar o novo modelo. Aqueles que forem escolhidos para fazer home office terão uma meta de desempenho 20% maior do que a de quem fica no escritório e devem se organizar para trabalhar entre 8h e 19h, mesmo em casa. Será exigido também que o colaborador cumpra pelo menos 8 horas por semana nas dependências da Prefeitura.

A frequência, explica o secretário Rogério Ceron de Oliveira, será controlada através do acesso do servidor ao sistema eletrônico, onde será possível monitorar se de fato está sendo desempenhada a atividade.

Não poderão trabalhar de casa os funcionários que tenham sido repreendidos ou suspensos nos últimos dois anos, nem aqueles que tiveram faltas injustificadas nos últimos 12 meses.

A adoção do sistema home office está sendo vista com otimismo na Secretaria. “Às vezes, no trabalho do dia a dia, a gente precisa ficar mais focado, concentrado. Eu acho que em casa conseguimos fazer isso melhor”, disse Paula Piantino Vitiritti, uma das servidoras do setor. “É importante não ficar isolado, vir com frequência e trabalhar em equipe como a gente costuma”, acrescentou Lucas Marques.

As informações são do G1.

Você também pode gostar de:

>>> SC exige 20% mais do home office

>>> Das 8h às 15h: o teste da jornada intensiva

>>> TJ-SP quer 15% mais do home office

O post Prefeitura de SP adota home office apareceu primeiro em Adoro Home Office.

29 Aug 23:39

Gotas de orvalho (12)

by Francisco Nunes

O pecado é uma praga, sim, a pior e mais infecciosa praga no mundo; e, apesar disso, ah! quão poucos existem que tremem diante dela, que mantêm distância dela! “Não sabeis que um pouco de fermento faz levedar toda a massa?” (1Co 5.6). […] O pecado que está no coração de um homem é capaz de infectar um mundo inteiro, pois é sua natureza se espalhar e infectar.

(Thomas Brooks)

Aquele que é espiritual sabe permanecer quieto. Ele consegue ficar diante de Deus em adoração, enquanto Deus torna-lhe conhecida Sua vontade. Ele pode parar e esperar ordens.

(Watchman Nee)

O primeiro fundamento da justiça é, sem dúvida, a adoração a Deus.

(João Calvino)

Se o mundo determinou ser mais mundano, a igreja deve estar determinada a estar mais centrada no evangelho.

(Albert Mohler)

A adoração pública não nos isenta da adoração secreta.

(Matthew Henry)

O homem que tenta diminuir a glória de Deus, recusando-se a adorá-Lo, é como um lunático que deseja apagar o sol, escrevendo a palavra “escuridão” nas paredes de sua cela.

(C. S Lewis)

Nossa mente é constituída de tal forma que não pode, ao mesmo tempo, concentrar-se no Senhor e fixar-se no casaco novo ou no chapéu para o próximo inverno.

(A. W. Pink)

Send to Kindle

O post Gotas de orvalho (12) apareceu primeiro em Campos de Boaz.

29 Aug 23:37

Recomendações para armazenamento e recuperação de senhas

Retomando o assunto discutido na dica "[Envio de senhas em texto puro - Portal Plaintextoffenders http://www.dicas-l.com.br/arquivo/envio_de_senhas_em_texto_puro_portal_plaintextoffenders.php]", relaciono a seguir algumas recomendações para quem oferece serviços protegidos por senha. Este texto é uma tradução livre de uma resposta publicada no portal [Stackexchange http://security.stackexchange.com/questions/17979/is-sending-password-to-user-email-secure].
29 Aug 23:34

honra

by Francisco Nunes

De tanto ver triunfar as nulidades, de tanto ver prosperar a desonra, de tanto ver crescer a injustiça, de tanto ver agigantarem-se os poderes nas mãos dos maus, o homem chega a desanimar da virtude, a rir-se da honra, a ter vergonha de ser honesto.

(Rui Barbosa)

Send to Kindle
29 Aug 23:25

Retrato do artista quando coisa

by Francisco Nunes

A maior riqueza
do homem
é sua incompletude.
Nesse ponto
sou abastado.
Palavras que me aceitam
como sou
— eu não aceito.
Não aguento ser apenas
um sujeito que abre
portas, que puxa
válvulas, que olha o
relógio, que compra pão
às 6 da tarde, que vai
lá fora, que aponta lápis,
que vê a uva etc. etc.
Perdoai. Mas eu
preciso ser Outros.
Eu penso
renovar o homem
usando borboletas.

(Manoel de Barros)

Send to Kindle
29 Aug 22:57

alegria

by Francisco Nunes

Aquele que transforma em beleza todas as emoções – sejam de melancolia, de tristeza, prazer ou dor – vive na perfeita alegria.

(José da Graça Aranha)

Send to Kindle
29 Aug 22:56

O homem com o calcanhar ferido e a coroa de espinhos! (Horatius Bonar)

by Francisco Nunes
Somos honrados em seguir o Homem que foi coroado com espinhos

A crucificação de Jesus foi a cena final de toda uma vida de crucificação!

Ele carregava uma cruz desde a hora em que foi colocado na manjedoura. Todos os dias Ele carregou a cruz. Sua vida era apenas uma peregrinação ao Calvário com a cruz sobre os ombros. Todo o Seu curso sobre a terra foi uma jornada de sofrimento. Foi tudo opróbrio e tristeza, de Seu berço até o túmulo. Sua vida foi de aflição; Sua morte foi a suma de Suas muitas dores, a reunião de todas elas, espremendo-se para dentro de Seu cálice de uma vez, até que o vaso rompesse, porque ele não podia suportar mais.

Ao longo da vida Ele foi o “homem de dores”. Ele estava familiarizado, “experimentado nos sofrimentos” (Is 53.3).

Seu calcanhar ferido (cf. Gn 3.15) é apenas outra maneira de expressar Seu caráter como o Sofredor, o Filho do homem crucificado. É o Homem com o calcanhar ferido que ganhou nosso coração!

É a Ele que seguimos, e Seu calcanhar ferido nós o gravaremos em nossa bandeira como nosso emblema mais honroso. Somos seguidores do Homem com as mãos e os pés perfurados, o Homem que é todo coberto com as marcas das bofetadas, do flagelo e das cuspidas, o Homem com a coroa de espinhos!

 


(Traduzido por M. Luca, revisado por Francisco Nunes. Este artigo pode ser distribuído e usado livremente, desde que não haja alteração no texto, sejam mantidas as informações de autoria e de tradução e seja exclusivamente para uso gratuito. Preferencialmente, não o copie em seu sítio ou blog, mas coloque lá um link que aponte para o artigo.)

Send to Kindle

O post O homem com o calcanhar ferido e a coroa de espinhos! (Horatius Bonar) apareceu primeiro em Campos de Boaz.

28 Aug 18:16

Andrew Dunstan: Quick tips

Found in the last couple of days.

1. If you have more than one active database, and you're using text format logs, make sure you have %d (the database name) in your log line prefix. Not knowing which database the log line comes from can be confusing and makes life more difficult.

2. If you report on a possible database error, report from the Postgres logs, not from your client's logs. We need to see things from the database's point of view. In the case in point, the Postgres logs conatined no relevant errors at all, i.e. this wasn't a Postgres error.

3. Found when trying to resize a data volume on Amazon: certain Linux disk partitioning utilities don't optimally align partitions by default, notably sfdisk and cfdisk. Stay away from those, or make sure you explicitly choose proper alignment for partitions. Programs that do the right thing include fdisk and parted. In general you are probably best to stick to using parted.
27 Aug 17:59

Férias no dicionário

by claudiomoreno

Edu sáb ago 2015

Veja como um bom dicionário pode transportar seus filhos para um mundo de aventuras e descobertas.

Para aqueles que, como eu, ainda têm criança em casa, a segunda metade de julho é a época ideal para chegar mais perto dos petizes e compartilhar com eles alguns breves mas preciosos momentos culturais (suspeito, às vezes, que o prazer seja bem mais nosso do que deles, mas não faz mal: todos vão sair ganhando). Se não tiver um bom livro ou um bom filme à mão, aconselho a recorrer ao dicionário, que tantas aventuras pode oferecer. Quer ver como é fácil, leitor? Pois há dias se ouve aqui em casa (muito mais vezes, confesso, do que eu gostaria) a música Pomar, do incomparável grupo Palavra Cantada ― uma composição infantil bem ritmada em que desfilam todas as frutas conhecidas e as árvores que as produzem (“mamão, mamoeiro; banana, bananeira; pera, pereira…”). O que dá para tirar daí? Muito mais do que se pensa, como vamos ver.

Primeiro, tenho certeza de que nosso pequeno ouvinte não ficará indiferente ao ser informado de que, em nossa língua, a árvore sempre tem o mesmo gênero que sua fruta: abacate, abacateiro, mas laranja, laranjeira, e que este princípio vale para todas elas ― com a enigmática exceção do figo, que nasce na figueira. Como esse é um caso único entre centenas, temos aí um bom pretexto para voltar ao passado, no período em que a nossa e as demais línguas românicas se formavam ― quando descobriremos que, no Catalão, a fruta também é feminina (una figa). Não fica difícil, assim, defender a ideia de que o Português preferiu dar o gênero masculino à fruta para distinguir da figa, aquela mãozinha sem-vergonha com o polegar enfiado entre o dedo médio e o indicador, gesto usado tanto para afastar o mau-olhado quanto (tirem as crianças da sala!) para sugerir aquilo que Luzia foi fazer na horta.

Em seguida, que tal uma história de sangue e horror, daquelas que sempre agradaram aos pequenos? Que tal contar-lhes a lenda do Papa-Figo, o velho sinistro que raptava meninos para extrair-lhes o fígado, usado na tentativa de cura de um ricaço leproso? E explicar que o tal velho papão devia se chamar, na verdade, Papa-Fígado, mas que esse Papa-Figo popular não é tão errado como parece, porque figo e fígado nasceram juntos, na mesma hora e na mesma maternidade? Basta lembrar que era costume entre os romanos engordar os gansos com figos em passa, a fim de que sua carne ficasse com sabor mais refinado, e que a parte mais requintada era o jecur ficatum  (jecur, “fígado” + ficatum “com sabor de figo”). Com o tempo, o primeiro elemento se apagou e só restou ficatum ― exatamente como aconteceu com uma (linha) diagonal, um (dente) canino, uma (carta) circular, entre tantos outros.

Como um guia na floresta, você continua mostrando os caminhos que ligam pontos que pareciam tão distantes: o sobrenome Figueiredo que aparece na lista de chamada do colégio vem de um bosque de figueiras, assim como de árvore saiu arvoredo e de vinha saiu vinhedo. E mais ainda teria para contar, se não terminassem antes as férias, tão curtas, ou  a paciência dos filhos.

[A ilustração tem a marca registrada do genial Edu Oliveira]

Convido os amigos leitores a me acompanhar no grupo Sua Língua no Facebook, onde conversamos sobre tudo o que diz respeito a nosso idioma.

PORTUGUÊS AO VIVO – Acaba de entrar no ar o meu curso de Língua Portuguesa – aulas, exercícios e testes, todos gravados por este que vos escreve.

27 Aug 13:36

Quer ter cobertura wireless em toda a sua casa?

by Pedro Pinto
As redes wireless estão hoje presentes na maioria das casas. Aspectos como a mobilidade, segurança e boas velocidades de transferência de dados são alguns dos factores que fazem com que este tipo de tecnologia seja uma das...
27 Aug 13:29

Em 5 anos, 50% farão home office

by Marcia Breda

Ficou surpreso? Mas é verdade! Ao que tudo indica, até 2020, o home office vai ser bem mais comum do que a gente imagina. Os dados são de um estudo feito pela empresa de software Citrix e indicam uma grande mudança de comportamento, causada prioritariamente pelo avanço da tecnologia. De acordo com a pesquisa esse não é apenas o desejo dos funcionários mais exigentes, mas algo que está se transformando em lei em vários países. Você sabia que 43% dos empregados preferem fazer um acordo de horários mais flexíveis ao invés de ganhar um aumento de salário?

Algumas empresas já estão se adaptando e o trabalho remoto é uma realidade. Outras vantagens são oferecer  uma jornada mais curta (e salário mais curto!) e a possibilidade de trabalhar apenas quatro dias na semana ou ainda, como faz a Netflix, proporcionar férias ilimitadas aos seus funcionários.

Freelas

Outro dado impressionante é o aumento do número de freelancers. Até 2020, a expectativa é que 40% da população dos EUA trabalhe nesse formato. Temos um motivo para isso? SIM! Os freelas passaram a faturar 50% a mais nos últimos cinco anos. Quem aí teve um aumento de 50% no salário nesse mesmo período? Esse crescimento também é relacionado com o desejo das pessoas de gerenciarem melhor o próprio tempo e com a pressa das empresas, que preferem contratar um profissional melhor, mais caro e mais eficiente, mas apenas por um período determinado.

Escritório

Em um trabalho tradicional, os funcionários passam 80% do tempo dentro do escritório. O restante é ocupado com reuniões externas e visitas aos clientes. Essa obrigatoriedade pode limitar talentos, impulsionar o desperdício de tempo e procrastinação, além de diminuir drasticamente a empolgação dos empregados. De acordo com a Citrix, essa postura também deve mudar nos próximos anos. Com tanta tecnologia disponível, será comum a equipe passar 20% do tempo em uma locação oficial e 80% em lugares alternativos, como cafés, coworkings ou até mesmo em casa.

 Meu trabalho

Segundo dados da Fast Company, o objetivo da geração Z (nascidos entre os anos 90 e 2010) é criar o próprio emprego e trabalhar de forma independente. O bom disso é que eles vão ter mais recursos disponíveis para fazer o que querem. Dessa forma, estamos criando um mundo onde o que você gosta de fazer e o que você faz para ganhar dinheiro acabam sendo a mesma coisa! É o que estudiosos chamam de “economia do propósito”.

O estudo da Citrix é bem completo e além das relações com o trabalho num futuro próximo, também aborda vários desenvolvimentos sociais e tecnológicos. Vale a pena dar uma olhada em tudo. Confira aqui.

Você também pode gostar de:

>>> Qual é a melhor hora para ser criativo?

>>> 5 dicas para viajar e trabalhar

>>> Brasil é o segundo em home office

 

O post Em 5 anos, 50% farão home office apareceu primeiro em Adoro Home Office.

26 Aug 17:45

Shaun M. Thomas: PG Phriday: Partitioning Candidates

What’s a good table to partition? It’s not always a question with an obvious answer. Most often, size and volume determine whether or not a table should be broken into several chunks. However, there’s also cases where business or architecture considerations might use partitioning to preserve a shared table structure, or drive aggregate analysis over a common core. In PGDB (PostgreSQL), this is even more relevant because of how partitioning is handled through inheritance.

For now, let’s focus on elements that can be directly quantified, such as size and row count. Luckily, the PGDB system catalog contains this information, so let’s give it a look. Let’s see what the catalog has to say about the sensor_log table introduced in last week’s article on The Case for Partitioning.

SELECT oid::regclass::text AS TABLE_NAME,
       pg_size_pretty(pg_total_relation_size(oid)) AS total_size,
       CEIL(reltuples / 1000000) AS million_rows
  FROM pg_class
 WHERE relkind = 'r'
   AND reltuples > 10000000
 ORDER BY relpages DESC;
 
 TABLE_NAME | total_size | million_rows 
------------+------------+--------------
 sensor_log | 12 GB      |          100

With the help of a couple administration functions, we can focus on any tables that are immediate outliers. In this case, the only criteria that really matters, is that we want to see any tables with more than 10-million rows. Why that particular number? Tables that cross this threshold often continue to grow relatively quickly due to a consistent data stream. This volume tends to increase over time, and large tables face a number of problems.

Consider the sensor_log table as a basis for analysis. At 12GB, it probably fits in memory fairly easily. In addition, it’s extremely narrow, having only four columns. Yet even with this going in our favor, Anything that needs to read the entire table will encounter occasional issues. Specifically:

  • Rebuilding a single index takes 2-5 minutes on a completely idle server with no memory pressure. Change any of these variables and the rebuild time can increase dramatically.
  • Directly vacuuming takes 1-2 minutes because it uses all available IO. Auto-vacuum however, halts frequently to prevent interfering with normal operations and can persist for hours depending on activity. PGDB tables must be vacuumed to reclaim dead rows because of MVCC. The reusable rows are not available until the vacuum is complete. As the table size increases, so does the time required to vacuum it, and thus the chance of table or index bloat since rows are not recycled as frequently.
  • Large bulk inserts, updates, or deletes exacerbate the above concerns since they are likely to trigger auto-vacuum or auto-analyze.
  • Risk of process interruption increases. Dumping or importing larger tables is generally safe, yet the costs of canceling, resuming, or retrying are significantly higher.

I’ll illustrate some of these points with a couple of anecdotes.

I frequently work with ridiculously over-provisioned systems. One of these was completely PCIe NAND-based storage with over 128GB of RAM. Even so, we had a single 500GB table with over 250M extremely wide rows based on interactions with an upstream service exchange. Occasionally we would run maintenance where we would export large chunks of the table would to disk before being archived and removed. After that process completed, it wasn’t uncommon to dump the table and re-import it, and then rebuild the indexes.

Even after reducing the table by 50%, simply rebuilding the indexes required at least an hour for each one. For one particular composite index on a couple of VARCHAR columns, it was closer to two hours. This was literally as fast as the machine could perform the task. This was despite taking several extreme steps to reduce these delays and related downtime.

  • We increased maintenance_work_mem to 1GB to match the PGDB base file size.
  • We pointed base/pgsql_tmp at /dev/shm, a shared-memory RAM drive.
  • We wrote a custom process to rebuild the indexes in parallel.

None of this was enough. After including verification steps, we could not reduce the outage window below two hours. All because a single table acted as a single entity comprised of a vast amount of data. Physics has its limitations, and processing 250-million of anything requires vast resources. If the table was partitioned by month, we could have made better use of the idle processors and reduced the downtime to a mere twenty minutes.

Another more recent instance illustrates the risks associated with bulk loading large structures. As is sometimes common with bulk data, a large volume of data is imported, and to prevent build-up, older data is sent to an archive server and deleted locally. The problem for this second example is sheer volume. Every single day consists of over 100-million data points.

The loading process itself is extremely efficient, making use of COPY for direct imports from the standard input stream, parallel threads, small batches, the works. Unfortunately the tables were originally designed for 1/10th that amount of data. Thus once the archival job starts, the real pain begins. Isolating the old rows is extremely slow. Removing them with DELETE is even slower. Then vacuuming a 500GB-1TB table continues to harass the storage subsystem.

What could we do instead? Partition. Then the archive process would look like this:

  1. Find oldest partition.
  2. Obtain the contents and send them to the archive.
  3. Drop the partition.

No slow DELETE. No VACUUM. And instead of a SELECT statement to retrieve the rows, we can just use COPY to consume the entire partition. Revising the table architecture in this case prevents several fruitless hours of needless disk churning and associated risks of delaying dependent jobs.

One of the major benefits of PGDB partitioning is to make use of constraint exclusion. This allows the query planner to only consider partitions that have a WHERE clause matching the partition constraint. This approach can vastly improve query performance in some cases, especially where sequence scans are concerned. Instead of scanning hundreds of millions of rows, the database might only need to touch some fraction of that amount. There’s no other way to have a “partial” sequence scan.

But partitioning is so much more versatile than simply reducing query costs. As above, maintenance considerations can play a major role in determining partitioning candidates. Even if a table simply accumulates rows day after day, and no process ever updates or deletes anything for the duration of its existence, partitioning is still a good idea. Why?

Statistics. In order to make informed decisions regarding indexes, looping, and so on, PostgreSQL builds statistics for tables during the ANALYZE process. The default_statistics_target setting has a maximum value of 10,000. This means that no matter the size of the table, the database will never sample and calculate more than 10,000 values per column. Because of the costs involved with tabulating these statistics, I rarely set this over 1000, and query plans are generally fine with at least 100 samples.

For large tables however, this becomes more important. With only 1000 samples potentially representing billions of rows in a single table, the representative capability of that data becomes diluted and inconsistent. If a large table is loaded during the day, for instance, the amount of data for the current day is vastly outweighed by past data. This can cause queries that only need current data to be underestimated, and then the database uses a nested loop because it thinks there are only ten results, when there are really two million.

We’ve covered nested loops and how they can be problematic in the past. Looping through two million unexpected random reads is a worst-case scenario, but it happens every day due to inadequate statistics. If, however, current data were isolated to a more relevant partition, this scenario would be much less likely. Combined with constraint exclusion, query execution times can be reduced from several hours to a few milliseconds simply due to planning improvements.

And yet businesses continue to suffer with monolithic tables containing billions of rows, wondering why everything is so slow. They complain that it takes hours, or even days, to rebuild certain tables due to excessive turnover causing runaway bloat. They throw faster disks and more memory at the problem, confused at why that didn’t help.

It doesn’t have to be that way, if we use the tools we’re given.

24 Aug 17:29

Josh Berkus: Please, security test our code!

Since Oracle was so nice as to remind everyone what software security is really like with closed-source software, I wanted to remind people how finding and reporting security issues works in PostgreSQL:
  1. Feel free to "reverse engineer" the code.  In fact, here it is on github if you want to scrutinize it.
  2. We generally credit security researchers who find real security holes (with limitations for duplicates, etc.).  Over the last few years, some of the most critical bugs in PostgreSQL were found by professional security researchers doing things like fuzz testing.
  3. If you think you've found a security issue, please report it to security@postgresql.org. If it turns out to be a non-issue, we'll tell you, and you can report it as a regular bug.
  4. Be prepared to answer questions about your report.  We showed you our code, you can show us yours.
Our open approach to security is the reason why PostgreSQL was rated by the Database Hacker's Handbook as "the most secure by default": more secure than Oracle.  And why for five Defcons in a row, security hackers have been unable to crack PostgreSQL in the annual Schemaverse competition.

And please ... update your servers! We send out those incremental updates for a reason, and often as not, there are security patches.   More information on our Security Page.

Note: the above is my personal opinion and is not the opinion of The PostgreSQL Project or any other organization.
24 Aug 14:30

FTMERJ realiza Circuito Interestadual no Park Shopping, em Campo Grande, com diversas atrações

by IMPRENSA1

Público do shopping também poderá participar de oficinas para iniciantes e concorrer a prêmios

Da redação, no Rio de Janeiro (RJ) – 11/8/2015

Após a conquista do ouro nos Jogos Pan-Americanos de Toronto pelo carioca Hugo Calderano, a Federação de Tênis de Mesa do Estado do Rio de Janeiro (FTMERJ) e a MKT Incentivos irão organizar o Circuito Interestadual de Tênis de Mesa, no Park Shopping Campo Grande, zona oeste da capital carioca, a partir do dia 25 de agosto.

O evento, que segue até o final de semana seguinte, contará com competições profissionais, aulas para iniciantes e apresentações de craques da modalidade. Nos dias 25 e 27 de agosto e 05 e 06 de setembro, das 14 às 18h e das 20 às 22h, clientes do shopping aprenderão mais sobre o esporte com aulas gratuitas para iniciantes. As inscrições começarão às 12h do dia das aulas.

No intervalo das competições, apresentações convidarão o público para o “Desafio do Saque”, valendo grandes prêmios. Para ganhar, será preciso devolver cinco saques de um dos atletas. Segundo Pablo Ribeiro, presidente da FTMERJ, Campo Grande foi o bairro escolhido para receber o campeonato por ser um celeiro de bons atletas.

“Vários atletas da Federação são da zona oeste e enxergamos o grande potencial para a descoberta de novos. Nesse processo de busca por talentos, é fundamental a aproximação e interação com o público para que conheçam o esporte”, ressaltou o dirigente.

Confira abaixo a programação completa das competições:

- Dia 29: atletas do Absoluto A – categoria com maior destaque no tênis de mesa;

- Dia 30: atletas paralímpicos e categorias femininas;

- Dia 05: atletas sub-17;

- Dia 06: torneiro amadores ParkShopping, com alunos iniciantes que participaram das aulas ao longo do evento.

A Confederação Brasileira de Tênis de Mesa conta com recursos da Lei Agnelo/Piva (Comitê Olímpico do Brasil e Comitê Paralímpico Brasileiro) – Lei de Incentivo Fiscal e Governo Federal – Ministério do Esporte.

Siga a CBTM nas redes sociais:

FACEBOOK: www.facebook.com/TMBrasil
TWITTER: www.twitter.com/cbtm_tm
INSTAGRAM: @cbtenisdemesa

iDigo | Assessoria de comunicação CBTM
imprensa@cbtm.org.br

Tweet This
21 Aug 21:14

Processo front-end na Locaweb

by diego@tableless.com.br (Tableless.com.br)

processo-frontend-locaweb

É muito interessante entender como funcionam os processos em grandes empresas e comparar com processo que você executa na sua própria empresa. Depois que li o post que o Jaydson fez falando um pouco sobre o processo de desenvolvimento no Terra, fiquei de escrever um artigo parecido mostrando mais ou menos como nós aqui da Locaweb fazemos nosso front-end. Sugiro que leia o post do Jaydson e mate a sua curiosidade sobre o processo que eles tem lá.

Testes

Eu vou repetir o que o Jaydson e o Rafael Rinaldi já falaram tantas vezes em eventos e artigos: Fazer testes front-end é difícil. Ferramentas front-end ainda estão caminhando e nos últimos anos tivemos uma explosão de novidades que nos ajudou muito a avançar na profissionalização da área. Mas testes ainda é um dos pontos fracos. Conseguimos testar muito bem JavaScript usando Jasmine, QUnit e tantos outros, mas testes CSS ainda é um problema grande.

Essa semana adotamos na equipe a utilização do Wraith, um teste de comparação de telas feito pelos desenvolvedores da BBC. Essa é só uma forma de conseguir testar a consistência das telas do seu produto. O Hardy, por exemplo, que usa o Cucumber para comparar seu código.

Se você se interessar por testes CSS e quiser se aventurar nesse mundo, sugiro que visite o site CSSTe.st. Eles compilaram informações de várias iniciativas e sistemas que fazem o trabalho de testar CSS mais fácil. Dá uma vasculhada lá, você vai achar coisas bem interessantes.

Pull Request

Fazemos branch feature. Isso quer dizer que ninguém faz fork do projeto. As modificações são feitas em branchs separadas e submetidas via Pull Request (ou Merge Request, dependendo do sistema que você usar).

O Pull Request precisa ter o OK de duas pessoas do time antes de ser aprovado. Antes de baixar o branch, a gente avalia algumas coisas antes:

  1. As issues e o Pull Request estão bem descritivos mostrando qual o problema e o qual a solução adotada, com instruções exatas do que deve ser testado e avaliado?
  2. O CI passou? Tá okay?
  3. Se for JavaScript, os testes foram feitos? Se já existiam, precisou de modificação?
  4. Documentação está okay? Todas as atualizações foram feitas?

O pior momento é descrever bem o Pull Request e as Issues. Temos que ter em mente que isso faz parte do Changelog e é muito útil para consultas posteriores.

O pessoal da PlataformaTec tem uma cultura muito rica nesse assunto (e outros também). Dá uma olhada no processo deles, que interessante!

Framework

Desenvolvemos um framework interno chamado Locaweb Style. Na verdade, hoje existem 3 tipos de frameworks de interface aqui na firma. Cada um serve para serviços com designs e propósitos totalmente diferentes: um para a área de Checkout (compra), outro para área de Central do Cliente e o principal que é para a interface dos produtos.

Esso deve ser padrão em muitas empresas e várias pessoas vão perguntar por que não usamos o Bootstrap. Nosso framework principal, que é o que faz a interface dos produtos que tem contato direto com o usuário se chama Locaweb Style e você pode ver o projeto (que é totalmente open source) no nosso GitHub. A documentação está bem completa e pode ser vista aqui. A ideia é que todos os produtos que tenham interface com o usuário use esse framework. Esse ponto é importante porque resolve uma série de problemas como:

  • Processo – As três equipes trabalham melhor quando as responsabilidades são bem dividas.
  • Experiência padronizada – Padronizando a interface e as interações, o usuário tem uma experiência melhor entre os produtos.
  • Tirar a responsabilidade do client-side dos back-ends – Cá entre nós: back-end não tem que se preocupar se o layout está bonito, se tem botão desalinhado, se aquilo vai ser bem visto no celular, se o CSS está bem escrito etc etc etc…
  • Excesso de projetos – São diversos projetos ao mesmo tempo, com equipes enxutas, trabalhando paralelamente. Não perde-se mais tempo de desenvolvimento criando telas parecidas do zero.
  • UX com mais liberdade – O time de UX precisa de atenção, carinho e de alguém que sente com eles para se preocupar com coisas que façam o nosso cliente amar o produto.
  • Liberar gargalos – Os times de UX e de front-end eram gargalos constantes. Precisávamos agilizar o processo.

Já estamos na versão 3 e cometemos uma série de erros nas duas primeiras versões. O maior erro que eu posso citar é a utilização do Bootstrap como base. Geralmente, o design definido pelo designer do time não era igual ao do Bootstrap. Claro. A empresa precisa de uma identidade própria. Logo, tínhamos o problema de recriar o design dos módulos e muitas vezes, precisávamos estender as funcionalidades JS de alguns módulos do Bootstrap. Quando percebemos, estávamos reescrevendo boa parte do framework. Logo, decidimos retirar totalmente o Bootstrap da versão atual, mantendo apenas o GRID.

Stack de desenvolvimento

Não vou explicar detalhadamente cada uma das tecnologias, mas segue todas que usamos hoje para manter principalmente o framework:

  • SASS – Usando sintaxe .sass.
  • Wraith – Como teste de comparação visual de interface.
  • Jasmine – Para testes JS.
  • JSHint – Para manter a escrita de JS padronizada.
  • Rake – Para executar os testes e outras tarefas como publicação da documentação e fechamento de pacote para deploy.
  • Middleman – Para manter as documentações.
  • .editorconfig – Para manter o padrão dos editores em dia.

Nos projetos, nós nem nos preocupamos com o build dos assets. O Asset Pipeline está plugado em todos os projetos e faz tudo muito bem. Não há Grunt ou Gulp nos projetos.

Usamos Travis ligado no nosso GitHub. Os projetos todos internamente usam Jenkins.

Deploy e ambiente

O deploy melhorou muito nos últimos anos. Hoje estamos assim: alguns produtos, não todos, podem fazer deploy a qualquer hora. Alguns precisam abrir um ticket para agendar uma janela. Nós, quando precisamos fazer um deploy do framework, ainda precisamos agendar. Mas já estamos andando para fazer deploy a qualquer momento do dia sem limite de vezes. Como os produtos usam o Locaweb Style com a versão travada, não há nenhum tipo de risco. O Deploy também pode ser descomplicado e automatizado, já que são apenas assets.

O nosso ambiente é bastante comum: temos um ambiente de teste, um de homologação e produção. Simples assim.

Pontos falhos

Existem uma série de coisas que precisamos melhorar assim que encontrarmos tempo entre um projeto e outro. Mas o principal é manter a padronização de escrita de JS nos projetos. Há projetos que não usam nenhum tipo de pattern (nós usamos o Revealing Module Pattern), outros que usam CoffeeScript (o padrão é não usar), outros projetos que misturam JS puro com jQuery (o padrão é usar sempre a abstração do jQuery). A ideia é que nenhum projeto precise ter CSS para customizações. Toda a interface precisa estar dentro do Locaweb Style. Nem sempre é possível, já que há uma premissa que tudo o que está no framework precisa ser usado em dois produtos no mínimo. Não tem sentido colocar algo lá se apenas um produto vai usar e os outros não.

Entrosamento

Ter uma equipe unida e entrosada é difícil. Todo mundo precisa estar disposto a fazer aquele relacionamento dar certo, sempre entendendo as diferenças pessoais de cada um, como em um casamento. Ter uma equipe 100% unida, sem brigas, concordando com tudo é impossível. Eu tenho a sorte de trabalhar com uma equipe que se conhece e sabe exatamente onde temos que melhorar mais, entendendo os pontos fracos e principalmente nossos pontos fortes. Leva tempo para criar esse entrosamento. Muito trabalho, suor e sangue. São muitas reuniões de feedback, 1 on 1, retrospectiva…

Outra coisa que ajuda é a multidisciplinaridade entre os integrantes. Temos caras que lá programam um pouco de back. Outros que são mestres no CSS e tem um chamego especial para o lado de UX e Design, outros que gostam de mexer com infra. Isso tudo conta como ponto positivo.

Lendo assim, até parece simples! 😉

---
Este artigo foi escrito por Diego Eis.

Visite o nosso site para mais posts sobre desenvolvimento web! Tableless.

21 Aug 14:15

Indicações de sexta (6)

by Francisco Nunes
Confronte todas as coisas com a verdade da Bíblia

 

Toda sexta-feira, uma pequena lista de artigos cuja leitura recomendamos. Além disso, indicaremos também uma mensagem e um hino para serem ouvidos. Nosso desejo é que lhe sejam úteis para aprofundar seu conhecimento do Senhor, para capacitar você a servi-Lo e para despertar em você mais amor por Ele.
É importante relembrar o que dizemos em Sobre este lugar: a menção a um autor ou a alguma fonte não implica aprovação total ou incondicional de tudo o que é ali ensinado nem indicado em outros links ou em vídeos relacionados, etc; indica, outrossim, que naquele artigo específico há conteúdo bíblico a ser apreciado.

Artigos que merecem ser lidos

  1. A verdadeira fé gera compromisso, de A. W. Tozer.
  2. O debate sobre o batismo com o Espírito Santo, de Augustus Nicodemus. Um estudo comparativo entre a posição de Martin Lloyd-Jones e a de John Stott.
  3. Fui Eu que fiz isso: texto encontrado na Bíblia de John Nelson Darby após sua morte.
  4. Biografia de George Vicesimus Wigram, cooperador de John Nelson Darby e um dos “irmãos“.

Mensagem que merece ser ouvida

Arrependimento bíblico, por Leonard Ravenhill

Hino que merece ser ouvido

Are you washed in the blood?

Letra e música de Elisha A. Hoffman, publicada em 1878

Letra original

Have you been to Jesus for the cleansing pow’r?
Are you washed in the blood of the Lamb?
Are you fully trusting in His grace this hour?
Are you washed in the blood of the Lamb?

Refrain:
Are you washed in the blood,
In the soul-cleansing blood of the Lamb?
Are your garments spotless? Are they white as snow?
Are you washed in the blood of the Lamb?

Are you walking daily by the Savior’s side?
Are you washed in the blood of the Lamb?
Do you rest each moment in the Crucified?
Are you washed in the blood of the Lamb?

When the Bridegroom cometh will your robes be white?
Are you washed in the blood of the Lamb?
Will your soul be ready for the mansions bright,
And be washed in the blood of the Lamb?

Lay aside the garments that are stained with sin,
And be washed in the blood of the Lamb;
There’s a fountain flowing for the soul unclean,
Oh, be washed in the blood of the Lamb!

Letra em português
Salvo Estás? Limpo Estás?

Tens achado em Cristo plena salvação
Pelo sangue vertido na cruz?
Toda mancha lava de teu coração
Este sangue eficaz de Jesus

Coro
Salvo estás, limpo estás
Pelo sangue de Cristo Jesus?
Tens teu coração mais alvo que a luz
Foste limpo no sangue eficaz?

Vives sempre ao lado do teu Salvador
Pelo sangue que mana da cruz?
Do pecado foste sempre vencedor
Como foi teu bendito Jesus?

Terás roupa branca quando vier Jesus
Foste limpo na fonte de amor?
Estás pronto pra seguir ao céu de luz
Pelo sangue purificador?

Cristo hoje dá pureza e mui poder:
Fita os olhos na cruz do Senhor
Dela, fonte sai que te enche de prazer
Que te farta de vida e vigor

Send to Kindle

O post Indicações de sexta (6) apareceu primeiro em Campos de Boaz.

20 Aug 18:23

Sobre Aaron Swartz

by diego@tableless.com.br (Tableless.com.br)

aaron-swartz

Você conhece Aaron Swartz? Não? Ele está mais presente na sua vida do que você imagina. Duvida? Talvez você conheça RSS. RSS é um subset do XML e sua principal função é facilitar a agregação e distribuição de conteúdo. A especificação 1.0 do RSS foi lançada em 06/12/2000. Aaron Swartz foi um dos co-autores do RSS. Ele só tinha 14 anos. Eu sei que você se sente orgulhoso quando consegue implementar algum framework JS nos seus projetos. Eu também me sinto. Mas existem algumas pessoas que estão em outro patamar. Um patamar muito distante do mundo dos normais. Aaron Swartz é um destes caras.

Alguns de nós (eu) se orgulham porque viveram numa época de transição, onde os browsers brigavam, onde os padrões web se popularizaram e etc. O cara viveu em uma época onde o direito autoral ficou totalmente obsoleto com a chegada da internet. Essa colisão entre a maneira antiga de fazer as coisas, com as novidades que Internet trouxe, foi uma época de ebulição tecnológica e política. Tudo era novo para todo mundo. Ninguém sabia lidar com situações que hoje em dia são totalmente comuns para nós. Aaron era do tipo que saia da sua cidade (Chicago) e ia Washington acompanhar a suprema corte e um bando de advogados decidirem sobre direitos autorais e outras coisas. Pensa no nível de curiosidade desse menino. Com 15 anos, ele estava ajudando a escrever as especificações do Creative Commons.

Except for education and entertainment, I’m not going to waste my time with things that won’t have an impact.

Mas você certamente deve saber que ele foi um dos co-fundadores do Reddit. O site foi vendido em Outubro de 2006 para a Condé Nast (dona da Wired). Era uma cultura empresarial que ele nunca havia visto e certamente nunca iria se acostumar. Ele até escreveu um post sobre o ambiente de trabalho. Aaron Swartz foi despedido em Janeiro de 2007 porque simplesmente deixou de ir ao trabalho.

Mas o que Aaron sabia que a principal característica da internet era a liberdade de comunicação. Ele sabia que a internet permite que todos possuam uma licença para falar e expor opiniões.

I don’t hold grudges (it’s not productive) but I learn from my experience.

Eu não quero contar a história do Aaron aqui e toda a revolução que ele causou lutando em favor da liberdade de acesso à informação. Você pode ver toda sua história no Netflix, em um documentário chamado The Internet’s Own Boy: The Story of Aaron Swartz.

O importante para mim é que você conheça um pouco da história da internet e tudo o que ela pode representar. Na verdade essa é uma história como várias outras, perdidas por aí e que só aparecem quando algo trágico acontece, nesse caso a morte do Aaron em 2013 (suposto suicídio).

A história da internet é fascinante. Mas as histórias de iniciativas e pessoas como Aaron, Dave Winer (eles até se estranhavam de vez em quando) e vários outros (até mesmo o gênio Tim Berners-Lee), são mais fascinantes ainda. São histórias de caras que simplesmente trabalharam em prol da web, do livre acesso à informação e de tecnologias que permitem a internet ser totalmente aberta e livre.

As tecnologias que usamos hoje para desenvolver nosso produtos e que permitem facilitar a vida de milhões de pessoas, não são fruto do acaso, mas de pessoas realmente engajadas, que nem sempre se preocupam com o dinheiro, mas principalmente com os efeitos positivos que suas iniciativas podem ter.

Você deve parte da sua vida online ao Aaron Swartz.

---
Este artigo foi escrito por Diego Eis.

Visite o nosso site para mais posts sobre desenvolvimento web! Tableless.

20 Aug 13:42

Nunca! (J. C. Ryle)

by Francisco Nunes
Nunca te deixarei!

“Eu nunca te deixarei nem te desampararei1” (Hebreus 13.5).

 

Que cada crente entenda essas palavras e as guarde no coração.

Mantenha-as à mão e tenha-as frescas na memória – você vai precisar delas um dia, quando:

Os filisteus virão sobre você,

A mão de doença vai prostrá-lo,

O rei dos terrores se aproximará,

O vale da sombra da morte se abrirá diante de seus olhos.

Então, virá a hora em que você vai descobrir que nada é tão reconfortante como um texto como esse, nada é tão animador quanto um verdadeiro sentimento do companheirismo de Deus.

Atenha-se a esta palavra: nunca. Ela vale seu peso em ouro. Apegue-se a ela como um homem se afogando se agarra a uma corda. Segure-a com firmeza, como um soldado atacado por todos os lados agarra sua espada. Deus disse, e Ele vai manter: “Eu nunca te deixarei nem te desampararei”.

Nunca! Embora seu coração seja muitas vezes fraco, você esteja cansado de si mesmo e suas muitas falhas e fraquezas o oprimam, mesmo assim a promessa não vai falhar.

Nunca! Embora o demônio sussurre: “No final, eu terei você; ainda um pouco de tempo e sua fé irá falhar e você vai ser meu”, mesmo assim, a Palavra de Deus permanecerá.

Nunca! Quando o calafrio da morte estiver rastejando sobre você, e os amigos não puderem fazer mais nada e você estiver começando aquela jornada da qual não há retorno, mesmo assim Cristo não o abandonará.

Nunca! Quando o dia do juízo vier, e os livros forem abertos, e os mortos forem levantados dos túmulos e a eternidade estiver começando, mesmo assim a promessa vai carregar todo o fardo que estiver sobre você – Cristo não vai deixar sua alma sem o domínio Dele.

Ó cristão que lê isso, confie no Senhor para sempre, pois Ele diz: “Eu nunca te deixarei!”

Coloque todo o seu fardo sobre Ele, não tenha medo. Regozije-se em Sua promessa. Alegre-se na força de Sua consolação.

Você pode dizer com ousadia: “O Senhor é o meu ajudador, e não temerei” (v. 6).

 

 

Nota

1 Tradução da versão King James, usada pelo autor. (N. do R.)


(Traduzido por M. Luca, revisado por Francisco Nunes. Este artigo pode ser distribuído e usado livremente, desde que não haja alteração no texto, sejam mantidas as informações de autoria e de tradução e seja exclusivamente para uso gratuito. Preferencialmente, não o copie em seu sítio ou blog, mas coloque lá um link que aponte para o artigo.)

Send to Kindle

O post Nunca! (J. C. Ryle) apareceu primeiro em Campos de Boaz.

17 Aug 21:49

indicações de sexta (5)

by Francisco Nunes
Confronte todas as coisas com a verdade da Bíblia

 

Toda sexta-feira, uma pequena lista de artigos cuja leitura recomendamos. Além disso, indicaremos também uma mensagem e um hino para serem ouvidos. Nosso desejo é que lhe sejam úteis para aprofundar seu conhecimento do Senhor, para capacitar você a servi-Lo e para despertar em você mais amor por Ele.
É importante relembrar o que dizemos em Sobre este lugar: a menção a um autor ou a alguma fonte não implica aprovação total ou incondicional de tudo o que é ali ensinado nem indicado em outros links ou em vídeos relacionados, etc; indica, outrossim, que naquele artigo específico há conteúdo bíblico a ser apreciado.

Artigos que merecem ser lidos

  1. Comentário de João Calvino sobre Romanos 3.23-26
  2. O culto familiar, de A. W. Pink
  3. Biografia de Andrew Murray
  4. A atitude do cristão em relação à volta do Senhor, de Ruth Paxon
  5. Falsas doutrinas sobre a Bíblia (2), de Wilson Porte. Denúncia clara e bíblica de modismos “espirituais” que são contrários à Bíblia. Leia também a parte 1.

Mensagem que merece ser ouvida

Duas formas de morrer, por Martin Lloyd-Jones

Hino que merece ser ouvido

Jesus paid it all

(letra de Elvina M. Hall [1865], música de John T. Grape [1868]. Baseado em Is 1.18; 1Pd 1.18,19; Ap 1.5,6)

Letra original

I hear the Savior say,
“Thy strength indeed is small;
Child of weakness, watch and pray,
Find in Me thine all in all.”

Refrain:
Jesus paid it all,
All to Him I owe;
Sin had left a crimson stain,
He washed it white as snow.

For nothing good have I
Whereby Thy grace to claim;
I’ll wash my garments white
In the blood of Calv’ry’s Lamb.

And now complete in Him,
My robe, His righteousness,
Close sheltered ’neath His side,
I am divinely blest.

Lord, now indeed I find
Thy pow’r, and Thine alone,
Can change the *leper’s spots [*leopard’s]
And melt the heart of stone.

When from my dying bed
My ransomed soul shall rise,
“Jesus died my soul to save,”
Shall rend the vaulted skies.

And when before the throne
I stand in Him complete,
I’ll lay my trophies down,
All down at Jesus’ feet.

Aqui está uma história real relacionada a essa canção:

Na noite de Ano Novo de 1886, alguns missionários estavam mantendo cultos ao ar livre, a fim de atrair os transeuntes a uma missão próxima, onde reuniões seriam realizadas mais tarde. “Tudo a Cristo eu devo” [outro nome pelo qual o hino é conhecido, por conta do verso All to Him I owe da estrofe. (N. do T.)] foi cantado, e, depois de ter dado uma breve palavra, um cavalheiro apressou-se para a missão. Ele logo ouviu passos atrás de si e uma jovem alcançou-o e lhe disse:

– Ouvi você pregar na reunião ao ar livre agora mesmo. Você acha, senhor, que Jesus poderia salvar uma pecadora como eu?

O cavalheiro respondeu que não havia nenhuma dúvida sobre isso, se ela estava ansiosa para ser salva. Ela lhe disse que era uma serviçal, e tinha deixado seu lugar de trabalho naquela manhã depois de um desentendimento com sua senhora. Enquanto ela vagava pelas ruas no escuro, imaginando onde poderia passar a noite, a doce melodia desse hino a havia atraído, e ela se aproximou e ouviu atentamente. Conforme os diferentes versos eram cantados, ela sentiu que as palavras certamente tinham relação com ela. Ao longo de todo o culto, ela parecia ouvir aquilo que sua alma oprimida tinha necessidade naquele momento. O Espírito de Deus lhe havia mostrado quão pobre criatura, pecadora e miserável ela era, e a levou a perguntar o que deveria fazer. Ao ouvir sua experiência, o cavalheiro a levou de volta para a missão e a deixou com as senhoras responsáveis. A jovem rebelde foi trazida a Cristo naquela noite. Um lugar para ela lhe foi dado na família de um ministro. Lá ela ficou doente e teve de ser levada para um hospital. Ela piorou rapidamente, e tornou-se evidente que ela não estaria por muito tempo mais na terra. Um dia, o cavalheiro que ela conhecera na noite de Ano Novo foi visitá-la na enfermaria. Depois de citar alguns versos adequados das Escrituras, ele repetiu o hino favorito dela: “Tudo a Cristo eu devo”, e ela parecia tomada com o pensamento de chegar à glória. Duas horas depois, ela dormiu no Senhor.

Send to Kindle

O post indicações de sexta (5) apareceu primeiro em Campos de Boaz.