A podcast about web design and development.
…
continue reading
محتوای ارائه شده توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. تمام محتوای پادکست شامل قسمتها، گرافیکها و توضیحات پادکست مستقیماً توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones یا شریک پلتفرم پادکست آنها آپلود و ارائه میشوند. اگر فکر میکنید شخصی بدون اجازه شما از اثر دارای حق نسخهبرداری شما استفاده میکند، میتوانید روندی که در اینجا شرح داده شده است را دنبال کنید.https://fa.player.fm/legal
Player FM - برنامه پادکست
با برنامه Player FM !
با برنامه Player FM !
Ep 016: When 8 - 1 = 6
Manage episode 227440536 series 2463849
محتوای ارائه شده توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. تمام محتوای پادکست شامل قسمتها، گرافیکها و توضیحات پادکست مستقیماً توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones یا شریک پلتفرم پادکست آنها آپلود و ارائه میشوند. اگر فکر میکنید شخصی بدون اجازه شما از اثر دارای حق نسخهبرداری شما استفاده میکند، میتوانید روندی که در اینجا شرح داده شده است را دنبال کنید.https://fa.player.fm/legal
Christoph discovers that time creates its own alternate universe.
- Continuing our exploration of "literate" time logs
- We want a function to turn the timestamps into minutes.
- Format:
Fri Feb 08 2019 11:30-13:45
- Keep it simple: extract times with a regex and use math
- minutes in day = hours * 60 + minutes
- total minutes = end minutes - starting minutes
- Problem: What happens when we work past midnight? Negative minutes!
- We decided to have only one date, so a time before the starting time must span midnight.
- Format only allows for an activity to be <24 hours.
- "If we end up doing any activity in our life longer than 24 hours, I think we should that we might have other problems."
- Easy Solution: If the end time is before start time, add 24 hours.
- "When I get past any sort of simpler math, I just type it into my connected editor REPL because I know Clojure can do it faster than I can."
- Now we have a function to get minutes, want to add them all up.
- Use
loop
andrecur
to iterate through the array and track the sum. - Oh wait, what about Daylight Savings Time?
- "We all pretend that time is actually in the future."
- If it involves dates and times, we can't just do simple math.
- "If I do this the right way, I now have to open a whole new can of worms."
- Easy way out: write "doesn't support DST" in the release notes and call it "user error"!
- "Any time you have to be careful about something, you're probably doing it wrong."
- Use a time API.
- "The Clojure library is just a wrapper because nobody wants to reinvent this thing."
- Java time is immutable, so that works nicely with functional languages. No
clone
ing! - Lots of functions in the time API. Which ones do we need?
- Our workflow: try out different expressions in a comment block in our connected editor to figure out the specific time functions we need.
- "Local" dates and times don't have time zones, but "zoned" dates and times do have them.
- Need to create timestamps for accurate math: date + time + zone
- In practice, when we use dates and times, they are implicitly connected to a time zone.
- Your time zone is your alternate universe: it affects the meaning of your dates and times.
- We added support for DST without changing the function signature.
- But, how do we add up other totals? Looks like we're going to need to change even more.
Related episodes:
Clojure in this episode:
nil
re-matches
loop
,recur
Related projects:
Code sample from this episode:
(ns app.time (:require [clojure.java.io :as io] [java-time :as jt])) (def timestamp-re #"(\w+\s\w+\s\d+\s\d+)\s+(\d{2}:\d{2})-(\d{2}:\d{2})") (defn localize [dt tm] (jt/zoned-date-time dt tm (jt/zone-id "America/Los_Angeles"))) (defn parse-time [time-str] (jt/local-time "HH:mm" time-str)) (defn parse-date [date-str] (jt/local-date "EEE MMM dd yyyy" date-str)) (defn parse-for-minutes [line] (if-let [[whole dt start end] (re-matches timestamp-re line)] (let [date (parse-date dt) start (localize date (parse-time start)) end (localize date (parse-time end))] (if (jt/before? start end) (jt/time-between start end :minutes) (jt/time-between start (jt/plus end (jt/days 1)) :minutes))) 0)) (defn total-time [filename] (with-open [rdr (io/reader filename)] (loop [total 0 lines (line-seq rdr)] (if lines (recur (+ total (or (some-> (first lines) parse-for-minutes) 0)) (next lines)) total))))
118 قسمت
Manage episode 227440536 series 2463849
محتوای ارائه شده توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. تمام محتوای پادکست شامل قسمتها، گرافیکها و توضیحات پادکست مستقیماً توسط Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones یا شریک پلتفرم پادکست آنها آپلود و ارائه میشوند. اگر فکر میکنید شخصی بدون اجازه شما از اثر دارای حق نسخهبرداری شما استفاده میکند، میتوانید روندی که در اینجا شرح داده شده است را دنبال کنید.https://fa.player.fm/legal
Christoph discovers that time creates its own alternate universe.
- Continuing our exploration of "literate" time logs
- We want a function to turn the timestamps into minutes.
- Format:
Fri Feb 08 2019 11:30-13:45
- Keep it simple: extract times with a regex and use math
- minutes in day = hours * 60 + minutes
- total minutes = end minutes - starting minutes
- Problem: What happens when we work past midnight? Negative minutes!
- We decided to have only one date, so a time before the starting time must span midnight.
- Format only allows for an activity to be <24 hours.
- "If we end up doing any activity in our life longer than 24 hours, I think we should that we might have other problems."
- Easy Solution: If the end time is before start time, add 24 hours.
- "When I get past any sort of simpler math, I just type it into my connected editor REPL because I know Clojure can do it faster than I can."
- Now we have a function to get minutes, want to add them all up.
- Use
loop
andrecur
to iterate through the array and track the sum. - Oh wait, what about Daylight Savings Time?
- "We all pretend that time is actually in the future."
- If it involves dates and times, we can't just do simple math.
- "If I do this the right way, I now have to open a whole new can of worms."
- Easy way out: write "doesn't support DST" in the release notes and call it "user error"!
- "Any time you have to be careful about something, you're probably doing it wrong."
- Use a time API.
- "The Clojure library is just a wrapper because nobody wants to reinvent this thing."
- Java time is immutable, so that works nicely with functional languages. No
clone
ing! - Lots of functions in the time API. Which ones do we need?
- Our workflow: try out different expressions in a comment block in our connected editor to figure out the specific time functions we need.
- "Local" dates and times don't have time zones, but "zoned" dates and times do have them.
- Need to create timestamps for accurate math: date + time + zone
- In practice, when we use dates and times, they are implicitly connected to a time zone.
- Your time zone is your alternate universe: it affects the meaning of your dates and times.
- We added support for DST without changing the function signature.
- But, how do we add up other totals? Looks like we're going to need to change even more.
Related episodes:
Clojure in this episode:
nil
re-matches
loop
,recur
Related projects:
Code sample from this episode:
(ns app.time (:require [clojure.java.io :as io] [java-time :as jt])) (def timestamp-re #"(\w+\s\w+\s\d+\s\d+)\s+(\d{2}:\d{2})-(\d{2}:\d{2})") (defn localize [dt tm] (jt/zoned-date-time dt tm (jt/zone-id "America/Los_Angeles"))) (defn parse-time [time-str] (jt/local-time "HH:mm" time-str)) (defn parse-date [date-str] (jt/local-date "EEE MMM dd yyyy" date-str)) (defn parse-for-minutes [line] (if-let [[whole dt start end] (re-matches timestamp-re line)] (let [date (parse-date dt) start (localize date (parse-time start)) end (localize date (parse-time end))] (if (jt/before? start end) (jt/time-between start end :minutes) (jt/time-between start (jt/plus end (jt/days 1)) :minutes))) 0)) (defn total-time [filename] (with-open [rdr (io/reader filename)] (loop [total 0 lines (line-seq rdr)] (if lines (recur (+ total (or (some-> (first lines) parse-for-minutes) 0)) (next lines)) total))))
118 قسمت
Alle Folgen
×به Player FM خوش آمدید!
Player FM در سراسر وب را برای یافتن پادکست های با کیفیت اسکن می کند تا همین الان لذت ببرید. این بهترین برنامه ی پادکست است که در اندروید، آیفون و وب کار می کند. ثبت نام کنید تا اشتراک های شما در بین دستگاه های مختلف همگام سازی شود.