Shared posts

19 Jun 14:54

Leo Hsu and Regina Obe: Dollar-quoting for escaping single quotes

PostgreSQL has a feature called dollar-quoting, which allows you to include a body of text without escaping the single quotes. This feature has existed for quite some time. You've probably seen this in action when defining functions for example:

CREATE OR REPLACE FUNCTION hello_world(param_your_name text)
RETURNS text AS
$$
SELECT 'Hello world. My name is ' || param_your_name || '.';
$$
language sql STRICT;

Which is easier to read, than the equivalent escape quoted function:


CREATE OR REPLACE FUNCTION hello_world(param_your_name text)
RETURNS text AS
'
SELECT ''Hello world. My name is '' || param_your_name || ''.'';
'
language sql STRICT;

Continue reading "Dollar-quoting for escaping single quotes"
14 Jun 15:07

Gotas de Orvalho (105)

by Maria de Luca

Orvalho do céu para os que buscam o Senhor!

É lá na cruz que posso ver
a Tua glória e perfeição.
Olhando as trevas, posso crer
em Teu amor e compaixão.

(Edward Denny)

Não há nenhum náufrago perdido no mais profundo mar de iniqüidade que o profundo amor de Deus não possa alcançar e remir.

(John Henry Jowett)

Nossos grandes problemas são pequenos para o infinito poder de Deus, mas nossos pequenos problemas são grandes para Seu amor de Pai.

(Donald Grey Barnhouse)

O amor de Deus é sempre sobrenatural, sempre um milagre, sempre a última coisa que poderíamos merecer.

(Robert Horn)

Deus deixa depressa Sua ira, mas nunca se arrepende de Seu amor.

(Charles H. Spurgeon)

A única base do amor de Deus é Seu próprio amor.

(Thomas Brooks)

É por termos essa percepção tão superficial do amor de Deus que temos essa percepção tão defeituosa sobre Seu modo de lidar conosco. Interpretamos cegamente os símbolos de Sua providência porque lemos muito imperfeitamente o que está gravado em Seu coração.

(Otávio Winslow)

A morte de Jesus foi a abertura e o esvaziamento de todo o coração de Deus; foi a exuberância do oceano de infinita misericórdia que anelou e desejou por uma saída; foi Deus mostrando como poderia amar um pobre e culpado pecador.

(Otávio Winslow)

10 Jun 20:33

Aleksander Alekseev: Full Text Search in PostgreSQL (Slides)

Recently I've been invited to the RIT 2017 (Russian Internet Technologies) conference that took place this week in Skolkovo (a place near Moscow) to tell how to use full text search in PostgreSQL. Here are the slides:

My colleagues Oleg Bartunov and Alexander Korotkov also have been invited. Oleg's talk …

08 Jun 22:06

Bruce Momjian: Double Buffering Blues

Postgres does all heap and index page operations in a shared memory area called shared buffers. Data is read into shared buffers by requesting 8k blocks from the kernel, which will either satisfy reads from the kernel cache or retrieve them from storage devices. Writes from shared buffers are sent to the kernel, which are eventually written to permanent storage. The write-ahead log (WAL) allows writes to be performed asynchronously; this is illustrated in this presentation.

New users are often surprised that Postgres uses the kernel cache for reads and writes, but there are advantages. While the shared buffer size is fixed at server start, the kernel cache is resized based on the amount of unused memory in the system. This blog post explains how to determine the size of the Linux kernel cache.

Many database systems use direct I/O to read and write data, which bypasses the kernel cache. This has two advantages:

  • Avoids the double-copy of data from storage to the kernel cache and then from the kernel cache to shared buffers
  • Avoids double buffering (storing) of data in the kernel cache and shared buffers

Continue Reading »

06 Jun 19:42

Minha filhinha tem pesadelos com monstros. Pode ser influencia demoniaca?

by noreply@blogger.com (Mario Persona)


https://youtu.be/MXC7j1lUQWw

Esqueça querer enxergar tudo como se o diabo estivesse por detrás. Na verdade ele está por detrás de tudo, porque afinal tudo o que há no mundo não procede de Deus, mas do mundo, e sabemos que Satanás é seu príncipe. Mas isso não significa que devemos ficar ocupados com o inimigo quando temos habitando em nós um Amigo, o Espírito Santo, aquele que é maior que o mundo.

Crianças são facilmente impressionáveis e muitos pais não percebem que são os verdadeiros culpados por isso. Explico. Quando eu era criança o máximo de violência que passava na TV Philco preto e branco da sala da casa de meus pais era o Zorro e seu amigo índio Tonto. Eles lutavam com os bandidos, mas o chapéu sempre permanecia na cabeça de todos, menos na de Tonto que tinha uma pena e não usava chapéu. Quando o Zorro atirava, ele só acertava a mão do bandido para seu revólver cair. Só isso. Ninguém se machucava, ninguém morria, ninguém se assustava. Até nos desenhos do Tom e Jerry, hoje considerados politicamente incorretos, a violência era natural. Eram cabeçadas, socos no nariz, tropeções etc., coisas perfeitamente normais na vida de uma criança saudável.

Mas hoje os filmes e desenhos "para crianças" não são naturais. São violentos, mágicos e aterrorizantes. Assisti com meus netos um desenho da Disney que parecia ter tudo de inocente, com uma coelhinha policial perseguindo os bandidos. O mais novo não dormiu à noite e teve pesadelos, e só então fui parar para analisar o quanto havia de terror naquele desenho feito para crianças.

As crianças ainda não estão preparadas para filtrar o que é realidade e o que é ficção, e se no Zorro o soco era de um punho humano, no desenho moderno ele vem de um misterioso poder mágico gerado nas trevas ou por algum alienígena querendo destruir o planeta com armas de raios. Uma criança sabe se defender de um soco, mas como fazer se este vier de uma "varinha de condão" ou de um canhão de prótons?

Portanto, se você não quiser que seus filhinhos acordem assustados com pesadelos, tenha o trabalho de filtrar o que eles veem quando estão acordados. Enquanto tem muito pastor por aí pregando contra desenhos da Disney que têm alguma imagem obscena escondida em algum lugar, a maioria não percebe que o problema não está nas obscenidades humanas naturais, mas nos terrores mágicos e sobrenaturais. Faz lembrar o menino cuja mãe abriu a porta do quarto enquanto ele via um filme impróprio. O garoto logo tranquilizou a mãe: "Não se preocupe, mãe, não tem cena de nudez. Estou vendo 'O psicopata da motosserra'".

Que existe um esforço do inimigo de assustar e prender a mente infantil para seus propósitos, não há dúvida. Ou você não reparou que as crianças estão aprendendo cada vez mais a gostar do dragão?

Veja também:
http://www.respondi.com.br/2012/07/o-diabo-pode-influenciar-criancas.html

por Mario Persona

Mario Persona é palestrante e consultor de comunicação, marketing e desenvolvimento profissional (www.mariopersona.com.br). Não possui formação ou título eclesiástico e nem está ligado a alguma denominação religiosa, estando congregado desde 1981 somente ao Nome do Senhor Jesus. Esta mensagem originalmente não contém propaganda. Alguns sistemas de envio de email ou RSS costumam adicionar mensagens publicitárias que podem não expressar a opinião do autor.)
31 May 17:13

CHEIO DO ESPÍRITO

by noreply@blogger.com (Luiz Amalfi)
CHEIO DO ESPÍRITO - Este termo tem a ver com o estado do crente e, portanto, algo mais do que receber "o dom do Espírito Santo" pelo qual somos habitados por Ele (Atos 2:38; 8:15-17; 10:45; 19:2; 2 Cor. 1:21-22, Gálatas 3:2, Ef 1:13, 4:30, 1 Tessalonicenses 4:8, etc.). Estar "cheio do Espírito" (Ef 5:18, Atos 2:4, 4:31, 6:3, 7:55, 9:17, 11:24, etc.) tem a ver com dar o controle total de nossas vidas ao Espírito em um sentido prático.

Uma ilustração dada por H. P. Barker torna clara esta distinção. Ele disse. "Um visitante em sua casa não a ocupa. Ele está restrito à parte da casa à qual você o introduziu. Se, no entanto, você colocar sua casa inteira à sua disposição, e der-lhe a chave de cada quarto e armário, ele então controlará todo o lugar. Não é que ele tenha vindo para fazer isto, mas agora, por seu ato de entrega, ele está lá em completo controle. Assim também é com o Espírito Santo. Muitas vezes O restringimos a certas partes de nossa experiência e vida, mas Ele deseja ter total controle, para nos possuir inteiramente para os interesses de Cristo. Quando entregamos ao Seu controle, toda a nossa casa, então Ele está num indisputado comando dela e, nesse sentido, nos enche" (The HolySpirit Here Today, p. 77).

Assim, o crente recebe o Espírito Santo uma vez em sua vida crendo no Senhor Jesus Cristo. Quando este Hóspede divino faz dele Sua residência, Ele nunca o deixa, pois o crente é com Ele "selados para o dia" da sua "redenção" final – que é quando o Senhor vem no arrebatamento (Ef 4:30; João 14:16 – "para sempre"). Mas o crente pode ser enchido muitas vezes. Isto é porque nosso estado é como a maré vazante, e podemos não estar sempre rendidos ao Espírito como deveríamos. Sendo este o caso, não há nas Escrituras exortações aos Cristãos para serem "selados"ou "ungidos" com o Espírito. Esses termos têm a ver com a presença permanente do Espírito no crente. E como os Cristãos são crentes, já receberam o Espírito. Há, no entanto, exortações nas Escrituras para serem "cheios" do Espírito.

Bem podemos perguntar: "Como é que um Cristão se enche do Espírito?" As passagens seguintes, que falam do “encher”, nos dão a resposta:


o   Em Atos 2:1-4, dedicando-se aos interesses do Senhor.

o   Em Atos 4:31, ocupando-se com a oração e a leitura da Palavra de Deus.

o   Em Atos 6:3 e Atos 11:22-24, servindo aos outros em nome do Senhor.

o   Em Atos 7:55, testemunhando de Cristo.

o   Em Efésios 5:18-21, regozijando-se no Senhor com canto e ações de graças.


Porém, para que possamos ser preenchidos, precisamos primeiro ser esvaziados de tudo o que é incompatível com o Senhor. Muitas vezes há coisas na vida dos crentes que não têm direito de estarem ali, e elas impedem o Espírito. Consequentemente, Ele não os enche. Podem ser pensamentos impuros, motivos indignos, desejos cobiçosos, interesses e ambições egoístas, etc. Essas coisas certamente precisam ser lançadas fora e a grande questão é: "Como fazer isso"? A resposta é: "Sob o princípio da substituição". H.P. Barker deu a conveniente ilustração sobre este ponto. Ele disse: "Suponha que eu tenha em minha mão um copo, aparentemente vazio. Na verdade, ele está cheio de ar. Como posso esvaziá-lo do ar? Não por agitá-lo freneticamente com a boca para baixo, nem limpando-o com um pano. Ele é esvaziado por simplesmente estar parado em uma mesa ao passo que é enchido com água. Eu o esvazio de ar enchendo-o com água." (The Holy Spirit Here Today, pg 78). É o mesmo que ser cheio do Espírito; quando coisas e atividades Cristãs ocupam nossos pensamentos e nossas vidas, aquelas outras coisas não terão lugar nela. Se tentarmos forçar a estarmos cheios do Espírito de outra maneira, a vida cristã vai se tornar uma coisa legalista e, afinal, desmoronará por falta de energia para continuar nelas.


Estar cheio do Espírito Santo tem muito a ver com se entregar às reivindicações de Cristo e ao Hóspede divino interior. Nossas vontades são a principal acusada. Outra ilustração de H. P. Barker nos ajuda a compreender este ponto. Na Alemanha há muitos anos, um magnífico órgão de tubos de renome mundial foi construído em uma grande catedral. Um dia houve um visitante que veio à catedral e perguntou se ele poderia tocar o órgão. O zelador disse ao visitante que não lhe era permitido deixar estranhos tocarem o instrumento. O visitante insistiu, e, finalmente, depois de muita persuasão, o zelador permitiu-lhe sentar-se no órgão. Imediatamente, a música mais deslumbrante fluía daquele órgão e enchia a catedral. O zelador ficou atônito e parou imóvel, admirado, enquanto ouvia os maravilhosos sons que reverberavam pela construção. Após o visitante ter tocado por algum tempo e estando prestes a sair, o zelador veio até ele e perguntou: "Quem é você?" Ele respondeu: "Mendelssohn" – Era o próprio grande compositor! Então o zelador ficou constrangido e disse: "Imagine só; estava eu aqui impedindo você, um homem tão eminente e de tal habilidade, e o maior compositor na Europa, de tocar este órgão! Estou envergonhado de mim mesmo". Muito mais excelente do que qualquer compositor humano famoso, o Espírito de Deus entrou em nossos corações quando fomos salvos. Mas temos nós, como aquele zelador, proibido o Compositor divino de sentar-Se ao painel de controle de nossas vidas para criar, por assim dizer, "uma belíssima música" para a glória de Deus?

30 May 06:42

How Page Loading Speed Affects SEO

by James Barnes

Page loading speed is the total length of time that it takes for a website to load completely. With regard to effective SEO, page loading speed is crucial. If your website does not load quickly, visitors to your site are likely to leave rather than wait for it to load, and search engines will penalise your site’s rank if it performs poorly. Page loading speed affects more than SEO. A website that loads quickly will experience both a better conversion rate and a better user experience (UX), thereby making it more likely that visitors will continue to visit your site.

In its guidance to webmasters, Google explains how important page loading speed is for SEO. While Google considers a lot of factors in determining where a site ranks in a search, if your site loads significantly slower than your competition, your site will receive a lower ranking. Google allocates a relatively short amount of time to crawl and index a page, analyse the results, and rank the site. If your website loads slowly, Google will not have sufficient time to review your entire site and will base its ranking on only a partial view. The shortened review could have a very adverse impact on your search rank and the amount of organic traffic that you receive.

Slow page loading also adversely impacts your UX. About 40% of desktop users will abandon a site if it takes more than three seconds to fully load, and a whopping 72% of mobile users will abandon a website if it takes more than five seconds to load. If many potential visitors are abandoning your site before they actually view a single page, you are undermining any other SEO strategies that you may have implemented.

There are many reasons why your site may load slowly. Even if your site code is clean and well written, these factors could be slowing down your site:

  • Complicated themes. Special graphics may make your site look attractive, but this is one of the main reasons why websites load slowly. Before you go live with special graphics, conduct A/B testing to see what their implementation would do to your page loading time.
  • Unresponsive plug-ins. If you have not optimised the plug-ins that you use on your site, your site’s performance will suffer. Always optimise your plug-ins, and be sure that you only use plug-ins that are essential for your site.
  • Embedded media. Including video clips on your site can certainly make it look more attractive to visitors, but it is also an excellent way to slow down your site. Consider providing your visitors with links to video content rather than embedding it.
  • Inexpensive web hosts. The adage is true – you get what you pay for. Sure, you want to keep your operating costs down, but often an inexpensive web host provides a low quality service and can contribute to slow page loading times.
  • Excessive redirects. Too many redirects can slow down your website and can become especially problematic for mobile visitors to your site.

Improving your page loading speed is an excellent SEO technique that both your customers and search engines will appreciate.  Using a tool such as StatusCake page speed monitoring enables you to find out exactly where those roadblocks are that are slowing down your page loading.

25 May 18:50

São tão vastos os Teus campos, ó amado Boaz celestial!

by Francisco Nunes

Os vastos campos do Senhor

