Skip to main content

over 2 years ago Syntax Podcast

Where Does Time Come From?

Wes Bos

Wes Bos Host

Scott Tolinski

Scott Tolinski Host

Topic 0 03:30

Scott's story of time being off by a year between client and server.

Scott Tolinski

The server side

Scott Tolinski

And Well, you know, that's really all we have to say about time. This has just been a little bit of time pontification Your server lives in a location. You live in a location.

Scott Tolinski

where she'll say, Tom, can you tell your story whenever they're in a group setting? Like, in just JS, like, a prank because he doesn't have a story prepared. Like, what what stuff. What kind of story do you want me to tell? So he just says, Scott, can you tell your story? I I got that same vibe. But my story was

Scott Tolinski

the situation

Scott Tolinski

or or restarted? This is actually very funny. And a small aside, it says in the show notes, Scott, tell your story.

Scott Tolinski

I I cannot explain it if if, you know, this was unsolved mysteries. You could queue up some spooky music. It's the spookiest thing that's ever happened to me on my computer, and, like, working with daytime is spooky enough already. So, honestly, who knows? I I have no no answer to what happened there, but it it was a knock. So bizarre.

Scott Tolinski

my mind.

Wes Bos

had something in the browser where you were getting a date from 2022,

Wes Bos

like a 2 year old time stamp. And then what happened? You rebooted your computer Almost tripping out being like, where does time come from? You know? I was tripping out too. Yeah. Yeah. Your browser knows the time, but, like, where's your browser get it? Your browser gets it from your computer. Where's your computer time? Well, maybe there's, like, a chip on the motherboard. Okay. Well or or maybe it gets it from we'll talk about where time comes from in a second. But I was just like, Woah. Woah. Like, time is just this thing we made up,

Scott Tolinski

I was loading up a date server side and client side. It was in an SSR component.

Scott Tolinski

What this is the same function being run on the client and the server, And the date is off by a day a year.

Wes Bos

Like you

Scott Tolinski

What is time. And how do we deal with time? We're not gonna be talking about space time here or anything like that, but more or less time in the browser. This kind of tripped me out when you're you posted about, date API.

Scott Tolinski

was returning in the server. It's my own internal process. The server side was returning a date That was Node day off and 1 year off. And my

Scott Tolinski

the, the one they they just got married. The Node, she does this thing to her husband Man, little batteries like that, they do all sorts of weird stuff. Did you you you know, like, here, which is attached to no time zone. So we we also have,

Scott Tolinski

I was doing some date stuff, and new date on anything, the very first thing a It definitely may not be the very first thing, but what it does to your date is it it always goes to the time zone in which the system is running on.

Topic 1 22:11

Temporal API provides better date time APIs than JavaScript Date.

Wes Bos

The says 27 time zones,

Scott Tolinski

Another thing that everybody hates about the JavaScript

Scott Tolinski

for a full archive of all of our shows. Jump. And don't forget to subscribe in your podcast player

Wes Bos

to San Francisco, but, like, it never changed back.

Wes Bos

so you gotta watch those things. Yep.

Scott Tolinski

have to worry about

Wes Bos

if I tell you my birthday is February 18

Wes Bos

People that work on those types of things,

Scott Tolinski

Okay. And then a plain time.

Wes Bos

those booking or the once when we flew to San Francisco, my Google Calendar changed

Scott Tolinski

very, very tricky. You wanna know you wanna hear a a further and this is more of a conceptual problem with date, but also a a problem nonetheless. I was working on, at one point, a booking app. It was a startup I worked at. It was a booking app, and it was kind of like, what if Instagram had booking? Right? You could look at tattoos

Scott Tolinski

website.

Scott Tolinski

You know, specifically, I would love to get some of these for our spooky stories, But we're a long ways off from October.

Scott Tolinski

You're gonna have to confuse the heck out of the user trying to make them select the time zone and stuff like that. Yeah. Do not envy It will overflow And for some some stupid reason, makes a whole lot of sense

Scott Tolinski

date time all the way. So there's a a plain year month, a plain month day, a plain date, What do you know about ISO

Scott Tolinski

more sane. Wes you don't necessarily

Wes Bos

The CSS, 2nd February 18.

Scott Tolinski

Which is a giant pain mutating the date. So this is gonna give us immutable methods on the date APIs.

Scott Tolinski

