72
TOP5 – Falsas Suposições de Programadores Matheus de Oliveira <[email protected]> Apresentado no 15 de Maio de 2015

TOP5 - Falsas Suposições de Programadores

Embed Size (px)

Citation preview

Page 1: TOP5 - Falsas Suposições de Programadores

TOP5 – Falsas Suposições de Programadores

Matheus de Oliveira<[email protected]>

Apresentado no15 de Maio de 2015

Page 2: TOP5 - Falsas Suposições de Programadores

Matheus de Oliveira<[email protected]>

DBA PostgreSQL – consultorias e suportes24x7/8x5

Instrutor dos treinamentos PostgreSQL

Concepção, desenvolvimento e suporte àprodução

Page 3: TOP5 - Falsas Suposições de Programadores

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

Instrutor dos treinamentos PostgreSQL

Concepção, desenvolvimento e suporte àprodução

Page 4: TOP5 - Falsas Suposições de Programadores

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/“Aprenda com quem faz na prática”

Concepção, desenvolvimento e suporte àprodução

Page 5: TOP5 - Falsas Suposições de Programadores

Matheus de Oliveira<[email protected]>

Mais de 15 anos trabalhando de suporte econsultoria PostgreSQL

http://www.dextra.com.br/“Crafting Software, Transforming Business”

10 anos e mais de 10 mil profissionaiscapacitados em todo o Brasil.

http://www.dextraining.com.br/“Aprenda com quem faz na prática”

SaaS para análise e monitoramento PostgreSQLhttp://www.pganalytics.com.br/

“Facilitando a vida do DBA”

Page 6: TOP5 - Falsas Suposições de Programadores

TOP5 �Falsas

Suposições deProgra-madores

Page 7: TOP5 - Falsas Suposições de Programadores

1. Tratamentode Data/hora

Page 8: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• todo dia tem 24 horas?

◦ Então, se subtrairmos 1 dia de uma data/hora, ou 24 horas, teremos omesmo resultado, certo?

postgres =# SELECT ts , ts - i n t e r v a l ’1 day’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -18 01:00:00 -02

(1 row)

postgres =# SELECT ts , ts - i n t e r v a l ’24 hours’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -17 23:00:00 -03

(1 row)

5 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 9: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• todo dia tem 24 horas?◦ Então, se subtrairmos 1 dia de uma data/hora, ou 24 horas, teremos o

mesmo resultado, certo?

postgres =# SELECT ts , ts - i n t e r v a l ’1 day’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -18 01:00:00 -02

(1 row)

postgres =# SELECT ts , ts - i n t e r v a l ’24 hours’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -17 23:00:00 -03

(1 row)

5 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 10: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• todo dia tem 24 horas?◦ Então, se subtrairmos 1 dia de uma data/hora, ou 24 horas, teremos o

mesmo resultado, certo?

postgres =# SELECT ts , ts - i n t e r v a l ’1 day’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -18 01:00:00 -02

(1 row)

postgres =# SELECT ts , ts - i n t e r v a l ’24 hours’ FROMdatahora;

ts | ? column?------------------------+------------------------2015 -10 -19 00:00:00 -02 | 2015 -10 -17 23:00:00 -03

(1 row)

5 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 11: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários

◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 12: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos

◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,12:00

◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 13: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00

◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 14: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais

◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 15: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas

◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 16: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!

◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 17: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário

◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 18: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar

◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 19: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança

◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 20: TOP5 - Falsas Suposições de Programadores

Tratamento de data/hora

• Falsa suposições sobre fuso horários:◦ minha aplicação nunca vai ser usada com diferentes fuso horários◦ Ok, mas pelo menos os "offsets" vão ser próximos◦ os possíveis "offsets" são -12:00, -11:00, -10:00, ..., 10:00, 11:00,

12:00◦ a data/hora do cliente e do servidor são iguais◦ Ok, não iguais, mas bem próximas◦ Ok, ok, mas pelo menos a diferença permanece a mesma, sempre!◦ os servidores estarão todos com o mesmo fuso horário◦ o fuso horário do servidor não vai mudar◦ a data/hora do servidor não volta, só avança◦ ... http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time