Não sei ao certo há quanto tempo este blogue existe. Seu início se deu, com certeza, há mais de 20 anos, quando, ainda preso a uma seita cristã exclusivista, comecei a conhecer a rica herança espiritual dada pelo Senhor a Seu Corpo por meio de muitos e muitos filhos.

Conforme eu conhecia autores e suas obras, mais fascinado eu ficava… com o Senhor! Quão rico Ele é! Quão insondáveis são Suas riquezas! Quão vastos são Seus campos! Quão limitados são, mesmo os mais fiéis servos, para colher os frutos, para recolher as respigas! E quanta profundidade, quanta revelação, quanto alimento há no pouco que do Senhor conhecemos! “Eis que isto são apenas as orlas dos Seus caminhos; e quão pouco é o que temos ouvido Dele!” (Jó 26.14).

Angustiado com a limitação, com a pobreza a que meus irmãos eram submetidos, como eu, naquele ambiente, comecei a divulgar frases, pequenos trechos, capítulos de livros desses autores até então desconhecidos, pelo menos para mim. E aquele pouquinho do sabor de favos de mel começou a me aclarar os olhos (cf. 1Sm 14.27)! E isso foi o embrião do Campos de Boaz.

Em algum momento, criei uma página na internet. Recordo que passei pelos falecidos GeoCities e Multiply; mexi com HTML, apesar de minha completa inaptidão técnica. (E eu encontrava mais e mais preciosidades que precisavam ser conhecidas por outros sedentos.) Mais tarde, abriguei o blogue em um domínio que me pertencia; a seguir, passei-o para outro. No meio desse processo todo, conheci o Rafael, um mais que irmão, profissional da área, que me ajudou a tornar o Campos um pouco menos amador. Identificando-se com o objetivo que eu tinha, o Rafa assumiu papel importante nos bastidores. Por fim, no ano passado, Campos de Boaz passou a ter seu próprio domínio.

A tarefa era grande demais para ser realizada sozinho, mesmo com a ajuda especializado do Rafa. Graças ao Senhor, paralelamente a esse desenvolvimento técnico, Ele trouxe ainda outros cooperadores, como Maria, editora, Hannah, a artista, e os demais respigadores, que têm cooperado na produção de conteúdo e em sua publicação. Todos com o mesmo objetivo do início: levar ao povo do Senhor um pouco das muitas riquezas que Ele espalhou em Seus campos ao longo dos séculos. Todos trabalhando voluntariamente, por amor ao Senhor e a Seu povo, nesse singelo serviço.

Quem visita o Campos regularmente, ou quem é assinante, percebeu que ele está diferente. Na quarta-feira 9 de maio, depois de horas de trabalho, que culminaram muitas horas anteriores (eu, leigamente, imaginava ser coisa bem simples fazer um blogue bonito), conseguimos colocá-lo no ar. (Obrigado a todos que participaram, obrigado a cônjuges e filhos pela paciência e apoio.)

Adotamos novo tema, procurando com ele atender melhor aos que acessam por dispositivos móveis. Pensamos em uma identidade visual, para dar mais harmonia ao blogue e todas as suas partes.

Também teremos novidades ao longo do ano. Além de iniciarmos novas seções, pretendemos lançar dois livros gratuitos, em formato digital. Também planejamos o início da publicação, no segundo semestre, de um devocional que será enviado por e-mail diariamente, mas também será encontrado aqui, em nossa página no Facebook e no perfil no Twitter (outra novidade. Em breve, estaremos em outras redes sociais). Depois de completarmos sua tradução, o devocional será distribuído gratuitamente, em formato digital.

Em breve, a equipe receberá mais dois voluntários para a tradução. Apesar das limitações de todos, desejamos, com isso, ampliar o número de publicações inéditas no blogue.

Reconhecemos nossa incapacidade, nossa insuficiência, nossa inconstância. Mas temos o desejo de que o Senhor abençoe os poucos pães e peixes que Lhe apresentemos a fim de que uma parcela da multidão faminta que O segue seja saciada.

Se você tiver sugestões ou pensa que pode contribuir de alguma forma (contamos, claro, com suas orações!), escreva para contato(a)camposdeboaz.com ou deixe um comentário.

Ao Senhor, unicamente, toda a glória!

Grande abraço!

25 May 17:49

Marco Trevisan (Treviño): Ubuntu goes GNOME, theming stays. Let’s test (and tune) it!

Hi guys! Again… Long time, no see you :-).

As you surely know, in the past weeks Ubuntu took the hard decision of stopping the development of Unity desktop environment, focusing again in shipping GNOME as default DE, and joining the upstream efforts.

While, in a personal note, after more than 6 years of involvement in the Unity development, this is a little heartbreaking, I also think that given the situation this is the right decision, and I’m quite excited to be able to work even closer to the whole opensource community!

Most of the aspects of the future Ubuntu desktop have to be defined yet, and I guess you know that there’s a survey going on I encourage you to participate in order to make your voice count…

One important aspect of this, is the visual appearance, and the Ubuntu Desktop team has decided that the default themes for Ubuntu 17.10 will continue to be the ones you always loved! Right now some work is being done to make sure Ambiance and Radiance look and work good in GNOME Shell.

In the past days I’ve released a  new version of ‘light-themes‘ to fix several theming problems in GNOME Shell.


This is already quite an improvement, but we can’t fix bugs we don’t know about… So this is where you can help make Ubuntu better!

Get Started

If you haven’t already, here’s how I recommend you get started.
Install the latest Ubuntu 17.10 daily image (if not going wild and trying this in 17.04).
After installing it, install gnome-shell.
Install gnome-tweak-tool if you want an easy way to change themes.
On the login screen, switch your session to GNOME and log in.

Report Bugs

Run this command to report bugs with Ambiance or Radiance:

ubuntu-bug light-themes

Attach a screenshot to the Launchpad issue.

Other info

Ubuntu’s default icon theme is ubuntu-mono-dark (or -light if you switch to Radiance) but most of Ubuntu’s customized icons are provided by humanity-icon-theme.

Helping with Themes development

If you want to help with the theming itself, you’re very welcome. Gtk themes are nowadays using CSS, so I’m pretty sure that any Web designer out there can help with them (these are the supported properties).

All you have to do, is simply use the Gtk Inspector that can be launched from any Gtk3 app, and write some CSS rules and see how they get applied on the fly. Once you’re happy with your solution, you can just create a MP for the Ubuntu Themes.

Let’s keep ubuntu, look ubuntu!

PS: thanks to Jeremy Bicha for the help in this post.

24 May 00:49

Gotas de Orvalho (101)

by Maria de Luca

Orvalho do céu para os que buscam o Senhor!

O fim destinado ao homem não é felicidade nem saúde, mas, sim, santidade. O único objetivo de Deus é a produção de santos.

(Oswald Chambers)

Pela justificação de Cristo, os crentes passam legalmente a ter vida; pela santificação são tornados espiritualmente vivos; pela primeira, recebem o direito à glória; pela segunda, são tornados dignos da glória.

(George Whitefield)

Um estado de salvação é um estado de santidade. As duas coisas são inseparáveis: porque a salvação não é só a redenção da pena do pecado, mas também livramento de seu poder.

(Charles Hodge)

Santos sem santidade são a tragédia do cristianismo.

(A. W. Tozer)

Quem tem uma visão superficial da salvação deprecia a doutrina da santificação.

(John F. MacArthur Jr.)

Nossa santificação não depende de mudanças ou obras, mas em fazer essas coisas por causa de Deus quando geralmente fazemos por nossa causa. Meu tempo de trabalho não é diferente do meu tempo de oração. A oração nada mais é do que o senso da presença de Deus.

(Irmão Lourenço)

Muitas vezes, eu oro: “Senhor, faze-me tão santo quanto pode ser um pecador perdoado”.

(Robert Murray M’Cheyne)

Salvar

24 May 00:38

exemplo

by Francisco Nunes

Nada é mais perigoso que um bom conselho acompanhado de um mau exemplo.

(Madame de Sablé)

24 May 00:13

aprender

by Francisco Nunes

Estou sempre disposto a aprender, mas nem sempre gosto que me ensinem.

(Winston Churchill)

23 May 18:58

Bruxaria, macumba e feitiçaria funcionam?

by noreply@blogger.com (Mario Persona)


https://youtu.be/TcfdxW4Q14g

Trabalhei numa empresa onde a secretária que dava suporte ao meu setor era "Mãe de Santo" e dona de uma loja de artigos de religiões afro-brasileiras. Conversávamos bastante, eu falando do evangelho, ela explicando como funcionavam seus "trabalhos". Um dia ela até me pediu conselho do que dizer a um amigo que queria se suicidar. Talvez tenha funcionado em parte o que falei para ela passar ao amigo, pois não tive notícia de sua morte, mas também não tive notícia de sua conversão.

Não sou nenhum especialista em religiões espíritas, sejam as consideradas "do bem" ou as "do mal". No fundo todas elas têm uma mesma origem, os "principados e potestades... os dominadores deste mundo tenebroso... as forças espirituais do mal, nas regiões celestes." (Ef 6:12). Aquela secretária me explicou que essas feitiçarias realmente aconteciam e tinham poder, e acredito nisso.

Segundo ela, os trabalhos geralmente eram feitos para agradar os demônios ou aplacar sua ira, a fim de deixar o fiel dessas religiões sossegado ou ganhar benefícios como saúde, sorte no amor e prosperidade. Hoje alguns chamados cristãos fazem “trabalhos” e oferendas — azeite, sal, velas, lenços, incenso etc. — visando as mesmas coisas. Mas a secretária explicou que também eram feitos trabalhos para prejudicar alguém, seja no sentido de conseguir tirar da outra pessoa essas coisas, ou simplesmente eliminar alguma competição.

Quando você estuda história da humanidade aprende que boa parte da informação que temos dos povos do passado é por causa de seus cultos a demônios. Templos, ídolos, objetos estão espalhados pelos sítios arqueológicos, museus e universidades denunciando o quanto o ser humano é idólatra e adorador de demônios. Quando Deus separou Israel para ser seu povo particular, deu a eles a Lei e deixou claro que deveriam ser distintos dos outros povos, que ofereciam "os seus sacrifícios aos demônios, com os quais eles se prostituem" (Lv 17:7).

A idolatria é vista como prostituição, pois aquele que a pratica, ao invés de buscar a Deus está se vendendo ao diabo em troca de algum benefício. A doutrina dos apóstolos é bem clara em condenar a idolatria, e Paulo explica "que as coisas que os gentios sacrificam, as sacrificam aos demônios, e não a Deus. E não quero que sejais participantes com os demônios." (1 Co 10:20).

No livro de Êxodo temos uma gama de trabalhos realizados com poder satânico pela magia dos magos de Faraó. Do capítulo 7 ao 12 os magos repetem todos os sinais de Deus, exceto aquele que exigia poder para criar vida, transformar o pó em piolhos. Criar vida a partir do pó da morte é um poder que só Deus possui. "E fizeram assim; e Arão estendeu a sua mão com a sua vara, e feriu o pó da terra, e havia muitos piolhos nos homens e no gado; todo o pó da terra se tornou em piolhos em toda a terra do Egito. E os magos fizeram também assim com os seus encantamentos para produzir piolhos, mas não puderam" (Êx 8:17-18).

Não sei como a popularidade de Faraó e seus magos podia ter continuado depois de tudo aquilo, porque eles em nada beneficiaram o povo do Egito. Ao repetir as pragas enviadas por Deus através de Moisés. os magos só multiplicavam o sofrimento dos egípcios. Imagine um país que tem sua principal cidade bombardeada pelo inimigo e metade dela é destruída. Aí o governo do país atacado, para não ficar por baixo, decide mostrar que possui o mesmo poder e simplesmente destrói o que sobrou da cidade. Faz sentido? É claro que não, mas apesar de seus ‘modus operandi’ Satanás continua tendo uma grande torcida espalhada pelo mundo. O que a maioria não sabe é que ele e seus asseclas jogam com camisas de diferentes times, mas por baixo é sempre o mesmo.

Alguns cristãos acreditam que o diabo tenha poder de fazer coisas incríveis, mas sempre no sentido de fazer o mal, nunca o bem. Agarrando-se a esta frágil interpretação e dizendo que não existe nenhuma cura na Bíblia operada por Satanás, acabam se colocando ingenuamente nas mãos de demônios, caso estes manifestem algum poder de curar, como se aquilo viesse de Deus. Esses cristãos, geralmente pentecostais, se esquecem de um detalhe: Uma cura não precisa ser necessariamente um bem. Se Hitler tivesse sido milagrosamente curado de um tiro na testa antes de começar sua escalada genocida, acaso a cura teria sido para o bem ou para o mal? Mas existe sim cura feita pelo poder do diabo. Veja em Apocalipse:

"E a besta que vi era semelhante ao leopardo, e os seus pés como os de urso, e a sua boca como a de leão; e o dragão deu-lhe o seu poder, e o seu trono, e grande poderio. E vi uma das suas cabeças como ferida de morte, e a sua chaga mortal foi curada; e toda a terra se maravilhou após a besta... E vi subir da terra outra besta, e tinha dois chifres semelhantes aos de um cordeiro; e falava como o dragão. E exerce todo o poder da primeira besta na sua presença, e faz que a terra e os que nela habitam adorem a primeira besta, cuja chaga mortal fora curada. E faz grandes sinais, de maneira que até fogo faz descer do céu à terra, à vista dos homens. E engana os que habitam na terra com sinais que lhe foi permitido que fizesse em presença da besta, dizendo aos que habitam na terra que fizessem uma imagem à besta que recebera a ferida da espada e vivia." (Ap 13:2-3, 11-14)

Seria ingenuidade achar que Satanás, que foi capaz de transportar Jesus fisicamente do deserto a um alto monte e ao pináculo do templo de Jerusalém, fosse incapaz de curar quando isto pudesse servir a seus intentos de desviar o olhar das pessoas de Cristo para mantê-las ocupadas com sinais. Muitos dos que seguiam a Cristo estavam meramente interessados em seus milagres, e seriam os mesmos que mais tarde gritariam “Crucifica! Crucifica!”. “muitos, vendo os sinais que fazia, creram no seu nome. “Mas o mesmo Jesus não confiava neles, porque a todos conhecia” (Jo 2:23-24).

Hoje multidões lotam as chamadas "igrejas"  de pregadores de milagres e prosperidade, ávidas por assistir ou obter alguma cura ou sinal. Não é a Cristo que buscam, e sim sinais e poderes miraculosos. Boa parte dessa gente está sendo treinada e preparada para aplaudir aquele que fará descer fogo "do céu à terra, à vista dos homens" para enganar "os que habitam na terra com sinais". Muito do que existe por aí chamado de "culto cristão" nada mais é do que um ensaio do que será o fã clube do anticristo.

Os "trabalhos" de feitiçaria, que foram a razão de sua dúvida, não podem atingir um salvo por Cristo, a não ser que Deus permita como forma de ensinar-lhe alguma lição. Às vezes nos esquecemos de que Satanás e suas hostes, mesmo sendo seres caídos, continuam obrigados a obedecer a Deus. Não existe coisa alguma no Universo que possa resistir ao poder e autoridade do Senhor. Por isso diz na passagem de Apocalipse que o anticristo irá enganar "com sinais que lhe foi permitido que fizesse". Sem a permissão de Deus ele não poderia mover uma palha.

Antes que me pergunte qual a razão de Deus permitir que o diabo faça o mal, a resposta é simples: Deus é Deus e tem propósitos e desígnios que desconhecemos. Seu filho de dois anos entende tudo o que você faz? Não. Adianta explicar para ele? Não, porque existem coisas que estão além de sua compreensão. Então entenda que Deus é soberano e não adianta alguma de suas criaturas — homens ou anjos — resmungar, protestar ou espernear, que Deus continuará sendo Deus.