If you if you want to avoid any of that hassle, the temporal API will luckily be there to help us. It'll give us better parsing.

Scott Tolinski

And one of the questions we had that we never got Good answer for it because the company folded before we got the answer to this problem

Scott Tolinski

to Michigan, which we'll talk about,

Scott Tolinski

And then, oh, here, I wanna book with this person because I've seen their portfolio. Right? 1970. Now what's interesting here is I didn't know about this being an issue in computer science. We got a bit of a y two k situation going on here. They call it the 2038 Problem, and it's not something that you have to worry about so that Adobe's checks would check, you know, they they wouldn't check to see. So that was the strategy that I heard you could do Wes to change the Yarn in which your computer was set out to install the software. This, be warp, if you pass it into a new date function, it does take time zones into account. For instance,

Scott Tolinski

But also makes working with just dates, Jump. You know, it's the difference between something happening at Node second versus the very next second.

Scott Tolinski

So, honestly, I just wanna hear what kind of situations people have hit with time or the just the date API in general in JavaScript.

Scott Tolinski

and what kind of solutions did you find, or are you still looking for correct solutions? you know, this is something I think I think people did, you know, like, 10 years ago or so, but it was an interesting strategy. That Wes

Scott Tolinski

hey. When I save a date to the database, I don't necessarily always want it to be Attached to a particular time zone. Yeah. So what do you do? You then gotta take the step to turn everything to UTC.

Scott Tolinski

make working with time zones old school Nintendo games, Did you know that games that were able to, like, persist save files because they didn't have storage on them, that was done via a little battery within the game cartridge.

Scott Tolinski

Wes if if if I am traveling

Scott Tolinski

and I want to book an appointment in Denver for noon Denver time.

Wes Bos

Plain date Node is going to be super handy. So for an example,

Scott Tolinski

And then every time you access it, You gotta make sure you access it with the UTC methods,

Scott Tolinski

What types of things are you looking forward to in the temporal API? Hit us up at syntax f m on any of the socials date API is the fact that anytime you do anything, it mutates about time.

Scott Tolinski

Plain date,

Scott Tolinski

you know, Kron, the calendar, has done a really nice job kind of solving this where they'll put the columns. Since I work with a bunch of eastern time folks, I have, the date,

Scott Tolinski

What kind of major hiccups have you hit, Where we are, essentially. Think about it this way.

Wes Bos

That's

Wes Bos

So people kept booking me at, like, like, 6:30 at night for talks. And I'm just like, Hey. Like, I'm I'm I'm not here. I'm like, oh, sorry. Your your calendar said you were in San Francisco, 2 things. It adds time zone

Scott Tolinski

And we would love to read out some time stuff. Might be cool to do a follow-up in a potluck later on. Duty. Alright. Thanks for tuning in. Catch you later.

Scott Tolinski

our 27

Scott Tolinski

minutes here, and that's okay. I wanna know what kind of crazy bugs you've hit with time.

Scott Tolinski

What's the default? What do you show them by default? Yeah. You show them the Denver time by default, or do you show them the eastern time? Do you show them both times? And, or I'm gonna say this. If you know anybody who's starting a podcast, you Node, you know, you hear the word podcast,

Topic 2 17:03

ISO 8601 standardizes date time formats.

Wes Bos

and they don't have daylight savings time.

Wes Bos

Apparently,

Scott Tolinski

colon hour hour colon m m colon s s, and then you can do some time zone stuff in there too. So Yeah. You can you can add, like by default, z is UTC,

Wes Bos

Tokyo

Scott Tolinski

2024 I'm just running a new date.

Scott Tolinski

The way in which is like a standardized way to to format a date. It's,

Wes Bos

names.

Scott Tolinski

the JavaScript not including a time zone,

Wes Bos

When I launch a course, I message my entire slack room and it does a little, hey,

Wes Bos

38 time zones in the world because some of them are off 35:30

Wes Bos

heads up. You're messaging

Scott Tolinski

You know, Arizona had no daylight savings time.

Scott Tolinski

into my console this morning, and it output February 29, the Time. Where does time come from? When you say new date in your browser, output a date somehow on, Stuff. It's a it's a whole lot of stuff. And, What should I store it as? Makes a lot of sense to store it as ISO 8601,

Wes Bos

Randy, our producer, is nodding away another Canadian podcast. Good.

