[{"data":1,"prerenderedAt":431},["ShallowReactive",2],{"project-17471938":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":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":46,"post_text":48,"what":49,"said":96,"maker_in_thread":195,"shape":203,"grid":208,"attempts":392,"same_week":393,"maker_shows":34,"maker_hidden":423,"reader_version":424,"card":425},"17471938","TaskBotJS","TypeScript and JavaScript background job processing","title","Show HN: TaskBotJS – TypeScript and JavaScript background job processing","https:\u002F\u002Fgithub.com\u002Feropple\u002Ftaskbotjs\u002F","github.com","eropple",1530889202,2018,137,76,304,2155,15,"notable","infrastructure","background job processing","library",[24,25,26,27,28],"background jobs","job queue","node.js","typescript","redis","mixed",-0.158,{"positive":32,"neutral":33,"mixed":34,"critical":35},4,10,1,8,23,{"docs":38,"idea":41,"pricing":43,"execution":44,"design":45},{"positive":39,"critical":40},0,3,{"positive":39,"critical":42},2,{"positive":39,"critical":40},{"positive":39,"critical":39},{"positive":34,"critical":39},[39,47,40,34,39,39,40,40,34,34,39,39,34,40,39,40,40,39,39,39,40,39,39,34,34,39,39,39,39,39,39,39,47,47,34,39,39,39,40,47],5,null,{"problem":50,"audience":48,"pricing":60,"motivation":69,"time_to_build":48,"stack":76,"openness":93,"stage":94,"team_size":95},{"value":51,"source":52,"evidence":53},"Running background jobs in Node is frustrating with Kue and Bull","maker",[54,57],{"id":55,"by":11,"text":56},"17472030","Whee! My first Show HN. I've only been here, like, seven years and all. But, yeah, I've been tooling away on TaskBotJS in my metaphorical garage for a while. I've found Kue and…",{"id":58,"by":11,"text":59},"17473511","If I had to choose between Kue and Bull, I'd choose Bull. But I found it frustrating to work with. - I want to support multiple backends. Bull is a Redis queue. Which is fine, as…",{"value":61,"source":52,"evidence":62},"LGPL core with paid pro\u002Fenterprise feature tier",[63,66],{"id":64,"by":11,"text":65},"17472262","Celery requires the system administrator to ensure that there's only a single scheduler in the cluster at a time; the documentation specifically calls that out. This additional…",{"id":67,"by":11,"text":68},"17472988","Sorry, maybe I was unclear. I don't want to have to support it in the open-source version (\"I tried to run it on three DigitalOcean droplets and I didn't read the instructions…",{"value":70,"source":52,"evidence":71},"Node lacked a Sidekiq-like job system with better guardrails",[72,73],{"id":55,"by":11,"text":56},{"id":74,"by":11,"text":75},"17472189","I like Mike a lot and I think Sidekiq is awesome--not having it in Node was largely why I wrote TaskBotJS. And I evaluated Faktory before writing it, because hey, this has been a…",[77,83,89],{"value":78,"source":52,"evidence":79},"TypeScript",[80],{"id":81,"by":11,"text":82},"17472481","Thanks for the kind words. =) And, good question! I...probably use `oao` wrong, to be honest, or at least not as fully as it could be; my main use of it is to power a…",{"value":84,"source":52,"evidence":85},"Redis",[86],{"id":87,"by":11,"text":88},"17472596","Hey, great question! SQLite is great for locally-stored databases with relatively light relational requirements, but I chose Redis as a first go-around in part because it's kind…",{"value":90,"source":52,"evidence":91},"React",[92],{"id":81,"by":11,"text":82},"open_source","launched","solo",{"praise":97,"objections":110,"requests":132,"questions":144,"alternatives":170},[98,106],{"value":99,"source":100,"evidence":101},"Good logo and clean design","commenter",[102],{"id":103,"by":104,"text":105},"17472226","waibelp","Great logo!",{"value":107,"source":52,"evidence":108},"Thorough documentation approach",[109],{"id":55,"by":11,"text":56},[111,118,125],{"value":112,"source":100,"evidence":113},"Docs lack a hello world and mix JS and TS examples",[114],{"id":115,"by":116,"text":117},"17476935","sequoia","After a few minutes I gave up on evaluating this tool. It looks interesting but there's no \"hello world\" or even a simple use-case explanation in the first few pages of docs.…",{"value":119,"source":100,"evidence":120},"Open-core pricing with recurring jobs gated",[121],{"id":122,"by":123,"text":124},"17472191","anothergoogler","Not a fan of this sort of \"open core\" offering, and it's heavy on the marketing. Recurring jobs are an \"Enterprise\" feature? Hard pass. That's a core feature of Celery and…",{"value":126,"source":100,"evidence":127},"Calling itself the best is overhyped",[128],{"id":129,"by":130,"text":131},"17472094","vanwalj","How can \"The best TypeScript and JavaScript background job processing on the planet\" only have 8 stars on GH ? :o",[133,137],{"value":134,"source":100,"evidence":135},"Add a JavaScript example job",[136],{"id":115,"by":116,"text":117},{"value":138,"source":100,"evidence":139},"Add a Docker setup running TaskBotJS itself",[140],{"id":141,"by":142,"text":143},"17472384","bdcravens","I love seeing projects with a docker-compose.yml, so I can check it out quickly. However, yours only spins up redis - wouldn't it make sense to spin up TaskBotJS in a separate…",[145,156,163],{"value":146,"source":100,"evidence":147},"Why use this over RabbitMQ or Celery",[148,152],{"id":149,"by":150,"text":151},"17472519","disiplus","sorry i don't get it. why would somebody use this over a rabbitmq.",{"id":153,"by":154,"text":155},"17473537","alexchamberlain","I don't get it. I'm primarily a Python developer, so this looks like Celery to me. I've never understood why I'd want to tie myself to a particular library, rather than encode…",{"value":157,"source":100,"evidence":158},"Why Redis instead of SQLite",[159],{"id":160,"by":161,"text":162},"17472450","andreygrehov","Not criticizing, but just curious what was the reasoning behind picking Redis rather than something like sqlite, which would keep the application a little bit more self-contained…",{"value":164,"source":100,"evidence":165},"How transactional job publishing works with Postgres",[166],{"id":167,"by":168,"text":169},"17476748","ex3ndr","Trying to solve something like this always puzzled me: how to make job publishing transactional? There are no simple way to do transaction across redis and, say, postgres. If you…",[171,176,180,187,191],{"value":172,"source":52,"evidence":173},"Kue and Bull",[174,175],{"id":55,"by":11,"text":56},{"id":58,"by":11,"text":59},{"value":177,"source":52,"evidence":178},"Sidekiq",[179],{"id":74,"by":11,"text":75},{"value":181,"source":100,"evidence":182},"Faktory",[183],{"id":184,"by":185,"text":186},"17472132","deedubaya","How about a language agnostic background processing framework with clients in multiple languages, including Javascript? https:\u002F\u002Fgithub.com\u002Fcontribsys\u002Ffaktory",{"value":188,"source":100,"evidence":189},"Celery",[190],{"id":153,"by":154,"text":155},{"value":192,"source":52,"evidence":193},"node-resque",[194],{"id":55,"by":11,"text":56},{"comments":196,"answered":33,"key":197},20,[198,199,200],{"id":55,"text":56},{"id":58,"text":59},{"id":201,"text":202},"17477104","That's a fair read, IMO. My contention is that by the time you've built something on top of Kue or Bull that feels good to a developer...you're probably going to have built most…",{"commenters":204,"max_depth":205,"maker_replies":196,"first_comment_mins":206,"lifespan_hours":207},40,6,11,43,[209,211,215,219,221,225,229,233,234,236,239,240,244,247,250,252,255,257,258,262,265,266,269,270,274,275,278,280,282,284,286,288,291,293,295,297,299,301,302,303,306,309,312,314,316,318,319,322,324,326,329,331,334,336,338,341,344,347,349,351,354,356,361,363,365,368,371,375,378,380,382,384,387,390],[55,39,39,210,11,34],"maker\u002Fneutral\u002Fnone",[212,39,40,213,214,39],"17472249","project\u002Fneutral\u002Fdocs","Bogdanp",[216,39,47,217,218,39],"17472330","maker\u002Fpositive\u002Fnone","ra00l",[149,39,40,220,150,39],"project\u002Fneutral\u002Fidea",[222,39,39,223,224,39],"17472694","commenter\u002Fneutral\u002Fnone","DandyDev",[226,39,39,227,228,39],"17473360","commenter\u002Fneutral\u002Fidea","ChrisCinelli",[230,39,34,231,232,39],"17473307","project\u002Fcritical\u002Fpricing","doublerebel",[58,39,39,220,11,34],[235,39,39,223,232,39],"17473595",[237,39,39,223,238,39],"17475905","smt88",[201,39,39,227,11,34],[241,39,40,242,243,39],"17474554","maker\u002Fneutral\u002Fidea","evantahler",[245,39,40,210,246,39],"17474595","k_vi",[248,39,40,220,249,39],"17475820","nodesocket",[115,34,34,251,116,39],"project\u002Fcritical\u002Fdocs",[253,34,39,254,11,34],"17477052","maker\u002Fneutral\u002Fdocs",[184,42,34,256,185,39],"project\u002Fcritical\u002Fidea",[74,42,39,227,11,34],[259,42,39,260,261,39],"17472397","other\u002Fneutral\u002Fnone","jon-wood",[263,40,39,260,264,39],"17472394","JohnDotAwesome",[81,40,39,210,11,34],[267,40,39,260,268,39],"17473118","thegoleffect",[153,32,34,256,154,39],[271,47,40,272,273,39],"17473583","project\u002Fneutral\u002Fexecution","ilaksh",[141,205,40,213,142,39],[276,205,39,223,277,39],"17472526","moltar",[279,205,39,223,142,39],"17473135",[281,205,39,254,11,34],"17472621",[283,205,40,213,142,39],"17473150",[285,205,39,254,11,34],"17473186",[167,287,40,220,168,39],7,[289,287,39,223,290,39],"17478004","ryanworl",[292,287,39,227,11,34],"17479770",[294,287,39,227,290,39],"17479873",[296,287,39,227,11,34],"17480053",[298,287,39,227,290,39],"17480240",[300,287,39,227,168,39],"17481211",[160,35,40,220,161,39],[87,35,39,220,11,34],[304,35,39,227,305,39],"17472620","aclave1",[307,35,39,227,308,39],"17472680","askmike",[310,35,39,311,11,34],"17472724","commenter\u002Fneutral\u002Fperformance",[122,313,34,231,123,39],9,[64,313,39,315,11,34],"project\u002Fneutral\u002Fpricing",[317,313,34,231,123,39],"17472282",[67,313,39,315,11,34],[320,313,39,223,321,39],"17472495","optimuspaul",[323,313,39,223,11,34],"17472626",[325,33,39,260,123,39],"17472139",[327,33,39,260,328,39],"17472203","swyx",[330,33,39,260,11,34],"17472204",[332,33,39,260,333,39],"17472344","alangpierce",[335,33,39,260,11,34],"17472377",[337,33,39,260,116,39],"17476963",[339,33,39,260,340,39],"17472376","Kequc",[342,33,39,260,343,39],"17472477","camdenlock",[345,33,39,260,346,39],"17473312","adamsea",[348,33,39,260,340,39],"17482987",[350,33,39,260,333,39],"17472404",[352,33,39,260,353,39],"17472899","vertex-four",[103,206,47,355,104,39],"project\u002Fpositive\u002Fdesign",[357,358,47,359,360,39],"17473053",12,"project\u002Fpositive\u002Fnone","mjuszczak",[129,362,34,251,130,39],13,[364,362,34,251,328,39],"17472194",[366,362,39,260,367,39],"17472339","o_____________o",[369,362,39,260,370,39],"17475367","spraak",[372,362,39,373,374,39],"17472208","other\u002Fcritical\u002Fnone","realPubkey",[376,362,39,260,377,39],"17472408","gtirloni",[379,362,39,373,321,39],"17472430",[381,362,39,210,11,34],"17473112",[383,362,39,242,11,34],"17472209",[385,362,40,386,377,39],"17472390","maker\u002Fmixed\u002Fpricing",[388,362,39,389,11,34],"17472552","maker\u002Fneutral\u002Fpricing",[391,362,47,217,377,39],"17472628",[],[394,399,404,409,414,418],{"id":395,"name":396,"points":397,"category":398},"17487552","Browsh",967,"dev_tools",{"id":400,"name":401,"points":402,"category":403},"17470037","Hacker News job trends",371,"data",{"id":405,"name":406,"points":407,"category":408},"17509601","Solving Rush Hour",223,"games",{"id":410,"name":411,"points":412,"category":413},"17506753","Markdown New Tab",218,"productivity",{"id":415,"name":416,"points":417,"category":20},"17505559","Oathkeeper",174,{"id":419,"name":420,"points":421,"category":422},"17508151","Online challenge",143,"learning_science",false,"v2",{"id":426,"name":5,"line":6,"ai":423,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":427,"top":18,"kw":428,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":429,"url":9,"mix":430,"praise":99,"objection":112,"sub":21},17471938,-0.16,[24,25,26,27,28],"0531003311001303300030011000000055100035",[32,33,34,35],1794036567552]