6 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 21: TOP5 - Falsas Suposições de Programadores

Não existem “apenas” 24 fuso horários

7 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 22: TOP5 - Falsas Suposições de Programadores

2. Pessoas têmnomes, nem sempretão simples comovocê imagina

Page 23: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?

• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmente

compartilhado entre irmãos), nome◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,

sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 24: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?

◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmente

compartilhado entre irmãos), nome◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,

sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 25: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome

◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmentecompartilhado entre irmãos), nome

◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe

◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 26: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmente

compartilhado entre irmãos), nome

◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe

◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 27: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmente

compartilhado entre irmãos), nome◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,

sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe

◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 28: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Björk Guðmundsdóttir – Islândia – ordem: nome, sobrenome◦ Mao Ze Dong – China – ordem: sobrenome, genérico (geralmente

compartilhado entre irmãos), nome◦ María-Jose Carreño Quiñones – Países que falam espanhol – nome,

sobrenome do pai (será o sobrenome “principal”), sobrenome da mãe◦ José Eduardo Santos Tavares Melo Silva – Brasil

9 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 29: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Velikkakathu Sankaran Achuthanandan – Índia – sobrenome, nome do

pai, nome

◦ Kogaddu Birappa Timappa Nair – Índia – ordem: nome da vila, nomedo pai, nome, sobrenome

◦ Aditya Pratap Singh Chauhan – Índia – ordem: nome, nome do pai,sobrenome, casta

• OBS: Exemplos aproximados, sobrenome é o nome da família oucomo deve-se referenciar com Sr./Sra./etc. Mais detalhes, commesmos exemplos, em http://www.w3.org/International/questions/qa-personal-names

10 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 30: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Velikkakathu Sankaran Achuthanandan – Índia – sobrenome, nome do

pai, nome◦ Kogaddu Birappa Timappa Nair – Índia – ordem: nome da vila, nome

do pai, nome, sobrenome

◦ Aditya Pratap Singh Chauhan – Índia – ordem: nome, nome do pai,sobrenome, casta

• OBS: Exemplos aproximados, sobrenome é o nome da família oucomo deve-se referenciar com Sr./Sra./etc. Mais detalhes, commesmos exemplos, em http://www.w3.org/International/questions/qa-personal-names

10 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 31: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Velikkakathu Sankaran Achuthanandan – Índia – sobrenome, nome do

pai, nome◦ Kogaddu Birappa Timappa Nair – Índia – ordem: nome da vila, nome

do pai, nome, sobrenome◦ Aditya Pratap Singh Chauhan – Índia – ordem: nome, nome do pai,

sobrenome, casta

• OBS: Exemplos aproximados, sobrenome é o nome da família oucomo deve-se referenciar com Sr./Sra./etc. Mais detalhes, commesmos exemplos, em http://www.w3.org/International/questions/qa-personal-names

10 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 32: TOP5 - Falsas Suposições de Programadores

Pessoas têm nomes, nem sempre tão simples como vocêimagina

• É possível validar os caracteres de um nome?• É possível separar os componentes de um nome (nome, sobrenome,etc.)?◦ Velikkakathu Sankaran Achuthanandan – Índia – sobrenome, nome do

pai, nome◦ Kogaddu Birappa Timappa Nair – Índia – ordem: nome da vila, nome

do pai, nome, sobrenome◦ Aditya Pratap Singh Chauhan – Índia – ordem: nome, nome do pai,

sobrenome, casta

• OBS: Exemplos aproximados, sobrenome é o nome da família oucomo deve-se referenciar com Sr./Sra./etc. Mais detalhes, commesmos exemplos, em http://www.w3.org/International/questions/qa-personal-names

10 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 33: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?

◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.◦ “Matheus de”, “Oliveira”:

e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 34: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?

◦ e o caro “Mao Ze Dong”?• Nome, sobrenome?

◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.◦ “Matheus de”, “Oliveira”:

e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 35: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.◦ “Matheus de”, “Oliveira”:

e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 36: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?

◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.◦ “Matheus de”, “Oliveira”:

