diff --git a/blogposts/11-14-21.md b/blogposts/11-14-21.md new file mode 100644 index 0000000..0675ab5 --- /dev/null +++ b/blogposts/11-14-21.md @@ -0,0 +1,44 @@ +--- +title: "[Recap] October-November" +author: "Jon" +author_image: "https://www.github.com/jonbarrow.png" +date: "November 14, 2021" +caption: "Progress made in the month of October" +cover_image: "/assets/images/blogposts/11-14-21.jpg" +--- + +### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/PretendoNetwork) + +# Introduction +Welcome to the October monthly recap. While not a lot of updates happened, the ones which did were important! + +## RSS +Small update to the website, we now have an RSS feed for blog posts! Use your favorite reader to keep up to date on all our blog posts + +## Stability +Both `nex-go` and `nex-protocols-go` recieved several stability, code quality, and feature updates. These include, but are not limited to, RMC Request creation, fixing packet fragment IDs not being used, many new types being supported in our `StreamIn` and `StreamOut` structs, and a server ping timeout to properly close connections when a client leaves. These all make the network work much better and feel much more cohesive + +## Where is everyone? +The core of online multiplayer is connecting users together. On the Wii U and 3DS, multiplayer is handled via a p2p (peer-to-peer) connection, where one use is assigned as the "host" allowing other users to directly connect to their game session. The technology behind allowing users to connect to other users using arbitrary ports is called `NAT Traversal`. Until now, `NAT Traversal` was not working correctly and clients needed to open all ports to connect. Thanks to developer [shutterbug](https://github.com/shutterbug2000) `NAT` now properly works! + +![Screenshot of shutterbug showing off NAT traversal using mario kart 7](/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.png) + +## Rev your engines! +Both Mario Kart 7 and Mario Kart 8 have started going online and can play matches. These games are far from complete but this is a great stepping stone. Patrons can access the beta servers for Mario Kart 8 right now, Mario Kart 7 has no servers available however. [CTGP-7](https://ctgp-7.github.io/) is also confirmed working for Mario Kart 7, and [CTGP-Café](https://rambo6glaz.github.io/CTGP-Cafe/) being planned for testing as well with full integration planned for both + +![Screenshot of Billy showing off CTGP-7](/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.png) + +[yt-iframe](W974FEDIoAA) + +## Hello YouTube! +An unintended side effect of working on Miiverse support in Mario Kart 8 was YouTube uploading being re-enabled! You can now upload race clips from Mario Kart 8 to YouTube again. Patrons who run the Miiverse patch can try this feature out right now + +[yt-iframe](d3Bq7auupV0) + +## Squid Game +Splatoon multiplayer battles now works! As of now only private friend battles have been tested, but they seem to be working without issue + +[yt-iframe](d_qFnXrP7a4) + +## Friendship is magic +The friends server received some big updates. You can now properly set your privacy settings, add friends, and receive notifications from the server on what your friends are playing \ No newline at end of file diff --git a/blogposts/9-26-21.md b/blogposts/9-26-21.md index 43d942f..e8fa3b4 100644 --- a/blogposts/9-26-21.md +++ b/blogposts/9-26-21.md @@ -4,7 +4,7 @@ author: "Jon" author_image: "https://www.github.com/jonbarrow.png" date: "September 26, 2021" caption: "First ever progress recap" -cover_image: "https://cdn.discordapp.com/attachments/881855727830978580/891805956424495105/Frame_1_1.png" +cover_image: "/assets/images/blogposts/9-26-21.png" --- ### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/pretendonetwork) diff --git a/blogposts/9-29-21.md b/blogposts/9-29-21.md index 16b8f67..815f011 100644 --- a/blogposts/9-29-21.md +++ b/blogposts/9-29-21.md @@ -4,7 +4,7 @@ author: "Jemma" author_image: "https://www.github.com/caramelkat.png" date: "September 29, 2021" caption: "What's Juxtaposition and where it's headed" -cover_image: "https://cdn.discordapp.com/attachments/881694875391774770/892859459666325534/unknown.png" +cover_image: "/assets/images/blogposts/9-29-21.png" --- ### If you want to see more frequent updates, consider supporting us on [**Patreon**](https://patreon.com/pretendonetwork) diff --git a/blogposts/_test.md b/blogposts/_test.md index 21ffc03..97fa764 100644 --- a/blogposts/_test.md +++ b/blogposts/_test.md @@ -1,7 +1,7 @@ --- title: "Test" author: "Monty" -author_image: "https://www.github.com/montylion.png" +author_image: "https://www.github.com/ashmonty.png" date: "January 20, 2038" caption: "A post to test the styling of the various elements we might use (rename to _test.md before deploying the blog section)" cover_image: "https://media.discordapp.net/attachments/413884110667251722/886474243662037062/image1.jpg" diff --git a/locales/AR_ar.json b/locales/AR_ar.json index 96612cd..70e4e06 100644 --- a/locales/AR_ar.json +++ b/locales/AR_ar.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "مطور الويب", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/BR_pt.json b/locales/BR_pt.json index 35048b9..67a4907 100644 --- a/locales/BR_pt.json +++ b/locales/BR_pt.json @@ -24,7 +24,7 @@ "progress": { "title": "Progresso", "paragraphs": [ - "Atualmente estamos trabalhando no Miiverse, assinm como no nossos servidores de contas e suas integrações com os serviços.", + "Atualmente estamos trabalhando no Miiverse, assim como no nossos servidores de contas e suas integrações com os serviços.", "Para o Nintendo 3DS também estamos trabalhando no Mario Kart 7, pretendemos trabalhar em outros jogos quando possível." ] }, @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Desenvolvimento web", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", @@ -121,8 +121,8 @@ ] }, "specialThanks": { - "title": "Special thanks", - "text": "Without them, Pretendo wouldn't be where it is today.", + "title": "Agradecimentos especiais", + "text": "Sem eles, Pretendo não estaria onde está hoje.", "people": [ { "name": "superwhiskers", diff --git a/locales/DE_de.json b/locales/DE_de.json index 69f2332..32a8e09 100644 --- a/locales/DE_de.json +++ b/locales/DE_de.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Webentwicklung", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/ES_es.json b/locales/ES_es.json index 89f3fb7..ff7935e 100644 --- a/locales/ES_es.json +++ b/locales/ES_es.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Desarrollo web", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/FR_fr.json b/locales/FR_fr.json index 99b3836..aa61ac6 100644 --- a/locales/FR_fr.json +++ b/locales/FR_fr.json @@ -111,8 +111,8 @@ { "name": "Monty", "caption": "Développement Web", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/IT_it.json b/locales/IT_it.json index 2f1865b..1b649ca 100644 --- a/locales/IT_it.json +++ b/locales/IT_it.json @@ -109,12 +109,12 @@ { "name": "Monty", "caption": "Sviluppo web", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", - "caption": "Desigmer", + "caption": "Designer", "picture": "https://github.com/mrjvs.png", "github": "https://github.com/mrjvs" } diff --git a/locales/KR_ko.json b/locales/KR_ko.json index 8e82b51..3568d74 100644 --- a/locales/KR_ko.json +++ b/locales/KR_ko.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "웹 개발", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/RO_ro.json b/locales/RO_ro.json index 7093137..ee5be76 100644 --- a/locales/RO_ro.json +++ b/locales/RO_ro.json @@ -9,7 +9,7 @@ "hero": { "subtitle": "Servere de Jocuri", "title": "Recreate", - "text": "Pretendo este un înlocuitor gratuit pentru serverele Nintendo pentru 3DS și Wii U, permițând conectivitate pentru toți, chiar și după ce serverele oficiale sunt oprite", + "text": "Pretendo este un înlocuitor gratuit al serverelor Nintendo pentru 3DS și Wii U, permițând conectivitate pentru toți, chiar și după ce serverele oficiale sunt oprite", "buttons": { "readMore": "Citiți mai multe" } @@ -34,7 +34,7 @@ "QAs": [ { "question": "Ce este Pretendo?", - "answer": "Pretendo este un înlocuitor open source al Nintendo Network ce are ca scop să construiască servere private pentru consolele Nintendo 3DS și Wii U. Scopul nostru este să prezervăm funcționalitatea online a acestor console, pentru a permite jucătorilor să joace în continuare jocurile lor preferate de pe Wii U și 3DS la capacitatea lor maximă." + "answer": "Pretendo este un înlocuitor gratuit al Nintendo Network ce are ca scop să construiască servere private pentru consolele Nintendo 3DS și Wii U. Scopul nostru este să prezervăm funcționalitatea online a acestor console, pentru a permite jucătorilor să joace în continuare jocurile lor preferate de pe Wii U și 3DS la capacitatea lor maximă." }, { "question": "Va merge NNID-ul meu pe Pretendo?", @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Dezvoltare web", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/RU_ru.json b/locales/RU_ru.json index cda2f32..41f9db3 100644 --- a/locales/RU_ru.json +++ b/locales/RU_ru.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Web-разработка", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/TR_tr.json b/locales/TR_tr.json index 9d03c9b..69d8bec 100644 --- a/locales/TR_tr.json +++ b/locales/TR_tr.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Web sayfası geliştirme", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/locales/US_en.json b/locales/US_en.json index 3d1c64b..80071b8 100644 --- a/locales/US_en.json +++ b/locales/US_en.json @@ -109,8 +109,8 @@ { "name": "Monty", "caption": "Web development", - "picture": "https://github.com/montylion.png", - "github": "https://github.com/montylion" + "picture": "https://github.com/ashmonty.png", + "github": "https://github.com/ashmonty" }, { "name": "mrjvs", diff --git a/package-lock.json b/package-lock.json index 702fb21..a3a21c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -156,6 +156,56 @@ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", "dev": true }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==" + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -283,6 +333,25 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -299,6 +368,14 @@ "supports-color": "^7.1.0" } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "cluster-key-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", @@ -386,12 +463,32 @@ "ms": "2.0.0" } }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -440,6 +537,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -794,6 +899,14 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -825,6 +938,24 @@ "type-fest": "^0.20.2" } }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -864,6 +995,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -876,6 +1012,15 @@ "toidentifier": "1.0.0" } }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1004,6 +1149,11 @@ "esprima": "^4.0.0" } }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1025,6 +1175,14 @@ "universalify": "^2.0.0" } }, + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1068,6 +1226,11 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1115,6 +1278,11 @@ "mime-db": "1.44.0" } }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1168,6 +1336,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1224,6 +1397,11 @@ "word-wrap": "^1.2.3" } }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + }, "p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", @@ -1288,6 +1466,15 @@ "ipaddr.js": "1.9.1" } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1299,6 +1486,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1350,12 +1542,25 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "requires": { + "lowercase-keys": "^2.0.0" + } + }, "restler": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/restler/-/restler-3.3.0.tgz", diff --git a/package.json b/package.json index b4e066f..5e27746 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "express-handlebars": "^4.0.4", "express-locale": "^2.0.0", "fs-extra": "^9.1.0", + "got": "^11.8.2", "gray-matter": "^4.0.3", "ioredis": "^4.26.0", "marked": "^3.0.4", diff --git a/public/assets/images/blogposts/11-14-21.jpg b/public/assets/images/blogposts/11-14-21.jpg new file mode 100644 index 0000000..de8f6b4 Binary files /dev/null and b/public/assets/images/blogposts/11-14-21.jpg differ diff --git a/public/assets/images/blogposts/9-26-21.png b/public/assets/images/blogposts/9-26-21.png new file mode 100644 index 0000000..fd18c83 Binary files /dev/null and b/public/assets/images/blogposts/9-26-21.png differ diff --git a/public/assets/images/blogposts/9-29-21.png b/public/assets/images/blogposts/9-29-21.png new file mode 100644 index 0000000..5f260c6 Binary files /dev/null and b/public/assets/images/blogposts/9-29-21.png differ diff --git a/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.png b/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.png new file mode 100644 index 0000000..a0791c3 Binary files /dev/null and b/public/assets/images/blogposts/screenshot-of-billy-showing-off-ctgp-7.png differ diff --git a/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.png b/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.png new file mode 100644 index 0000000..3a6c16c Binary files /dev/null and b/public/assets/images/blogposts/screenshot-of-shutterbug-showing-off-nat-traversal-using-mario-kart-7.png differ diff --git a/src/trello.js b/src/trello.js index 476d4d3..eee6018 100644 --- a/src/trello.js +++ b/src/trello.js @@ -1,20 +1,20 @@ const Trello =require('trello'); -const Redis = require('ioredis'); -const JSONCache = require('redis-json'); +const got = require('got'); const config = require('../config.json'); const trello = new Trello(config.trello.api_key, config.trello.api_token); -const redis = new Redis(); -const trelloCache = new JSONCache(redis, { prefix: 'trello:' }); +let cache; async function getTrelloCache() { - let cache = await trelloCache.get('latest'); if (!cache) { cache = await updateTrelloCache(); } if (cache.update_time < Date.now() - (1000 * 60 * 60)) { - cache = await updateTrelloCache(); + const available = await trelloAPIAvailable(); + if (available) { + cache = await updateTrelloCache(); + } } return cache; @@ -60,10 +60,14 @@ async function updateTrelloCache() { } } - await trelloCache.set('latest', progressData); return progressData; } +async function trelloAPIAvailable() { + const { status } = await got('https://trello.status.atlassian.com/api/v2/status.json').json(); + return status.description === 'All Systems Operational'; +} + module.exports = { getTrelloCache, updateTrelloCache