Categorias
Pessoal

TopTal

I have recently come across a new platform called TopTal, which is basically a search engine of professionals in the tech field based upon their skill set and expertise. Its objective is to match projects with freelance professionals across the globe based upon the projects specific needs, barriers and/or unique application that must be considered (i.e., bioinformatics, health care, statistics, query accessibility, etc…). From the perspective of the consumer this enables a more accurate delineation of the project skills needed and the appropriate professionals that meet the qualifications for the entire aggregate of skills needed for effective completion of the project. This platform also provides freelance tech professionals an ability to advertise their skill set to the more discerning tech field employers who have more specialized or focused needs.

In an era, where the consumer is beginning to realize that all computer technicians are not the same – the mismatch of skills on project teams is a consistent hindrance of efficiency and timelines. In reality, the well-oiled team matches skills like a symphony with one note completing the other in a harmony of efficiency. However, the harsh reality for employers, but is no surprise to tech professionals, is that the ideal team for one project is not necessarily the ideal team for the next. Often projects present different objectives and barriers with new or different perspectives needing to be considered to always find the most innovative solution possible – which in reality forces the need for different frames of references looking at it from new ways - with each project a different problem.

Personally, I am excited to wave in the possibility for more efficient project teams that bring together an eclectic group of professionals to solve a specific problem. In fact, it reminds me of the scene in Apollo 13 when they dump a bag full of mismatched odds and ends in front of a group of the best minds and give them the instructions… “solve it”. I’ve been working on freelance projects alongside my full time job because of one reason… it keeps me sharp. Freelance makes you think outside the box, takes from the skills that may seem mundane in my 9-5 job to another level of problem solving, it makes me see the holes and weaknesses and forces me to find and stretch my problem solving skills for the perfect fit… in a nutshell, I practice my art.

Rafa

Rafael Araujo is a computer technician specializing in databases, modeling and high availability architecture and back-end environments prepared for high traffic and/or high concurrency. Works with PHP, Java, Shell Script, HTML5, JavaScript, AngularJS, jQuery, PostgreSQL, MySQL, MSSQL, Oracle, PL/PGSQL, PL/SQL.

Categorias
Banco de dados

Precisamos de apoio das ferramentas para a paginação por conjunto de chaves

(Traduzido de We need tool support for keyset pagination)

Você sabia que a paginação via offset é muito problemática, mas fácil de evitar?

offset instrui os bancos de dados a pular os primeiros N resultados N de uma consulta. No entanto, o banco de dados ainda deve buscar essas linhas a partir do disco e trazê-los em ordem antes de ele pode enviar os seguintes.

Isto não é um problema de implementação, é a maneira na qual offset foi desenhado:

... As linhas são primeiro classificadas de acordo com a <cláusula order by> e, em seguida, limitada retirando-se o número de linhas especificadas na <cláusula offset> desde o início ...

— SQL:2011, Part 2, §4.15.3 Derived tables

Em outras palavras, grandes offsets impõe um grande trabalho para o banco de dados, não importa se SQL ou NoSQL.

Mas o problema com offset não pára aqui: já pensou sobre o que acontece se uma nova linha é inserida entre duas páginas buscadas?

offset-drifting

Quando offset➌ é usado para ignorar as entradas❶ anteriores, você terá duplicações no caso de existirem novas linhas inseridas entre as duas páginas➋. Há outras anomalias possíveis também, este é apenas o caso mais comum.

Este nem é um problema de banco de dados, é a maneira como os frameworks implementam paginação: eles apenas dizem qual é o número da página a ser recuperada ou quantas linhas devem ser ignoradas. Com estas informações apenas, nenhum banco de dados pode fazer melhor.

Vida sem OFFSET

Agora imagine um mundo sem estes problemas. Como se constata, viver sem offset é bem simples: apenas utilize uma cláusula where que selecione apenas os dados que você ainda não viu.

Para isso, exploraremos o fato de que trabalhamos com um conjunto ordenado - você tem uma cláusula order by, não é? Uma vez que há uma ordenação definida, podemos usar um filtro simples para somente selecionar o que é posterior a entrada que vimos anteriormente.

SELECT ...
FROM ...
WHERE ...
AND id < ?last_seen_id
ORDER BY id DESC
FETCH FIRST 10 ROWS ONLY

Esta é a receita básica. Ele fica mais interessante quando a classificação é por várias colunas, mas a idéia é a mesma. Esta receita também é aplicável a muitos sistemas NoSQL.