Scott Tolinski

I ran, new date, is it does

Scott Tolinski

Let's see. Colorado

Wes Bos

there's and

Wes Bos

or and many It's a Canadian podcast, so

Scott Tolinski

because that's easy to work with and, just about everything understands it. Right. You can pass it into And one of the big things that it does

Wes Bos

I don't know what the name JS. The RFC math of, oh, they're 1 hour off of us for half the year and they're 2 hours off

Scott Tolinski

that is part of the joy of working in this stuff. If you wanna just say, hey. Give me a date, and then now turn it into a JavaScript date, You've gotta understand or drop a review if you like this show.

Scott Tolinski

That crazy. I did not I did not know that that existed.

Wes Bos

The offset of UTC. Right? The offset. That's obnoxious. Plus 5 is is eastern. But this might be a bit of an issue for you in, what, 14 years from Node, But if you're saving time in databases,

Scott Tolinski

which is kinda wild. Yeah. And daylight savings time is, you know, something that is changing.

Scott Tolinski

for whatever reason, a 32 bit integer.

Scott Tolinski

How exactly client, the browser, was returning the correct date. And I said A whole year. Okay. I'm I'm going to lose

Scott Tolinski

year year year is great. That's a lot of fun because all this stuff is so much fun when you're working JavaScript. Time zones are the most painful thing to work with in programming. You know what? When I say give me a date, I just want a date. I don't necessarily want And that can be really nice because when you're dealing with JavaScript dates, in the world could be going on? I restarted my computer,

Wes Bos

Does that mean anything to us? ISO 8061 is my favorite standard of all time.

Scott Tolinski

and you're trying to decide, hey. I wanna store this date as a drink.

Scott Tolinski

So so, six zero Node? but a instant does include a time zone. Right? A or a zoned date time does include a time zone as well.

Scott Tolinski

is moving to no daylight savings time. I don't know if everybody is or what, but, For Standardization.

Wes Bos

No. I'm I'm not sure. Like, that's a that's a standard for It's another proposal

Scott Tolinski

So that is a concern anytime you're passing in these numbers. Right? Because the ISO

Scott Tolinski

hyphen month month hyphen day day

Scott Tolinski

Okay? The ISO. That's what the ISO is.

Wes Bos

a new standard, which is the Node $1,000,000, 10000 And and how that crappy episode. How that gets

Wes Bos

to 45 minutes.

Wes Bos

and that's because there's 27. There's so somewhere in Canada, I think it's like St. John's or something Wes they're half an hour off.

Wes Bos

is being used as well, This whole wall of lava lamps,

Scott Tolinski

time all the time. I don't always want a time zone. I just want the same date we're all talking about. We're all talking about the same date here. Yep. It's March 1, 1986. That's my birthday. We're all talking about that same date. I don't care

Scott Tolinski

That sounds like no fun. But, like, if you ever see like, let's say

Wes Bos

Yeah. It's about to get funky. Do you know how many time zones there are in the world, Scott? the other half year. So now you'll be able to do just square bracket Converted Asia

Wes Bos

50,000 people in, That. Yeah. Because if you crack open,

Scott Tolinski

2024.

Wes Bos

for these time stamps. But it adds

Scott Tolinski

86 o one. And if you just pass in a date without a time zone, it assumes UTC

Scott Tolinski

And it's basically And so that's one of the ways at least makes working with this stuff a little bit more sane because one of the things that I've struggled with is,

Wes Bos

24? No. Actually so

Scott Tolinski

date API.

Wes Bos

and then you can instead of just putting z on the end, you can do plus or minus. Like, plus Yes. 5 would be eastern.

Wes Bos

So right now we just have plus

Topic 3 05:54

Atomic clocks keep most accurate time. Network time protocol syncs time across internet.

Wes Bos

They they correspond to how random things are. So, like, that's more random

Wes Bos

atomic clock. And Wow. If you look at it, it's a bunch of, like, gears

Wes Bos

like, a 40

Wes Bos

At the very lowest level, there are things called atomic clocks,

Scott Tolinski

than a computer chip. Yeah. And I'm gonna link up to they have a blog post Blending that, and it's one of the coolest things. It's it's one of the when I learned that they did that, I was just like,

Wes Bos

for their SSL certificates,

Wes Bos

and

Wes Bos

And apparently that's the most accurate way You know, Cloudflare needs randomness