e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 37: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?

◦ Se eu uso “Matheus”, “de Oliveira”:Autor: DE OLIVEIRA, Matheus.

◦ “Matheus de”, “Oliveira”:e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 38: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.

◦ “Matheus de”, “Oliveira”:e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 39: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Primeiro nome, último nome?◦ e a senhora “María-Jose Carreño Quiñones”?◦ e o caro “Mao Ze Dong”?

• Nome, sobrenome?◦ E como concatenar? “Dong Mao” ao invés de “Mao Dong”?◦ Se eu uso “Matheus”, “de Oliveira”:

Autor: DE OLIVEIRA, Matheus.◦ “Matheus de”, “Oliveira”:

e-mail: Olá Matheus de, você acaba de ganhar 1 milhão de reais!

11 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 40: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Não há solução então?

◦ A verdade é que depende do uso, uma solução aceita é pedir:• Nome completo: ...• Como devemos chamá-lo: ...

• Legal, e o campo para tratamento Sr./Sra./Dr./etc.?◦ Alguns tratamentos vêm no início (Dr./Sr./Sra./etc.), outros no fim

(“, PhD”)

12 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 41: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Não há solução então?◦ A verdade é que depende do uso, uma solução aceita é pedir:

• Nome completo: ...• Como devemos chamá-lo: ...

• Legal, e o campo para tratamento Sr./Sra./Dr./etc.?◦ Alguns tratamentos vêm no início (Dr./Sr./Sra./etc.), outros no fim

(“, PhD”)

12 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 42: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Não há solução então?◦ A verdade é que depende do uso, uma solução aceita é pedir:

• Nome completo: ...• Como devemos chamá-lo: ...

• Legal, e o campo para tratamento Sr./Sra./Dr./etc.?

◦ Alguns tratamentos vêm no início (Dr./Sr./Sra./etc.), outros no fim(“, PhD”)

12 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 43: TOP5 - Falsas Suposições de Programadores

Ok, e como devemos criar nossos formulários?

• Não há solução então?◦ A verdade é que depende do uso, uma solução aceita é pedir:

• Nome completo: ...• Como devemos chamá-lo: ...

• Legal, e o campo para tratamento Sr./Sra./Dr./etc.?◦ Alguns tratamentos vêm no início (Dr./Sr./Sra./etc.), outros no fim

(“, PhD”)

12 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 44: TOP5 - Falsas Suposições de Programadores

3. Endereçostambém não sãotão simples assim

Page 45: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:

◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 46: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número

◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 47: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)

◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 48: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região

◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP morampróximas uma da outra

◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 49: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra

◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 50: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP

◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 51: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país

◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 52: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade

◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 53: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda

◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 54: TOP5 - Falsas Suposições de Programadores

Endereços também não são tão simples assim

• Errado:◦ todo endereço possui um número◦ Ok, mas se tem número então é numérico (ah?)◦ pessoas com CEPs semelhantes moram na mesma região◦ Mas pelo menos duas pessoas com exatamente o mesmo CEP moram

próximas uma da outra◦ No mesmo logradouro não existe mais de um CEP◦ Nome de cidade é único no país◦ Tá, mas nome de rua é único dentro cidade◦ Nome de rua, cidade, bairro, nunca muda◦ ... https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/

14 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 55: TOP5 - Falsas Suposições de Programadores

4. Precisão depontos �utuantes

Page 56: TOP5 - Falsas Suposições de Programadores

Precisão de pontos flutuantes

• Devemos usar os tipos double,float,real,... sempre quetrabalhamos com decimais (moeda, volume, etc.)?

UPDATE venda_itemSET valor_real = valor , qtd_real = qtd ,valor_double = valor , qtd_double = qtd;

SELECT sum(valor * qtd) AS soma ,sum(valor_real * qtd_real) AS soma_real ,sum(valor_double * qtd_double) AS soma_doubleFROM venda_item;

soma | soma_real | soma_double-------------+-----------+------------------183802.5000 | 183804 | 183802.499999927

◦ soma = numeric/decimal◦ soma_real = float (4 bytes)◦ soma_double = double precision (8 bytes)

