Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Don’t believe everything you learn - PHPSouthCoast

Don’t believe everything you learn - PHPSouthCoast

A minute always has 60 seconds, right? Wrong! Ok, but a country always has a capital city, right? Wrong again!

Come and join us for a lighthearted talk about some of the common falsehoods that developers believe which cause issues in real, production systems. We’ll cover the classics like timezones and names, as well as some new contenders such as geography and software versions.

Michael Heap

June 09, 2017
Tweet

More Decks by Michael Heap

Other Decks in Technology

Transcript

  1. Don’t believe
    everything you learn
    @mheap at #phpsc17

    View Slide

  2. Things we believe are true

    View Slide

  3. Things we believe are true
    But they’re not

    View Slide

  4. Falsehoods programmers
    believe about X

    View Slide

  5. Michael

    View Slide

  6. Time

    View Slide

  7. @mheap
    The number of days in every month
    starts with a 3, so either 30 or 31?

    View Slide

  8. @mheap
    The number of days in every month
    starts with a 3, so either 30 or 31?
    February has 28

    View Slide

  9. #phpsc17
    Each month always has the same
    number of days every year though?

    View Slide

  10. #phpsc17
    Each month always has the same
    number of days every year though?
    February has 29 in leap years

    View Slide

  11. @mheap
    But we can calculate leap years.
    They’re every four years

    View Slide

  12. @mheap
    But we can calculate leap years.
    They’re every four years
    Unless it’s divisible by 100

    View Slide

  13. #phpsc17
    But we can calculate leap years.
    They’re every four years
    (Unless it’s divisible by 100)

    View Slide

  14. #phpsc17
    But we can calculate leap years.
    They’re every four years
    (Unless it’s divisible by 100)
    If it divides by 100 and 400, it
    is a leap year

    View Slide

  15. @mheap
    But that rule holds all the time

    View Slide

  16. @mheap
    But that rule holds all the time
    Unless you’re Sweden

    View Slide

  17. #phpsc17
    February is 28 or 29 days
    February the 30th doesn’t exist

    View Slide

  18. #phpsc17
    February is 28 or 29 days
    February the 30th doesn’t exist
    Unless you’re Sweden

    View Slide

  19. #phpsc17
    February is 28 or 29 days
    February the 30th doesn’t exist

    View Slide

  20. #phpsc17
    February is 28 or 29 days
    February the 30th doesn’t exist
    Or the Soviet Union

    View Slide

  21. @mheap
    A month starts and ends in
    the same year

    View Slide

  22. @mheap
    A month starts and ends in
    the same year
    Not in ancient Rome

    View Slide

  23. @mheap
    A month starts and ends in
    the same year

    View Slide

  24. @mheap
    A month starts and ends in
    the same year
    Or a modern Ethiopia

    View Slide

  25. #phpsc17
    Excluding DST, time always
    goes forwards

    View Slide

  26. #phpsc17
    Excluding DST, time always
    goes forwards
    Shanghai, 1927
    1927-12-31 23:54:08 happened twice

    View Slide

  27. Modern Time

    View Slide

  28. @mheap
    The day before Saturday
    is always Friday

    View Slide

  29. @mheap
    The day before Saturday
    is always Friday
    Samoa, 2011

    View Slide

  30. #phpsc17
    The offsets between two timezones
    will always be the same

    View Slide

  31. #phpsc17
    The offsets between two timezones
    will always be the same
    10 changes in 2016
    2 changes so far in 2017

    View Slide

  32. @mheap
    Timezones are always +/-
    an integer number of hours

    View Slide

  33. @mheap
    Timezones are always +/-
    an integer number of hours
    Afghanistan, +04:30
    New Zealand (Chatham Islands), +12:45

    View Slide

  34. #phpsc17
    15 minutes is safe though?

    View Slide

  35. #phpsc17
    15 minutes is safe though?
    UTC-00:25:21 - Dublin Mean Time

    View Slide

  36. @mheap
    If they do change, there’ll be
    plenty of notice

    View Slide

  37. @mheap
    If they do change, there’ll be
    plenty of notice
    North Korea, 2015
    8 days notice of a 30 minute change

    View Slide

  38. Audience Participation

    View Slide

  39. @mheap
    There are always 24 hours in a day

    View Slide

  40. @mheap
    There are always 24 hours in a day
    Daylight Savings Time
    Means 23 or 25 hours in a day

    View Slide

  41. #phpsc17
    Is the time 23:59:60 invalid?

    View Slide

  42. #phpsc17
    Is the time 23:59:60 invalid?
    Leap seconds
    A minute can have 61 seconds

    View Slide

  43. Names
    HELLO
    , M
    Y
    N
    AM
    E
    IS

    View Slide

  44. @mheap
    A child will have the same surname as
    either their mother or father (or both)

    View Slide

  45. @mheap
    A child will have the same surname as
    either their mother or father (or both)
    Not in Iceland

    View Slide

  46. #phpsc17
    People have at least 2 names

    View Slide

  47. #phpsc17
    People have at least 2 names
    Teller (of Penn & Teller fame)
    Akihito (Emperor of Japan)

    View Slide

  48. @mheap
    People’s names do not
    contain numbers

    View Slide

  49. @mheap
    People’s names do not
    contain numbers
    John 5

    View Slide

  50. #phpsc17
    People’s names do not
    contain numbers

    View Slide

  51. #phpsc17
    People’s names do not
    contain numbers
    K8lyn? (Kaitlyn)

    View Slide

  52. #phpsc17
    People’s names do not
    contain numbers

    View Slide

  53. #phpsc17
    People’s names do not
    contain numbers
    KVIIIlyn

    View Slide

  54. @mheap
    For every rule, there are
    guaranteed to be exceptions

    View Slide

  55. @mheap
    For every rule, there are
    guaranteed to be exceptions
    No spaces
    Van Buren

    View Slide

  56. @mheap
    For every rule, there are
    guaranteed to be exceptions

    View Slide

  57. @mheap
    For every rule, there are
    guaranteed to be exceptions
    Only letters
    O’Reilly

    View Slide

  58. @mheap
    For every rule, there are
    guaranteed to be exceptions

    View Slide

  59. @mheap
    For every rule, there are
    guaranteed to be exceptions
    One capital letter
    McDonald

    View Slide

  60. Audience Participation
    HELLO
    , M
    Y
    N
    AM
    E
    IS

    View Slide

  61. @mheap
    A name must contain one or
    more alphanumeric characters

    View Slide

  62. @mheap
    A name must contain one or
    more alphanumeric characters
    ⽑毛泽东

    View Slide

  63. #phpsc17
    A name must contain one or
    more unicode characters

    View Slide

  64. #phpsc17
    A name must contain one or
    more unicode characters

    View Slide

  65. @mheap
    I can safely assume that this list
    of bad words has no names in it

    View Slide

  66. @mheap
    I can safely assume that this list
    of bad words has no names in it
    Ever been to Middlesex?

    View Slide

  67. @mheap
    I can safely assume that this list
    of bad words has no names in it

    View Slide

  68. @mheap
    I can safely assume that this list
    of bad words has no names in it
    Eaten shittake mushrooms?

    View Slide

  69. @mheap
    I can safely assume that this list
    of bad words has no names in it

    View Slide

  70. @mheap
    I can safely assume that this list
    of bad words has no names in it
    Been named Craig Cockburn?

    View Slide

  71. @mheap
    I can safely assume that this list
    of bad words has no names in it

    View Slide

  72. @mheap
    I can safely assume that this list
    of bad words has no names in it
    Linda Callahan?

    View Slide

  73. @mheap
    I can safely assume that this list
    of bad words has no names in it

    View Slide

  74. #phpsc17
    What about less obvious ones?

    View Slide

  75. #phpsc17
    What about less obvious ones?
    Super Bowl XXX

    View Slide

  76. @mheap
    Did you hear about planning
    permission emails bouncing?

    View Slide

  77. @mheap
    Did you hear about planning
    permission emails bouncing?
    Erection of a structure

    View Slide

  78. #phpsc17
    The sad story of

    View Slide

  79. #phpsc17
    The sad story of
    Christopher Null

    View Slide

  80. Addresses

    View Slide

  81. #phpsc17
    A building number is numeric

    View Slide

  82. #phpsc17
    A building number is numeric
    1A Egmont Road, Middlesbrough,
    TS4 2HT

    View Slide

  83. @mheap
    No buildings are numbered zero

    View Slide

  84. @mheap
    No buildings are numbered zero
    0 Egmont Road, Middlesbrough,
    TS4 2HT

    View Slide

  85. #phpsc17
    If the addresses on the left are even,
    addresses on the right must be odd

    View Slide

  86. #phpsc17
    If the addresses on the left are even,
    addresses on the right must be odd
    Seine-Saint-Denis, France
    Even numbers on both sides, no odds

    View Slide

  87. @mheap
    You can omit leading zeros

    View Slide

  88. @mheap
    You can omit leading zeros
    101 Alma St, Palo Alto
    Apartments 1 and 001 on different floors.

    View Slide

  89. #phpsc17
    A street name won't include a number

    View Slide

  90. #phpsc17
    A street name won't include a number
    8 Seven Gardens Burgh, Woodbridge,
    IP13 6SU

    View Slide

  91. @mheap
    You wouldn’t name a town Street

    View Slide

  92. @mheap
    You wouldn’t name a town Street
    Street, Somerset, UK

    View Slide

  93. #phpsc17
    You can’t have two towns/cities with
    the same name in a country

    View Slide

  94. #phpsc17
    You can’t have two towns/cities with
    the same name in a country
    The UK has three places
    named Newport

    View Slide

  95. @mheap
    Those cities don’t have
    duplicate street names

    View Slide

  96. @mheap
    Those cities don’t have
    duplicate street names
    10 High Street, Newport, PO30 1SS
    10 High Street, Newport, NP20 1FQ
    10 High Street, Newport, TF10 7AN

    View Slide

  97. #phpsc17
    Street names will be
    reasonably short

    View Slide

  98. #phpsc17
    Street names will be
    reasonably short
    Aleja Alije Izetbegovića Prvig
    Predsjednika Predsjedništva Republika
    Bosna i Hercegovina

    View Slide

  99. @mheap
    A building has a single postcode

    View Slide

  100. @mheap
    A building has a single postcode
    DVLA Swansea:
    V5Cs are processed at SA99 1BA,
    Driving licences at SA99 1AB

    View Slide

  101. #phpsc17
    Addresses are a fixed point
    in space

    View Slide

  102. #phpsc17
    Addresses are a fixed point
    in space
    BF1 4FB

    View Slide

  103. @mheap
    Concrete buildings are a fixed
    point in space

    View Slide

  104. @mheap
    Concrete buildings are a fixed
    point in space
    In Zürich, a 6200 ton building was
    moved by 60 meters to make way for
    railway tracks

    View Slide

  105. Audience Participation

    View Slide

  106. #phpsc17
    Do all countries have a
    capital city?

    View Slide

  107. #phpsc17
    Do all countries have a
    capital city?
    Switzerland does not. The government
    is currently in Bern, but the city is not
    the capital

    View Slide

  108. Commerce

    View Slide

  109. #phpsc17
    A product has one price

    View Slide

  110. #phpsc17
    A product has one price
    Price with tax, price without tax, sale
    price, list price, minimum price

    View Slide

  111. @mheap
    A product has a price

    View Slide

  112. @mheap
    A product has a price
    Products sold on auction sites
    do not have a price until it’s sold

    View Slide

  113. #phpsc17
    Currencies symbols uniquely
    identify a currency

    View Slide

  114. #phpsc17
    Currencies symbols uniquely
    identify a currency
    The peso and dollar sign $ is
    used by many countries

    View Slide

  115. @mheap
    Currencies have a unicode symbol
    that represents them

    View Slide

  116. @mheap
    Currencies have a unicode symbol
    that represents them
    The Swiss franc does not
    Until 2010, neither did the Indian rupee

    View Slide

  117. #phpsc17
    Currencies symbols uniquely
    identify a currency

    View Slide

  118. #phpsc17
    Currencies symbols uniquely
    identify a currency
    The peso and dollar sign $ is
    used by many countries

    View Slide

  119. Audience Participation

    View Slide

  120. @mheap
    Locale doesn’t matter for currency

    View Slide

  121. @mheap
    Locale doesn’t matter for currency
    1.000

    View Slide

  122. #phpsc17
    The currency symbol always precedes
    the amount e.g. £1.50

    View Slide

  123. #phpsc17
    The currency symbol always precedes
    the amount e.g. £1.50
    1.50€ in Spain

    View Slide

  124. @mheap
    The currency symbol always
    precedes or follows the amount

    View Slide

  125. @mheap
    The currency symbol always
    precedes or follows the amount
    1€50 in France

    View Slide

  126. Computers

    View Slide

  127. The network is reliable.
    Latency is zero.
    Bandwidth is infinite.
    The network is secure.
    Topology doesn't change.
    There is one administrator.
    Transport cost is zero.
    The network is homogeneous.

    View Slide

  128. (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:
    [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-
    \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\
    ["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
    \r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:
    [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
    \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\
    [([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
    \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?
    [ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:
    (?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\
    [\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:
    (?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?
    [ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".
    \[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\
    [\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]
    (?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:
    [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
    \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\
    [\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:
    \r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
    \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\]
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?
    [ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\
    \".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?
    [ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\
    \".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|
    (?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\
    \.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
    (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-
    \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
    \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\
    \.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*)

    View Slide

  129. In summary

    View Slide

  130. In summary
    Computers are hard

    View Slide

  131. In summary

    View Slide

  132. In summary
    Humans make assumptions

    View Slide

  133. In summary

    View Slide

  134. In summary
    Things are never as simple
    as they seem

    View Slide

  135. @mheap
    https://joind.in/21483

    View Slide