generated from polymech/site-template
latest
This commit is contained in:
parent
6c8e235118
commit
8ec21cf2c8
@ -23,7 +23,7 @@
|
||||
"format": "unix-time"
|
||||
}
|
||||
],
|
||||
"default": "2025-03-28T15:15:12.509Z"
|
||||
"default": "2025-03-28T15:58:21.624Z"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -386,5 +386,685 @@
|
||||
"https://www.amazon.it/s?k=metal+screws": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175280645
|
||||
},
|
||||
"https://jlc3dp.com/blog/3d-printing-recycling-for-sustainability": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175395014
|
||||
},
|
||||
"https://www.3dnatives.com/en/3d-printed-furniture-plastic-221120174/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175395746
|
||||
},
|
||||
"https://www.inorigin.eu/3d-printer-filament-recycler/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175396642
|
||||
},
|
||||
"https://www.fabbaloo.com/news/a-new-way-to-reuse-3d-print-scraps-recyclingfabriks-recycling-service": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175397131
|
||||
},
|
||||
"https://pmc.ncbi.nlm.nih.gov/articles/PMC11054724/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175397337
|
||||
},
|
||||
"https://research.utwente.nl/en/publications/3-cyclea-modular-process-chain-for-recycling-of-plastic-waste-wit": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743175397521
|
||||
},
|
||||
"https://www.youtube.com/watch?v=qoxxyttw3HQ": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175397690
|
||||
},
|
||||
"https://www.onearmy.earth/project/precious-plastic": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175397952
|
||||
},
|
||||
"https://www.instructables.com/Using-3D-Printing-to-Make-a-Custom-Work-Stool/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175398524
|
||||
},
|
||||
"https://actionbox.ca/pages/diy-shredder-shredii": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175398909
|
||||
},
|
||||
"https://repositorio-aberto.up.pt/bitstream/10216/117850/2/304124.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175399395
|
||||
},
|
||||
"www.zeroplasticsaustralia.com": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743175475305
|
||||
},
|
||||
"http://www.zeroplasticsaustralia.com": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175525036
|
||||
},
|
||||
"https://www.sundaytimes.lk/230813/sunday-times-2/sltda-usaid-launch-sustainable-waste-management-initiative-527889.html": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175674939
|
||||
},
|
||||
"https://www.greenpolicyplatform.org/news/sustainable-tourism-and-plastics-and-food-waste-management": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743175675034
|
||||
},
|
||||
"https://www.skills4cmt.eu/blog/zerowaste/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175675750
|
||||
},
|
||||
"http://bizenglish.adaderana.lk/coca-cola-beverages-sri-lanka-launches-sri-lankas-first-ever-electronic-three-wheeler-for-plastic-waste-management-on-the-world-recycling-day/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175676488
|
||||
},
|
||||
"https://emersionwellness.com/powerful-eco-friendly-tours-sri-lanka/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175678063
|
||||
},
|
||||
"https://handsondataviz.org/HandsOnDataViz.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175679492
|
||||
},
|
||||
"https://www.mkbergman.com/pubs/akrp/a-kr-practionary.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175679965
|
||||
},
|
||||
"https://www.scirp.org/journal/paperinformation?paperid=61933": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175680690
|
||||
},
|
||||
"https://pdfs.semanticscholar.org/cec0/e7cec1e9d4646a63c1df3f420d94c35f63bf.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175681813
|
||||
},
|
||||
"https://www.youtube.com/watch?v=dqqEeFpdJgU": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175681963
|
||||
},
|
||||
"https://gist.github.com/camilasrody/9527416fa46a13ba0ab752ca9410ff7b": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175683050
|
||||
},
|
||||
"https://youtu.be/dkm_gXxX2pk": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175757817
|
||||
},
|
||||
"https://www.yjing-extrusion.com/where-is-there-a-drying-extrusion-granulation-production-line.html": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175867575
|
||||
},
|
||||
"https://kingroon.com/blogs/3d-print-101/how-to-diy-filament-dryer": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175868060
|
||||
},
|
||||
"https://shop.elsevier.com/books/exitrus-ion/giles-jr/978-1-4377-3481-2": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175869203
|
||||
},
|
||||
"https://bronze.ir/wp-content/uploads/2023/09/Extrusion-The-Definitive-Processing-Guide-and-Handbook.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175869689
|
||||
},
|
||||
"https://www.circuitinsight.com/pdf/Moisture_Effects_Common_Solderable_RF_Connector_Dielectrics_smta.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175870320
|
||||
},
|
||||
"https://pubs.rsc.org/en/content/articlelanding/2014/ra/c4ra06433j": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175870628
|
||||
},
|
||||
"https://www.tappi.org/content/events/07europlace/papers/07europl41.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175870986
|
||||
},
|
||||
"https://www.youtube.com/watch?v=teQsyqK07QE": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175871134
|
||||
},
|
||||
"https://www.youtube.com/watch?v=txF2oQPIjb4": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175871269
|
||||
},
|
||||
"https://www.youtube.com/watch?v=Z3znzGC4HaE": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175871419
|
||||
},
|
||||
"https://www.instructables.com/3D-Printer-Filament-Dry-Box/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175872614
|
||||
},
|
||||
"https://richrap.blogspot.com/2018/02/diy-heated-drybox-for-3d-printing.html": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175873099
|
||||
},
|
||||
"https://wiki.opensourceecology.org/wiki/Open_Source_Filament_Dry_Box": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175873453
|
||||
},
|
||||
"https://www.xometry.com/resources/materials/polystyrene/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743175998303
|
||||
},
|
||||
"https://www.ptonline.com/articles/compression-molded-pet-preforms-challenge-injection-molding": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176006541
|
||||
},
|
||||
"https://www.yalescientific.org/2016/02/mealworms-an-unlikely-solution-to-styrofoam-waste-2/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176007458
|
||||
},
|
||||
"https://pmc.ncbi.nlm.nih.gov/articles/PMC9610515/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176007692
|
||||
},
|
||||
"https://research.gold.ac.uk/33997/1/DES_thesis_ChattingD_2023.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176008322
|
||||
},
|
||||
"https://www.youtube.com/watch?v=3I6o14586qk": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176008520
|
||||
},
|
||||
"https://www.instructables.com/Dog-Feeder-Station-DIY/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176009644
|
||||
},
|
||||
"https://www.instructables.com/Flat-Pack-Dog-Feeder/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176010288
|
||||
},
|
||||
"https://ashadeofteal.com/how-to-make-a-raised-dog-feeder/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176011139
|
||||
},
|
||||
"https://digitalcommons.calpoly.edu/cgi/viewcontent.cgi?article=1288\\&context=eesp": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176013279
|
||||
},
|
||||
"hypothetical-link": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176080337
|
||||
},
|
||||
"https://noplasticssunday.org/designs/air-press-injector-v1-kr": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120456
|
||||
},
|
||||
"https://noplasticssunday.org/designs/air-press-injector-v1-en": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120463
|
||||
},
|
||||
"https://noplasticssunday.org/designs/air-press-injector-v1-jp": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120469
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/cohnilee": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120475
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/hyeontaekchoi": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120480
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/yonghunjin": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120486
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/minjungcho": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120492
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/sangakim": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120498
|
||||
},
|
||||
"https://noplasticssunday.org/contributors/junheeseo": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120503
|
||||
},
|
||||
"https://noplasticssunday.org/manuals/air-press-injector-v1": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176120508
|
||||
},
|
||||
"https://www.onearmy.earth/news/sheetpress": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176307511
|
||||
},
|
||||
"https://polysynthesis.au/blog-what-is-plastic-sheet-butt-welding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176308266
|
||||
},
|
||||
"https://www.appropedia.org/Literature_review:_Open_Source_Waste_Plastic_Sheet_Press": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176309641
|
||||
},
|
||||
"https://wordbookstores.com/book/9781569908150": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176310662
|
||||
},
|
||||
"https://www.routledge.com/The-Complete-Guide-to-Mold-Making-with-SOLIDWORKS-2025-Basic-through-Advanced-Techniques/Tran/p/book/9781630577209": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176310891
|
||||
},
|
||||
"https://pmc.ncbi.nlm.nih.gov/articles/PMC11085764/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176311163
|
||||
},
|
||||
"https://pdxscholar.library.pdx.edu/cgi/viewcontent.cgi?article=2363\\&context=honorstheses": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176312484
|
||||
},
|
||||
"https://www.youtube.com/watch?v=WSZq_9a-XMQ": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176312726
|
||||
},
|
||||
"https://www.instructables.com/HDPE-Plastic-Press-Made-From-Scrap/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176313919
|
||||
},
|
||||
"https://tomric.com/product/octagon-mold/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176314934
|
||||
},
|
||||
"https://www.professionalplastics.com": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176316430
|
||||
},
|
||||
"https://kindle-tech.com/products/polygon-press-mold": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176317190
|
||||
},
|
||||
"https://wac.colostate.edu/docs/books/writingspaces6/technical.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176317893
|
||||
},
|
||||
"https://www.thefisherman.com/article/pour-your-own-making-soft-plastics/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176434968
|
||||
},
|
||||
"https://www.andygravesstructures.com/surprisingly-easy-method-to-make-a-1-part-plaster-mold/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176435629
|
||||
},
|
||||
"https://pure.lib.usf.edu/ws/portalfiles/portal/40730122/The+Emergence+of+the+Digital+Humanities.pdf": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176435953
|
||||
},
|
||||
"https://www.youtube.com/watch?v=JbOVLFY9ybs": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176436103
|
||||
},
|
||||
"https://sites.tufts.edu/ryanrockett/hw-13-molding-casting/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176436802
|
||||
},
|
||||
"https://www.instructables.com/Make-a-two-part-reusable-mold-using-plaster/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176437913
|
||||
},
|
||||
"https://www.dropbox.com/sh/bvus8maneewhxhk/AACpXCwufQSTb2FyYe8HFChFa?dl=0": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176502437
|
||||
},
|
||||
"https://www.youtube.com/watch?v=Eq9IbetsLB4\\&t=2s": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176502641
|
||||
},
|
||||
"www.menorplastic.com": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743176576238
|
||||
},
|
||||
"https://advancedplastiform.com/industries/furniture/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176646390
|
||||
},
|
||||
"https://www.eficustominjectionmolding.com/furniture/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176647630
|
||||
},
|
||||
"https://www.youtube.com/watch?v=ALlPoaSD9bU": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176647789
|
||||
},
|
||||
"https://www.onearmy.earth/news/furniture": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176648075
|
||||
},
|
||||
"https://www.menorplastic.com": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176651290
|
||||
},
|
||||
"https://www.instructables.com/How-to-Make-Rope-from-Plastic-Bottles/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176870638
|
||||
},
|
||||
"https://www.1millionwomen.com.au/blog/turn-plastic-bags-usable-rope-super-easy-diy/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176872604
|
||||
},
|
||||
"https://blogs.westlakelibrary.org/2022/08/make-a-jump-rope-with-plastic-bags/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176873577
|
||||
},
|
||||
"https://www.artofmanliness.com/skills/manly-know-how/how-to-make-a-rope-out-of-plastic-bags/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176873833
|
||||
},
|
||||
"https://www.bowdabra.com/blog/2021/03/25/kids-craft-how-to-upcycle-plastic-bags-into-a-cool-jump-rope/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176876093
|
||||
},
|
||||
"https://paperbagsltd.co.ke/what-is-paper-rope/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176879659
|
||||
},
|
||||
"https://www.youtube.com/watch?v=TRy2sD_k57g": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176879829
|
||||
},
|
||||
"https://www.youtube.com/watch?v=xGRSzsVw1cQ": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176879981
|
||||
},
|
||||
"https://www.youtube.com/watch?v=9CJ9xto5f5M": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176880115
|
||||
},
|
||||
"https://www.youtube.com/watch?v=3TpN4WT61hU": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176880253
|
||||
},
|
||||
"https://www.youtube.com/watch?v=6KiZXRK5h44": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176880413
|
||||
},
|
||||
"https://pprd.montgomeryschoolsmd.org/siteassets/schools/elementary-schools/p-s/rockviewes/uploadedfiles/plastic-bag-jump-rope-instructions.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743176880902
|
||||
},
|
||||
"https://news.climate.columbia.edu/2022/10/13/how-do-we-clean-up-all-that-ocean-plastic/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177068105
|
||||
},
|
||||
"https://oceanplasticpots.com/blogs/our-news/recycling-rope-and-net-from-6-scottish-islands": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177068552
|
||||
},
|
||||
"https://www.nicerapid.com/blog/injection-molding-with-recycled-ocean-plastics-turning-the-tide-on-waste/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177069183
|
||||
},
|
||||
"https://www.essentracomponents.com/en-us/news/manufacturing/injection-molding/optimizing-plastic-injection-molding-processes": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177069585
|
||||
},
|
||||
"https://theoceancleanup.com/updates/the-plastic-journey-ten-steps-to-create-a-product-from-pollution/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177069803
|
||||
},
|
||||
"https://waterhaul.co/blogs/traceable-marine-plastic-articles/rope-recycling": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177070268
|
||||
},
|
||||
"https://theoceancleanup.com/oceans/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177070332
|
||||
},
|
||||
"https://plasticsrecycling.org/how-recycling-works/the-plastic-recycling-process/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177071028
|
||||
},
|
||||
"https://www.nicowitwicki.com/project/theoceanplasticbook": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177071845
|
||||
},
|
||||
"https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0242459": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177072042
|
||||
},
|
||||
"https://aclanthology.org/2024.naacl-demo.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177072449
|
||||
},
|
||||
"https://www.youtube.com/watch?v=Z7lg6AxZYAM": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177072588
|
||||
},
|
||||
"https://en.wikipedia.org/wiki/Welding": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177129992
|
||||
},
|
||||
"https://en.wikipedia.org/wiki/Deburring": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177130525
|
||||
},
|
||||
"https://www.autodesk.com/solutions/cad-software": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177132977
|
||||
},
|
||||
"https://www.metalsupermarkets.com.au/": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177133063
|
||||
},
|
||||
"https://www.bunnings.com.au/our-range/tools-hardware/fasteners-fixings/bolts-screws/bolts": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177133184
|
||||
},
|
||||
"https://www.sanha.com.au/products/": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177133235
|
||||
},
|
||||
"https://www.plastic.org.au/pages/case-study-bedford-park": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177192058
|
||||
},
|
||||
"https://www.portphillip.vic.gov.au/council-services/waste-recycling-and-rubbish/understanding-packaging-codes-and-labels": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177194307
|
||||
},
|
||||
"https://www.youtube.com/watch?v=QiT8zDW76VI": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177194661
|
||||
},
|
||||
"https://www.autodesk.com/products/autocad": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177241748
|
||||
},
|
||||
"https://plasticsheetsshop.co.uk/diy/key-holder/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177303606
|
||||
},
|
||||
"https://vadic.vigyanashram.blog/2019/03/09/key-holder-4/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177304535
|
||||
},
|
||||
"https://www.instructables.com/Design-Your-Own-Molecule-Key-Holder/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177305778
|
||||
},
|
||||
"https://www.youtube.com/watch?v=IFhlhWOsLT4": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177305908
|
||||
},
|
||||
"https://www.youtube.com/watch?v=E546JLroD8I": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177306038
|
||||
},
|
||||
"https://www.youtube.com/watch?v=IYm613Nrd0A": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177306182
|
||||
},
|
||||
"https://3axis.co/laser-cut/key-holder/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177306590
|
||||
},
|
||||
"https://vecty.co/laser-cut/key-holder": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177307730
|
||||
},
|
||||
"https://vectorsfile.com/dxf/key-hanger/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177308783
|
||||
},
|
||||
"https://www.immould.com/plastic-injection-stool-mould/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177436063
|
||||
},
|
||||
"https://www.instructables.com/DIY-Injection-Molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177437246
|
||||
},
|
||||
"https://inochiglobal.com/how-are-plastic-stools-made/": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177437651
|
||||
},
|
||||
"https://www.philippaduatz.com/portfolio-item/thanatos-stool-design-process/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177437992
|
||||
},
|
||||
"https://www.chinaplasmould.com/injection-mold/household-mold/household-plastic-stool-injection-mould.html": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177438659
|
||||
},
|
||||
"https://www.youtube.com/watch?v=tDxSbU67MR8": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177438799
|
||||
},
|
||||
"https://www.instructables.com/Make-a-YWCA-Pen-From-Recycled-HDPE2-Plastic-Laundr/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177568982
|
||||
},
|
||||
"https://www.instructables.com/HomemadePlastic/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177570023
|
||||
},
|
||||
"https://woodengiftsandmore.shop/about-us/blog/waste-pen/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177570251
|
||||
},
|
||||
"https://www.dayspringpens.com/blogs/the-jotted-line/how-to-recycle-pens": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177570813
|
||||
},
|
||||
"https://ecogreenlove.com/2015/02/19/reusing-pens/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177571476
|
||||
},
|
||||
"https://www.theenvironmentalblog.org/2025/03/bamboo-to-recycled-plastic-materials-green-pens/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177572427
|
||||
},
|
||||
"https://www.youtube.com/watch?v=-igxhoGEQFU": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177572573
|
||||
},
|
||||
"https://www.youtube.com/watch?v=kA-m4qEl85s": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177572747
|
||||
},
|
||||
"https://www.penblanks.ca/everlast-pen-blank-mold-casting-system-bundle": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177574397
|
||||
},
|
||||
"https://www.bgartforms.com/products/copy-of-dogbone-tube-in-casting-system-bg061": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177574948
|
||||
},
|
||||
"https://www.materialise.com/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177626631
|
||||
},
|
||||
"https://www.youtube.com/watch?time_continue=163\\&v=95aPYlXShTY\\&feature=emb_logo": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177626792
|
||||
},
|
||||
"https://gudmould.wordpress.com/2022/01/23/structural-optimization-design-of-injection-mould-for-automobile-inner-door-handle/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177691816
|
||||
},
|
||||
"https://www.mastercam.com/news/blog/everything-you-need-to-know-about-cnncmachining-for-injection-mold-making/": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177692740
|
||||
},
|
||||
"https://xometry.pro/en-tr/articles/injection-moulding-overview/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177694368
|
||||
},
|
||||
"https://www.beaumontinc.com/about/books-by-beaumont/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177695557
|
||||
},
|
||||
"https://www.espublisher.com/uploads/article_pdf/esmm5f713.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177696057
|
||||
},
|
||||
"https://formlabs.com/blog/diy-injection-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177696484
|
||||
},
|
||||
"https://www.dremel.com": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177748755
|
||||
},
|
||||
"https://www.youtube.com/watch?v=qkVutYonQhM": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177803774
|
||||
},
|
||||
"https://cad-journal.net/files/vol_18/CAD_18\\(2\\": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743177804363
|
||||
},
|
||||
"https://libjournals.unca.edu/ncur/wp-content/uploads/2021/01/3352-Garzon-Pat-FINAL-1.pdf": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177805011
|
||||
},
|
||||
"https://davehakkens.nl/community/forums/topic/surfboard-fins-by-injection/index.html": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177805233
|
||||
},
|
||||
"https://www.matterhackers.com/articles/design-lab-3d-printing-surfboard-fins": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177805709
|
||||
},
|
||||
"https://kanoa-surfboards.com/products/beginners-surf-companion-guide-book": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743177807081
|
||||
},
|
||||
"#": {
|
||||
"isValid": false,
|
||||
"timestamp": 1743178003018
|
||||
},
|
||||
"https://baiwemolding.com/acrylic-injection-molding-process/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178213788
|
||||
},
|
||||
"https://autoprotoway.com/acrylic-injection-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178214442
|
||||
},
|
||||
"https://pd3.4spe.org/plastic-part-design-for-economical-injection-molding-part-iii/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178215099
|
||||
},
|
||||
"https://prototool.com/acrylic-injection-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178215898
|
||||
},
|
||||
"https://prototool.com/polypropylene-injection-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178216584
|
||||
},
|
||||
"https://xcmachining.com/acrylic-injection-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178217227
|
||||
},
|
||||
"https://patents.google.com/patent/US2586978A/en": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178218188
|
||||
},
|
||||
"https://patents.google.com/patent/CN103660127A/en": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178218937
|
||||
},
|
||||
"https://www.xometry.com/capabilities/injection-molding-service/acrylic-molding/": {
|
||||
"isValid": true,
|
||||
"timestamp": 1743178219722
|
||||
}
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "Return a list of references (only with links), as Markdown, grouped : Articles, Books, Papers, Youtube, Opensource Designs, ... Dont comment !\n\nText to process:\nThis guide will instruct you on converting 3D print waste into design objects using a shredder, sheet press, and CNC.\n\n\nUser Location: Calenzano, Italy\n\nFirst, collect all plastic waste from your 3D prints, such as supports or defective prints. Sort the waste by plastic type, such as PLA, PETG, and ABS.\n\nAt this stage, shred the material and gather it. Determine the number of shredding cycles based on the desired size.\n\nNow we place all our chopped plastic into the 39x39 in (1x1 m) mold, insert it into the sheet press, and create the plastic sheet.\n\nWe place our 3.28x3.28 ft sheet, cut into 13.78x13.78 in pieces, under the CNC to create rounded pieces with a diameter of 11.81 in.\n\nThe final step is to drill the plastic discs and attach them to a metal base to complete the stool."
|
||||
"content": "Return a list of references (only with links), as Markdown, grouped : Articles, Books, Papers, Youtube, Opensource Designs, ... Dont comment !\n\nText to process:\nFrequently, individuals inquire about achieving attractive patterns in beams, and interestingly, no special technical tricks are involved. The method aligns with standard practices, using a basic steel pipe mold and relying on the extruder's function. Here's how you can achieve similar results.\n\nIn order to create patterns with distinct layers, use at least two colors. It makes no difference whether you work with PP (Polypropylene) or PE (Polyethylene), as there are no noticeable differences between the two in this context. Keep color mixes separate. The dark blue used here was mixed with transparent flakes, which serve as an effective filler. This allows you to use less dark blue pigment without compromising the output, as the pigments are usually strong. For example, adding 2.2 lbs (1 kg) of transparent flakes to 2.2 lbs (1 kg) of dark blue yields 4.4 lbs (2 kg) of dark blue material while maintaining color quality. The white used here is pure white.\n\n### Extrusion Process Guide\n\n1. **Initial Setup**: Add a few scoops into the extruder.\n2. **Operation**: Activate the machine and ensure the material is thoroughly melted.\n3. **Mold Installation**: Attach the cold mold and restart the machine.\n4. **Material Addition**:\n - For the first color, use approximately 3 scoops total, accounting for any material already in the hopper.\n - As the hopper nears empty, add 2 scoops of the second color.\n - Adjust quantities as needed until the mold is filled.\n5. **Cooling**: Remove the mold to let it cool. While some suggest water cooling to avoid leakage, it is typically unnecessary.\n\n## Analysis of the Mixing Process\n\nUpon sectioning the beam, observe the evolving pattern. Initially, the first color adheres to the mold's surface and begins to cool. Meanwhile, the inner core remains fluid, allowing subsequent colors to pass through. Repeatedly altering the input colors results in multiple layers within the beam. Proceed to the next step for further theoretical insights.\n\nAnother essential theory suggests that as plastic moves further into the mold, it cools, necessitating increased pressure for continued flow. The further from the inlet, the patterns become intricate due to variations in temperature and pressure. This phenomenon is particularly notable in square tubes, where flow slows at the corners. In contrast, round tubes likely produce circular patterns.\n\nRefer to the video for the process of creating a chessboard with these beams. Thank you for reading, and enjoy your pattern-making!"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
|
||||
1479
package-lock.json
generated
1479
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -77,6 +77,7 @@
|
||||
"p-map": "^7.0.3",
|
||||
"picomatch": "^4.0.2",
|
||||
"potrace": "^2.1.8",
|
||||
"puppeteer": "^22.3.0",
|
||||
"react-jsx-parser": "^2.3.0",
|
||||
"reading-time": "^1.5.0",
|
||||
"rehype-accessible-emojis": "^0.3.2",
|
||||
@ -101,7 +102,6 @@
|
||||
"devDependencies": {
|
||||
"@types/google-publisher-tag": "^1.20250210.0",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@types/markdownlint": "^0.26.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
||||
"@typescript-eslint/parser": "^7.1.0",
|
||||
"eslint": "^8.57.0",
|
||||
@ -114,10 +114,7 @@
|
||||
"normalize-url": "^8.0.1",
|
||||
"sass-embedded": "^1.83.4",
|
||||
"ts-jest": "^29.3.0",
|
||||
"vitest": "^1.3.1",
|
||||
"markdownlint": "^0.39.0",
|
||||
"markdownlint-cli": "^0.39.0",
|
||||
"markdownlint-rule-helpers": "^0.19.0"
|
||||
"vitest": "^1.3.1"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "ts-jest/presets/default-esm",
|
||||
|
||||
93
src/base/url.test.ts
Normal file
93
src/base/url.test.ts
Normal file
@ -0,0 +1,93 @@
|
||||
import { describe, it, expect, jest } from '@jest/globals';
|
||||
import { PuppeteerUrlChecker, FetchUrlChecker, checkUrl, UrlCheckResult } from './url.js';
|
||||
|
||||
describe('URL Checker', () => {
|
||||
// Test URLs
|
||||
const validUrl = 'https://backend.orbit.dtu.dk/ws/portalfiles/portal/278424474/Bertelsen_et_al_2022.pdf';
|
||||
const invalidUrl = 'https://example.com/404';
|
||||
const timeoutUrl = 'https://example.com/timeout';
|
||||
|
||||
// Increase timeout for real browser tests
|
||||
jest.setTimeout(30000);
|
||||
|
||||
describe('PuppeteerUrlChecker', () => {
|
||||
const checker = new PuppeteerUrlChecker();
|
||||
|
||||
it('should validate a valid URL', async () => {
|
||||
const result = await checker.check('https://www.google.com');
|
||||
expect(result.valid).toBe(true);
|
||||
});
|
||||
|
||||
it('should handle invalid URLs', async () => {
|
||||
const result = await checker.check('https://www.google.com/nonexistent-page-123456789');
|
||||
expect(result.valid).toBe(false);
|
||||
expect(result.error).toContain('404');
|
||||
});
|
||||
|
||||
it('should handle timeouts', async () => {
|
||||
const result = await checker.check('http://example.com:81', 1000); // Port 81 should timeout quickly
|
||||
expect(result.valid).toBe(false);
|
||||
expect(result.error).toContain('Timeout');
|
||||
});
|
||||
|
||||
it('should handle network errors', async () => {
|
||||
const result = await checker.check('http://invalid.domain.thisisnotreal');
|
||||
expect(result.valid).toBe(false);
|
||||
expect(result.error).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('FetchUrlChecker', () => {
|
||||
const checker = new FetchUrlChecker();
|
||||
|
||||
beforeEach(() => {
|
||||
global.fetch = jest.fn() as unknown as typeof fetch;
|
||||
});
|
||||
|
||||
it('should validate a valid URL', async () => {
|
||||
const mockResponse = {
|
||||
ok: true,
|
||||
status: 200,
|
||||
statusText: 'OK'
|
||||
} as unknown as Response;
|
||||
|
||||
(global.fetch as unknown as jest.Mock).mockResolvedValue(mockResponse);
|
||||
|
||||
const result = await checker.check(validUrl);
|
||||
expect(result).toEqual({ valid: true });
|
||||
});
|
||||
|
||||
it('should handle invalid URLs', async () => {
|
||||
const mockResponse = {
|
||||
ok: false,
|
||||
status: 404,
|
||||
statusText: 'Not Found'
|
||||
} as unknown as Response;
|
||||
|
||||
(global.fetch as unknown as jest.Mock).mockResolvedValue(mockResponse);
|
||||
|
||||
const result = await checker.check(invalidUrl);
|
||||
expect(result).toEqual({
|
||||
valid: false,
|
||||
error: 'HTTP 404: Not Found'
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle timeouts', async () => {
|
||||
(global.fetch as unknown as jest.Mock).mockRejectedValue(new Error('Timeout'));
|
||||
|
||||
const result = await checker.check(timeoutUrl);
|
||||
expect(result).toEqual({
|
||||
valid: false,
|
||||
error: 'Timeout'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('checkUrl convenience function', () => {
|
||||
it('should use the default checker', async () => {
|
||||
const result = await checkUrl('https://www.google.com');
|
||||
expect(result.valid).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
114
src/base/url.ts
Normal file
114
src/base/url.ts
Normal file
@ -0,0 +1,114 @@
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
export interface UrlCheckResult {
|
||||
valid: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface UrlChecker {
|
||||
check(url: string, timeout?: number): Promise<UrlCheckResult>;
|
||||
}
|
||||
|
||||
export class PuppeteerUrlChecker implements UrlChecker {
|
||||
private readonly defaultTimeout: number = 10000;
|
||||
private readonly userAgent: string = 'Mozilla/5.0 (compatible; PolymechBot/1.0; +http://polymech.org)';
|
||||
|
||||
async check(url: string, timeout: number = this.defaultTimeout): Promise<UrlCheckResult> {
|
||||
let browser;
|
||||
try {
|
||||
browser = await puppeteer.launch({
|
||||
headless: 'new' as any,
|
||||
args: ['--ignore-certificate-errors', '--no-sandbox', '--disable-setuid-sandbox']
|
||||
});
|
||||
|
||||
const page = await browser.newPage();
|
||||
await page.setUserAgent(this.userAgent);
|
||||
await page.setDefaultNavigationTimeout(timeout);
|
||||
|
||||
const response = await page.goto(url, {
|
||||
waitUntil: 'networkidle0',
|
||||
timeout: timeout
|
||||
});
|
||||
|
||||
if (!response) {
|
||||
return { valid: false, error: 'No response received' };
|
||||
}
|
||||
|
||||
const status = response.status();
|
||||
if (status >= 200 && status < 400) {
|
||||
return { valid: true };
|
||||
}
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
error: `HTTP ${status}: ${response.statusText()}`
|
||||
};
|
||||
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
return {
|
||||
valid: false,
|
||||
error: error.message
|
||||
};
|
||||
}
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Unknown error occurred'
|
||||
};
|
||||
} finally {
|
||||
if (browser) {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class FetchUrlChecker implements UrlChecker {
|
||||
private readonly defaultTimeout: number = 10000;
|
||||
private readonly userAgent: string = 'Mozilla/5.0 (compatible; PolymechBot/1.0; +http://polymech.org)';
|
||||
|
||||
async check(url: string, timeout: number = this.defaultTimeout): Promise<UrlCheckResult> {
|
||||
try {
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
||||
|
||||
const response = await fetch(url, {
|
||||
signal: controller.signal,
|
||||
redirect: 'follow',
|
||||
headers: {
|
||||
'User-Agent': this.userAgent
|
||||
}
|
||||
});
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
|
||||
if (!response.ok) {
|
||||
return {
|
||||
valid: false,
|
||||
error: `HTTP ${response.status}: ${response.statusText}`
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true };
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
return {
|
||||
valid: false,
|
||||
error: error.message
|
||||
};
|
||||
}
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Unknown error occurred'
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Default checker instance
|
||||
export const defaultChecker: UrlChecker = new PuppeteerUrlChecker();
|
||||
|
||||
// Export a convenience function
|
||||
export async function checkUrl(url: string, timeout?: number): Promise<UrlCheckResult> {
|
||||
return defaultChecker.check(url, timeout);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user