O diabo teve permissão de Deus para tocar em Jó e em tudo o que tinha, exceto matá-lo, como você pode aprender dos primeiros dois capítulos daquele livro. Ao longo de todos os outros capítulos vemos um Jó confuso e desapontado com tudo que veio sobre si, porque não sabia a quem atribuir todo aquele mal. Afinal, ele nunca leu os dois primeiros capítulos de seu próprio livro para saber que Deus tinha permitido que o diabo fosse um instrumento para o bem de Jó. No final ele aprendeu a lição que precisava aprender e Deus subiu em seu conceito: "Bem sei que tudo podes, e nenhum dos teus planos pode ser frustrado... Na verdade, falei do que não entendia; coisas maravilhosas demais para mim, coisas que eu não conhecia... Eu te conhecia só de ouvir, mas agora os meus olhos te veem." (Jó 42:2-5). Se alguém perguntasse a Jó se estaria disposto a passar por tudo aquilo outra vez, ele certamente diria que sim. Pedro explica como funciona:

"Bendito seja o Deus e Pai de nosso Senhor Jesus Cristo que, segundo a sua grande misericórdia, nos gerou de novo para uma viva esperança, pela ressurreição de Jesus Cristo dentre os mortos, para uma herança incorruptível, incontaminável, e que não se pode murchar, guardada nos céus para vós, que mediante a fé estais guardados na virtude de Deus para a salvação, já prestes para se revelar no último tempo, em que vós grandemente vos alegrais, ainda que agora importa, sendo necessário, que estejais por um pouco contristados com várias tentações, para que a prova da vossa fé, muito mais preciosa do que o ouro que perece e é provado pelo fogo, se ache em louvor, e honra, e glória, na revelação de Jesus Cristo; ao qual, não o havendo visto, amais; no qual, não o vendo agora, mas crendo, vos alegrais com gozo inefável e glorioso; alcançando o fim da vossa fé, a salvação das vossas almas." (1 Pe 1:3-9).

Outro que vemos afligido por um espírito maligno enviado por Deus para este propósito foi o Rei Saul. "E o Espírito do Senhor se retirou de Saul, e atormentava-o um espírito mau da parte do Senhor. Então os criados de Saul lhe disseram: Eis que agora o espírito mau da parte de Deus te atormenta" (1 Sm 16:14-15). Lembre-se de que nessa época ainda não existia a Igreja, fundada em Atos 2, e as pessoas não eram seladas e habitadas permanentemente pelo Espírito Santo, como são hoje os salvos por Cristo. Deus colocou temporariamente o seu Espírito em Saul para capacitá-lo a reinar, mas em função de sua desobediência e rebelião, "o Espírito do Senhor se retirou de Saul" e foi substituído por um espírito maligno por ordem de Deus.

Esta possibilidade existe para um crente hoje? Não de perder o Espírito Santo ou ser possuído por um espírito maligno, pois o Senhor prometeu: "Eu rogarei ao Pai, e ele vos dará outro Consolador, para que fique convosco para sempre" (Jo 14:16). Mas um crente pode perder a vida por ação de Satanás, o chamado "pecado para morte" (1 Jo 5:16), "para que o espírito seja salvo no dia do Senhor Jesus" (1 Co 5:5).

Um crente também pode ser influenciado pelo diabo ou por espíritos malignos quando isso for necessário para ser disciplinado. Vemos isso claramente quando Pedro falou algo que não vinha de si mesmo, mas de Satanás, e foi repreendido por Jesus: "[Jesus] voltando-se, disse a Pedro: Para trás de mim, Satanás, que me serves de escândalo; porque não compreendes as coisas que são de Deus, mas só as que são dos homens." (Mt 16:23).

Deus usou Satanás para colocar um espinho na carne de Paulo, provavelmente uma doença crônica, para afligi-lo e não deixar que se orgulhasse das revelações que havia recebido. Se não fosse por essa permissão de Deus para que sofresse nas mãos do diabo, o apóstolo jamais teria aprendido lições tão importantes, como humildade e o valor da fraqueza própria, além da importância de orações não respondidas. Ele próprio escreve:

"E, para que não me exaltasse pela excelência das revelações, foi-me dado um espinho na carne, a saber, um mensageiro de Satanás para me esbofetear, a fim de não me exaltar. Acerca do qual três vezes orei ao Senhor para que se desviasse de mim. E disse-me: A minha graça te basta, porque o meu poder se aperfeiçoa na fraqueza. De boa vontade, pois, me gloriarei nas minhas fraquezas, para que em mim habite o poder de Cristo. Por isso sinto prazer nas fraquezas, nas injúrias, nas necessidades, nas perseguições, nas angústias por amor de Cristo. Porque quando estou fraco então sou forte." (2 Co 12:7-10).

Com base no que poderia ter acontecido ao homem de 1 Coríntios 5, podemos deduzir que Deus permitiu ao diabo matar Ananias e Safira por mentirem ao Espírito Santo. Pedro lhe diz: "Ananias, por que encheu Satanás o teu coração, para que mentisses ao Espírito Santo, e retivesses parte do preço da herdade?... Não mentiste aos homens, mas a Deus. E Ananias, ouvindo estas palavras, caiu e expirou... E, passando um espaço quase de três horas, entrou também sua mulher, não sabendo o que havia acontecido... Então Pedro lhe disse: Por que é que entre vós vos concertastes para tentar o Espírito do Senhor?... E logo caiu aos seus pés, e expirou. E, entrando os moços, acharam-na morta, e a sepultaram junto de seu marido." (A 5:7-10).

O mesmo pode ter acontecido com Himeneu e Fileto por pregarem má doutrina. Paulo escreve: "E entre esses foram Himeneu e Alexandre, os quais entreguei a Satanás, para que aprendam a não blasfemar." (1 Tm 1:20). O homem de 1 Coríntios 5, que estava vivendo em pecado não julgado por si e pela assembleia de Corinto, teria tido o mesmo destino se não tivesse se arrependido em 2 Coríntios.

Na primeira carta Paulo escreve que ele "seja entregue a Satanás para destruição da carne, para que o espírito seja salvo no dia do Senhor Jesus." (1 Co 5:5). Porém na segunda carta temos uma pista de que ele possa ter se convertido e o apóstolo intercede por ele para que os irmãos não cometam excesso no rigor da disciplina: "Porque, se alguém me contristou, não me contristou a mim senão em parte, para vos não sobrecarregar a vós todos. Basta-lhe ao tal esta repreensão feita por muitos. De maneira que pelo contrário deveis antes perdoar-lhe e consolá-lo, para que o tal não seja de modo algum devorado de demasiada tristeza. Por isso vos rogo que confirmeis para com ele o vosso amor." (2 Co 5-8).

Em Corinto muitos tinham morrido ou estavam doentes por causa de pecado não julgado. "O que come e bebe indignamente, come e bebe para sua própria condenação, não discernindo o corpo do Senhor. Por causa disto há entre vós muitos fracos e doentes, e muitos que dormem. Porque, se nós nos julgássemos a nós mesmos, não seríamos julgados. Mas, quando somos julgados, somos repreendidos pelo Senhor, para não sermos condenados com o mundo." (1 Co 11:29-32). Aí não diz diretamente que o instrumento dessas mortes e enfermidades tivesse sido Satanás, mas já vimos que Deus pode utilizá-lo para cumprir seus propósitos de disciplina.

O poder que Pilatos tinha para julgar e condenar a Jesus vinha de Deus: "Disse-lhe, pois, Pilatos: Não me falas a mim? Não sabes tu que tenho poder para te crucificar e tenho poder para te soltar? Respondeu Jesus: Nenhum poder terias contra mim, se de cima não te fosse dado". Todavia, ainda que Deus possa usar o diabo para cumprir seus propósitos, a responsabilidade daqueles que se colocam a serviço do mal permanece, por isso Jesus completa: "Mas aquele que me entregou a ti maior pecado tem." Até mesmo Pilatos foi colocado diante do dilema entre exercer o poder de governar que tinha recebido de Deus, ou fazer a vontade do povo para ficar bem aos olhos dos homens: "Desde então Pilatos procurava soltá-lo; mas os judeus clamavam, dizendo: Se soltas este, não és amigo de César; qualquer que se faz rei é contra César." (Jo 19:10-12). Para sua desgraça Pilatos preferiu agradar ao povo.

O uso mais emblemático de Satanás que encontramos na Bíblia foi quando Judas saiu para trair Jesus antes que os outros onze desfrutassem da ceia do Senhor que seria instituída nessa ocasião. O pão, provavelmente molhado no molho de carne de cordeiro conforme o costume judaico na refeição da Páscoa, seria o sinal de Jesus: "E, molhando o bocado, o deu a Judas Iscariotes, filho de Simão. E, após o bocado, entrou nele Satanás. Disse, pois, Jesus: O que fazes, faze-o depressa... E, tendo Judas tomado o bocado, saiu logo. E era já noite." (Jo 13:26-30).

Resumindo tudo isso, bruxaria, feitiçaria, macumba e outras coisas do tipo podem sim ter efeito porque Satanás tem poder e seus anjos e demônios também. Todavia nenhum poder pode ser aplicado contra o salvo por Cristo, que é habitado pelo Espírito Santo, a não ser quando Deus quiser ensinar algo àquele filho seu, ou aos que o cercam para servir de testemunho. Qualquer que seja a situação, o objetivo final de Deus é de bênção. Infelizmente para Saul, que perdeu a influência do Espírito de Deus para ganhar uma influência demoníaca, não parece ter sido de bênção, a menos que tenha se arrependido no final antes de ser morto pelo soldado após sua frustrada tentativa de suicídio (2 Samuel 1).

Por tudo isso o salvo por Cristo jamais deveria temer feitiços e "trabalhos" feitos com o poder do diabo, porque antes de serem efetivos eles precisam passar pela aprovação de Deus. E se Deus permitir, isso será para bênção, nunca maldição. Para Jó todo o sofrimento foi de bênção, e até os filhos que perdeu ele reencontrou no céu. Para todo o gado e os bens que perdeu pela ação do diabo, Jó recebeu o dobro no final, mas para os filhos não. Ele teve o mesmo número de filhos que tinham morrido, um sinal de que seus primeiros filhos teriam sido salvos e no cômputo final de filhos ele iria reencontrá-los em dobro no céu. Pedro, Paulo e muitos outros, que passaram um cortado nas mãos do diabo por permissão de Deus, estão hoje desfrutando da presença de Cristo e nem um pouco ressentidos do que passaram aqui, pois...

"...sabemos que todas as coisas contribuem juntamente para o bem daqueles que amam a Deus, daqueles que são chamados segundo o seu propósito. Porque os que dantes conheceu também os predestinou para serem conformes à imagem de seu Filho, a fim de que ele seja o primogênito entre muitos irmãos. E aos que predestinou a estes também chamou; e aos que chamou a estes também justificou; e aos que justificou a estes também glorificou. Que diremos, pois, a estas coisas? Se Deus é por nós, quem será contra nós? Aquele que nem mesmo a seu próprio Filho poupou, antes o entregou por todos nós, como nos não dará também com ele todas as coisas? Quem intentará acusação contra os escolhidos de Deus? É Deus quem os justifica. Quem é que condena? Pois é Cristo quem morreu, ou antes quem ressuscitou dentre os mortos, o qual está à direita de Deus, e também intercede por nós. Quem nos separará do amor de Cristo? A tribulação, ou a angústia, ou a perseguição, ou a fome, ou a nudez, ou o perigo, ou a espada? Como está escrito: Por amor de ti somos entregues à morte todo o dia; Somos reputados como ovelhas para o matadouro. Mas em todas estas coisas somos mais do que vencedores, por aquele que nos amou. Porque estou certo de que, nem a morte, nem a vida, nem os anjos, nem os principados, nem as potestades, nem o presente, nem o porvir, nem a altura, nem a profundidade, nem alguma outra criatura nos poderá separar do amor de Deus, que está em Cristo Jesus nosso Senhor." (Rm 8:28-39).

por Mario Persona

Mario Persona é palestrante e consultor de comunicação, marketing e desenvolvimento profissional (www.mariopersona.com.br). Não possui formação ou título eclesiástico e nem está ligado a alguma denominação religiosa, estando congregado desde 1981 somente ao Nome do Senhor Jesus. Esta mensagem originalmente não contém propaganda. Alguns sistemas de envio de email ou RSS costumam adicionar mensagens publicitárias que podem não expressar a opinião do autor.)
18 May 23:03

O que fazer quando descubro que agi errado?

by noreply@blogger.com (Mario Persona)


https://youtu.be/0chXnqsBkLc

Volte ao ponto em que se desviou e procure se humilhar reconhecendo seu engano. Muitas vezes na vida somos obrigados a fazer isso se quisermos recuperar nossa comunhão com Deus e voltar a dar um testemunho coerente com a fé que professamos. Às vezes teremos de engolir ofensas, baixar a cabeça e deixar o Senhor nos restaurar do jeito dele, e eventualmente tratar com aqueles que podem ter até contribuído para nossa queda.

Esta passagem de 2 Reis sempre me foi de ajuda em momentos assim:

"E disseram os filhos dos profetas a Eliseu: Eis que o lugar em que habitamos diante da tua face, nos é estreito. Vamos, pois, até ao Jordão e tomemos de lá, cada um de nós, uma viga, e façamo-nos ali um lugar para habitar. E disse ele: Ide. E disse um: Serve-te de ires com os teus servos. E disse: Eu irei. E foi com eles; e, chegando eles ao Jordão, cortaram madeira. E sucedeu que, derrubando um deles uma viga, o ferro caiu na água; e clamou, e disse: Ai, meu senhor! ele era emprestado. E disse o homem de Deus: Onde caiu? E mostrando-lhe ele o lugar, cortou um pau, e o lançou ali, e fez flutuar o ferro. E disse: Levanta-o. Então ele estendeu a sua mão e o tomou." 2 Reis 6:1-7

Os "filhos dos profetas" aparentemente não estavam satisfeitos com o que tinham recebido de Deus. Esses deviam ser discípulos que seguiam e auxiliavam um profeta em suas necessidades, aprendendo a extrair do profeta o máximo de ensino que pudessem, como era o caso aqui com Eliseu. Mas havia neste um sentimento de insatisfação que os levou a desejar um lugar mais amplo.

Podemos às vezes ficar insatisfeitos com as limitações que o Senhor permitiu e querer buscar mais espaço, maior liberdade do que aquela que o Senhor nos concedeu. Você nunca desejou se livrar de pessoas e problemas que o cercam onde você está, seja em casa, no trabalho, na escola ou entre os irmãos? Eu também. É o desejo de um espaço mais amplo, como o de querer esticar os braços para os lados viajando horas em um carro pequeno.

Mas o que os "filhos dos profetas" não sabiam era que seriam incapazes de conseguir tal façanha, pois de si mesmos nada possuíam. Se tinham alguma coisa ou reputação era graças ao profeta que eles acompanhavam. Eliseu deixa que eles façam sua própria vontade e até vai junto com eles, como um pai que deseja ver até onde seu filho consegue chegar em sua busca por independência.

Você já deve ter feito isso quando seu filho pequeno teimou que iria conseguir pedalar sem as rodinhas de apoio. Você correu ao lado pronto para ampará-lo em seu tombo. E o tombo dos filhos dos profetas foi quando eles deixaram cair o machado emprestado num rio e ficaram desesperados. Correram pedir a ajuda do profeta.

