Upload
matheus-de-oliveira
View
192
Download
0
Embed Size (px)
Citation preview
TOP5 – Falsas Suposições de Programadores
Matheus de Oliveira<[email protected]>
Apresentado no15 de Maio de 2015
Matheus de Oliveira<[email protected]>
DBA PostgreSQL – consultorias e suportes24x7/8x5
Instrutor dos treinamentos PostgreSQL
Concepção, desenvolvimento e suporte àprodução
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
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
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”
TOP5 �Falsas
Suposições deProgra-madores
1. Tratamentode Data/hora
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
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
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
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
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
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
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
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
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
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
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
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
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
Não existem “apenas” 24 fuso horários
7 / 22TOP5 – Falsas Suposićões de Programadores | Matheus de Oliveira | DevCamp 2015
2. Pessoas têmnomes, nem sempretão simples comovocê imagina
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3. Endereçostambém não sãotão simples assim
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
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
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
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
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
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
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
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
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
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
4. Precisão depontos �utuantes
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
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
5. Concorrência embancos de dados(relacionais)
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
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
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
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
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
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
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
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
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
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
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
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
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
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