16 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 57: TOP5 - Falsas Suposições de Programadores

Precisão de pontos flutuantes

• Devemos usar os tipos double,float,real,... sempre quetrabalhamos com decimais (moeda, volume, etc.)?UPDATE venda_item

SET valor_real = valor , qtd_real = qtd ,valor_double = valor , qtd_double = qtd;

SELECT sum(valor * qtd) AS soma ,sum(valor_real * qtd_real) AS soma_real ,sum(valor_double * qtd_double) AS soma_doubleFROM venda_item;

soma | soma_real | soma_double-------------+-----------+------------------183802.5000 | 183804 | 183802.499999927

◦ soma = numeric/decimal◦ soma_real = float (4 bytes)◦ soma_double = double precision (8 bytes)

16 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 58: TOP5 - Falsas Suposições de Programadores

5. Concorrência embancos de dados(relacionais)

Page 59: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:

◦ Pegar o próximo “id” único para autoincremento:

SELECT max(id) + 1 FROM minha_tabela;

Solução: sequence, serial, auto_increment◦ Inserir ou atualizar um registro:

UPDATE acesso SET contador = contador + 1WHERE url = p_url AND usuario = p_usuario;

IF (NOT FOUND) THENINSERT INTO acesso(url , usuario , contador)VALUES (p_url , p_usuario , 1);

END IF ;

Solução: tratamento de erro (falha no INSERT, tenta UPDATEnovamente), MERGE, INSERT OR REPLACE, INSERT ... ONCONFLICT UPDATE, ...

18 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 60: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Pegar o próximo “id” único para autoincremento:

SELECT max(id) + 1 FROM minha_tabela;

Solução: sequence, serial, auto_increment◦ Inserir ou atualizar um registro:

UPDATE acesso SET contador = contador + 1WHERE url = p_url AND usuario = p_usuario;

IF (NOT FOUND) THENINSERT INTO acesso(url , usuario , contador)VALUES (p_url , p_usuario , 1);

END IF ;

Solução: tratamento de erro (falha no INSERT, tenta UPDATEnovamente), MERGE, INSERT OR REPLACE, INSERT ... ONCONFLICT UPDATE, ...

18 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 61: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Pegar o próximo “id” único para autoincremento:

SELECT max(id) + 1 FROM minha_tabela;

Solução: sequence, serial, auto_increment

◦ Inserir ou atualizar um registro:

UPDATE acesso SET contador = contador + 1WHERE url = p_url AND usuario = p_usuario;

IF (NOT FOUND) THENINSERT INTO acesso(url , usuario , contador)VALUES (p_url , p_usuario , 1);

END IF ;

Solução: tratamento de erro (falha no INSERT, tenta UPDATEnovamente), MERGE, INSERT OR REPLACE, INSERT ... ONCONFLICT UPDATE, ...

18 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 62: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Pegar o próximo “id” único para autoincremento:

SELECT max(id) + 1 FROM minha_tabela;

Solução: sequence, serial, auto_increment◦ Inserir ou atualizar um registro:

UPDATE acesso SET contador = contador + 1WHERE url = p_url AND usuario = p_usuario;

IF (NOT FOUND) THENINSERT INTO acesso(url , usuario , contador)VALUES (p_url , p_usuario , 1);

END IF ;

Solução: tratamento de erro (falha no INSERT, tenta UPDATEnovamente), MERGE, INSERT OR REPLACE, INSERT ... ONCONFLICT UPDATE, ...

18 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 63: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Pegar o próximo “id” único para autoincremento:

SELECT max(id) + 1 FROM minha_tabela;

Solução: sequence, serial, auto_increment◦ Inserir ou atualizar um registro:

UPDATE acesso SET contador = contador + 1WHERE url = p_url AND usuario = p_usuario;

IF (NOT FOUND) THENINSERT INTO acesso(url , usuario , contador)VALUES (p_url , p_usuario , 1);

END IF ;

Solução: tratamento de erro (falha no INSERT, tenta UPDATEnovamente), MERGE, INSERT OR REPLACE, INSERT ... ONCONFLICT UPDATE, ...