O profeta pergunta: "Onde foi que caiu?". Eles são obrigados a admitir que o que tinham nem deles era, mas emprestado, e precisam voltar até onde perderam o ferro do machado, do mesmo modo como José e Maria foram obrigados um dia a voltarem até o lugar onde tinha perdido o menino Jesus. Levaram um dia para perder e três dias para reencontrar.

"E, tendo ele já doze anos, subiram a Jerusalém, segundo o costume do dia da festa. E, regressando eles, terminados aqueles dias, ficou o menino Jesus em Jerusalém, e não o soube José, nem sua mãe. Pensando, porém, eles que viria de companhia pelo caminho, andaram caminho de um dia, e procuravam-no entre os parentes e conhecidos; e, como o não encontrassem, voltaram a Jerusalém em busca dele. E aconteceu que, passados três dias, o acharam no templo, assentado no meio dos doutores, ouvindo-os, e interrogando-os." (Lc 2:42-46).

Um dia para perder e três para reencontrar. O reencontro é sempre mais demorado e custoso que a perda. Os filhos dos profetas levam Eliseu até o lugar onde tinham perdido o ferro do machado, ou seja, voltam ao ponto onde havia ocorrido o problema. Ali o profeta joga um pedaço de pau — um madeiro — na água, e o ferro do machado flutua. Aquilo era uma figura de Cristo, da aplicação da cruz de Cristo a uma situação de erro para sermos restaurados.

Devemos voltar ao problema, ao ponto onde nos desviamos por nos sentirmos confiantes de carregar nas mãos uma verdade que nem era nossa, mas emprestada. E depois de voltar a esse ponto em que perdemos a verdade emprestada, a solução é aplicar o madeiro, a cruz de Cristo, à situação. A cruz nos fala de humilhação e morte, e só conseguimos enxergar uma situação quando deixamos morrer nosso ego. Só então estamos prontos a ser restaurados.

por Mario Persona

Mario Persona é palestrante e consultor de comunicação, marketing e desenvolvimento profissional (www.mariopersona.com.br). Não possui formação ou título eclesiástico e nem está ligado a alguma denominação religiosa, estando congregado desde 1981 somente ao Nome do Senhor Jesus. Esta mensagem originalmente não contém propaganda. Alguns sistemas de envio de email ou RSS costumam adicionar mensagens publicitárias que podem não expressar a opinião do autor.)
11 May 21:37

David Rader: Copy Records in Batches with Postgresql

When you want to copy all the records from one table to another – for example, to change the data model or my favorite migrate data from a foreign table to a local PostgreSQL, you want to use multiple batches to avoid a long running transaction or the need to restart from the beginning in case of failure. This is a common challenge if you are copying data from one server to another (for example PROD to dev) or migrating data from another database (like Oracle or MySQL) to Postgres via an FDW.

Common Table Expressions (CTE’s) and a small amount of pl/pgSQL make it easy to code up a loop that will grab a batch of records, start after the maximum id and keep copying.

Setup some sample data

Let’s create a couple sample tables and fill the source with a few sample records:

CREATE TABLE my_source (id int, field1 int, field2 varchar(50));
CREATE TABLE my_dest (id int, field1 int, field2 varchar(50));
INSERT INTO my_source (SELECT generate_series(1, 4000, 1), generate_series(2,8000,2), 'some made up text');
select * from my_source limit 5;
 id | field1 |      field2       
----+--------+-------------------
  1 |      2 | some made up text
  2 |      4 | some made up text
  3 |      6 | some made up text
  4 |      8 | some made up text
  5 |     10 | some made up text
(5 rows)

Simple SQL Statement

The naive approach to copy over from source to dest is to just use a single SQL statement to INSERT INTO … SELECT like this:

INSERT INTO my_dest SELECT id, field1, field2 from my_source; 
INSERT 0 4000 

Works fine on this small sample data, but not for the 100 million row Oracle table that you’re trying to copy over the network with a few data transformations in the middle. It is better to copy the records over in batches so that you can commit every few thousand or million records based on the size of your server and tables.

Better with Batches

Same sample tables. Start fresh for the example:

TRUNCATE TABLE my_dest;
TRUNCATE TABLE

Now, use a CTE that inserts a batch of 100 records and select the max(ID) to use for the next batch. Loop gently:

DO LANGUAGE plpgsql $$
DECLARE max_id INTEGER = 0;
BEGIN
    WHILE max_id > -1 LOOP
        WITH insertrows AS (
          INSERT INTO my_dest
          SELECT * from my_source
          WHERE id > max_id
          LIMIT 100
          RETURNING id
        )
        SELECT max(id) INTO max_id from insertrows;
        RAISE NOTICE '%', max_id;
    END LOOP;
END$$;
NOTICE:  100
NOTICE:  200
NOTICE:  300
...
NOTICE:  3900
NOTICE:  4000
NOTICE:  <NULL>
DO

Notes and Caveats

Getting the max_id and filtering the next batch is much better than using a fixed number of rows and trying to use OFFSET to skip to the next batch. OFFSET actually requires the database to retrieve and count the rows it is skipping rather than just “jumping” ahead.

The batching works best with a unique primary key as the field to filter on, since you know there are not duplicates and there is already an index available. If you are batching on some other field, make sure there is an index otherwise the filter will do a sequence scan on the source and be slower than you want.

If this process fails partway through, you will need to query the max(id) from the destination table to figure out where to restart from. If you expect failures (remote network link, etc), or if you want to show progress during a long run, you may want to store the max_id value to a table.

Don’t leave that Raise Notice in for your production code 🙂

Happy Batching!

10 May 17:50

As reunioes devem ser publicas ou reservadas?

by noreply@blogger.com (Mario Persona)


https://youtu.be/Mlg2ihmnEgs

Você perguntou se quando os irmãos estão reunidos em assembleia ou igreja (que é sinônimo), esss reuniões podem ser em salões abertos para a rua ou devem ser reservadas. Encontramos alguns princípios na Bíblia que pode nos dar uma direção, começando com os evangelhos, que são anteriores a formação da Igreja na terra.

O Senhor Jesus, quando ainda estava aqui, pediu aos seus discípulos que preparassem a Páscoa, que era uma festa do judaísmo que comemorava a libertação dos israelitas da escravidão do Egito. Mas a intenção do Senhor não estava em apenas celebrar a Páscoa, mas também instituir a ceia que seria depois revelada ao apóstolo Paulo como o ponto alto da celebração cristã. Em 1 Coríntios 11 o apóstolo conta como havia recebido do próprio Senhor, e não de algum outro apóstolo, essa instituição.

Mas voltando aos evangelhos, quando o Senhor pediu aos discípulos para prepararem a Páscoa, eles fizeram a pergunta que todo cristão deveria fazer quando pensa em congregar, e vale a pena transcrever a passagem toda aqui:

"E mandou a Pedro e a João, dizendo: Ide, preparai-nos a páscoa, para que a comamos. E eles lhe perguntaram: Onde queres que a preparemos? E ele lhes disse: Eis que, quando entrardes na cidade, encontrareis um homem, levando um cântaro de água; segui-o até à casa em que ele entrar. E direis ao pai de família da casa: O Mestre te diz: Onde está o aposento em que hei de comer a páscoa com os meus discípulos? Então ele vos mostrará um grande cenáculo mobilado; aí fazei preparativos. E, indo eles, acharam como lhes havia sido dito; e prepararam a páscoa. E, chegada a hora, pôs-se à mesa, e com ele os doze apóstolos." (Lc 22:8-14).

O Senhor deu instruções para que eles preparassem tudo em um cenáculo, que era o andar superior de uma casa. Não era para fazer aquilo ao nível da rua, mas em um lugar mais reservado porque não seria um evento aberto a todos, mas apenas a alguns poucos convidados. Vemos a mesma coisa acontecer em Atos 1:13, quando os discípulos se reuniram, não ainda como igreja, mas como discípulos judeus do Messias:

"E, entrando, subiram ao cenáculo, onde habitavam Pedro e Tiago, João e André, Filipe e Tomé, Bartolomeu e Mateus, Tiago, filho de Alfeu, Simão, o Zelote, e Judas, irmão de Tiago. Todos estes perseveravam unanimemente em oração e súplicas, com as mulheres, e Maria mãe de Jesus, e com seus irmãos." (At 1:13-14). Na versão Almeida Revista e Atualizada está assim: "Quando ali entraram, subiram para o cenáculo onde se reuniam Pedro, João, Tiago, etc.".

Todos estavam reunidos nesse mesmo cenáculo quando foi formada a Igreja com a descida do Espírito Santo que passaria a habitar em cada crente: "E, cumprindo-se o dia de Pentecostes, estavam todos concordemente no mesmo lugar; e de repente veio do céu um som, como de um vento veemente e impetuoso, e encheu toda a casa em que estavam assentados." (At 2:1-2).

Algum tempo depois já como igreja, nós os vemos também congregados no primeiro dia da semana, o domingo, para celebrar a ceia do Senhor em um cenáculo, ou seja, num andar superior de uma casa. "E no primeiro dia da semana, ajuntando-se os discípulos para partir o pão, Paulo, que havia de partir no dia seguinte, falava com eles; e prolongou a prática até à meia-noite. E havia muitas luzes no cenáculo onde estavam juntos." (At 20:7-8).

Não existe nenhuma ordenança no sentido de termos de congregar em um andar superior, mas estes exemplos bastam para a mente espiritual perceber que Deus pede algum grau de separação com o rés do chão. As reuniões da igreja são para a igreja, não para estranhos, portanto não devemos escolher um local que possa parecer uma vitrine para o mundo. Evidentemente incrédulos podem ter acesso ao local de reuniões dos irmãos, mas não um acesso escancarado de forma convidativa para todos participarem.

As reuniões da igreja são para os salvos, não para os perdidos, mesmo porque as atividades principais dessas reuniões são o ministério da Palavra para crentes, a ceia do Senhor e as orações. Ao menos era assim que os primeiros cristãos se reuniam. "E perseveravam na doutrina dos apóstolos, e na comunhão, e no partir do pão, e nas orações." (At 2:42). Nem preciso dizer que não se trata de uma reunião evangelística destinada a convidar pecadores para crerem em Cristo, embora algum incrédulo que entre ali poderá eventualmente ouvir o evangelho em meio ao ministério da Palavra para crentes.

Volto a insistir que, como irmãos salvos por Cristo, não estamos reunidos para o mundo, mas para o nome de Jesus. Não há nada de errado se os irmãos se reunirem a portas fechadas em locais onde exista o risco de entrar estranhos que causem distúrbios ou tirem a atenção daqueles que estão ali para o Senhor, não para o mundo e nem para os incrédulos.

Hoje existe tecnologia que permite manter portas fechadas e ter câmeras que permitam abri-las apenas a conhecidos, e quem congrega em locais com risco de assaltos ou em zonas de guerra sabe como algo assim pode ser útil. Os irmãos que congregam em casas no Egito costumam combinar a chegada separados e um de cada vez para não levantar suspeitas de radicais islâmicos. Lá até os templos de denominações cristãs (apenas as antigas, porque as novas são proibidas de se estabelecer) costumam ter guardas armados na porta.

Nada disso que estou dizendo aqui tem a ver com evangelismo, pois suponho que você saiba a diferença entre congregar e pregar o evangelho. A pregação do evangelho é uma atividade de responsabilidade de quem evangeliza, não da igreja. A pregação do evangelho deve ser pública, mas as atividades da igreja são destinadas a crentes somente. Onde congrego usamos um salão e visitantes podem entrar e assistir as reuniões. Mas depois da ceia do Senhor, quando temos assuntos sensíveis a tratar, como algum caso de disciplina ou excomunhão, pedimos que os visitantes saiam e fiquem somente os irmãos em comunhão.

http://www.respondi.com.br/2010/03/igreja-nao-evangeliza.html

por Mario Persona

Mario Persona é palestrante e consultor de comunicação, marketing e desenvolvimento profissional (www.mariopersona.com.br). Não possui formação ou título eclesiástico e nem está ligado a alguma denominação religiosa, estando congregado desde 1981 somente ao Nome do Senhor Jesus. Esta mensagem originalmente não contém propaganda. Alguns sistemas de envio de email ou RSS costumam adicionar mensagens publicitárias que podem não expressar a opinião do autor.)
08 May 21:12

Interview: Encrypted email must be easy too

by Tresorit

Secure cloud storage services like Tresorit help your company to share confidential business documents securely. But how can you also protect your internal email communication without overcomplicating it for your staff? We spoke about this with Arne Möhle, co-founder of the encrypted email provider Tutanota – via email, of course.

When was the first time you thought: ‘I’d rather not send this via email’?

In one of my previous jobs, we wanted to exchange highly sensitive project data with a client. Installing PGP was not feasible due to the tedious effort of doing so and its lack of compatibility. Back then, password-encrypted archives helped us, but even they weren’t the most convenient solution, since we were only able to encrypt the actual attachments, but not the content of the email itself.

Are there any better solutions now?

Tutanota, of course. 🙂 We apply end-to-end-encryption to everything, fully automatically. A lot of the time, this is biggest problem with most encrypted email solutions: the user has to do all the work – generating the key, sharing the key, etc. Most people shy away from this hassle. It is too complicated, and even if you understand the system, errors can creep in, e.g. when the wrong keys are being applied. Therefore it is so important for encrypted apps to automate these processes so that the user doesn’t need to worry about anything and also can’t make any mistakes.

The use of end-to-end-encryption is now quite common, especially on messenger services. How come that encrypted communication has been adapted in consumer apps before business solutions?

Because messenger services make it easy. End-to-end-encryption is a default feature for these services. The consumer uses it without being aware of it. And this is precisely how encrypted email apps should work.

Why is encryption also important for business emails?

It isn’t just important, it is critical! Employees handle confidential data on a daily basis: clients’ personal information, offers, acquisition projects. R&D is not the only department dealing with data that needs to be protected. This is why it is of utmost importance for businesses that all employees communicate in an end-to-end-encrypted form, especially internally. This is the only way to ensure that nobody can interfere with emails and search them for key words. Unfortunately, this is easier to do than most companies like to believe.

What should entrepreneurs bear in mind when switching to encrypted email? What are the obstacles?

They must make sure it is easy to apply. If it is too complicated, their employees won’t use it. In the worst-case scenario, they will switch to using their private email account with Gmail or Yahoo, which could be disastrous for the company.

What can businesses do to protect their other data?

Of course, there are many other areas of business communication that must be protected. Telephoning, messaging, cloud storage, mobile devices, etc. need to be considered in the IT security concept to the same extent as emails.

In the last few years, more and more European encrypted services entered the market – how come?

By now everyone knows that it was easy enough for the NSA to gather data from American providers. And who can guarantee the businesses that the secret services are not involved in industry espionage?

Europe is a great location for privacy-oriented online services. Data protection requirements are very high, and it is even obligatory for businesses to protect their clients’ data. This is why many companies choose a European provider – preferably one that applies data end-to-end-encryption. It is the only way to ensure that nobody apart from the user can access the data. And it is thus the only way for businesses to be sure that nobody is spying on them.

This is what makes solutions like Tutanota or Tresorit attractive for businesses: they enable companies to take advantage of the cloud without giving up their data sovereignty.

 

 

Arne Möhle on encrypted email About Arne Möhle:
Arne Möhle is one of the founders and a developer at Tutanota, the end-to-end-encrypted mailbox for businesses and individuals. He writes code to end mass surveillance and industry espionage – by automatically encrypting all emails. He regularly writes about data protection and encryption on the Tutanota-Blog – https://tutanota.com/.

 