Esta abordagem - chamada seek method ou keyset pagination - resolve o problema de derivação de resultados como ilustrado acima e é ainda mais rápido do que offset. Se você quer saber o que acontece dentro do banco de dados ao usar offset ou keyset pagination, dê uma olhada nestes slides (benchmarks, benchmarks!):

No slide 43 você também pode ver que keyset pagination tem algumas limitações: mais notavelmente que você não pode navegar diretamente para páginas arbitrariamente. No entanto, isto não é um problema quando se utiliza rolagem infinita. Mostrar o número de páginas para serem clicadas é uma interface de navegação pobre, na minha humilde opinião.

Se você quiser ler mais sobre como implementar corretamente keyset pagination em SQL, por favor fetch-next-page. Mesmo que você não esteja envolvido com o SQL, vale a pena ler fetch-next-page antes de começar a implementar qualquer coisa.

No entando, os frameworks

A principal razão para preferir offset a paginação por conjunto de chaves (keyset pagination) é a falta de suporte. A maioria das ferramentas de paginação são baseadas em offset, mas não oferecem nenhuma maneira conveniente para a utilização de paginação por conjunto de chaves.

Por favor, note que a paginação por conjunto de chaves afeta toda a tecnologia envolvida na execução de JavaScript do navegador que esteja fazendo a requisição AJAX para rolagem infinita: ao invés de simplesmente passar um número de página para o servidor, você deve passar o conjunto de chaves completo (geralmente múltiplas colunas) para o servidor.

O hall da fama de frameworks que suportam paginação por conjunto de chaves é ainda pequeno:

É por isto que preciso da sua ajuda. Se você estiver mantendo um framework que tem algum envolvimento com paginação, eu peço, eu imploro, que você construa um suporte nativo para navegação por conjunto de chaves também. Se você tiver quaisquer perguntas sobre detalhes, ficarei feliz em ajudar (forum, contact form, Twitter)!

Mesmo que você esteja apenas utilizando um software que deveria suportar paginação por conjunto de chaves, como um gerenciador de conteúdos ou uma loja virtual, faça os mantenedores saberem sobre isso. Você poderia fazer uma requisitação da funcionalidade (link a esta página) ou, se possível, desenvolva um patch. Novamente, ficarei feliz em ajudar a ter todos os devidos detalhes.

Tome WordPress como um exemplo.

Espalhe a palavra

O problema com a paginação de conjunto de chaves não é técnico. O problema é que é pouquíssimo conhecido no meio e não há suporte das ferramentas. Se você gosta da idéia de evitar o uso de paginação por offset, por favor, ajude a espalhar a palavra. Use o Twitter, compartilhe, envie por e-mail, você pode até reproduzir este post (CC-BY-NC-ND). Traduções são também bem-vindas, apenas faça um contato prévio - eu também incluirei o link da tradução a esta página.

Ah, e se você estiver em um blog, você também pode acrescentar um banner para que seus leitores fiquem alertas a isto. Eu preparei uma a galeria de banner NoOffset com alguns formatos comuns. Escolha o que ficar melhor.

Categorias
Tropeçando

Tropeçando 68

PG Phriday: 10 Ways to Ruin Performance: Functionally Bankrupt

O uso inadequado de funções em consultas e índices e que arruinam a performance do banco.

A arte da linha de comando

Fluência na linha de comando é uma habilidade muitas vezes negligenciada ou considerada obsoleta, porém ela aumenta sua flexibilidade e produtividade como desenvolvedor de diversas maneiras, sutis ou não. Este texto descreve uma seleção de notas e dicas de uso da linha de comando que me parecem muito uteis, quando usando o Linux. Algumas dicas são elementares, e outras são mais específicas, sofisticadas ou obscuras. Esta página é curta, mas se você souber usar e lembrar todos os items que estão aqui, então você está mandando bem.

Verify that a network connection is secure

Através da captura dos pacotes que trafegam na rede em que você está conectado, verifique se há vulnerabilidades e a  possibilidade de desvio das informações quando você está usando protocolos de encriptação.

7 Essential JavaScript Functions

Funções JavaScript utilíssimas: debounce, poll, once, getAbsoluteURL, isNative, insertRule, matchesSelector

PG Phriday: Partitioning Candidates

Entendendo quando tabelas são boas candidatas ao particionamento

Is sending password to user email secure?

Salvando diff em HTML

PG Phriday: Dealing With Table Bloating

Menu slide-down com seletores avançados

Categorias
Tropeçando

Tropeçando 67

Changing Owner of Multiple Database Objects

Partitioning – what? why? how?

PG Phriday: 10 Ways to Ruin Performance: Out Of Order