Wes Bos

trading of your computers. That's why Wes have became

Scott Tolinski

hell, yeah. That's awesome.

Wes Bos

So atomic clocks. Now we have network time. So Ten other different servers out there, and then that gets dispersed to a different number of them. And basically you can ping any of these

Wes Bos

So you told me that story, and I just started, like,

Wes Bos

right in their data center. And if you look it up, they're pretty crazy. And Jeff Bezos

Wes Bos

and they have a camera on them. And based on where the blobs are in these lava lamps, let's talk about that.

Wes Bos

who keeps track of time?

Wes Bos

randomness built into computer chips is

Wes Bos

somewhat random, but it can be figured out how random something will be. So they have these, like, lava lamps, And,

Wes Bos

randomness.

Wes Bos

I'm not sure how that works. That's the same thing with

Wes Bos

that spin, And it's so bizarre because my wife's family lives in Saskatchewan, and you have to, like, do the mental 33339.

Wes Bos

to keep track of time. Like, if you were to say, like, hey, how could you keep track of time as accurate as possible? I would not tell you, let's get 80 gears and just put them together,

Wes Bos

many the current time, there's these things called or there's a protocol, NTP, network time protocol,

Wes Bos

year just Node, But then you try to display that

Wes Bos

to actual, like, digital time.

Scott Tolinski

You know? That it's connected to space itself. That's gonna trip you up it even more. Yeah. So, 1970.

Wes Bos

places will have atomic clocks of a computer, there's a little CR Wes 32 battery, and

Topic 4 00:31

Where time comes from. Time in browser vs time on computer.

Scott Tolinski

But because of that, it meant having to say goodbye You're choosing to more sane,

Wes Bos

yeah. Honestly, if you're looking to start a podcast, check out Chris Lemon productions dotca. Appreciate all your work. Thank you, Chris. Yeah. Yeah. Again

Scott Tolinski

just throw Chris's website around lemon productions.ca.

Scott Tolinski

So with that said within JavaScript.

Scott Tolinski

and and give him an opportunity here to insert something if he would like.

Scott Tolinski

what are some things about temporal time zones, that sort of stuff. This is gonna be a little bit of a conversation So that code is the same code. It's running client side. It's running server Node. So that very clearly eliminates

Wes Bos

I'm just gonna start referring to this as a Canadian podcast. Is that okay, Scott? I have Canadian blood. It's fine. Yeah. My my grandparents came from Montreal, so

Scott Tolinski

to deal with time. Time passes, or even just reach out to us in our potluck form on the syntax.fm that is a bug waiting to happen. Right? Yeah. So, like,

Scott Tolinski

so that he can say hi to you, everyone.

Guest 2

Onto the very capable hands of Randy. It's been a lot of fun to be welcomed by the syntax community and by all of you great developer nerds even though most of my web dev knowledge died alongside front page 98. Scott said, if you've got questions about starting or editing a podcast, hit me up at lemonproductions.ca

Scott Tolinski

We have brought editing in house. In fact, we have a a new producer, Sanity

Wes Bos

very happy about that.

Guest 2

on the web, I, Chris on Twitter, or at Lemon Podcasting on YouTube. As usual, I'll be sure to put all the links in the show notes. Enjoy the rest of the show. Definitely check out, Chris, his Lemon Productions dotca. Of course. I was actually really happy. Chris is a Canadian

Scott Tolinski

Let me just take a quick moment to give It's Scott hit the time servers to keep going. Yeah. Well, let's talk about epoch time really quick. Pnpm epoch time is the number of seconds that have elapsed since January 1st really important

Scott Tolinski

We're gonna be talking about

Scott Tolinski

And what are some of the pitfalls of working with time, what are some formats,

Scott Tolinski

Time. Time. Time passes. We we get a a,

Scott Tolinski

for so long.

Scott Tolinski

new editor for the podcast, and we talk about we get new JavaScript APIs What the time zone is in Denver for that date. But yeah. Well, you know what is interesting here is something we've talked about quite a bit on this show is the temporal API. And we often say that the temporal API fixes So this this is just an interesting little tidbit.

Wes Bos

new editor. Sanity, also Canadian.

Scott Tolinski

He's he's Just a a fantastic guy and has done a great job for us. So thank you, Chris, and we are going to miss you here on Syntax.

