Categorias
PHP

Codility – PermMissingElem

I scored 100% in #php on @Codility!
https://codility.com/demo/take-sample-test/perm_missing_elem/

Training ticket

Session
ID: trainingWEF9F8-YEU
Time limit: 120 min.

Status: closed
Created on: 2016-01-17 03:25 UTC
Started on: 2016-01-17 03:25 UTC
Finished on: 2016-01-17 03:40 UTC

Training ticket (real finishing time)

Session
ID: trainingCSVQV7-4KF
Time limit: 120 min.

Status: closed
Created on: 2016-01-17 04:29 UTC
Started on: 2016-01-17 04:29 UTC
Finished on: 2016-01-17 04:30 UTC

Categorias
PHP

Codility – OddOccurrencesInArray

I scored 66% in #php on @Codility!
https://codility.com/demo/take-sample-test/odd_occurrences_in_array/

I don't know how to do better yet.

Training ticket

Session
ID: training8BGA3Q-8PA
Time limit: 120 min.

Status: closed
Created on: 2016-01-17 03:06 UTC
Started on: 2016-01-17 03:06 UTC
Finished on: 2016-01-17 03:07 UTC

Categorias
PHP

Codility – FrogJmp

I scored 100% in #php on @Codility!
https://codility.com/demo/take-sample-test/frog_jmp/

Training ticket

Session
ID: trainingXKJK2U-3C6
Time limit: 120 min.

Status: closed
Created on: 2016-01-17 02:47 UTC
Started on: 2016-01-17 02:47 UTC
Finished on: 2016-01-17 02:56 UTC

Categorias
PHP

Codility – BinaryGap

I scored 100% in #php on @Codility!
https://codility.com/demo/take-sample-test/binary_gap/

Categorias
PHP

Codility – CyclicRotation

I scored 100% in #php on @Codility!
https://codility.com/demo/take-sample-test/cyclic_rotation/

100% de aproveitamento!

Categorias
Tropeçando

Tropeçando 70

Estressando CPU, memória RAM e disco rígido com stress-ng no Ubuntu

Um programa para realizar teste de estresse em recursos do computador. Com isso, será possível conhecer melhor os limites da máquina.

Developer’s Guide to Open Source Licenses

Building REST API for Legacy PHP Projects

PostgreSQL 9.4 streaming replication over SSL with Replication Slots

Export to xls using angularjs

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.