Is it really not possible to write a php cli password prompt that hides the password in windows?

Esconder a senha que está sendo digitada em um programa de PHP em linha de comando.

Categorias
Tropeçando

Tropeçando 66

How to access a Linux server behind NAT via reverse SSH tunnel

Post a message to another users screen via SSH

How to setup SSL connections and authentication?

Configurar conexões e autenticações SSL no PostgreSQL. Camada de segurança para troca de informações criptografadas.

Aprenda como interligar dois locais através de uma VPN

Postgresql Restore – Restaurando o backup incremental PITR (9.2, 9.3 e 9.4)

Categorias
Tropeçando

Tropeçando 65

The history of replication in PostgreSQL

Taming Forms in AngularJS 1.3

Ultimo Dia Util Considerando Feriados em Oracle PL/SQL

HTTP access control (CORS)

Detalhes do lado do cliente na utilização de CORS.

CORS on Apache

Use vimdiff as git mergetool

Instruções para utilizar vimdiff como resolvedor de conflitos do GIT

git ahead/behind info between master and branch?

Ter a informação de quantos commits há atrás/adiante do seu branch no git

GNS3 1.3 – A ferramenta perfeita para quem gosta de redes

O GNS3 é um simulador de redes bastante “real”, que emula os mais diversos equipamentos activos de uma rede: routers, switchs, PCs, telefones, firewalls, etc. Considerando por exemplo um router, o GNS3 permite-nos emular o IOS (sistema operativo dos equipamentos Cisco) de um router real e proceder às respectivas configurações.

Compressor.io

Compressão de imagens em formato otimizado com menor perda possível (quando não sem perda).

Categorias
Tropeçando

Tropeçando 64

Oracle X PostgreSQL – Parte I: Semelhanças

How to Recover an Encrypted Home Directory on Ubuntu

Recovering an encrypted home directory when you don't have the former operational system anymore. Or you are accessing through an external hard driver or something else.

Tag All The Things
Tag All The Things 2
Tag All The Things 3

Série AngularJS: Filter ordenando tabela por coluna

Problema do ano 2038

Playing around with ~/.gvfs/

Building Huuuuuge Apps with AngularJS

Partial aggregation: The beautiful way

I have PostgreSQL, loaded some data, and have app using it. Now what?

Agora que o banco já está no ar e sendo usado, é muito importante cuidar da sua saúde. Vamos, portanto, aplicar:

  • streaming replication de master para slave
  • walarchiving para o servidor storage deixando-o disponível para recuperação por backup
  • walarchiving para o servidor slave para que no caso do slave cair, será possível a recuperação sem que seja necessário refazer a replicação
  • limpeza de walarchive no slave - xlogs desnecessários serão removidos
  • backups diários, executados a partir do slave e salvos no servidor storage, sem que haja nenhum trabalho adicional no master (excetuando-se iniciar e encerrar o modo de backup, o que não afeta o desempenho normal do master)
  • backups e walarchive no storage são mantidos em sincronia (sem xlogs que são inúteis) e pequenos o suficiente
Categorias
Tropeçando

Tropeçando 63

Garbage Collection of Unused PostgreSQL Tables and Columns

Free up some important space on PostgreSQL without changing the available disk storage space.

Remapping Caps Lock in 14.04 Trusty Tahr

Remaping keys: capslock to escape and viceversa in Ubuntu 13.10 [duplicate]

PostgreSQL: A full text search engine - Part 1

How much slower are numerics?

The story of pgAdmin

Categorias
Tropeçando

Tropeçando 61

Bulk Processing with BULK COLLECT and FORALL

Prime Indicator Lets You Quickly Switch Between Nvidia And Intel Graphics [Ubuntu 14.04]

Como redimensionar discos no Virtual Box

Como mapear permanentemente uma unidade de rede no Ubuntu

PostgreSQL Bi-Directional Replication

A Small Database Does Not Mean Small shared_buffers

Another mantra often heard in PostgreSQL circles is that you usually don’t want to set shared_buffers higher than 8GB. I will admit, that for a majority of users, that is great advice and a good starting point (and a whole lot more useful than the default 32MB).

Changing Owner of Multiple Database Objects

pgAFIS: Biometric Elephant

Some biometrics inside PostgreSQL. Usage, implementation, use-cases and performance.

I want to add CORS support to my server

Categorias
Tropeçando

Tropeçando 60

CSS Message Boxes for different message types

Add missing wpsql_errno in PG4WP plugin

15 fatos sobre programação que você provavelmente não sabia

Validação de formulários com HTML5

SQL Injection Cheat Sheet