[{"data":1,"prerenderedAt":267},["ShallowReactive",2],{"project-41654723":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":41,"post_text":43,"what":44,"said":73,"maker_in_thread":143,"shape":153,"grid":157,"attempts":231,"same_week":232,"maker_shows":32,"maker_hidden":259,"reader_version":260,"card":261},"41654723","Cronexpr","A Rust library to parse and iter crontab expression","title","Show HN: Cronexpr, a Rust library to parse and iter crontab expression","https:\u002F\u002Fdocs.rs\u002Fcronexpr\u002Flatest\u002Fcronexpr\u002F","docs.rs","tison",1727327446,2024,160,32,522,3515,15,"notable","languages","rust library","library",[24,25,26,27],"crontab parser","cron expression","rust cron","cron scheduling","curious",-0.158,{"positive":31,"neutral":32,"mixed":33,"critical":34},1,6,0,3,10,{"docs":37,"idea":38,"design":39},{"positive":31,"critical":33},{"positive":33,"critical":31},{"positive":33,"critical":40},2,[42,33,34,33,31,33,34,33,34,31,33,33,34,33,31,33,33,34,33,34,33,33,33,33,33,33,33,33,33,33,33,33],5,null,{"problem":45,"audience":43,"pricing":43,"motivation":55,"time_to_build":43,"stack":61,"openness":71,"stage":72,"team_size":72},{"value":46,"source":47,"evidence":48},"Parsing and iterating crontab expressions with consistent timezone handling","maker",[49,52],{"id":50,"by":11,"text":51},"41655866","If you mean timezone, I wrote an FAQ [1]: \"Why does the crate require the timezone to be specified in the crontab expression?\" [1]…",{"id":53,"by":11,"text":54},"41655776","Could you elaborate a bit on the issue? I'm not sure you are commenting on cronexpr or other libraries. In cronexpr, there is no requirement for a timestamp until you'd like to…",{"value":56,"source":47,"evidence":57},"Existing cron libraries lacked timezone-in-expression support and used chrono; maker wanted to extend jiff ecosystem",[58],{"id":59,"by":11,"text":60},"41666886","Croner has a table for the syntax supported by it and saffron [1], you can compare it with the one cronexpr supported. [1]…",[62,67],{"value":63,"source":47,"evidence":64},"Rust",[65],{"id":66},"post",{"value":68,"source":47,"evidence":69},"jiff datetime library",[70],{"id":59,"by":11,"text":60},"open_source","unknown",{"praise":74,"objections":87,"requests":102,"questions":117,"alternatives":125},[75,83],{"value":76,"source":77,"evidence":78},"Well-documented syntax and non-standard features","commenter",[79],{"id":80,"by":81,"text":82},"41655020","cuu508","Looks well done. I like how the docs describe every syntax feature, and every non-standard feature in detail. Hat tip to implementing Vixie's \"*,10\" quirk, and to handling DST.",{"value":84,"source":77,"evidence":85},"Implements Vixie cron quirk and handles DST",[86],{"id":80,"by":81,"text":82},[88,95],{"value":89,"source":77,"evidence":90},"Requiring timezone inside the expression is unusual; should be a separate parameter",[91],{"id":92,"by":93,"text":94},"41662201","Denvercoder9","Requiring a timezone seems sensible to me, but I don't understand the choice to make it a required part of the expression, instead of a separate parameter. Most software…",{"value":96,"source":77,"evidence":97},"Restrictions such as no comment support seem arbitrary",[98],{"id":99,"by":100,"text":101},"41655948","aaomidi","So many of these restrictions feels arbitrary. Not supporting comments? Why? Assuming UTC for tz is not weird and cron users expect it, I guess why even support this specific…",[103,110],{"value":104,"source":77,"evidence":105},"Optional timezone with fallback to system timezone",[106],{"id":107,"by":108,"text":109},"41656842","qwertox","Is `timezone` optional? I like it that it has the ability for one to provide it, but not providing it could just use the one the system has been configured to use.",{"value":111,"source":77,"evidence":112},"Hashed value support for staggering jobs",[113],{"id":114,"by":115,"text":116},"41657134","epage","After working with Jenkins which has \"hashed value\" support for automatic staggering of jobs, I think its essential in any cron syntax evaluater.",[118],{"value":119,"source":77,"evidence":120},"How does it compare to Cloudflare's saffron?",[121],{"id":122,"by":123,"text":124},"41657785","vlovich123","Is there a comparison to other cron parsing libraries like Saffron? https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fsaffron",[126,133,137],{"value":127,"source":77,"evidence":128},"Cloudflare saffron",[129],{"id":130,"by":131,"text":132},"41657787","the_duke","There is also a cron parser library from Cloudflare which is used for their cron jobs: https:\u002F\u002Fgithub.com\u002Fcloudflare\u002Fsaffron",{"value":134,"source":77,"evidence":135},"croner",[136],{"id":59,"by":11,"text":60},{"value":138,"source":77,"evidence":139},"APScheduler",[140],{"id":141,"by":108,"text":142},"41656725","If you're into Python, APScheduler is the way to go. It also has a cron scheduler [0] which includes scheduling down to seconds and perfectly integrates with asyncio [1]. ```…",{"comments":144,"answered":40,"key":145},7,[146,149,150],{"id":147,"text":148},"41655758","You're welcome! As described in the \"Why do you create this crate?\" section, I actually started this domain only a few weeks ago. So I experienced how those tribal rules can be…",{"id":59,"text":60},{"id":151,"text":152},"41666903","I knew it. Please see also the comment at https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=41666886 ... and this PR [1][2] [1] https:\u002F\u002Fgithub.com\u002Ftisonkun\u002Fcronexpr\u002Fpull\u002F12 [2]…",{"commenters":154,"max_depth":42,"maker_replies":144,"first_comment_mins":155,"lifespan_hours":156},20,54,25,[158,160,162,164,165,167,169,171,173,175,179,182,183,187,188,189,192,194,195,197,198,203,206,209,211,212,215,218,221,224,226,228],[80,33,42,159,81,33],"project\u002Fpositive\u002Fdocs",[147,33,33,161,11,31],"maker\u002Fneutral\u002Fnone",[122,33,34,163,123,33],"project\u002Fneutral\u002Fnone",[59,33,33,163,11,31],[130,31,31,166,131,33],"project\u002Fcritical\u002Fidea",[151,31,33,168,11,31],"commenter\u002Fneutral\u002Fnone",[114,40,34,170,115,33],"project\u002Fneutral\u002Fidea",[172,40,33,168,11,31],"41657179",[174,40,34,170,115,33],"41658577",[176,34,31,177,178,33],"41655596","project\u002Fcritical\u002Fdesign","Black616Angel",[180,34,33,168,181,33],"41655759","assiniboine",[53,34,33,168,11,31],[184,34,34,185,186,33],"41655821","project\u002Fneutral\u002Fdesign","tricked",[50,34,33,185,11,31],[99,34,31,177,100,33],[190,34,33,168,191,33],"41661726","burntsushi",[193,34,33,168,100,33],"41661983",[107,34,34,185,108,33],[196,34,33,185,11,31],"41656872",[92,34,34,185,93,33],[199,200,33,201,202,33],"41659221",4,"other\u002Fneutral\u002Fnone","1oooqooq",[204,200,33,201,205,33],"41660616","proaralyst",[207,200,33,201,208,33],"41664438","encoderer",[210,200,33,168,202,33],"41665527",[141,42,33,201,108,33],[213,42,33,201,214,33],"41663031","franga2000",[216,32,33,201,217,33],"41656228","faangguyindia",[219,32,33,201,220,33],"41656610","Jleagle",[222,32,33,201,223,33],"41656679","simonw",[225,32,33,201,208,33],"41664461",[227,32,33,168,223,33],"41664777",[229,32,33,201,230,33],"41665378","krupan",[],[233,238,243,247,251,255],{"id":234,"name":235,"points":236,"category":237},"41710227","Tavus",455,"ai",{"id":239,"name":240,"points":241,"category":242},"41701644","qrframe",401,"dev_tools",{"id":244,"name":245,"points":246,"category":242},"41711032","Sourcebot",259,{"id":248,"name":249,"points":250,"category":242},"41695756","CrystalClear Audio",223,{"id":252,"name":253,"points":254,"category":242},"41683144","htmgo",166,{"id":256,"name":257,"points":258,"category":242},"41699955","Facad",147,false,"v2",{"id":262,"name":5,"line":6,"ai":259,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":263,"top":18,"kw":264,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":265,"url":9,"mix":266,"praise":76,"objection":89,"sub":21},41654723,-0.16,[24,25,26,27],"50301030310030100303000000000000",[31,32,33,34],1794036661755]