The post Interview: Encrypted email must be easy too appeared first on Tresorit Blog.

06 May 00:21

Peter Eisentraut: PostgreSQL 10 identity columns explained

For PostgreSQL 10, I have worked on a feature called “identity columns”. Depesz already wrote a blog post about it and showed that it works pretty much like serial columns:

CREATE TABLE test_old (
    id serial PRIMARY KEY,
    payload text
);

INSERT INTO test_old (payload) VALUES ('a'), ('b'), ('c') RETURNING *;

and

CREATE TABLE test_new (
    id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    payload text
);

INSERT INTO test_new (payload) VALUES ('a'), ('b'), ('c') RETURNING *;

do pretty much the same thing, except that the new way is more verbose. ;-)

So why bother?

Compatibility

The new syntax conforms to the SQL standard. Creating auto-incrementing columns has been a notorious area of incompatibility between different SQL implementations. Some have lately been adopting the standard SQL syntax, however. So now you can move code around between, for example, PostgreSQL, DB2, and Oracle without any change (in this area).

Permissions

A general problem with the old way is that the system doesn’t actually remember that the user typed serial. It expands this at parse time into something like

CREATE SEQUENCE test_old_id_seq;

CREATE TABLE test_old (
    id int NOT NULL PRIMARY KEY,
    payload text
);

ALTER TABLE test_old
    ALTER COLUMN id SET DEFAULT nextval('test_old_id_seq');

ALTER SEQUENCE test_old_id_seq OWNED BY test_old.id;

The OWNED BY in the last command is an attempt to remember something about the serialness, but it is still insufficient in some cases.

The new way creates the sequence as a proper internal dependency of the table, so that various weird implementation details of the serial pseudotype are not exposed.

One common problem is that permissions for the sequence created by a serial column need to be managed separately:

CREATE USER foo;
GRANT INSERT ON test_old TO foo;
GRANT INSERT ON test_new TO foo;

SET SESSION AUTHORIZATION foo;

INSERT INTO test_old (payload) VALUES ('d');
ERROR:  permission denied for sequence test_old_id_seq

INSERT INTO test_new (payload) VALUES ('d');
-- OK

You can fix the error by also running

GRANT USAGE ON SEQUENCE test_old_id_seq;

If you have deployment scripts, this is annoying and problematic, because the name of the sequence is automatically generated. Here, of course, it appears in the error message, and it is easy to guess, but sometimes a slightly different name is chosen, and then your deployment scripts will fail.

Managing sequences

You also need to know the name of the sequence if you want to make some changes to the sequence:

ALTER SEQUENCE test_old_id_seq RESTART WITH 1000;

With an identity column, you don’t need to know the name of the sequence:

ALTER TABLE test_new ALTER COLUMN id RESTART WITH 1000;

Schema management

Since serial is not a real type, it can only be used in certain circumstances. You can specify serial as a column type when creating a table or when adding a column. But dropping serialness from an existing column or adding it to an existing column is not straightforward.

To drop serialness, you can drop the sequence (again, after ascertaining the name) with the CASCADE option, which cascades to remove the default value of the associated column:

DROP SEQUENCE test_old_id_seq CASCADE;

If you instead drop the default value like

ALTER TABLE test_old ALTER COLUMN id DROP DEFAULT;

it will drop the default but leave the sequence in place.

If you want to take an existing integer column and turn it into a serial column, there is no single command to do that. You will have to manually assemble the CREATE SEQUENCE and ALTER TABLE ... SET DEFAULT commands shown earlier.

Dropping the identity property of an existing column is easy:

ALTER TABLE test_new ALTER COLUMN id DROP IDENTITY;

You cannot accidentally make a mistake and drop a default, because there is none. But just in case, you get a nice error message:

=> ALTER TABLE test_new ALTER COLUMN id DROP DEFAULT;
ERROR:  column "id" of relation "test_new" is an identity column
HINT:  Use ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY instead.

You can also turn an existing integer column into an identity column with one command:

ALTER TABLE test_new
    ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;

Copying table structures

If you use the CREATE TABLE / LIKE functionality to copy the structure of a table, serial columns pose a problem:

CREATE TABLE test_old2 (LIKE test_old INCLUDING ALL);
INSERT INTO test_old2 (payload) VALUES ('e') RETURNING *;
 id | payload
----+---------
  4 | e

Note that even though the new table is a separate table, it keeps using the old sequence.

This gets even more confusing when you want to drop the first table:

=> DROP TABLE test_old;
ERROR:  cannot drop table test_old because other objects depend on it
DETAIL:  default for table test_old2 column id depends on sequence test_old_id_seq
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

(You can use CASCADE as hinted, or drop test_old2 first. The latter works without CASCADE because the sequence is still linked to the first table.)

When you copy a table with an identity column in this way, you get a new sequence:

CREATE TABLE test_new2 (LIKE test_new INCLUDING ALL);
INSERT INTO test_new2 (payload) VALUES ('e') RETURNING *;
 id | payload
----+---------
  1 | e

Upgrading

Perhaps you are convinced and you want to “upgrade” all your messy serial columns to this new identity column thing. (Note that you don’t have to “upgrade”. You can keep using serial columns the same way as before.) Here is a PL/pgSQL function that you can use:

CREATE OR REPLACE FUNCTION upgrade_serial_to_identity(tbl regclass, col name)
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
  colnum smallint;
  seqid oid;
  count int;
BEGIN
  -- find column number
  SELECT attnum INTO colnum FROM pg_attribute WHERE attrelid = tbl AND attname = col;
  IF NOT FOUND THEN
    RAISE EXCEPTION 'column does not exist';
  END IF;

  -- find sequence
  SELECT INTO seqid objid
    FROM pg_depend
    WHERE (refclassid, refobjid, refobjsubid) = ('pg_class'::regclass, tbl, colnum)
      AND classid = 'pg_class'::regclass AND objsubid = 0
      AND deptype = 'a';

  GET DIAGNOSTICS count = ROW_COUNT;
  IF count < 1 THEN
    RAISE EXCEPTION 'no linked sequence found';
  ELSIF count > 1 THEN
    RAISE EXCEPTION 'more than one linked sequence found';
  END IF;  

  -- drop the default
  EXECUTE 'ALTER TABLE ' || tbl || ' ALTER COLUMN ' || quote_ident(col) || ' DROP DEFAULT';

  -- change the dependency between column and sequence to internal
  UPDATE pg_depend
    SET deptype = 'i'
    WHERE (classid, objid, objsubid) = ('pg_class'::regclass, seqid, 0)
      AND deptype = 'a';

  -- mark the column as identity column
  UPDATE pg_attribute
    SET attidentity = 'd'
    WHERE attrelid = tbl
      AND attname = col;
END;
$$;

Call it like this:

SELECT upgrade_serial_to_identity('test_old', 'id');

If you are using schemas, it would look like this:

SELECT upgrade_serial_to_identity('public.test_old', 'id');

Check your table definition before and after:

=> \d test_old
                             Table "public.test_old"
 Column  |  Type   | Collation | Nullable |               Default
---------+---------+-----------+----------+--------------------------------------
 id      | integer |           | not null | nextval('test_old_id_seq'::regclass)
 payload | text    |           |          |
=> \d test_old
                           Table "public.test_old"
 Column  |  Type   | Collation | Nullable |             Default
---------+---------+-----------+----------+----------------------------------
 id      | integer |           | not null | generated by default as identity
 payload | text    |           |          |

Further reading

More information can be found in the PostgreSQL documentation, starting from the CREATE TABLE reference page.

28 Apr 18:53

How A Grumpy Programmer Secures Their Laptop

On the /dev/hell podcast episode I recorded with Ed last night, I got the chance to talk at length about my early experiences with my new laptop. According the 'About This Mac':

  • MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
  • Processor 2.9 GHz Inetl Core i5
  • Memory 16 GB 2133 MHz LPDDR3
  • Startup Disk Macintosh HD
  • Graphics Intel Iris Graphics 550 1536 MB
  • Pretentious Level High

Thanks to a focus by Apple on People Not Like Me, I was able to get up and running really quickly on my new laptop. The Migration Assistant worked perfectly except for not copying over some saved game files for a Steam game that I play quite a bit (Football Manager 2016). Especially when I have a setup that requires the use of SSH keys and applications all configured to my liking, this was awesome.

My next thought turned to security. Clearly we are in a era where attempts to access people's computers is on the rise. Not that I am thinking I am the target of a shady cabal of l33t hax0rs being paid by shadowy security forces of governments that don't like my politics, but I want to at least make them work a bit. So I want to share what I decided to do.

I've been using FileVault for a long time (in fact, it was a requirement for me if I wished to use my own equipment while working for Mozilla).

After that, you have all sorts of options. After seeing a Tweet from someone mentioning a bunch of tools that can help increase the security of your laptop I decided to take the plunge.

First, I installed Little Snitch. It monitors all my network connections and provides me with a bunch of options to allow or deny the connection, forever or just for a limited time. Starting with this tool I had to (and still are, to a minor extent) acknowledge and decide what to do about a ridiculous number of connection attempts by all sorts of programs. For the older crowd, I feel like I am playing some new version of Everquest. So. Much. Furious. Clicking.

Not content to develop repetitive stress injuries to my right hand, I installed Little Flocker. It's a good complement to Little Snitch -- it watches for any interactions with files, looks for keystroke loggers, and checks for malware. More. Clicking.

Next up was to install Micro Snitch to tell me any time my webcamera and microphones were being used. More alerts to acknowledge but at least my microphone only turns on when I need it to. So far.

Finally I installed BlockBlock to let me know if something keeps trying to install malware in known locations. Just another layer of security for someone to overcome. They clearly indicate that the application is in beta, so keep that in mind.

With those apps installed and running and configured, I massaged my very sore wrist and started reading this awesome document at the suggestion of a kind soul on Twitter. Lots of great stuff in there that you can do and raises interesting points about deciding what type of threats you are looking to protect yourself from. Here's a list of the advice from it that I followed:

  • patch everything when updates are available
  • frequent system backups (shoutout to Backblaze)
  • full-volume encryption
  • third-party firewalls
  • Disable Spotlight Suggestions
  • Use Homebrew
  • use dnsmasq, DNSSEC and dnscrypt
  • turn off captive portal
  • use Privoxy as a local web proxy

I plan on implementing some of the other recommendations, but that's what I started with. For Mac users, please read through that document. So much good stuff along with explanations of why you should do it.

Hope that helps!

25 Apr 21:11

Usando a API da TotalVoice para enviar SMS em PHP

by Elton Minetto

Imagine a situação: você está no conforto da sua casa (ou no conforto do seu pub favorito) e algo importante acontece em seu site/produto/projeto. Algo como um erro no banco de dados ou um cliente que acaba de fazer uma compra de vários dígitos.

Em ambos os exemplos seria bem útil você receber algum tipo de aviso sobre o ocorrido, seja para resolver o problema ou para pagar uma nova rodada de cerveja no segundo caso.

Uma forma rápida de realizar isso é enviando um SMS para o responsável no momento que o evento ocorreu. Uma das formas mais simples de realizar isso é usar uma API, como a fornecida pelos meus amigos da TotalVoice.

A TotalVoice é uma startup de Santa Catarina e que está recebendo destaque no mercado. A API deles é bem fácil de entender e eles têm um exemplo de uso em PHP, no Github. Mas fica aqui a sugestão para a equipe da TotalVoice: o exemplo oficial é bem “old school”, então, fiz uma pesquisa no Packagist e encontrei um repositório extra-oficial, que tem uma versão mais “moderna”.

O primeiro passo é criar uma conta no site, colocar alguns reais em créditos e pegar o seu token de acesso para a API.

Para começar a testar sem tirar o escorpião do bolso, você pode enviar um e-mail para “sucesso@totalvoice.com.br”, informando sua conta e solicitando um crédito bônus de R$ 5,00.

Com essa informação basta instalar o pacote usando:

php composer.phar require minerva-framework/totalvoice-api

E criar um código similar a este:

<?php 

require 'vendor/autoload.php'; 

use Minerva\TotalVoice\TotalVoice; 
use Minerva\TotalVoice\SMS\SMS; 


$sms = new SMS(); 
$sms->setNumber(47999996666); 
$sms->setText("Venda bilionária feita! Pagar mais cervejas!!"); 

TotalVoice::$token = 'SEU_TOKEN'; 
$response = TotalVoice::sendSms($sms); 
var_dump($response->getContent());

Lendo a documentação da API, é possível ver que o envio de SMS é só uma das funcionalidades disponíveis. Fiquei particularmente interessado no recurso de Webhooks para poder controlar o status das ligações telefônicas e SMSs de forma automática. Dá para criar soluções interessantes com isso.

Bom, fica aqui a dica de uma solução nacional e fácil de usar que pode ser bem útil em vários cenários além dos que eu comentei aqui.

25 Apr 18:06

222

by Francisco Nunes

a Rafa e Tássia

sempre
presentes
em
forma
de
saudade

23 Apr 16:29

O descanso

by Francisco Nunes

Amados de nosso Senhor,

A primeira e tão bem-vinda palavra Dele para nós foi: “Vinde a Mim todos os que estais cansados” (Mt 11.28). Aquela labuta do fútil Adão estava sobre nós, tanto no pecado como na canseira das obras.

Deixamos isso na cruz do Senhor ou ainda o estamos suportando, em parte? Marta estava atarefada com muitas coisas, ainda que pensasse estar servindo seu Senhor! Estranho que tal serviço trouxesse tensão e irritação, ressoasse nos nervos e trouxesse um julgamento errado dos outros; contudo, essa dualidade que vemos em Betânia ainda não acabou; ainda a encontramos no serviço a Deus. E muitas “separações”, muitos afastamentos devem-se a isso, e muita é a perplexidade que vem desta outra palavra sobre o supremo serviço do Senhor: “Meu jugo é suave e Meu fardo é leve” (v. 30). Em face de algumas experiências [dos cristãos], essa frase soa irônica.

O Senhor não nos chama para tal labor, mas para o descanso. “Aqueles que crêem de fato entram no descanso” (cf. Hb 4.3) e: “Eu te darei descanso” (cf. Js 1.13). Ele promete descanso, não apenas do pecado, mas do trabalho inútil e desapontador. A maldição do trabalho de Adão em todas as suas formas gera nada além de um infrutífero cansaço, uma exaustão de esforço sem recompensa, e certamente “o suor da testa”. As energias da carne, a mera intensidade da alma, as chamas de uma paixão auto-criada, tudo isso causa febre, geralmente uma grande febre que nos torna desequilibrados para servir nosso Senhor quando Ele verdadeiramente necessita de nosso ministério.

Tão insistentemente o Salvador diz para a sinceridade e o impulso carnais: “Uma coisa é necessária: que você se aquiete e ouça Meu conselho, pois Eu sou seu Senhor”. Busque a quietude.

Pois as obras estão consumadas desde a fundação do mundo, e nada podemos fazer para torná-las mais perfeitas ou adicionar algo a elas. À parte Dele, nada há do que se fez.

E então? Há o lado bom, que é a boa parceria. Ele e nós devemos agora trabalhar juntos por meio de Seu Espírito que habita interiormente, assim como Ele e o Pai trabalharam juntos na terra mediante essa habitação. É o grande jugo, o eterno propósito de Deus; mas ele é fácil e leve, pois a carga está sobre o Espírito, dentro de nosso espírito, e não é uma pressão em algum lugar na alma: nem os nervos nem o cérebro são tentados por ele, nem a carne conhece seu peso. Porém o pilar interior de Sua força é o suporte, uma pressão de cima vinda do soberano amor.