18 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 64: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Trigger para atualizar estoque:

SELECT qtd_estoque INTO v_qtdFROM produtosWHERE produto_id = NEW.produto_id;

UPDATE produtosSET qtd_estoque = v_qtd - NEW.qtdWHERE produto_id = NEW.produto_id;

Solução: um único UPDATE

UPDATE produtosSET qtd_estoque = qtd_estoque - NEW.qtdWHERE produto_id = NEW.produto_id;

Ou então, use a cláusula FOR UPDATE no SELECT

19 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 65: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Trigger para atualizar estoque:

SELECT qtd_estoque INTO v_qtdFROM produtosWHERE produto_id = NEW.produto_id;

UPDATE produtosSET qtd_estoque = v_qtd - NEW.qtdWHERE produto_id = NEW.produto_id;

Solução: um único UPDATE

UPDATE produtosSET qtd_estoque = qtd_estoque - NEW.qtdWHERE produto_id = NEW.produto_id;

Ou então, use a cláusula FOR UPDATE no SELECT

19 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 66: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Trigger para atualizar estoque:

SELECT qtd_estoque INTO v_qtdFROM produtosWHERE produto_id = NEW.produto_id;

UPDATE produtosSET qtd_estoque = v_qtd - NEW.qtdWHERE produto_id = NEW.produto_id;

Solução: um único UPDATE

UPDATE produtosSET qtd_estoque = qtd_estoque - NEW.qtdWHERE produto_id = NEW.produto_id;

Ou então, use a cláusula FOR UPDATE no SELECT

19 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 67: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Incoerências relativas à sequências (sequences ou campos

autoincrementais) em ids:• ids são contínuos (sem buracos)

• SELECT ... FROM tabela (sem ORDER BY), traz na ordem de inserção• Ok, mas pelo menos ORDER BY id me traz a ordem de inserção• Sério? Ah, mas ORDER BY id e ORDER BY data_insercao são

equivalentes

20 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 68: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Incoerências relativas à sequências (sequences ou campos

autoincrementais) em ids:• ids são contínuos (sem buracos)• SELECT ... FROM tabela (sem ORDER BY), traz na ordem de inserção

• Ok, mas pelo menos ORDER BY id me traz a ordem de inserção• Sério? Ah, mas ORDER BY id e ORDER BY data_insercao são

equivalentes

20 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 69: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Incoerências relativas à sequências (sequences ou campos

autoincrementais) em ids:• ids são contínuos (sem buracos)• SELECT ... FROM tabela (sem ORDER BY), traz na ordem de inserção• Ok, mas pelo menos ORDER BY id me traz a ordem de inserção

• Sério? Ah, mas ORDER BY id e ORDER BY data_insercao sãoequivalentes

20 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 70: TOP5 - Falsas Suposições de Programadores

Concorrência em bancos de dados (relacionais)

• Errado:◦ Incoerências relativas à sequências (sequences ou campos

autoincrementais) em ids:• ids são contínuos (sem buracos)• SELECT ... FROM tabela (sem ORDER BY), traz na ordem de inserção• Ok, mas pelo menos ORDER BY id me traz a ordem de inserção• Sério? Ah, mas ORDER BY id e ORDER BY data_insercao são

equivalentes

20 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 71: TOP5 - Falsas Suposições de Programadores

Resumindo...

1. Marcar tempo é complexo, use sempre valor absoluto (ou um tipoque use-o internamente)

2. Pessoas têm nomes “estranhos”, e não gostam quando você os erra!3. Vida de carteiro não é fácil4. float/double/real/... não têm boa precisão5. Vai ter mais de um usuário em produção, pense sempre em

concorrência

21 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015

Page 72: TOP5 - Falsas Suposições de Programadores

Obrigado!

Dúvidas?

Matheus de Oliveira<[email protected]>

IRC – irc.freenode.net:/join #postgresql,#postgresql-br,#dextra

Meu nick: MatheusOl

Twitter: @matioli_matheusLinkedIn: br.linkedin.com/in/matheusdeoliveira/SlideShare: slideshare.net/matheus_de_oliveira