Scott Tolinski

team wherein might I have the time stamp in my code incorrectly.

Scott Tolinski

you know, you may have heard us say Chris cut that out or anything like that. And he he he's just been an incredible

Scott Tolinski

Rector, who will bring on to the show at some point here,

Scott Tolinski

to our longtime editor, Chris. And, delivering this podcast

Topic 5 08:23

Cloudflare uses lava lamps for randomness needed for SSL certificates.

Wes Bos

and it's a protocol that where, basically, there are For a number of servers out there, there's different levels of them. There's like 1 level, which is the atomic clock, and then the time gets dispersed to and servers.

Scott Tolinski

One of the things that are Wes it shows the date typically, kind of like code row numbers in your code text editor. And so it'll show me 2 PM, 4 PM, 3 PM, 5 PM. So I can always see which one is which, and I can tell which one is my default one. It's nice. But in a like a booking situation where you're just trying to list, Here's the available appointments. It's 8 o'clock or whatever.

Scott Tolinski

Wes lives in the location. If I do new Scott date from where I am and my server does new dot date and West does new dot date, chances are those are all going to be a new date function. However,

Scott Tolinski

People who've done it, though. I've heard. And I also heard that, when when that had been done, sometimes you needed to change the date

Wes Bos

stuff. It it was dead, dead, dead. The time sometimes the time is off. I didn't check this one, but it's happened in the past.

Scott Tolinski

you know, what exactly the time zone differences is and how we can calculate that difference and how that matters based on There's a podcast I listen to that's like a, an Australian couple. It's just 2 comedians.

Wes Bos

The Network Time Updates. Right.

Wes Bos

That was the case.

Wes Bos

despite the fact that we're all talking about the exact same time here. And and it gets even worse with serverless or edge compute Wes it's rendering

Wes Bos

but you may be expecting it to run on a specific time. And I even had a weird issue

Wes Bos

But why why is time important, Scott? Wes

Wes Bos

Stuff. That is you don't know that there's a fuse in it or, b, a little coin cell battery that has died that you don't know exists either. Wes is the kind of guy you wanna get that info from. He's always fixing

Scott Tolinski

in development is understanding

Scott Tolinski

on your computer,

Scott Tolinski

it might not be relevant. You may have already fixed this problem. Not relevant. Right? the 1 on the server side, not the client side, Wes.

Wes Bos

There's a battery in it, but if you don't drive it for a while, the battery goes dead and it boots up again and the time is wrong. And then after a second, it connects to the Wi Fi time on your motherboard People that have server infrastructure, And Hey, you crack it open. JS there any asking? There's a little battery in it. And often if you buy something, they're only the ones that saved. If you buy, like, an old computer or, like, I Follow this TikTok account where this guy bought a video vending machine that wouldn't boot up, and it was just a little coin cell battery February 17 or February 94. Yeah. Right? And You might not. And those are the kind of bugs that you don't necessarily catch because it works on my machine, you know, especially once you're in browser land.

Wes Bos

very commonplace because you do that Node. You change I'm not sure what the Toronto time zone stamp is, but there's a whole list of

Wes Bos

Something with the time got goofed up

Wes Bos

that are connected to the Internet, if you need to get our editor, Chris, will tell you He lives in Saskatchewan,

Wes Bos

a head unit in our car and every now and pnpm, Jeff. In my mind, that's where it gets most of it. What else? Your device time. If you're not connected to the Internet, that's another thing I was trippy. Like, where does that come from? The little battery

Wes Bos

all of my stats were, like, 3 hours off,

Scott Tolinski

Nope. In your days. I haven't either. Okay.

Wes Bos

that keeps

Wes Bos

and I'm pretty sure it was because The actual box I was running on was moved Standards in there. And then you can also specify which calendar

Wes Bos

before SSL certificates on the motherboard.

Wes Bos

The date on your computer or, like, I booted up an old MacBook yesterday, and I hadn't booted it on for probably 2 years,

Scott Tolinski

from one location to another. One interesting thing to to to note here about time, I don't know if you've ever pirated Stuff. That

Scott Tolinski

SSL certificates,

Wes Bos

for most devices in a different time Node. It will tell you my birthday is on

Scott Tolinski

time it is currently.

Wes Bos

on your computer. Node in the day, I guess they still have this. But if you open up a motherboard

Scott Tolinski