Mas agora trabalhemos e nos alegremos em trabalhar. Existe labuta e talvez haja um feliz cansaço, mas não tensão.

Para concluir, eis aqui o segredo contido em uma experiência exultante: “Trabalhei muito mais do que todos eles; todavia, não eu, mas a graça de Deus que está comigo” (1Co 15.10). Paulo enfatizou grandemente estas últimas palavras, “a graça Deus que está comigo”, por toda a vida, pois o derradeiro toque sútil do “velho homem” que busca servir a Deus é dizer “eu” no templo de Sua glória. Como disse Andrew Murray: “Onde a carne busca servir a Deus há a força do pecado”.

“Levanta-Te, Senhor, ao Teu repouso, Tu e a arca da Tua força” (Sl 132.8).

Na fraqueza que permite o Triunfo Dele,

T. Austin-Sparks
T. Madoc-Jeffreys

20 Apr 17:40

Microsoft Authenticator: Acabaram-se as passwords na Microsoft

by Pedro Simões
A segurança e a privacidade são quase sempre garantidas pelas palavras-passe e pelos mecanismos adicionais. Por norma, quanto mais seguras são, mais complicadas são de usar. A Microsoft resolveu agora simplificar esses processos e...
19 Apr 18:48

Outras areias

by Francisco Nunes

– Acho que era principalmente por causa daquele seu jeito particuloso. Não havia o que lhe chamasse a atenção quando não queria, quando tava lá sumida naquele mundo seu só dela.
– Nem os amigos, próximos?
– Não, nem. Era uma mudeza, de olhos, que ninguém entrava, fazia parte. Mesmo que chamando o nome dela, não respondia se tava no lá longe dentro-de-si. Como podia? No início, todo mundo se incomodava, gritava até, xingava ela. Achavam que era desrespeitante, um modo… Então, com aquele seu sorriso branco, de frescor da tarde, de uma calma de coração que era tanta, tudo se acalmava. A gente não entendia, mas parecia entendê. Aceitava. Ficava tudo bem. Aos dispois, já nem mais perturbava mais ninguém já conhecido. Era o jeito dela, era ela assim. Desse modo, assinzinho. Então, não tinha razão de irritá. Mais era aprendê a aproveitá a companhia, a presença, a sabedoria, a doçura. Quando falava, ah!, ficava o povo tudo quieto! Daquela boca miúda, desenhadinha de pintura, brotava coisa que ninguém imaginava donde vinha! Ela desenrolava os problema mais enroscado, os causo de família, aqueles assunto que ficava no escondido do coração que nem a pessoa sabia que tinha. Os velho aceitava, as criança entendia, os mais ignorante não tinha dificuldade na compreensão das coisa. Ela falava na medida que se precisava, sem sobrança de palavra, sem enfeitamento de gramática. Só o exato. Como uma faca bem afiada, cortando e chegando no miolo, no tutano. Nunca carecia de erguer a voz, de exaltar no tom. Só mesmo a fala mansinha…
– Mas teve o sumiço?
– Ah! Foi uma comoção sem tamanho! Naquela manhã, parecia tê um… uma coisa ruim no ar. Alguém comentô que os passarinho não tava cantando. A estranheza que não se sabia o quê. Tinha um trem apertano o estômago de todo mundo, um desatino na cabeça. Mas só aos dispois é que a gente se apercebeu disso tudo. Quando viu que ela tinha sumido. Como? O quarto pequenino dela continuava fechado por dentro, e já passava umas hora que ela não aparecia – tiveram de arrombá a porta com pé-de-cabra e ombro. Lá dentro, tudo igual: ordeiro, perfumado, os lençol esticado, o vaso com flor do campo. Em cima da mesinha, uma folha de papel com um desenho lindo de uma paisagem, vista duma praia deserta que tinha uma moça sozinha caminhando. A moça do desenho era ela mesma! Pequeninha, mas dava pra sabê que era ela: os cabelo ruivo claro no vento, o vestido comprido branco que ela gostava muito, o jeito de segurá as sandália que tinha… Um assombro, porque ninguém nunca sabia que ela desenhava! Fazia muito bordado, crochê, costura, mas desenho?! E, num canto do papel, escrito com a pena que tava ao lado, ainda molhada de tinta, com a letra redonda de professora dela, umas palavra de oculto significado: Imaginei outras areias, ei-las, mas os passos vacilam.

– E depois?
– Procuremo ela por todo canto. A vila toda saiu na busca. Não tinha explicação, não tinha rastro nenhum, ninguém não tinha visto nada. Como era muito conhecida, não tinha como alguém não sabê que era ela. Mas sumiu. Assim. Dum quarto fechado, sem tê como. Era uma pessoa como que nunca tinha existido ali. A vida de tudo nós ficou uma tristeza que só. Não tinham vontade de comê, de estudá e cartilha, de ordenhá as vaca nem brincá no galpão. Até as moça que tinha inveja dela, por causa da beleza, se arrependia e sofria. Foi um fim. A vila toda ficou de luto, abatida na tristeza, silenciosa.
– Pra sempre?
– Cabo duns seis mês ou mais um pouco, era um domingo de manhã, invernoso, mas não tava frio, como era de costume por aqui. Ninguém ainda tinha notado isso, quando a gente ouviu. Primeiro, foi um passarinho que não canta nessa época. Depois… a mesma vozinha doce, amorosa, de embalá bebê, que cantava as beleza da terra, dos sonho do povo, dumas esperança de céu e paz, com umas palavra nova, nunca de ouvida… A mesma vozinha que acordava os dia, a fazenda. Era ela! Corremo pro quarto dela, donde vinha a voz, coração aflito, alegre, animado, se perguntano. Linda como sempre, o olhar de criança, o sorriso de gente que ama: ela tinha voltado! Tava saindo do quarto, nem ficou surpresa com nós tudo olhando prela com aquelas cara espantada. Pareceu não vê nada de diferente, pareceu que não tinha acontecido nada demais. Deu um beijo em cada um de nós e foi pra cozinha, prepará o café.
– E assim?
– Fiquemo sem sabê o que fazê. Se olhemo, fiquemo com medo de estragá a alegria dela tê voltado, não sabia o que dizê. Uns até se beliscô, se achando em sonho. E num era. Então, esperemo um outro momento do dia, outra hora mais no molde de fazê inquirição. Mas o dia foi se passando, os pessoal foi sabendo, veio visitá… e quando via ela, ninguém tinha de coragem de perguntá nada. As pergunta ensaiada morria na garganta, sumia num só. Se virava só na alegria dela tá ali, vivinha, de volta. Não sei. Parecia que a presença dela, ressurgida, já explicava tudo, já dizia que tava tudo bem, que o mais importante era aquilo dali, ela e nós de novo junto.
– Mas no depois?
– Nada. Nunca falemo no assunto. Nunca subemo onde que ela teve aqueles seis mês. Ele nunca falô nada, nunca se explicô. Parecia até que ela nem sabia que tinha se ido. A gente só sabia que tinha alguma coisa bem forte, misterienta.
– Por quê?
– Porque ela nunca mais teve aquele olhar particuloso, de se perder em pensamento, como se não tivesse com a gente. Seu olhar era… diferente, mais amplo, sossegado. Parecia tê achado uma resposta, o fim. Foi desse modo que minha filha, Sibele, sumiu e retornou.

Silenciou um instante, olhou para o lado como se buscasse uma lembrança que teimava em fugir.

– Sabe –, retomou falando devagar –, uma coisa… Na hora, a gente nem deu atenção, mas… outro mistério. Na sandália dela tinha uma areia muito fininha. No outro dia, ela tinha colocado a areia num vidrinho, de perfume vazio, que agora fica sobre a mesinha. Vez que outra, eu chego de mansinho no quarto e vejo ela olhando pro vidrinho, quieta, sem se mexer, sem saber que o resto do mundo existe ainda. Aquele antigo olhar…

(scs, 30714)

Salvar

Salvar

18 Apr 19:23

Alan Pope: My Ubuntu 16.04 GNOME Setup

My Ubuntu 16.04 GNOME Setup

This is a post for friends who saw my desktop screenshot and anyone else who likes Unity and is looking at alternatives. A big thanks to Stuart Langridge and Joey Sneddon whose linked posts inspired some of this.

The recent news that upcoming versions of Ubuntu will use GNOME as the default desktop rather than Unity, made me take another look at the GNOME desktop

If you're not interested in my opinion but just want to know what I did, then jump to "Migration from Unity to GNOME" below.

Why Unity?

I'm quite a Unity fan - yes, we exist! I've used it on my laptops and desktops my daily desktop pretty much since it came out, long before I worked at Canonical. I've tried a few other desktop environments, usually for no more than a week or so before getting frustrated and running back to Unity.

Here's what my typical desktop looks like on Ubuntu 16.04

Unity as I use it

At this point I'm sure there are a few people reading this and wondering why I like Unity, incredulous that anyone would. I get this from time to time. Some people seem to bizzarely think "I don't like Unity, therefore nobody does." which is ludicrous, but very obviously happening.

Anecdotally, I still see way more Unity screenshots than other desktops in random non-Linux videos on YouTube, on stranger's laptops on trains & on "millions of dollars" worth of laptops sold by Dell, System76 etc. I've also been told in person by people who like it, but don't like speaking up for fear of unwanted confrontation. ¯\_(ツ)_/¯

But it's a vocal minority of Linux users who tell me what desktop I (and everyone else) shouldn't use. Screw them, it's my PC, I'll run what I like. :)

However, that said, Unity is "dead", apparently, despite it having a few years of support left on the 16.04 LTS release. So I thought I'd take a fresh look at GNOME to see if I can switch to it easily and keep the parts of the Linux desktop I like, change the things I don't and tolerate the things I can't.

For me, it's not one single feature that made me come back to Unity time and time again, but a variety of reasons. Here's a non-exhaustive list of features I enjoy:-

  • Dash - Single button + search to launch apps and find files
  • HUD - Single button + search to find application features in menus
  • Launcher - Quick access via keyboard (or mouse) to top 10+ apps I use, always on screen
  • Window controls - Top left is their rightful place
  • Menus - In the titlebar or top bar (global)
  • App & Window switch behaviour via Alt+Tab & Alt+(key-above-tab)
  • App Spread - Super+S and Super+W to see all windows, or all windows of an app
  • Focus follows mouse - Initially global menu broke this but it was fixed

Much of this comes down to "is really well managed with just a keyboard" which is amusing given how many people tell me Unity (before Unity 8) is awful because it's designed for touch screens.

The things I think could be improved in Unity comprise a pretty short list, and if I thought really hard, I might expand this. If I did they'd probably only be papercut nit-picks rather than significant issues. So, I would have liked these things to have been fixed at some point, but that probably won't happen now :(

  • Memory footprint - It would be nice if the RAM usage of Unity was lower.
  • CPU/GPU overhead - Sometimes it can take a second or two to launch the dash, which should be near-instant all the time
  • Incompleteness - There were interesting designs & updates which never really got finished in Unity7
  • Cross distro support - It would have been nice to have Unity on other distros than just Ubuntu

So let's say a fond farewell to my primary desktop for over 6 years and make the switch.

Migration from Unity to GNOME

With that said, to move from Unity to GNOME on my ThinkPad T450 running Ubuntu 16.04 LTS I did the following:-

Install GNOME

I decided to go with the GNOME version shipping in the archive. People have suggested I try PPAs, but for my primary desktop I'd rather keep using the archive builds, unless there's some really compelling reason to upgrade.

So I backed up my laptop - well, I didn't - my laptop is backed up automatically every 6 hours, so I just figured if anything went belly-up I'd go back to the earlier backup. I then installed GNOME using this command:-

sudo apt install ubuntu-gnome-desktop^

Logout from Unity, choose GNOME at the login screen and we're in.

Default GNOME Desktop

Default GNOME Desktop

First impresssions

These are the things that jump out at me that I don't like and how they're fixed. One thing that's pretty neat about GNOME Shell is the ability to modify it via extensions. For most of the things I didn't like, there was an extension to change the behaviour.

Some are just plain extensions installed via GNOME Extensions, but some needed extra fiddling with Tweak Tool.

Activites hot corner

I find this too easily triggered, so I used No TopLeft Hot Corner. Later, I also discovered the Hide Activtes Button which helps even more by moving the window controls to the very top left, without the "Activities" in the way. I can still use the Super key to find things, with Activities hidden.

No Launcher

GNOME hides the launcher until you press Activites or the Super key. I fixed that with Dash to Dock.

In Tweak Tool, Dash to Dock settings -> Position and size -> tick "Panel mode: extend to the screen edge". I set "Intelligent Autohide" off, because I never liked that feature in Unity, although it had some vocal fans. Also I set the pixel size to 32px. In the Launchers tab I set "Move the applications button at the beginning of the dock".

Legacy indicators

Apparently developers are terrible people and haven't updated their indicators to some new spec, so they get relegated to the "Lower Left Corner of Shame". This is dumb. I used TopIcons Plus to put them where $DEITY intended, and where my eyes are already looking, the top right corner.

Volume control

In Unity I'm used to adjusting the master volume with the mouse wheel while the sound indicator is clicked. I fixed this with Better Volume Indicator

Giant titlebars

GNOME always feels to me like it's designed to waste vertical space with titlebars so I added Pixel Saver.

Missing Rubbish Bin

I like having the Trash / Rubbish Bin / Recycle Bin / Basket on screen. In Unity it's at the bottom of the launcher. I couldn't find an extension which did this so I used trash extension to move it to the top panel indicator area.

Slow animations

Some things felt a bit sluggish to me, so it was recommend that I install the Impatience extension, which seems to have helped my perception, if nothing else.

Remaining niggles

Things I haven't figured out yet. If you have any suggestions, do let me know in the comments below.

  • How to hide the clock completely
    • I frequently record screencasts of my laptop and the time jumping around in the recording can be distracting. So I just hide the clock. I don't see an easy way to do that yet.
  • Make accelerator keys work in alt+space window menu
    • For many years I have used the accelerators in the window controls menu accessed via Alt+space to do things like maximize the window. Alt+Space,x is welded in my muscle memory. I don't understand why they were disabled in GNOME Shell (they work in other desktops).
  • Alt-Tab behaviour is broken (by design (IMHO))
    • All windows of an application come to front when Alt+Tabbed to, even if I only want one window. I have to dance around with Alt+Tab & Alt+Grave.

Reader Suggestions

In the comments below, the following addtional extensions have been suggested.

Greg suggested the Alt Tab List First Window Extension which on initial play seems to fix the Alt-Tab issue listed above! Many thanks Greg!

Alif mentioned Status Area Horizontal Spacing which is great for compressing the gaps out of the indicator area in the top right, to use the space more efficiently. Thanks Alif!

Conclusion

So this is now my desktop, and I'm quite pleased with it! Massive thanks to the GNOME team, the Ubuntu GNOME flavour team, and all the extension authors who made this possible.

My new Ubuntu GNOME Desktop

My new Ubuntu GNOME Desktop

Initially I was a bit frustrated by the default behaviour of GNOME Shell. I've been pleasantly surprised by the extent and functionality of extensions available. Without them, there's no way I'd use this on a daily basis, as it's just too irritating. I'm sure somebody loves the default behaviour though, and that's great :)

I realise I'm running an 'old' version of GNOME Shell (3.18) coming directly from the Ubuntu 16.04 (LTS) archive. It may be there's additional features or fixes that are going to improve things further. I won't be upgrading to 16.10, 17.04 or 17.10 however, and likely won't use a GNOME PPA for my primary desktop. I'll stick with this until 18.04 (the next Ubuntu LTS) has baked for a while. I don't want to upgrade to 18.04 and find extensions break and put me backwards again.

