diff --git a/.eleventy.js b/.eleventy.js new file mode 100644 index 0000000..b191366 --- /dev/null +++ b/.eleventy.js @@ -0,0 +1,75 @@ +const fs = require("fs"); +const path = require("path"); +const i18n = require('./_data/i18n.js'); + +module.exports = function(eleventyConfig) { + eleventyConfig.addCollection("post", function(collectionApi) { + return collectionApi.getFilteredByGlob("./posts/*").sort((a, b) => b.date - a.date); + }); + eleventyConfig.addCollection("misc", (api) => + api.getFilteredByTag("misc") + ); + eleventyConfig.addFilter("getTranslation", (page, lang) => { + const dir = path.dirname(page.inputPath); + const file = path.join(dir, `${lang}.json`); + + if (fs.existsSync(file)) { + return JSON.parse(fs.readFileSync(file, "utf-8")); + } + + return {}; + }); + eleventyConfig.addCollection("88x31", () => { + return fs.readdirSync("static/images/88x31") + .map(file => ({ + url: `/static/images/88x31/${file}`, + fileSlug: file + })); + }); + + eleventyConfig.addPassthroughCopy("static"); + + eleventyConfig.addNunjucksFilter("alternateLanguages", function(collection, postId, currentLanguageKey) { + return collection.filter(post => + post.data.postId === postId && post.data.langKey !== currentLanguageKey + ) + .map(post => ({ + lang: post.data.langKey, + url: post.url, + title: post.data.title + })) + }); + + eleventyConfig.addFilter("absoluteUrl", function(url) { + const base = "https://adrianvic.github.io"; + const prefix = "/tenkuma/web"; + return base + prefix + url; + }); + + eleventyConfig.addFilter("postDate", (dateObj) => { + if (!dateObj) return ""; + return dateObj.toLocaleString(undefined, { + year: "numeric", + month: "numeric", + day: "numeric", + timeZone: "America/Sao_Paulo" + }); + }); + + eleventyConfig.addNunjucksFilter("smartTitle", function(str) { + if (!str) return ""; + const smallWords = ["a","an","and","at","but","by","for","in","nor","of","on","or","so","the","to","up","yet", + "e","de","do","da","dos","das","a","o","um","uma","em","por","para","com","no","na","nos"]; + return str.toLowerCase().split(" ").map((word, i) => { + if (i === 0) return word.charAt(0).toUpperCase() + word.slice(1); + return smallWords.includes(word) ? word : word.charAt(0).toUpperCase() + word.slice(1); + }).join(" "); + }); + + return { + pathPrefix: "/tenkuma/web", + dir: { + output: "docs" + } + }; +}; diff --git a/.forgejo/workflows/build-forgejo.yml b/.forgejo/workflows/build-forgejo.yml new file mode 100644 index 0000000..e0b77da --- /dev/null +++ b/.forgejo/workflows/build-forgejo.yml @@ -0,0 +1,49 @@ +name: Build Eleventy Forgero + +on: + push: + paths-ignore: + - '/maintenance/**' + - '/README.md' + branches: + - main + workflow_dispatch: + pull_request: + paths-ignore: + - '/maintenance/**' + - '/README.md' + +permissions: + contents: write + +jobs: + build: + runs-on: arch-linux + + strategy: + matrix: + node-version: [24.x] + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies & build + run: | + npm ci + npm run build -- --pathprefix="/pages/tenkuma/web" + + - name: Deploy to forgejo-pages + run: | + git config user.email "adrianvictor+webmaster@disroot.org" + git config user.name "mareguma" + git checkout --orphan forgejo-pages + git rm -rf . + cp -r docs/* . + git add . + git commit -m "Deploy: $(date)" + git push -f origin forgejo-pages \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8d068a5 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,44 @@ +name: Build Eleventy + +on: + push: + paths-ignore: + - '/maintenance/**' + - '/README.md' + branches: + - main + workflow_dispatch: + pull_request: + paths-ignore: + - '/maintenance/**' + - '/README.md' + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [24.x] + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies & build + run: | + npm ci + npm run build -- --pathprefix="" + + - name: Deploy + uses: peaceiris/actions-gh-pages@v4 + with: + publish_dir: ./docs + github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1a9dc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +_site/ +node_modules/ +docs/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..65eb7c5 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# Adrian Victor +[![Forgejo Pages Build and Deploy](https://inspiran.beetal-castor.ts.net/git/tenkuma/web/badges/workflows/build-forgejo.yml/badge.svg)](https://inspiran.beetal-castor.ts.net/git/tenkuma/web/actions?workflow=build-forgejo.yml) +[![Github Pages Build](https://github.com/adrianvic/adrianvic.github.io/actions/workflows/build.yml/badge.svg)](https://github.com/adrianvic/adrianvic.github.io/actions/workflows/build.yml) +[![pages-build-deployment](https://github.com/adrianvic/adrianvic.github.io/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/adrianvic/adrianvic.github.io/actions/workflows/pages/pages-build-deployment) + +My personal static website/blog built with Eleventy. + + + +## Mirrors + - Forgejo: https://inspiran.beetal-castor.ts.net/pages/tenkuma/web/ + - GitHub Pages: https://adrianvic.github.io/ + - NeoCities (some features are broken): https://tenkuma.neocities.org/ + +## Interesting features + - Multiple pages + - Text support + - Interactive + +## Features that are not interesting at all + - Localization support with global/page string table + - Reusable elements with Eleventy's macros + - Responsive design for computers, medium sized devices and smartphones + - Functional without JavaScript + - Robust blog functionality with support for linking post translations with a common internal ID + - Some elements have hints while hovering, they update the text of a hint bar on the website header diff --git a/README/index.html b/README/index.html deleted file mode 100644 index 7176c98..0000000 --- a/README/index.html +++ /dev/null @@ -1,27 +0,0 @@ -

Adrian Victor

-

Forgejo Pages Build and Deploy -Github Pages Build -pages-build-deployment

-

My personal static website/blog built with Eleventy.

-

-

Mirrors

- -

Interesting features

- -

Features that are not interesting at all

- diff --git a/_data/i18n.js b/_data/i18n.js new file mode 100644 index 0000000..ab17402 --- /dev/null +++ b/_data/i18n.js @@ -0,0 +1,137 @@ +const globalValues = { + mastodon: { url: "https://mstdn.social/@tenkuma", username: "@tenkuma@mstdn.social" }, + github: { url: "https://github.com/adrianvic", username: "adrianvic" }, + disrootGit: { url: "https://git.disroot.org/adrianvictor", username: "adrianvictor" }, + discord: { url: "https://discord.com/users/681643259764015116", username: "@adrianvic" }, + youtube: { url: "https://www.youtube.com/@adrianvictor8", username: "@adrianvictor8" }, + bitview: { url: "https://www.bitview.net/user/tenkuma", username: "tenkuma" }, + modrinth: { url: "https://modrinth.com/user/tenkumabear", username: "tenkumabear" }, + xmpp: { url: "xmpp:adrianvictor@disroot.org", username: "adrianvictor@disroot.org" }, + email: "adrianvictor@disroot.org", + margarinaRecordsWebsite: "https://margarina-records.rf.gd", + genius: { url: "https://genius.com/tenkuma", username: "tenkuma" }, + homeVideoLink: "https://www.youtube.com/watch?v=6bnNAnSY9Uo", + homeVideoImage: "/thumbnails/fl_studio_linux.png", + homeVideoWebsite: "YouTube", + homeVideoDuration: "5:53", + homeSongTitle: "Velkommen", + homeSongLink: "https://margarina.bandcamp.com/album/velkommen", + homeSongImage: "/songs/velkommen.jpg", + homeSongWebsite: "Bandcamp", + homeSongDuration: "5:39", + homeSongAccent: "#482948" +}; + +module.exports = { + global: globalValues, + en: { + language: "english", + availableInOtherLanguages: "Also available in other languages", + pt: "portuguese", + en: "english", + home: "home", + welcome: "welcome", + homeWelcomeParagraph: "It seems that you have found my website! Hi, I am Adrian Victor (or tenkuma), a Brazilian guy who likes to mess around with computers, computer programs and enimatpyrtlyhtemids.", + socialsAndContact: "socials and contact", + aboutMe: "about me", + myMusic: "my music", + myVideos: "my videos", + mySoftware: "my software", + homeAboutMeParagraph: ` + My name is Adrian Victor, but I go by tenkuma on-line. I'm in high school's last year, also studying computing. My hobbies are music and music production, programming, selfhosting, Linux, and a lot more. + `, + homeAboutMeParagraphTwo: `Tenkuma, or 天くま in japanese, means celestial bear and was given by a friend of mine that I lost contact a long time ago. Sakata is gone, but the name stayed and turned into an integral part of my digital self.`, + homeSocialsAndContactParagraph: ` + I'm publicly available at Mastodon (${globalValues.mastodon.username}), + GitHub (${globalValues.github.username}), + Disroot Git (${globalValues.disrootGit.username}), + Discord (${globalValues.discord.username}), + YouTube (${globalValues.youtube.username}), + BitView (${globalValues.bitview.username}), + Modrinth (${globalValues.modrinth.username}) + and XMPP (${globalValues.xmpp.username}). + `, + homeSocialsAndContactParagraphTwo: `You can message me on my E-mail (${globalValues.email}) or feel free to get in touch through any of the other places mentioned above. For project-specific subjects, check for the project's contact field or if there's no such field add +projectname to my E-mail address (example: adrianvictor+coolproject@disroot.org).

+

Please, avoid reaching me through ways not mentioned above :)`, + homeMyMusicParagraph: `I've always loved music, and lately I've been finding music production very interesting. I publish my songs as tenkuma, and have founded an amateur label called Margarina Records with my friends.`, + homeMyMusicParagraphTwo: `You can find my latest on songs Genius.`, + homeMyVideoParagraph: "I make videos for my YouTube channel. Videos do not come regularly, there's no schedule—just a guy wanting to show something.", + homeMyVideoRandomVideoParagraph: "Here's a random video I'm proud of:", + homeVideoTitle: "Installing FL Studio on linux.", + homeMySoftwareParagraph: `I am studying computing at IFC (SC, Brazil) but in my free time I have some projects like computer applications, Minecraft plugins, Minecraft servers, etc... Anything that is public should be in my GitHub profile.`, + pestoWikiLogoAlt: "A digital drawing of the top of a fork with a black outline, in the right a text in white says 'Pesto Wiki'", + homeMySoftwareNotableProjects: "These are my most notable projects:", + blogTitle: "Listing blog posts:", + eyeofnemesisProjectDesctiption: "Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.", + jamfishProjectDesctiption: "Native music player for Android devices that connects to Jellyfin media servers. The code is based on Gelli's archived repository, which is based on an old version of Phonograph.", + pestoProjectDesctiption: "Multi-platform customizable client for wikis written in Python using PySide6 (QT).", + itemeconomyProjectDesctiption: "This PaperMC plugin integrates with VaultUnlocked to provide a unique, item-based economy system for your Minecraft server. Instead of relying solely on virtual balances, players use in-game items as physical currency, adding a layer of immersion and realism to your economy.", + by: "by", + back: "back", + hideBackground: "Hide background", + options: "Options", + alsoAvailableAsVideo: "Also available as video", + websiteDescription: "Personal website/blog of Adrian Victor.", + miscellaneous: "Miscellaneous", + i88x31hover: "Click to expand", + lastEditedIn: "last edited in", + permissionIssue: "Permission issue", + permissionIssueNotificationContent: "Unable to continue playing background music, please enable audio autoplay for this website.", + notificationDefaultHint: "Click to dismiss" + + }, + pt: { + language: "português", + availableInOtherLanguages: "Também disponível em outros idiomas", + pt: "português", + en: "inglês", + home: "início", + welcome: "bem-vindo", + homeWelcomeParagraph: "Parece que você encontrou meu website! Olá, sou Adrian Victor (ou tenkuma), um cara brasileiro que gosta de mexer com computadores, programas de computadores e enimatpirtlitemídios.", + socialsAndContact: "redes sociais e contato", + aboutMe: "sobre mim", + myMusic: "música", + myVideos: "vídeos", + mySoftware: "software", + homeAboutMeParagraph: ` + Meu nome é Adrian Victor, mas on-line eu uso o nickname tenkuma. Estou no último ano do ensino médio e estudo informática. Meus hobbies são escutar e produzir música, programação, selfhosting, Linux, e muito mais. + `, + homeAboutMeParagraphTwo: `Tenkuma, ou 天くま em japonês, significa urso celestial e foi um nome dado a mim por um amigo que eu já perdi contato há muito tempo. Sakata se foi, mas o nome ficou e se tornou parte integral da personalidade do meu eu digital até hoje.`, + homeSocialsAndContactParagraph: ` + Estou publicamente disponível no Mastodon (${globalValues.mastodon.username}), + GitHub (${globalValues.github.username}), + Disroot Git (${globalValues.disrootGit.username}), + Discord (${globalValues.discord.username}), + YouTube (${globalValues.youtube.username}), + BitView (${globalValues.bitview.username}), + Modrinth (${globalValues.modrinth.username}) + e XMPP (${globalValues.xmpp.username}). + `, + homeSocialsAndContactParagraphTwo: `Você pode enviar um correio eletrônico para (${globalValues.email}) ou me contactar por qualquer outro meio citado acima. Para assuntos relativos a projetos específicos, verifique o campo de contato do projeto, caso não haja um adicione +nomedoprojeto ao meu endereço de E-mail (exemplo: adrianvictor+projetolegal@disroot.org).`, + homeMyMusicParagraph: `Sempre amei música, e tenho achado produção musical algo muito interessante ultimamente. Publico minhas músicas como tenkuma, junto com meus amigos formei a Margarina Records—uma label amadora.`, + homeMyMusicParagraphTwo: `Você pode conferir minhas músicas mais recentes no meu perfil do Genius.`, + homeMyVideoParagraph: "Eu faço vídeos para o meu canal do YouTube. Não posto regularmente; não tem calendário—apenas eu mostrando alguma coisa em vídeo.", + homeMyVideoRandomVideoParagraph: "Aqui está um vídeo aleatório que eu me orgulho de ter postado:", + homeVideoTitle: "Como instalar o FL Studio no Linux?", + homeMySoftwareParagraph: `Estou estudando informática no IFC (SC, Brazil) mas no meu tempo livre tenho projetos como programas de computador, plugins para Minecraft, servidores Minecraft, etc... Todos meus projetos públicos estão disponíveis no meu perfil do GitHub.`, + pestoWikiLogoAlt: "Um desenho digital do topo de um garfo com uma borda preta, à direita um texto branco diz 'Pesto Wiki'", + homeMySoftwareNotableProjects: "Esses são meus projetos mais notáveis:", + blogTitle: "Listando postagens do blog:", + eyeofnemesisProjectDesctiption: "Eye of Nemesis é um plugin que permite aos administradores de servidores escrever políticas que negarão ou permitirão (lista negra/branca) que os jogadores façam coisas específicas com base no valor dos nós.", + jamfishProjectDesctiption: "Reprodutor de música nativo para dispositivos Android que se conecta a servidores de mídia Jellyfin. O código é baseado no repositório arquivado do Gelli, que por sua vez se baseia em uma versão antiga do Phonograph.", + pestoProjectDesctiption: "Cliente personalizável multiplataforma para wikis escrito em Python usando PySide6 (QT).", + itemeconomyProjectDesctiption: "Este plugin PaperMC integra-se ao VaultUnlocked para fornecer um sistema de economia único baseado em itens para o seu servidor Minecraft. Em vez de depender apenas de saldos virtuais, os jogadores usam itens do jogo como moeda física, adicionando uma camada de imersão e realismo à sua economia.", + by: "por", + back: "voltar", + hideBackground: "Esconder imagem de fundo", + options: "Opções", + alsoAvailableAsVideo: "Também disponível em vídeo", + websiteDescription: "Website/blog pessoal de Adrian Victor.", + miscellaneous: "Miscelâneo", + i88x31hover: "Clique para expandir", + lastEditedIn: "editado por último em", + permissionIssue: "Problema de permissão", + permissionIssueNotificationContent: "Não foi possivel continuar tocando a música de fundo, por favor habilite reprodução automática de áudio para esse website.", + notificationDefaultHint: "Clique para ignorar" + } +}; \ No newline at end of file diff --git a/_data/languages.js b/_data/languages.js new file mode 100644 index 0000000..322d425 --- /dev/null +++ b/_data/languages.js @@ -0,0 +1 @@ +module.exports = ["en", "pt"]; \ No newline at end of file diff --git a/_includes/base.njk b/_includes/base.njk new file mode 100644 index 0000000..28fb5d7 --- /dev/null +++ b/_includes/base.njk @@ -0,0 +1,61 @@ + + + + + + + Adrian Victor{% if pageTitle or postTitle %} - {{ pageTitle or postTitle }}{% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + {% include "header.njk" %} +
+ {{ content | safe }} +
+
+ + \ No newline at end of file diff --git a/_includes/header.njk b/_includes/header.njk new file mode 100644 index 0000000..29d6f22 --- /dev/null +++ b/_includes/header.njk @@ -0,0 +1,27 @@ +
+
+

{{ title or "Adrian Victor" }}

+ {{ subtitle or "Fanasy is not a crime, find your castle in the sky." }} + +
+
+
+ + +
+
\ No newline at end of file diff --git a/_includes/macros.njk b/_includes/macros.njk new file mode 100644 index 0000000..eaeec1b --- /dev/null +++ b/_includes/macros.njk @@ -0,0 +1,43 @@ +{% macro i88x31(link) %} + +{% endmacro %} + +{% macro videoCard(videoLink, videoTitle, videoImage, videoWebsite, videoDuration, videoAccent) %} +
+
+ +
+ +
+ {#

{{ i18n[langKey].alsoAvailableAsVideo }}:

#} +

+ {{ videoTitle }} +

+

{{ videoWebsite }}{% if videoDuration %} ({{ videoDuration }}){% endif %}

+
+ {#

ir

#} +
+
+
+
+{% endmacro %} + +{% macro projectCard(projectName, projectDescription, projectLink, projectImage, projectImageAlt) %} +
+
+
+ {{ projectImageAlt or projectName }} +
+ + + +
+
+

{{ projectDescription }}

+
+
+{% endmacro %} \ No newline at end of file diff --git a/_includes/post.11tydata.js b/_includes/post.11tydata.js new file mode 100644 index 0000000..c45c03e --- /dev/null +++ b/_includes/post.11tydata.js @@ -0,0 +1,3 @@ +module.exports = { + langKey: data => data.lang +}; \ No newline at end of file diff --git a/_includes/post.njk b/_includes/post.njk new file mode 100644 index 0000000..2f68554 --- /dev/null +++ b/_includes/post.njk @@ -0,0 +1,30 @@ +--- +layout: base.njk +title: Adrian Victor:Blog +--- +{% set altLanguages = collections.post | alternateLanguages(postId, langKey) %} +{% from "macros.njk" import videoCard with context %} + +
+
+
+

{{ postTitle }}

+

{{ authors or "Adrian Victor" }} - {{ date | postDate }}{% if lastModified | postDate !== date | postDate %} ({{ i18n[langKey].lastEditedIn }} {{ lastModified | postDate }}){% endif %}

+ {% if altLanguages.length > 0 %} + {{ i18n[langKey].availableInOtherLanguages }}: + {% for alt in altLanguages %} +
  • + + {{ i18n[alt.lang].language }} + +
  • + {% endfor %} + {% endif %} +
    + {% if postVideoLink and postVideoImage and postVideoTitle and postVideoWebsite %} + {{ videoCard(postVideoLink, postVideoTitle, postVideoImage, postVideoWebsite, postVideoDuration) }} + {% endif %} + + {{ content | safe }} +
    +
    \ No newline at end of file diff --git a/blog.njk b/blog.njk new file mode 100644 index 0000000..bc9c94b --- /dev/null +++ b/blog.njk @@ -0,0 +1,25 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/blog/index.html" +layout: base.njk +title: Adrian Victor:Blog +--- + +
    +

    {{ i18n[langKey].blogTitle | smartTitle }}

    + +
    \ No newline at end of file diff --git a/docs/README/index.html b/docs/README/index.html deleted file mode 100644 index 7176c98..0000000 --- a/docs/README/index.html +++ /dev/null @@ -1,27 +0,0 @@ -

    Adrian Victor

    -

    Forgejo Pages Build and Deploy -Github Pages Build -pages-build-deployment

    -

    My personal static website/blog built with Eleventy.

    -

    -

    Mirrors

    - -

    Interesting features

    - -

    Features that are not interesting at all

    - diff --git a/docs/en/blog/index.html b/docs/en/blog/index.html deleted file mode 100644 index 50692e1..0000000 --- a/docs/en/blog/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Listing Blog Posts:

    - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/en/index.html b/docs/en/index.html deleted file mode 100644 index 8f74ddf..0000000 --- a/docs/en/index.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    Welcome

    -

    It seems that you have found my website! Hi, I am Adrian Victor (or tenkuma), a Brazilian guy who likes to mess around with computers, computer programs and enimatpyrtlyhtemids.

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    About Me

    -

    - My name is Adrian Victor, but I go by tenkuma on-line. I'm in high school's last year, also studying computing. My hobbies are music and music production, programming, selfhosting, Linux, and a lot more. -

    -

    Tenkuma, or 天くま in japanese, means celestial bear and was given by a friend of mine that I lost contact a long time ago. Sakata is gone, but the name stayed and turned into an integral part of my digital self.

    - -

    Socials and Contact

    -

    - I'm publicly available at Mastodon (@tenkuma@mstdn.social), - GitHub (adrianvic), - Disroot Git (adrianvictor), - Discord (@adrianvic), - YouTube (@adrianvictor8), - BitView (tenkuma), - Modrinth (tenkumabear) - and XMPP (adrianvictor@disroot.org). -

    -

    You can message me on my E-mail (adrianvictor@disroot.org) or feel free to get in touch through any of the other places mentioned above. For project-specific subjects, check for the project's contact field or if there's no such field add +projectname to my E-mail address (example: adrianvictor+coolproject@disroot.org).

    -

    Please, avoid reaching me through ways not mentioned above :)

    -
    - -
    -
    -

    My Music

    -

    I've always loved music, and lately I've been finding music production very interesting. I publish my songs as tenkuma, and have founded an amateur label called Margarina Records with my friends.

    -

    You can find my latest on songs Genius.

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    My Videos

    -

    I make videos for my YouTube channel. Videos do not come regularly, there's no schedule—just a guy wanting to show something.

    -
    - -
    - - - - -
    - -
    -
    -

    My Software

    -

    I am studying computing at IFC (SC, Brazil) but in my free time I have some projects like computer applications, Minecraft plugins, Minecraft servers, etc... Anything that is public should be in my GitHub profile.

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    Native music player for Android devices that connects to Jellyfin media servers. The code is based on Gelli's archived repository, which is based on an old version of Phonograph.

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    This PaperMC plugin integrates with VaultUnlocked to provide a unique, item-based economy system for your Minecraft server. Instead of relying solely on virtual balances, players use in-game items as physical currency, adding a layer of immersion and realism to your economy.

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    Multi-platform customizable client for wikis written in Python using PySide6 (QT).

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/en/misc/88x31/index.html b/docs/en/misc/88x31/index.html deleted file mode 100644 index aa1e20e..0000000 --- a/docs/en/misc/88x31/index.html +++ /dev/null @@ -1,3093 +0,0 @@ - - - - - - - Adrian Victor - 88x31 - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    88x31

    -

    This is the collection of 88x31 GIFs and images I've downloaded across the web.

    -
    -
    -

    Made by me

    -
    - - - -
    -

    Others

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/en/misc/bookmarks/index.html b/docs/en/misc/bookmarks/index.html deleted file mode 100644 index 1fc3cbd..0000000 --- a/docs/en/misc/bookmarks/index.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    Bookmarks

    -

    A list of useful or cool websites/pages curated by me. Divided in sections for an easier navigation.

    - - - -
    -
    - -
    -

    Downloads

    - -
    - - - - - - - - - -
    - -
    - -
    -
    MalwareWatch
    -
    -
    - Enderman's website. Provides download to various useful softwares, operating system images and malware. -
    - -
    -
    -
    - -
    -
    Free Images
    -
    -
    - Search through millions of free stock photos, art and vector images. Every image is Public Domain or CC0. Free to Download and Free to Use. -
    - -
    -
    -
    - -
    -
    88x31
    -
    -
    - This website is a collection with over 6500 GIF's and PNG's in 88x31 format. In the late 1990 and begin of the 2000's it was very common to use these pictures on your personal website. -
    - - - - - - - - - - - -
    -
    -
    - -
    - -
    -

    Profiles

    - -
    - -
    -
    Mr. Nando
    -
    -
    - My friend Fernando, he makes music and YouTube videos of Minecraft and speedrun. -
    - -
    -
    -
    - -
    -
    Endermanch
    -
    -
    - Andrew is a software engineer, a malware enthusiast and most importantly, a weird tall creature. I've grown up with his videos and he's a great inspiration for me. -
    - -
    -
    -
    - -
    - -
    -

    Tools

    - -
    - -
    -
    Excalidraw
    -
    -
    - Whiteboard with no bloat. -
    - -
    -
    -
    - -
    -
    Postimages
    -
    -
    - Get permanent links of your images for forums, blogs, and social media. -
    - -
    -
    -
    - -
    -
    uBlock Origin
    -
    -
    - An efficient blocker for Chromium and Firefox. Fast and lean. -
    - - - - - - - -
    -
    -
    - -
    - -
    -

    Games

    - -
    - - - - - - - - - -
    - -
    - -
    -
    SteamGridDB
    -
    -
    - Download and share custom video game assets and personalize your gaming library. -
    - -
    -
    -
    - -
    - -
    -

    Music

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    CVGM Radio
    -
    -
    - Your home for video game, demo scene and computer related music. -
    - -
    -
    -
    - -
    - -
    -

    Piracy

    - -
    - - - - - -
    - -
    - -
    -
    Nyaa
    -
    -
    - A tracker of animes, mangas and related stuff. -
    - - - - - - - -
    -
    -
    - -
    -
    Lucida
    -
    -
    - With Lucida, you can download music directly from Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, and Yandex Music in high quality for free. No catches, no mandatory ads, no BS. How does it work? -
    - -
    -
    -
    - -
    -
    DoubleDouble
    -
    -
    - Download music directly from Amazon Music, Soundcloud, Qobuz, Deezer and Tidal for free. -
    - -
    -
    -
    - -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/en/misc/index.html b/docs/en/misc/index.html deleted file mode 100644 index b8cb8d9..0000000 --- a/docs/en/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Miscellaneous

    - -
      -
      - - - -
      - - 88x31 - -
      - -
      - - - My collection of 88x31 GIFs and images. -
      - - - -
      - - Bookmarks - -
      - -
      - - - My collection of interesting websites/pages. -
      - -
      -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/global/blog/index.html b/docs/global/blog/index.html deleted file mode 100644 index 5d1b59c..0000000 --- a/docs/global/blog/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    -
      - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/global/index.html b/docs/global/index.html deleted file mode 100644 index 49af188..0000000 --- a/docs/global/index.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    -

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    -

    -

    - -

    -

    -

    -
    - -
    -
    -

    -

    -

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    -

    -
    - -
    - - - - -
    - -
    -
    -

    -

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/global/misc/index.html b/docs/global/misc/index.html deleted file mode 100644 index 439ba1e..0000000 --- a/docs/global/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    - - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 13b0ed3..0000000 --- a/docs/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -

    Pick a language

    - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/posts/android-developer-verification/index.html b/docs/posts/android-developer-verification/index.html deleted file mode 100644 index b2d9d9b..0000000 --- a/docs/posts/android-developer-verification/index.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - Adrian Victor - On the Recent Changes to App Distribution Requirements in the Android System by Google. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    On the Recent Changes to App Distribution Requirements in the Android System by Google.

    -

    Adrian Victor - 8/29/2025 (last edited in 5/15/2026)

    - - Also available in other languages: - -
  • - - português - -
  • - - -
    - - -

    Recap

    - -

    Android is that open-source operating system that works well for users and is loved by developers. Always known for breaking barriers and being open, expandable, versatile, and even friendly to power users–something not every system dares to be (iOS, Windows Phone). For a long time, Android was seen this way compared to its competitors: a breath of fresh air against the abusive practices of companies like Apple. But it seems the Android we've nurtured for two decades no longer fits in the pockets of Google executives; it is too free, creating ethical and technical barriers to the profitable exploitation path adopted by its developer.

    - -

    What happened with Android?

    - -

    At the end of this month (August 2025), Google announced that starting September 2026, all apps installed on certified devices (those with Google Android and locked bootloader) will need to undergo a developer verification process. This process involves collecting personal data from the individual distributing the app, so they can be identified and held accountable for potential malicious activities related to their software. The same applies to companies, which must also pay a $25 USD fee. This process is mandatory even if the app is distributed outside Google's official stores, raising obvious concerns about user privacy and freedom.

    - -

    Implications, Justifications, and Motivations of the New Policy

    - -

    It is important to examine Google's justification and try to understand its true motivation behind this distribution policy. Let's start by analyzing Google's statement:

    - -
    "By making Android safer, we're protecting the open environment that allows developers and users to confidently create and connect. Android's new developer verification is an extra layer of security that deters bad actors and makes it harder for them to spread harm."
    - -

    They argue that the new rules are intended to improve user security, preventing malicious software from being installed on certified Android devices. Again, we see "security" used to justify controversial practices that limit the end user's control over their device. This was also the justification given for the proven abusive sideloading restrictions that led Google to lose a lawsuit against Epic Games—a more sophisticated version of the same issue is happening here.

    - -

    It is easy to sympathize with the company when the words are well-phrased, but as a user who loves alternative software outside the big tech ecosystem, I have seen enough examples of authority abuse to conclude that Google's recent actions are simply an attempt to regain part, if not all, of the control it had over Android devices before the previously mentioned case.

    - -

    One example is the kio-gdrive software, widely used to integrate Google Drive with the KDE file manager on Linux systems. The software was blocked from asking users if they authorized access to their Google Drive account. Instead of the permission popup, Google displayed a warning implying that the legitimate software could be malicious. Developers reported:

    - -
    "Google blocked us from using this back in June because we weren't able -justify our API usage to their satisfaction. As such, the permission is now blocked [...] mamaking 25% of the KAccounts KCM non-functional. Remove the gdrive permissions [...] for now so at least other Google things can work (at least in theory)."
    - -
    "It's beyond stupid (IMHO) if individual users can't indicate that they're fine with a particular piece of software accessing their supposedly sensitive data!"
    - -

    Although I couldn't find the exact internal conversations between developers—and I'm giving Google the benefit of the doubt—it is at least suspicious that Google did not agree that software performing its primary functions within Google Drive should have a valid reason to access it. This was not an isolated case; Google operates behind the scenes to control what happens on Android. For example, apps compiled for older system versions would show alarming security warnings because recent changes introduced more permission barriers, even though old apps didn't support them. A reasonable warning would emphasize that permissions must be granted to support optional features, but the actual messages were vague, conveniently scaring users attempting sideloading and helping maintain the Play Store monopoly.

    - -

    Speaking of alarming warnings, let's discuss Play Protect, software embedded in the Google Play Store that scans installed sideloaded apps and reports the results back to Google. At first glance, this is a good idea, assuming the user opts in. The problem arises when the difference between malware detection messages and warnings triggered by outdated software is unclear, causing two serious effects: it renders Google's protection service almost useless while maintaining the Play Store monopoly.

    - -

    Imagine sideloading for the first time: you try to install an old version of a favored software. You receive exaggerated warnings about the supposed dangers, abandon the installation, and install the latest version from the Play Store. Google thus indirectly forces more users to use its store, ensuring the lucrative 30% transaction fee.

    - -

    Now consider a second scenario: you're an advanced Android user who understands sideloading and loves installing open-source apps outside the Play Store. You click a suspicious link and download a malicious APK. Play Protect warns you during installation, but the warnings are so frequent and exaggerated (even when no malware is detected) that you ignore them out of habit. The result: malware on your device, and Play Protect was ineffective.

    - -

    Sometimes, downloading software outside the Play Store is the only option, because developers may not want to publish apps there—either for privacy reasons (developers must disclose personal data when publishing) or because of publishing fees, which may discourage donation—supported developers. Users must have the freedom to choose what runs on their devices.

    - -

    According to current information, developers don't have to make their data public if they avoid distributing apps via the Play Store. This is the least Google could do to make the new distribution policies fairer. Google also claims the verification isn't meant to inspect app content or purpose; it is supposedly only to block malware distribution. Whether this holds up remains to be seen, given it could also serve as a convenient tool for abuse of power.

    - -

    Next Steps

    - -

    We must watch how these policies are applied and how they affect the Android ecosystem. An inevitable consequence is that countless abandoned apps, perfectly functional without the new requirements, will disappear overnight. Not all old software connects to the internet, and not all represents a constant threat. Google is taking away the option for experienced users to take responsibility and say: "I know what I'm doing!", treating us as if they know what's best for everyone.

    - -

    The commercial Android on phones is based on the AOSP, meaning Android's core remains open, and Google hasn't taken that from users yet. I plan to write another post explaining how to regain control of your device through system modifications, from the simplest, safest, most stable methods to advanced approaches, if you feel confident.

    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/posts/instalando-fl-studio-no-linux/index.html b/docs/posts/instalando-fl-studio-no-linux/index.html deleted file mode 100644 index 72006e8..0000000 --- a/docs/posts/instalando-fl-studio-no-linux/index.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - Adrian Victor - Instalando FL Studio no Linux. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Instalando FL Studio no Linux.

    -

    Adrian Victor - 4/19/2026 (editado por último em 5/15/2026)

    - - Também disponível em outros idiomas: - -
  • - - english - -
  • - - -
    - - - - - - -

    Prólogo

    -

    Desde que mudei permanentemente para o Linux em 2024, venho me impressionando com a capacidade inabalável da comunidade open-source de trazer a vida no Linux softwares complexos feitos originalmente para Windows. Entretanto, um dos programas amaldiçoados com os mais ímpetos e abstratos erros na velha guarda do Wine é o FL Studio, caracteristica essa que fez com que eu, por muito tempo, achasse que a DAW da Image-Line não iria rodar de jeito nenhum no sistema do penguim.

    -

    Acontece que o FL roda no Linux, e roda muito bem, considerando a sua complexidade. Descartando uns problemas visuais, algumas VSTs que simplesmente não rodam e uma gambiarra para rodar plugins 32-bits, a experiência de usar o FL Studio no Linux é bem sólida. Parece que a Valve, Wine e comunidade open-source não estão para brincadeira mesmo.

    -

    Antes de ir às formalidades, gostaria de definir o escopo desse tutorial. Faço ele com tudo o que cabe na minha memória recente trabalhando com o FL no Linux. Mas também não é uma postagem estática; se estiver faltando alguma coisa me mande um e-mail e eu atualizo.

    - -

    Preparativos

    -

    O tutorial vai ser feito usando o Arch Linux em um computador com o conjunto de Intel i5-1235U + 16gb de RAM. Porém, vale ressaltar que, pela natureza do flatpak, o tutorial se aplica a qualquer máquina com o gerenciador de pacotes instalado.

    -

    O primeiro passo é instalar o software Bottles, que está disponível com o nome de com.usebottles.bottles no Flathub. O comando mais simples para instalar o app em um sistema com acesso ao Flathub (habilitado por padrão na maioria das distros, como na minha) é flatpak install bottles. Se você não é muito fã de rodar comandos, a maioria das lojas de apps no Linux baixam flatpaks e já vem com o Flathub habilitado—e saiba que essa é a última vez que vamos rodar comandos.

    -

    Se você não é fã do Flatpak, há um pacote do bottles no AUR. Pelo que eu entendi tem até uns desenvolvedores do Bottles envolvidos na manutenção desse pacote.

    -

    Depois disso, crie uma nova garrafa no Bottles. Eu recomendo criar uma no preset de jogos, já que o FL é meio visualmente complexo.

    -

    Por fim, antes da instalação, vamos instalar as dependências, que ficam acessíveis por um botão de mesmo nome nas opções da garrafa. O FL Studio possui apenas duas dependências opcionais:

    -
    -
    allfonts
    -
    Fontes da Microsoft e Adobe, ajuda com alguns problemas relacionados a exibição de texto no FL. Eu geralmente não preciso instalar, mas já experienciei as teclas do piano roll sem legenda pela falta dessa dependência.
    -
    webview2
    -
    Necessário para o funcionamento do FL Cloud, Gopher (IA), Help Manual e talvez mais alguma outra função do FL que puxa um webview. Recomendo não instalar essa dependência se você não usa nenhuma dessas funções, porque sem ela reparei em um ganho de performance.
    -
    -

    Estamos prontos para partir para a instalação da DAW.

    - -

    Instalando o FL Studio

    -

    O Bottles já oferece um pacote de instalação do FL na página da garrafa, basta clicar em Instalar Programas e pesquisar por FL Studio. Porém, esse método de instalação não funcionou para mim, o instalador travou nas dependências. Creio que, se você tiver sucesso na sua instalação, o resultado vai ser o mesmo que fazendo o que eu vou descrever abaixo.

    -

    Primeiro, obtenha um instalador do FL Studio, caso já não tenha. A Image-Line oferece um instalador em seu website.

    -

    Com o instalador em mãos, basta usar o botão "Iniciar executável..." na página da garrafa e selecionar o seu instalador. Em alguns instantes você deve estar na instalação do FL Studio.

    -

    Se tudo ocorrer direito, a DAW recém instalada deve aparecer na lista de aplicativos com o nome "FL64". Você já pode iniciar ela.

    - -

    Configuração Inicial

    -

    Ao abrir o FL Studio pela primeira vez, você provavelmente vai se deparar com uma tela de erro dizendo "The MIDI input device is already allocated. It may be in use by another application.", ignore os erros, e no menu de baixo escrito "Input", desabilite as entradas que tem a etiqueta FAIL.

    -

    Por mais que eu adoraria dizer que o FL Studio funciona perfeitamente no Linux, estamos trabalhando em um ambiente não suportado pela Image-Line e certamente mais instável do que seus sistemas nativos. Portanto, recomendo que habilite a opção de salvamento automático no modo mais agressivo.

    - -

    Trabalhando com VSTs

    -

    Os plug-ins de produção musical são a maior fonte de incompatibilidades no nosso ambiente, mas isso não significa que a maioria não funciona fora da caixa.

    -

    Além dos que não funcionam, e, potencialmente, travam o seu FL Studio, há os plugins que não se comportam direito, como é o exemplo do Antares Auto-Tune Pro que funciona perfeitamente—dada a excessão de que a interface e animações ficam estranhas e travadas. Acho que isso se dá e repete em tantos plugins porque os frameworks usados para fazer suas interfaces funcionam de alguma forma bizarra que o Soda não é otimizado para rodar.

    -

    De qualquer forma, quanto a esses plugins teimosos, as únicas recomendações que eu tenho para mitigar o problema são evitar ao máximo deixá-los abertos enquanto faz outras coisas, e—se possível—usar alternativas que tem mais bom senso no quesito interface.

    -

    VSTs 32bits

    -

    Agora que o FL Studio está funcionando, você pode tentar abrir alguma VST de 32bits, e, fazendo isso, ver que ela provavelmente vai congelar a DAW.

    -

    Se você por acaso congelar sem o devido backup em um projeto importante, ao invés de fechar o FL Studio, você pode usar seu gerenciador de tarefas para matar o processo ILBridge.exe. Esse é o processo que trava a DAW quando você tenta carregar um plugin de 32bits, é a ponte que faz ele funcionar no FL Studio de 64bits—quando interrompido, a DAW exibe um erro sobre não conseguir carregar o plugin e volta ao normal.

    -

    Mas existe sim uma forma de rodar plugins 32bits. Adicione um Fruity Wrapper no lugar do plugin que você quer adicionar, mude para a aba de opções do mesmo e deixe ele assim. Agora clique com o botão direito no gerador/efeito que você acabou de adicionar e substitua-o pelo plugin desejado. A página de opções deve carregar. Clique no botão escrito "Processing" e marque "External window".

    -

    Pronto, o plugin deve aparecer em uma janela separada do FL Studio e estar funcionando como esperado.

    - -

    Menções Honrosas

    -

    Abaixo estão alguns ressaltes que vale a pena saber:

    -

    Discos Virtuais

    -

    O Bottles usa uma versão própria do Wine chamada Soda, mas no fundo, no fundo mesmo, ainda é o Wine. Portanto, você pode se beneficiar das configurações de discos virtuais do Wine. Nas opções da garrafa, ao expandir o submenu "Ferramentas Legado do Wine", você encontra a opção "Configuração". Ao clicar nessa, um menu de aparência pré-histórica vai aparecer, no topo você pode ver uma aba nomeada "Unidades". Aí você pode mapear diferentes unidades do Windows para locais do seu sistema Linux, e eles vão aparecer no explorador de arquivos do Wine e estarão acessíveis para os aplicativos.

    -

    Aceleração de Hardware

    -

    Se o seu FL Studio estiver rodando terrivelmente mal, recomendo que dê uma olhada na opção "Use placa gráfica dedicada" da sua garrafa, com ela desativada a minha DAW trava incessantemente.

    - -

    Conclusões

    -

    Não sou a pessoa mais apta para dizer até onde a usabilidade da DAW se extende no Linux; não sou nem de longe um usuário avançado do FL. Mas, a título de informação, consegui produzir a faixa Velkommen inteiramente no sistema do penguim e não tenho a intenção de voltar para o Windows.

    -

    É mesmo inconveniente quando um plugin ou outro não funciona, quando eu tenho que criar um Fruity Wrapper antes de usar um plugin 32bits, ou quando eu penso que talvez a DAW possa performar um pouco melhor nativamente no Windows. Porém, para mim, é um preço muito justo a se pagar para misturar nas minhas músicas um pouco desse suco de ideologia que é me desafiar a não usar o sistema da Microsoft.

    -

    Espero que você também encontre esse conforto—não na conveniência, mas em desafiar o molde com intenção. Excentricidade digna de um artista.

    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/posts/installing-fl-studio-on-linux/index.html b/docs/posts/installing-fl-studio-on-linux/index.html deleted file mode 100644 index 8491c89..0000000 --- a/docs/posts/installing-fl-studio-on-linux/index.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - Adrian Victor - Installing FL Studio on linux. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Installing FL Studio on linux.

    -

    Adrian Victor - 4/19/2026 (last edited in 5/15/2026)

    - - Also available in other languages: - -
  • - - português - -
  • - - -
    - - -

    Prologue

    -

    Since I permanently moved to Linux in 2024, I have been impressed by the unwavering ability of the open-source community to bring to life in Linux complex software originally made for Windows. However, one of the programs cursed with the most stubborn and abstract errors in the old guard of Wine is FL Studio, a characteristic that made me, for a long time, think that Image-Line's DAW would not run at all on the penguin's system.

    -

    It turns out that FL runs on Linux, and runs very well, considering its complexity. Disregarding some visual problems, some VSTs that simply don't run, and a workaround to run 32-bit plugins, the experience of using FL Studio on Linux is quite solid. It seems that Valve, Wine, and the open-source community are not messing around.

    -

    Before getting into the formalities, I would like to define the scope of this tutorial. I'm making it with everything that fits in my recent memory working with FL on Linux. But it's also not a static post; if something is missing, send me an email and I'll update it.

    - -

    Preparations

    -

    The tutorial will be done using Arch Linux on a computer with an Intel i5-1235U + 16GB of RAM setup. However, it's worth noting that, due to the nature of flatpak, the tutorial applies to any machine with the package manager installed.

    -

    The first step is to install the Bottles software, which is available under the name com.usebottles.bottles on Flathub. The simplest command to install the app on a system with access to Flathub (enabled by default on most distros, like mine) is flatpak install bottles. If you're not a fan of running commands, most app stores on Linux download flatpaks and come with Flathub already enabled—and know that this is the last time we'll run any command.

    -

    If you're not a fan of Flatpak, there's a Bottles package in the AUR. From what I understand, there are even some Bottles developers involved in maintaining that package.

    -

    After that, create a new bottle in Bottles. I recommend creating one in the games preset, since FL is somewhat visually complex.

    -

    Finally, before installation, let's install the dependencies, which are accessible through a button of the same name in the bottle's options. FL Studio has only two optional dependencies:

    -
    -
    allfonts
    -
    Microsoft and Adobe fonts, helps with some text display issues in FL. I generally don't need to install it, but I have experienced unlabeled piano roll keys due to the lack of this dependency.
    -
    webview2
    -
    Necessary for FL Cloud, Gopher (AI), Help Manual, and possibly some other FL functions that pull a webview. I recommend not installing this dependency if you don't use any of these functions, because without it I noticed a performance gain.
    -
    -

    We're ready to proceed with installing the DAW.

    - -

    Installing FL Studio

    -

    Bottles already offers an FL installation package on the bottle's page, just click on Install Programs and search for FL Studio. However, this installation method didn't work for me; the installer froze on the dependencies. I believe that if you're successful with your installation, the result will be the same as what I'm about to describe below.

    -

    First, get an FL Studio installer, if you don't already have one. Image-Line offers an installer on its website.

    -

    With the installer in hand, just use the "Run executable..." button on the bottle's page and select your installer. In a few moments you should be in the FL Studio installation.

    -

    If everything goes right, the newly installed DAW should appear in the applications list with the name "FL64". You can already start it.

    - -

    Initial Configuration

    -

    When you open FL Studio for the first time, you'll probably come across an error screen saying "The MIDI input device is already allocated. It may be in use by another application.", ignore the errors, and in the menu at the bottom labeled "Input", disable the inputs that have the FAIL label.

    -

    Much as I would love to say that FL Studio works perfectly on Linux, we're working in an environment not supported by Image-Line and certainly more unstable than its native systems. Therefore, I recommend that you enable the autosave option in the most aggressive mode.

    - -

    Working with VSTs

    -

    Music production plugins are the biggest source of incompatibilities in our environment, but that doesn't mean that the majority don't work out of the box.

    -

    Beyond those that don't work, and potentially crash your FL Studio, there are plugins that don't behave right, like the example of Antares Auto-Tune Pro which works perfectly—given the exception that the interface and animations work strange and sluggish. I think this happens and repeats in so many plugins because the frameworks used to make their interfaces work somehow bizarrely that Soda is not optimized to run.

    -

    In any case, as for these stubborn plugins, the only recommendations I have to mitigate the problem are to avoid leaving them open as much as possible while doing other things, and—if possible—use alternatives that have more sense when it comes to interface.

    - -

    32-bit VSTs

    -

    Now that FL Studio is working, you can try to open a 32-bit VST, and, doing so, see that it will probably freeze the DAW.

    -

    If you happen to freeze without proper backup on an important project, instead of closing FL Studio, you can use your task manager to kill the ILBridge.exe process. This is the process that freezes the DAW when you try to load a 32-bit plugin; it's the bridge that makes it work in 64-bit FL Studio—when interrupted, the DAW displays an error about not being able to load the plugin and returns to normal.

    -

    But there is indeed a way to run 32-bit plugins. Add a Fruity Wrapper in place of the plugin you want to add, switch to its options tab and leave it like that. Now right-click on the generator/effect you just added and replace it with the desired plugin. The options page should load. Click on the button labeled "Processing" and check "External window".

    -

    Done, the plugin should appear in a separate window from FL Studio and be working as expected.

    - -

    Honorable Mentions

    -

    Below are some highlights worth knowing:

    - -

    Virtual Drives

    -

    Bottles uses its own version of Wine called Soda, but deep down, it's still Wine. Therefore, you can benefit from Wine's virtual drive settings. In the bottle's options, when expanding the "Legacy Wine Tools" submenu, you'll find the "Configuration" option. When you click on it, a prehistoric-looking menu will appear; at the top you can see a tab named "Drives". There you can map different Windows drives to locations on your Linux system, and they will appear in the Wine file explorer and be accessible to applications.

    - -

    Hardware Acceleration

    -

    If your FL Studio is running terribly, I recommend that you take a look at the "Use dedicated graphics card" option of your bottle, with it disabled my DAW freezes incessantly.

    - -

    Conclusions

    -

    I'm not the most apt person to say how far the DAW's usability extends on Linux; I'm far from an advanced FL user. But, for your information, I was able to produce the track Velkommen entirely on the penguin's system and have no intention of going back to Windows.

    -

    It's really inconvenient when one plugin or another doesn't work, when I have to create a Fruity Wrapper before using a 32-bit plugin, or when I think that maybe the DAW could perform a little better natively on Windows. However, for me, it's a very fair price to pay to mix into my music a little bit of that ideology juice that is challenging myself not to use Microsoft's system.

    -

    I hope you also find that comfort—not in convenience, but in challenging the mold with intention. Eccentricity worthy of an artist.

    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/posts/verificacao-de-desenvolvedor-no-android/index.html b/docs/posts/verificacao-de-desenvolvedor-no-android/index.html deleted file mode 100644 index 7ec775a..0000000 --- a/docs/posts/verificacao-de-desenvolvedor-no-android/index.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - Adrian Victor - Sobre as recentes mudanças nos requisitos de distribuição de apps no sistema Android feitas pela Google. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Sobre as recentes mudanças nos requisitos de distribuição de apps no sistema Android feitas pela Google.

    -

    Adrian Victor - 8/29/2025 (editado por último em 5/15/2026)

    - - Também disponível em outros idiomas: - -
  • - - english - -
  • - - -
    - - -

    Recapitulando

    - -

    Android é aquele sistema operacional open-source que funciona bem para os usuários, e que os desenvolvedores amam. Sempre conhecido por quebrar barreiras e por ser aberto, expansível, versátil e até amigável com os mais nerds, coisa que nem todo sistema tem a cara e coragem de ser (iOS, Windows Phone). É assim que, por muito tempo, o Android foi visto em relação aos seus concorrentes: Um suspiro de ar puro em relação às práticas abusivas de empresas como a Apple. Mas parece que o Android que cultivamos por duas décadas não cabe mais no bolso dos executivos da Google, é livre demais, e isso criou barreiras éticas e técnicas no lucrativo caminho de exploração adotado pela sua desenvolvedora.

    - -

    O que aconteceu com o Android?

    - -

    A Google anunciou no final deste mês (Agosto de 2025) que a partir de Setembro de 2026 todos os apps instalados em dispositivos certificados (aqueles com o Android da Google e de bootloader bloqueado) precisarão passar pelo processo de verificação de desenvolvedor, processo cujo consiste da coleta de dados pessoais do indivíduo que vai distribuir a aplicação para que o mesmo possa ser identificado e atribuído a possíveis atividades maliciosas relacionadas ao seu software, o mesmo vale para empresas, que além disso precisam pagar uma taxa de 25 USD. O processo é forçado e necessário mesmo com a distribuição do app sendo feita fora das lojas oficiais da Google, o que trouxe óbvias preocupações sobre privacidade e liberdade dos usuários do sistema.

    - -

    As implicações, justificativas e motivações da nova política

    - -

    É importante analisar a justificativa e tentar entender a real motivação que a Google teve ao criar tal política de distribuição. Portanto começamos analisando a fala da Google:

    - -
    "Para tornar o Android mais seguro, estamos protegendo o ambiente aberto que permite que desenvolvedores e usuários criem e se conectem com confiança. A nova verificação de desenvolvedor do Android é uma camada que detém atores maliciosos e faz com que seja mais difícil para que eles espalhem o mau."
    - -

    Ela argumenta que as novas regras do sistema foram feitas com a intenção de aprimorar a segurança do usuário, evitando que software malicioso seja instalado em dispositivos Android certificados. Outra vez vemos segurança sendo usada como forma de justificar práticas controversas que limitam o poder do usuário final no seu próprio dispositivo. Essa também era a justificativa dada para a prática comprovadamente abusiva de bloqueio de sideloading de apps que levou a Google a perder seu caso no tribunal contra a empresa Epic Games, aqui vemos uma versão mais sofisticada da mesma.

    - -

    É fácil simpatizar com a empresa quando as palavras são bem colocadas, mas como usuário ávido de softwares alternativos aos das big-techs, eu já vi exemplos de abuso de autoridade suficientes para concluir que as recentes ações da Google não passam de uma forma de recuperar parte, se não todo o controle que ela tinha sobre os dispositivos Android antes do caso mencionado anteriormente.

    - -

    Um exemplo desses abusos é o caso do software kio-gdrive, que era amplamente utilizado para integrar o Google Drive ao explorador de arquivos do KDE, um ambiente para sistemas Linux. O software foi bloqueado de perguntar para os usuários se eles autorizavam o acesso a sua conta do Google Drive, no lugar do popup de permissão, a Google colocou um aviso informando os usuários que o software legítimo poderia ser malicioso, seguem os relatos dos desenvolvedores:

    - -
    "Google bloqueou o nosso acesso a essa função em junho porque não conseguimos explicar o nosso uso da API de forma que eles julgam satisfatória. Por causa disso o sistema de permissões agora está bloqueado [...] tornando 25% das KAccounts KCM não funcionais. Remova as permissões [...] para que pelo menos o restante das integrações funcione (pelo menos em teoria)."
    - -
    "É mais que estúpido (na minha humilde opinião) usuários individuais não poderem indicar que eles concordam com um software específico acessando seus dados supostamente sensíveis!"
    - -

    Por mais que durante minhas pesquisas eu não tenha achado exatamente quais conversas foram trocadas pelo time de desenvolvedores—e com isso estou dando um grande benefício da dúvida para a Google—, é no mínimo suspeito que a Google não tenha concordado que um software que exerce suas funções primárias dentro do ambiente do Google Drive tem um motivo válido para usufruir do mesmo. Esse não foi um caso único, a Google age nas entrelinhas para controlar o que acontece ou não no Android, como quando apps compilados para versões mais antigas do sistema mostravam um aviso assustador sobre segurança pois mudanças recentes haviam colocado mais barreiras no sistema de permissões, porém os apps antigos não tinham suporte a elas. Um aviso sobre as permissões que seriam dadas ao aplicativo instalado, enfatizando que elas teriam que ser dadas ao aplicativo por ele não suportar as permissões opcionais é razoável, entretanto a mensagem exibida foi bem mais vaga do que deveria ser, o que convenientemente serviu para assustar os usuários que experimentavam sideloading e ajudou a manter o monopólio da Google Play Store.

    - -

    Falando em avisos assustadores, chegou a hora de falar do Play Protect, um software embutido na Google Play Store que escaneia os apps instalados no seu dispositivo via sideloading e retorna o resultado para a base de dados da Google, uma ideia boa a primeira vista, levando em conta que a empresa respeita a escolha do usuário com o modelo opt-in, questionando o mesmo se ele gostaria de enviar seus apps instalados para a análise. O grande problema aparece quando a diferença entre as mensagens de detecção de malware e as que são acionadas pelo simples fato do software estar desatualizado é tão turva que causa dois efeitos graves, que juntos tornam o serviço de proteção da Google praticamente inútil para o usuário, enquanto mantém o monopólio da Google.

    - -

    Suponhamos que você está experimentando sideloading pela primeira vez: você tenta instalar uma versão antiga de um software que você gosta. Você recebe a mensagem exacerbada sobre os supostos perigos de instalar o software desatualizado, desiste da instalação e instala a versão atual pela Google Play Store. Assim a Google força, mesmo que indiretamente, mais um usuário a usar sua loja, garantindo os lucrativos 30% de taxa nas transações dos apps.

    - -

    Agora apresento um segundo cenário hipotético: você é um usuário mais avançado do sistema Android que tem total noção do que se trata o sideloading e adora instalar seus aplicativos de código aberto por fora da Play Store. Porém você clica em um link duvidoso e baixa um arquivo APK malicioso. Na hora de instalar você recebe o aviso do Play Protect, mas ele é tão frequente e exagerado (até mesmo quando nenhum malware foi detectado) que você acaba dispensando-o por já estar acostumado a ter que fazer isso (isso quando o usuário já não desativou ele nas configurações da Play Store). Agora o usuário tem um malware em seu dispositivo, o Play Protect foi inútil.

    - -

    Em certas situações baixar um software por fora da loja da Google é a única opção, pois existem casos onde o desenvolvedor não quer publicar seu app na Play Store, tanto por questões de privacidade—já que os desenvolvedores são forçados a revelar certos dados pessoais para o público quando publicam seus apps—, quanto pela taxa imposta na publicação e vendas internas do aplicativo, que pode afastar desenvolvedores sustentados puramente por doações dos usuários. Pouco importa o motivo, os usuários devem ser livres para escolher o que roda em seus dispositivos.

    - -

    De acordo com as informações disponibilizadas até agora, os desenvolvedores não precisarão tornar seus dados públicos caso optem por não distribuir sua aplicação na Play Store, e isso é o mínimo que a Google poderia fazer para tornar as novas políticas de distribuição mais justas para os desenvolvedores. A empresa também afirma que essa verificação não tem o objetivo de verificar o que há dentro da aplicação ou sua finalidade, portanto estaria sendo imposta puramente para barrar a distribuição contínua de malwares, resta ver se a afirmação se sustenta, tendo em vista que isso também pode ser uma ferramenta de abuso de poder conveniente para a Google, como outras serviram nos exemplos citados acima.

    - -

    Próximos passos

    - -

    Devemos ficar atentos a como essas novas políticas vão ser aplicadas, e como as mesmas afetarão o ecossistema do Android. Uma consequência inevitável das mudanças é que um número inestimável de aplicações abandonadas pelos desenvolvedores, que, se não fosse pelos novos requisitos, seriam perfeitamente funcionais serão perdidas de um dia para o outro. Nem todo software antigo se conecta à internet, nem todo software antigo representa um perigo constante ao usuário. A Google está tirando do usuário experiente a opção de assumir a responsabilidade e dizer: "Eu sei o que estou fazendo!", nos segurando como crianças, como se soubessem o que é melhor para todos.

    - -

    O Android comercializado nos celulares é baseado no AOSP, o que significa que a força vital do Android é aberta, e isso a Google ainda não tirou dos usuários. Portanto pretendo fazer um outro post explicando como você pode recuperar o controle do seu dispositivo por meio de modificações no sistema, da forma mais simples, segura e estável possível, até as formas mais avançadas, caso você se sinta confiante.

    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/pt/blog/index.html b/docs/pt/blog/index.html deleted file mode 100644 index 3be56fa..0000000 --- a/docs/pt/blog/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Listando Postagens do Blog:

    - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/pt/index.html b/docs/pt/index.html deleted file mode 100644 index 6dffb0d..0000000 --- a/docs/pt/index.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    Bem-vindo

    -

    Parece que você encontrou meu website! Olá, sou Adrian Victor (ou tenkuma), um cara brasileiro que gosta de mexer com computadores, programas de computadores e enimatpirtlitemídios.

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    Sobre Mim

    -

    - Meu nome é Adrian Victor, mas on-line eu uso o nickname tenkuma. Estou no último ano do ensino médio e estudo informática. Meus hobbies são escutar e produzir música, programação, selfhosting, Linux, e muito mais. -

    -

    Tenkuma, ou 天くま em japonês, significa urso celestial e foi um nome dado a mim por um amigo que eu já perdi contato há muito tempo. Sakata se foi, mas o nome ficou e se tornou parte integral da personalidade do meu eu digital até hoje.

    - -

    Redes Sociais e Contato

    -

    - Estou publicamente disponível no Mastodon (@tenkuma@mstdn.social), - GitHub (adrianvic), - Disroot Git (adrianvictor), - Discord (@adrianvic), - YouTube (@adrianvictor8), - BitView (tenkuma), - Modrinth (tenkumabear) - e XMPP (adrianvictor@disroot.org). -

    -

    Você pode enviar um correio eletrônico para (adrianvictor@disroot.org) ou me contactar por qualquer outro meio citado acima. Para assuntos relativos a projetos específicos, verifique o campo de contato do projeto, caso não haja um adicione +nomedoprojeto ao meu endereço de E-mail (exemplo: adrianvictor+projetolegal@disroot.org).

    -
    - -
    -
    -

    Música

    -

    Sempre amei música, e tenho achado produção musical algo muito interessante ultimamente. Publico minhas músicas como tenkuma, junto com meus amigos formei a Margarina Records—uma label amadora.

    -

    Você pode conferir minhas músicas mais recentes no meu perfil do Genius.

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    Vídeos

    -

    Eu faço vídeos para o meu canal do YouTube. Não posto regularmente; não tem calendário—apenas eu mostrando alguma coisa em vídeo.

    -
    - -
    - - - - -
    - -
    -
    -

    Software

    -

    Estou estudando informática no IFC (SC, Brazil) mas no meu tempo livre tenho projetos como programas de computador, plugins para Minecraft, servidores Minecraft, etc... Todos meus projetos públicos estão disponíveis no meu perfil do GitHub.

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    Reprodutor de música nativo para dispositivos Android que se conecta a servidores de mídia Jellyfin. O código é baseado no repositório arquivado do Gelli, que por sua vez se baseia em uma versão antiga do Phonograph.

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    Este plugin PaperMC integra-se ao VaultUnlocked para fornecer um sistema de economia único baseado em itens para o seu servidor Minecraft. Em vez de depender apenas de saldos virtuais, os jogadores usam itens do jogo como moeda física, adicionando uma camada de imersão e realismo à sua economia.

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    Eye of Nemesis é um plugin que permite aos administradores de servidores escrever políticas que negarão ou permitirão (lista negra/branca) que os jogadores façam coisas específicas com base no valor dos nós.

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    Cliente personalizável multiplataforma para wikis escrito em Python usando PySide6 (QT).

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/pt/misc/88x31/index.html b/docs/pt/misc/88x31/index.html deleted file mode 100644 index 0ac32c7..0000000 --- a/docs/pt/misc/88x31/index.html +++ /dev/null @@ -1,3093 +0,0 @@ - - - - - - - Adrian Victor - 88x31 - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    88x31

    -

    Essa é uma coleção de GIFs e imagens 88x31 que eu baixei pela internet.

    -
    -
    -

    Feitos por mim

    -
    - - - -
    -

    Outros

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/pt/misc/bookmarks/index.html b/docs/pt/misc/bookmarks/index.html deleted file mode 100644 index b7ff761..0000000 --- a/docs/pt/misc/bookmarks/index.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    Favoritos

    -

    Essa é a lista de links favoritos curada por mim, dividida em seções para facilitar a navegação ;-)

    - - - -
    -
    - -
    -

    Downloads

    - -
    - - - - - - - - - -
    - -
    - -
    -
    MalwareWatch
    -
    -
    - Website do Enderman. Tem download de vários softwares úteis, imagens de sistemas operacionais e malware. -
    - -
    -
    -
    - -
    -
    Free Images
    -
    -
    - Pesquise por milhões de imagens, artes e vetores. Todas as imagens são de domínio público ou sobre CC0. Livre para baixar e livre para usar. -
    - -
    -
    -
    - -
    -
    88x31
    -
    -
    - Essa é uma coleção de mais de 6500 GIFs e PNGs no formato 88x31. No final dos anos 1990 e começo dos 2000 era muito comum usar essas imagens no seu site pessoal. -
    - - - - - - - - - - - -
    -
    -
    - -
    - -
    -

    Perfis

    - -
    - -
    -
    Mr. Nando
    -
    -
    - Meu amigo Fernando, ele faz músicas e vídeos de Minecraft e speedrun. -
    - -
    -
    -
    - -
    -
    Endermanch
    -
    -
    - Andrew é um engenheiro de software, entusiasta de malware e, mais importante, uma estranha e alta criatura. Cresci com os seus videos e ele é uma grande inspiração para mim. -
    - -
    -
    -
    - -
    - -
    -

    Ferramentas

    - -
    - -
    -
    Excalidraw
    -
    -
    - Quadro branco sem distrações. -
    - -
    -
    -
    - -
    -
    Postimages
    -
    -
    - Gere links permantes de suas imagens para forums, blogs e redes sociais. -
    - -
    -
    -
    - -
    -
    uBlock Origin
    -
    -
    - Um bloqueador eficiente para Chromium e Firefox. Rápido e pequeno. -
    - - - - - - - -
    -
    -
    - -
    - -
    -

    Jogos

    - -
    - - - - - - - - - -
    - -
    - -
    -
    SteamGridDB
    -
    -
    - Baixe e compartilhe recursos visuais de jogos e personalize sua biblioteca de jogos. -
    - -
    -
    -
    - -
    - -
    -

    Música

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    CVGM Radio
    -
    -
    - Seu lar para música relacionada a video games, demo scene e computadores. -
    - -
    -
    -
    - -
    - -
    -

    Pirataria

    - -
    - - - - - -
    - -
    - -
    -
    Nyaa
    -
    -
    - Um tracker de animes, mangás e coisas relacionadas. -
    - - - - - - - -
    -
    -
    - -
    -
    Lucida
    -
    -
    - Com Lucida, você pode baixar musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça. Sem pegadinhas, sem anúncios obrigatórios, sem enrolação. Como que funciona? -
    - -
    -
    -
    - -
    -
    DoubleDouble
    -
    -
    - Baixe musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça. -
    - -
    -
    -
    - -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/docs/pt/misc/index.html b/docs/pt/misc/index.html deleted file mode 100644 index 8884646..0000000 --- a/docs/pt/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Miscelâneo

    - -
      -
      - - - -
      - - 88x31 - -
      - -
      - - - Minha coleção de GIFs e imagens 88x31. -
      - - - -
      - - Favoritos - -
      - -
      - - - Minha coleção de sites e páginas interessantes. -
      - -
      -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/school/api-rodrigoribeiro/index.html b/docs/school/api-rodrigoribeiro/index.html deleted file mode 100644 index 6ab6141..0000000 --- a/docs/school/api-rodrigoribeiro/index.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - Adrian Victor - Demonstração da API do Prof. Rodrigo Ribeiro - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Demonstração da API do Prof. Rodrigo Ribeiro

    -

    A API do Prof. Rodrigo Ribeiro permite que o client envie uma imagem, assim retornando o resultado de uma leitura óptica realizada sobre a mesma com inteligência artificial. Esse client lê o resultado e o mostra de forma simples para o usuário.

    -

    Mais informações sobre a API podem ser encontradas no seu website.

    -
    Token: Ausente
    -
    - - -
    - - -
    -
    -
    -
    - -
    - - -
    -
    -
    -

    Resultados da leitura óptica:

    -
    -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/docs/school/telnet-pt/index.html b/docs/school/telnet-pt/index.html deleted file mode 100644 index 7de9b70..0000000 --- a/docs/school/telnet-pt/index.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - Adrian Victor - Telnet - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Telnet

    -

    Adrian Victor & Arthur Borges - 8/26/2025 (editado por último em )

    - -
    - - - -

    O que é o protocolo, sua função e histórico

    -

    O Telnet (do inglês TELecommunication NETwork) é um protocolo de rede da pilha -TCP/IP que permite a comunicação remota entre computadores em modo texto. Sua -função principal é proporcionar uma sessão interativa, em que um usuário pode -acessar e controlar outro dispositivo como se estivesse em um terminal local.

    -

    Criado em 1969, o Telnet foi um dos primeiros protocolos desenvolvidos para a -ARPANET (a rede que deu origem à Internet) e tornou-se fundamental para a -administração de sistemas e dispositivos nas décadas de 1970, 1980 e 1990. Com o -tempo, caiu em desuso devido à falta de segurança, sendo substituído por -alternativas mais modernas, como o SSH (Secure Shell).

    -

    Implementação

    -

    Porta padrão: 23/TCP.
    -Funciona na camada de aplicação do modelo OSI.
    -Formato: Baseado em troca de caracteres ASCII, sem criptografia.
    -RFC: Definido pela RFC 854 (1983).
    -Arquitetura: Segue o modelo cliente-servidor

    -

    Funcionamento

    -

    Na prática, o Telnet funciona de maneira relativamente simples. O processo começa -quando o cliente estabelece uma conexão TCP com o servidor por meio da porta 23. -Em seguida, uma sessão de terminal remoto é iniciada e o usuário deve fornecer -suas credenciais, como nome de usuário e senha. Após a autenticação, os -comandos digitados no cliente são transmitidos em texto puro ao servidor, que os -processa e retorna a saída correspondente. A sessão permanece ativa enquanto o -usuário desejar, sendo encerrada normalmente com comandos como exit ou logout

    -

    Cenários de uso

    -

    Durante muitos anos, o Telnet foi amplamente utilizado para acesso remoto a -servidores Unix, Linux e Windows, especialmente em versões mais antigas desses -sistemas. Também se tornou bastante comum na administração de dispositivos de -rede, como roteadores e switches, até que o SSH passou a ser adotado como -padrão. Além disso, grandes computadores centrais, conhecidos como mainframes, -e alguns dispositivos legados ainda utilizam Telnet até hoje. Outra aplicação prática -do protocolo está em ambientes educacionais e no diagnóstico de redes, onde é -usado para testar portas abertas e verificar conectividade de serviços, como ao -executar “telnet servidor.com 80” para checar se a porta de um servidor web está em -funcionamento.

    -

    Criptografia: o problema inerente

    -

    O Telnet não possui criptografia nativa, o que o torna extremamente vulnerável. Para -solucionar esse problema, surgiram alternativas mais seguras. A principal delas é o -SSH (Secure Shell), desenvolvido nos anos 1990 como um substituto direto do -Telnet. O SSH oferece as mesmas funcionalidades, mas garante a proteção dos -dados por meio de autenticação forte e criptografia de todo o tráfego. Outra -possibilidade, embora menos comum, é o uso de SSL/TLS para tunelar sessões -Telnet, mas na prática essa abordagem raramente é utilizada.

    -

    Vantagens e desvantagens

    -

    Entre as vantagens do Telnet, destacam-se sua simplicidade, baixo consumo de -recursos e compatibilidade com diferentes sistemas antigos, o que facilitou sua -adoção ao longo dos anos. Contudo, essas qualidades são superadas por suas -desvantagens. A principal é a ausência de criptografia, que expõe todos os dados -transmitidos, incluindo senhas, em texto puro. Isso o torna vulnerável a ataques -como o sniffing, que captura pacotes de rede, e o hijacking, que sequestra sessões -ativas. Por esse motivo, o Telnet é considerado obsoleto e inseguro para uso em -redes abertas, como a própria Internet.

    -

    Relação com outros protocolos

    -

    O Telnet faz parte da família de protocolos da pilha TCP/IP e utiliza o TCP para -garantir a confiabilidade na comunicação. Assim como outros protocolos dessa pilha, -como HTTP, FTP e SMTP, ele se baseia em conexões estáveis para realizar suas -funções, mas seu diferencial sempre foi a interatividade em modo terminal. No -entanto, devido às falhas de segurança, acabou sendo substituído por seu sucessor -natural, o SSH, que manteve a mesma base conceitual do Telnet, mas adicionou -camadas robustas de proteção.

    -

    Exemplo funcional

    -

    Abaixo há um simulador de conexão Telnet feito em JavaScript.

    -
    -

    Loading...

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Servidor

    - - -
    -
    -

    Cliente

    - -
    - - -
    -
    -
    - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/docs/static/android-chrome-192x192.png b/docs/static/android-chrome-192x192.png deleted file mode 100644 index 7412893..0000000 Binary files a/docs/static/android-chrome-192x192.png and /dev/null differ diff --git a/docs/static/android-chrome-512x512.png b/docs/static/android-chrome-512x512.png deleted file mode 100644 index 11103d2..0000000 Binary files a/docs/static/android-chrome-512x512.png and /dev/null differ diff --git a/docs/static/apple-touch-icon.png b/docs/static/apple-touch-icon.png deleted file mode 100644 index e7e523d..0000000 Binary files a/docs/static/apple-touch-icon.png and /dev/null differ diff --git a/docs/static/favicon-16x16.png b/docs/static/favicon-16x16.png deleted file mode 100644 index 800a6dc..0000000 Binary files a/docs/static/favicon-16x16.png and /dev/null differ diff --git a/docs/static/favicon-32x32.png b/docs/static/favicon-32x32.png deleted file mode 100644 index 3ace631..0000000 Binary files a/docs/static/favicon-32x32.png and /dev/null differ diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico deleted file mode 100644 index 92263f2..0000000 Binary files a/docs/static/favicon.ico and /dev/null differ diff --git a/docs/static/images/88x31/000010.gif b/docs/static/images/88x31/000010.gif deleted file mode 100644 index 5b387b2..0000000 Binary files a/docs/static/images/88x31/000010.gif and /dev/null differ diff --git a/docs/static/images/88x31/149.png b/docs/static/images/88x31/149.png deleted file mode 100644 index 4d0f68b..0000000 Binary files a/docs/static/images/88x31/149.png and /dev/null differ diff --git a/docs/static/images/88x31/2001.gif b/docs/static/images/88x31/2001.gif deleted file mode 100644 index 69a11b7..0000000 Binary files a/docs/static/images/88x31/2001.gif and /dev/null differ diff --git a/docs/static/images/88x31/2014-rave.gif b/docs/static/images/88x31/2014-rave.gif deleted file mode 100644 index 28c2615..0000000 Binary files a/docs/static/images/88x31/2014-rave.gif and /dev/null differ diff --git a/docs/static/images/88x31/2ktan.png b/docs/static/images/88x31/2ktan.png deleted file mode 100644 index af33b58..0000000 Binary files a/docs/static/images/88x31/2ktan.png and /dev/null differ diff --git a/docs/static/images/88x31/88x31-your-ad.gif b/docs/static/images/88x31/88x31-your-ad.gif deleted file mode 100644 index e366403..0000000 Binary files a/docs/static/images/88x31/88x31-your-ad.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31floral.gif b/docs/static/images/88x31/88x31floral.gif deleted file mode 100644 index 62ad118..0000000 Binary files a/docs/static/images/88x31/88x31floral.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31gold.gif b/docs/static/images/88x31/88x31gold.gif deleted file mode 100644 index 6e2dcc5..0000000 Binary files a/docs/static/images/88x31/88x31gold.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31greenmarble.gif b/docs/static/images/88x31/88x31greenmarble.gif deleted file mode 100644 index 1280e32..0000000 Binary files a/docs/static/images/88x31/88x31greenmarble.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31pinkmarble.gif b/docs/static/images/88x31/88x31pinkmarble.gif deleted file mode 100644 index 0656162..0000000 Binary files a/docs/static/images/88x31/88x31pinkmarble.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31tms.gif b/docs/static/images/88x31/88x31tms.gif deleted file mode 100644 index e532947..0000000 Binary files a/docs/static/images/88x31/88x31tms.gif and /dev/null differ diff --git a/docs/static/images/88x31/88x31whitemarble.gif b/docs/static/images/88x31/88x31whitemarble.gif deleted file mode 100644 index 79ece74..0000000 Binary files a/docs/static/images/88x31/88x31whitemarble.gif and /dev/null differ diff --git a/docs/static/images/88x31/96.png b/docs/static/images/88x31/96.png deleted file mode 100644 index 4576fbb..0000000 Binary files a/docs/static/images/88x31/96.png and /dev/null differ diff --git a/docs/static/images/88x31/98.gif b/docs/static/images/88x31/98.gif deleted file mode 100644 index 8132b5c..0000000 Binary files a/docs/static/images/88x31/98.gif and /dev/null differ diff --git a/docs/static/images/88x31/AB_big3.gif b/docs/static/images/88x31/AB_big3.gif deleted file mode 100644 index d659e6d..0000000 Binary files a/docs/static/images/88x31/AB_big3.gif and /dev/null differ diff --git a/docs/static/images/88x31/BOOKMARKthispageNOW.png b/docs/static/images/88x31/BOOKMARKthispageNOW.png deleted file mode 100644 index 5a01e10..0000000 Binary files a/docs/static/images/88x31/BOOKMARKthispageNOW.png and /dev/null differ diff --git a/docs/static/images/88x31/BWA_Boing_88x31_19991004.gif b/docs/static/images/88x31/BWA_Boing_88x31_19991004.gif deleted file mode 100644 index a467712..0000000 Binary files a/docs/static/images/88x31/BWA_Boing_88x31_19991004.gif and /dev/null differ diff --git a/docs/static/images/88x31/EmacsNow (2).gif b/docs/static/images/88x31/EmacsNow (2).gif deleted file mode 100644 index d5939e2..0000000 Binary files a/docs/static/images/88x31/EmacsNow (2).gif and /dev/null differ diff --git a/docs/static/images/88x31/KMeleon-White_Ani.gif b/docs/static/images/88x31/KMeleon-White_Ani.gif deleted file mode 100644 index bc95862..0000000 Binary files a/docs/static/images/88x31/KMeleon-White_Ani.gif and /dev/null differ diff --git a/docs/static/images/88x31/KMeleon_logo.gif b/docs/static/images/88x31/KMeleon_logo.gif deleted file mode 100644 index 5d94413..0000000 Binary files a/docs/static/images/88x31/KMeleon_logo.gif and /dev/null differ diff --git a/docs/static/images/88x31/WEBP.gif b/docs/static/images/88x31/WEBP.gif deleted file mode 100644 index e63f1f2..0000000 Binary files a/docs/static/images/88x31/WEBP.gif and /dev/null differ diff --git a/docs/static/images/88x31/agoraroad.gif b/docs/static/images/88x31/agoraroad.gif deleted file mode 100644 index 366f661..0000000 Binary files a/docs/static/images/88x31/agoraroad.gif and /dev/null differ diff --git a/docs/static/images/88x31/ai.gif b/docs/static/images/88x31/ai.gif deleted file mode 100644 index 571bf9d..0000000 Binary files a/docs/static/images/88x31/ai.gif and /dev/null differ diff --git a/docs/static/images/88x31/amd_now.gif b/docs/static/images/88x31/amd_now.gif deleted file mode 100644 index 12b9000..0000000 Binary files a/docs/static/images/88x31/amd_now.gif and /dev/null differ diff --git a/docs/static/images/88x31/amd_powered.gif b/docs/static/images/88x31/amd_powered.gif deleted file mode 100644 index 344cda4..0000000 Binary files a/docs/static/images/88x31/amd_powered.gif and /dev/null differ diff --git a/docs/static/images/88x31/amiga_friendly.gif b/docs/static/images/88x31/amiga_friendly.gif deleted file mode 100644 index 75113f1..0000000 Binary files a/docs/static/images/88x31/amiga_friendly.gif and /dev/null differ diff --git a/docs/static/images/88x31/amiga_power.gif b/docs/static/images/88x31/amiga_power.gif deleted file mode 100644 index cebe83f..0000000 Binary files a/docs/static/images/88x31/amiga_power.gif and /dev/null differ diff --git a/docs/static/images/88x31/amiga_rc5.gif b/docs/static/images/88x31/amiga_rc5.gif deleted file mode 100644 index ecd5cb0..0000000 Binary files a/docs/static/images/88x31/amiga_rc5.gif and /dev/null differ diff --git a/docs/static/images/88x31/angellogo.gif b/docs/static/images/88x31/angellogo.gif deleted file mode 100644 index d434ab7..0000000 Binary files a/docs/static/images/88x31/angellogo.gif and /dev/null differ diff --git a/docs/static/images/88x31/anybrowser.gif b/docs/static/images/88x31/anybrowser.gif deleted file mode 100644 index 8b1f661..0000000 Binary files a/docs/static/images/88x31/anybrowser.gif and /dev/null differ diff --git a/docs/static/images/88x31/anybrowser6.gif b/docs/static/images/88x31/anybrowser6.gif deleted file mode 100644 index 6c35d10..0000000 Binary files a/docs/static/images/88x31/anybrowser6.gif and /dev/null differ diff --git a/docs/static/images/88x31/armed.gif b/docs/static/images/88x31/armed.gif deleted file mode 100644 index 33427ac..0000000 Binary files a/docs/static/images/88x31/armed.gif and /dev/null differ diff --git a/docs/static/images/88x31/asexuals_now.gif b/docs/static/images/88x31/asexuals_now.gif deleted file mode 100644 index 7642e36..0000000 Binary files a/docs/static/images/88x31/asexuals_now.gif and /dev/null differ diff --git a/docs/static/images/88x31/az01.gif b/docs/static/images/88x31/az01.gif deleted file mode 100644 index cd8590b..0000000 Binary files a/docs/static/images/88x31/az01.gif and /dev/null differ diff --git a/docs/static/images/88x31/az02.gif b/docs/static/images/88x31/az02.gif deleted file mode 100644 index a904f0e..0000000 Binary files a/docs/static/images/88x31/az02.gif and /dev/null differ diff --git a/docs/static/images/88x31/az03.gif b/docs/static/images/88x31/az03.gif deleted file mode 100644 index 9b8ae67..0000000 Binary files a/docs/static/images/88x31/az03.gif and /dev/null differ diff --git a/docs/static/images/88x31/bbn.gif b/docs/static/images/88x31/bbn.gif deleted file mode 100644 index c677368..0000000 Binary files a/docs/static/images/88x31/bbn.gif and /dev/null differ diff --git a/docs/static/images/88x31/beos_now_anim.gif b/docs/static/images/88x31/beos_now_anim.gif deleted file mode 100644 index fe13b6a..0000000 Binary files a/docs/static/images/88x31/beos_now_anim.gif and /dev/null differ diff --git a/docs/static/images/88x31/best1024.gif b/docs/static/images/88x31/best1024.gif deleted file mode 100644 index b3e87c6..0000000 Binary files a/docs/static/images/88x31/best1024.gif and /dev/null differ diff --git a/docs/static/images/88x31/best800x600.gif b/docs/static/images/88x31/best800x600.gif deleted file mode 100644 index c93fcf6..0000000 Binary files a/docs/static/images/88x31/best800x600.gif and /dev/null differ diff --git a/docs/static/images/88x31/best_free.gif b/docs/static/images/88x31/best_free.gif deleted file mode 100644 index 5a6931c..0000000 Binary files a/docs/static/images/88x31/best_free.gif and /dev/null differ diff --git a/docs/static/images/88x31/best_viewed_with_monitor.gif b/docs/static/images/88x31/best_viewed_with_monitor.gif deleted file mode 100644 index 5e1afea..0000000 Binary files a/docs/static/images/88x31/best_viewed_with_monitor.gif and /dev/null differ diff --git a/docs/static/images/88x31/best_viewed_with_open_eyes.gif b/docs/static/images/88x31/best_viewed_with_open_eyes.gif deleted file mode 100644 index 27581b7..0000000 Binary files a/docs/static/images/88x31/best_viewed_with_open_eyes.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestviewed16bit.gif b/docs/static/images/88x31/bestviewed16bit.gif deleted file mode 100644 index e8f8acd..0000000 Binary files a/docs/static/images/88x31/bestviewed16bit.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestviewedcomp.gif b/docs/static/images/88x31/bestviewedcomp.gif deleted file mode 100644 index 0b43d5a..0000000 Binary files a/docs/static/images/88x31/bestviewedcomp.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestvieweddesktop.gif b/docs/static/images/88x31/bestvieweddesktop.gif deleted file mode 100644 index 06620c0..0000000 Binary files a/docs/static/images/88x31/bestvieweddesktop.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestviewedlinks.gif b/docs/static/images/88x31/bestviewedlinks.gif deleted file mode 100644 index 5b35db4..0000000 Binary files a/docs/static/images/88x31/bestviewedlinks.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestviewedopen.gif b/docs/static/images/88x31/bestviewedopen.gif deleted file mode 100644 index fcae15a..0000000 Binary files a/docs/static/images/88x31/bestviewedopen.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestviewedyour.gif b/docs/static/images/88x31/bestviewedyour.gif deleted file mode 100644 index 9f45a84..0000000 Binary files a/docs/static/images/88x31/bestviewedyour.gif and /dev/null differ diff --git a/docs/static/images/88x31/bestvw.gif b/docs/static/images/88x31/bestvw.gif deleted file mode 100644 index 3695756..0000000 Binary files a/docs/static/images/88x31/bestvw.gif and /dev/null differ diff --git a/docs/static/images/88x31/blank.gif b/docs/static/images/88x31/blank.gif deleted file mode 100644 index d5320c8..0000000 Binary files a/docs/static/images/88x31/blank.gif and /dev/null differ diff --git a/docs/static/images/88x31/blasphemy.gif b/docs/static/images/88x31/blasphemy.gif deleted file mode 100644 index e0da2ad..0000000 Binary files a/docs/static/images/88x31/blasphemy.gif and /dev/null differ diff --git a/docs/static/images/88x31/blender_get.gif b/docs/static/images/88x31/blender_get.gif deleted file mode 100644 index 0b7ee8a..0000000 Binary files a/docs/static/images/88x31/blender_get.gif and /dev/null differ diff --git a/docs/static/images/88x31/blogger_88x31.gif b/docs/static/images/88x31/blogger_88x31.gif deleted file mode 100644 index 41b4541..0000000 Binary files a/docs/static/images/88x31/blogger_88x31.gif and /dev/null differ diff --git a/docs/static/images/88x31/botao08.gif b/docs/static/images/88x31/botao08.gif deleted file mode 100644 index 0d939de..0000000 Binary files a/docs/static/images/88x31/botao08.gif and /dev/null differ diff --git a/docs/static/images/88x31/brothings.gif b/docs/static/images/88x31/brothings.gif deleted file mode 100644 index a774972..0000000 Binary files a/docs/static/images/88x31/brothings.gif and /dev/null differ diff --git a/docs/static/images/88x31/btn-silvercruiser.gif b/docs/static/images/88x31/btn-silvercruiser.gif deleted file mode 100644 index 54f2320..0000000 Binary files a/docs/static/images/88x31/btn-silvercruiser.gif and /dev/null differ diff --git a/docs/static/images/88x31/button.png b/docs/static/images/88x31/button.png deleted file mode 100644 index 83af9b2..0000000 Binary files a/docs/static/images/88x31/button.png and /dev/null differ diff --git a/docs/static/images/88x31/buttons_now.gif b/docs/static/images/88x31/buttons_now.gif deleted file mode 100644 index 7abaadd..0000000 Binary files a/docs/static/images/88x31/buttons_now.gif and /dev/null differ diff --git a/docs/static/images/88x31/bvbstar.gif b/docs/static/images/88x31/bvbstar.gif deleted file mode 100644 index 5f7c7d9..0000000 Binary files a/docs/static/images/88x31/bvbstar.gif and /dev/null differ diff --git a/docs/static/images/88x31/bvwe.gif b/docs/static/images/88x31/bvwe.gif deleted file mode 100644 index b98de4d..0000000 Binary files a/docs/static/images/88x31/bvwe.gif and /dev/null differ diff --git a/docs/static/images/88x31/cakey.gif b/docs/static/images/88x31/cakey.gif deleted file mode 100644 index 32831ab..0000000 Binary files a/docs/static/images/88x31/cakey.gif and /dev/null differ diff --git a/docs/static/images/88x31/caldera.gif b/docs/static/images/88x31/caldera.gif deleted file mode 100644 index a4598ee..0000000 Binary files a/docs/static/images/88x31/caldera.gif and /dev/null differ diff --git a/docs/static/images/88x31/cardsbutton.gif b/docs/static/images/88x31/cardsbutton.gif deleted file mode 100644 index 6aa2791..0000000 Binary files a/docs/static/images/88x31/cardsbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/catp0rtal.gif b/docs/static/images/88x31/catp0rtal.gif deleted file mode 100644 index 3678c51..0000000 Binary files a/docs/static/images/88x31/catp0rtal.gif and /dev/null differ diff --git a/docs/static/images/88x31/catscape2.gif b/docs/static/images/88x31/catscape2.gif deleted file mode 100644 index 61a3ab6..0000000 Binary files a/docs/static/images/88x31/catscape2.gif and /dev/null differ diff --git a/docs/static/images/88x31/catscape3.gif b/docs/static/images/88x31/catscape3.gif deleted file mode 100644 index 05bd59a..0000000 Binary files a/docs/static/images/88x31/catscape3.gif and /dev/null differ diff --git a/docs/static/images/88x31/catt_banner.gif b/docs/static/images/88x31/catt_banner.gif deleted file mode 100644 index 4fd7883..0000000 Binary files a/docs/static/images/88x31/catt_banner.gif and /dev/null differ diff --git a/docs/static/images/88x31/cc-by-nc-sa.gif b/docs/static/images/88x31/cc-by-nc-sa.gif deleted file mode 100644 index 508f484..0000000 Binary files a/docs/static/images/88x31/cc-by-nc-sa.gif and /dev/null differ diff --git a/docs/static/images/88x31/cc-by-sa.gif b/docs/static/images/88x31/cc-by-sa.gif deleted file mode 100644 index c43b365..0000000 Binary files a/docs/static/images/88x31/cc-by-sa.gif and /dev/null differ diff --git a/docs/static/images/88x31/cc-some.gif b/docs/static/images/88x31/cc-some.gif deleted file mode 100644 index 0860fa9..0000000 Binary files a/docs/static/images/88x31/cc-some.gif and /dev/null differ diff --git a/docs/static/images/88x31/cc-somerights.gif b/docs/static/images/88x31/cc-somerights.gif deleted file mode 100644 index 0c01840..0000000 Binary files a/docs/static/images/88x31/cc-somerights.gif and /dev/null differ diff --git a/docs/static/images/88x31/cc0.png b/docs/static/images/88x31/cc0.png deleted file mode 100644 index 1b710a0..0000000 Binary files a/docs/static/images/88x31/cc0.png and /dev/null differ diff --git a/docs/static/images/88x31/cd.gif b/docs/static/images/88x31/cd.gif deleted file mode 100644 index e6d6048..0000000 Binary files a/docs/static/images/88x31/cd.gif and /dev/null differ diff --git a/docs/static/images/88x31/cheezit.gif b/docs/static/images/88x31/cheezit.gif deleted file mode 100644 index 3a90ba0..0000000 Binary files a/docs/static/images/88x31/cheezit.gif and /dev/null differ diff --git a/docs/static/images/88x31/chilliwebhosting.gif b/docs/static/images/88x31/chilliwebhosting.gif deleted file mode 100644 index 5dd4fa2..0000000 Binary files a/docs/static/images/88x31/chilliwebhosting.gif and /dev/null differ diff --git a/docs/static/images/88x31/chocomint.png b/docs/static/images/88x31/chocomint.png deleted file mode 100644 index 702a5cd..0000000 Binary files a/docs/static/images/88x31/chocomint.png and /dev/null differ diff --git a/docs/static/images/88x31/chrome.gif b/docs/static/images/88x31/chrome.gif deleted file mode 100644 index 2090066..0000000 Binary files a/docs/static/images/88x31/chrome.gif and /dev/null differ diff --git a/docs/static/images/88x31/clickhere_blue.gif b/docs/static/images/88x31/clickhere_blue.gif deleted file mode 100644 index 481266d..0000000 Binary files a/docs/static/images/88x31/clickhere_blue.gif and /dev/null differ diff --git a/docs/static/images/88x31/clickhere_red.gif b/docs/static/images/88x31/clickhere_red.gif deleted file mode 100644 index 0ad0512..0000000 Binary files a/docs/static/images/88x31/clickhere_red.gif and /dev/null differ diff --git a/docs/static/images/88x31/cocacola.gif b/docs/static/images/88x31/cocacola.gif deleted file mode 100644 index 964bf13..0000000 Binary files a/docs/static/images/88x31/cocacola.gif and /dev/null differ diff --git a/docs/static/images/88x31/coolacid.gif b/docs/static/images/88x31/coolacid.gif deleted file mode 100644 index 51e927e..0000000 Binary files a/docs/static/images/88x31/coolacid.gif and /dev/null differ diff --git a/docs/static/images/88x31/corp.gif b/docs/static/images/88x31/corp.gif deleted file mode 100644 index 19b7739..0000000 Binary files a/docs/static/images/88x31/corp.gif and /dev/null differ diff --git a/docs/static/images/88x31/css.gif b/docs/static/images/88x31/css.gif deleted file mode 100644 index be69d58..0000000 Binary files a/docs/static/images/88x31/css.gif and /dev/null differ diff --git a/docs/static/images/88x31/css2.gif b/docs/static/images/88x31/css2.gif deleted file mode 100644 index 8dcff0b..0000000 Binary files a/docs/static/images/88x31/css2.gif and /dev/null differ diff --git a/docs/static/images/88x31/css3.gif b/docs/static/images/88x31/css3.gif deleted file mode 100644 index 8f9ef44..0000000 Binary files a/docs/static/images/88x31/css3.gif and /dev/null differ diff --git a/docs/static/images/88x31/cyberrot.gif b/docs/static/images/88x31/cyberrot.gif deleted file mode 100644 index 81a859a..0000000 Binary files a/docs/static/images/88x31/cyberrot.gif and /dev/null differ diff --git a/docs/static/images/88x31/debian-powered.gif b/docs/static/images/88x31/debian-powered.gif deleted file mode 100644 index 92cbdf1..0000000 Binary files a/docs/static/images/88x31/debian-powered.gif and /dev/null differ diff --git a/docs/static/images/88x31/debian.gif b/docs/static/images/88x31/debian.gif deleted file mode 100644 index eaf7001..0000000 Binary files a/docs/static/images/88x31/debian.gif and /dev/null differ diff --git a/docs/static/images/88x31/dumbasswebmasterahead.gif b/docs/static/images/88x31/dumbasswebmasterahead.gif deleted file mode 100644 index 52fb8ab..0000000 Binary files a/docs/static/images/88x31/dumbasswebmasterahead.gif and /dev/null differ diff --git a/docs/static/images/88x31/eftpbutton.gif b/docs/static/images/88x31/eftpbutton.gif deleted file mode 100644 index b875227..0000000 Binary files a/docs/static/images/88x31/eftpbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/ehbutton.gif b/docs/static/images/88x31/ehbutton.gif deleted file mode 100644 index 848d9c1..0000000 Binary files a/docs/static/images/88x31/ehbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/emacs.gif b/docs/static/images/88x31/emacs.gif deleted file mode 100644 index 495caf8..0000000 Binary files a/docs/static/images/88x31/emacs.gif and /dev/null differ diff --git a/docs/static/images/88x31/emacs2.gif b/docs/static/images/88x31/emacs2.gif deleted file mode 100644 index 2474856..0000000 Binary files a/docs/static/images/88x31/emacs2.gif and /dev/null differ diff --git a/docs/static/images/88x31/emacs3.gif b/docs/static/images/88x31/emacs3.gif deleted file mode 100644 index c2356a9..0000000 Binary files a/docs/static/images/88x31/emacs3.gif and /dev/null differ diff --git a/docs/static/images/88x31/emacsnow.gif b/docs/static/images/88x31/emacsnow.gif deleted file mode 100644 index e5fe9e2..0000000 Binary files a/docs/static/images/88x31/emacsnow.gif and /dev/null differ diff --git a/docs/static/images/88x31/email.gif b/docs/static/images/88x31/email.gif deleted file mode 100644 index 23425f3..0000000 Binary files a/docs/static/images/88x31/email.gif and /dev/null differ diff --git a/docs/static/images/88x31/facebook.gif b/docs/static/images/88x31/facebook.gif deleted file mode 100644 index a7cf4cd..0000000 Binary files a/docs/static/images/88x31/facebook.gif and /dev/null differ diff --git a/docs/static/images/88x31/feed.gif b/docs/static/images/88x31/feed.gif deleted file mode 100644 index 5a18e7e..0000000 Binary files a/docs/static/images/88x31/feed.gif and /dev/null differ diff --git a/docs/static/images/88x31/ffmpeg.gif b/docs/static/images/88x31/ffmpeg.gif deleted file mode 100644 index 7125358..0000000 Binary files a/docs/static/images/88x31/ffmpeg.gif and /dev/null differ diff --git a/docs/static/images/88x31/fingerofgod.gif b/docs/static/images/88x31/fingerofgod.gif deleted file mode 100644 index 96110b9..0000000 Binary files a/docs/static/images/88x31/fingerofgod.gif and /dev/null differ diff --git a/docs/static/images/88x31/firefox2.gif b/docs/static/images/88x31/firefox2.gif deleted file mode 100644 index 14a24df..0000000 Binary files a/docs/static/images/88x31/firefox2.gif and /dev/null differ diff --git a/docs/static/images/88x31/firefox3.gif b/docs/static/images/88x31/firefox3.gif deleted file mode 100644 index 80e7e85..0000000 Binary files a/docs/static/images/88x31/firefox3.gif and /dev/null differ diff --git a/docs/static/images/88x31/firefox4.gif b/docs/static/images/88x31/firefox4.gif deleted file mode 100644 index 94621d5..0000000 Binary files a/docs/static/images/88x31/firefox4.gif and /dev/null differ diff --git a/docs/static/images/88x31/firefoxget.gif b/docs/static/images/88x31/firefoxget.gif deleted file mode 100644 index 3cd754f..0000000 Binary files a/docs/static/images/88x31/firefoxget.gif and /dev/null differ diff --git a/docs/static/images/88x31/firefoxnow.gif b/docs/static/images/88x31/firefoxnow.gif deleted file mode 100644 index a4cd0bd..0000000 Binary files a/docs/static/images/88x31/firefoxnow.gif and /dev/null differ diff --git a/docs/static/images/88x31/firen00bs.gif b/docs/static/images/88x31/firen00bs.gif deleted file mode 100644 index e6445e5..0000000 Binary files a/docs/static/images/88x31/firen00bs.gif and /dev/null differ diff --git a/docs/static/images/88x31/flash_get_20010813.gif b/docs/static/images/88x31/flash_get_20010813.gif deleted file mode 100644 index d0ea7bd..0000000 Binary files a/docs/static/images/88x31/flash_get_20010813.gif and /dev/null differ diff --git a/docs/static/images/88x31/floppy.gif b/docs/static/images/88x31/floppy.gif deleted file mode 100644 index c5dc9c5..0000000 Binary files a/docs/static/images/88x31/floppy.gif and /dev/null differ diff --git a/docs/static/images/88x31/folder.gif b/docs/static/images/88x31/folder.gif deleted file mode 100644 index b2502e5..0000000 Binary files a/docs/static/images/88x31/folder.gif and /dev/null differ diff --git a/docs/static/images/88x31/fpbutton.png b/docs/static/images/88x31/fpbutton.png deleted file mode 100644 index 53ead68..0000000 Binary files a/docs/static/images/88x31/fpbutton.png and /dev/null differ diff --git a/docs/static/images/88x31/fspeech96.gif b/docs/static/images/88x31/fspeech96.gif deleted file mode 100644 index b9628aa..0000000 Binary files a/docs/static/images/88x31/fspeech96.gif and /dev/null differ diff --git a/docs/static/images/88x31/fspeech96a.gif b/docs/static/images/88x31/fspeech96a.gif deleted file mode 100644 index 5984b78..0000000 Binary files a/docs/static/images/88x31/fspeech96a.gif and /dev/null differ diff --git a/docs/static/images/88x31/ftpxani.gif b/docs/static/images/88x31/ftpxani.gif deleted file mode 100644 index 4fd222a..0000000 Binary files a/docs/static/images/88x31/ftpxani.gif and /dev/null differ diff --git a/docs/static/images/88x31/gb.gif b/docs/static/images/88x31/gb.gif deleted file mode 100644 index d2b9001..0000000 Binary files a/docs/static/images/88x31/gb.gif and /dev/null differ diff --git a/docs/static/images/88x31/gba_now.png b/docs/static/images/88x31/gba_now.png deleted file mode 100644 index 938f4a9..0000000 Binary files a/docs/static/images/88x31/gba_now.png and /dev/null differ diff --git a/docs/static/images/88x31/get_a_computer.jpg b/docs/static/images/88x31/get_a_computer.jpg deleted file mode 100644 index bc0c591..0000000 Binary files a/docs/static/images/88x31/get_a_computer.jpg and /dev/null differ diff --git a/docs/static/images/88x31/get_flashplayer_19981202.gif b/docs/static/images/88x31/get_flashplayer_19981202.gif deleted file mode 100644 index 4bd5fa9..0000000 Binary files a/docs/static/images/88x31/get_flashplayer_19981202.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_flashplayer_88_31_20021015.gif b/docs/static/images/88x31/get_flashplayer_88_31_20021015.gif deleted file mode 100644 index 75cfd74..0000000 Binary files a/docs/static/images/88x31/get_flashplayer_88_31_20021015.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_shock_player_20040607.gif b/docs/static/images/88x31/get_shock_player_20040607.gif deleted file mode 100644 index a936233..0000000 Binary files a/docs/static/images/88x31/get_shock_player_20040607.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_shock_player_20060706.gif b/docs/static/images/88x31/get_shock_player_20060706.gif deleted file mode 100644 index 75149ab..0000000 Binary files a/docs/static/images/88x31/get_shock_player_20060706.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_shockwave_grys.gif b/docs/static/images/88x31/get_shockwave_grys.gif deleted file mode 100644 index 665fd60..0000000 Binary files a/docs/static/images/88x31/get_shockwave_grys.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_shockwave_player_20070913.gif b/docs/static/images/88x31/get_shockwave_player_20070913.gif deleted file mode 100644 index 3d50967..0000000 Binary files a/docs/static/images/88x31/get_shockwave_player_20070913.gif and /dev/null differ diff --git a/docs/static/images/88x31/get_wmp_20031005.gif b/docs/static/images/88x31/get_wmp_20031005.gif deleted file mode 100644 index ef21397..0000000 Binary files a/docs/static/images/88x31/get_wmp_20031005.gif and /dev/null differ diff --git a/docs/static/images/88x31/getfirefox.gif b/docs/static/images/88x31/getfirefox.gif deleted file mode 100644 index d82f741..0000000 Binary files a/docs/static/images/88x31/getfirefox.gif and /dev/null differ diff --git a/docs/static/images/88x31/gif b/docs/static/images/88x31/gif deleted file mode 100644 index e1466be..0000000 Binary files a/docs/static/images/88x31/gif and /dev/null differ diff --git a/docs/static/images/88x31/gladiators-88x31-2.gif b/docs/static/images/88x31/gladiators-88x31-2.gif deleted file mode 100644 index c61b99b..0000000 Binary files a/docs/static/images/88x31/gladiators-88x31-2.gif and /dev/null differ diff --git a/docs/static/images/88x31/gnu-linux.gif b/docs/static/images/88x31/gnu-linux.gif deleted file mode 100644 index 89e3562..0000000 Binary files a/docs/static/images/88x31/gnu-linux.gif and /dev/null differ diff --git a/docs/static/images/88x31/got_html.gif b/docs/static/images/88x31/got_html.gif deleted file mode 100644 index f713730..0000000 Binary files a/docs/static/images/88x31/got_html.gif and /dev/null differ diff --git a/docs/static/images/88x31/gplv3.gif b/docs/static/images/88x31/gplv3.gif deleted file mode 100644 index 9dcf393..0000000 Binary files a/docs/static/images/88x31/gplv3.gif and /dev/null differ diff --git a/docs/static/images/88x31/hamexp.png b/docs/static/images/88x31/hamexp.png deleted file mode 100644 index 9c43881..0000000 Binary files a/docs/static/images/88x31/hamexp.png and /dev/null differ diff --git a/docs/static/images/88x31/happymix.gif b/docs/static/images/88x31/happymix.gif deleted file mode 100644 index 728613d..0000000 Binary files a/docs/static/images/88x31/happymix.gif and /dev/null differ diff --git a/docs/static/images/88x31/iebad.gif b/docs/static/images/88x31/iebad.gif deleted file mode 100644 index 6c82660..0000000 Binary files a/docs/static/images/88x31/iebad.gif and /dev/null differ diff --git a/docs/static/images/88x31/iebarf.gif b/docs/static/images/88x31/iebarf.gif deleted file mode 100644 index 897af6f..0000000 Binary files a/docs/static/images/88x31/iebarf.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieborg.gif b/docs/static/images/88x31/ieborg.gif deleted file mode 100644 index 1571c77..0000000 Binary files a/docs/static/images/88x31/ieborg.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieburnbtn.gif b/docs/static/images/88x31/ieburnbtn.gif deleted file mode 100644 index 266ccd2..0000000 Binary files a/docs/static/images/88x31/ieburnbtn.gif and /dev/null differ diff --git a/docs/static/images/88x31/iecrash.gif b/docs/static/images/88x31/iecrash.gif deleted file mode 100644 index b4efd89..0000000 Binary files a/docs/static/images/88x31/iecrash.gif and /dev/null differ diff --git a/docs/static/images/88x31/iedie2.gif b/docs/static/images/88x31/iedie2.gif deleted file mode 100644 index beb2678..0000000 Binary files a/docs/static/images/88x31/iedie2.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieexpecter.gif b/docs/static/images/88x31/ieexpecter.gif deleted file mode 100644 index d541dca..0000000 Binary files a/docs/static/images/88x31/ieexpecter.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieexplode.gif b/docs/static/images/88x31/ieexplode.gif deleted file mode 100644 index e0a3a3d..0000000 Binary files a/docs/static/images/88x31/ieexplode.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieeyes.gif b/docs/static/images/88x31/ieeyes.gif deleted file mode 100644 index f3c97b5..0000000 Binary files a/docs/static/images/88x31/ieeyes.gif and /dev/null differ diff --git a/docs/static/images/88x31/iefuck.gif b/docs/static/images/88x31/iefuck.gif deleted file mode 100644 index d8a7880..0000000 Binary files a/docs/static/images/88x31/iefuck.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieget_an.gif b/docs/static/images/88x31/ieget_an.gif deleted file mode 100644 index 0095c0f..0000000 Binary files a/docs/static/images/88x31/ieget_an.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieidiot.gif b/docs/static/images/88x31/ieidiot.gif deleted file mode 100644 index beedabf..0000000 Binary files a/docs/static/images/88x31/ieidiot.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieisevil.gif b/docs/static/images/88x31/ieisevil.gif deleted file mode 100644 index 88a5fec..0000000 Binary files a/docs/static/images/88x31/ieisevil.gif and /dev/null differ diff --git a/docs/static/images/88x31/iemickey.gif b/docs/static/images/88x31/iemickey.gif deleted file mode 100644 index 65c4781..0000000 Binary files a/docs/static/images/88x31/iemickey.gif and /dev/null differ diff --git a/docs/static/images/88x31/iemono.gif b/docs/static/images/88x31/iemono.gif deleted file mode 100644 index 59e5abe..0000000 Binary files a/docs/static/images/88x31/iemono.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieretards.gif b/docs/static/images/88x31/ieretards.gif deleted file mode 100644 index d39158e..0000000 Binary files a/docs/static/images/88x31/ieretards.gif and /dev/null differ diff --git a/docs/static/images/88x31/ieshit.gif b/docs/static/images/88x31/ieshit.gif deleted file mode 100644 index 83390a6..0000000 Binary files a/docs/static/images/88x31/ieshit.gif and /dev/null differ diff --git a/docs/static/images/88x31/iestop.gif b/docs/static/images/88x31/iestop.gif deleted file mode 100644 index e604340..0000000 Binary files a/docs/static/images/88x31/iestop.gif and /dev/null differ diff --git a/docs/static/images/88x31/iglooftp.gif b/docs/static/images/88x31/iglooftp.gif deleted file mode 100644 index 0d25339..0000000 Binary files a/docs/static/images/88x31/iglooftp.gif and /dev/null differ diff --git a/docs/static/images/88x31/imissxp.gif b/docs/static/images/88x31/imissxp.gif deleted file mode 100644 index 77a7f1c..0000000 Binary files a/docs/static/images/88x31/imissxp.gif and /dev/null differ diff --git a/docs/static/images/88x31/infernobutton2.gif b/docs/static/images/88x31/infernobutton2.gif deleted file mode 100644 index d43dcf3..0000000 Binary files a/docs/static/images/88x31/infernobutton2.gif and /dev/null differ diff --git a/docs/static/images/88x31/internetarchive.gif b/docs/static/images/88x31/internetarchive.gif deleted file mode 100644 index 21ccfa3..0000000 Binary files a/docs/static/images/88x31/internetarchive.gif and /dev/null differ diff --git a/docs/static/images/88x31/java_green_button.gif b/docs/static/images/88x31/java_green_button.gif deleted file mode 100644 index a5a44ad..0000000 Binary files a/docs/static/images/88x31/java_green_button.gif and /dev/null differ diff --git a/docs/static/images/88x31/javanow.gif b/docs/static/images/88x31/javanow.gif deleted file mode 100644 index 0d8cfec..0000000 Binary files a/docs/static/images/88x31/javanow.gif and /dev/null differ diff --git a/docs/static/images/88x31/javascriptfree.gif b/docs/static/images/88x31/javascriptfree.gif deleted file mode 100644 index b83040c..0000000 Binary files a/docs/static/images/88x31/javascriptfree.gif and /dev/null differ diff --git a/docs/static/images/88x31/jellyfin.gif b/docs/static/images/88x31/jellyfin.gif deleted file mode 100644 index cc0ed75..0000000 Binary files a/docs/static/images/88x31/jellyfin.gif and /dev/null differ diff --git a/docs/static/images/88x31/ka.png b/docs/static/images/88x31/ka.png deleted file mode 100644 index dd85f7f..0000000 Binary files a/docs/static/images/88x31/ka.png and /dev/null differ diff --git a/docs/static/images/88x31/kaboom3.gif b/docs/static/images/88x31/kaboom3.gif deleted file mode 100644 index 47aaf6f..0000000 Binary files a/docs/static/images/88x31/kaboom3.gif and /dev/null differ diff --git a/docs/static/images/88x31/kdenews.gif b/docs/static/images/88x31/kdenews.gif deleted file mode 100644 index a9c8361..0000000 Binary files a/docs/static/images/88x31/kdenews.gif and /dev/null differ diff --git a/docs/static/images/88x31/kirbykevinson.png b/docs/static/images/88x31/kirbykevinson.png deleted file mode 100644 index 81b6b22..0000000 Binary files a/docs/static/images/88x31/kirbykevinson.png and /dev/null differ diff --git a/docs/static/images/88x31/kittyrun.gif b/docs/static/images/88x31/kittyrun.gif deleted file mode 100644 index 593e0bf..0000000 Binary files a/docs/static/images/88x31/kittyrun.gif and /dev/null differ diff --git a/docs/static/images/88x31/kmfms-n.gif b/docs/static/images/88x31/kmfms-n.gif deleted file mode 100644 index 0fa80c4..0000000 Binary files a/docs/static/images/88x31/kmfms-n.gif and /dev/null differ diff --git a/docs/static/images/88x31/knbutton.gif b/docs/static/images/88x31/knbutton.gif deleted file mode 100644 index a11c3a7..0000000 Binary files a/docs/static/images/88x31/knbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/konata.gif b/docs/static/images/88x31/konata.gif deleted file mode 100644 index ac1e57c..0000000 Binary files a/docs/static/images/88x31/konata.gif and /dev/null differ diff --git a/docs/static/images/88x31/li.png b/docs/static/images/88x31/li.png deleted file mode 100644 index fb64ed2..0000000 Binary files a/docs/static/images/88x31/li.png and /dev/null differ diff --git a/docs/static/images/88x31/libreboot.gif b/docs/static/images/88x31/libreboot.gif deleted file mode 100644 index 65f2918..0000000 Binary files a/docs/static/images/88x31/libreboot.gif and /dev/null differ diff --git a/docs/static/images/88x31/linksbrow.gif b/docs/static/images/88x31/linksbrow.gif deleted file mode 100644 index a4a65d1..0000000 Binary files a/docs/static/images/88x31/linksbrow.gif and /dev/null differ diff --git a/docs/static/images/88x31/linres.gif b/docs/static/images/88x31/linres.gif deleted file mode 100644 index 125f631..0000000 Binary files a/docs/static/images/88x31/linres.gif and /dev/null differ diff --git a/docs/static/images/88x31/linux-directory.gif b/docs/static/images/88x31/linux-directory.gif deleted file mode 100644 index 901bcf6..0000000 Binary files a/docs/static/images/88x31/linux-directory.gif and /dev/null differ diff --git a/docs/static/images/88x31/linux-p.gif b/docs/static/images/88x31/linux-p.gif deleted file mode 100644 index 32b2658..0000000 Binary files a/docs/static/images/88x31/linux-p.gif and /dev/null differ diff --git a/docs/static/images/88x31/linux.gif b/docs/static/images/88x31/linux.gif deleted file mode 100644 index ba8241c..0000000 Binary files a/docs/static/images/88x31/linux.gif and /dev/null differ diff --git a/docs/static/images/88x31/linuxberg.gif b/docs/static/images/88x31/linuxberg.gif deleted file mode 100644 index ae5be81..0000000 Binary files a/docs/static/images/88x31/linuxberg.gif and /dev/null differ diff --git a/docs/static/images/88x31/linuxgames_button.gif b/docs/static/images/88x31/linuxgames_button.gif deleted file mode 100644 index 9533e72..0000000 Binary files a/docs/static/images/88x31/linuxgames_button.gif and /dev/null differ diff --git a/docs/static/images/88x31/linuxnow.jpg b/docs/static/images/88x31/linuxnow.jpg deleted file mode 100644 index d776ca4..0000000 Binary files a/docs/static/images/88x31/linuxnow.jpg and /dev/null differ diff --git a/docs/static/images/88x31/linuxnow2.gif b/docs/static/images/88x31/linuxnow2.gif deleted file mode 100644 index 03b9285..0000000 Binary files a/docs/static/images/88x31/linuxnow2.gif and /dev/null differ diff --git a/docs/static/images/88x31/lynx-anim.gif b/docs/static/images/88x31/lynx-anim.gif deleted file mode 100644 index c87a993..0000000 Binary files a/docs/static/images/88x31/lynx-anim.gif and /dev/null differ diff --git a/docs/static/images/88x31/lynx-lutz.gif b/docs/static/images/88x31/lynx-lutz.gif deleted file mode 100644 index 293a9ec..0000000 Binary files a/docs/static/images/88x31/lynx-lutz.gif and /dev/null differ diff --git a/docs/static/images/88x31/mastodon_button_1.gif b/docs/static/images/88x31/mastodon_button_1.gif deleted file mode 100644 index c154de8..0000000 Binary files a/docs/static/images/88x31/mastodon_button_1.gif and /dev/null differ diff --git a/docs/static/images/88x31/members_choice_19961109.gif b/docs/static/images/88x31/members_choice_19961109.gif deleted file mode 100644 index a01a8e2..0000000 Binary files a/docs/static/images/88x31/members_choice_19961109.gif and /dev/null differ diff --git a/docs/static/images/88x31/mentos.gif b/docs/static/images/88x31/mentos.gif deleted file mode 100644 index 76f2247..0000000 Binary files a/docs/static/images/88x31/mentos.gif and /dev/null differ diff --git a/docs/static/images/88x31/merlinxp.gif b/docs/static/images/88x31/merlinxp.gif deleted file mode 100644 index e5470a4..0000000 Binary files a/docs/static/images/88x31/merlinxp.gif and /dev/null differ diff --git a/docs/static/images/88x31/mirc.gif b/docs/static/images/88x31/mirc.gif deleted file mode 100644 index 356b5db..0000000 Binary files a/docs/static/images/88x31/mirc.gif and /dev/null differ diff --git a/docs/static/images/88x31/mirc50.gif b/docs/static/images/88x31/mirc50.gif deleted file mode 100644 index 38daaf5..0000000 Binary files a/docs/static/images/88x31/mirc50.gif and /dev/null differ diff --git a/docs/static/images/88x31/mirc53.gif b/docs/static/images/88x31/mirc53.gif deleted file mode 100644 index 1967efd..0000000 Binary files a/docs/static/images/88x31/mirc53.gif and /dev/null differ diff --git a/docs/static/images/88x31/mircnet.gif b/docs/static/images/88x31/mircnet.gif deleted file mode 100644 index 9de854b..0000000 Binary files a/docs/static/images/88x31/mircnet.gif and /dev/null differ diff --git a/docs/static/images/88x31/mircnow2.gif b/docs/static/images/88x31/mircnow2.gif deleted file mode 100644 index c379430..0000000 Binary files a/docs/static/images/88x31/mircnow2.gif and /dev/null differ diff --git a/docs/static/images/88x31/mircnow56.gif b/docs/static/images/88x31/mircnow56.gif deleted file mode 100644 index 7369340..0000000 Binary files a/docs/static/images/88x31/mircnow56.gif and /dev/null differ diff --git a/docs/static/images/88x31/mircnow_002.gif b/docs/static/images/88x31/mircnow_002.gif deleted file mode 100644 index 8fec6cd..0000000 Binary files a/docs/static/images/88x31/mircnow_002.gif and /dev/null differ diff --git a/docs/static/images/88x31/mousemade.gif b/docs/static/images/88x31/mousemade.gif deleted file mode 100644 index bc5d7fe..0000000 Binary files a/docs/static/images/88x31/mousemade.gif and /dev/null differ diff --git a/docs/static/images/88x31/ms-iex.gif b/docs/static/images/88x31/ms-iex.gif deleted file mode 100644 index 0a0dd71..0000000 Binary files a/docs/static/images/88x31/ms-iex.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dir_88x31_20000815.gif b/docs/static/images/88x31/mwm_dir_88x31_20000815.gif deleted file mode 100644 index aaf783c..0000000 Binary files a/docs/static/images/88x31/mwm_dir_88x31_20000815.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_director_120_40_20021015.gif b/docs/static/images/88x31/mwm_director_120_40_20021015.gif deleted file mode 100644 index 8d32fca..0000000 Binary files a/docs/static/images/88x31/mwm_director_120_40_20021015.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dirmw_120_40_20030404.gif b/docs/static/images/88x31/mwm_dirmw_120_40_20030404.gif deleted file mode 100644 index 6560a87..0000000 Binary files a/docs/static/images/88x31/mwm_dirmw_120_40_20030404.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dirmw_88_31_20061117.gif b/docs/static/images/88x31/mwm_dirmw_88_31_20061117.gif deleted file mode 100644 index 7ad029c..0000000 Binary files a/docs/static/images/88x31/mwm_dirmw_88_31_20061117.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dw_88x31_20000815.gif b/docs/static/images/88x31/mwm_dw_88x31_20000815.gif deleted file mode 100644 index 21c9560..0000000 Binary files a/docs/static/images/88x31/mwm_dw_88x31_20000815.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dwmx_120_40_20030404.gif b/docs/static/images/88x31/mwm_dwmx_120_40_20030404.gif deleted file mode 100644 index 20a3b19..0000000 Binary files a/docs/static/images/88x31/mwm_dwmx_120_40_20030404.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_dwmx_88_31_20061117.gif b/docs/static/images/88x31/mwm_dwmx_88_31_20061117.gif deleted file mode 100644 index 60135ba..0000000 Binary files a/docs/static/images/88x31/mwm_dwmx_88_31_20061117.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_fla_88x31_20000815.gif b/docs/static/images/88x31/mwm_fla_88x31_20000815.gif deleted file mode 100644 index ce87748..0000000 Binary files a/docs/static/images/88x31/mwm_fla_88x31_20000815.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_flmx_120_40_20030404.gif b/docs/static/images/88x31/mwm_flmx_120_40_20030404.gif deleted file mode 100644 index 0479209..0000000 Binary files a/docs/static/images/88x31/mwm_flmx_120_40_20030404.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_fw_88x31_20000815.gif b/docs/static/images/88x31/mwm_fw_88x31_20000815.gif deleted file mode 100644 index afbbdc7..0000000 Binary files a/docs/static/images/88x31/mwm_fw_88x31_20000815.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_fwmx_120_40_20030404.gif b/docs/static/images/88x31/mwm_fwmx_120_40_20030404.gif deleted file mode 100644 index d14dfe8..0000000 Binary files a/docs/static/images/88x31/mwm_fwmx_120_40_20030404.gif and /dev/null differ diff --git a/docs/static/images/88x31/mwm_fwmx_88_31_20061117.gif b/docs/static/images/88x31/mwm_fwmx_88_31_20061117.gif deleted file mode 100644 index ac0c73a..0000000 Binary files a/docs/static/images/88x31/mwm_fwmx_88_31_20061117.gif and /dev/null differ diff --git a/docs/static/images/88x31/mymusic.gif b/docs/static/images/88x31/mymusic.gif deleted file mode 100644 index 3d50cd9..0000000 Binary files a/docs/static/images/88x31/mymusic.gif and /dev/null differ diff --git a/docs/static/images/88x31/myspace.gif b/docs/static/images/88x31/myspace.gif deleted file mode 100644 index 8cc1460..0000000 Binary files a/docs/static/images/88x31/myspace.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql-88x31-bow.gif b/docs/static/images/88x31/mysql-88x31-bow.gif deleted file mode 100644 index 801e8f7..0000000 Binary files a/docs/static/images/88x31/mysql-88x31-bow.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql-88x31-wob.gif b/docs/static/images/88x31/mysql-88x31-wob.gif deleted file mode 100644 index cd3544c..0000000 Binary files a/docs/static/images/88x31/mysql-88x31-wob.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql-88x31.gif b/docs/static/images/88x31/mysql-88x31.gif deleted file mode 100644 index 6beda36..0000000 Binary files a/docs/static/images/88x31/mysql-88x31.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql4.gif b/docs/static/images/88x31/mysql4.gif deleted file mode 100644 index 34e074b..0000000 Binary files a/docs/static/images/88x31/mysql4.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql5.gif b/docs/static/images/88x31/mysql5.gif deleted file mode 100644 index f78b8a1..0000000 Binary files a/docs/static/images/88x31/mysql5.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysql_88x31.gif b/docs/static/images/88x31/mysql_88x31.gif deleted file mode 100644 index cac153d..0000000 Binary files a/docs/static/images/88x31/mysql_88x31.gif and /dev/null differ diff --git a/docs/static/images/88x31/mysqla.gif b/docs/static/images/88x31/mysqla.gif deleted file mode 100644 index cfd3e1c..0000000 Binary files a/docs/static/images/88x31/mysqla.gif and /dev/null differ diff --git a/docs/static/images/88x31/n64.gif b/docs/static/images/88x31/n64.gif deleted file mode 100644 index bcd3645..0000000 Binary files a/docs/static/images/88x31/n64.gif and /dev/null differ diff --git a/docs/static/images/88x31/nailbutt.gif b/docs/static/images/88x31/nailbutt.gif deleted file mode 100644 index e74948f..0000000 Binary files a/docs/static/images/88x31/nailbutt.gif and /dev/null differ diff --git a/docs/static/images/88x31/namcomuseum.gif b/docs/static/images/88x31/namcomuseum.gif deleted file mode 100644 index 2f81088..0000000 Binary files a/docs/static/images/88x31/namcomuseum.gif and /dev/null differ diff --git a/docs/static/images/88x31/nano.gif b/docs/static/images/88x31/nano.gif deleted file mode 100644 index d3e1025..0000000 Binary files a/docs/static/images/88x31/nano.gif and /dev/null differ diff --git a/docs/static/images/88x31/nano2.gif b/docs/static/images/88x31/nano2.gif deleted file mode 100644 index 079c476..0000000 Binary files a/docs/static/images/88x31/nano2.gif and /dev/null differ diff --git a/docs/static/images/88x31/nanoarrow.gif b/docs/static/images/88x31/nanoarrow.gif deleted file mode 100644 index d6c3dc3..0000000 Binary files a/docs/static/images/88x31/nanoarrow.gif and /dev/null differ diff --git a/docs/static/images/88x31/navidrome.gif b/docs/static/images/88x31/navidrome.gif deleted file mode 100644 index b95f070..0000000 Binary files a/docs/static/images/88x31/navidrome.gif and /dev/null differ diff --git a/docs/static/images/88x31/nclinux.gif b/docs/static/images/88x31/nclinux.gif deleted file mode 100644 index adfd866..0000000 Binary files a/docs/static/images/88x31/nclinux.gif and /dev/null differ diff --git a/docs/static/images/88x31/net_escape.gif b/docs/static/images/88x31/net_escape.gif deleted file mode 100644 index 8597cd0..0000000 Binary files a/docs/static/images/88x31/net_escape.gif and /dev/null differ diff --git a/docs/static/images/88x31/netbeans_download_88x31.gif b/docs/static/images/88x31/netbeans_download_88x31.gif deleted file mode 100644 index 9c892d0..0000000 Binary files a/docs/static/images/88x31/netbeans_download_88x31.gif and /dev/null differ diff --git a/docs/static/images/88x31/netbsd.gif b/docs/static/images/88x31/netbsd.gif deleted file mode 100644 index 1f8cf8e..0000000 Binary files a/docs/static/images/88x31/netbsd.gif and /dev/null differ diff --git a/docs/static/images/88x31/netbsd2.gif b/docs/static/images/88x31/netbsd2.gif deleted file mode 100644 index d27bfe7..0000000 Binary files a/docs/static/images/88x31/netbsd2.gif and /dev/null differ diff --git a/docs/static/images/88x31/netscape6.gif b/docs/static/images/88x31/netscape6.gif deleted file mode 100644 index ff768aa..0000000 Binary files a/docs/static/images/88x31/netscape6.gif and /dev/null differ diff --git a/docs/static/images/88x31/netscape_cd.gif b/docs/static/images/88x31/netscape_cd.gif deleted file mode 100644 index 54f3b93..0000000 Binary files a/docs/static/images/88x31/netscape_cd.gif and /dev/null differ diff --git a/docs/static/images/88x31/netscape_now01.gif b/docs/static/images/88x31/netscape_now01.gif deleted file mode 100644 index 853d098..0000000 Binary files a/docs/static/images/88x31/netscape_now01.gif and /dev/null differ diff --git a/docs/static/images/88x31/netscapecd.gif b/docs/static/images/88x31/netscapecd.gif deleted file mode 100644 index 29dd296..0000000 Binary files a/docs/static/images/88x31/netscapecd.gif and /dev/null differ diff --git a/docs/static/images/88x31/newbuttonone.gif b/docs/static/images/88x31/newbuttonone.gif deleted file mode 100644 index 95008f7..0000000 Binary files a/docs/static/images/88x31/newbuttonone.gif and /dev/null differ diff --git a/docs/static/images/88x31/newbuttontwo.gif b/docs/static/images/88x31/newbuttontwo.gif deleted file mode 100644 index 1365cab..0000000 Binary files a/docs/static/images/88x31/newbuttontwo.gif and /dev/null differ diff --git a/docs/static/images/88x31/newgame.png b/docs/static/images/88x31/newgame.png deleted file mode 100644 index 8336562..0000000 Binary files a/docs/static/images/88x31/newgame.png and /dev/null differ diff --git a/docs/static/images/88x31/newlambda.gif b/docs/static/images/88x31/newlambda.gif deleted file mode 100644 index f0a82dc..0000000 Binary files a/docs/static/images/88x31/newlambda.gif and /dev/null differ diff --git a/docs/static/images/88x31/nextcloud.gif b/docs/static/images/88x31/nextcloud.gif deleted file mode 100644 index df5fef3..0000000 Binary files a/docs/static/images/88x31/nextcloud.gif and /dev/null differ diff --git a/docs/static/images/88x31/nokia64.gif b/docs/static/images/88x31/nokia64.gif deleted file mode 100644 index f3e873f..0000000 Binary files a/docs/static/images/88x31/nokia64.gif and /dev/null differ diff --git a/docs/static/images/88x31/notebook.gif b/docs/static/images/88x31/notebook.gif deleted file mode 100644 index 6ea3c87..0000000 Binary files a/docs/static/images/88x31/notebook.gif and /dev/null differ diff --git a/docs/static/images/88x31/notepad-logo3.gif b/docs/static/images/88x31/notepad-logo3.gif deleted file mode 100644 index 08cec6b..0000000 Binary files a/docs/static/images/88x31/notepad-logo3.gif and /dev/null differ diff --git a/docs/static/images/88x31/notepad3.gif b/docs/static/images/88x31/notepad3.gif deleted file mode 100644 index 6a64d11..0000000 Binary files a/docs/static/images/88x31/notepad3.gif and /dev/null differ diff --git a/docs/static/images/88x31/one.gif b/docs/static/images/88x31/one.gif deleted file mode 100644 index d659e6d..0000000 Binary files a/docs/static/images/88x31/one.gif and /dev/null differ diff --git a/docs/static/images/88x31/openeye.gif b/docs/static/images/88x31/openeye.gif deleted file mode 100644 index 6924012..0000000 Binary files a/docs/static/images/88x31/openeye.gif and /dev/null differ diff --git a/docs/static/images/88x31/openeyes.gif b/docs/static/images/88x31/openeyes.gif deleted file mode 100644 index 1a5a142..0000000 Binary files a/docs/static/images/88x31/openeyes.gif and /dev/null differ diff --git a/docs/static/images/88x31/opengl.gif b/docs/static/images/88x31/opengl.gif deleted file mode 100644 index bb96801..0000000 Binary files a/docs/static/images/88x31/opengl.gif and /dev/null differ diff --git a/docs/static/images/88x31/opennet.gif b/docs/static/images/88x31/opennet.gif deleted file mode 100644 index 4d3589c..0000000 Binary files a/docs/static/images/88x31/opennet.gif and /dev/null differ diff --git a/docs/static/images/88x31/openwall.gif b/docs/static/images/88x31/openwall.gif deleted file mode 100644 index c9f946d..0000000 Binary files a/docs/static/images/88x31/openwall.gif and /dev/null differ diff --git a/docs/static/images/88x31/ostan.gif b/docs/static/images/88x31/ostan.gif deleted file mode 100644 index cff1a6e..0000000 Binary files a/docs/static/images/88x31/ostan.gif and /dev/null differ diff --git a/docs/static/images/88x31/otaking.png b/docs/static/images/88x31/otaking.png deleted file mode 100644 index 88405f9..0000000 Binary files a/docs/static/images/88x31/otaking.png and /dev/null differ diff --git a/docs/static/images/88x31/otaku.gif b/docs/static/images/88x31/otaku.gif deleted file mode 100644 index 0f60a9e..0000000 Binary files a/docs/static/images/88x31/otaku.gif and /dev/null differ diff --git a/docs/static/images/88x31/parental.png b/docs/static/images/88x31/parental.png deleted file mode 100644 index ba89dab..0000000 Binary files a/docs/static/images/88x31/parental.png and /dev/null differ diff --git a/docs/static/images/88x31/penguins.gif b/docs/static/images/88x31/penguins.gif deleted file mode 100644 index ff5b112..0000000 Binary files a/docs/static/images/88x31/penguins.gif and /dev/null differ diff --git a/docs/static/images/88x31/petzcape.gif b/docs/static/images/88x31/petzcape.gif deleted file mode 100644 index 43d3418..0000000 Binary files a/docs/static/images/88x31/petzcape.gif and /dev/null differ diff --git a/docs/static/images/88x31/pgn.gif b/docs/static/images/88x31/pgn.gif deleted file mode 100644 index 93d4a9e..0000000 Binary files a/docs/static/images/88x31/pgn.gif and /dev/null differ diff --git a/docs/static/images/88x31/piracy.png b/docs/static/images/88x31/piracy.png deleted file mode 100644 index fd6fe15..0000000 Binary files a/docs/static/images/88x31/piracy.png and /dev/null differ diff --git a/docs/static/images/88x31/plasticlove.gif b/docs/static/images/88x31/plasticlove.gif deleted file mode 100644 index 3f23dcc..0000000 Binary files a/docs/static/images/88x31/plasticlove.gif and /dev/null differ diff --git a/docs/static/images/88x31/pngbar.gif b/docs/static/images/88x31/pngbar.gif deleted file mode 100644 index a9d2f92..0000000 Binary files a/docs/static/images/88x31/pngbar.gif and /dev/null differ diff --git a/docs/static/images/88x31/pngnow.png b/docs/static/images/88x31/pngnow.png deleted file mode 100644 index 5375f8e..0000000 Binary files a/docs/static/images/88x31/pngnow.png and /dev/null differ diff --git a/docs/static/images/88x31/poetryrenaissance.png b/docs/static/images/88x31/poetryrenaissance.png deleted file mode 100644 index 5a4c501..0000000 Binary files a/docs/static/images/88x31/poetryrenaissance.png and /dev/null differ diff --git a/docs/static/images/88x31/power-button_20000304.gif b/docs/static/images/88x31/power-button_20000304.gif deleted file mode 100644 index cd41141..0000000 Binary files a/docs/static/images/88x31/power-button_20000304.gif and /dev/null differ diff --git a/docs/static/images/88x31/powered-by-debian.gif b/docs/static/images/88x31/powered-by-debian.gif deleted file mode 100644 index 1f617c8..0000000 Binary files a/docs/static/images/88x31/powered-by-debian.gif and /dev/null differ diff --git a/docs/static/images/88x31/powered-cpp.gif b/docs/static/images/88x31/powered-cpp.gif deleted file mode 100644 index 6b8dddd..0000000 Binary files a/docs/static/images/88x31/powered-cpp.gif and /dev/null differ diff --git a/docs/static/images/88x31/proud_of_my_son.gif b/docs/static/images/88x31/proud_of_my_son.gif deleted file mode 100644 index 25fe2ee..0000000 Binary files a/docs/static/images/88x31/proud_of_my_son.gif and /dev/null differ diff --git a/docs/static/images/88x31/publicdomain.gif b/docs/static/images/88x31/publicdomain.gif deleted file mode 100644 index 0cc5528..0000000 Binary files a/docs/static/images/88x31/publicdomain.gif and /dev/null differ diff --git a/docs/static/images/88x31/publicdomain2.png b/docs/static/images/88x31/publicdomain2.png deleted file mode 100644 index c078808..0000000 Binary files a/docs/static/images/88x31/publicdomain2.png and /dev/null differ diff --git a/docs/static/images/88x31/pwsuse.gif b/docs/static/images/88x31/pwsuse.gif deleted file mode 100644 index 12b76e1..0000000 Binary files a/docs/static/images/88x31/pwsuse.gif and /dev/null differ diff --git a/docs/static/images/88x31/qnow7.gif b/docs/static/images/88x31/qnow7.gif deleted file mode 100644 index f4acf30..0000000 Binary files a/docs/static/images/88x31/qnow7.gif and /dev/null differ diff --git a/docs/static/images/88x31/quake-button1.gif b/docs/static/images/88x31/quake-button1.gif deleted file mode 100644 index 3f49e1c..0000000 Binary files a/docs/static/images/88x31/quake-button1.gif and /dev/null differ diff --git a/docs/static/images/88x31/quake-button2.gif b/docs/static/images/88x31/quake-button2.gif deleted file mode 100644 index 569f495..0000000 Binary files a/docs/static/images/88x31/quake-button2.gif and /dev/null differ diff --git a/docs/static/images/88x31/quake2levels.gif b/docs/static/images/88x31/quake2levels.gif deleted file mode 100644 index 7079fc9..0000000 Binary files a/docs/static/images/88x31/quake2levels.gif and /dev/null differ diff --git a/docs/static/images/88x31/r03.gif b/docs/static/images/88x31/r03.gif deleted file mode 100644 index 7609a17..0000000 Binary files a/docs/static/images/88x31/r03.gif and /dev/null differ diff --git a/docs/static/images/88x31/rainbow_bev.gif b/docs/static/images/88x31/rainbow_bev.gif deleted file mode 100644 index 5ec7386..0000000 Binary files a/docs/static/images/88x31/rainbow_bev.gif and /dev/null differ diff --git a/docs/static/images/88x31/rainbowrain.gif b/docs/static/images/88x31/rainbowrain.gif deleted file mode 100644 index 1f50feb..0000000 Binary files a/docs/static/images/88x31/rainbowrain.gif and /dev/null differ diff --git a/docs/static/images/88x31/ralseismokingadart.gif b/docs/static/images/88x31/ralseismokingadart.gif deleted file mode 100644 index 9e3d13f..0000000 Binary files a/docs/static/images/88x31/ralseismokingadart.gif and /dev/null differ diff --git a/docs/static/images/88x31/rararchiverlogo.gif b/docs/static/images/88x31/rararchiverlogo.gif deleted file mode 100644 index 16c2b8e..0000000 Binary files a/docs/static/images/88x31/rararchiverlogo.gif and /dev/null differ diff --git a/docs/static/images/88x31/rave.gif b/docs/static/images/88x31/rave.gif deleted file mode 100644 index bc9b736..0000000 Binary files a/docs/static/images/88x31/rave.gif and /dev/null differ diff --git a/docs/static/images/88x31/recommend.gif b/docs/static/images/88x31/recommend.gif deleted file mode 100644 index 3b06631..0000000 Binary files a/docs/static/images/88x31/recommend.gif and /dev/null differ diff --git a/docs/static/images/88x31/redhat.gif b/docs/static/images/88x31/redhat.gif deleted file mode 100644 index 562cf93..0000000 Binary files a/docs/static/images/88x31/redhat.gif and /dev/null differ diff --git a/docs/static/images/88x31/redhat1.gif b/docs/static/images/88x31/redhat1.gif deleted file mode 100644 index 4dc69f6..0000000 Binary files a/docs/static/images/88x31/redhat1.gif and /dev/null differ diff --git a/docs/static/images/88x31/redhat2.gif b/docs/static/images/88x31/redhat2.gif deleted file mode 100644 index 78f4513..0000000 Binary files a/docs/static/images/88x31/redhat2.gif and /dev/null differ diff --git a/docs/static/images/88x31/reshirii.gif b/docs/static/images/88x31/reshirii.gif deleted file mode 100644 index 8cb0971..0000000 Binary files a/docs/static/images/88x31/reshirii.gif and /dev/null differ diff --git a/docs/static/images/88x31/rlinux.gif b/docs/static/images/88x31/rlinux.gif deleted file mode 100644 index 6146825..0000000 Binary files a/docs/static/images/88x31/rlinux.gif and /dev/null differ diff --git a/docs/static/images/88x31/rosydolly.gif b/docs/static/images/88x31/rosydolly.gif deleted file mode 100644 index b214358..0000000 Binary files a/docs/static/images/88x31/rosydolly.gif and /dev/null differ diff --git a/docs/static/images/88x31/rresbb.gif b/docs/static/images/88x31/rresbb.gif deleted file mode 100644 index a78b9c9..0000000 Binary files a/docs/static/images/88x31/rresbb.gif and /dev/null differ diff --git a/docs/static/images/88x31/rss-button.gif b/docs/static/images/88x31/rss-button.gif deleted file mode 100644 index 6d20802..0000000 Binary files a/docs/static/images/88x31/rss-button.gif and /dev/null differ diff --git a/docs/static/images/88x31/rukia.gif b/docs/static/images/88x31/rukia.gif deleted file mode 100644 index 8596c3d..0000000 Binary files a/docs/static/images/88x31/rukia.gif and /dev/null differ diff --git a/docs/static/images/88x31/sarcasm.gif b/docs/static/images/88x31/sarcasm.gif deleted file mode 100644 index 7633b58..0000000 Binary files a/docs/static/images/88x31/sarcasm.gif and /dev/null differ diff --git a/docs/static/images/88x31/saturnscape.jpg b/docs/static/images/88x31/saturnscape.jpg deleted file mode 100644 index 9f2546d..0000000 Binary files a/docs/static/images/88x31/saturnscape.jpg and /dev/null differ diff --git a/docs/static/images/88x31/scape.gif b/docs/static/images/88x31/scape.gif deleted file mode 100644 index 13ea643..0000000 Binary files a/docs/static/images/88x31/scape.gif and /dev/null differ diff --git a/docs/static/images/88x31/schoolsucks.gif b/docs/static/images/88x31/schoolsucks.gif deleted file mode 100644 index 1bfc2cf..0000000 Binary files a/docs/static/images/88x31/schoolsucks.gif and /dev/null differ diff --git a/docs/static/images/88x31/screw.gif b/docs/static/images/88x31/screw.gif deleted file mode 100644 index 5c1044e..0000000 Binary files a/docs/static/images/88x31/screw.gif and /dev/null differ diff --git a/docs/static/images/88x31/shockwave.gif b/docs/static/images/88x31/shockwave.gif deleted file mode 100644 index e010006..0000000 Binary files a/docs/static/images/88x31/shockwave.gif and /dev/null differ diff --git a/docs/static/images/88x31/shockwave2.gif b/docs/static/images/88x31/shockwave2.gif deleted file mode 100644 index 32dc56c..0000000 Binary files a/docs/static/images/88x31/shockwave2.gif and /dev/null differ diff --git a/docs/static/images/88x31/sky-manta.gif b/docs/static/images/88x31/sky-manta.gif deleted file mode 100644 index e0e3cbd..0000000 Binary files a/docs/static/images/88x31/sky-manta.gif and /dev/null differ diff --git a/docs/static/images/88x31/skybutton.gif b/docs/static/images/88x31/skybutton.gif deleted file mode 100644 index 7322c6b..0000000 Binary files a/docs/static/images/88x31/skybutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/slimesnow.gif b/docs/static/images/88x31/slimesnow.gif deleted file mode 100644 index 12d4d7c..0000000 Binary files a/docs/static/images/88x31/slimesnow.gif and /dev/null differ diff --git a/docs/static/images/88x31/someplace-else.png b/docs/static/images/88x31/someplace-else.png deleted file mode 100644 index 4608cd8..0000000 Binary files a/docs/static/images/88x31/someplace-else.png and /dev/null differ diff --git a/docs/static/images/88x31/someplace-else_2.png b/docs/static/images/88x31/someplace-else_2.png deleted file mode 100644 index e59e082..0000000 Binary files a/docs/static/images/88x31/someplace-else_2.png and /dev/null differ diff --git a/docs/static/images/88x31/sonc.gif b/docs/static/images/88x31/sonc.gif deleted file mode 100644 index 007af69..0000000 Binary files a/docs/static/images/88x31/sonc.gif and /dev/null differ diff --git a/docs/static/images/88x31/sonic2000now.gif b/docs/static/images/88x31/sonic2000now.gif deleted file mode 100644 index 1247e08..0000000 Binary files a/docs/static/images/88x31/sonic2000now.gif and /dev/null differ diff --git a/docs/static/images/88x31/sonicstadium.gif b/docs/static/images/88x31/sonicstadium.gif deleted file mode 100644 index e258b1a..0000000 Binary files a/docs/static/images/88x31/sonicstadium.gif and /dev/null differ diff --git a/docs/static/images/88x31/sont.gif b/docs/static/images/88x31/sont.gif deleted file mode 100644 index 008798a..0000000 Binary files a/docs/static/images/88x31/sont.gif and /dev/null differ diff --git a/docs/static/images/88x31/soulseek.gif b/docs/static/images/88x31/soulseek.gif deleted file mode 100644 index c53d0fa..0000000 Binary files a/docs/static/images/88x31/soulseek.gif and /dev/null differ diff --git a/docs/static/images/88x31/spdy-now.gif b/docs/static/images/88x31/spdy-now.gif deleted file mode 100644 index 628e7eb..0000000 Binary files a/docs/static/images/88x31/spdy-now.gif and /dev/null differ diff --git a/docs/static/images/88x31/speedtrap.gif b/docs/static/images/88x31/speedtrap.gif deleted file mode 100644 index 26158d5..0000000 Binary files a/docs/static/images/88x31/speedtrap.gif and /dev/null differ diff --git a/docs/static/images/88x31/spicebutton.gif b/docs/static/images/88x31/spicebutton.gif deleted file mode 100644 index 83abcbe..0000000 Binary files a/docs/static/images/88x31/spicebutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/star-textless.gif b/docs/static/images/88x31/star-textless.gif deleted file mode 100644 index d6a894a..0000000 Binary files a/docs/static/images/88x31/star-textless.gif and /dev/null differ diff --git a/docs/static/images/88x31/startpage_button.gif b/docs/static/images/88x31/startpage_button.gif deleted file mode 100644 index 3eee660..0000000 Binary files a/docs/static/images/88x31/startpage_button.gif and /dev/null differ diff --git a/docs/static/images/88x31/stop.gif b/docs/static/images/88x31/stop.gif deleted file mode 100644 index d382a27..0000000 Binary files a/docs/static/images/88x31/stop.gif and /dev/null differ diff --git a/docs/static/images/88x31/sun.gif b/docs/static/images/88x31/sun.gif deleted file mode 100644 index 674e32a..0000000 Binary files a/docs/static/images/88x31/sun.gif and /dev/null differ diff --git a/docs/static/images/88x31/telnet.gif b/docs/static/images/88x31/telnet.gif deleted file mode 100644 index bf4c320..0000000 Binary files a/docs/static/images/88x31/telnet.gif and /dev/null differ diff --git a/docs/static/images/88x31/tenkuma.gif b/docs/static/images/88x31/tenkuma.gif deleted file mode 100644 index 2cb4d0c..0000000 Binary files a/docs/static/images/88x31/tenkuma.gif and /dev/null differ diff --git a/docs/static/images/88x31/terrorpuppe.gif b/docs/static/images/88x31/terrorpuppe.gif deleted file mode 100644 index b59c27e..0000000 Binary files a/docs/static/images/88x31/terrorpuppe.gif and /dev/null differ diff --git a/docs/static/images/88x31/tetban.gif b/docs/static/images/88x31/tetban.gif deleted file mode 100644 index 3273718..0000000 Binary files a/docs/static/images/88x31/tetban.gif and /dev/null differ diff --git a/docs/static/images/88x31/thatwhitehand.png b/docs/static/images/88x31/thatwhitehand.png deleted file mode 100644 index 6fa7355..0000000 Binary files a/docs/static/images/88x31/thatwhitehand.png and /dev/null differ diff --git a/docs/static/images/88x31/therealman.png b/docs/static/images/88x31/therealman.png deleted file mode 100644 index 771da5e..0000000 Binary files a/docs/static/images/88x31/therealman.png and /dev/null differ diff --git a/docs/static/images/88x31/tohell.gif b/docs/static/images/88x31/tohell.gif deleted file mode 100644 index bc68c6f..0000000 Binary files a/docs/static/images/88x31/tohell.gif and /dev/null differ diff --git a/docs/static/images/88x31/tumblr_ou69gmb2xM1wvu485o9_100.gif b/docs/static/images/88x31/tumblr_ou69gmb2xM1wvu485o9_100.gif deleted file mode 100644 index 27c8f78..0000000 Binary files a/docs/static/images/88x31/tumblr_ou69gmb2xM1wvu485o9_100.gif and /dev/null differ diff --git a/docs/static/images/88x31/tumblr_ou69s0gvdZ1wvu485o9_100.gif b/docs/static/images/88x31/tumblr_ou69s0gvdZ1wvu485o9_100.gif deleted file mode 100644 index dd832a0..0000000 Binary files a/docs/static/images/88x31/tumblr_ou69s0gvdZ1wvu485o9_100.gif and /dev/null differ diff --git a/docs/static/images/88x31/tumblr_pti7o0xpyg1xwjivko7_100.gif b/docs/static/images/88x31/tumblr_pti7o0xpyg1xwjivko7_100.gif deleted file mode 100644 index d99b276..0000000 Binary files a/docs/static/images/88x31/tumblr_pti7o0xpyg1xwjivko7_100.gif and /dev/null differ diff --git a/docs/static/images/88x31/ublock-now.png b/docs/static/images/88x31/ublock-now.png deleted file mode 100644 index c82555b..0000000 Binary files a/docs/static/images/88x31/ublock-now.png and /dev/null differ diff --git a/docs/static/images/88x31/ubuntu-88x31.gif b/docs/static/images/88x31/ubuntu-88x31.gif deleted file mode 100644 index f5faf5f..0000000 Binary files a/docs/static/images/88x31/ubuntu-88x31.gif and /dev/null differ diff --git a/docs/static/images/88x31/undercon2.gif b/docs/static/images/88x31/undercon2.gif deleted file mode 100644 index c4b8f37..0000000 Binary files a/docs/static/images/88x31/undercon2.gif and /dev/null differ diff --git a/docs/static/images/88x31/upallnight.gif b/docs/static/images/88x31/upallnight.gif deleted file mode 100644 index 8c9b5b8..0000000 Binary files a/docs/static/images/88x31/upallnight.gif and /dev/null differ diff --git a/docs/static/images/88x31/upyours2.gif b/docs/static/images/88x31/upyours2.gif deleted file mode 100644 index b5327b5..0000000 Binary files a/docs/static/images/88x31/upyours2.gif and /dev/null differ diff --git a/docs/static/images/88x31/uranohead.gif b/docs/static/images/88x31/uranohead.gif deleted file mode 100644 index 5d5cf32..0000000 Binary files a/docs/static/images/88x31/uranohead.gif and /dev/null differ diff --git a/docs/static/images/88x31/verine.png b/docs/static/images/88x31/verine.png deleted file mode 100644 index 6cb72b5..0000000 Binary files a/docs/static/images/88x31/verine.png and /dev/null differ diff --git a/docs/static/images/88x31/vertpush (2).gif b/docs/static/images/88x31/vertpush (2).gif deleted file mode 100644 index e22f7b3..0000000 Binary files a/docs/static/images/88x31/vertpush (2).gif and /dev/null differ diff --git a/docs/static/images/88x31/vertpushbutton2.gif b/docs/static/images/88x31/vertpushbutton2.gif deleted file mode 100644 index 6ec4d2c..0000000 Binary files a/docs/static/images/88x31/vertpushbutton2.gif and /dev/null differ diff --git a/docs/static/images/88x31/vi_now.gif b/docs/static/images/88x31/vi_now.gif deleted file mode 100644 index c46a662..0000000 Binary files a/docs/static/images/88x31/vi_now.gif and /dev/null differ diff --git a/docs/static/images/88x31/vim.vialle.love.anim.gif b/docs/static/images/88x31/vim.vialle.love.anim.gif deleted file mode 100644 index 7a00d7f..0000000 Binary files a/docs/static/images/88x31/vim.vialle.love.anim.gif and /dev/null differ diff --git a/docs/static/images/88x31/vim_a.gif b/docs/static/images/88x31/vim_a.gif deleted file mode 100644 index 01f09f1..0000000 Binary files a/docs/static/images/88x31/vim_a.gif and /dev/null differ diff --git a/docs/static/images/88x31/violet1.gif b/docs/static/images/88x31/violet1.gif deleted file mode 100644 index 7ae03c1..0000000 Binary files a/docs/static/images/88x31/violet1.gif and /dev/null differ diff --git a/docs/static/images/88x31/vipper.gif b/docs/static/images/88x31/vipper.gif deleted file mode 100644 index e2beb2c..0000000 Binary files a/docs/static/images/88x31/vipper.gif and /dev/null differ diff --git a/docs/static/images/88x31/virus.gif b/docs/static/images/88x31/virus.gif deleted file mode 100644 index 40b2b05..0000000 Binary files a/docs/static/images/88x31/virus.gif and /dev/null differ diff --git a/docs/static/images/88x31/virusalert.gif b/docs/static/images/88x31/virusalert.gif deleted file mode 100644 index fec89ba..0000000 Binary files a/docs/static/images/88x31/virusalert.gif and /dev/null differ diff --git a/docs/static/images/88x31/visitmini.gif b/docs/static/images/88x31/visitmini.gif deleted file mode 100644 index c4e533d..0000000 Binary files a/docs/static/images/88x31/visitmini.gif and /dev/null differ diff --git a/docs/static/images/88x31/vivaldi.gif b/docs/static/images/88x31/vivaldi.gif deleted file mode 100644 index ba52da7..0000000 Binary files a/docs/static/images/88x31/vivaldi.gif and /dev/null differ diff --git a/docs/static/images/88x31/vnow.gif b/docs/static/images/88x31/vnow.gif deleted file mode 100644 index a8bdad3..0000000 Binary files a/docs/static/images/88x31/vnow.gif and /dev/null differ diff --git a/docs/static/images/88x31/vocaloid.gif b/docs/static/images/88x31/vocaloid.gif deleted file mode 100644 index 8c85708..0000000 Binary files a/docs/static/images/88x31/vocaloid.gif and /dev/null differ diff --git a/docs/static/images/88x31/vr.gif b/docs/static/images/88x31/vr.gif deleted file mode 100644 index f789119..0000000 Binary files a/docs/static/images/88x31/vr.gif and /dev/null differ diff --git a/docs/static/images/88x31/vscbutton.gif b/docs/static/images/88x31/vscbutton.gif deleted file mode 100644 index 8a4cad2..0000000 Binary files a/docs/static/images/88x31/vscbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/vxhtml10.gif b/docs/static/images/88x31/vxhtml10.gif deleted file mode 100644 index 88f0a43..0000000 Binary files a/docs/static/images/88x31/vxhtml10.gif and /dev/null differ diff --git a/docs/static/images/88x31/w0rm-party.gif b/docs/static/images/88x31/w0rm-party.gif deleted file mode 100644 index 76c914a..0000000 Binary files a/docs/static/images/88x31/w0rm-party.gif and /dev/null differ diff --git a/docs/static/images/88x31/w3c_ab.gif b/docs/static/images/88x31/w3c_ab.gif deleted file mode 100644 index 63c474b..0000000 Binary files a/docs/static/images/88x31/w3c_ab.gif and /dev/null differ diff --git a/docs/static/images/88x31/w95link.gif b/docs/static/images/88x31/w95link.gif deleted file mode 100644 index d538d79..0000000 Binary files a/docs/static/images/88x31/w95link.gif and /dev/null differ diff --git a/docs/static/images/88x31/w96_button.gif b/docs/static/images/88x31/w96_button.gif deleted file mode 100644 index 4484665..0000000 Binary files a/docs/static/images/88x31/w96_button.gif and /dev/null differ diff --git a/docs/static/images/88x31/walk-to-remember2.gif b/docs/static/images/88x31/walk-to-remember2.gif deleted file mode 100644 index 2384652..0000000 Binary files a/docs/static/images/88x31/walk-to-remember2.gif and /dev/null differ diff --git a/docs/static/images/88x31/warpnow.gif b/docs/static/images/88x31/warpnow.gif deleted file mode 100644 index 3393fd6..0000000 Binary files a/docs/static/images/88x31/warpnow.gif and /dev/null differ diff --git a/docs/static/images/88x31/waterfox.gif b/docs/static/images/88x31/waterfox.gif deleted file mode 100644 index ec7bb59..0000000 Binary files a/docs/static/images/88x31/waterfox.gif and /dev/null differ diff --git a/docs/static/images/88x31/wavecave.png b/docs/static/images/88x31/wavecave.png deleted file mode 100644 index 5813cd5..0000000 Binary files a/docs/static/images/88x31/wavecave.png and /dev/null differ diff --git a/docs/static/images/88x31/web11badge.gif b/docs/static/images/88x31/web11badge.gif deleted file mode 100644 index 19124ef..0000000 Binary files a/docs/static/images/88x31/web11badge.gif and /dev/null differ diff --git a/docs/static/images/88x31/webpassion.gif b/docs/static/images/88x31/webpassion.gif deleted file mode 100644 index 4444ae6..0000000 Binary files a/docs/static/images/88x31/webpassion.gif and /dev/null differ diff --git a/docs/static/images/88x31/wikipedia.gif b/docs/static/images/88x31/wikipedia.gif deleted file mode 100644 index c27c2a6..0000000 Binary files a/docs/static/images/88x31/wikipedia.gif and /dev/null differ diff --git a/docs/static/images/88x31/wikipedia.png b/docs/static/images/88x31/wikipedia.png deleted file mode 100644 index a604112..0000000 Binary files a/docs/static/images/88x31/wikipedia.png and /dev/null differ diff --git a/docs/static/images/88x31/winxp.gif b/docs/static/images/88x31/winxp.gif deleted file mode 100644 index 8a41a77..0000000 Binary files a/docs/static/images/88x31/winxp.gif and /dev/null differ diff --git a/docs/static/images/88x31/winxp2.gif b/docs/static/images/88x31/winxp2.gif deleted file mode 100644 index 47ee2d2..0000000 Binary files a/docs/static/images/88x31/winxp2.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmp.gif b/docs/static/images/88x31/wmp.gif deleted file mode 100644 index 4097669..0000000 Binary files a/docs/static/images/88x31/wmp.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmp10.gif b/docs/static/images/88x31/wmp10.gif deleted file mode 100644 index 696e60c..0000000 Binary files a/docs/static/images/88x31/wmp10.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmp11.gif b/docs/static/images/88x31/wmp11.gif deleted file mode 100644 index 335c5f3..0000000 Binary files a/docs/static/images/88x31/wmp11.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmp9.gif b/docs/static/images/88x31/wmp9.gif deleted file mode 100644 index 80de22e..0000000 Binary files a/docs/static/images/88x31/wmp9.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmp_20050207.gif b/docs/static/images/88x31/wmp_20050207.gif deleted file mode 100644 index 14ef798..0000000 Binary files a/docs/static/images/88x31/wmp_20050207.gif and /dev/null differ diff --git a/docs/static/images/88x31/wmpfree.gif b/docs/static/images/88x31/wmpfree.gif deleted file mode 100644 index 2f664c2..0000000 Binary files a/docs/static/images/88x31/wmpfree.gif and /dev/null differ diff --git a/docs/static/images/88x31/wow_wow.gif b/docs/static/images/88x31/wow_wow.gif deleted file mode 100644 index c5dd205..0000000 Binary files a/docs/static/images/88x31/wow_wow.gif and /dev/null differ diff --git a/docs/static/images/88x31/xfree.gif b/docs/static/images/88x31/xfree.gif deleted file mode 100644 index 7a15535..0000000 Binary files a/docs/static/images/88x31/xfree.gif and /dev/null differ diff --git a/docs/static/images/88x31/xfspowered.gif b/docs/static/images/88x31/xfspowered.gif deleted file mode 100644 index 322afc5..0000000 Binary files a/docs/static/images/88x31/xfspowered.gif and /dev/null differ diff --git a/docs/static/images/88x31/xyzzyzzyzx.png b/docs/static/images/88x31/xyzzyzzyzx.png deleted file mode 100644 index a5d3c56..0000000 Binary files a/docs/static/images/88x31/xyzzyzzyzx.png and /dev/null differ diff --git a/docs/static/images/88x31/yahooboots.gif b/docs/static/images/88x31/yahooboots.gif deleted file mode 100644 index 4d9ea8a..0000000 Binary files a/docs/static/images/88x31/yahooboots.gif and /dev/null differ diff --git a/docs/static/images/88x31/ymusic.gif b/docs/static/images/88x31/ymusic.gif deleted file mode 100644 index c495003..0000000 Binary files a/docs/static/images/88x31/ymusic.gif and /dev/null differ diff --git a/docs/static/images/88x31/yobun.png b/docs/static/images/88x31/yobun.png deleted file mode 100644 index 71ad932..0000000 Binary files a/docs/static/images/88x31/yobun.png and /dev/null differ diff --git a/docs/static/images/88x31/ytbutton.gif b/docs/static/images/88x31/ytbutton.gif deleted file mode 100644 index 61680fd..0000000 Binary files a/docs/static/images/88x31/ytbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/zd_internet_click_here.gif b/docs/static/images/88x31/zd_internet_click_here.gif deleted file mode 100644 index 1ff9a52..0000000 Binary files a/docs/static/images/88x31/zd_internet_click_here.gif and /dev/null differ diff --git a/docs/static/images/88x31/zipilebutton.gif b/docs/static/images/88x31/zipilebutton.gif deleted file mode 100644 index 9cbdf03..0000000 Binary files a/docs/static/images/88x31/zipilebutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/ztnbutton.gif b/docs/static/images/88x31/ztnbutton.gif deleted file mode 100644 index 27434d4..0000000 Binary files a/docs/static/images/88x31/ztnbutton.gif and /dev/null differ diff --git a/docs/static/images/88x31/zune.png b/docs/static/images/88x31/zune.png deleted file mode 100644 index c55fc69..0000000 Binary files a/docs/static/images/88x31/zune.png and /dev/null differ diff --git a/docs/static/images/88x31/zymicbest.gif b/docs/static/images/88x31/zymicbest.gif deleted file mode 100644 index 9ae99c5..0000000 Binary files a/docs/static/images/88x31/zymicbest.gif and /dev/null differ diff --git a/docs/static/images/8thNote.svg b/docs/static/images/8thNote.svg deleted file mode 100644 index 3d097cc..0000000 --- a/docs/static/images/8thNote.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/static/images/android-jellybean.jpg b/docs/static/images/android-jellybean.jpg deleted file mode 100644 index 8bf932a..0000000 Binary files a/docs/static/images/android-jellybean.jpg and /dev/null differ diff --git a/docs/static/images/androidrecovery.jpg b/docs/static/images/androidrecovery.jpg deleted file mode 100644 index 6d7f4fd..0000000 Binary files a/docs/static/images/androidrecovery.jpg and /dev/null differ diff --git a/docs/static/images/arrow-cursor.svg b/docs/static/images/arrow-cursor.svg deleted file mode 100644 index b630ade..0000000 --- a/docs/static/images/arrow-cursor.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/docs/static/images/bear-fade-old.jpg b/docs/static/images/bear-fade-old.jpg deleted file mode 100644 index 931bca0..0000000 Binary files a/docs/static/images/bear-fade-old.jpg and /dev/null differ diff --git a/docs/static/images/bear-fade.jpg b/docs/static/images/bear-fade.jpg deleted file mode 100644 index 6524e23..0000000 Binary files a/docs/static/images/bear-fade.jpg and /dev/null differ diff --git a/docs/static/images/bear.jpg b/docs/static/images/bear.jpg deleted file mode 100644 index 6cd61af..0000000 Binary files a/docs/static/images/bear.jpg and /dev/null differ diff --git a/docs/static/images/cameraroll.svg b/docs/static/images/cameraroll.svg deleted file mode 100644 index 6583fe3..0000000 --- a/docs/static/images/cameraroll.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/static/images/eye_of_nemesis.png b/docs/static/images/eye_of_nemesis.png deleted file mode 100644 index 5fc0ab9..0000000 Binary files a/docs/static/images/eye_of_nemesis.png and /dev/null differ diff --git a/docs/static/images/file-code.svg b/docs/static/images/file-code.svg deleted file mode 100644 index 7ef5eef..0000000 --- a/docs/static/images/file-code.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - Svg Vector Icons : http://www.onlinewebfonts.com/icon - - \ No newline at end of file diff --git a/docs/static/images/fl_screenshot_no_text.png b/docs/static/images/fl_screenshot_no_text.png deleted file mode 100644 index 919175a..0000000 Binary files a/docs/static/images/fl_screenshot_no_text.png and /dev/null differ diff --git a/docs/static/images/gears.svg b/docs/static/images/gears.svg deleted file mode 100644 index ed275ab..0000000 --- a/docs/static/images/gears.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/docs/static/images/ifc.jpg b/docs/static/images/ifc.jpg deleted file mode 100644 index 14a03df..0000000 Binary files a/docs/static/images/ifc.jpg and /dev/null differ diff --git a/docs/static/images/itemeconomy2-wide.png b/docs/static/images/itemeconomy2-wide.png deleted file mode 100644 index eb5c46d..0000000 Binary files a/docs/static/images/itemeconomy2-wide.png and /dev/null differ diff --git a/docs/static/images/jamfish-wide.png b/docs/static/images/jamfish-wide.png deleted file mode 100644 index f1d6718..0000000 Binary files a/docs/static/images/jamfish-wide.png and /dev/null differ diff --git a/docs/static/images/me.png b/docs/static/images/me.png deleted file mode 100644 index f821815..0000000 Binary files a/docs/static/images/me.png and /dev/null differ diff --git a/docs/static/images/pestowikifull.png b/docs/static/images/pestowikifull.png deleted file mode 100644 index 6be271b..0000000 Binary files a/docs/static/images/pestowikifull.png and /dev/null differ diff --git a/docs/static/images/pestowikifullwhite.png b/docs/static/images/pestowikifullwhite.png deleted file mode 100644 index c97a5a1..0000000 Binary files a/docs/static/images/pestowikifullwhite.png and /dev/null differ diff --git a/docs/static/images/redes.jpg b/docs/static/images/redes.jpg deleted file mode 100644 index 06ee81e..0000000 Binary files a/docs/static/images/redes.jpg and /dev/null differ diff --git a/docs/static/images/sigaa-inicio.png b/docs/static/images/sigaa-inicio.png deleted file mode 100644 index d9991cc..0000000 Binary files a/docs/static/images/sigaa-inicio.png and /dev/null differ diff --git a/docs/static/images/sigaa-login.png b/docs/static/images/sigaa-login.png deleted file mode 100644 index bf51e68..0000000 Binary files a/docs/static/images/sigaa-login.png and /dev/null differ diff --git a/docs/static/images/sigaa-materia.png b/docs/static/images/sigaa-materia.png deleted file mode 100644 index ffc63c1..0000000 Binary files a/docs/static/images/sigaa-materia.png and /dev/null differ diff --git a/docs/static/images/songs/pg.jpg b/docs/static/images/songs/pg.jpg deleted file mode 100644 index 7a7b04c..0000000 Binary files a/docs/static/images/songs/pg.jpg and /dev/null differ diff --git a/docs/static/images/songs/velkommen.jpg b/docs/static/images/songs/velkommen.jpg deleted file mode 100644 index 6d5232f..0000000 Binary files a/docs/static/images/songs/velkommen.jpg and /dev/null differ diff --git a/docs/static/images/songs/winds.png b/docs/static/images/songs/winds.png deleted file mode 100644 index fee764c..0000000 Binary files a/docs/static/images/songs/winds.png and /dev/null differ diff --git a/docs/static/images/sound-off.png b/docs/static/images/sound-off.png deleted file mode 100644 index f9bb0b3..0000000 Binary files a/docs/static/images/sound-off.png and /dev/null differ diff --git a/docs/static/images/sound-on.png b/docs/static/images/sound-on.png deleted file mode 100644 index e2f6357..0000000 Binary files a/docs/static/images/sound-on.png and /dev/null differ diff --git a/docs/static/images/thumbnails/fl_studio_linux.png b/docs/static/images/thumbnails/fl_studio_linux.png deleted file mode 100644 index 4cff12c..0000000 Binary files a/docs/static/images/thumbnails/fl_studio_linux.png and /dev/null differ diff --git a/docs/static/images/thumbnails/velkommen.jpg b/docs/static/images/thumbnails/velkommen.jpg deleted file mode 100644 index ae21e1b..0000000 Binary files a/docs/static/images/thumbnails/velkommen.jpg and /dev/null differ diff --git a/docs/static/images/towers.jpg b/docs/static/images/towers.jpg deleted file mode 100644 index ec417ba..0000000 Binary files a/docs/static/images/towers.jpg and /dev/null differ diff --git a/docs/static/images/video.svg b/docs/static/images/video.svg deleted file mode 100644 index a70d9a9..0000000 --- a/docs/static/images/video.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/docs/static/images/youtube_video.jpg b/docs/static/images/youtube_video.jpg deleted file mode 100644 index 85ba74d..0000000 Binary files a/docs/static/images/youtube_video.jpg and /dev/null differ diff --git a/docs/static/main.css b/docs/static/main.css deleted file mode 100644 index 5db40e4..0000000 --- a/docs/static/main.css +++ /dev/null @@ -1,1008 +0,0 @@ -/* Raw elements */ - -:root { - --theme-color: #4c6d6e; - --theme-color-lighter: #84b9bb; - --theme-color-variation: #22e6ed; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background-color: black; - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - font-size: 1em; - color: white; -} - -a { - transition: 0.2s; - color: lightgray; - text-decoration: none; -} - -a:hover { - color: var(--theme-color-lighter); -} - -li { - list-style-type: none; -} - -dt::before { - content: "-> "; -} - -dd { - margin-inline-start: 2em; -} - -dl { - margin-bottom: 1em; -} - -select { - background-color: transparent; - color: white; - border: none; - font-size: 1em; -} - -header { - display: flex; - border-bottom: thick solid rgba(255, 255, 255, 0.1); - width: 100%; - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); - background-color: rgba(0, 0, 0, 0.15); -} - -header div { - padding: 1rem; -} - -header ul { - transition: 0.2s; - font-size: larger; - margin: auto 0 auto 0; - padding: 0; - opacity: 0.6; - text-align: right; -} - -header ul a { - transition: 0.2s; - color: white; -} - -header ul a:hover { - color: var(--theme-color); -} - -header ul:hover { - opacity: 1; -} - -main { - margin-bottom: 2em; -} - -h1, -h2, -h3 { - text-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); -} - -blockquote, -main p { - margin-bottom: 1em; -} - -main h1, -main h2 { - margin-bottom: 0.2em; -} - -main h2 { - margin-top: 1em; -} - -b { - color: var(--theme-color-lighter); - font-weight: 600; -} - -blockquote { - margin-left: 2.8em; -} - -hr { - border-bottom: thick solid rgba(255, 255, 255, 0.1); - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); - /* margin: .5em 0; */ - margin-bottom: 1em; -} - -h2 { - font-weight: normal; - color: var(--theme-color-lighter); -} - -textarea, -input, -button { - border: medium solid var(--theme-color-lighter); - background-color: black; - color: white; - padding: 0.6em; -} - -hs { - border-bottom: thin solid white; -} - -input[type="checkbox"] { - border: thick solid white; -} - -input[type="range"] { - width: 100%; - border: none; - padding: 0; -} - -input[type="range"]::-webkit-slider-thumb, -input[type="range"]::-moz-range-thumb { - background-color: black; - transition: 0.2s; - border-radius: 0; - border: medium solid white; - height: 1.2em; -} - -input[type="range"]:hover::-webkit-slider-thumb, -input[type="range"]:hover::-moz-range-thumb { - height: 2em; - background-color: white; - border-width: thin; -} - -input[type="range"]::-webkit-slider-runnable-track, -input[type="range"]::-moz-range-track { - background-color: white; - height: 1em; -} - -aside.metromenu { - z-index: 2; - position: fixed; - top: 0; - right: 0; - width: 30vw; - background-color: black; - height: 100vh; - transition: transform 0.6s cubic-bezier(0.19, 1, 0.22, 1); - padding: 2em; -} - -aside.metromenu.closed { - transform: translateX(100%); -} - -aside.metromenu h2 { - font-size: xx-large; -} - -aside.metromenu p { - margin-bottom: 0.4em; -} - -aside.metromenu .optionsToggle { - margin-bottom: 1em; -} - -aside.metromenu #content { - display: flex; - flex-direction: column; - gap: 1em; -} - -/* Global classes and IDs */ - -.notificationBox { - transition: transform 1s cubic-bezier(0.19, 1, 0.22, 1); - width: fit-content; - position: fixed; - bottom: 2em; - left: 0; - background-color: black; - transform: translateX(-100%); - padding: 1em; - outline: thin solid var(--theme-color); - margin-right: 8em; - max-width: 40em; -} - -.notificationBox.shown { - transform: none; -} - -.notificationBox h1 { - font-size: x-large; -} - -li.inlineList { - display: inline; -} - -.box { - border: thick solid rgba(255, 255, 255, 0.1); - padding: 1em; - background-color: rgba(0, 0, 0, 0.15); -} - -.box *:last-child { - margin-bottom: 0; -} - -.pageHeaderBox { - border-bottom: 0; -} - -.headerSquare, -#defaultSquare { - transition: 0.4s; - border: medium solid white; - height: 7vh; - overflow: hidden; - width: 10vh; - opacity: 0.4; - padding: 0.4em; - cursor: pointer; - user-select: none; -} - -.headerSquare img, -#defaultSquare img { - width: 100%; - height: auto; -} - -.headerSquare:hover, -#defaultSquare { - z-index: 1; -} - -.headerSquare.selected, -#defaultSquare.selected { - opacity: 1; - height: 10vh; - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.4), 0px -4px 10px rgba(0, 0, 0, 0.4); - background-color: rgba(0, 0, 0, 0.3); -} - -.youtubeCardHolderHelper { - display: flex; - justify-content: center; -} - -div.hs { - display: none; -} - -div.hs.selected { - display: unset; -} - -.ytembed { - display: block; - margin: auto; -} - -.margarinaColor { - color: #ff85e1; -} - -.hsProjects { - gap: 0.6em; - display: flex; - flex-direction: column; -} - -.hsProject { - margin-bottom: 0.4em; - border: medium solid rgba(255, 255, 255, 0.6); - width: 100%; - height: fit-content; - transition: 0.2s; - display: flex; - flex-direction: column; - gap: 1em; - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.4), 0px -4px 10px rgba(0, 0, 0, 0.4); - background-color: rgba(0, 0, 0, 0.2); -} - -.hsProjectHeader { - transition: 0.2s; - display: flex; - height: 7em; - border-bottom: medium solid rgba(255, 255, 255, 0.6); - padding: 1em; -} - -.hsProjectHeaderIcon { - transition: 0.2s; - fill: white; - stroke: white; - height: 50%; - width: auto; - margin: auto 0; - opacity: 0.6; -} - -.hsProjectHeaderIcon img { - height: 100%; -} - -.hsProject:hover { - border-color: white; -} - -.hsProject:hover .hsProjectHeader { - border-color: white; -} - -.hsProject:hover .hsProjectHeaderIcon { - opacity: 1; -} - -.hsProjectImage { - width: 100%; - max-height: 100%; -} - -.hsProjectImage img { - height: 100%; - width: auto; -} - -.hsProjectContent { - padding: 1em; -} - -.invertedc { - filter: invert(); -} - -.ellipsis-loader { - animation: 1.8s infinite ellipsis-loader; - display: inline-block; - height: 8px; - overflow: hidden; - position: relative; - width: 140px; - margin: auto; -} - -.ellipsis-loader__dot { - animation: 1.8s infinite ellipsis-loader__dot; - background: #fff; - border-radius: 50%; - float: left; - height: 8px; - position: absolute; - width: 8px; -} - -.ellipsis-loader__dot:nth-child(1) { - animation-delay: 0.15s; - left: -13px; -} - -.ellipsis-loader__dot:nth-child(2) { - animation-delay: 0.3s; - left: -26px; -} - -.ellipsis-loader__dot:nth-child(3) { - animation-delay: 0.45s; - left: -39px; -} - -.ellipsis-loader__dot:nth-child(4) { - animation-delay: 0.6s; - left: -52px; -} - -.checkbox { - display: flex; -} - -.checkbox p { - flex-grow: 1; -} - -.optionsToggle { - cursor: pointer; -} - -.fadeIn { - animation: fadeIn 0.5s ease-in 1 forwards; -} - -.fadeOut { - opacity: 1; - animation: fadeOut 0.5s ease-out 1 forwards; -} - -.oneLineClamp { - overflow: hidden; - width: 100%; - display: -webkit-box; - line-clamp: 1; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; -} - -.drawerSong { - position: relative; - overflow: hidden; -} - -.drawerSong img { - transition: 0.4s; - width: 5em; - height: 100%; - object-fit: cover; - object-position: left top; - opacity: 0.4; - filter: grayscale(1); -} - -.drawerSong p { - position: absolute; - top: 0; - left: 0; - display: inline; -} - -.drawerSong:hover img, -.drawerSong.selected img { - opacity: 1; - overflow: hidden; - width: 10em; -} - -.drawerSong.selected img { - filter: none; -} - -.drawerSong.selected { - width: 10em; -} - -.playlistTitle { - background-color: white; - color: black; -} - -.playingSong { - font-size: larger; -} - -.hidden { - display: none; -} - -.invisible { - opacity: 0; -} - -.bg.invisible { - opacity: 0 !important; -} - -.blogpostYoutubeVideo { - user-select: none; - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); - position: relative; - display: inline-block; - background-color: black; - border: medium solid var(--theme-color-lighter); - transition: 0.2s; -} - -.blogpostYoutubeVideo .goLabel { - transition: 0.2s; - opacity: 0; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - margin: 0; - font-size: 4em; - background-color: var(--theme-color); - padding: 0.2em; - border-radius: 6px; - font-weight: bold; -} - -.blogpostYoutubeVideo:hover .goLabel { - opacity: 1; -} - -.blogpostYoutubeVideo:hover { - border-color: var(--theme-color); -} - -.blogpostYoutubeVideo img { - width: 100%; - display: block; - opacity: 0.8; - transition: 0.2s; -} - -.blogpostYoutubeVideo .videoHeader { - transition: 0.2s; - position: absolute; - bottom: 0; - left: 0; - padding: 0.4em 1em; - z-index: 1; - background-color: rgba(0, 0, 0, 0.6); - width: 100%; - padding: 1em; -} - -.blogpostYoutubeVideo * { - margin: 0; -} - -.blogpostYoutubeVideo:hover::after { - opacity: 0; -} - -.blogpostYoutubeVideo:hover .videoHeader { - opacity: 0; -} - -.blogpostYoutubeVideo .videoHeader .alsoAvailable { - font-weight: bold; -} - -.blogpostYoutubeVideo:hover img { - opacity: 1; -} - -.i88x31 { - transition: 0.2s; - image-rendering: pixelated; - width: 88px; - height: 31px; -} - -.i88x31.selected { - transform: scale(2); -} - -/* Section: Page-specific */ - -#music { - padding: 0; - display: flex; - gap: 0.4em; - inline-size: fit-content; - height: 1.4em; - margin-top: auto; - opacity: 0.6; -} - -#music:hover { - opacity: 1; -} - -#everythingHelper { - position: relative; -} - -#everythingHelper .bg { - position: absolute; - top: 0; - left: 0; - z-index: -1; - opacity: 0.5; - width: 100%; - height: auto; - -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 90%, rgba(0, 0, 0, 0) 100%); - -webkit-mask-repeat: no-repeat; - -webkit-mask-size: 100% 100%; - mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 40%, rgba(0, 0, 0, 0) 100%); - mask-repeat: no-repeat; - mask-size: 100% 100%; - user-select: none; - transition: 0.4s; - -webkit-user-drag: none; -} - -#mainHelper { - padding-top: 3rem; - max-width: 50vw; - margin: auto; - display: flex; -} - -#headerSubtitle { - color: white; - opacity: 0.6; -} - -#fixedHint { - position: fixed; - top: 0; - left: 0; - background-color: black; - z-index: 10; - padding: .2em; - outline: thin solid var(--theme-color); -} - -#sound { - filter: invert(); -} - -#sound:hover { - cursor: pointer; -} - -#linksHelper { - margin: auto 1em auto auto; - display: flex; - flex-direction: column; - gap: 0.2em; -} - -#linksHelper:hover { - opacity: 1; -} - -#headerLinks { - user-select: none; -} - -#headerLinks a { - color: white; -} - -#headerLinks a { - margin-right: 0.2em; - margin-left: 0.2em; -} - -#headerLinks:last-child { - margin-left: 0; -} - -#headerLinks a:first-child { - margin-left: 0; -} - -#headerLinks a:last-child { - margin-right: 0; -} - -header div:first-child { - margin-bottom: 0; -} - -#headerSquareMusic img, -#headerSquareVideo img, -#headerSquareCode img, -#defaultSquare img { - filter: invert(); -} - -#homeSquares { - display: flex; - flex-direction: column; - transition: 0.4s; - width: fit-content; - height: fit-content; - margin-right: 3vw; - margin-bottom: 3rem; - gap: 10px; -} - -.hsMusicCard .youtubeCardHolder { - width: 50%; -} - -#hsCode { - flex-direction: column; -} - -#hsCode.selected { - display: flex; -} - -#telnetSimulation { - display: flex; - width: 100%; - gap: 10px; -} - -#telnetSimulation div { - flex: 1; - display: flex; - flex-direction: column; - gap: 10px; - height: 100%; -} - -#telnetSimulation div textarea { - width: 100%; - resize: none; - height: 300px; -} - -#telnetSimulationInput { - display: flex; -} - -#telnetSimulationLoadingHolder { - text-align: center; - margin: 10px; - display: none; - flex-direction: column; -} - -#youtubeVideo p { - font-size: 2vh; -} - -#youtubeVideoImage { - width: 100%; - transition: 0.3s; - box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); -} - -#youtubeVideoImage:hover { - opacity: 0.8; -} - -#languageList { - font-size: 2vh; -} - -#languageList li { - margin-bottom: 0.5em; -} - -#languageList li a { - transition: 1s; -} - -.languagesHighlightedLink { - color: var(--theme-color-variation); -} - -#songDrawer { - display: flex; - height: 10em; - overflow-x: auto; - overflow-y: hidden; - gap: 0.2em; -} - -#playlist { - transition: 0.2s; - max-height: 10em; - overflow: auto; - border: medium solid white; -} - -#playlist p { - cursor: pointer; - padding: 0 0.4em; -} - -#playlist p:first-child { - padding-bottom: 0.2em; -} - -#linksHelper hs { - margin: 0.2em 0; - opacity: 0.6; -} - -#linkshelper:hover hs { - opacity: 1; -} - -#postHeader * { - margin-bottom: 0; -} - -#postHeader { - margin-bottom: 1em; -} - -/* Page: misc/favorites */ - -.favoritesTextBox { - border-top: none; -} - -.favoritesDivider { - margin-bottom: 0; -} - -.favoritesDefinitionListItem dt { - font-size: large; -} - -.favoritesDefinitionListItem dt::before { - content: ""; -} - -.favoritesDefinitionListItem { - margin-bottom: 2em; -} - -.favorites88x31Box { - width: fit-content; - height: fit-content; - border-right: none; - border-top: none; - border-bottom: none; - padding: 0; - padding-left: 1em; - margin-bottom: 1em; -} - -.favorites88x31Box img { - margin: 0; -} - -.favorite88x31Box { - margin-top: .2em; -} - -/* Animations */ - -@keyframes ellipsis-loader { - 0%, 25% { transform: translateX(0); } - 100% { transform: translate(20px); } -} - -@keyframes ellipsis-loader__dot { - 0% { - animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1); - transform: translateX(0); - } - 55% { - animation-timing-function: cubic-bezier(0.785, 0.135, 0.15, 0.86); - opacity: 1; - transform: translateX(98px); - } - 75%, 100% { - transform: translateX(212px); - } - 90% { - opacity: 0.2; - } -} - -@keyframes fadeIn { - to { opacity: 1; } -} - -@keyframes fadeOut { - to { opacity: 0; } -} - -/* Media queries */ - -@media screen and (max-width: 1280px) { - body { font-size: 2vh; } - - header { - padding-top: 1.4rem; - text-align: center; - flex-direction: column; - } - - header ul { - margin: auto; - margin-bottom: 1.4rem; - } - - main { max-width: 90vw; } - - main h1 { font-size: 3vh; } - - #headerLinks { - text-align: center; - width: 100%; - } - - #homeTitle { font-size: 4vh; } - - #linksHelper { margin: 0 auto 0 auto; } - - #mainHelper { - flex-direction: column; - max-width: 90vw; - } - - #homeSquares { - flex-direction: row; - align-content: center; - justify-content: center; - width: 40vw; - margin-left: auto; - margin-right: auto; - } - - .headerSquare, - #defaultSquare { - aspect-ratio: 1/1; - height: 100%; - flex-grow: 1; - } - - .headerSquare.selected, - #defaultSqaure.selected { - height: unset !important; - } - - #languageList { font-size: 2.5vh; } - - .hsProjectHeader { - height: fit-content; - flex-direction: column; - gap: 1em; - } - - .hsProjectImage { - max-height: 5em; - margin: auto; - width: fit-content; - } - - .hsProjectImage img { - height: 100%; - max-height: inherit; - } - - .hsProjectHeaderIcon { - margin: auto; - } - - aside.metromenu { width: 50%; } - - .blogpostYoutubeVideo .videoHeader { font-size: small; } - - .homeBadgesBox { - display: flex; - justify-content: center; - gap: 4px; - flex-wrap: wrap; - } - - .misc88x31Page h2 { text-align: center; } -} - -@media screen and (max-width: 800px) { - #homeSquares { width: 60vw; } - - aside.metromenu { width: 100%; } - - .hsMusicCard .youtubeCardHolder { width: 100%; } -} - -@media screen and (max-width: 720px) { - #homeSquares { width: 80vw; } -} \ No newline at end of file diff --git a/docs/static/music/PG2.mp3 b/docs/static/music/PG2.mp3 deleted file mode 100644 index d296b72..0000000 Binary files a/docs/static/music/PG2.mp3 and /dev/null differ diff --git a/docs/static/music/Velkommen.mp3 b/docs/static/music/Velkommen.mp3 deleted file mode 100644 index cfbf3f4..0000000 Binary files a/docs/static/music/Velkommen.mp3 and /dev/null differ diff --git a/docs/static/music/dreamscape.mp3 b/docs/static/music/dreamscape.mp3 deleted file mode 100644 index 5d342e1..0000000 Binary files a/docs/static/music/dreamscape.mp3 and /dev/null differ diff --git a/docs/static/music/skychat.mp3 b/docs/static/music/skychat.mp3 deleted file mode 100644 index 997a98d..0000000 Binary files a/docs/static/music/skychat.mp3 and /dev/null differ diff --git a/docs/static/scripts/88x31.js b/docs/static/scripts/88x31.js deleted file mode 100644 index 32e37d1..0000000 --- a/docs/static/scripts/88x31.js +++ /dev/null @@ -1,13 +0,0 @@ -const images = document.querySelectorAll(".i88x31"); - -images.forEach(image => { - image.addEventListener("click", () => { - const selected = document.querySelectorAll(".i88x31.selected"); - selected.forEach(s => { - if (s != image) { - s.classList.toggle("selected"); - } - }) - image.classList.toggle("selected"); - }) -}) \ No newline at end of file diff --git a/docs/static/scripts/ccd.js b/docs/static/scripts/ccd.js deleted file mode 100644 index e1c694d..0000000 --- a/docs/static/scripts/ccd.js +++ /dev/null @@ -1,14 +0,0 @@ -const konamiCode = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'KeyB', 'KeyA']; -let keyIndex = 0; - -document.addEventListener('keydown', function(event) { - if (event.code === konamiCode[keyIndex]) { - keyIndex++; - if (keyIndex === konamiCode.length) { - window.location.href = `${rootPrefix}static/toyourdreams.txt` - keyIndex = 0; - } - } else { - keyIndex = 0; - } -}); \ No newline at end of file diff --git a/docs/static/scripts/home.js b/docs/static/scripts/home.js deleted file mode 100644 index f570539..0000000 --- a/docs/static/scripts/home.js +++ /dev/null @@ -1,51 +0,0 @@ -const _homeSquares = document.querySelector("#homeSquares"); -const main = document.querySelector("main"); - -let info = [ - ["Default", "defaultSquare", "arrow-cursor.svg", "Computer cursor arrow line drawing"], - ["Music", "headerSquareMusic", "8thNote.svg", "Music note line drawing"], - ["Video", "headerSquareVideo", "video.svg", "Video roll line drawing"], - ["Code", "headerSquareCode", "file-code.svg", "Computer code file line drawing"] -] - -info.forEach(square => { - let rawHTML = `
    ${square[3]}
    `; - _homeSquares.innerHTML += rawHTML; -}); - -const homeSquares = document.querySelectorAll(".headerSquare"); -let selectedSquare = "defaultSquare"; -let selectedSquareDiv; -updateSquare(); - -homeSquares.forEach(square => - square.addEventListener('click', () => { - toggleSquare(square); - }) -) - -function toggleSquare(square) { - if (selectedSquare && (selectedSquare == square.id)) { - return - } - else if (selectedSquare) { - oldSquare = document.getElementById(selectedSquare); - oldSquare.classList.toggle("selected"); - document.querySelector(`#${selectedSquareDiv}`).classList.toggle("selected"); - } - selectedSquare = square.id; - updateSquare() -} - -function getSquareDivByID(id) { - divID = `hs${info.find(item => item[1] === id)[0]}`; - return document.querySelector(`#${divID}`); -} - -function updateSquare() { - square = document.getElementById(selectedSquare); - square.classList.toggle("selected"); - div = getSquareDivByID(square.id); - selectedSquareDiv = div.id; - div.classList.toggle("selected"); -} \ No newline at end of file diff --git a/docs/static/scripts/language.js b/docs/static/scripts/language.js deleted file mode 100644 index d9d5df2..0000000 --- a/docs/static/scripts/language.js +++ /dev/null @@ -1,37 +0,0 @@ -const el = document.getElementById("languageTitle"); -const texts = [["Pick a language", "English"], ["Escolha um idioma", "Português Brasileiro"]]; -let i = 0; -let fadeTime = 1000; -let holdTime = 2000; -const links = document.querySelectorAll("#languageList li a"); -let currentLang = 0; - -el.style.transition = `opacity ${fadeTime}ms`; -el.style.opacity = 1; - -function cycle() { - el.style.opacity = 0; - removeOldHighlightedLang(); - setTimeout(() => { - i = (i + 1) % texts.length; - currentLang = i; - el.textContent = texts[i][0]; - el.style.opacity = 1; - setNewHighlightedLang() - }, fadeTime); -} - -function removeOldHighlightedLang() { - document.querySelector(".languagesHighlightedLink").classList.remove("languagesHighlightedLink"); -} - -function setNewHighlightedLang() { - links.forEach(link => { - if (link.innerText == texts[currentLang][1]) { - link.classList.add('languagesHighlightedLink'); - } - }) -} - -setNewHighlightedLang() -setInterval(cycle, fadeTime * 2 + holdTime); \ No newline at end of file diff --git a/docs/static/scripts/music.js b/docs/static/scripts/music.js deleted file mode 100644 index da8e108..0000000 --- a/docs/static/scripts/music.js +++ /dev/null @@ -1,227 +0,0 @@ -// This script handles the playback of music in the header's miniplayer ;) -import { showNotification } from './notification.js'; -const body = document.querySelector("body"); - -const musicdiv = document.getElementById("music"); -musicdiv.innerHTML = ` - - - -` -const linksHelper = document.getElementById("linksHelper"); -linksHelper.insertBefore(document.createElement("hs"), document.getElementById("headerLinks")); - -const songs = [ - { file: "Velkommen.mp3", name: 'Velkommen', artwork: "velkommen.jpg" }, - { file: "PG2.mp3", name: 'Frugal APE', artwork: "pg.jpg" }, - { file: "dreamscape.mp3", name: 'Dreamscape', artwork: "winds.png" }, - { file: "skychat.mp3", name: 'Skychat', artwork: "winds.png" } -]; - -// Options page -const optionsAside = document.createElement("aside"); -optionsAside.classList.add("closed"); -optionsAside.classList.add("metromenu"); -{ - const back = document.createElement("p"); - back.textContent = headeri18n.back; - back.classList.add("optionsToggle"); - - const title = document.createElement("h2"); - title.textContent = headeri18n.options; - optionsAside.appendChild(title); - optionsAside.appendChild(back); - - const content = document.createElement("div"); - content.innerHTML = ` -
    -
    -
    -

    -

    ${headeri18n.by} tenkuma

    -
    -
    -
    -

    Volume

    - -
    -
    -

    ${headeri18n.hideBackground}

    - -
    -
    - ` - optionsAside.appendChild(content); -} -body.appendChild(optionsAside); - -document.getElementById("volume").addEventListener("input", (e) => { - setVolume(e.target.value / 100); -}); // dirty workaround to replace inline function calling in the volume input - -const toggleIMG = document.querySelector('#sound'); -toggleIMG.addEventListener('click', () => { - toggleAudio(); -}) - -const hideBG = document.querySelector("input#background"); -if (localStorage.getItem("bgHidden") === "true") hideBG.checked = true, toggleBG(); -hideBG.addEventListener("click", () => { - toggleBG(); -}) - -function toggleBG() { - const bg = document.querySelector(".bg"); - bg.classList.toggle("invisible"); - localStorage.setItem("bgHidden", bg.classList.contains("invisible")) -} - -const songsDrawer = document.querySelector("#songDrawer"); -const drawerSongs = []; -const playlist = document.querySelector("#playlist"); -const expandButton = document.createElement('p'); -expandButton.textContent = "Playlist"; -expandButton.classList.add("playlistTitle"); -playlist.appendChild(expandButton); - -songs.forEach(song => { - const songElement = document.createElement("div"); - songElement.classList.add("drawerSong"); - songElement.dataset.song = song.file; - const songImage = document.createElement("img"); - songImage.src = `${rootPrefix}static/images/songs/${song.artwork}`; - songElement.appendChild(songImage); - songElement.addEventListener('click', () => { - changeSong(song.file); - }); - drawerSongs.push(songElement); - songsDrawer.appendChild(songElement); - - // Playlist - const playlistEntry = document.createElement("p"); - playlistEntry.textContent = song.name; - playlistEntry.addEventListener('click', () => { - changeSong(song.file); - }) - playlist.appendChild(playlistEntry); -}) - -const audioSelect = document.getElementById("songSelection"); -songs.forEach(song => { - const songOption = document.createElement("option"); - songOption.value = song.file; - songOption.textContent = song.name; - audioSelect.appendChild(songOption); -}); - -const playingSongLabel = document.querySelector(".playingSong"); - -function updatePlayingLabel(label) { - drawerSongs.forEach(sng => { - sng.classList.remove("selected"); - if (sng.dataset.song == label) { - sng.classList.add("selected"); - } - }); - - const songString = songs.find(item => item.file === label).name; - playingSongLabel.textContent = songString; -} - -const savedSong = localStorage.getItem("song"); - -if (savedSong) { - audioSelect.value = savedSong; - updatePlayingLabel(savedSong); -} else { - audioSelect.value = songs[0].file; - updatePlayingLabel(songs[0].file); -} - -const optionsButton = document.querySelectorAll(".optionsToggle"); -optionsButton.forEach(button => { - button.addEventListener('click', () => { - optionsAside.classList.toggle('closed'); - }); -}); - -// Create the audio object using the current select value -let audio = new Audio(`${rootPrefix}static/music/${audioSelect.value}`); - -const savedTime = localStorage.getItem("audioTime"); -const savedVolume = localStorage.getItem("volume"); - -if (savedVolume !== null) { - audio.volume = parseFloat(savedVolume); -} else { - audio.volume = 0.8; -} - -const wasPlaying = localStorage.getItem("audioPlaying") === 'true'; - -function play() { - audio.volume = localStorage.getItem("volume") ?? 0.8; - audio.play().catch(() => { - stop(); - showNotification(headeri18n.permissionIssue, headeri18n.permissionIssueNotificationContent, 5000); - });; - localStorage.setItem("audioPlaying", "true") - toggleIMG.src = `${rootPrefix}static/images/sound-on.png` - console.log(`[Music Player] playing ${audioSelect.value}`) -} - -function stop() { - audio.pause(); - localStorage.setItem("audioPlaying", "false") - toggleIMG.src = `${rootPrefix}static/images/sound-off.png` -} - -function setVolume(volume) { - audio.volume = volume; - localStorage.setItem("volume", volume); -} - -function toggleAudio() { - if (!audio.paused) { - stop(); - } else { - play(); - } -} - -window.addEventListener("beforeunload", () => { - localStorage.setItem("audioTime", audio.currentTime); - localStorage.setItem("audioPlaying", !audio.paused); -}); - -function changeSong(song) { - const wasPlaying = !audio.paused; - stop(); - localStorage.removeItem("audioTime"); - audio = new Audio(`${rootPrefix}static/music/${song}`); - if (savedVolume) setVolume(savedVolume); - console.log(`[Music Player] changing song to ${song}`) - localStorage.setItem("song", song); - updatePlayingLabel(song); - if (wasPlaying) play(); -} - -// hooking into the options menu 'change' event to update the song -audioSelect.addEventListener('change', () => { - changeSong(audioSelect.value); -}) - -// Set initial playback state and volume based on saved preferences -if (savedTime) audio.currentTime = parseFloat(savedTime); - -if (savedVolume) { - document.getElementById("volume").value = savedVolume * 100; -} else { - document.getElementById("volume").value = 100; -} - -if (wasPlaying) { - play(); -} else { - stop(); -} \ No newline at end of file diff --git a/docs/static/scripts/notification.js b/docs/static/scripts/notification.js deleted file mode 100644 index a05b793..0000000 --- a/docs/static/scripts/notification.js +++ /dev/null @@ -1,45 +0,0 @@ -import { registerElementHint } from "./tips.js"; - -const notificationBox = document.createElement('div'); -notificationBox.classList.add('notificationBox'); - -export async function showNotification(title, subtitle, time, hint) { - if (!hint) { - hint = headeri18n.notificationDefaultHint; - } - const notificationBox = document.createElement('div'); - notificationBox.classList.add('notificationBox'); - notificationBox.dataset.tip = hint; - - const notificationTitle = document.createElement('h1'); - notificationTitle.innerHTML = title; - - const notificationSubtitle = document.createElement('p'); - notificationSubtitle.innerHTML = subtitle; - - notificationBox.appendChild(notificationTitle); - notificationBox.appendChild(notificationSubtitle); - document.querySelector('body').appendChild(notificationBox); - - registerElementHint(notificationBox); - - let clicked = false; - - notificationBox.addEventListener('click', () => { - hideNotification(notificationBox); - }) - - requestAnimationFrame(() => { - notificationBox.classList.add('shown'); - }); - await new Promise(r => setTimeout(r, time)); - if (!clicked) { - hideNotification(notificationBox); - } -} - -async function hideNotification(notificationBox) { - notificationBox.classList.remove('shown'); - await new Promise(r => setTimeout(r, 1000)); - notificationBox.remove(); -} \ No newline at end of file diff --git a/docs/static/scripts/telnetSimulator.js b/docs/static/scripts/telnetSimulator.js deleted file mode 100644 index bfcefca..0000000 --- a/docs/static/scripts/telnetSimulator.js +++ /dev/null @@ -1,66 +0,0 @@ -const screen = document.getElementById('telnetSimulationClientScreen'); -const input = document.getElementById('telnetSimulationInputBox'); -const btn = document.getElementById('telnetSimulationClientSend') -const sbtn = document.getElementById('telnetSimulationServerClean'); -const sscreen = document.getElementById('telnetSimulationServerScreen'); -const loading = document.getElementById("telnetSimulationLoadingHolder") -const loadingText = document.getElementById("telnetSimulationLoadingText") -let loadingms = 2500; - -btn.addEventListener('click', () => { - send_command(); -}) - -sbtn.addEventListener('click', () => { - screen.innerHTML = ''; - sscreen.innerHTML = ''; -}) - -async function send_command() { - if (!input.value) return; - const command = input.value; - input.value = ''; - screen.value += `telnet> ${command}\n`; - await wait(loadingms, "Camada OSI #7 - Aplicação: Usuário digitou o texto na aplicação."); - await wait(loadingms, "Camada OSI #6 - Apresentação: Tradução do comando para um pacote legível para o servidor."); - await wait(loadingms, "Camada OSI #5 - Sessão: Sistema do cliente abre uma conexão com o servidor."); - await wait(loadingms, "Camada OSI #4 - Transporte: Sistema do cliente troca informações com o servidor."); - await wait(loadingms, "Camada OSI #3 - Rede: O sistema do cliente resolve o endereço do servidor."); - await wait(loadingms, "Camada OSI #2 - Enlace de dados: Os frames são entregues ao dispositivo com o endereço MAC correto."); - await wait(loadingms, "Camada OSI #1 - Física: Os dados são transmitidos por cabo, ou via wireless, para o dispositivo de destino."); - process_command(command); -} - -async function process_command(command) { - sscreen.value += `Comando recebido: ${command}\n`; - args = command.split(" "); - command = args[0] - args.shift(); - await wait(loadingms, "O servidor empacota uma resposta, que também será passada por todas camadas até chegar no cliente."); - switch (command) { - case 'help': - screen.value += `Comandos disponíveis:\nhelp - mostra essa mensagem de ajuda\nping - responde 'pong'\necho [texto] - retorna o texto especificado no comando\ntimeout [milissegundos] - muda o tempo que as mensagens de carregamento da simulação duram` - break; - case 'echo': - screen.value += `Resposta do servidor: ${args.join(' ')}\n` - break; - case 'ping': - screen.value += `Pong!\n` - break; - case 'timeout': - loadingms = args[0] - screen.value += `O tempo das mensagens de carregamento foi mudado para ${args[0]}ms!` - break; - default: - screen.value += `Comando desconhecido! Envie help para ver a lista de comandos.\n` - break; - } -} - -async function wait(ms, txt = '') { - const delay = ms => new Promise(res => setTimeout(res, ms)); - loadingText.innerHTML = txt; - loading.style.display = "flex" - await delay(ms) - loading.style.display = "none" -} \ No newline at end of file diff --git a/docs/static/scripts/tips.js b/docs/static/scripts/tips.js deleted file mode 100644 index 7e72b43..0000000 --- a/docs/static/scripts/tips.js +++ /dev/null @@ -1,57 +0,0 @@ -const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); -const body = document.querySelector('body'); -const elements = document.querySelectorAll('[data-tip]'); -const hint = document.querySelector("#headerSubtitle"); -const hintPanelDefaultText = hint.innerHTML; -let fixedHint; -let currentObserver; - -elements.forEach(el => { - registerElementHint(el); -}) - -function cleanup() { - hint.innerHTML = hintPanelDefaultText; - hint.classList.remove('fixed'); - if (fixedHint) { - fixedHint.remove(); - } - if (currentObserver) { - currentObserver.disconnect(); - currentObserver = null; - } -} - -export function registerElementHint(el) { - if (isMobile) { - return; - } - el.addEventListener('mouseenter', function() { - cleanup(); - - if (currentObserver) { - currentObserver.disconnect(); - } - - currentObserver = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (!entry.isIntersecting) { - fixedHint = document.createElement('p'); - fixedHint.id = "fixedHint"; - fixedHint.innerHTML = el.dataset.tip; - fixedHint.setAttribute('aria-hidden', 'true'); - body.appendChild(fixedHint); - } else { - hint.innerHTML = el.dataset.tip; - } - }) - }); - - hint.innerHTML = el.dataset.tip; - currentObserver.observe(hint); - }); - - el.addEventListener('mouseleave', function() { - cleanup(); - }); -} \ No newline at end of file diff --git a/docs/static/toyourdreams.txt b/docs/static/toyourdreams.txt deleted file mode 100644 index e38d468..0000000 --- a/docs/static/toyourdreams.txt +++ /dev/null @@ -1,34 +0,0 @@ - To My Dream - S3RL & Sara - 31/07/2013 - -Take me to my dreams (my dreams) -Show me what this life - -I taste the rainbow in the sky -I see the sounds as they pass me by -I'm falling through time as it flies away - -Take me to my dreams (my dreams) -Show me what this lifetime means -I see inside and open my mind -Take me to my dreams, show me what's real -Show me what's real -Show me what's real -Show me what's real -Enimatpyrtlyhtemid - -Take me to my dreams (my dreams) -Show me what this lifetime means -I see inside and open my mind -Take me to my dreams - -I hold emotions in my hand -And hear the echoes of future's past -I feel like I can understand it all -Enimatpyrtlyhtemid - -Take me to my dreams (my dreams) -Show me what this lifetime means -I see inside and open my mind -Take me to my dreams, show me what's real \ No newline at end of file diff --git a/docs/static/visual/github.svg b/docs/static/visual/github.svg deleted file mode 100644 index f0db0db..0000000 --- a/docs/static/visual/github.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/en/blog/index.html b/en/blog/index.html deleted file mode 100644 index 50692e1..0000000 --- a/en/blog/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Listing Blog Posts:

    - -
    -
    -
    - - \ No newline at end of file diff --git a/en/index.html b/en/index.html deleted file mode 100644 index 8f74ddf..0000000 --- a/en/index.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    Welcome

    -

    It seems that you have found my website! Hi, I am Adrian Victor (or tenkuma), a Brazilian guy who likes to mess around with computers, computer programs and enimatpyrtlyhtemids.

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    About Me

    -

    - My name is Adrian Victor, but I go by tenkuma on-line. I'm in high school's last year, also studying computing. My hobbies are music and music production, programming, selfhosting, Linux, and a lot more. -

    -

    Tenkuma, or 天くま in japanese, means celestial bear and was given by a friend of mine that I lost contact a long time ago. Sakata is gone, but the name stayed and turned into an integral part of my digital self.

    - -

    Socials and Contact

    -

    - I'm publicly available at Mastodon (@tenkuma@mstdn.social), - GitHub (adrianvic), - Disroot Git (adrianvictor), - Discord (@adrianvic), - YouTube (@adrianvictor8), - BitView (tenkuma), - Modrinth (tenkumabear) - and XMPP (adrianvictor@disroot.org). -

    -

    You can message me on my E-mail (adrianvictor@disroot.org) or feel free to get in touch through any of the other places mentioned above. For project-specific subjects, check for the project's contact field or if there's no such field add +projectname to my E-mail address (example: adrianvictor+coolproject@disroot.org).

    -

    Please, avoid reaching me through ways not mentioned above :)

    -
    - -
    -
    -

    My Music

    -

    I've always loved music, and lately I've been finding music production very interesting. I publish my songs as tenkuma, and have founded an amateur label called Margarina Records with my friends.

    -

    You can find my latest on songs Genius.

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    My Videos

    -

    I make videos for my YouTube channel. Videos do not come regularly, there's no schedule—just a guy wanting to show something.

    -
    - -
    - - - - -
    - -
    -
    -

    My Software

    -

    I am studying computing at IFC (SC, Brazil) but in my free time I have some projects like computer applications, Minecraft plugins, Minecraft servers, etc... Anything that is public should be in my GitHub profile.

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    Native music player for Android devices that connects to Jellyfin media servers. The code is based on Gelli's archived repository, which is based on an old version of Phonograph.

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    This PaperMC plugin integrates with VaultUnlocked to provide a unique, item-based economy system for your Minecraft server. Instead of relying solely on virtual balances, players use in-game items as physical currency, adding a layer of immersion and realism to your economy.

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    Multi-platform customizable client for wikis written in Python using PySide6 (QT).

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/en/misc/88x31/index.html b/en/misc/88x31/index.html deleted file mode 100644 index aa1e20e..0000000 --- a/en/misc/88x31/index.html +++ /dev/null @@ -1,3093 +0,0 @@ - - - - - - - Adrian Victor - 88x31 - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    88x31

    -

    This is the collection of 88x31 GIFs and images I've downloaded across the web.

    -
    -
    -

    Made by me

    -
    - - - -
    -

    Others

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/en/misc/bookmarks/index.html b/en/misc/bookmarks/index.html deleted file mode 100644 index 1fc3cbd..0000000 --- a/en/misc/bookmarks/index.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    Bookmarks

    -

    A list of useful or cool websites/pages curated by me. Divided in sections for an easier navigation.

    - - - -
    -
    - -
    -

    Downloads

    - -
    - - - - - - - - - -
    - -
    - -
    -
    MalwareWatch
    -
    -
    - Enderman's website. Provides download to various useful softwares, operating system images and malware. -
    - -
    -
    -
    - -
    -
    Free Images
    -
    -
    - Search through millions of free stock photos, art and vector images. Every image is Public Domain or CC0. Free to Download and Free to Use. -
    - -
    -
    -
    - -
    -
    88x31
    -
    -
    - This website is a collection with over 6500 GIF's and PNG's in 88x31 format. In the late 1990 and begin of the 2000's it was very common to use these pictures on your personal website. -
    - - - - - - - - - - - -
    -
    -
    - -
    - -
    -

    Profiles

    - -
    - -
    -
    Mr. Nando
    -
    -
    - My friend Fernando, he makes music and YouTube videos of Minecraft and speedrun. -
    - -
    -
    -
    - -
    -
    Endermanch
    -
    -
    - Andrew is a software engineer, a malware enthusiast and most importantly, a weird tall creature. I've grown up with his videos and he's a great inspiration for me. -
    - -
    -
    -
    - -
    - -
    -

    Tools

    - -
    - -
    -
    Excalidraw
    -
    -
    - Whiteboard with no bloat. -
    - -
    -
    -
    - -
    -
    Postimages
    -
    -
    - Get permanent links of your images for forums, blogs, and social media. -
    - -
    -
    -
    - -
    -
    uBlock Origin
    -
    -
    - An efficient blocker for Chromium and Firefox. Fast and lean. -
    - - - - - - - -
    -
    -
    - -
    - -
    -

    Games

    - -
    - - - - - - - - - -
    - -
    - -
    -
    SteamGridDB
    -
    -
    - Download and share custom video game assets and personalize your gaming library. -
    - -
    -
    -
    - -
    - -
    -

    Music

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    CVGM Radio
    -
    -
    - Your home for video game, demo scene and computer related music. -
    - -
    -
    -
    - -
    - -
    -

    Piracy

    - -
    - - - - - -
    - -
    - -
    -
    Nyaa
    -
    -
    - A tracker of animes, mangas and related stuff. -
    - - - - - - - -
    -
    -
    - -
    -
    Lucida
    -
    -
    - With Lucida, you can download music directly from Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, and Yandex Music in high quality for free. No catches, no mandatory ads, no BS. How does it work? -
    - -
    -
    -
    - -
    -
    DoubleDouble
    -
    -
    - Download music directly from Amazon Music, Soundcloud, Qobuz, Deezer and Tidal for free. -
    - -
    -
    -
    - -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/en/misc/index.html b/en/misc/index.html deleted file mode 100644 index b8cb8d9..0000000 --- a/en/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Miscellaneous

    - -
      -
      - - - -
      - - 88x31 - -
      - -
      - - - My collection of 88x31 GIFs and images. -
      - - - -
      - - Bookmarks - -
      - -
      - - - My collection of interesting websites/pages. -
      - -
      -
    -
    -
    -
    - - \ No newline at end of file diff --git a/global/blog/index.html b/global/blog/index.html deleted file mode 100644 index 5d1b59c..0000000 --- a/global/blog/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    -
      - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/global/index.html b/global/index.html deleted file mode 100644 index 49af188..0000000 --- a/global/index.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    -

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    -

    -

    - -

    -

    -

    -
    - -
    -
    -

    -

    -

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    -

    -
    - -
    - - - - -
    - -
    -
    -

    -

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/global/misc/index.html b/global/misc/index.html deleted file mode 100644 index 439ba1e..0000000 --- a/global/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    - - -
    -
    -
    - - \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 13b0ed3..0000000 --- a/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -

    Pick a language

    - -
    -
    -
    - - \ No newline at end of file diff --git a/index.njk b/index.njk new file mode 100644 index 0000000..0482e17 --- /dev/null +++ b/index.njk @@ -0,0 +1,156 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/index.html" +layout: base.njk +--- +{% from "macros.njk" import i88x31 with context %} +{% from "macros.njk" import videoCard with context %} +{% from "macros.njk" import projectCard %} + +
    +
    + +
    + + + + +
    +
    +

    {{ i18n[langKey].welcome | smartTitle }}

    +

    {{ i18n[langKey].homeWelcomeParagraph | safe }}

    + +
    + {{ i88x31("tenkuma.gif") }} + {{ i88x31("anybrowser6.gif") }} + {{ i88x31("ai.gif") }} + {{ i88x31("WEBP.gif") }} + {{ i88x31("rainbowrain.gif") }} + {{ i88x31("blasphemy.gif") }} + {{ i88x31("css3.gif") }} + {{ i88x31("best_viewed_with_open_eyes.gif") }} + {{ i88x31("gnu-linux.gif") }} +
    +
    + +
    + +

    {{ i18n[langKey].aboutMe | smartTitle }}

    +

    {{ i18n[langKey].homeAboutMeParagraph | safe }}

    +

    {{ i18n[langKey].homeAboutMeParagraphTwo | safe }}

    + +

    {{ i18n[langKey].socialsAndContact | smartTitle }}

    +

    {{ i18n[langKey].homeSocialsAndContactParagraph | safe }}

    +

    {{ i18n[langKey].homeSocialsAndContactParagraphTwo | safe }}

    +
    + +
    +
    +

    {{ i18n[langKey].myMusic | smartTitle }}

    +

    {{ i18n[langKey].homeMyMusicParagraph | safe }}

    +

    {{ i18n[langKey].homeMyMusicParagraphTwo | safe }}

    + +
    + {{ i88x31("rave.gif") }} + {{ i88x31("happymix.gif") }} +
    +
    + +
    + +
    + {{ + videoCard( + i18n["global"].homeSongLink, + i18n["global"].homeSongTitle, + i18n["global"].homeSongImage, + i18n["global"].homeSongWebsite, + i18n["global"].homeSongDuration, + i18n["global"].homeSongAccent + ) + }} +
    +
    + +
    +
    +

    {{ i18n[langKey].myVideos | smartTitle }}

    +

    {{ i18n[langKey].homeMyVideoParagraph | safe }}

    +
    + +
    + + {{ + videoCard( + i18n["global"].homeVideoLink, + i18n[langKey].homeVideoTitle, + i18n["global"].homeVideoImage, + i18n["global"].homeVideoWebsite, + i18n["global"].homeVideoDuration + ) + }} +
    + +
    +
    +

    {{ i18n[langKey].mySoftware | smartTitle }}

    +

    {{ i18n[langKey].homeMySoftwareParagraph | safe }}

    +
    + +
    + +
    + {{ + projectCard( + "Jamfish", + i18n[langKey].jamfishProjectDesctiption, + "https://github.com/adrianvic/jamfish", + '/static/images/jamfish-wide.png', + "Jamfish" + ) + }} + + {{ + projectCard( + "ItemEconomy", + i18n[langKey].itemeconomyProjectDesctiption, + "https://github.com/adrianvic/ItemEconomy", + '/static/images/itemeconomy2-wide.png', + "ItemEconomy" + ) + }} + + {{ + projectCard( + "Eye of Nemesis", + i18n[langKey].eyeofnemesisProjectDesctiption, + "https://github.com/adrianvic/NemesisEye", + '/static/images/eye_of_nemesis.png', + "Eye of Nemesis" + ) + }} + + {{ + projectCard( + "PestoWiki", + i18n[langKey].pestoProjectDesctiption, + "https://github.com/Margarina-not-butter/PestoWiki", + '/static/images/pestowikifullwhite.png', + "PestoWiki" + ) + }} +
    +
    +
    \ No newline at end of file diff --git a/languages.njk b/languages.njk new file mode 100644 index 0000000..7d82b75 --- /dev/null +++ b/languages.njk @@ -0,0 +1,18 @@ +--- +permalink: "/index.html" +layout: base.njk +langKey: "en" +--- + + +
    +

    Pick a language

    + +
    \ No newline at end of file diff --git a/maintenance/edit-i18n.js b/maintenance/edit-i18n.js new file mode 100644 index 0000000..216820b --- /dev/null +++ b/maintenance/edit-i18n.js @@ -0,0 +1,191 @@ +// Coded entirely by ChatGPT +// :( + +const express = require("express"); +const fs = require("fs"); +const parser = require("@babel/parser"); +const traverse = require("@babel/traverse").default; +const generate = require("@babel/generator").default; +const t = require("@babel/types"); + +const app = express(); +app.use(express.json()); + +const FILE = "../_data/i18n.js"; + +function loadAST() { + const code = fs.readFileSync(FILE, "utf8"); + return parser.parse(code, { sourceType: "module" }); +} + +function extract(ast) { + const out = {}; + + traverse(ast, { + AssignmentExpression(path) { + if ( + path.node.left.object?.name === "module" && + path.node.left.property?.name === "exports" + ) { + path.node.right.properties.forEach(langProp => { + const lang = langProp.key.name || langProp.key.value; + out[lang] = {}; + + langProp.value.properties.forEach(p => { + const key = p.key.name || p.key.value; + out[lang][key] = p.value.extra?.raw || generate(p.value).code; + }); + }); + } + } + }); + + return out; +} + +function write(ast, newData) { + traverse(ast, { + AssignmentExpression(path) { + if ( + path.node.left.object?.name === "module" && + path.node.left.property?.name === "exports" + ) { + path.node.right.properties.forEach(langProp => { + const lang = langProp.key.name || langProp.key.value; + + const existingKeys = new Set( + langProp.value.properties.map(p => p.key.name || p.key.value) + ); + + // update existing + langProp.value.properties.forEach(p => { + const key = p.key.name || p.key.value; + + if (key in (newData[lang] || {})) { + p.value = parser.parseExpression(newData[lang][key]); + } + }); + + // add new keys + Object.keys(newData[lang] || {}).forEach(key => { + if (!existingKeys.has(key)) { + langProp.value.properties.push( + t.objectProperty( + t.identifier(key), + parser.parseExpression(newData[lang][key]) + ) + ); + } + }); + }); + } + } + }); + + const output = generate(ast, { retainLines: true }).code; + fs.writeFileSync(FILE, output); +} + +app.get("/data", (req, res) => { + const ast = loadAST(); + res.json(extract(ast)); +}); + +app.post("/save", (req, res) => { + const ast = loadAST(); + write(ast, req.body); + res.send("ok"); +}); + +app.get("/", (req, res) => { + res.send(` + + + +

    i18n Editor

    +
    + + + + + + + `); + }); + + app.listen(3000,()=>console.log('http://localhost:3000')); + \ No newline at end of file diff --git a/misc.njk b/misc.njk new file mode 100644 index 0000000..241f059 --- /dev/null +++ b/misc.njk @@ -0,0 +1,37 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/misc/index.html" +layout: base.njk +title: Adrian Victor:Misc +--- + +
    +

    {{ i18n[langKey].miscellaneous }}

    + + +
    \ No newline at end of file diff --git a/misc/88x31/en.json b/misc/88x31/en.json new file mode 100644 index 0000000..2149d7d --- /dev/null +++ b/misc/88x31/en.json @@ -0,0 +1,6 @@ +{ + "pageDescription": "My collection of 88x31 GIFs and images.", + "intro": "This is the collection of 88x31 GIFs and images I've downloaded across the web.", + "others": "Others", + "me": "Made by me" +} \ No newline at end of file diff --git a/misc/88x31/index.njk b/misc/88x31/index.njk new file mode 100644 index 0000000..144be82 --- /dev/null +++ b/misc/88x31/index.njk @@ -0,0 +1,29 @@ +--- +layout: base.njk +pagination: + data: languages + size: 1 + alias: langKey + +pageTitle: 88x31 +tags: misc +--- +{% from "macros.njk" import i88x31 with context %} + +
    +
    +

    88x31

    +

    {{ t.intro }}

    +
    +
    +

    {{ t.me }}

    +
    + {{ i88x31("tenkuma.gif") }} +
    +

    {{ t.others }}

    +
    + {% for image in collections.88x31 %} + {{ i88x31(image.fileSlug) }} + {% endfor %} +
    +
    \ No newline at end of file diff --git a/misc/88x31/pt.json b/misc/88x31/pt.json new file mode 100644 index 0000000..9beb933 --- /dev/null +++ b/misc/88x31/pt.json @@ -0,0 +1,6 @@ +{ + "pageDescription": "Minha coleção de GIFs e imagens 88x31.", + "intro": "Essa é uma coleção de GIFs e imagens 88x31 que eu baixei pela internet.", + "others": "Outros", + "me": "Feitos por mim" +} \ No newline at end of file diff --git a/misc/bookmarks/common.json b/misc/bookmarks/common.json new file mode 100644 index 0000000..3f085ae --- /dev/null +++ b/misc/bookmarks/common.json @@ -0,0 +1,158 @@ +{ + "links": { + "downloads": { + "88x31": [ + "iglooftp.gif", + "eftpbutton.gif" + ], + "links": [ + { + "name": "MalwareWatch", + "link": "https://malwarewatch.org/", + "description": { + "pt": "Website do Enderman. Tem download de vários softwares úteis, imagens de sistemas operacionais e malware.", + "en": "Enderman's website. Provides download to various useful softwares, operating system images and malware." + } + }, + { + "name": "Free Images", + "link": "https://free-images.com/", + "description": { + "pt": "Pesquise por milhões de imagens, artes e vetores. Todas as imagens são de domínio público ou sobre CC0. Livre para baixar e livre para usar.", + "en": "Search through millions of free stock photos, art and vector images. Every image is Public Domain or CC0. Free to Download and Free to Use." + } + }, + { + "name": "88x31", + "link": "https://88x31.nl/", + "description": { + "pt": "Essa é uma coleção de mais de 6500 GIFs e PNGs no formato 88x31. No final dos anos 1990 e começo dos 2000 era muito comum usar essas imagens no seu site pessoal.", + "en": "This website is a collection with over 6500 GIF's and PNG's in 88x31 format. In the late 1990 and begin of the 2000's it was very common to use these pictures on your personal website." + }, + "88x31": [ + "WEBP.gif", + "blank.gif" + ] + } + ] + }, + "profiles": { + "links": [ + { + "name": "Mr. Nando", + "link": "https://www.youtube.com/@mrnandokk", + "description": { + "pt": "Meu amigo Fernando, ele faz músicas e vídeos de Minecraft e speedrun.", + "en": "My friend Fernando, he makes music and YouTube videos of Minecraft and speedrun." + } + }, + { + "name": "Endermanch", + "link": "https://enderman.ch/", + "description": { + "pt": "Andrew é um engenheiro de software, entusiasta de malware e, mais importante, uma estranha e alta criatura. Cresci com os seus videos e ele é uma grande inspiração para mim.", + "en": "Andrew is a software engineer, a malware enthusiast and most importantly, a weird tall creature. I've grown up with his videos and he's a great inspiration for me." + } + } + ] + }, + "tools": { + "links": [ + { + "name": "Excalidraw", + "link": "https://excalidraw.com/", + "description": { + "pt": "Quadro branco sem distrações.", + "en": "Whiteboard with no bloat." + } + }, + { + "name": "Postimages", + "link": "https://postimages.org/", + "description": { + "pt": "Gere links permantes de suas imagens para forums, blogs e redes sociais.", + "en": "Get permanent links of your images for forums, blogs, and social media." + } + }, + { + "name": "uBlock Origin", + "link": "https://github.com/gorhill/uBlock#ublock-origin", + "description": { + "pt": "Um bloqueador eficiente para Chromium e Firefox. Rápido e pequeno.", + "en": "An efficient blocker for Chromium and Firefox. Fast and lean." + }, + "88x31": ["ublock-now.png"] + } + ] + }, + "games": { + "88x31": [ + "gb.gif", + "amd_powered.gif" + ], + "links": [ + { + "name": "SteamGridDB", + "link": "https://www.steamgriddb.com/", + "description": { + "pt": "Baixe e compartilhe recursos visuais de jogos e personalize sua biblioteca de jogos.", + "en": "Download and share custom video game assets and personalize your gaming library." + } + } + ] + }, + "music": { + "88x31": [ + "rave.gif", + "2014-rave.gif", + "wmpfree.gif", + "wmp.gif", + "wmp9.gif", + "wmp10.gif", + "wmp11.gif", + "ffmpeg.gif", + "ymusic.gif" + ], + "links": [ + { + "name": "CVGM Radio", + "link": "https://radio.cvgm.net/demovibes/", + "description": { + "pt": "Seu lar para música relacionada a video games, demo scene e computadores.", + "en": "Your home for video game, demo scene and computer related music." + } + } + ] + }, + "piracy": { + "88x31": ["piracy.png"], + "links": [ + { + "name": "Nyaa", + "link": "https://nyaa.si/", + "description": { + "pt": "Um tracker de animes, mangás e coisas relacionadas.", + "en": "A tracker of animes, mangas and related stuff." + }, + "88x31": ["rukia.gif"] + }, + { + "name": "Lucida", + "link": "https://lucida.to/", + "description": { + "pt": "Com Lucida, você pode baixar musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça. Sem pegadinhas, sem anúncios obrigatórios, sem enrolação. Como que funciona?", + "en": "With Lucida, you can download music directly from Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, and Yandex Music in high quality for free. No catches, no mandatory ads, no BS. How does it work?" + } + }, + { + "name": "DoubleDouble", + "link": "https://doubledouble.top/", + "description": { + "pt": "Baixe musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça.", + "en": "Download music directly from Amazon Music, Soundcloud, Qobuz, Deezer and Tidal for free." + } + } + ] + } + } +} \ No newline at end of file diff --git a/misc/bookmarks/en.json b/misc/bookmarks/en.json new file mode 100644 index 0000000..b7ae767 --- /dev/null +++ b/misc/bookmarks/en.json @@ -0,0 +1,11 @@ +{ + "pageTitle": "Bookmarks", + "pageDescription": "My collection of interesting websites/pages.", + "intro": "A list of useful or cool websites/pages curated by me. Divided in sections for an easier navigation.", + "profiles": "Profiles", + "downloads": "Downloads", + "games": "Games", + "tools": "Tools", + "music": "Music", + "piracy": "Piracy" +} \ No newline at end of file diff --git a/misc/bookmarks/index.njk b/misc/bookmarks/index.njk new file mode 100644 index 0000000..ec34a11 --- /dev/null +++ b/misc/bookmarks/index.njk @@ -0,0 +1,49 @@ +--- +layout: base.njk +pagination: + data: languages + size: 1 + alias: langKey +tags: misc +background: towers.jpg +backgroundOpacity: .2 +--- +{% from "macros.njk" import i88x31 with context %} + +
    +
    +

    {{ t.pageTitle }}

    +

    {{ t.intro }}

    + {{ i88x31("BOOKMARKthispageNOW.png") }} +
    +
    + {% for sectionName, section in c.links %} +
    +

    {{ t[sectionName] }}

    + {% if section.88x31 %} +
    + {% for 88x31 in section.88x31 %} + {{ i88x31(88x31) }} + {% endfor %} +
    + {% endif %} +
    + {% for link in section.links %} +
    +
    {{ link.name }}
    +
    +
    + {{ link.description[langKey] }} +
    + {% if link.88x31 %} + {% for 88x31 in link.88x31 %} + {{ i88x31(88x31) }} + {% endfor %} + {% endif %} +
    +
    +
    + {% endfor %} +
    + {% endfor %} +
    \ No newline at end of file diff --git a/misc/bookmarks/pt.json b/misc/bookmarks/pt.json new file mode 100644 index 0000000..450bcb3 --- /dev/null +++ b/misc/bookmarks/pt.json @@ -0,0 +1,11 @@ +{ + "pageTitle": "Favoritos", + "pageDescription": "Minha coleção de sites e páginas interessantes.", + "intro": "Essa é a lista de links favoritos curada por mim, dividida em seções para facilitar a navegação ;-)", + "profiles": "Perfis", + "downloads": "Downloads", + "games": "Jogos", + "tools": "Ferramentas", + "music": "Música", + "piracy": "Pirataria" +} \ No newline at end of file diff --git a/misc/misc.11tydata.js b/misc/misc.11tydata.js new file mode 100644 index 0000000..dec5ff3 --- /dev/null +++ b/misc/misc.11tydata.js @@ -0,0 +1,31 @@ +const fs = require("fs"); +const path = require("path"); + +module.exports = { + eleventyComputed: { + t: (data) => { + const dir = path.dirname(data.page.inputPath); + + const file = path.join(dir, `${data.langKey}.json`); + if (fs.existsSync(file)) { + return JSON.parse(fs.readFileSync(file, "utf-8")); + } + + return {}; + }, + c: (data) => { + const dir = path.dirname(data.page.inputPath); + + const file = path.join(dir, `common.json`); + if (fs.existsSync(file)) { + return JSON.parse(fs.readFileSync(file, "utf-8")); + } + + return {}; + } + }, + permalink: data => { + return `/${data.langKey}/misc/${data.page.fileSlug}/`; + }, + tags: "misc" +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..affb8b5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2766 @@ +{ + "name": "adrianvictor-new", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "adrianvictor-new", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.2", + "@babel/traverse": "^7.29.0", + "eleventy-plugin-citations": "^0.1.10", + "express": "^5.2.1", + "readline-sync": "^1.4.10" + } + }, + "node_modules/@11ty/dependency-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-4.0.0.tgz", + "integrity": "sha512-PTOnwM8Xt+GdJmwRKg4pZ8EKAgGoK7pedZBfNSOChXu8MYk2FdEsxdJYecX4t62owpGw3xK60q9TQv/5JI59jw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1" + } + }, + "node_modules/@11ty/dependency-tree-esm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.2.tgz", + "integrity": "sha512-kSTmXneksQLBhwsfqjxiSi9ecRKENXmRtT5RG95rFoWSI8kkwLcGlYpoXsPkCD9uQwSU1rmDzXBDnqUJlWaIyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.7", + "acorn": "^8.15.0", + "dependency-graph": "^1.0.0", + "normalize-path": "^3.0.0" + } + }, + "node_modules/@11ty/eleventy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.2.tgz", + "integrity": "sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@11ty/dependency-tree": "^4.0.0", + "@11ty/dependency-tree-esm": "^2.0.0", + "@11ty/eleventy-dev-server": "^2.0.8", + "@11ty/eleventy-plugin-bundle": "^3.0.6", + "@11ty/eleventy-utils": "^2.0.7", + "@11ty/lodash-custom": "^4.17.21", + "@11ty/posthtml-urls": "^1.0.1", + "@11ty/recursive-copy": "^4.0.2", + "@sindresorhus/slugify": "^2.2.1", + "bcp-47-normalize": "^2.3.0", + "chokidar": "^3.6.0", + "debug": "^4.4.1", + "dependency-graph": "^1.0.0", + "entities": "^6.0.1", + "filesize": "^10.1.6", + "gray-matter": "^4.0.3", + "iso-639-1": "^3.1.5", + "js-yaml": "^4.1.0", + "kleur": "^4.1.5", + "liquidjs": "^10.21.1", + "luxon": "^3.6.1", + "markdown-it": "^14.1.0", + "minimist": "^1.2.8", + "moo": "^0.5.2", + "node-retrieve-globals": "^6.0.1", + "nunjucks": "^3.2.4", + "picomatch": "^4.0.2", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.6", + "posthtml-match-helper": "^2.0.3", + "semver": "^7.7.2", + "slugify": "^1.6.6", + "tinyglobby": "^0.2.14" + }, + "bin": { + "eleventy": "cmd.cjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz", + "integrity": "sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.1", + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "finalhandler": "^1.3.1", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.4", + "please-upgrade-node": "^3.2.0", + "send": "^1.1.0", + "ssri": "^11.0.0", + "urlpattern-polyfill": "^10.0.0", + "ws": "^8.18.1" + }, + "bin": { + "eleventy-dev-server": "cmd.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-plugin-bundle": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.7.tgz", + "integrity": "sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@11ty/eleventy-utils": "^2.0.2", + "debug": "^4.4.0", + "posthtml-match-helper": "^2.0.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz", + "integrity": "sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/lodash-custom": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", + "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/posthtml-urls": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.1.tgz", + "integrity": "sha512-6EFN/yYSxC/OzYXpq4gXDyDMlX/W+2MgCvvoxf11X1z76bqkqFJ8eep5RiBWfGT5j0323a1pwpelcJJdR46MCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "evaluate-value": "^2.0.0", + "http-equiv-refresh": "^2.0.1", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@11ty/recursive-copy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.2.tgz", + "integrity": "sha512-174nFXxL/6KcYbLYpra+q3nDbfKxLxRTNVY1atq2M1pYYiPfHse++3IFNl8mjPFsd7y2qQjxLORzIjHMjL3NDQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "errno": "^1.0.0", + "junk": "^3.1.0", + "maximatch": "^0.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.43.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0", + "peer": true + }, + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-normalize": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", + "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bcp-47": "^2.0.0", + "bcp-47-match": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/biblatex-csl-converter": { + "version": "2.1.0", + "resolved": "git+ssh://git@github.com/h-tex/biblatex-csl-converter.git#223b6d2ba3219cdcd85e23205353dda83d922537", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "xregexp": "^5.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/citeproc": { + "version": "2.4.63", + "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.4.63.tgz", + "integrity": "sha512-68F95Bp4UbgZU/DBUGQn0qV3HDZLCdI9+Bb2ByrTaNJDL5VEm9LqaiNaxljsvoaExSLEXe1/r6n2Z06SCzW3/Q==", + "dev": true, + "license": "CPAL-1.0 OR AGPL-1.0" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js-pure": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", + "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/eleventy-plugin-citations": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/eleventy-plugin-citations/-/eleventy-plugin-citations-0.1.10.tgz", + "integrity": "sha512-Tq50yD8+74wkZDUkOV9rRXBzSU9wxYPFKWsMPjiISmQFbk1aR7jcVyw8zJDPdeH3EPbAvQj4x8ZXfGOVrFsZXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "biblatex-csl-converter": "github:h-tex/biblatex-csl-converter", + "citeproc": "^2.4.63", + "locale-en-us": "^0.0.2", + "style-vancouver": "^0.0.2" + }, + "peerDependencies": { + "@11ty/eleventy": "^3.0.0-beta.1", + "nunjucks": "^3" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/errno/-/errno-1.0.0.tgz", + "integrity": "sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm-import-transformer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz", + "integrity": "sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.15.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/evaluate-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/evaluate-value/-/evaluate-value-2.0.0.tgz", + "integrity": "sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-equiv-refresh": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz", + "integrity": "sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/iso-639-1": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", + "integrity": "sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/liquidjs": { + "version": "10.24.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.24.0.tgz", + "integrity": "sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "commander": "^10.0.0" + }, + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "node_modules/list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/locale-en-us": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/locale-en-us/-/locale-en-us-0.0.2.tgz", + "integrity": "sha512-I02W/LK36C1IDloiFY4ZvK7kIs4C92vCHVEI01rIrJPzzlqcn1NnUxn5d1oiq0pe6JwuzpWwSCYnV0o1WAQP9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/morphdom": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.7.tgz", + "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-retrieve-globals": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz", + "integrity": "sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", + "esm-import-transformer": "^3.0.3" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/posthtml": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.7.tgz", + "integrity": "sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-match-helper": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz", + "integrity": "sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "posthtml": "^0.16.6" + } + }, + "node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/ssri": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-11.0.0.tgz", + "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-vancouver": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/style-vancouver/-/style-vancouver-0.0.2.tgz", + "integrity": "sha512-6DYqSJSRPdPYPZB64LAKjhX6IBpbI8G2QJg0qsgGE6vLMvWG/8tTpuzdIsZPDMPBMnF2jt/1WBqbDZR4VaA2KQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xregexp": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.2.tgz", + "integrity": "sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime-corejs3": "^7.26.9" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f7e92bf --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "adrianvictor-new", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "npx @11ty/eleventy", + "serve": "npx @11ty/eleventy --serve", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs" +} diff --git a/posts/android-developer-verification/index.html b/posts/android-developer-verification.html similarity index 63% rename from posts/android-developer-verification/index.html rename to posts/android-developer-verification.html index b2d9d9b..0a68f7e 100644 --- a/posts/android-developer-verification/index.html +++ b/posts/android-developer-verification.html @@ -1,107 +1,13 @@ - - - - - - - Adrian Victor - On the Recent Changes to App Distribution Requirements in the Android System by Google. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    On the Recent Changes to App Distribution Requirements in the Android System by Google.

    -

    Adrian Victor - 8/29/2025 (last edited in 5/15/2026)

    - - Also available in other languages: - -
  • - - português - -
  • - - -
    - - -

    Recap

    +--- +postTitle: "On the Recent Changes to App Distribution Requirements in the Android System by Google." +postId: developer-verification +langKey: en +layout: post.njk +date: 2025-08-30 +background: android-jellybean.jpg +backgroundOpacity: .35 +--- +

    Recap

    Android is that open-source operating system that works well for users and is loved by developers. Always known for breaking barriers and being open, expandable, versatile, and even friendly to power users–something not every system dares to be (iOS, Windows Phone). For a long time, Android was seen this way compared to its competitors: a breath of fresh air against the abusive practices of companies like Apple. But it seems the Android we've nurtured for two decades no longer fits in the pockets of Google executives; it is too free, creating ethical and technical barriers to the profitable exploitation path adopted by its developer.

    @@ -142,10 +48,4 @@ justify our API usage to their satisfaction. As such, the permission is now bloc

    We must watch how these policies are applied and how they affect the Android ecosystem. An inevitable consequence is that countless abandoned apps, perfectly functional without the new requirements, will disappear overnight. Not all old software connects to the internet, and not all represents a constant threat. Google is taking away the option for experienced users to take responsibility and say: "I know what I'm doing!", treating us as if they know what's best for everyone.

    -

    The commercial Android on phones is based on the AOSP, meaning Android's core remains open, and Google hasn't taken that from users yet. I plan to write another post explaining how to regain control of your device through system modifications, from the simplest, safest, most stable methods to advanced approaches, if you feel confident.

    -
    -
    -
    -
    - - \ No newline at end of file +

    The commercial Android on phones is based on the AOSP, meaning Android's core remains open, and Google hasn't taken that from users yet. I plan to write another post explaining how to regain control of your device through system modifications, from the simplest, safest, most stable methods to advanced approaches, if you feel confident.

    \ No newline at end of file diff --git a/posts/instalando-fl-studio-no-linux/index.html b/posts/instalando-fl-studio-no-linux.html similarity index 64% rename from posts/instalando-fl-studio-no-linux/index.html rename to posts/instalando-fl-studio-no-linux.html index 72006e8..1431010 100644 --- a/posts/instalando-fl-studio-no-linux/index.html +++ b/posts/instalando-fl-studio-no-linux.html @@ -1,127 +1,18 @@ - - - - - - - Adrian Victor - Instalando FL Studio no Linux. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Instalando FL Studio no Linux.

    -

    Adrian Victor - 4/19/2026 (editado por último em 5/15/2026)

    - - Também disponível em outros idiomas: - -
  • - - english - -
  • - - -
    - - - - - - -

    Prólogo

    +--- +postTitle: "Instalando FL Studio no Linux." +postId: fl-linux-install +postVideoLink: "https://www.youtube.com/watch?v=6bnNAnSY9Uo" +postVideoTitle: "Como instalar o FL Studio no Linux?" +postVideoImage: "/thumbnails/fl_studio_linux.png" +postVideoWebsite: "YouTube" +postVideoDuration: "5:53" +langKey: pt +layout: post.njk +date: 2026-04-20 +background: fl_screenshot_no_text.png +backgroundOpacity: .35 +--- +

    Prólogo

    Desde que mudei permanentemente para o Linux em 2024, venho me impressionando com a capacidade inabalável da comunidade open-source de trazer a vida no Linux softwares complexos feitos originalmente para Windows. Entretanto, um dos programas amaldiçoados com os mais ímpetos e abstratos erros na velha guarda do Wine é o FL Studio, caracteristica essa que fez com que eu, por muito tempo, achasse que a DAW da Image-Line não iria rodar de jeito nenhum no sistema do penguim.

    Acontece que o FL roda no Linux, e roda muito bem, considerando a sua complexidade. Descartando uns problemas visuais, algumas VSTs que simplesmente não rodam e uma gambiarra para rodar plugins 32-bits, a experiência de usar o FL Studio no Linux é bem sólida. Parece que a Valve, Wine e comunidade open-source não estão para brincadeira mesmo.

    Antes de ir às formalidades, gostaria de definir o escopo desse tutorial. Faço ele com tudo o que cabe na minha memória recente trabalhando com o FL no Linux. Mas também não é uma postagem estática; se estiver faltando alguma coisa me mande um e-mail e eu atualizo.

    @@ -170,10 +61,4 @@

    Conclusões

    Não sou a pessoa mais apta para dizer até onde a usabilidade da DAW se extende no Linux; não sou nem de longe um usuário avançado do FL. Mas, a título de informação, consegui produzir a faixa Velkommen inteiramente no sistema do penguim e não tenho a intenção de voltar para o Windows.

    É mesmo inconveniente quando um plugin ou outro não funciona, quando eu tenho que criar um Fruity Wrapper antes de usar um plugin 32bits, ou quando eu penso que talvez a DAW possa performar um pouco melhor nativamente no Windows. Porém, para mim, é um preço muito justo a se pagar para misturar nas minhas músicas um pouco desse suco de ideologia que é me desafiar a não usar o sistema da Microsoft.

    -

    Espero que você também encontre esse conforto—não na conveniência, mas em desafiar o molde com intenção. Excentricidade digna de um artista.

    -
    -
    -
    -
    - - \ No newline at end of file +

    Espero que você também encontre esse conforto—não na conveniência, mas em desafiar o molde com intenção. Excentricidade digna de um artista.

    \ No newline at end of file diff --git a/posts/installing-fl-studio-on-linux/index.html b/posts/installing-fl-studio-on-linux.html similarity index 66% rename from posts/installing-fl-studio-on-linux/index.html rename to posts/installing-fl-studio-on-linux.html index 8491c89..623c1bf 100644 --- a/posts/installing-fl-studio-on-linux/index.html +++ b/posts/installing-fl-studio-on-linux.html @@ -1,107 +1,13 @@ - - - - - - - Adrian Victor - Installing FL Studio on linux. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Installing FL Studio on linux.

    -

    Adrian Victor - 4/19/2026 (last edited in 5/15/2026)

    - - Also available in other languages: - -
  • - - português - -
  • - - -
    - - -

    Prologue

    +--- +postTitle: "Installing FL Studio on linux." +postId: fl-linux-install +langKey: en +layout: post.njk +date: 2026-04-20 +background: fl_screenshot_no_text.png +backgroundOpacity: .35 +--- +

    Prologue

    Since I permanently moved to Linux in 2024, I have been impressed by the unwavering ability of the open-source community to bring to life in Linux complex software originally made for Windows. However, one of the programs cursed with the most stubborn and abstract errors in the old guard of Wine is FL Studio, a characteristic that made me, for a long time, think that Image-Line's DAW would not run at all on the penguin's system.

    It turns out that FL runs on Linux, and runs very well, considering its complexity. Disregarding some visual problems, some VSTs that simply don't run, and a workaround to run 32-bit plugins, the experience of using FL Studio on Linux is quite solid. It seems that Valve, Wine, and the open-source community are not messing around.

    Before getting into the formalities, I would like to define the scope of this tutorial. I'm making it with everything that fits in my recent memory working with FL on Linux. But it's also not a static post; if something is missing, send me an email and I'll update it.

    @@ -153,10 +59,4 @@

    Conclusions

    I'm not the most apt person to say how far the DAW's usability extends on Linux; I'm far from an advanced FL user. But, for your information, I was able to produce the track Velkommen entirely on the penguin's system and have no intention of going back to Windows.

    It's really inconvenient when one plugin or another doesn't work, when I have to create a Fruity Wrapper before using a 32-bit plugin, or when I think that maybe the DAW could perform a little better natively on Windows. However, for me, it's a very fair price to pay to mix into my music a little bit of that ideology juice that is challenging myself not to use Microsoft's system.

    -

    I hope you also find that comfort—not in convenience, but in challenging the mold with intention. Eccentricity worthy of an artist.

    -
    -
    -
    -
    - - \ No newline at end of file +

    I hope you also find that comfort—not in convenience, but in challenging the mold with intention. Eccentricity worthy of an artist.

    \ No newline at end of file diff --git a/posts/posts.11tydata.js b/posts/posts.11tydata.js new file mode 100644 index 0000000..9b619b7 --- /dev/null +++ b/posts/posts.11tydata.js @@ -0,0 +1,12 @@ +let data = { + layout: "_includes/post.njk", + eleventyComputed: { + lastModified: function(data) { + const fs = require('fs'); + const stats = fs.statSync(data.page.inputPath); + return stats.mtime; + } + } +}; + +module.exports = data; diff --git a/posts/verificacao-de-desenvolvedor-no-android/index.html b/posts/verificacao-de-desenvolvedor-no-android.html similarity index 68% rename from posts/verificacao-de-desenvolvedor-no-android/index.html rename to posts/verificacao-de-desenvolvedor-no-android.html index 7ec775a..f39b84a 100644 --- a/posts/verificacao-de-desenvolvedor-no-android/index.html +++ b/posts/verificacao-de-desenvolvedor-no-android.html @@ -1,107 +1,13 @@ - - - - - - - Adrian Victor - Sobre as recentes mudanças nos requisitos de distribuição de apps no sistema Android feitas pela Google. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Sobre as recentes mudanças nos requisitos de distribuição de apps no sistema Android feitas pela Google.

    -

    Adrian Victor - 8/29/2025 (editado por último em 5/15/2026)

    - - Também disponível em outros idiomas: - -
  • - - english - -
  • - - -
    - - -

    Recapitulando

    +--- +postTitle: "Sobre as recentes mudanças nos requisitos de distribuição de apps no sistema Android feitas pela Google." +postId: developer-verification +layout: post.njk +date: 2025-08-30 +background: android-jellybean.jpg +backgroundOpacity: .35 +langKey: pt +--- +

    Recapitulando

    Android é aquele sistema operacional open-source que funciona bem para os usuários, e que os desenvolvedores amam. Sempre conhecido por quebrar barreiras e por ser aberto, expansível, versátil e até amigável com os mais nerds, coisa que nem todo sistema tem a cara e coragem de ser (iOS, Windows Phone). É assim que, por muito tempo, o Android foi visto em relação aos seus concorrentes: Um suspiro de ar puro em relação às práticas abusivas de empresas como a Apple. Mas parece que o Android que cultivamos por duas décadas não cabe mais no bolso dos executivos da Google, é livre demais, e isso criou barreiras éticas e técnicas no lucrativo caminho de exploração adotado pela sua desenvolvedora.

    @@ -141,10 +47,4 @@

    Devemos ficar atentos a como essas novas políticas vão ser aplicadas, e como as mesmas afetarão o ecossistema do Android. Uma consequência inevitável das mudanças é que um número inestimável de aplicações abandonadas pelos desenvolvedores, que, se não fosse pelos novos requisitos, seriam perfeitamente funcionais serão perdidas de um dia para o outro. Nem todo software antigo se conecta à internet, nem todo software antigo representa um perigo constante ao usuário. A Google está tirando do usuário experiente a opção de assumir a responsabilidade e dizer: "Eu sei o que estou fazendo!", nos segurando como crianças, como se soubessem o que é melhor para todos.

    -

    O Android comercializado nos celulares é baseado no AOSP, o que significa que a força vital do Android é aberta, e isso a Google ainda não tirou dos usuários. Portanto pretendo fazer um outro post explicando como você pode recuperar o controle do seu dispositivo por meio de modificações no sistema, da forma mais simples, segura e estável possível, até as formas mais avançadas, caso você se sinta confiante.

    -
    -
    -
    -
    - - \ No newline at end of file +

    O Android comercializado nos celulares é baseado no AOSP, o que significa que a força vital do Android é aberta, e isso a Google ainda não tirou dos usuários. Portanto pretendo fazer um outro post explicando como você pode recuperar o controle do seu dispositivo por meio de modificações no sistema, da forma mais simples, segura e estável possível, até as formas mais avançadas, caso você se sinta confiante.

    \ No newline at end of file diff --git a/pt/blog/index.html b/pt/blog/index.html deleted file mode 100644 index 3be56fa..0000000 --- a/pt/blog/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Blog

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Listando Postagens do Blog:

    - -
    -
    -
    - - \ No newline at end of file diff --git a/pt/index.html b/pt/index.html deleted file mode 100644 index 6dffb0d..0000000 --- a/pt/index.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    - -
    - - - - -
    -
    -

    Bem-vindo

    -

    Parece que você encontrou meu website! Olá, sou Adrian Victor (ou tenkuma), um cara brasileiro que gosta de mexer com computadores, programas de computadores e enimatpirtlitemídios.

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - -

    Sobre Mim

    -

    - Meu nome é Adrian Victor, mas on-line eu uso o nickname tenkuma. Estou no último ano do ensino médio e estudo informática. Meus hobbies são escutar e produzir música, programação, selfhosting, Linux, e muito mais. -

    -

    Tenkuma, ou 天くま em japonês, significa urso celestial e foi um nome dado a mim por um amigo que eu já perdi contato há muito tempo. Sakata se foi, mas o nome ficou e se tornou parte integral da personalidade do meu eu digital até hoje.

    - -

    Redes Sociais e Contato

    -

    - Estou publicamente disponível no Mastodon (@tenkuma@mstdn.social), - GitHub (adrianvic), - Disroot Git (adrianvictor), - Discord (@adrianvic), - YouTube (@adrianvictor8), - BitView (tenkuma), - Modrinth (tenkumabear) - e XMPP (adrianvictor@disroot.org). -

    -

    Você pode enviar um correio eletrônico para (adrianvictor@disroot.org) ou me contactar por qualquer outro meio citado acima. Para assuntos relativos a projetos específicos, verifique o campo de contato do projeto, caso não haja um adicione +nomedoprojeto ao meu endereço de E-mail (exemplo: adrianvictor+projetolegal@disroot.org).

    -
    - -
    -
    -

    Música

    -

    Sempre amei música, e tenho achado produção musical algo muito interessante ultimamente. Publico minhas músicas como tenkuma, junto com meus amigos formei a Margarina Records—uma label amadora.

    -

    Você pode conferir minhas músicas mais recentes no meu perfil do Genius.

    - -
    - - - - - - -
    -
    - -
    - - -
    - -
    -
    -

    Vídeos

    -

    Eu faço vídeos para o meu canal do YouTube. Não posto regularmente; não tem calendário—apenas eu mostrando alguma coisa em vídeo.

    -
    - -
    - - - - -
    - -
    -
    -

    Software

    -

    Estou estudando informática no IFC (SC, Brazil) mas no meu tempo livre tenho projetos como programas de computador, plugins para Minecraft, servidores Minecraft, etc... Todos meus projetos públicos estão disponíveis no meu perfil do GitHub.

    -
    - -
    - -
    - -
    -
    -
    - Jamfish -
    - - - -
    -
    -

    Reprodutor de música nativo para dispositivos Android que se conecta a servidores de mídia Jellyfin. O código é baseado no repositório arquivado do Gelli, que por sua vez se baseia em uma versão antiga do Phonograph.

    -
    -
    - - - -
    -
    -
    - ItemEconomy -
    - - - -
    -
    -

    Este plugin PaperMC integra-se ao VaultUnlocked para fornecer um sistema de economia único baseado em itens para o seu servidor Minecraft. Em vez de depender apenas de saldos virtuais, os jogadores usam itens do jogo como moeda física, adicionando uma camada de imersão e realismo à sua economia.

    -
    -
    - - - -
    -
    -
    - Eye of Nemesis -
    - - - -
    -
    -

    Eye of Nemesis é um plugin que permite aos administradores de servidores escrever políticas que negarão ou permitirão (lista negra/branca) que os jogadores façam coisas específicas com base no valor dos nós.

    -
    -
    - - - -
    -
    -
    - PestoWiki -
    - - - -
    -
    -

    Cliente personalizável multiplataforma para wikis escrito em Python usando PySide6 (QT).

    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/pt/misc/88x31/index.html b/pt/misc/88x31/index.html deleted file mode 100644 index 0ac32c7..0000000 --- a/pt/misc/88x31/index.html +++ /dev/null @@ -1,3093 +0,0 @@ - - - - - - - Adrian Victor - 88x31 - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    88x31

    -

    Essa é uma coleção de GIFs e imagens 88x31 que eu baixei pela internet.

    -
    -
    -

    Feitos por mim

    -
    - - - -
    -

    Outros

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/pt/misc/bookmarks/index.html b/pt/misc/bookmarks/index.html deleted file mode 100644 index b7ff761..0000000 --- a/pt/misc/bookmarks/index.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -

    Favoritos

    -

    Essa é a lista de links favoritos curada por mim, dividida em seções para facilitar a navegação ;-)

    - - - -
    -
    - -
    -

    Downloads

    - -
    - - - - - - - - - -
    - -
    - -
    -
    MalwareWatch
    -
    -
    - Website do Enderman. Tem download de vários softwares úteis, imagens de sistemas operacionais e malware. -
    - -
    -
    -
    - -
    -
    Free Images
    -
    -
    - Pesquise por milhões de imagens, artes e vetores. Todas as imagens são de domínio público ou sobre CC0. Livre para baixar e livre para usar. -
    - -
    -
    -
    - -
    -
    88x31
    -
    -
    - Essa é uma coleção de mais de 6500 GIFs e PNGs no formato 88x31. No final dos anos 1990 e começo dos 2000 era muito comum usar essas imagens no seu site pessoal. -
    - - - - - - - - - - - -
    -
    -
    - -
    - -
    -

    Perfis

    - -
    - -
    -
    Mr. Nando
    -
    -
    - Meu amigo Fernando, ele faz músicas e vídeos de Minecraft e speedrun. -
    - -
    -
    -
    - -
    -
    Endermanch
    -
    -
    - Andrew é um engenheiro de software, entusiasta de malware e, mais importante, uma estranha e alta criatura. Cresci com os seus videos e ele é uma grande inspiração para mim. -
    - -
    -
    -
    - -
    - -
    -

    Ferramentas

    - -
    - -
    -
    Excalidraw
    -
    -
    - Quadro branco sem distrações. -
    - -
    -
    -
    - -
    -
    Postimages
    -
    -
    - Gere links permantes de suas imagens para forums, blogs e redes sociais. -
    - -
    -
    -
    - -
    -
    uBlock Origin
    -
    -
    - Um bloqueador eficiente para Chromium e Firefox. Rápido e pequeno. -
    - - - - - - - -
    -
    -
    - -
    - -
    -

    Jogos

    - -
    - - - - - - - - - -
    - -
    - -
    -
    SteamGridDB
    -
    -
    - Baixe e compartilhe recursos visuais de jogos e personalize sua biblioteca de jogos. -
    - -
    -
    -
    - -
    - -
    -

    Música

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    CVGM Radio
    -
    -
    - Seu lar para música relacionada a video games, demo scene e computadores. -
    - -
    -
    -
    - -
    - -
    -

    Pirataria

    - -
    - - - - - -
    - -
    - -
    -
    Nyaa
    -
    -
    - Um tracker de animes, mangás e coisas relacionadas. -
    - - - - - - - -
    -
    -
    - -
    -
    Lucida
    -
    -
    - Com Lucida, você pode baixar musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça. Sem pegadinhas, sem anúncios obrigatórios, sem enrolação. Como que funciona? -
    - -
    -
    -
    - -
    -
    DoubleDouble
    -
    -
    - Baixe musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça. -
    - -
    -
    -
    - -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/pt/misc/index.html b/pt/misc/index.html deleted file mode 100644 index 8884646..0000000 --- a/pt/misc/index.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Adrian Victor - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Misc

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - -
    -

    Miscelâneo

    - -
      -
      - - - -
      - - 88x31 - -
      - -
      - - - Minha coleção de GIFs e imagens 88x31. -
      - - - -
      - - Favoritos - -
      - -
      - - - Minha coleção de sites e páginas interessantes. -
      - -
      -
    -
    -
    -
    - - \ No newline at end of file diff --git a/school/api-rodrigoribeiro/index.html b/school/api-rodrigoribeiro.html similarity index 56% rename from school/api-rodrigoribeiro/index.html rename to school/api-rodrigoribeiro.html index 6ab6141..dcf84df 100644 --- a/school/api-rodrigoribeiro/index.html +++ b/school/api-rodrigoribeiro.html @@ -1,86 +1,7 @@ - - - - - - - Adrian Victor - Demonstração da API do Prof. Rodrigo Ribeiro - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    -
    -

    Demonstração da API do Prof. Rodrigo Ribeiro

    +

    {{pageTitle}}

    A API do Prof. Rodrigo Ribeiro permite que o client envie uma imagem, assim retornando o resultado de uma leitura óptica realizada sobre a mesma com inteligência artificial. Esse client lê o resultado e o mostra de forma simples para o usuário.

    Mais informações sobre a API podem ser encontradas no seu website.

    Token: Ausente
    @@ -207,8 +128,4 @@ apiDiv.classList.toggle('selected'); loginDiv.classList.toggle('selected'); } - -
    -
    - - \ No newline at end of file + \ No newline at end of file diff --git a/docs/school/guia-ifc-novatos/index.html b/school/guia-ifc-novatos.html similarity index 64% rename from docs/school/guia-ifc-novatos/index.html rename to school/guia-ifc-novatos.html index 560ad85..fe765bd 100644 --- a/docs/school/guia-ifc-novatos/index.html +++ b/school/guia-ifc-novatos.html @@ -1,98 +1,13 @@ - - - - - - - Adrian Victor - Guia para novatos no IFC. - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Escola

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Guia para novatos no IFC.

    -

    Adrian Victor - 1/12/2026 (editado por último em )

    - -
    - - - - -
    - -
    -
    -

    Adrian Victor:Escola

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Guia para novatos no IFC.

    -

    Adrian Victor - 1/12/2026 (editado por último em )

    - -
    - - - -

    Antes de tudo, quero dar boas vindas a qualquer novato que esteja lendo esse documento, o IF é uma grande oportunidade que felizmente você não deixou passar! Não vou me extender muito nesse tópico pois tenho certeza que vocês vão ouvir depoimentos de ex-alunos bem-sucedidos ao longo do período letivo.

    -

    Estou organizando esse documento para evitar que os veteranos tenham que explicar tudo para cada novato que apresentar a mesma dúvida, centralizando o conteúdo para facilitar quando você dá aquela esquecida sobre como algo funciona. Ao mesmo tempo, não quero que ele substitua o contato que você poderia ter com um veterano, não deixe de conversar e fazer novas amizades!

    -

    Para correções ou dúvidas que não sanei aqui, você pode me mandar um e-mail (adrianvictor@disroot.org) ou me contactar por qualquer outro lugar que você conseguir, vou corrigir/adicionar o mais rápido possível. Caso algum veterano se interesse em escrever algo para complementar essa postagem, fico feliz em adicionar seu texto ou link aqui.

    - -

    O SIGAA

    -

    SIGAA (Sistema Integrado Para Ferrar com os Alunos) vai ser o lugar onde você vê as suas notas, frequências, aplica para auxílios e entrega trabalhos – caso você encontre um professor que ainda tem sanidade pra usar essa coisa além do que se faz obrigatório.

    -

    Ofensas à parte, vamos dar uma olhada nas partes importantes do sistema.

    -

    Login e cadastro

    -
    - -

    1 - Tela de login do SIGAA.

    -
    -

    Após acessar o site do SIGAA, você deve ver a tela de login mostrada na imagem. Antes de tudo, verifique se você está no SIGAA dos alunos.(1.1)

    -

    Caso você tenha um login, o acesso é bem simples, apenas preencha os campos de usuário e senha(1.2) e confirme. O login expira em 1 minuto de inatividade.

    - -

    No caso de você não possuir um cadastro, use o link abaixo da tela de login(1.3) para abrir o formulário de cadastro.

    - -

    Tela Principal

    -
    - -

    2 - Tela inicial do SIGAA

    -
    - -

    A tela principal do SIGAA é uma bagunça, mas você não vai usar nem metade do que tem nela, por isso vamos dar uma olhada somente nas funcionalidades principais dela.

    - -

    No cabeçalho(2.1) você tem acesso a coisas como boletim, atestado de frequência, etc... Também é o lugar que você gerencia seus auxílios.

    - -

    É possível gerenciar seu perfil público e dados na barra lateral(2.2), assim como acessar alguns links úteis (como o da biblioteca digital). O seu perfil fica visível em postagens e respostas enviadas no forum do SIGAA.(2.6) Por algum motivo, minha foto de perfil some toda hora, já não me dou mais o trabalho de colocar de volta.

    - -

    Não cadastre um e-mail que você usa com frequência no SIGAA, pois ele vai entupir sua caixa de entrada com SPAM. E os e-mails que seriam úteis chegam tão tarde que perdem a utilidade (já recebemos e-mail sobre cancelamento de aulas com um mês de atraso). Se você quiser manter seu e-mail pessoal no SIGAA, já que eles realmente mandam alguma coisa importante uma vez ou outra por ano, configure um filtro para o endereço do IF (ifc.edu.br) que joga todos os e-mails do SIGAA para uma caixa diferente no seu e-mail.

    - -

    Continuando, chegamos na lista de matérias do seu ano letivo(2.5), você vai usar ela para acessar a página da matéria.

    - -

    E por fim, temos o forum(2.6), que eu incluí por dó, pois ninguém nunca usa ele. Em teoria ele serve para alunos tirarem suas dúvidas e/ou buscarem ajuda sobre algum tópico relevante do curso, mas acabou que ele virou uma bagunça empoierada que quase não tem atividade nenhuma.

    - -

    Página da Matéria

    -
    - -

    3 - Página da matéria no SIGAA

    -
    - -

    Essa é, provavelmente, a página que você mais vai usar do SIGAA, ela mostra todas as atividades do ano na lista principal(3.2). Essa lista vai ficando mais bagunçada ao decorrer do ano, ela mostra as atividades das mais antigas para as mais novas, portanto quando o ano passar e o(a) professor(a) adicionar muitas atividades, você vai ter que rolar até o final para achar a mais recente. Se o seu professor adicionar atividades futuras na lista, você também terá que procurar a desse dia.

    - -

    O Menu da Turma Virtual(3.1) também é importantíssimo, e dessa vez não tenho muito o que dizer, ele funciona como um menu. Os itens que você mais vai usar são Alunos > Frequência para ver sua frequência nessa matéria e Alunos > Ver notas, que mostra suas notas individuais dessa matéria, até mesmo as que não aparecem no boletim ainda.

    - -

    Na barra lateral da direita(3.3) você encontra o andamento das aulas, que é a quantidade de aulas ministradas em relação ao total. O número de aulas ministradas pode exceder o número de aulas totais, porém as excedentes não vão afetar a sua média de faltas. Também tem algumas outras caixas de notícias, enquetes, atividades, avaliações e forum, mas nenhuma é usada com frequência.

    - -

    Vale ressaltar que no celular é difícil rolar a página quando você dá zoom, para resolver isso você precisa rolar (arrastar) no Menu da Turma Virtual, porque na lista principal vai rolar apenas a lista de atividades.

    - -

    Frequência

    -

    As frequências são contabilizadas pela chamada que os professores fazem no começo da aula. Eventos como a FICE e OLINCAC também contam presença e geralmente um professor fica encarregado de fazer a chamada da manhã, enquanto outro fica na tarde (é bem fácil pegar a chamada da manhã/tarde e ir embora).

    -

    O aluno não pode exceder em faltas 25% do total de aulas e o limite por matéria do SIGAA não conta no boletim, portanto se você exceder ele sem ultrapassar o limite total, você ainda passa. As matérias optativas são uma excessão, com essas você precisa tomar cuidado para não atingir o limite de faltas.

    -

    Por mais que o limite esteja entorno de 300 faltas, não recomendo que se acostume a faltar, pois temos 9 aulas por dia, ou seja, 9 faltas. Até as faltas em aulas específicas somam rápido.

    - -

    Referências

    - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/school/school.json b/school/school.json new file mode 100644 index 0000000..2d173c2 --- /dev/null +++ b/school/school.json @@ -0,0 +1,5 @@ +{ + "layout": "base.njk", + "title": "Adrian Victor:Trabalhos", + "langKey": "pt" +} \ No newline at end of file diff --git a/docs/school/telnet-en/index.html b/school/telnet-en.html similarity index 59% rename from docs/school/telnet-en/index.html rename to school/telnet-en.html index 78eec32..2bf225b 100644 --- a/docs/school/telnet-en/index.html +++ b/school/telnet-en.html @@ -1,98 +1,12 @@ - - - - - - - Adrian Victor - Telnet - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Telnet

    -

    Adrian Victor & Arthur Borges - 8/26/2025 (last edited in )

    - -
    - - - +--- +postTitle: "Telnet" +layout: post.njk +date: 2025-08-27 +background: redes.jpg +authors: Adrian Victor & Arthur Borges +langKey: en +--- +

    What the protocol is, its function and history

    Telnet (from TELecommunication NETwork) is a TCP/IP stack network protocol that allows remote text-mode communication between computers. Its main function is to provide an interactive session where a user can access and control another device as if they were on a local terminal.

    Created in 1969, Telnet was one of the first protocols developed for ARPANET (the network that gave rise to the Internet) and became fundamental for system and device administration in the 1970s, 1980s, and 1990s. Over time, it fell out of use due to lack of security, being replaced by more modern alternatives such as SSH (Secure Shell).

    @@ -144,10 +58,4 @@ Ready to receive commands.
    -
    - - -
    -
    - - \ No newline at end of file + \ No newline at end of file diff --git a/school/telnet-en/index.html b/school/telnet-en/index.html deleted file mode 100644 index 78eec32..0000000 --- a/school/telnet-en/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - Adrian Victor - Telnet - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Telnet

    -

    Adrian Victor & Arthur Borges - 8/26/2025 (last edited in )

    - -
    - - - -

    What the protocol is, its function and history

    -

    Telnet (from TELecommunication NETwork) is a TCP/IP stack network protocol that allows remote text-mode communication between computers. Its main function is to provide an interactive session where a user can access and control another device as if they were on a local terminal.

    -

    Created in 1969, Telnet was one of the first protocols developed for ARPANET (the network that gave rise to the Internet) and became fundamental for system and device administration in the 1970s, 1980s, and 1990s. Over time, it fell out of use due to lack of security, being replaced by more modern alternatives such as SSH (Secure Shell).

    -

    Implementation

    -

    Default port: 23/TCP.
    -Works at the application layer of the OSI model.
    -Format: Based on ASCII character exchange, without encryption.
    -RFC: Defined by RFC 854 (1983).
    -Architecture: Follows the client-server model

    -

    How it works

    -

    In practice, Telnet works relatively simply. The process starts when the client establishes a TCP connection to the server via port 23. Then a remote terminal session is initiated and the user must provide credentials such as username and password. After authentication, commands typed on the client are transmitted in plain text to the server, which processes them and returns the corresponding output. The session remains active as long as the user wants, normally ending with commands like exit or logout

    -

    Use cases

    -

    For many years, Telnet was widely used for remote access to Unix, Linux, and Windows servers, especially older versions of these systems. It also became common in network device administration, such as routers and switches, until SSH became the standard. Additionally, mainframes and some legacy devices still use Telnet today. Another practical application is in educational environments and network diagnostics, where it is used to test open ports and check service connectivity, such as running “telnet server.com 80” to see if a web server port is operational.

    -

    Encryption: the inherent problem

    -

    Telnet has no native encryption, which makes it extremely vulnerable. To solve this problem, more secure alternatives were developed. The main one is SSH (Secure Shell), created in the 1990s as a direct Telnet replacement. SSH offers the same functionality while ensuring data protection through strong authentication and full traffic encryption. Another, less common approach is using SSL/TLS to tunnel Telnet sessions, but in practice this is rarely used.

    -

    Advantages and disadvantages

    -

    Telnet’s advantages include simplicity, low resource usage, and compatibility with various older systems, which facilitated its adoption over the years. However, these benefits are outweighed by its disadvantages. The main one is the lack of encryption, exposing all transmitted data—including passwords—in plain text. This makes it vulnerable to attacks such as sniffing, which captures network packets, and hijacking, which takes over active sessions. For this reason, Telnet is considered obsolete and unsafe for use on open networks like the Internet.

    -

    Relation to other protocols

    -

    Telnet is part of the TCP/IP protocol family and uses TCP to ensure reliable communication. Like other protocols in this stack, such as HTTP, FTP, and SMTP, it relies on stable connections to perform its functions, but its distinguishing feature has always been terminal-mode interactivity. Due to security flaws, it was replaced by its natural successor, SSH, which retained Telnet’s conceptual base but added robust protection layers.

    -

    Functional example

    -

    Below is a Telnet connection simulator written in JavaScript.

    -
    -

    Loading...

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Server

    - - -
    -
    -

    Client

    - -
    - - -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/school/telnet-pt/index.html b/school/telnet-pt.html similarity index 61% rename from school/telnet-pt/index.html rename to school/telnet-pt.html index 7de9b70..a798ccc 100644 --- a/school/telnet-pt/index.html +++ b/school/telnet-pt.html @@ -1,98 +1,12 @@ - - - - - - - Adrian Victor - Telnet - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    Adrian Victor:Trabalhos

    - Fanasy is not a crime, find your castle in the sky. - -
    -
    -
    - - -
    -
    -
    - - - -
    -
    -
    -

    Telnet

    -

    Adrian Victor & Arthur Borges - 8/26/2025 (editado por último em )

    - -
    - - - +--- +postTitle: "Telnet" +layout: post.njk +date: 2025-08-27 +background: redes.jpg +authors: Adrian Victor & Arthur Borges +langKey: pt +--- +

    O que é o protocolo, sua função e histórico

    O Telnet (do inglês TELecommunication NETwork) é um protocolo de rede da pilha TCP/IP que permite a comunicação remota entre computadores em modo texto. Sua @@ -186,10 +100,3 @@ Pronto para receber comandos.

    - - - - - - - \ No newline at end of file diff --git a/docs/static/site.webmanifest b/site.webmanifest.njk similarity index 60% rename from docs/static/site.webmanifest rename to site.webmanifest.njk index ef11935..42ed39d 100644 --- a/docs/static/site.webmanifest +++ b/site.webmanifest.njk @@ -1,15 +1,18 @@ +--- +permalink: /static/site.webmanifest +--- { "name": "", "short_name": "", "icons": [ { - "src": "/pages/tenkuma/web/static/android-chrome-192x192.png", + "src": "{{ '/static/android-chrome-192x192.png' | url }}", "sizes": "192x192", "type": "image/png" }, { - "src": "/pages/tenkuma/web/static/android-chrome-512x512.png", + "src": "{{ '/static/android-chrome-512x512.png' | url }}", "sizes": "512x512", "type": "image/png" } diff --git a/static/site.webmanifest b/static/site.webmanifest deleted file mode 100644 index ef11935..0000000 --- a/static/site.webmanifest +++ /dev/null @@ -1,20 +0,0 @@ - -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/pages/tenkuma/web/static/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/pages/tenkuma/web/static/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} \ No newline at end of file