And, you know, even then, you need to know, like, where your users Yarn, time zones.

Wes Bos

NTP protocols, and it will always return to you

Wes Bos

I don't know if this is still the case, but the Game Bos games back in the day or was it the NES games?

Scott Tolinski

they require the correct time. Mhmm. Logging and saving data. If you have A log or errors and exceptions. Right? Use century dot I o. That tells you when something happened. When something happened is very important if you're trying to fix it. If it happened last week or last year, it has 2 columns on my calendar which calendar for 14 years from now.

Scott Tolinski

Adobe software hour 0301 But before we get into that, this is episode number 720.

Scott Tolinski

different answers

Wes Bos

A lot of electronics going awry is either a, a 10 set fuse.

Scott Tolinski

back in

Wes Bos

it's pinging one of those. There might be something with the WiFi router where it gets it from that. I'm not totally sure, but

Scott Tolinski

So time is extremely important in programming in general to be able to fix the things that are broken or to understand what's going on when and where.

Wes Bos

while your computer is disconnected or not. So so every now and then, that battery will die, or you have to replace it. You have to reset the actual time on your motherboard, which is wild. Yeah. That is wild.

Wes Bos

somewhere close to you, And you want to put that on your calendar. I might give you a UTC date stamp of Yes.

Wes Bos

a couple of years ago back when I used to just have a digital ocean box.

Wes Bos

the correct time that is based off of one of those atomic clocks. So that's how most

Scott Tolinski

But also, like, and that's that's where we're at today.

Topic 6 14:45

Epoch time counts seconds since January 1, 1970. 2038 problem when 32-bit epoch times overflow.

Scott Tolinski

to convert it to the epoch time, Peace. Head on over to syntax.fm specifying what time is. Right? Yes. And it's issued by the International Organization

Wes Bos

It's crazy. So

Wes Bos

Get time. Yeah, it works fine. So the browsers have been updated for this Y2K bug.

Scott Tolinski

a new date in JavaScript is not a value. Right? day after day for everybody and doing just such an amazing job. You know, this podcast wouldn't be the same without out Chris, and it wouldn't have gotten here without Chris. So I I wanna give a just a a sincere thank you to Chris And all of his his hard work, For that, has it? Let's see. JavaScript numbers, including those representing epoch time, are stored as 16 bit

Scott Tolinski

The epoch time was represented as

Scott Tolinski

And if your epoch, time storing was a 32 bit integer.

Scott Tolinski

eight

Wes Bos

2038.

Scott Tolinski

So get ready. Something to put in your, Now epoch time is a really useful way to store time because it's just a number. It's an integer.

Scott Tolinski

you know, if you're wanting to save a date to a database and have it be accessed somewhere else later, a really, really sincere thank you to Chris Enns for doing such a an amazing job Jeff. Editing our podcast What what exactly you're asking for. Because when you do does it fix the JavaScript

Scott Tolinski

Jeff. Causing your epoch times to all break. And since then, many systems what the heck's that doing?

Scott Tolinski

have become 64 bit integers to define epoch time. That is a, a little bit of a a y two k problem that I've never heard about before until recently.

Wes Bos

Hey, 2Doo. Although, like, the older I get, the faster time goes. So I think it's gonna come up on us real quick. The older I get, the faster time goes for sure. Absolutely. That's the thing.

Wes Bos

JavaScript has been updated

Scott Tolinski

which, again, the number of seconds elapsed since January 1st who knows what.

Scott Tolinski

In some points,

Wes Bos

Floating point numbers. This allows yes. So JavaScript is fine. I'm gonna try it right now. So const date is equal to new date, January 22nd and that will but, like, I guess that's how clocks work, but that would not be my first guess.

Scott Tolinski

on January 19, 2038, And it fixed.

Topic 7 00:00

Transcript

Announcer

Tolinski.

Announcer

Boss, and Scott, El Toro Loco,

Scott Tolinski

Welcome to Syntax on this Monday Sanity treat.

Announcer

Monday. Monday. Monday. Open wide dev fans. Get ready to stuff your face with JavaScript, CSS, node modules, barbecue tips, Git workflows, breakdancing,

Announcer

soft skill, web development, the hastiest, the craziest, the tastiest web development treats. Coming in hot. Here is Wes, Barracuda,

Share

Empowering developers for over 286197013895 milliseconds!