I've had this setup for a few days now, and I'm pretty pleased with how it went. Did you try this? Any other changes you made? Let me know in a comment below! Thanks. :D

18 Apr 19:15

How to Internationalize Your AngularJS App

by MEHMET BAJIN, DEVELOPER @ TOPTAL
Internationalizing modern apps, where the front-end and the back-end are distinctly separate from one another, can be a little tricky. AngularJS, with the help of a few tools, makes internationalizing your app a breeze. In this article, Toptal Freelance Software Engineer Mehmet Bajin gives us a step-by-step tutorial to internationalizing and localizing AngularJS apps.
17 Apr 19:20

Replicação: o que mudou

by Euler Taveira
A mais de 6 anos atrás, eu escrevi o artigo Hot Standby e Streaming Replication que descreve uma das funcionalidades mais aguardadas na época: replicação nativa. De lá para cá houveram diversas melhorias nessa funcionalidade que a tornaram sólida para diversas arquiteturas de sistemas. Irei atualizar os passos descritos no post antigo (que por sinal ainda são válidos) com opções que melhoraram a implantação da replicação no PostgreSQL.
A versão 9.0 implementou a replicação nativa baseada no envio de registros (streaming replication). Um protocolo foi definido para o envio de registros do WAL do servidor principal para o servidor secundário. O servidor secundário tem a capacidade de aceitar consultas somente leitura (hot standby). Em resumo, foi adicionado suporte a um servidor principal e vários servidores secundários (aceitando ou não consultas).
Da versão 9.1 a 9.6 houveram várias melhorias que tornaram essa solução mais sólida e robusta a cada versão. Destaco o suporte a: replicação síncrona (9.1), replicação em cascata (9.2), possibilidade de seguir nova linha do tempo (9.3), slots de replicação (9.4), replicação com atraso (9.4), resincronizar servidor principal antigo com pg_rewind (9.5), múltiplos servidores síncronos ao mesmo tempo (9.6).
A Timbira contribui com duas funcionalidades nessa evolução: função pg_xlog_location_diff (calcular diferença entre posições do WAL -- útil para descobrir o lag de replicação) e recovery_min_apply_delay (atrasar a aplicação do WAL no servidor secundário -- útil para recuperar de desastres tais como remover um banco de dados em produção).
O cenário que utilizaremos é o mesmo do artigo anterior cuja ilustração está na figura abaixo.


O cenário

  • 2 servidores PostgreSQL: um servidor principal (aceita leitura e modificação de dados) e um servidor secundário (aceita ou não consultas somente leitura). Estes servidores devem ser preferencialmente (quase) idênticos pois a replicação é "binária", sendo incompatível em arquiteturas e/ou sistemas operacionais distintos. (Em soluções de alta disponibilidade, utilizar um servidor secundário muito inferior ao servidor principal pode ser inaceitável para negócio. Certifique-se que o servidor secundário tenha capacidade de substituir o servidor principal.);
  • versão do PostgreSQL: a mesma versão em ambos servidores. Com mesma versão quero dizer que os dois primeiros números devem ser iguais (por exemplo, 9.1.3 e 9.1.24, 9.3.10 e 9.3.15, 9.6.2 e 9.6.2). Se for usar versões corretivas diferentes (9.3.10 x 9.3.15), mesmo que momentâneo para alguma atualização, é recomendado manter os servidores secundários com versões corretivas mais recentes para evitar que alguma incompatibilidade (causada por um bug) seja replicada e não consiga ser aplicada em uma versão corretiva anterior;
  • rede: a replicação utiliza o protocolo do PostgreSQL e, portanto, todo o tráfego será através da porta do serviço (padrão é 5432). Certifique-se que o servidor secundário consiga acessar o servidor principal a partir da porta do serviço. Se utilizarmos o pg_basebackup para montar o servidor secundário, não há necessidade de configuração especial (ele transmite os dados do agrupamento através do próprio protocolo do PostgreSQL); no entanto, a utilização de outro método de cópia (ssh, rsync, etc) demandará ajuste no acesso para a(s) porta(s) utilizada(s);
  • acesso: o acesso root não é obrigatório se o local do diretório de dados do servidor secundário estiver com as devidas permissões para o usuário do serviço do PostgreSQL (comumente usuário postgres). A partir da versão 9.1, o usuário que replica os dados precisa ter a permissão REPLICATION ou ser superusuário; na 9.0, o usuário deve ser superusuário;
  • endereço de rede: para o servidor principal e o servidor secundário usaremos 10.1.1.1 e 10.1.1.2, respectivamente;
  • diretório de dados: para o servidor principal usaremos /bd/primario e o servidor secundário usaremos /bd/secundario;
  • usuário do serviço: o usuário do sistema operacional em ambos os servidores será o postgres.

No servidor principal


Começamos alterando a configuração do postgres (/bd/primario/postgresql.conf) no servidor principal:

listen_addresses = '*'
wal_level = replica               # hot_standby até 9.5
max_wal_senders = 3
max_replication_slots = 3    # parâmetro a partir da 9.4

O parâmetro listen_addresses permite que o servidor principal escute todos os endereços da rede (o pg_hba.conf faz restrição por endereço). O parâmetro wal_level determina a quantidade de informação vai para WAL (replica permitirá arquivamento do WAL e replicação). O parâmetro max_wal_senders indica o número máximo de servidores secundários ou aplicações para backup base (tais como pg_basebackup e pg_receivexlog). O parâmetro max_replication_slots especifica o número máximo de slots de replicação permitidos.

É possível prevenir a reciclagem do WAL (que ainda é útil para algum servidor secundário) utilizando o parâmetro wal_keep_segments ou arquivando o WAL com o parâmetro archive_command. O parâmetro wal_keep_segments especifica um número mínimo de arquivos de log de transação a serem mantidos no pg_xlog caso algum servidor secundário necessite obtê-los via replicação. O parâmetro archive_command especifica um comando utilizado para copiar o arquivo de log de transação (que foi recentemente preenchido) para algum local acessível pelos servidores secundários. Contudo, esses métodos podem reter mais arquivos do que o necessário enquanto o slot de replicação visa reter somente o WAL necessário para algum servidor secundário. Uma desvantagem do slot de replicação é que ele não limita a quantidade de arquivos do WAL armazenados no diretório pg_xlog. Isso quer dizer que se algum servidor secundário for desligado e o DBA esquecer de remover o slot de replicação dele, o pg_xlog vai crescer indefinidamente.

As modificações no arquivo /bd/primario/postgresql.conf necessitam de um reinício do serviço.

postgres@principal:~$ pg_ctl restart -D /bd/primario
esperando o servidor desligar.....feito
servidor está parado
servidor está iniciando

A replicação usará uma conexão do postgres. E para realizar essa conexão utilizaremos uma role específica para replicação. A versão 9.0 exigia um superusuário para tal mas a partir da 9.1 essa role pode ter simplesmente a permissão REPLICATION.

postgres@principal:~$ psql
psql (9.6.2)
Digite "help" para ajuda.

postgres=# CREATE ROLE replicacao REPLICATION LOGIN;
CREATE ROLE
postgres=# \q

Dependendo de sua política de segurança, você precisará definir uma senha para a role replicacao. A senha poderá ser informada na string de conexão no arquivo /bd/secundario/recovery.conf ou preferencialmente em um arquivo de senhas (~postgres/.pgpass ou %APPDATA%\postgresql\pgpass.conf no Windows) no servidor secundário.
postgres@principal:~$ psql
psql (9.6.2)
Digite "help" para ajuda.

postgres=# \password replicacao
Digite nova senha:
Digite-a novamente:
postgres=# \q

Precisamos ajustar o acesso no servidor principal. Isso porque a conexão é feita do servidor secundário para o servidor principal. O arquivo /bd/primario/pg_hba.conf controla esse acesso. Os acessos de replicação são identificados utlizando replication com nome do banco de dados (se você tiver um banco chamado replication, ele deve estar entre aspas duplas). Se você decidir utilizar autenticação por senha, o método de autenticação pode ser md5.

host    replication    replicacao    10.1.1.2/32    md5

A adição de uma nova regra de autenticação exige um reload do serviço.

postgres@principal:~$ pg_ctl reload -D /bd/primario
servidor foi sinalizado

No servidor secundário


