1 00:00:04,960 --> 00:00:19,999 [Music] 2 00:00:21,000 --> 00:00:26,920 our second talk for this block uh is 3 00:00:24,080 --> 00:00:29,960 Time and Time Again by uh 4 00:00:26,920 --> 00:00:32,000 Yakov uh who is a principal software 5 00:00:29,960 --> 00:00:35,559 engineer at we Global is that what you 6 00:00:32,000 --> 00:00:37,079 do these days yes yeah um he's also an 7 00:00:35,559 --> 00:00:40,600 occasional speaker an open source 8 00:00:37,079 --> 00:00:42,360 contributor and yes a reverse engineer 9 00:00:40,600 --> 00:00:44,640 and a hacker and a problem solver and an 10 00:00:42,360 --> 00:00:47,280 amateur radio operator and yes he does 11 00:00:44,640 --> 00:00:49,520 talk about Pokémon a lot um what he 12 00:00:47,280 --> 00:00:51,640 hasn't said in his bio is was actually 13 00:00:49,520 --> 00:00:54,920 the session co-chair the program 14 00:00:51,640 --> 00:00:57,120 co-chair last year for Pon Au um so if 15 00:00:54,920 --> 00:00:59,120 you had problems like last year trying 16 00:00:57,120 --> 00:01:00,480 to decide which talk you were going to 17 00:00:59,120 --> 00:01:03,119 because they're all scheduled against 18 00:01:00,480 --> 00:01:07,439 each other you can just blame 19 00:01:03,119 --> 00:01:10,360 Yakov he's here for you um thank you my 20 00:01:07,439 --> 00:01:10,360 apologies and thank 21 00:01:13,920 --> 00:01:17,759 you I'd like to start today by 22 00:01:16,080 --> 00:01:19,640 acknowledging the warun people of the 23 00:01:17,759 --> 00:01:21,400 kol nation as the traditional owners of 24 00:01:19,640 --> 00:01:23,560 the land where we meet today and pay my 25 00:01:21,400 --> 00:01:27,680 respect to their Elders past and 26 00:01:23,560 --> 00:01:29,040 present past and present when I started 27 00:01:27,680 --> 00:01:30,560 writing this B I was wondering how far 28 00:01:29,040 --> 00:01:32,840 can you get through a talk on time 29 00:01:30,560 --> 00:01:34,520 without actually mentioning time like 30 00:01:32,840 --> 00:01:36,520 even a simple good morning you've got 31 00:01:34,520 --> 00:01:40,079 one word and in acknowledgement of 32 00:01:36,520 --> 00:01:42,399 country I counted about 32 and then I 33 00:01:40,079 --> 00:01:45,920 suddenly realized now that today 34 00:01:42,399 --> 00:01:47,840 mentions time and start gets you only 35 00:01:45,920 --> 00:01:51,280 forward in it's very hard to escape time 36 00:01:47,840 --> 00:01:54,360 time is very pervasive in everything we 37 00:01:51,280 --> 00:01:55,920 do a while ago I was mindly scrolling 38 00:01:54,360 --> 00:01:58,320 through memes on Facebook which is 39 00:01:55,920 --> 00:02:00,200 pretty much all good for these days and 40 00:01:58,320 --> 00:02:02,680 I came across a tech comedian please 41 00:02:00,200 --> 00:02:03,960 forgive me I do not remember who it was 42 00:02:02,680 --> 00:02:05,479 um I couldn't find again when I went 43 00:02:03,960 --> 00:02:07,240 looking if you recognize this let me 44 00:02:05,479 --> 00:02:08,479 know afterwards but it was a tech 45 00:02:07,240 --> 00:02:09,879 comedian who was talking about the 46 00:02:08,479 --> 00:02:11,959 perfect calendar design what would 47 00:02:09,879 --> 00:02:14,519 happen if he got to rewrite the calendar 48 00:02:11,959 --> 00:02:16,800 so it was easier something like this the 49 00:02:14,519 --> 00:02:18,879 year would be made up of 52 weeks uh but 50 00:02:16,800 --> 00:02:21,319 they would be divided into 13 months of 51 00:02:18,879 --> 00:02:23,519 exactly four weeks each and they would 52 00:02:21,319 --> 00:02:25,440 each contain seven days this would 53 00:02:23,519 --> 00:02:27,480 simplify a lot of calculations cuz the 54 00:02:25,440 --> 00:02:30,280 first day of every week and of every 55 00:02:27,480 --> 00:02:31,680 month would be a Sunday the last day of 56 00:02:30,280 --> 00:02:33,800 every week and the last day of every 57 00:02:31,680 --> 00:02:34,680 month would be a Saturday and you could 58 00:02:33,800 --> 00:02:36,000 figure out which day of the week 59 00:02:34,680 --> 00:02:37,640 something was just by doing some simple 60 00:02:36,000 --> 00:02:39,800 division and remainder really nice and 61 00:02:37,640 --> 00:02:42,120 easy but if you're doing some very quick 62 00:02:39,800 --> 00:02:44,680 maths in the back there um that doesn't 63 00:02:42,120 --> 00:02:46,560 add up to 365 that gets to you 364 so we 64 00:02:44,680 --> 00:02:48,040 need one more day so in order to account 65 00:02:46,560 --> 00:02:49,599 for the imperfection of this calendar 66 00:02:48,040 --> 00:02:50,959 we'll have an additional day inserted 67 00:02:49,599 --> 00:02:52,840 between the end of one year and the 68 00:02:50,959 --> 00:02:54,440 start of the next and this day doesn't 69 00:02:52,840 --> 00:02:56,680 belong to any week it doesn't belong to 70 00:02:54,440 --> 00:02:58,680 any month it doesn't belong to any year 71 00:02:56,680 --> 00:03:00,680 so the year would end on Saturday then 72 00:02:58,680 --> 00:03:02,519 you would have a day of limbo 73 00:03:00,680 --> 00:03:05,239 and then you would have a 74 00:03:02,519 --> 00:03:07,080 Sunday and instead of having leap years 75 00:03:05,239 --> 00:03:09,440 we would just have two days of limbo you 76 00:03:07,080 --> 00:03:10,879 get two days off two days do nothing and 77 00:03:09,440 --> 00:03:14,200 then you'd start again on what would be 78 00:03:10,879 --> 00:03:15,720 a Sunday now this sounds to me like 79 00:03:14,200 --> 00:03:17,760 exactly the sort of calendar system you 80 00:03:15,720 --> 00:03:20,400 would come from a certain orange website 81 00:03:17,760 --> 00:03:22,040 arguing calendar system shouldn't be so 82 00:03:20,400 --> 00:03:24,480 hard I managed to build myself one in 83 00:03:22,040 --> 00:03:26,760 the weekend like it's not so bad 84 00:03:24,480 --> 00:03:28,439 unfortunately this this isn't a loose 85 00:03:26,760 --> 00:03:30,920 hypothetical from Tech comedy in the 86 00:03:28,439 --> 00:03:32,280 early 20th century I found out later 87 00:03:30,920 --> 00:03:34,680 this was known as the cotsworth plan or 88 00:03:32,280 --> 00:03:36,000 the international fixed calendar and was 89 00:03:34,680 --> 00:03:37,760 a serious Contender by the League of 90 00:03:36,000 --> 00:03:39,959 Nations the predecessor to the United 91 00:03:37,760 --> 00:03:41,040 Nations to be selected as the new 92 00:03:39,959 --> 00:03:43,000 calendar 93 00:03:41,040 --> 00:03:44,879 system the calendar would allow for 94 00:03:43,000 --> 00:03:46,720 improved statistical comparisons of 95 00:03:44,879 --> 00:03:47,920 monthly and quarterly data as all months 96 00:03:46,720 --> 00:03:49,319 and all quarters would be in equal 97 00:03:47,920 --> 00:03:50,799 length they'd have a whole number of 98 00:03:49,319 --> 00:03:52,319 weeks they' all have the same number of 99 00:03:50,799 --> 00:03:54,480 weekend the same number of Saturdays 100 00:03:52,319 --> 00:03:56,799 like all your sales stats would line up 101 00:03:54,480 --> 00:03:58,840 really really nicely and events such as 102 00:03:56,799 --> 00:04:00,680 public holidays daylight savings changes 103 00:03:58,840 --> 00:04:02,640 anything whose date FL uctuates to match 104 00:04:00,680 --> 00:04:05,400 a particular weekday could now to be 105 00:04:02,640 --> 00:04:07,519 assigned a fixed easily predictable date 106 00:04:05,400 --> 00:04:10,079 this could have been 107 00:04:07,519 --> 00:04:12,120 revolutionary but the impact of this on 108 00:04:10,079 --> 00:04:14,280 religious life would have been very 109 00:04:12,120 --> 00:04:17,040 significant the blank day finds no 110 00:04:14,280 --> 00:04:19,680 origin that I can find in any religion 111 00:04:17,040 --> 00:04:20,840 or any other previous culture so you 112 00:04:19,680 --> 00:04:22,800 would have to shift you would have to 113 00:04:20,840 --> 00:04:24,680 adapt like the Jewish weekly day of rest 114 00:04:22,800 --> 00:04:26,080 Shabbat and that's why I wasn't here 115 00:04:24,680 --> 00:04:27,759 yesterday it was a day of rest not 116 00:04:26,080 --> 00:04:29,759 coming to a conference but that occurs 117 00:04:27,759 --> 00:04:31,840 every seven days so on the current cism 118 00:04:29,759 --> 00:04:33,400 it's every Saturday on this calendar 119 00:04:31,840 --> 00:04:35,440 system well it would be every Saturday 120 00:04:33,400 --> 00:04:37,520 the first year and then every Friday the 121 00:04:35,440 --> 00:04:39,560 second year and every Thursday the third 122 00:04:37,520 --> 00:04:41,320 year and so on so this would make it 123 00:04:39,560 --> 00:04:43,120 really really difficult for Jews to 124 00:04:41,320 --> 00:04:44,880 maintain observance of Shabbat along 125 00:04:43,120 --> 00:04:46,000 with things like you know employment 126 00:04:44,880 --> 00:04:47,960 kind of 127 00:04:46,000 --> 00:04:50,479 important there's a story I was reading 128 00:04:47,960 --> 00:04:51,919 a number of months ago um when I was 129 00:04:50,479 --> 00:04:54,680 putting together this talk and it really 130 00:04:51,919 --> 00:04:57,280 enlighted perfectly um one day Rabbi 131 00:04:54,680 --> 00:04:59,840 abam kalmanovitz arrived Su in OS in 132 00:04:57,280 --> 00:05:03,280 Poland he had an important matter andand 133 00:04:59,840 --> 00:05:05,080 speak urgently with Rabbi YF hakon cuz 134 00:05:03,280 --> 00:05:06,440 several major major rabbis were opposing 135 00:05:05,080 --> 00:05:07,840 this calendar reform by the League of 136 00:05:06,440 --> 00:05:10,880 Nations they didn't quite know how to 137 00:05:07,840 --> 00:05:13,120 Ward it off Rob's response was actually 138 00:05:10,880 --> 00:05:14,960 simple but genius not to prepare a 139 00:05:13,120 --> 00:05:17,360 submission for the League of Nations or 140 00:05:14,960 --> 00:05:19,199 to debate The Proposal but just request 141 00:05:17,360 --> 00:05:20,960 a postponement for a later date like we 142 00:05:19,199 --> 00:05:22,120 need a bit more time argued you need a 143 00:05:20,960 --> 00:05:24,479 bit more time you need to properly 144 00:05:22,120 --> 00:05:26,240 deliberate it and see what happens after 145 00:05:24,479 --> 00:05:28,800 all if you put in a submission you could 146 00:05:26,240 --> 00:05:30,240 risk an immediate and unwanted verdict 147 00:05:28,800 --> 00:05:32,680 if request for delay you could end up 148 00:05:30,240 --> 00:05:34,880 stalling The Proposal out entirely and 149 00:05:32,680 --> 00:05:36,560 indeed that's what ended up happening 150 00:05:34,880 --> 00:05:39,440 the League of Nations proposal reform 151 00:05:36,560 --> 00:05:41,680 and deliberated from 1923 until 152 00:05:39,440 --> 00:05:43,000 1937 where the outbreak of World War II 153 00:05:41,680 --> 00:05:45,240 triggered the collapse of the League of 154 00:05:43,000 --> 00:05:47,000 Nations and despite all the time and 155 00:05:45,240 --> 00:05:48,960 money ped into this calendar reform it 156 00:05:47,000 --> 00:05:51,080 disappeared along with the 157 00:05:48,960 --> 00:05:52,479 league but League of Nations aren't the 158 00:05:51,080 --> 00:05:53,880 only is the only time people have tried 159 00:05:52,479 --> 00:05:56,560 to come up with different calendar 160 00:05:53,880 --> 00:05:59,000 systems as another example and another 161 00:05:56,560 --> 00:06:00,759 one I know from impacting Jewish life 162 00:05:59,000 --> 00:06:02,600 the USSR I've tried this a couple times 163 00:06:00,759 --> 00:06:05,880 they tried a calendar with a 5-day week 164 00:06:02,600 --> 00:06:07,800 as seen here and a calendar with a well 165 00:06:05,880 --> 00:06:10,599 it's officially a Six-Day week it shows 166 00:06:07,800 --> 00:06:12,639 seven days but the public day of rest so 167 00:06:10,599 --> 00:06:16,120 your weekend is every six days in the 168 00:06:12,639 --> 00:06:18,560 blue square which yeah it's very 169 00:06:16,120 --> 00:06:21,160 weird the point of all this is that time 170 00:06:18,560 --> 00:06:22,720 is incredibly subjective what you think 171 00:06:21,160 --> 00:06:24,960 of time what the League of Nations 172 00:06:22,720 --> 00:06:26,919 thinks of time and what 3,000 years of 173 00:06:24,960 --> 00:06:29,080 Jewish practice thinks of time and what 174 00:06:26,919 --> 00:06:30,800 the Soviets thought of time these can 175 00:06:29,080 --> 00:06:32,319 all compl completely separate things 176 00:06:30,800 --> 00:06:34,520 despite the fact that they all coexist 177 00:06:32,319 --> 00:06:36,360 in the same stream of time with no 178 00:06:34,520 --> 00:06:38,400 alternate or parallel universes that we 179 00:06:36,360 --> 00:06:40,440 know of we're living in the same time 180 00:06:38,400 --> 00:06:41,759 but we experience it differently so 181 00:06:40,440 --> 00:06:43,440 today let's have a look at time from 182 00:06:41,759 --> 00:06:45,400 more than just the usual Western 183 00:06:43,440 --> 00:06:47,160 perspective and let's mute my laptop 184 00:06:45,400 --> 00:06:48,960 while I matter let's try and get a 185 00:06:47,160 --> 00:06:51,759 better understanding of like what time 186 00:06:48,960 --> 00:06:54,080 actually is if we can how we express and 187 00:06:51,759 --> 00:06:55,639 communicate it and how we can use this 188 00:06:54,080 --> 00:06:57,639 knowledge to avoid bugs build more 189 00:06:55,639 --> 00:06:59,160 Reliable Software and build more 190 00:06:57,639 --> 00:07:01,120 accurate computer systems for diverse 191 00:06:59,160 --> 00:07:02,919 audience 192 00:07:01,120 --> 00:07:04,720 a that mute didn't seem to work so if if 193 00:07:02,919 --> 00:07:08,960 you can mute it from your end all 194 00:07:04,720 --> 00:07:10,720 good so let's start with time but really 195 00:07:08,960 --> 00:07:13,039 let's let's start by looking at space 196 00:07:10,720 --> 00:07:14,680 they kind of go together without getting 197 00:07:13,039 --> 00:07:16,080 into weird particle physics we all know 198 00:07:14,680 --> 00:07:18,199 that two things can't really exist in 199 00:07:16,080 --> 00:07:20,919 the same space cu the real world does 200 00:07:18,199 --> 00:07:22,800 run with physics collisions enabled in a 201 00:07:20,919 --> 00:07:24,080 hypothetical one-dimensional World 202 00:07:22,800 --> 00:07:26,080 there'd only be two directions of 203 00:07:24,080 --> 00:07:28,080 movement you can go left or you can go 204 00:07:26,080 --> 00:07:29,319 right uh if you're in that world you 205 00:07:28,080 --> 00:07:30,360 might consider it forwards or backwards 206 00:07:29,319 --> 00:07:32,960 I don't don't know I've never lived in 207 00:07:30,360 --> 00:07:33,960 one but this is severely limiting and it 208 00:07:32,960 --> 00:07:35,560 to be honest it would be the worst game 209 00:07:33,960 --> 00:07:37,960 of snake ever cuz you can't even turn 210 00:07:35,560 --> 00:07:39,120 around like two things just can't share 211 00:07:37,960 --> 00:07:41,759 the same coordinate you've got a number 212 00:07:39,120 --> 00:07:43,599 line six and seven are different 213 00:07:41,759 --> 00:07:45,159 spaces if you look at a a 214 00:07:43,599 --> 00:07:46,319 two-dimensional world we know again you 215 00:07:45,159 --> 00:07:48,039 can only have one thing at each 216 00:07:46,319 --> 00:07:50,280 addressable point you can now move up 217 00:07:48,039 --> 00:07:52,039 down left or right but you can't share 218 00:07:50,280 --> 00:07:54,800 space with something else two things can 219 00:07:52,039 --> 00:07:57,800 share an x coordinate or a y-coordinate 220 00:07:54,800 --> 00:08:00,199 but not both on a screen like or like 221 00:07:57,800 --> 00:08:01,680 this one or that one uh pixel only has 222 00:08:00,199 --> 00:08:04,120 one color you can't have two things 223 00:08:01,680 --> 00:08:06,199 occupying one pixel unless you you can 224 00:08:04,120 --> 00:08:08,159 BL you can blend it but that changes it 225 00:08:06,199 --> 00:08:10,440 into something else it's a third thing 226 00:08:08,159 --> 00:08:12,159 it's not the first two combined and no 227 00:08:10,440 --> 00:08:14,240 I'm not going to get into sub pixels 228 00:08:12,159 --> 00:08:15,919 that's not the point of this in a 229 00:08:14,240 --> 00:08:18,000 three-dimensional world we have the same 230 00:08:15,919 --> 00:08:20,240 problem we have now six directions of 231 00:08:18,000 --> 00:08:22,159 movement but again we can't share the 232 00:08:20,240 --> 00:08:24,039 same physical space with something else 233 00:08:22,159 --> 00:08:26,479 you can share two of your XY and Z 234 00:08:24,039 --> 00:08:29,039 coordinates or Z for the Americans but 235 00:08:26,479 --> 00:08:30,440 not all three if we could then I would 236 00:08:29,039 --> 00:08:32,560 have a problem because gravity would 237 00:08:30,440 --> 00:08:34,440 keep pulling me through this stage and 238 00:08:32,560 --> 00:08:36,440 straight down like the fact that my feet 239 00:08:34,440 --> 00:08:37,839 can't occupy the same space as my shoes 240 00:08:36,440 --> 00:08:39,560 and my shoes can't occupy the same space 241 00:08:37,839 --> 00:08:41,839 as the stage and the stage the floor and 242 00:08:39,560 --> 00:08:43,519 so on is all that is stopping me from 243 00:08:41,839 --> 00:08:45,120 being sucked up and burned by the fiery 244 00:08:43,519 --> 00:08:47,839 core of the planet down below which is 245 00:08:45,120 --> 00:08:49,800 really best not to think about in all 246 00:08:47,839 --> 00:08:51,440 these cases though we have movement 247 00:08:49,800 --> 00:08:54,120 because we have the additional dimension 248 00:08:51,440 --> 00:08:56,200 of time time is often referred to as the 249 00:08:54,120 --> 00:08:58,200 fourth dimension and it's interwoven 250 00:08:56,200 --> 00:09:00,959 with space in both science such as 251 00:08:58,200 --> 00:09:02,920 Einstein's theories about SpaceTime and 252 00:09:00,959 --> 00:09:04,560 in popular culture such as Pokémon 253 00:09:02,920 --> 00:09:06,279 Diamond and Pearl have the legendary 254 00:09:04,560 --> 00:09:08,480 Pokémon of space and 255 00:09:06,279 --> 00:09:09,720 time you can share all your Corners with 256 00:09:08,480 --> 00:09:11,800 something else but as long as it's a 257 00:09:09,720 --> 00:09:14,279 different time we take 258 00:09:11,800 --> 00:09:16,920 turns time is what allows for things to 259 00:09:14,279 --> 00:09:18,200 change the world's in a particular State 260 00:09:16,920 --> 00:09:19,399 then the world's in a different state 261 00:09:18,200 --> 00:09:23,440 and then it's in a different state yet 262 00:09:19,399 --> 00:09:24,120 again as time flows things move grow age 263 00:09:23,440 --> 00:09:26,760 and 264 00:09:24,120 --> 00:09:29,560 Decay but how we perceive all of this is 265 00:09:26,760 --> 00:09:31,480 entirely cultural there is no fundament 266 00:09:29,560 --> 00:09:34,040 rules the universe or fundamental rules 267 00:09:31,480 --> 00:09:35,760 computer science for how to describe 268 00:09:34,040 --> 00:09:37,160 space or time how to describe chunks of 269 00:09:35,760 --> 00:09:38,120 it how to describe the difference 270 00:09:37,160 --> 00:09:40,480 between 271 00:09:38,120 --> 00:09:43,000 them over the centuries space has been 272 00:09:40,480 --> 00:09:45,519 measured in meters feet hand breads 273 00:09:43,000 --> 00:09:47,760 light ears and so on for those who use 274 00:09:45,519 --> 00:09:49,680 meters 1 meter was originally defined as 275 00:09:47,760 --> 00:09:52,480 110 millionth of the distance from the 276 00:09:49,680 --> 00:09:53,839 equator to the North Pole nowadays it's 277 00:09:52,480 --> 00:09:57,839 defined as the distance traveled by 278 00:09:53,839 --> 00:09:59,959 light in a vacuum in 1 299 millionth 729 279 00:09:57,839 --> 00:10:01,519 458 of a second 280 00:09:59,959 --> 00:10:03,920 which again is a certain measurement of 281 00:10:01,519 --> 00:10:05,680 time the two are linked a second was 282 00:10:03,920 --> 00:10:07,040 originally defined relative to a day you 283 00:10:05,680 --> 00:10:09,959 divide they up into pieces and you land 284 00:10:07,040 --> 00:10:13,079 up with a second so it would be 186,000 285 00:10:09,959 --> 00:10:15,640 400th of a day nowadays it's measured as 286 00:10:13,079 --> 00:10:18,120 the base unit uh based on the frequency 287 00:10:15,640 --> 00:10:20,480 of cesium 133 we're going back into 288 00:10:18,120 --> 00:10:22,519 particle physics these evolved from the 289 00:10:20,480 --> 00:10:24,920 previous definitions into the SI system 290 00:10:22,519 --> 00:10:26,440 the International System of Units which 291 00:10:24,920 --> 00:10:28,200 is the general system used to measure 292 00:10:26,440 --> 00:10:29,760 things in most countries all around the 293 00:10:28,200 --> 00:10:32,519 world and officially recog recognized by 294 00:10:29,760 --> 00:10:34,240 their governments although that's how we 295 00:10:32,519 --> 00:10:36,040 officially recognize it on paper with 296 00:10:34,240 --> 00:10:37,600 mathematical formula that's not 297 00:10:36,040 --> 00:10:39,120 necessarily how we perceive of time or 298 00:10:37,600 --> 00:10:41,480 think of it on a regular 299 00:10:39,120 --> 00:10:43,079 basis Humanity in storytelling and in 300 00:10:41,480 --> 00:10:44,880 art regularly dreams of being able to 301 00:10:43,079 --> 00:10:47,240 stop time or travel through time 302 00:10:44,880 --> 00:10:48,560 forwards or backwards or even what could 303 00:10:47,240 --> 00:10:50,680 exist Beyond 304 00:10:48,560 --> 00:10:52,560 time but although we all move through 305 00:10:50,680 --> 00:10:55,000 time at a rate of exactly 1 second per 306 00:10:52,560 --> 00:10:56,920 second no more and no less we usually 307 00:10:55,000 --> 00:10:59,000 use other Expressions to describe a Time 308 00:10:56,920 --> 00:11:01,920 rather than only seconds like this talk 309 00:10:59,000 --> 00:11:03,639 SL is 30 minutes uh it's not 16 half 310 00:11:01,920 --> 00:11:06,639 billion oscillations of cesium we don't 311 00:11:03,639 --> 00:11:08,880 think of it like that it started at 10 2 312 00:11:06,639 --> 00:11:11,519 not at some number of oscillations since 313 00:11:08,880 --> 00:11:12,920 well when exactly we need a common 314 00:11:11,519 --> 00:11:14,160 reference point if we want to make sure 315 00:11:12,920 --> 00:11:16,040 that you and I are talking about the 316 00:11:14,160 --> 00:11:18,639 exact same point in 317 00:11:16,040 --> 00:11:21,880 time so let's talk about 318 00:11:18,639 --> 00:11:23,600 calendars calendars are well they 319 00:11:21,880 --> 00:11:25,720 describe the continuous stream of time 320 00:11:23,600 --> 00:11:28,200 by dividing it into addressable chunks 321 00:11:25,720 --> 00:11:30,320 relative to some common reference point 322 00:11:28,200 --> 00:11:35,360 so we can schedule things like talks 323 00:11:30,320 --> 00:11:36,800 breaks shipments meetings standups oo 324 00:11:35,360 --> 00:11:39,040 and so 325 00:11:36,800 --> 00:11:40,920 on as I mentioned at the start there was 326 00:11:39,040 --> 00:11:43,519 the idea of the international fixed 327 00:11:40,920 --> 00:11:45,040 calendar but that went nowhere the one 328 00:11:43,519 --> 00:11:47,399 that most of you are probably familiar 329 00:11:45,040 --> 00:11:49,600 with would be the Gregorian calendar the 330 00:11:47,399 --> 00:11:51,320 Colonial calendar of Christianity named 331 00:11:49,600 --> 00:11:53,279 after Pope Gregory the 332 00:11:51,320 --> 00:11:55,800 13th this is what you would think of by 333 00:11:53,279 --> 00:11:58,399 default we've got our 12 months 7 days 334 00:11:55,800 --> 00:12:01,480 in a week days start and end at midnight 335 00:11:58,399 --> 00:12:04,320 and so on and and it is full of edge 336 00:12:01,480 --> 00:12:06,320 cases it replaces predecessor the Julian 337 00:12:04,320 --> 00:12:09,000 calendar named after juliia Caesar of 338 00:12:06,320 --> 00:12:10,440 the Roman Empire who established it and 339 00:12:09,000 --> 00:12:12,120 that was a modification of the original 340 00:12:10,440 --> 00:12:15,079 Roman Calendar established by King 341 00:12:12,120 --> 00:12:16,279 Romulus who founded Rome be honest how 342 00:12:15,079 --> 00:12:19,680 often do you think about the Roman 343 00:12:16,279 --> 00:12:21,760 Empire for me it's whenever I look at a 344 00:12:19,680 --> 00:12:23,279 calendar now if I ask many of you here 345 00:12:21,760 --> 00:12:25,120 what's the best way to express a date or 346 00:12:23,279 --> 00:12:27,480 time value you would probably refer me 347 00:12:25,120 --> 00:12:28,839 to ISO 8601 which is the date and time 348 00:12:27,480 --> 00:12:31,000 format specified by the international 349 00:12:28,839 --> 00:12:33,720 standards organization I see a few nods 350 00:12:31,000 --> 00:12:35,480 so definitely some fans here but 351 00:12:33,720 --> 00:12:37,240 unfortunately being an ISO standard you 352 00:12:35,480 --> 00:12:39,120 have to pay quite a bit of money to get 353 00:12:37,240 --> 00:12:40,440 your hands on the actual text 354 00:12:39,120 --> 00:12:42,079 fortunately for me the US Library of 355 00:12:40,440 --> 00:12:44,519 Congress has a what looks like a draft 356 00:12:42,079 --> 00:12:46,920 version up from 2016 uh publicly 357 00:12:44,519 --> 00:12:48,399 available and that quite clearly states 358 00:12:46,920 --> 00:12:49,480 this International standard uses the 359 00:12:48,399 --> 00:12:52,240 Gregorian calendar for the 360 00:12:49,480 --> 00:12:54,160 identification of calendar days so Roman 361 00:12:52,240 --> 00:12:55,680 and Christian colonization have been so 362 00:12:54,160 --> 00:12:57,199 effective that this has become the 363 00:12:55,680 --> 00:12:58,760 global standard if you want to express 364 00:12:57,199 --> 00:13:00,600 dates and times from any other calendar 365 00:12:58,760 --> 00:13:03,000 system you're out on your own the 366 00:13:00,600 --> 00:13:04,519 standards organization doesn't cover you 367 00:13:03,000 --> 00:13:06,480 python does something very similar the 368 00:13:04,519 --> 00:13:07,880 date time type doesn't seem to work well 369 00:13:06,480 --> 00:13:10,920 with other calendar systems and the 370 00:13:07,880 --> 00:13:13,160 documentation says assuming the current 371 00:13:10,920 --> 00:13:16,800 Gregorian calendar always was and always 372 00:13:13,160 --> 00:13:18,639 will be in effect which is hilarious cuz 373 00:13:16,800 --> 00:13:20,079 it probably won't always will be I'm 374 00:13:18,639 --> 00:13:21,920 sure we'll come up with something else 375 00:13:20,079 --> 00:13:25,480 and another set of edge cases to program 376 00:13:21,920 --> 00:13:28,000 for it also definitely wasn't always was 377 00:13:25,480 --> 00:13:29,800 absolutely not also it it explodes if I 378 00:13:28,000 --> 00:13:31,880 try and represent a date not sanctioned 379 00:13:29,800 --> 00:13:34,360 by the pope I've got a 13th month here 380 00:13:31,880 --> 00:13:36,480 and doesn't like that I actually find 381 00:13:34,360 --> 00:13:38,240 this quite funny because before juliia 382 00:13:36,480 --> 00:13:40,199 Caesar the Roman Calendar had extra 383 00:13:38,240 --> 00:13:41,360 inter calorie months so this idea of 384 00:13:40,199 --> 00:13:43,240 there only being 12 months is a 385 00:13:41,360 --> 00:13:46,000 relatively recent 386 00:13:43,240 --> 00:13:47,720 thing but before the Gregorian calendar 387 00:13:46,000 --> 00:13:49,399 we had the Julian calendar and this is 388 00:13:47,720 --> 00:13:51,240 still used today by some sects of 389 00:13:49,399 --> 00:13:53,720 Christianity as well as apparently the 390 00:13:51,240 --> 00:13:56,160 Berber people of Northern Africa but it 391 00:13:53,720 --> 00:13:58,759 was also the calendar used all across 392 00:13:56,160 --> 00:14:00,759 Europe PRI prior to Pope Gregory's 393 00:13:58,759 --> 00:14:02,240 calendar re form so if you're trying to 394 00:14:00,759 --> 00:14:03,839 do anything with dates before the late 395 00:14:02,240 --> 00:14:04,920 16th century you're going to have to do 396 00:14:03,839 --> 00:14:06,399 a whole bunch of adjustments to 397 00:14:04,920 --> 00:14:08,920 translate between the two calendar 398 00:14:06,399 --> 00:14:11,800 systems and since there was no ntp back 399 00:14:08,920 --> 00:14:13,440 then and no widescale coordination the 400 00:14:11,800 --> 00:14:16,600 change over between calendars is also 401 00:14:13,440 --> 00:14:18,560 region specific so good luck and May the 402 00:14:16,600 --> 00:14:20,680 force be with 403 00:14:18,560 --> 00:14:22,199 you the next calendar I would expect 404 00:14:20,680 --> 00:14:24,399 you'd be somewhat familiar with is the 405 00:14:22,199 --> 00:14:27,399 financial 406 00:14:24,399 --> 00:14:30,040 calender I haven't even gotten into it 407 00:14:27,399 --> 00:14:31,959 yet this is almost exactly the same as 408 00:14:30,040 --> 00:14:33,399 the Gregorian calendar except the year 409 00:14:31,959 --> 00:14:35,519 ends with the month of June and starts 410 00:14:33,399 --> 00:14:37,680 with the month of July that's right the 411 00:14:35,519 --> 00:14:40,079 the year increments on the first day of 412 00:14:37,680 --> 00:14:41,959 the seventh month usually this is 413 00:14:40,079 --> 00:14:43,480 distinguished by the FY monik on year 414 00:14:41,959 --> 00:14:46,720 numbers or usually it's actually partial 415 00:14:43,480 --> 00:14:48,440 year numbers we have fy2 FY 26 we are 416 00:14:46,720 --> 00:14:49,240 building up to another Y2K problem at 417 00:14:48,440 --> 00:14:51,240 this 418 00:14:49,240 --> 00:14:52,560 point following this we also then have 419 00:14:51,240 --> 00:14:54,360 the idea of dividing these into quarters 420 00:14:52,560 --> 00:14:56,120 with quarter one q1 being July through 421 00:14:54,360 --> 00:14:58,480 September Q2 being October through 422 00:14:56,120 --> 00:15:00,040 December and so on disclaimer if any 423 00:14:58,480 --> 00:15:02,160 foreigners or people watching the 424 00:15:00,040 --> 00:15:03,800 recording this is Australia other 425 00:15:02,160 --> 00:15:05,279 countries do similar things including I 426 00:15:03,800 --> 00:15:07,519 think somebody I don't remember I was 427 00:15:05,279 --> 00:15:10,560 talking to had February to February 428 00:15:07,519 --> 00:15:12,320 that's why why why be off by one month 429 00:15:10,560 --> 00:15:13,720 but like different countries do 430 00:15:12,320 --> 00:15:15,440 different things different economic 431 00:15:13,720 --> 00:15:17,639 systems by the way there also something 432 00:15:15,440 --> 00:15:19,680 called the iso week numbering year or 433 00:15:17,639 --> 00:15:22,160 the iso year the international fixed 434 00:15:19,680 --> 00:15:24,120 calendar didn't Disappear Completely so 435 00:15:22,160 --> 00:15:25,920 Financial purposes they devised a 436 00:15:24,120 --> 00:15:28,360 calendar which looks almost exactly like 437 00:15:25,920 --> 00:15:31,759 the Gregorian calendar except every year 438 00:15:28,360 --> 00:15:33,959 has 52 or 53 weeks and every week starts 439 00:15:31,759 --> 00:15:35,959 on a Monday and ends on a 440 00:15:33,959 --> 00:15:37,639 Sunday this year is using a number of 441 00:15:35,959 --> 00:15:41,120 libraries if you try and format the year 442 00:15:37,639 --> 00:15:43,519 as y y y y in capitals rather than y y y 443 00:15:41,120 --> 00:15:45,959 y in lowercase I don't believe python 444 00:15:43,519 --> 00:15:47,440 has this I don't believe net has this 445 00:15:45,959 --> 00:15:50,040 I'm pretty sure Java has this and I know 446 00:15:47,440 --> 00:15:51,519 Swift and Objective C have this um so 447 00:15:50,040 --> 00:15:53,199 keep an eye out for this in your code as 448 00:15:51,519 --> 00:15:56,319 it can end up being wrong right around 449 00:15:53,199 --> 00:15:57,440 New Years when everyone's on holiday uh 450 00:15:56,319 --> 00:15:59,880 I also haven't checked see if like 451 00:15:57,440 --> 00:16:01,680 beware interrupt deal with this or not 452 00:15:59,880 --> 00:16:03,759 so just keep an eye out for uppercase 453 00:16:01,680 --> 00:16:05,160 wise also if you're programming you 454 00:16:03,759 --> 00:16:06,759 probably don't want all four wise not 455 00:16:05,160 --> 00:16:09,560 every calendar is up to four digits at 456 00:16:06,759 --> 00:16:11,680 the moment so just one wi it'll fill it 457 00:16:09,560 --> 00:16:13,399 in and then the next calendar that I'm 458 00:16:11,680 --> 00:16:15,880 the most familiar with is the Hebrew 459 00:16:13,399 --> 00:16:18,600 calendar or the Jewish calendar depends 460 00:16:15,880 --> 00:16:20,440 what framework Ork you're talking about 461 00:16:18,600 --> 00:16:22,040 um I don't know if it is a name it's 462 00:16:20,440 --> 00:16:24,480 just Lu which is a Hebrew word for 463 00:16:22,040 --> 00:16:26,319 calendar um and instead of being based 464 00:16:24,480 --> 00:16:27,639 on oscillations of an atom or how long 465 00:16:26,319 --> 00:16:29,759 it takes the Earth to complete a full 466 00:16:27,639 --> 00:16:32,519 orbit of the Sun days are based on 467 00:16:29,759 --> 00:16:35,279 Sunrise or Sunset it's days run from 468 00:16:32,519 --> 00:16:36,600 Sunset to Sunset uh months are based on 469 00:16:35,279 --> 00:16:39,720 the orbit of the moon around the earth 470 00:16:36,600 --> 00:16:41,040 and years are 12 or 13 months so that we 471 00:16:39,720 --> 00:16:42,279 don't get out of work with the seasons 472 00:16:41,040 --> 00:16:43,920 you know your Harvest Festival needs to 473 00:16:42,279 --> 00:16:45,839 be when you're having your 474 00:16:43,920 --> 00:16:47,240 Harvest interestingly the Hebrew 475 00:16:45,839 --> 00:16:48,959 calendar does share a property with 476 00:16:47,240 --> 00:16:50,440 financial Year and that is the last day 477 00:16:48,959 --> 00:16:52,079 of the year is the last day of the sixth 478 00:16:50,440 --> 00:16:54,240 month and the first day of the year is 479 00:16:52,079 --> 00:16:55,639 the first day of the seventh month 480 00:16:54,240 --> 00:16:57,560 annoyingly I've yet to see a single 481 00:16:55,639 --> 00:16:59,440 framework support this both objectiv C 482 00:16:57,560 --> 00:17:01,240 and Swift treat the first day of the 483 00:16:59,440 --> 00:17:03,240 year as also the first day of the first 484 00:17:01,240 --> 00:17:04,280 month and when I complained to Apple 485 00:17:03,240 --> 00:17:06,319 about this they said they can't do 486 00:17:04,280 --> 00:17:07,959 anything they just raply BYU it's up to 487 00:17:06,319 --> 00:17:10,799 International components for Unicode to 488 00:17:07,959 --> 00:17:13,079 do that also in the times of the temple 489 00:17:10,799 --> 00:17:14,480 as pictured here um the new month had to 490 00:17:13,079 --> 00:17:16,240 be declared by the courts when someone 491 00:17:14,480 --> 00:17:18,240 actually saw the new moon so if it was 492 00:17:16,240 --> 00:17:20,720 cloudy and everybody slept in uh all 493 00:17:18,240 --> 00:17:23,400 your computer calculations are 494 00:17:20,720 --> 00:17:25,799 wrong there's also the Chinese calendar 495 00:17:23,400 --> 00:17:27,720 also known as the Luna calendar um which 496 00:17:25,799 --> 00:17:29,360 like the Hebrew calendar is Looney solar 497 00:17:27,720 --> 00:17:30,760 you've got your lunar months and then 498 00:17:29,360 --> 00:17:33,080 you add an extra one so it doesn't get 499 00:17:30,760 --> 00:17:34,160 out of out of whack with a solely year 500 00:17:33,080 --> 00:17:35,919 despite being called the Chinese 501 00:17:34,160 --> 00:17:37,840 calendar modern China mostly use the 502 00:17:35,919 --> 00:17:39,640 Gregorian calendar thanks to 503 00:17:37,840 --> 00:17:41,000 colonization um and it's mostly used for 504 00:17:39,640 --> 00:17:42,400 holidays such as the Chinese New Year 505 00:17:41,000 --> 00:17:44,160 and the Lantern Festival my only 506 00:17:42,400 --> 00:17:45,720 interaction with it is when Chinese 507 00:17:44,160 --> 00:17:47,080 colleagues go on holiday for New Year's 508 00:17:45,720 --> 00:17:49,280 and when Pokémon OverWatch have 509 00:17:47,080 --> 00:17:52,080 promotional 510 00:17:49,280 --> 00:17:53,720 events and lastly I couldn't not mention 511 00:17:52,080 --> 00:17:55,080 the Islamic calendar which is famous 512 00:17:53,720 --> 00:17:57,559 among calendar systems for being 513 00:17:55,080 --> 00:17:59,679 entirely lunar so months follow the moon 514 00:17:57,559 --> 00:18:03,480 a year is 12 months that ends up being 515 00:17:59,679 --> 00:18:05,400 354 355 days and so since that's shorter 516 00:18:03,480 --> 00:18:07,520 than a solar year it's not in sync with 517 00:18:05,400 --> 00:18:08,960 the previous calendar systems at all so 518 00:18:07,520 --> 00:18:11,120 if you track for example the month of 519 00:18:08,960 --> 00:18:14,360 Ramadan when Muslims you may have 520 00:18:11,120 --> 00:18:16,760 co-workers might be you um who fast it 521 00:18:14,360 --> 00:18:18,120 gets earlier and earlier every year if 522 00:18:16,760 --> 00:18:20,039 your primary frame of reference is a 523 00:18:18,120 --> 00:18:21,640 solar calendar that said there is 524 00:18:20,039 --> 00:18:23,360 apparently a solar variant used in Iran 525 00:18:21,640 --> 00:18:26,400 but I don't know how that 526 00:18:23,360 --> 00:18:28,559 works so let's talk about 527 00:18:26,400 --> 00:18:30,840 software now given everything I've said 528 00:18:28,559 --> 00:18:33,559 about being cultural and contextual 529 00:18:30,840 --> 00:18:36,280 there is no one right way to write code 530 00:18:33,559 --> 00:18:37,960 that makes it perfect but I do have some 531 00:18:36,280 --> 00:18:41,200 tips that should hopefully help and the 532 00:18:37,960 --> 00:18:42,760 first one is learn your calendar systems 533 00:18:41,200 --> 00:18:44,280 the entire software industry loves to 534 00:18:42,760 --> 00:18:46,159 write software relating to fields that 535 00:18:44,280 --> 00:18:48,080 were not experts in and then we also 536 00:18:46,159 --> 00:18:49,360 don't consult the experts and then we 537 00:18:48,080 --> 00:18:50,720 wonder why our big multic cloud 538 00:18:49,360 --> 00:18:52,280 hyperscaling whatever doesn't actually 539 00:18:50,720 --> 00:18:54,559 solve the problem that we set out to 540 00:18:52,280 --> 00:18:56,799 solve in the first place learn how your 541 00:18:54,559 --> 00:18:59,200 calendar Works learn about leap days or 542 00:18:56,799 --> 00:19:02,679 leap months learn about time zones 543 00:18:59,200 --> 00:19:04,320 savings leap seconds time drift all the 544 00:19:02,679 --> 00:19:06,200 other ways your program may 545 00:19:04,320 --> 00:19:07,640 break go read one of the many 546 00:19:06,200 --> 00:19:09,600 compilations of falsehoods that 547 00:19:07,640 --> 00:19:12,559 programmers believe about time there are 548 00:19:09,600 --> 00:19:13,960 a lot of them I found they are all good 549 00:19:12,559 --> 00:19:15,240 and I always come away surprised in 550 00:19:13,960 --> 00:19:17,480 learning something new that I didn't 551 00:19:15,240 --> 00:19:18,960 know beforehand whether it's the idea 552 00:19:17,480 --> 00:19:21,520 that some Muslim countries suspend and 553 00:19:18,960 --> 00:19:24,440 resume daylight savings around Ramadan 554 00:19:21,520 --> 00:19:25,799 or in 2013 in the West Bank Israelis and 555 00:19:24,440 --> 00:19:27,360 Palestinians were living in different 556 00:19:25,799 --> 00:19:29,240 time zones because Israel and the PA had 557 00:19:27,360 --> 00:19:31,360 different start and end dates you could 558 00:19:29,240 --> 00:19:33,039 be neighbors and be an hour apart there 559 00:19:31,360 --> 00:19:34,720 is always something funky and 560 00:19:33,039 --> 00:19:36,679 interesting to learn about 561 00:19:34,720 --> 00:19:38,320 time if you're just throwing dates 562 00:19:36,679 --> 00:19:40,280 around without understanding what they 563 00:19:38,320 --> 00:19:41,799 mean and how they work then let me draw 564 00:19:40,280 --> 00:19:44,039 your attention to this classic quote 565 00:19:41,799 --> 00:19:46,320 from Charles Babbage on two occasions 566 00:19:44,039 --> 00:19:48,360 I've been asked pray Mr babage if you 567 00:19:46,320 --> 00:19:51,679 put into the machine wrong figures will 568 00:19:48,360 --> 00:19:53,200 the right answers come out I'm not able 569 00:19:51,679 --> 00:19:55,080 rightly to apprehend the kind of 570 00:19:53,200 --> 00:19:57,360 confusion of ideas that could provoke 571 00:19:55,080 --> 00:19:59,280 such a question to be honest I thought 572 00:19:57,360 --> 00:20:01,039 we had long understood theide of garbage 573 00:19:59,280 --> 00:20:02,520 in garbage out until these guys came 574 00:20:01,039 --> 00:20:04,080 along and they wanted garbage in 575 00:20:02,520 --> 00:20:06,159 business 576 00:20:04,080 --> 00:20:08,000 out but once you've learned how your 577 00:20:06,159 --> 00:20:09,640 calendar system works you might then be 578 00:20:08,000 --> 00:20:11,960 tempted to run off and write all the 579 00:20:09,640 --> 00:20:14,320 necessary arithmetic and logic yourself 580 00:20:11,960 --> 00:20:17,000 like cryptography please 581 00:20:14,320 --> 00:20:18,880 don't take your new found knowledge and 582 00:20:17,000 --> 00:20:20,799 use it to build test cases and make sure 583 00:20:18,880 --> 00:20:23,679 your software Works in as many ways and 584 00:20:20,799 --> 00:20:25,039 as many scenarios as possible but lean 585 00:20:23,679 --> 00:20:26,440 upon the standard libraries when you 586 00:20:25,039 --> 00:20:28,480 have them to do the calculations 587 00:20:26,440 --> 00:20:29,799 correctly I don't believe python has all 588 00:20:28,480 --> 00:20:32,520 the calendar built in there are some 589 00:20:29,799 --> 00:20:34,960 packages other Frameworks like net and 590 00:20:32,520 --> 00:20:37,360 Swift Objective C do have a lot of stuff 591 00:20:34,960 --> 00:20:39,520 built in let me share with a let me 592 00:20:37,360 --> 00:20:40,919 share with you a story of what happens 593 00:20:39,520 --> 00:20:45,120 if you 594 00:20:40,919 --> 00:20:47,080 don't on February 28th 2012 at 5:45 p.m. 595 00:20:45,120 --> 00:20:49,200 Pacific Time Microsoft became aware of 596 00:20:47,080 --> 00:20:50,720 an issue impacting Windows Azure service 597 00:20:49,200 --> 00:20:53,520 Management in a number of regions by the 598 00:20:50,720 --> 00:20:56,280 way this predates naming of Microsoft 599 00:20:53,520 --> 00:20:58,760 Azure can anybody think maybe what might 600 00:20:56,280 --> 00:21:00,360 have gone wrong here does does that date 601 00:20:58,760 --> 00:21:02,679 mean anything to 602 00:21:00,360 --> 00:21:04,120 you uh what might have happened in other 603 00:21:02,679 --> 00:21:06,440 time 604 00:21:04,120 --> 00:21:07,679 zones here's here's their post Mor blog 605 00:21:06,440 --> 00:21:09,240 post they're talking about the 606 00:21:07,679 --> 00:21:12,240 connection between the hypervisor and 607 00:21:09,240 --> 00:21:13,520 the guest VM there's a transfer TLS 608 00:21:12,240 --> 00:21:15,159 certificate that goes between them it 609 00:21:13,520 --> 00:21:17,320 says when the ga creates the transfer 610 00:21:15,159 --> 00:21:19,799 certificate gives it a one-ear validity 611 00:21:17,320 --> 00:21:22,159 range it uses midnight us of the current 612 00:21:19,799 --> 00:21:24,799 day as availed from date and one year 613 00:21:22,159 --> 00:21:26,640 from that date as the valid two date the 614 00:21:24,799 --> 00:21:28,159 leap day bug is that the ga calculated 615 00:21:26,640 --> 00:21:31,240 the valid two date simply by taking the 616 00:21:28,159 --> 00:21:34,320 current date and adding one to its year 617 00:21:31,240 --> 00:21:37,520 you got February 29 2013 which does not 618 00:21:34,320 --> 00:21:39,200 exist and caused it all to fail so 619 00:21:37,520 --> 00:21:41,080 basically what they should have done was 620 00:21:39,200 --> 00:21:43,039 called the ad years function assuming 621 00:21:41,080 --> 00:21:44,960 it's net cuz Microsoft are all net all 622 00:21:43,039 --> 00:21:47,080 the way down uh called add years 623 00:21:44,960 --> 00:21:48,960 function to add one year instead most 624 00:21:47,080 --> 00:21:51,640 likely they deconstructed the date in 625 00:21:48,960 --> 00:21:53,679 invalid manner now you can argue if like 626 00:21:51,640 --> 00:21:55,799 one year after 28th of February should 627 00:21:53,679 --> 00:21:57,440 be one year after 29th of February 628 00:21:55,799 --> 00:21:59,240 should be the 28th of February or if it 629 00:21:57,440 --> 00:22:00,559 should be the 1st of March 630 00:21:59,240 --> 00:22:02,200 uh I would hope that this's a solv 631 00:22:00,559 --> 00:22:04,320 problem particularly when you have like 632 00:22:02,200 --> 00:22:05,640 inter calorie months because your whole 633 00:22:04,320 --> 00:22:08,880 month doesn't exist you can't just shift 634 00:22:05,640 --> 00:22:10,559 one day but either way um if you call AD 635 00:22:08,880 --> 00:22:11,720 years it might be off by day but it 636 00:22:10,559 --> 00:22:13,120 doesn't crash and definitely doesn't 637 00:22:11,720 --> 00:22:15,640 bring down the entire management plane 638 00:22:13,120 --> 00:22:17,320 of a global Cloud compute platform so 639 00:22:15,640 --> 00:22:19,360 use your libraries they are there to 640 00:22:17,320 --> 00:22:21,840 help unless they're wrong in which case 641 00:22:19,360 --> 00:22:23,240 File bugs to help everyone and learn 642 00:22:21,840 --> 00:22:24,640 them and learn what they do like learn 643 00:22:23,240 --> 00:22:29,840 the difference between upper KY and the 644 00:22:24,640 --> 00:22:31,960 lower KY read the documentation really 645 00:22:29,840 --> 00:22:34,640 thirdly make sure that when you have 646 00:22:31,960 --> 00:22:35,840 computer systems plural um talking time 647 00:22:34,640 --> 00:22:37,320 that they speak the same language 648 00:22:35,840 --> 00:22:38,919 computers represent time in a few 649 00:22:37,320 --> 00:22:40,600 different ways you have to make sure 650 00:22:38,919 --> 00:22:43,080 that when two computers talk they mean 651 00:22:40,600 --> 00:22:44,480 the same thing for example Unix machines 652 00:22:43,080 --> 00:22:47,320 famously count the number of seconds 653 00:22:44,480 --> 00:22:49,279 since 1st of January 1970 Apple machines 654 00:22:47,320 --> 00:22:52,480 internally have an Epoch 31 years later 655 00:22:49,279 --> 00:22:53,880 on the 1st of January 2001 I know uh 656 00:22:52,480 --> 00:22:55,159 Steam and some valve software have 657 00:22:53,880 --> 00:22:56,960 internal data structures where they have 658 00:22:55,159 --> 00:22:59,039 an internal Epoch of the 1st of January 659 00:22:56,960 --> 00:23:00,520 2005 in Seattle 660 00:22:59,039 --> 00:23:01,919 so that's specific Standard time that's 661 00:23:00,520 --> 00:23:04,279 not even 662 00:23:01,919 --> 00:23:06,919 UTC and uh if you watch Tom Eastman's 663 00:23:04,279 --> 00:23:10,200 talk on U IDs in devoops on Friday the 664 00:23:06,919 --> 00:23:12,600 uid V1 spec has a time stamp in 100 nond 665 00:23:10,200 --> 00:23:14,559 intervals from Midnight on the 15th of 666 00:23:12,600 --> 00:23:16,000 October 1582 which is the date of 667 00:23:14,559 --> 00:23:20,960 Gregorian reform to the Christian 668 00:23:16,000 --> 00:23:20,960 calendar in France remember it wasn't 669 00:23:21,039 --> 00:23:25,679 Global this also raise an additional 670 00:23:23,120 --> 00:23:28,000 Point here each interval is 100 Nan some 671 00:23:25,679 --> 00:23:29,279 systems will use seconds some will use 672 00:23:28,000 --> 00:23:30,400 millisec seconds I've definely had that 673 00:23:29,279 --> 00:23:32,480 bug before the time looks wrong you 674 00:23:30,400 --> 00:23:34,120 divide by th now it looks right so just 675 00:23:32,480 --> 00:23:35,600 make sure that both ends are speaking 676 00:23:34,120 --> 00:23:38,440 the same 677 00:23:35,600 --> 00:23:40,360 language and save all the data you need 678 00:23:38,440 --> 00:23:42,159 if you're saving date and time data to a 679 00:23:40,360 --> 00:23:44,600 database uh make sure you have 680 00:23:42,159 --> 00:23:47,159 everything time itself is not enough 681 00:23:44,600 --> 00:23:49,200 time and UTC offset is sometimes not 682 00:23:47,159 --> 00:23:51,480 enough as well you may need a time zone 683 00:23:49,200 --> 00:23:53,640 if you have it so like Melbourne or New 684 00:23:51,480 --> 00:23:55,000 York so that you can add dates subtract 685 00:23:53,640 --> 00:23:56,840 dates figure out daylight savings 686 00:23:55,000 --> 00:23:58,279 changes and if you are dealing with 687 00:23:56,840 --> 00:24:00,840 multiple calendars make sure you keep 688 00:23:58,279 --> 00:24:02,360 that them as well and on that note and 689 00:24:00,840 --> 00:24:04,360 there's a personal plea but pleasa 690 00:24:02,360 --> 00:24:06,440 support multiple calendars in personal 691 00:24:04,360 --> 00:24:07,679 applications they should be able user 692 00:24:06,440 --> 00:24:09,960 should be able to use a calendar that 693 00:24:07,679 --> 00:24:11,279 they know best for Relevant events so 694 00:24:09,960 --> 00:24:13,880 particular particularly for apps like 695 00:24:11,279 --> 00:24:15,679 calendars Diaries even a to-do list a 696 00:24:13,880 --> 00:24:18,200 date that has meaning in one calendar 697 00:24:15,679 --> 00:24:19,279 system could be meaningless converted 698 00:24:18,200 --> 00:24:20,480 into another if I look at a date and 699 00:24:19,279 --> 00:24:21,840 it's mid-February I don't know what that 700 00:24:20,480 --> 00:24:24,360 means if it says Chinese New Year I have 701 00:24:21,840 --> 00:24:26,440 some idea Apple do this pretty well in 702 00:24:24,360 --> 00:24:27,840 the phone contacts app you can log 703 00:24:26,440 --> 00:24:30,080 someone's birthday in the Gregorian 704 00:24:27,840 --> 00:24:31,279 calendar in another calendar system so 705 00:24:30,080 --> 00:24:32,760 you can celebrate their birthday with 706 00:24:31,279 --> 00:24:34,600 them culturally in the right calendar 707 00:24:32,760 --> 00:24:36,159 where they observe their birthday 708 00:24:34,600 --> 00:24:38,080 unfortunately you can't select all three 709 00:24:36,159 --> 00:24:40,799 Calenders so any Arabic Jews in China 710 00:24:38,080 --> 00:24:42,200 are completely out of luck they also 711 00:24:40,799 --> 00:24:44,159 don't support this for other events like 712 00:24:42,200 --> 00:24:46,039 wedding anniversaries or calendar events 713 00:24:44,159 --> 00:24:48,799 like holidays which annoys 714 00:24:46,039 --> 00:24:50,240 me and on Apple watch which doesn't 715 00:24:48,799 --> 00:24:52,520 actually have enough room to display the 716 00:24:50,240 --> 00:24:54,120 entire Hebrew date here uh Apple just 717 00:24:52,520 --> 00:24:55,840 translate the current Gregorian date to 718 00:24:54,120 --> 00:24:57,120 the matching Hebrew date they forgot 719 00:24:55,840 --> 00:24:59,080 what I said earlier about the Days 720 00:24:57,120 --> 00:25:01,159 running from Sunset to Sun on set rather 721 00:24:59,080 --> 00:25:03,000 midnight to midnight so my watch is 722 00:25:01,159 --> 00:25:04,919 wrong for about 4 to 8 hours every 723 00:25:03,000 --> 00:25:07,559 single day depending on the time of year 724 00:25:04,919 --> 00:25:09,000 and my geographic location and in theory 725 00:25:07,559 --> 00:25:10,559 this shouldn't be hard to get right 726 00:25:09,000 --> 00:25:13,399 there's already a watch complication 727 00:25:10,559 --> 00:25:15,480 with sunrise and sunset times so the OS 728 00:25:13,399 --> 00:25:17,200 knows what it's doing it just doesn't 729 00:25:15,480 --> 00:25:18,480 piece together everything this comes 730 00:25:17,200 --> 00:25:20,360 back to my first point if you're writing 731 00:25:18,480 --> 00:25:21,799 code to do something make sure you know 732 00:25:20,360 --> 00:25:23,679 what that thing is so you have a decent 733 00:25:21,799 --> 00:25:27,880 chance of getting it 734 00:25:23,679 --> 00:25:29,480 right now back in 2013 2014 I was 735 00:25:27,880 --> 00:25:31,919 working on iPhone app that never went 736 00:25:29,480 --> 00:25:34,120 anywhere and also in 2014 I took a trip 737 00:25:31,919 --> 00:25:35,960 to Seattle for the Dota 2 International 738 00:25:34,120 --> 00:25:38,640 championships and while I was there I 739 00:25:35,960 --> 00:25:41,440 was trying tdd I ran I wasn't competing 740 00:25:38,640 --> 00:25:43,159 by the way I was just spectating but I I 741 00:25:41,440 --> 00:25:44,480 I ran all my unit tests and and two 742 00:25:43,159 --> 00:25:46,399 suddenly failed and I had a look and I 743 00:25:44,480 --> 00:25:48,200 had a logic bug that only worked in 744 00:25:46,399 --> 00:25:49,799 positive UTC offset so my code worked 745 00:25:48,200 --> 00:25:52,360 anywhere east of Greenwich failed 746 00:25:49,799 --> 00:25:54,000 anywhere west of Greenwich for overseas 747 00:25:52,360 --> 00:25:55,240 companies as well can be really handy to 748 00:25:54,000 --> 00:25:57,320 have staff on the East Coast of 749 00:25:55,240 --> 00:25:59,320 Australia with UTC plus 10 or 11 so if 750 00:25:57,320 --> 00:26:00,640 you hit a bug at midnight UTC we're 751 00:25:59,320 --> 00:26:02,799 awake we're ready to go you're not 752 00:26:00,640 --> 00:26:04,240 rolling stuff out of bed on call they're 753 00:26:02,799 --> 00:26:06,440 half asleep grabbing coffee trying to 754 00:26:04,240 --> 00:26:07,760 figure out what's wrong on the computer 755 00:26:06,440 --> 00:26:09,120 also if you have staff in other parts of 756 00:26:07,760 --> 00:26:11,200 the world that don't take holidays 757 00:26:09,120 --> 00:26:13,120 around the Goran New Years and you get a 758 00:26:11,200 --> 00:26:15,720 bug like an ISO week week year bug or 759 00:26:13,120 --> 00:26:17,279 something like that um you have to get 760 00:26:15,720 --> 00:26:19,360 someone in to fix that they might be on 761 00:26:17,279 --> 00:26:20,720 holidays if you live somewhere without 762 00:26:19,360 --> 00:26:22,760 daylight savings there are bugs you may 763 00:26:20,720 --> 00:26:24,360 never find so if you can put your 764 00:26:22,760 --> 00:26:26,640 software through more diverse scenarios 765 00:26:24,360 --> 00:26:28,399 earlier you find bugs earlier you fix 766 00:26:26,640 --> 00:26:31,360 them earlier hopefully your software's a 767 00:26:28,399 --> 00:26:33,159 a bit more stable and lastly be aware of 768 00:26:31,360 --> 00:26:36,679 significant edge cases in how computers 769 00:26:33,159 --> 00:26:38,640 represent time the 238 bug where the 770 00:26:36,679 --> 00:26:41,399 number of seconds since 1970 no longer 771 00:26:38,640 --> 00:26:43,080 fits into a s 32-bit integer is still 772 00:26:41,399 --> 00:26:45,440 coming upon us and from what I read a 773 00:26:43,080 --> 00:26:47,080 while ago it's mitigation with 64-bit 774 00:26:45,440 --> 00:26:49,279 time in Fedora had a pretty disastrous 775 00:26:47,080 --> 00:26:51,480 roll out and had to be rolled back so be 776 00:26:49,279 --> 00:26:54,200 prepared for that or do what i' do book 777 00:26:51,480 --> 00:26:56,240 some leave in advance for 2038 so that's 778 00:26:54,200 --> 00:26:57,919 not your problem and if you're wondering 779 00:26:56,240 --> 00:26:59,840 what the second one is um that's the 780 00:26:57,919 --> 00:27:02,240 small datetime column limit in Microsoft 781 00:26:59,840 --> 00:27:04,320 SQL Server when I put that leave in we 782 00:27:02,240 --> 00:27:06,720 had an unhandled exception somewhere so 783 00:27:04,320 --> 00:27:10,280 if I'm still around and working by then 784 00:27:06,720 --> 00:27:17,679 uh I'll see you two days later thank 785 00:27:10,280 --> 00:27:20,320 [Applause] 786 00:27:17,679 --> 00:27:22,399 you thank you Yakov I think we've got a 787 00:27:20,320 --> 00:27:25,039 couple of minutes for questions if 788 00:27:22,399 --> 00:27:27,880 anyone's gotten 789 00:27:25,039 --> 00:27:30,159 in no we are all in some kind of weird 790 00:27:27,880 --> 00:27:32,960 time yes 791 00:27:30,159 --> 00:27:35,880 would give a mic 792 00:27:32,960 --> 00:27:38,120 please thank you yob so you've mentioned 793 00:27:35,880 --> 00:27:39,960 interoperability and because of the web 794 00:27:38,120 --> 00:27:42,480 any language that you you write you have 795 00:27:39,960 --> 00:27:43,919 to interoperate with JavaScript what are 796 00:27:42,480 --> 00:27:45,960 your recommendations in terms of 797 00:27:43,919 --> 00:27:47,919 libraries of practices for python 798 00:27:45,960 --> 00:27:49,640 JavaScript making sure that you're doing 799 00:27:47,919 --> 00:27:52,039 the same I haven't worked a huge amount 800 00:27:49,640 --> 00:27:54,640 with JavaScript I mean my initial 801 00:27:52,039 --> 00:27:58,399 reaction is please don't um but it's 802 00:27:54,640 --> 00:27:58,399 something I'd have to look into 803 00:27:59,519 --> 00:28:02,600 uh indeed any other 804 00:28:02,799 --> 00:28:09,200 questions all righty thanks everyone uh 805 00:28:05,640 --> 00:28:09,200 10-minute break