O próximo passo é obter uma cópia base (base backup) para montar o servidor secundário. A cópia base é uma cópia de todo agrupamento de dados (PGDATA) incluindo os diretórios de todas as tablespaces. Ilustraremos três maneiras de realizar essa cópia dependendo da disponibilidade do serviço.

      1. Servidor principal parado


      Se o servidor puder ficar parado durante a cópia, podemos fazer:
      postgres@principal:~$ pg_ctl stop -D /bd/primario
      esperando o servidor desligar.....feito
      servidor está parado
      postgres@principal:~$ rsync -av --exclude postgresql.auto.conf.tmp --exclude postmaster.pid --exclude postmaster.opts --exclude pg_stat_tmp/* --exclude pg_replslot/* --exclude pg_dynshmem/* --exclude pg_notify/* --exclude pg_serial/* --exclude pg_snapshots/* --exclude pg_subtrans/* --exclude pg_xlog/* --exclude pg_log/* /bd/primario/ postgres@10.1.1.2:/bd/secundario
      sending incremental file list
      ./
      PG_VERSION
      pg_ident.conf
      postgresql.auto.conf
      .
      .
      .
      pg_tblspc/
      pg_twophase/
      pg_xlog/

      sent 364,684,662 bytes  received 96,744 bytes  9,234,972.30 bytes/sec
      total size is 364,298,395  speedup is 1.00
      postgres@principal:~$ pg_ctl start -D /bd/primario
      servidor está iniciando

      No comando rsync não esqueça da barra ao final do nome do diretório. Ele vai indicar que copiaremos somente o conteúdo de /bd/primario e não o diretório primario. Alguns arquivos e/ou diretórios excluídos (--exclude) podem não existir na sua versão, ignore-os. Os diretórios pg_stat_tmp e pg_log podem ser configurados pelo DBA, certifique-se que eles não foram alterados para outros valores.

      2. Servidor principal em atividade


      Caso você queira fazer a cópia base com o servidor em atividade, precisamos executar alguns passos além da cópia. O slot de replicação foi implementado na versão 9.4. Em versões anteriores, ignore o primeiro comando e utilize o arquivamento ou o parâmetro wal_keep_segments conforme explicado acima.
      postgres=# SELECT * FROM pg_create_physical_replication_slot('secundario', true);
       slot_name   | xlog_position
      -------------------+---------------------
       secundario  | 0/99005D50
      (1 registro)

      postgres=# SELECT pg_start_backup('replica', true);
       pg_start_backup
      --------------------------
       0/9A000060
      (1 registro)

      postgres=# \q
      postgres@principal:~$ rsync -av --exclude postgresql.auto.conf.tmp --exclude postmaster.pid --exclude postmaster.opts --exclude pg_stat_tmp/* --exclude pg_replslot/* --exclude pg_dynshmem/* --exclude pg_notify/* --exclude pg_serial/* --exclude pg_snapshots/* --exclude pg_subtrans/* --exclude pg_xlog/* --exclude pg_log/* /bd/primario/ postgres@10.1.1.2:/bd/secundario
      sending incremental file list
      ./
      PG_VERSION
      backup_label
      pg_ident.conf
      .
      .
      .
      pg_twophase/
      pg_xlog/

      sent 364,626,339 bytes  received 96,728 bytes  145,889,226.80 bytes/sec
      total size is 364,240,052  speedup is 1.00
      postgres@principal:~$ psql
      psql (9.6.2)
      Digite "help" para ajuda.

      euler=# SELECT pg_stop_backup();
      NOTA:  pg_stop_backup concluído, todos os segmentos do WAL foram arquivados
       pg_stop_backup
      -------------------------
       0/9BDD1B38
      (1 registro)

      euler=# \q

      Criamos um slot de replicação (com a função pg_create_physical_replication_slot) para limitar a reciclagem do WAL porque o servidor secundário precisará dele. O segundo parâmetro da função é importante porque a reserva é feita imediatamente ao invés de fazer somente na primeira conexão (sem a reserva imediata, uma cópia base que demora algumas horas poderia remover WAL necessário para montar a réplica). Em versões anteriores, faça arquivamento ou utilize o parâmetro wal_keep_segments.

      A função pg_start_backup prepara o servidor principal para iniciar uma cópia base. Após a sua execução podemos fazer a cópia mesmo que arquivos estejam sendo criados (tabelas/índices novos) e/ou excluídos. A cópia base exclui alguns arquivos que podem ser diferentes no servidor secundário (como postgresql.conf e pg_hba.conf) ou que não são necessários (vide parâmetros --exclude no comando rsync). Executamos a função pg_stop_backup para indicar o fim da cópia.

      3. pg_basebackup


      O comando pg_basebackup automatiza a geração de cópias base com servidores postgres em atividade. A cópia base é feita utilizando uma conexão do postgres e utiliza o protocolo de replicação. As configurações feitas no servidor principal e o usuário criado são os pré-requisitos para executar o pg_basebackup. O pg_basebackup deve ser executado a partir do servidor secundário.

      postgres@secundario:~$ pg_basebackup --format=plain --xlog-method=stream --checkpoint=fast --progress -D /bd/secundario -R -v -h 10.1.1.1 -p 5432 -U replicacao
      ponto de início do log de transação: 0/16001FD8 na linha do tempo 1
      pg_basebackup: iniciando receptor do WAL em segundo plano
      98860/98860 kB (100%), 1/1 tablespace                                        
      transaction log end point: 0/16076238
      pg_basebackup: esperando processo em segundo plano terminar o envio ...
      pg_basebackup: cópia base completa

      No exemplo acima, utilizamos o formato plain, que mantém o mesmo layout dos arquivos e diretórios do servidor principal. Se tiver tablespaces, elas vão para o mesmo caminho absoluto definido do servidor principal (certifique-se que os caminhos existam antes de executar o pg_basebackup). O parâmetro --xlog-method especifica que o pg_basebackup irá incluir todos os arquivos de log de transação necessários. O valor stream indica que irá copiar o WAL em paralelo com a cópia base, necessitando para isso de uma conexão extra com o servidor principal (o outro valor é fetch mas só copia o WAL ao final da cópia base, necessitando que não haja reciclagem do WAL -- vide wal_keep_segments). O parâmetro --checkpoint controla se o CHECKPOINT será espalhado (spread) ou rápido (fast) -- a opção fast pode causar um pico de IO; use-a somente em horários de baixa carga. A opção -D especifica o diretório que o agrupamento de dados do servidor secundário será armazenado. A opção -R gera o arquivo recovery.conf (com as opções informadas pelo pg_basebackup) no diretório de saída (-D) para facilitar a montagem do servidor secundário. As opções -h (host), -p (porta) e -U (usuário) são relativas a conexão com servidor principal.

      Iniciando a réplica


      No servidor secundário, o próximo passo é criar o arquivo /bd/secundario/recovery.conf. A presença desse arquivo indica para o postgres que ele deve iniciar em modo de recuperação (a replicação é uma recuperação contínua).
      standby_mode = 'on'
      primary_conninfo = 'host=10.1.1.1 port=5432 user=replicacao'
      O parâmetro standby_mode garante que o servidor secundário ficará em recuperação contínua indefinidamente. Para replicação por fluxo, é necessário informar o parâmetro primary_conninfo especificando como se conectar no servidor principal.

      Se o servidor secundário ficar muito atrasado em relação ao servidor principal, a conexão de replicação pode ser interrompida porque o arquivo de log de transação que contém o registro a ser replicado, já foi reciclado no servidor principal. É uma cenário que pode ocorrer ao realizar cargas de dados e/ou manutenções. As soluções, conforme detalhamos acima, são: wal_keep_segments, arquivamento ou slots. Para wal_keep_segments, basta ajustá-lo no servidor principal. O arquivamento deve ser feito no servidor principal e o local de armazenamento deve ser acessível pelo servidor secundário.

      No servidor principal, crie o diretório /bd/archives com permissão de escrita para usuário postgres e edite o arquivo /bd/primario/postgresql.conf:
      archive_mode = on
      archive_command = 'cp %p /bd/archives/%f'

      Um reinício do postgres no servidor principal é necessário para que o arquivamento seja ativado.

      E no servidor secundário, edite arquivo /bd/secundario/recovery.conf:
      restore_command = 'scp postgres@10.1.1.1:/bd/archives/%f %p'
      Nesse caso (scp), use um par de chaves para acesso via ssh sem solicitar senha.

      Por fim, se optar por utilizar slots (versão >= 9.4), crie o slot com a função pg_create_physical_replication_slot conforme detalhado acima e adicione o seguinte parâmetro no arquivo /bd/secundario/recovery.conf:
      primary_slot_name = 'secundario'

      O nome do slot é aquele que você informou no primeiro parâmetro da função. Para obter os slots, utilize a seguinte consulta:
      postgres=# SELECT slot_name, slot_type, active, restart_lsn FROM pg_replication_slots;
       slot_name   | slot_type | active | restart_lsn
      -------------------+--------------+---------+--------------------
       secundario  | physical  | f         | 0/1A272848
      (1 registro)

      Mais alguns ajustes no arquivo /bd/secundario/postgresql.conf.
      hot_standby = on
      hot_standby_feedback = on

      O parâmetro hot_standby permitirá consultas somente leitura no servidor secundário. O parâmetro hot_standby_feedback faz com que o servidor secundário envie informações ao servidor principal para impedir o cancelamento de consultas no servidor secundário. A desvantagem é o inchaço de tabelas no servidor principal porque algumas consultas longas no servidor secundário ainda utilizam registros que já foram removidos no servidor principal e não podem ser limpados porque provocariam o cancelamento da consulta no servidor secundário.

      Se o objetivo do servidor secundário é alta disponibilidade, é preferível não ajustar hot_standby_feedback e manter os valores de max_standby_archive_delay e max_standby_streaming_delay baixos, assim o servidor secundário não ficará tão distante do servidor principal por causa de atrasos provocados por consultas longas.

      Todavia, se o objetivo do servidor secundário é executar consultas longas habilite hot_standby_feedback e/ou defina os valores de max_standby_archive_delay e max_standby_streaming_delay altos ou mesmo -1 (infinito). Tenha em mente que manter um atraso grande fará com que outras conexões não vejam mudanças recentes no servidor principal (porque elas ainda não foram aplicadas).

      O último passo é iniciar o serviço no servidor secundário:
      postgres@secundario:~$ pg_ctl start -D /bd/secundario
      postgres@secundario:~$ cat postgresql-2017-02-20_213649.log
      LOG:  sistema de banco de dados foi interrompido; última execução em 2017-02-20 21:28:06 BRT
      LOG:  entrando no modo em espera
      LOG:  redo inicia em 0/1B000028
      LOG:  estado de recuperação consistente alcançado em 0/1B0000F8
      LOG:  sistema de banco de dados está pronto para aceitar conexões somente leitura
      LOG:  iniciado fluxo de WAL do principal em 0/1C000000 na linha do tempo 1

      Para monitorar a replicação, consulte a visão pg_stat_replication no servidor principal:
      postgres=# SELECT *, pg_xlog_location_diff(sent_location, replay_location) AS lag_replay FROM pg_stat_replication;
      -[ RECORD 1 ]----+------------------------------------------------
      pid                      | 18943
      usesysid             | 16384
      usename             | replicacao
      application_name | walreceiver
      client_addr          |
      client_hostname  |
      client_port           | -1
      backend_start     | 2017-02-20 21:36:49.788049-03
      backend_xmin     |
      state                   | streaming
      sent_location      | 0/1FE534C0
      write_location     | 0/1FE534C0
      flush_location     | 0/1FE4F4F0
      replay_location   | 0/1FE4F4F0
      sync_priority       | 0
      sync_state          | async
      lag_replay           | 16336
      Lembre-se de remover o slot (se estiver utilizando), após desativar algum servidor secundário. Um slot sem uso retém arquivos de log de transação indefinidamente (podendo encher a sua partição rapidamente se o espaço for reduzido). Para remover o slot, execute:
      postgres=# SELECT pg_drop_replication_slot('secundario');
       pg_drop_replication_slot
      -------------------------------------

      (1 registro)
      12 Apr 19:52

      Bruce Momjian: Inside the WAL

      The write-ahead log (WAL) does many things:

      It is great that a single facility is used for so much. Fortunately, it is possible to look inside of the WAL. This is particularly useful for setting recovery_target_xid in recovery.conf.

      The binary portion of the WAL can be viewed using pg_xlogdump. This is the output of transaction 558, which was an INSERT into a table with one index:

      Continue Reading »

      10 Apr 20:29

      Robert Haas: New Features Coming in PostgreSQL 10

      The list of new features coming in PostgreSQL 10 is extremely impressive.  I've been involved in the PostgreSQL project since the 8.4 release cycle (2008-2009), and I've never seen anything like this.  Many people have already blogged about these features elsewhere; my purpose here is just to bring together a list of the features that, in my opinion, are the biggest new things that we can expect to see in PostgreSQL 10.  [Disclaimers: (1) Other people may have different opinions.  (2) It is not impossible that some patches could be reverted prior to release.  (3) The list below represents the work of the entire PostgreSQL community, not specifically me or EnterpriseDB, and I have no intention of taking credit for anyone else's work.]
      Read more »
      03 Apr 15:49

      Ativando o Optimus NVIDIA GPU no Dell XPS 15 com Linux, mesmo na bateria

      by Fábio Akita

      Já se passou um bom tempo desde meu artigo sobre tuning Manjaro para o Dell XPS 15. Manjaro lançou uma versão mais recente (17) e o kernel lançou a 4.10. A atualização do Manjaro 16 e do kernel 4.9 se deu sem problemas.

      Estes são os pacotes específicos do kernel atualmente instalados:

      $ pacman -Ss 410 | grep installed
      core/linux410 4.10.1-1 [installed]
      core/linux410-headers 4.10.1-1 [installed]
      extra/linux410-acpi_call 1.1.0-0.7 (linux410-extramodules) [installed]
      extra/linux410-bbswitch 0.8-0.7 (linux410-extramodules) [installed]
      extra/linux410-ndiswrapper 1.61-0.7 (linux410-extramodules) [installed]
      extra/linux410-nvidia 1:375.39-0.7 (linux410-extramodules) [installed]

      E para ter certeza de que tudo está ok, eu removi os antigos pacotes relacionados à versão 4.9:

      sudo pacman -R linux49 linux49-headers linux49-acpi_call linux49-bbswitch linux49-ndiswrapper linux49-nvidia

      Eu também atualizei a BIOS para a mais recente, 1.2.19 (embora muitos tenham dito para ficar em 1.2.18 por enquanto, mas eu não reduzi). A atualização da BIOS é bastante fácil porque você só precisa ter uma unidade USB formatada FAT e copiar o arquivo “XPS_9550_1.2.19.exe”. Na inicialização, você pode pressionar F12 e escolher a opção para atualizar diretamente de lá.

      Uma coisa que parou de funcionar foram as teclas de função para controlar o brilho da tela. Eu não fui capaz de resolver isso de volta, mas eu ainda posso controlar o brilho manualmente a partir do Terminal usando comandos como este:

      xbacklight -inc 20 # to increment
      xbacklight -dec 20 # to decrement

      Então, a parte mais irritante: o cartão NVIDIA Optimus.

      Suspender o sistema operacional funciona perfeitamente na maioria das vezes. Eu posso apenas fechar a tampa, abrir no outro dia e a bateria permanece razoavelmente no mesmo nível. Kudos para a equipe do kernel por apoiar isso.

      Mas o sistema de gerenciamento de energia desliga a GPU NVIDIA e não posso reativá-la depois que a máquina voltar da suspensão, mesmo que eu a conecte novamente a uma fonte de alimentação. Sempre que eu tento executar algo através de optirun (o que força o processamento através da GPU NVIDIA em vez da GPU Intel integrado primário) ele dá erro com esta mensagem:

      Could not enable discrete graphics card

      E a única maneira de tê-lo em execução era conectar o cabo de alimentação e reiniciar a máquina. Então, eu poderia usar o NVIDIA GPU normalmente. Reiniciar o tempo todo não é lento (graças ao rápido SSD), mas ainda é chato ter que reabrir cada aplicativo toda vez.

      Finalmente, depois de muita pesquisa, eu descobri como ter o NVIDIA GPU habilitado mesmo na bateria e após suspender. Primeiro, você precisa saber o ID PCI para o cartão:

      $ lspci | grep "NVIDIA" | cut -b -8
      01:00.0

      Então, você precisa editar /etc/default/tlp e adicionar esse ID PCI para ser colocado na lista negra do gerenciamento de energia:

      # Exclude PCI(e) device adresses the following list from Runtime PM
      # (separate with spaces). Use lspci to get the adresses (1st column).
      #RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6"
      RUNTIME_PM_BLACKLIST="01:00.0"

      Reinicie e é isso! Agora eu posso executar aplicativos através do cartão NVIDIA mesmo sem estar conectado ao cabo de alimentação.

      Parece que há um conflito entre TLP e Bumblebee. A solução foi listada neste tópico do reddit de janeiro/2017  e neste tópico de fevereiro/2017 no fórum Manjaro se você estiver interessado na discussão sobre isso.

      A parte mais difícil de usar o NVIDIA no Linux é entender todas as muitas terminologias dele. Nem mesmo tenho certeza de que já compreendi tudo.

      Isso é o que eu descobri até agora:

      • Optimus é a tecnologia de cards gráficos híbridos, que permite que uma GPU Intel de baixa potência seja o card principal que você pode conectar à secundária GPU NVIDIA, exigente em termos de energia, exatamente quando você realmente precisa dele.
      • optirun é o comando que você usa para fazer essa conexão.
      • “NVIDIA” é o que chamamos de binários proprietários oficiais. No Arch está disponível no pacote “linux410-nvidia”.
      • “Nouveau” é o driver de código aberto, ele usa Primus para fazer a conexão em vez de optirun. Acredito que você deve evitar esse driver por enquanto se precisar de desempenho completo e conformidade total da GPU.
      • Bumblebee” é um daemon usado para ativar e desativar a NVIDIA GPU. Você não quer que ele esteja ativado o tempo todo, especialmente quando estiver sendo executado com bateria, para evitar drená-la muito rápido.
      • bbswitch” é o módulo do kernel que faz chamadas ACPI de baixo nível para controlar o estado de energia do cartão NVIDIA GPU.
      • TLP” é o sistema de gerenciamento de energia geral do Linux, que controla todos os aspectos do hardware da máquina, incluindo os dispositivos PCI (um dos quais é o cartão NVIDIA).

      Eu entendo que você não quer que TLP entre em cena e desligue o cartão, porque se ele o fizer, então Bumblebee não poderá ativá-lo novamente quando necessário (através de bbswitch). Então você tem que colocar na lista negra o dispositivo PCI em TLP e deixar Bumblebee fazer o seu trabalho.

      Se tudo estiver funcionando bem, então NVIDIA GPU estará desativada por padrão. Você pode verificar se ela está desligada através de bbswitch:

      $ cat /proc/acpi/bbswitch
      0000:01:00.0 OFF

      Agora, digamos que você queira forçar algo a usar o card, então você faz isso assim:

      $ optirun -vv glxgears
      [ 1817.200384] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
      [ 1817.200519] [INFO]Configured driver: nvidia
      [ 1817.200579] [DEBUG]optirun version 3.2.1-2017-02-27-Format:%h$ starting...
      [ 1817.200584] [DEBUG]Active configuration:
      [ 1817.200588] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
      [ 1817.200592] [DEBUG] X display: :8
      [ 1817.200595] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia:/usr/lib32/nvidia
      [ 1817.200599] [DEBUG] Socket path: /var/run/bumblebee.socket
      [ 1817.200603] [DEBUG] Accel/display bridge: auto
      [ 1817.200607] [DEBUG] VGL Compression: proxy
      [ 1817.200611] [DEBUG] VGLrun extra options: 
      [ 1817.200615] [DEBUG] Primus LD Path: /usr/lib/primus:/usr/lib32/primus
      [ 1817.200645] [DEBUG]Using auto-detected bridge virtualgl
      [ 1818.163747] [INFO]Response: Yes. X is active.
      
      [ 1818.163757] [INFO]Running application using virtualgl.
      [ 1818.163843] [DEBUG]Process vglrun started, PID 9770.
      10419 frames in 5.0 seconds = 2083.766 FPS
      10671 frames in 5.0 seconds = 2134.041 FPS

      Isto irá executar glxgears (um aplicativo simples para testar o card) através da conexão Optimus (em modo detalhado, é por isso que você tem todas essas informações extras). E se glxgears era capaz de usar a NVIDIA GPU, ele deve relatar FPS (frames per second) maior que 1.000.

      E você pode verificar com bbswitch como este:

      $ cat /proc/acpi/bbswitch
      0000:01:00.0 ON

      Quando você Ctrl-C fora de glxgears ele deve relatar como OFF novamente.

      Apenas para ter certeza, é importante garantir que o /etc/bumblebee/bumblebee.conf está personalizado como este (somente as chaves importantes são mostradas abaixo):

      [bumblebeed]
      Driver=nvidia
      ...
      [optirun]
      Bridge=auto
      ...
      [driver-nvidia]
      KernelDriver=nvidia
      PMMethod=bbswitch
      ...

      Até agora, as únicas pequenas questões que ainda tenho são as seguintes:

      • As teclas de função não alteram o brilho da tela
      • Fone de ouvido bluetooth Bose conecta perfeitamente, mas não se tornará saída de som primária sem manualmente mudar para tal nas configurações de Som (mas todas as teclas de função de hardware para controle de volume e mídia funcionam sem problemas).
      • Eu tive que instalar o Manjaro usando o boot antigo da BIOS e o esquema de partição MBR em vez de GPT sobre UEFI. Não sei com certeza como mover para GPT/UEFI agora (usando um esquema de partição cifrada LUKS)

      Depois de corrigir a NVIDIA GPU após uma suspensão ou desligamento de energia, os outros problemas são apenas pequenos aborrecimentos.

      Até agora, estou muito feliz por estar usando Manjaro no Dell XPS. Estou usando uma configuração de monitor duplo e tudo está funcionando perfeitamente. Se você quiser tentar isto, eu recomendo que você fique com a versão 9560 (versão mid 2016) Sandy Bridge. Não vá para as novas versões Kaby Lake ainda, pois você vai achar BIOS firmware bastante bugado e muitos aspectos do hardware não estarão ainda devidamente suportados ou documentados.

      E se você é novo no Arch, eu recomendo que você comece com o Manjaro GNOME. É de longe o melhor e mais útil desktop Linux que eu já tentei.

      ***

      Artigo traduzido com autorização do autor. Publicado originalmente em http://www.akitaonrails.com/2017/03/14/enabling-optimus-nvidia-gpu-on-the-dell-xps-15-with-linux-even-on-battery