\n\n\nBITS 64\n\nsegment .text\nglobal _start\n\n_start:\n mov rax, 1\n mov rdi, 1\n mov rsi, m\n mov rdx, ml\n syscall\n\n mov rax, 60\n mov rdi, 0\n syscall\n\nsegment .rodata\nm: db \"Hello world!\", 10\nml: equ $ - m\n\n<\/pre>\n<\/code>\n\nAnd when compiled using:\n\n```\n$ nasm -felf64 a.asm && ld -o a a.o\n```\n\nWhere `a.asm` is the assembly source code you see\nabove you get a `8.7 KB` binary\n\nSo now let's do the same but using FASM:\n\n\n\n\nformat ELF64 executable 3\nsegment readable executable\n\n_start:\n mov rax, 1\n mov rdi, 1\n mov rsi, m\n mov rdx, ml\n syscall\n\n mov rax, 60\n mov rdi, 0\n syscall\n\nsegment readable\nm: db \"Hello world!\", 10\nml = $ - m\n\n<\/pre>\n<\/code>\n\nThe code hasn't changed much but when\nwe compile this code using:\n\n```\n$ fasm a.asm && chmod a+rx .\/a\n```\n\nWhere `a.asm` is the assembly source code you see\nabove you get a `235 B` binary\n\nThat's literally `8.465 KB` improvement for only changing\n5 lines of code...\nThat's only one byte larger than out source code -- `234 B`\n\nCrazy how fast, small and nice this assembler is,\n[give it a try!](https:\/\/flatassembler.net\/) :)\n",
- "time": 1656210519.256045,
- "keywords": "fasm assembly nasm yasm flatassembler netwideassembler modularassembler assembler tech technology"
- },
- "me--an-lgbt-person---anti-lgbt-family---no": {
- "title": "Me, an LGBT person + anti-lgbt family = no",
- "content": "The title speaks for itself tbh\n\nBasically my classmate outted me at the start\nof this year's (2022) pride month and since then\nlife has been even more shit than it already\nwas\n\nAnd also annoying thing that she didn't even out\nas trans, well you see my sexuality is straight\nas I like men, but my gender is a transgender woman\nand what my classmate did was out me as a 'gay man'\nwhich is just **No**, she even knows I'm transgender\nbut like if she outted me why didn't she do it properly\nlike it's good, but also bad, like my mother probably\nfeels much worse about trans people if she's constantly\nbullying me for being a 'gay man', which I'm not\n\nIt keeps coming up and my mother keeps bullying me for\nit and it's a pain in the ass by double\n\n- I'm being bullied by my mother for being lgbt\n- I was outted wrong\n\nIf she outted me a transgender it would only be\n\n- I'm being bullied by my mother for being lgbt\n\nStill a pain but not 2 issues I have to deal with lmao,\nthe moral of the story is stop outting people lol and\nlet me be omg\n\nkthxbye\n",
- "time": 1656420402.930341,
- "keywords": "lgbt trans trangender family gay pride transwoman woman"
- },
- "what-kind-of-pedophilic-bullshit-is-this--freespeechtube-": {
- "title": "What kind of pedophilic bullshit is this 'FreeSpeechTube'",
- "content": "## TW: Pedophilia\n\nMy friend celestia just found this site\ncalled while looking for YouTube\nalternatives on a YouTuve video called\n'Reviewing LITERALLY ALL YouTube Alternatives', the part 1\nand it's so fucking disgusting, literally 99% sad excuses\nof \"people\" on there are fucking pedophiles, 'free speach'\nthey say, that's not 'free speach', that's just sexual fucking abuse,\nI am very concerned how this site is out here and live,\njesus fucking crist, ew, I wish I was blind lmao\n\nAnyone from this site, please stop this bullshit, leave it and\nget some help\n",
- "time": 1656427015.430034,
- "keywords": "free-speech freespeechtube pedophilia pedo"
- },
- "salad-fingers": {
- "title": "Salad fingers",
- "content": "I literally watched it all today, it's so nice\nI love it tbh\n\n\n",
- "time": 1656429378.634067,
- "keywords": "salad-fingers salad fingers youtube"
- },
- "goodbye--technoblade---": {
- "title": "Goodbye, technoblade :(",
- "content": "\n\nRIP, you will be missed :(\n",
- "time": 1656639959.862922,
- "keywords": "technoblade death youtube minecraft"
- },
- "how-i-feel-about-rust-being-added-to-linux-kernel-version-5-20": {
- "title": "How I feel about rust being added to Linux kernel version 5.20",
- "content": "If you didn't know already rust is being added to the\nLinux kernel on version 5.20 and you also probably know that\nI dislike rust so I feel bad for this\n\nThis makes no sense, why would you use such a bloated language\nin a kernel??? And will it depend on the rust compiler? Like\nI hope not, I'm not going to compile rust on my machine\njust to install gentoo Linux or something, just no, tf is\nwrong with the rusties, stop rewritting everything in rust, it's\nnot going to make everything customisable, blazingly fast and lightweight,\nactually quite the opposite as rust produces big binaries compared to C\nand also it requires 500k crates for a simple ass program, it's just\nannoying how this is happening\n\nThis is another reason for you to switch to OpenBSD next year, that's\nwhat I'll do lol\n\nUntil I switch to OpenBSD I'm not updating from 5.16.7, no\nway I'm going to have rust built into my kernel\n\nAnyway, thank you for listening to my opinion on this, cya in the next\nblog\n",
- "time": 1656690193.688525,
- "keywords": "rust openbsd bsd linux rustlang crates bloat Linux gnu 5.20"
- },
- "abot--ari-bot--bot-on-collabvm": {
- "title": "Abot (ari-bot) bot on CollabVM",
- "content": "Abot is a bot created by me because why not,\nthe source code: \n\nPrefix is just a mention of it, for example:\n`@ari-bot die`\n\nCommands:\n\n* `hi` -- Says hello back to the user\n* `log ` -- Logs a user (or you) in or out, needs an auth key\n* `getkey` -- Gets the auth key and prints serverside\n* `whoami` -- Prints your username\n* `die` -- Makes the bot exit\n* `savecfg` -- Saves the config\n* `note ` -- Make a note\n* `get ` -- Print a note\n* `del ` -- Delete a note\n* `notes` -- Get a list of notes\n* `ignore ` -- Ignore a user\n* `acknowledge ` -- Ignore a user\n* `ignored` -- Get ignored users\n* `insult ` -- Insults a specified or current user\n* `revokey` -- Revokes current auth key\n* `alias ` -- Alias a command to a command\n* `unalias ` -- Unalias alias alias\n* `aliases` -- List all aliases\n* `report ` -- Reports a user to admins (requires a discord webhook url in `report-webhook-url` config option)\n* `sendkey` -- Sends a key to a discord channel (requires a discord webhook url in `authkey-webhook-url` config option)\n* `chatlog` -- Sends current chatlog\n* `dumplog` -- Dumps current chatlog\n* `say ` -- Says whatever you tell it to say\n* `searchnote ` -- Searches for a note\n* `searchalias ` -- Searches for an alias\n* `impersonator ` -- Marks a user as an impersonator\n* `notimpersonator ` -- Marks a user as not an impersonator\n* `turn` -- Takes turn\n* `keys ` -- Types a key combo (see **Key Combos** section)\n* `endturn` -- Ends turn\n* `skeys` -- Lists saved key combos\n* `skey ` -- Save a key combo\n* `ikey ` -- Invoke a saved combo\n* `reloadcfg` -- Reload config\n* `dkey ` -- Delete a saved combo\n\n# Key Combos\n\nKey combos are special syntactical strings which can be understood\nby abot and interpreted as key presses, the syntax is as follows:\n\n* `^` -- Presses `CTRL` + `char` and then releases `CTRL` (e.g. `^c`)\n\n* `\\` -- Types an escapable character (e.g. `\\n`)\n * `n` -- Enter\n * `e` -- Escape\n * `c` -- Control\n * `a` -- Alt\n * `b` -- Backspace\n * `w` -- Windows key\n * `)` -- Literal `)`\n * `s` -- Shift\n * `t` -- Tab\n * `l` -- Num lock\n\n* `~` -- Presses an arrow key (e.g. `~l`)\n * `l` -- Left\n * `u` -- Up\n * `r` -- Right\n * `d` -- Dowb\n\n* `[]` -- Presses `F` key (e.g. `[2]`)\n\n* `()` -- Writes literal ascii values (e.g. `(\\Hello world!)`)\n\n* `!` -- Releases an escapable character (e.g. `!n`)\n\n* Repeats\n * `{}` -- Repeat last action for `` times (e.g. `H{2}`)\n * `{:}` -- Repeat last `` actions for `` times (e.g. `Hello{2:1}`)\n\n* `|` -- Press and release an escapable character (e.g. `|n`)\n\n* Anything else is just `()`\n\n* Keycodes\n * `` -- Press a key with specified keycode (on state)\n * `` -- Press a key with specified keycode (specified state)\n\n* `@;` -- Trigger\/inline a combo\n\n# Few fun things\n\n* If you say \"Im \\\", \"I'm \\\" or \"I am \\\"\n it'll answer with \"Hi \\, I'm \\ :)\"\n* If you say the only the set owners name it'll answer with\n \"@user smh whattttttttttttt\"\n* If you mention the bot with no content it'll answer with\n \"@\\ Huh? What do you want lol\"\n* If you you say that you're the bot (refer to #1) or the owner\n when you're actually not it'll doubt you\n* It responds to Mr. Ware bot's \"@Emperor Palpatine is not the senate. Trust me.\"\n message with \"Yes he is >:(\"\n",
- "time": 1657249216.563755,
- "keywords": "collabvm computernewb cvm bot python"
- },
- "-a\u0161-u\u017e-tradicin\u0119-\u0161eim\u0105--movement-in-lithuania": {
- "title": "\"A\u0161 u\u017e tradicin\u0119 \u0161eim\u0105\" movement in Lithuania",
- "content": "I forgot that this \"movement\" existed but I remembered it as I was talking\nto a person about it and I just wanted to say few words about them\n\n\"A\u0161 u\u017e tradicin\u0119 \u0161eim\u0105\" (\"I support traditional (straight) family\") \"movement\"\nin Lithuania is some anti-lgbt \"movement\" in Lithuania to basically erase?\ndelete? LGBT people, idfk what's their goal but still\n\nThat group thinks they're doing much difference and are acting very opressed\nbecause ??they're straight?? but in all reality they're just a cringe group\nof facebook karens who think LGBT people are ruining Lithuania as LGBT people\nare making some progress in getting more rights in Lithuania\n\nMy mother is a part of this \"movement\" so to say, it's extremely cringe, she's\nnot going to protests and shit but she's still doing cringe ass shit on facebook\nand stuff, talking shit about gay people IRL too\n\nThey're calling being LGBT \"stealing of kids\" as apperantly being LGBT makes you\ninfertile or something and even then if we don't involve LGBT people they're saying\nthat norwegians are stealing kids as it's a happier place or smt\n\nIn Lithuania gay marriage is still illegal as family is defined the same in\nconstitution\n\nArticle 38 of the Lithuanian constitution defines family as the unity between\nman a woman, both parents have the same rights and their right and duty is to\neducate, nurture good Lithuanians, the kids' duty is to respect and care for\ntheir parents and preserve their legacy:\n\n> \u0160eima yra visuomen\u0117s ir valstyb\u0117s pagrindas.\n> Valstyb\u0117 saugo ir globoja \u0161eim\u0105, motinyst\u0119, t\u0117vyst\u0119 ir vaikyst\u0119.\n> Santuoka sudaroma laisvu vyro ir moters sutarimu.\n> Valstyb\u0117 registruoja santuok\u0105, gimim\u0105 ir mirt\u012f. Valstyb\u0117 pripa\u017e\u012fsta\n> ir ba\u017enytin\u0119 santuokos registracij\u0105.\n> Sutuoktini\u0173 teis\u0117s \u0161eimoje lygios.\n> T\u0117v\u0173 teis\u0117 ir pareiga \u2013 aukl\u0117ti savo vaikus dorais \u017emon\u0117mis ir i\u0161tikimais\n> pilie\u010diais, iki pilnametyst\u0117s juos i\u0161laikyti.\n> Vaik\u0173 pareiga \u2013 gerbti t\u0117vus, globoti juos senatv\u0117je ir tausoti j\u0173 palikim\u0105.\n\nBasically meaning gay marriage is not accepted as valid neither legally nor biblically\nin Lithuania until.. well it changes\n\nEven though a lot of time has passed since the only family is straight and there are\nmany lgbt families in Lithuania in some way but Lithuania is still sticking to old\ndefinition of family and not going to change any time soon probably which is disapointing\n\nThis brings me to think, if they're complaining so much about immigration so much\nwhy don't they make Lithuania a better place to live? Wouldn't they make LGBT people\nmore accepted, even though this would save not a huge ammount of people but it'd probably\nstill be _something_ at least I guess, why don't we first climb the human rights ranking\nand then expect some results instead of screaming how people are immigrating to other\ncounties like Norway and say \"They're stealing children from Lithuania\", first\nmake those children feel accepted in the country, then complain.\n\nAnyway, quite disapointing how \"movements\" such as this exist and then complain about\nhow Lithuania is shrinking, goddamn, why did I have to be born in Lithuania lmao,\nbut at least better than some other countries ig?\n",
- "time": 1657566470.039474,
- "keywords": "lithuania lietuva family norway constitution lgbt gay marriage tradition"
- },
- "modernism": {
- "title": "Modernism",
- "content": "This blog talks about software modernism, not the art form,\nif you were expecting for me to talk about art, wrong blog\n\nModernism sucks.\n\nThe word these days doesn't even mean \"using new technology\" or\nsomething, it's just used as an excuse to be bloated, \"Look guys, it's\nmodern, it doesn't matter that my hello world in rust is 500 TB111!!11!!1!\"\n\nIt's not only rust language that uses that excuse, it's many many more\npieces of software and programming languages using \"modern\" as to indicate\n\"I'm fucking bloated, don't use me\"\n\nI don't understand, why are people ***so*** obsessed with modernism,\nI mean if you want to have no space as in ram, drive usage and cpu go\nfor it, make your system all \"modern\", \"lightweight\", \"customisable\" and\n\"blazingly fast\", we'll see how you'll enjoy your slow ass system and won't\nbe actually able to do anything with it, or even if you have milions of dollars\ninvested in your supercomputer, do you really want to waste space and resources\non nothing, just because it screams \"MODERNNNNNNNNNnnnnnNNNNNNNnNNNNNnnnNNNNnnnNNNNNNNN!11\"\nat you, it's extremely sad where it's going, people screaming \"modernism is the\nfuture\", \"your C won't survive\" and shit is just cringe to hear, sadly can't\ndo anything about it as there's less and less people willingly using C, C++,\nassembly and so called \"old languages\", even though they're much smaller\nanf faster\n\nLet me take rust as an example again, rust claims to be modern, cool, whatever,\nwe all understand and know that rust is bloated just from writting our first lines\nof code and coming out with a 400 KB binary when we only got an empty `main()`,\nthen you look at its other claims, \"just as fast as C\", even though it clearly\nisn't and cannot be because of its poking of the program at runtime, the way it\nforces you to use crated for any minor thing isn't helping either, how you're fighting\nthe compiler to do anything just makes you write large code, which in turn generates\na bunch of code, which in turn makes your program slow, you're constantly in a fight\nwith rust compiler if you want to do anything, constant bloat gathering, constant\nscreaming at people how rust is great and modern, modern is just bloated, nothing\ngood about modernism besides that we have more choices in which we can bloat up our programs\n\nBut modernism isn't all shit, modern algorithms are fast, modern art is nice, modern\nhardware is powerful, I'm just talking about software, software modernism is complete\nbullshit and you can't change my mind, it's all bad, there's nothing good about modern\nsoftware, only things we might discover making modern software (example being\n[fast inverse square root algorithm](https:\/\/en.wikipedia.org\/wiki\/Fast_inverse_square_root))\nare good, but software itself is trash\n\nI really got nothing else to say about modernism without repeating myself, modernism\nsucks, *software* modernism sucks specifically, nothing good about it, only stuff\nwe discover from it is good, but software itself is a slow, bloated, huge and heavy\npiece of garbage, stop using modernism as an excuse, thank you :)\n\nAlso, this blog will probably again be roasted by a couple of hundred of rust users on\nreddit or smt, I give 0 shits about your runtime, LLVM and speed, gonna say it's \"modern\"\nagain? Lol..\n\nAnyway, thanks for listening to another one of my rants, I just have this opinion on modernism,\nhave a nice rest of your day :)\n",
- "time": 1659291567.343559,
- "keywords": "rust rustlang modern modernism software software-modernism bloated bloat llvm algorithms programming code coding"
- },
- "i-m-leaving-collabvm": {
- "title": "I'm leaving CollabVM",
- "content": "Ye, that's about it, I'm leaving the CollabVM community for good\n\nI'm the most annoying person there, I can't with myself on there lol,\nI'm going to keep the stuff I made for CollabVM up, but I won't be\nparticipating in the community at all\n\nI'm sorry, but CollabVM is not for me :), I'm too much of what CollabVM\nusers call a \"sperg\" imo, I think it's best if I just leave and\nnot bother people on there\n",
- "time": 1659477340.20285,
- "keywords": "collabvm cvm computernewb"
- },
- "discord-is-a-pure-shithole--shitcord": {
- "title": "Discord is a pure shithole, shitcord",
- "content": "Discord is a pure shithole imho\n\nI got many issues with both the discord client,\nweb app and generally discord, first up, discord's\ninterface is not customisable, it's shit, both discord\nclient and the application are bloated, both are under\n\"all rights reserved\" licenses, meaning for people who\nwant no proprietary stuff on their system installed\n(like me) this is complete and utter bullshit\n\nBut then you say \"just make your own!\", funny thing\nthat you say that because I want to do that, but shitcord\nbeing the shittiest pedo-filled platform out there is\njust like\n[HAHA fuck you! Out API is only for OUR shitcord purposes!](https:\/\/teddit.net\/r\/discordapp\/comments\/9zkmj3\/open_source_discord_client_and_the_tos\/)\n\nDiscord is genuinely garbage, I wish I could use it\nlike I use telegram, a much better platform, sadly\nshitcord will stay shitcord, not care about its users,\nwill keep making much money and normies, being 99.5% of\nthe world will continue using it, meaning I also have\nto use it, sadface\n\nEven though probably nobody working at shitcord is reading\nmy blog, just... Fuck this application, it's horrible. Fuck\nyou, discord together with your\n[\"discord loves open source\" lies](https:\/\/discord.com\/open-source).\n",
- "time": 1659995491.751807,
- "keywords": "discord shitcord open-source shithole discard fucking piece of shit cord proprietary"
- },
- "experiments": {
- "title": "Experiments",
- "content": "Hello world,\n\nI'm looking at bandwidth usage and it's quite interesting,\na lot of my bandwidth comes from the legacy blog, as of\nthis month currently, uses up exactly\n29.347826086956523% of the bandwidth\n\nI might experiment more with the updated sites to see\nwhy that is the case, right now, the main blog will not\nhave content blocking features, that is JavaScript blocking\n\nI modified netlify.toml to have CSP of just as *upgrade-insecure-requests*\nrather than *upgrade-insecure-requests; sandbox; script-src 'sha512-v'; object-src 'none';*\n\nWe will see how this will affect the statistics for next\nmonth, and just to answer your question, no, I am not tracking\nindividual users nor am I collecting any statistics,\nnetlify only shows me the bandwidth and using some basic math\nI can calculate the okay accuracy statistics kinda, nothing\n*too* much, but stuff like avg. Visits for example\n\nAnyway, if anyone is unhappy with this change you can just\n[email me](mailto:ari.web.xyz@gmail.com), [leave an issue under the git repo](\/git) or [leave a comment in the users CaO](https:\/\/user.ari-web.xyz\/)\n\nAnyway, thank you people for staying with me, hope\nari-web continues to grow as both a personal portfolio\nand just a fun site :)\n\nHave a nice rest of your day :D\n",
- "time": 1660011105.242618,
- "keywords": "statistics javascript math bandwidth netlify"
- },
- "simplicity-is-not-ease": {
- "title": "Simplicity is not ease",
- "content": "People always seem to disagree with me when I say that \"simple != easy\",\nhere's a blog to explain the difference between simple and easy,\nwell at least when it comes to programming\n\nSo, let's take python and x86_64 Linux FASM Assembly as easy and simple examples\n\nPython is easy, we can all agree on this:\n\n print(\"Hello world\")\n\nThis will print \"Hello world\", seems simple right? Yeah no. Python does a lot\nmore than this under the hood, it calls loads of syscalls just for that\nprogram alone:\n\n ari@ari-gentoo ~ % strace python3 hello_world.py 2>&1 | wc -l\n 754\n\nAnd these are only the syscalls, imagine the control flow, there are probably\nmany jumps, complicated loops and generally, if we theoretically generated a CFG\nfor python it'd probably be huge and extremely complicated, this is the reason\nwhy it's **_not simple_**, in logic it does much more than we tell it to,\npython isn't explicit so it makes it very **_easy_** to write\n\nNow, let's write the same program in x86_64 Linux FASM Assembly:\n\n format ELF64 executable 3\n segment readable executable\n\n _start:\n mov rax, 1\n mov rdi, 1\n mov rsi, hello\n mov rdx, hello_len\n syscall\n\n mov rax, 60\n mov rdi, 0\n syscall\n\n segment readable\n hello: db \"Hello world\", 10\n hello_len = $ - hello\n\nNow this is where the fight would begin after I mention \"easy != simple\",\nbecause they have an opinion of \"Less code = simple\", this code is **_simple_**\nbelieve me or not, this code is just **_not easy_**, for a average virgin JavaScript\nor some high-level language developer this code seems overly complicated and\nthey call this code \"Not simple\", when it actually is very simple, it's just\nagain, as I mentioned, not easy.\n\nSo if we compile it and run this binary:\n\n ari@ari-gentoo ~ % fasm hello_world.asm\n flat assembler version 1.73.30 (16384 kilobytes memory, x64)\n 3 passes, 234 bytes.\n\n ari@ari-gentoo ~ % strace .\/hello_world 2>&1 | wc -l\n 5\n\nSee how much simpler this is, it's only 5 lines of strace output and it's\nactually faster because of the simplicity of this program\n\nPython takes `0:00.05` seconds where as assembly takes `0:00.00` seconds,\nsimplicity not only improves the performance, it improves how much\nyour program needs in resources, python does much much more meaning it needs\na lot more memory, CPU and storage to run\n\nSo basically, simplicity is not ease, ease is what you do and simplicity\nis what your program does, easy as that, hopefully I clarified what I mean\nby \"Simple != easy\" and hopefully I won't need to explain it again :)\n\nHave a nice rest of your day and I hope you now understand what is the difference\nbetween easy and simple :D\n",
- "time": 1660085936.90138,
- "keywords": "simple easy kiss assembly python linux ease simplicity code programming"
- },
- "stop-trying-to-replace-c--": {
- "title": "Stop trying to replace C++",
- "content": "C++ is not going anywhere, nor is PHP or any well-established language\nyou might consider them \"bad\" or \"unsafe\" or whatever, but you trying to replace\nthem is a ridiculous\n\nThere seems to be like 89198712 languages popping up every day claiming\nto replace C++, people trying to replace PHP has stopped so now\nwe're in a C++ replacement war\n\nRust especially, it claims to replace C++, be better than C++, whatever,\nclaims to even be ***faster*** than C++, when it's not, rust is much larger\nand slower\n\nCarbon isn't any better either, it's another bloated language which\nclaims to replace C++, it's just not happening, why do you have to do\nthis, but can't say too much as I don't have much knowledge about carbon\nas of now, maybe it'll be at least better in a way that its community\nis not 99% narcissistic, toxic children and maybe it'll be a bit faster\n\nSo basically, C++ is not going anywhere, you won't replace it however\nmuch you try, I doubt even google will manage to replace it, but as google\nhas a good reputation of maintaining and popularizing open source languages\nlike dart and go, maybe it'll take off, but for now it just seems like\na slightly and I mean ***slightly*** better rust\n\nWhat next lol, but anyway, have a nice rest of your day and please don't\ncreate another language that claims to be faster than C++ and is a replacement\nfor C++ while you're at it, cya :)\n",
- "time": 1660088804.234317,
- "keywords": "C++ carbon rust rustlang toxic chidlren wars programming code google"
- },
- "repl-it-billing-documentation-slightly-improved": {
- "title": "Repl.it billing documentation slightly improved",
- "content": "[Repl.it docs](https:\/\/docs.replit.com) are a bit unclear with its pricing docs,\nso here you go, some clearified docs:\n\n## Before we start\n\nThis page is **not complete**, help the community by [commenting](\/c)\nthe info that is missing and I will make sure to add it\nto this blog, thanks :)\n\n## Links\n\n- Replit: \n- Replit docs: \n- Replit forums: \n\n## Limits ()\n\n[Hard limits] are limits you **cannot** exceed where as\n[Soft limits] are limits you **can** exceed\n\nThis is a list of such limits, this is the format:\n[hard\/soft] what: limit (minimum (free plan))\n\nThe hard\/soft is just _how_ is it limited (explained above),\nwhat is the resource being limited, minimum is the minimum\nof the resource you get\n\n- [**hard**] CPU per REPL: By plan (0.2-0.5 vCPUs)\n- [**hard**] RAM per REPL: By plan (1024MB)\n- [**hard**] Concurrent REPLs: 20\n- [**hard**] Storage per REPL: 1GB\n- [*soft*] Storage per account: determined by plan (500MB)\n- [*soft*] Network bandwidth: (unsure) unlimited\n\n## What happens once you exceed soft limits?\n\nNothing, if replit notices you're using a whole bunch of\nsoftly limited resources (e.g. bandwidth) you _might_ get\nIP banned, although I'm not sure\n\n## What happens once you exceed hard limits?\n\nOnce you exceed...\n\n- CPU and\/or RAM the REPL will crash\n\n* The given REPL storage following things will happen:\n - The REPL _will not_ start\n - The REPL _will_ display 2 modals:\n - In the background: \"Space jam\" as a joke\n - In the foreground telling you that the REPL is having trouble\n\n- The concurrent REPLs limit (i.e. running multiple REPLs at the same time)\n you won't be able to start any more REPLs\n\n## Resources per namespace\n\nWhat I mean by 'resources per namespace' is that\nwhat counts in the limit, like if I said '100GB\/Account'\nit'd mean you get 100GB per whole account lifetime and\nper all REPLs, where as if I said '100GB\/Month' it'd mean\nthat you cannot go over 100GB of bandwidth a month on all\nREPLs, basically '100GB\/Month\/Account' (100GB per month per account)\n\n- CPU\/REPL\n- RAM\/REPL\n- REPL storage\/REPL\n- Account storage\/Account\n- Concurrent Repls\/Account\n- Network bandwidth\/\\*\n\n## 24\/7 Hosting\n\nIf you host any application 24\/7 it won't upgrade your plan\nor charge you any extra, but if your REPL is not 'always up'\nyou will have to use things like to keep\nthem up, these services might cost, although \ndoes not\n\nBut beware, with replit there is no such thing as true 24\/7,\nall REPLs reboot after 24 hours, so if your REPL is critical\nit's better to upgrade your plan\n\nMore on this see \n\n## Resources and sources\n\n- \n- \n- \n- \n- \n- \n- \n- \n",
- "time": 1660606047.070011,
- "keywords": "repl replit repl.it pricing billing docs documentation clearify forums comment resources"
- },
- "how-to-manually-install-alpine-linux-on-any-linux-distribution": {
- "title": "How to manually install alpine Linux on any Linux distribution",
- "content": "## Assuming\n\n- Our drive is `\/dev\/sda`\n- The target alpine version is `3.16.2`\n- We have networking\n- Your timezone is `Europe\/Vilnius`\n\nYou can easily change these factors when you\nnotice them, for example in the alpine rootfs\nyou can always change the version, or in timezone,\nwell time timezone, the drive whenever it comes up,\nthough networking is needed here\n\n## Installation (pt. 1)\n\n- Download any ISO and boot it\n- Setup your network\n- Change to root user: sudo su\n- Partition the drive using `cfdisk` gpt\n - 300MB efi\/boot partition {.t = \"EFI System\"}\n - 4GB swap partition {.t = \"Linux swap\"}\n - Rest of the drive for root {.t = \"Linux filesystem\"}\n - Then\n - write -> yes -> quit\n- Format the partitions\n - Boot: `mkfs.vfat -F32 \/dev\/sda1`\n - Swap: `mkswap \/dev\/sda2 && swapon \/dev\/sda2`\n - Root: `mkfs.ext4 \/dev\/sda3`\n\n## Installation (pt. 2)\n\n### Mount root\n\n```\nmkdir -p \/mnt\/alpine\nmount \/dev\/sda3 \/mnt\/alpine\n```\n\n### Mount boot\n\n```\nmkdir -p \/mnt\/alpine\/boot\nmount \/dev\/sda1 \/mnt\/alpine\/boot\n```\n\n### Download an extract the RootFS\n\n```\ncd \/mnt\/alpine\nwget https:\/\/dl-cdn.alpinelinux.org\/alpine\/v3.16\/releases\/x86_64\/alpine-minirootfs-3.16.2-x86_64.tar.gz\ntar xpvf alpine-minirootfs-3.16.2-x86_64.tar.gz --xattrs-include='*.*' --numeric-owner\n```\n\n### FSTAB generation\n\n- Genfstab\n\n```\nwget https:\/\/raw.githubusercontent.com\/cemkeylan\/genfstab\/master\/genfstab\nsh genfstab -U \/mnt\/alpine >>\/mnt\/alpine\/etc\/fstab\ncat \/mnt\/alpine\/etc\/fstab\n```\n\n- If `\/dev\/sda2` does not appear\n\n```\necho \"$(blkid \/dev\/sda2 | awk '{print $2}' | sed 's\/\"\/\/g') none swap sw 0 0\" >>\/mnt\/alpine\/etc\/fstab\n```\n\n### Mount the needed fake filesystems\n\n```\nmount --types proc \/proc \/mnt\/alpine\/proc\nmount --rbind \/sys \/mnt\/alpine\/sys\nmount --make-rslave \/mnt\/alpine\/sys\nmount --rbind \/dev \/mnt\/alpine\/dev\nmount --make-rslave \/mnt\/alpine\/dev\nmount --bind \/run \/mnt\/alpine\/run\nmount --make-slave \/mnt\/alpine\/run\n```\n\n### Copy host's resolv.conf to the chroot environment\n\n```\ncp \/etc\/resolv.conf \/mnt\/alpine\/etc\/resolv.conf\n```\n\n### Chroot\n\n```\nchroot \/mnt\/alpine \/bin\/ash\n```\n\n### Setup PATH\n\n```\nexport PATH='\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin'\n```\n\n### Update and install setup scripts\n\n```\napk update\napk add alpine-conf openrc --no-cache\n```\n\n## Installation (pt. 3)\n\nIf you see any errors regarding rc-service, rc-update,\netc. ignore them\n\nThis part is based off \n\n### Setup keymap\n\n```\nsetup-keymap us us # This will use the US keyboard\n```\n\n### Setup hostname\n\n```\nexport HOSTNAME='alpine'\nsetup-hostname \"$HOSTNAME\" # Hostname will be alpine\n```\n\n### Setup hosts file\n\n```\ntee \/etc\/hosts <\n\n### Timezone\n\n```\napk add tzdata\nexport _TZ='Europe\/Vilnius'\ninstall -Dm 0644 \"\/usr\/share\/zoneinfo\/$_TZ\" \"\/etc\/zoneinfo\/$_TZ\"\nexport TZ=\"$_TZ\"\necho \"export TZ='$TZ'\" >> \/etc\/profile.d\/timezone.sh\n```\n\n### Root password\n\n```\npasswd\n```\n\n### Networking tools\n\n```\napk add dhcp wpa_supplicant\n```\n\n### Bootloader (GRUB) and kernel\n\n- Packages\n\n```\napk add grub grub-efi efibootmgr linux-lts\n```\n\n- Firmware (README: )\n\n```\napk add linux-firmware\n```\n\n- Bootloader\n\n```\ngrub-install --target=x86_64-efi --efi-directory=\/boot --bootloader-id=ALPINE\ngrub-mkconfig -o \/boot\/grub\/grub.cfg\n```\n\n### Enable vital services\n\n```\nrc-update add hostname boot\nrc-update add devfs sysinit\nrc-update add cgroups sysinit\nrc-update add bootmisc boot\nrc-update add binfmt boot\nrc-update add fsck boot\nrc-update add urandom boot\nrc-update add root boot\nrc-update add procfs boot\nrc-update add swap boot\nrc-update add sysfs sysinit\nrc-update add localmount boot\nrc-update add sysctl boot\n```\n\n### Make grub use a menu\n\n```\ntee -a \/etc\/default\/grub < float:\n return math.cos((((c + 273.15) + c + ((c * (9\/5) + 32))) \/ 3) + math.pi) + math.e\n\nWhere argument c is temperature in Celcius, this function\nwill give you the most accurate results it can in python, in\nthis system you must specify at least 6 digits of precision\n\nSome basic examples:\n\n- 100 Celcius, the boiling point of water: 3.2975788083579793 \u00b0T\n- 0 Celcius, the freezing point of water: 2.3426350414279824 \u00b0T\n- 17 Celcius, the current temperature for me: 3.4648639877740215 \u00b0T\n\n## How does this shit work?\n\nIt takes the average of most major temperature units --\nKelvin, Celcius and Fahrenheit, then it adds pi to it and consines\nthe result, after that it adds e and boom we got degrees torture,\nfairly simple\n\nAnyway, now enjoy this amazing system of temperature, if you get\nhotter than 3.0975306904597475 \u00b0T make sure to take a rest from\nthis\n\nGoodbye :)\n",
- "time": 1662136726.077347,
- "keywords": "torture degrees celcius fahrenheight kelvin hot cold temp temperature-system"
- },
- "homework---ish-have-to-present-some-stuff-about-my-projects-and-things": {
- "title": "HOMEWORK: -ish Have to present some stuff about my projects and things",
- "content": "## Projects\n\nDon't ask me about the names, ari-web came from how I name my hostnames\nwhile using Linux distros like ari- so it only makes sense that\nari-web would be for my website ig, other names I just made up ig, I really\nhave 0 clue what they mean but yeah, also I only created my GitHub account\nin 2020\/09\/10, meaning I have not released too much, usually my projects used\nto be smaller scale, the most I did was share them on discord or something,\nbut also there's the issue that I have deleted over 50 of them from github\nbecause they're.. Very useless\n\n- Ari-web things\n - [Main page](https:\/\/ari-web.xyz\/) -- The actual main page, source code: \n - [Blog](https:\/\/blog.ari-web.xyz\/) -- My.. Blog ig lol, but actually is managed and built unlike the legacy counterpart, source code: \n - [Legacy blog](https:\/\/legacy.blog.ari-web.xyz\/)-- Why do people even read this, I have not updated it in like half a year, source code: \n - [Comments and opinions](https:\/\/user.ari-web.xyz\/) -- Literally just a static page using uterances for people to comment stuff on rather than flooding me with github issues, source code: (nothing interesting)\n - [School stuff](https:\/\/school.ari-web.xyz) -- Very bad and cringe, also not foss\n - [(Mainly personal) File hosting](https:\/\/files.ari-web.xyz\/) -- A place where I upload files because using conventional file uploading services like filebin is annoying because they have like an md5 hash as their file id, src: \n - [Three](https:\/\/3.ari-web.xyz\/) -- Yeah, just 3 :) src: \n- My dotfiles: \n- My [Gentoo Linux](https:\/\/gentoo.org\/) overlay: \n- A quite simple sudo alternative for _purely_ Linux (bc I suck and I don't use BSD yet, will be painful to port but eh, we'll see (yes I actually use it)) written in C++: \n- A TUI telegram client people seem to love but like it's not working with any modern features because I have not worked on it properly in like 9 months: \n- Yafetch's fork, same name, just a completely reworked build system and I do active porting to newer lua versions: \n- A bot I made for CollabVM when I was actually active on it, just a simple websocket client ig, just specifically for CollabVM: \n- I needed a GNU BASH plugin manager which doesn't take 3 hours to start up and load all the plugins so I made my own, actually I do that often, whenever I can't find proper software that fits me, I just make my own: \n- Youtube CLI client I guess, some people seem to like it, although it's quite meh, there are many better alternatives, I still use it from time to time: \n- A purely POSIX sh functional daemon manager on top of SysVinit: \n- Some tools I use for generating passwords, validating them, etc. I like my passwords strong: \n- Licence manager, quite useful, purely POSIX sh, I find using it quite a lot because I really don't want to go manually find and fill in licence templates: \n- SearX meta-search-engine CLI, as you can tell I really like CLI tools, my terminal is my literal life, I use it sometimes too i guess: \n- A simple package manager for the R programming language: \n- Make projects from templates, I use it as often as I use lmgr, because I hate doing things manually if I can easily automate it: https:\/\/ari-web.xyz\/gh\/mkproj\n- Random\n - A fork of vimbuddy script to make it cuter ig: \n - A fork of google's codefm for vim which has many more formatters and a less complicated contribution system: \n - My go at some of the coreutils, I barely work on it though: \n - A bar script for DWM window manager: \n - My build of the Linux kernel: \n - A build of DWM for the EndeavourOS GNU\/Linux distribution made by me: \n - The coffee theme organization: \n\nPlus a bunch others, some private, some unreleased, some just too small to share lol, some just have\nbad code, actually some of that bad code is intentional, so like I got obsessed with stack based languages\nand I got 2 attempts at making 2:\n\n- [Rys](https:\/\/ari-web.xyz\/gh\/rys)\n- [Fa](https:\/\/ari-web.xyz\/gh\/fa)\n\nAll of them use python as a bootstrap and had a plan to self-host, Rys is just dead although Fa I'm pretty\nsure is turing complete, also I think it's possible to self-host it, I'm just too lazy to do so, also too\nlazy to prove its turing compleeness, the reason why the code is bad is because I literally did not try,\n'It's just a stupid script to what will disappear after some time' I thought, although Fa is def\nnot a fully dead project lol\n\nKay, so besides those, ari-web also has pages ig, like I don't think I can consider\nthem projects but yk, it's all in the main page kinda, actually a lot of it is indexed\nat although I'd suggest not visiting it if you like\nhaving eyes\n\n## Tools\n\nI am a Linux user as of now, I usually work with Linux, although I try to be as friendly\nas possible towards other \\*NIX-like operating systems, examples being BSD and MacOS,\nmainly BSD though as I myself got plans for 2023 to switch to it, Linux is getting too\nmainstream and large for my taste, although most likely I will still be using Linux\nis some form or another\n\nMy code editor is [ViM](https:\/\/www.vim.org\/), a lightweight TUI code editor which is really extensible, vim\nis extremely fast and also has a very powerful plugin system using various languages (even compiled ones)\nbounded together by VimScript, there is another project called [NeoVim](https:\/\/neovim.io\/) which tries to improve\nmore things on it because vim is an extremely old project which is basically controlled by one person,\nalthough still many people contribute, NeoVim is more speed and community focused, although I prefer ViM\nbecause I don't need the extra features and improvements nvim brings with it\n\nMy main interpreted language is Python, a very powerful, abstract high level programming language,\nalso quite powerful with its ability to load C and C++ extensions for lower level access, its API\nis fairly simple, you just work with basic PyObjects\n\nMy main compiled languages are C and C++, as I'm not a huge fan of OOP and I barely find use\nfor it, I mainly use C++ for its type system and namespaces, I also like C, a very simple\nand small programming language with low level access to the point of assembly, one thing which\nI don't really like about C is that you basically work with raw pointers all the time, C++\nmakes it less of a pain in my opinion\n\nFor configuration languages I prefer JSON, JSONC or DOSINI, all of them have their own uses,\nbut one works better than others in certain cases, JSON works well for basic config with\nmultiple types, JSONC works better for bigger and more complex configuration and DOSINI\npretty much works on anything that uses repositories or needs a basic header-key-value\nconfig, like `{\"header\": {\"key\": \"value\"}}` is a much more painful syntax than just\n\n [header]\n key = value\n\nAlso we cannot live without scripts, they help up automate repetitive tasks like building\na C++ binary with a whole bunch of flags, Makefiles are cool, but quite painful, also I use 4 spaces\nrather than tabs (yes ik so controversial smh how dare I wasted space blah blah blah) and Makefiles\nforce you to use tabs, which is extremely annoying, so I just resort to using POSIX sh and in very\nvery very rare cases where I need to use more special features I use BASH\n\nMy web stack for frontend is mainly (S)CSS, JS and HTML, although I like TS more, usually\nI'm just too lazy to set it up and end up running into countless bugs just because of people's beloved\nJavaScript (+ other million languages that have 'Java' in their name but have nothing in common with java),\nSCSS is also not a rare thing for me to use, it just requires some transpiling and you get way more features\nthan in CSS, I mainly use it in styles that require me to use a central configuration file or I just need\nthose extra features, for backend I usually use python with the flask web framework and jinja templating\nengine, if I need it also an SQLite3 database using SQLAlchemy because we all know how amazing, enjoyable and secure\nit is to write raw SQL queries <3333, this is a joke for the ones that don't get sarcasm\n\nThe languages I mentioned is not all I know, I have tried many languages, some of them liked,\nsome of them meh, same with knowledge of them, some of them I know better than others,\nfor example racket, scheme. haskell, lua, ruby, chicken, etc. and languages I really didn't\ninclude and which didn't fit like markdown, roff, etc. (which are not *programming* languages)\nI still use them\n\nAnd finally some random things I use can be found on \n\nThank you for listening to my presentation about this,\nhave a nice rest of your day\n",
- "time": 1662643265.490569,
- "keywords": ""
- },
- "sorry-for-deleting-some-blog-posts": {
- "title": "Sorry for deleting some blog posts",
- "content": "So basically, some people that know me IRL will see this blog most likely,\nI have not even hidden them, I just straight up deleted some of the blogs,\nsorry about it if it bothers you :thumbs_up:\n",
- "time": 1662644210.102135,
- "keywords": "sorry blog-deletion delete remove post"
- },
- "my-music-artist-recommendations": {
- "title": "My music artist recommendations",
- "content": "First up, none of these people payed me or anything\nI just like their music and that's all :)\n\nThis list is in no way ordered so yeah, this is just\nan unordered list of people who make good music\n\n\n- Clairo\n - Song recommendations\n - Clairo - Bags\n - Clairo - I Wouldn't Ask You\n - Clairo - Sofia\n - Website: \n- Crawlers\n - Song recommendations\n - CRAWLERS - Fuck Me (I Didn\u2019t Know How To Say)\n - CRAWLERS - Hush\n - CRAWLERS - I Don't Want It\n - CRAWLERS - Placebo\n - Website: \n- Conan Gray\n - Song recommendations\n - Conan Gray - Heather\n - Conan Gray - Memories\n - Conan Gray - Wish You Were Sober\n - Website: \n- Fazerdaze\n - Song recommendations\n - Fazerdaze - Lucky Girl\n - Fazerdaze - Misread\n - Fazerdaze - Come Apart\n - Website: \n- Girl in red\n - Song recommendations\n - girl in red - i'll die anyway.\n - girl in red & beabadoobee - eleanor and park\n - girl in red - .\n - girl in red - midnight love\n - girl in red - we fell in love in october\n - girl in red - You Stupid Bitch\n - Website: and \n- GIRLI\n - Song recommendations\n - GIRLI - Dysmorphia\n - GIRLI - More Than A Friend\n - GIRLI \u2013 I Don\u2019t Like Myself\n - Website: \n- MOTHICA\n - Song recommendations\n - MOTHICA & emlyn - GOOD FOR HER\n - MOTHICA - BEDTIME STORIES\n - MOTHICA - HIGHLIGHTS\n - Mothica - VICES\n - Mothica - motions\n - Website: \n- Phem\n - Song recommendations\n - phem - watery\n - phem - flowers\n - phem - silly putty\n - Website: and \n- Lana Del Rey\n - Song recommendations\n - Serial Killer - Lana Del Rey\n - Lana Del Rey - Video games\n - Website: \n- Sir Chloe\n - Song recommendations\n - Sir Chloe - Femme Fatale (The Velvet Underground & Nico Cover)\n - Sir Chloe - Mercy\n - Sir Chloe - Sedona\n - Sir Chloe - Squaring Up\n - Website: \n- Troye Sivan\n - Song recommendations\n - Troye Sivan - Rager teenager!\n - Troye Sivan - STUD\n - Troye Sivan - YOUTH\n - Website: \n- VIDEOCLUB\n - Song recommendations\n - VIDEOCLUB - Amour plastique\n - VIDEOCLUB - Euphories\n - Website: \n- R\u00f6yksopp\n - Song recommendations\n - R\u00f6yksopp - I Had This Thing\n - R\u00f6yksopp - Skulls\n - R\u00f6yksopp feat. Robyn - Monument (The Inevitable End Version)\n - Website: and \n\nYou can find more in [YouTube], but these are\nmy favs\n",
- "time": 1663445401.401932,
- "keywords": "phem music youtube girl girl-in-red lgbt playlist music-playlist clairo conan-gray fazerdaze lana-del-rey sir-chloe troye-sivan videoclub royksopp"
- },
- "how-to-fix-contant-freezing-or-disconnecting-of-wpa-supplicant-wifi-on-rtl8821ce": {
- "title": "How to fix contant freezing or disconnecting of wpa_supplicant WiFi on rtl8821ce",
- "content": "## Tl;dr\n\n- Module configuration: `\/etc\/modprobe.d\/rtw.conf`\n\nShould have:\n\n options rtw88_core disable_lps_deep=y\n options rtw88_pci disable_msi=y disable_aspm=y\n\n- Kernel command line\n\nIf you use grub just add `pcie_aspm.policy=performance` to the kernel\ncommand line in `\/etc\/default\/grub`:\n\n GRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=3 init=\/sbin\/openrc-init pcie_aspm.policy=performance\"\n\n- WPA configuration: `\/etc\/wpa_supplicant\/wpa_supplicant.conf` or wherever you keep your `wpa_supplicant.conf` file\n\nShould have:\n\n network={\n ...\n beacon_int=9000\n }\n\n(Append `beacon_int=9000` to your main config)\n\n- Finishing\n\nOnly run this if you use GRUB:\n\n su -c 'grub-mkconfig -o \/boot\/grub\/grub.cfg'\n\nThen no matter what you run:\n\n su -c 'poweroff'\n\nThen wait a couple of minutes (2-5 min) and power your computer on\n\n---\n\nI use the `rtl8821ce` driver for my WiFi and recently I noticed how often\nit begun to disconnect from the internet, wpa would always give me this\noutput:\n\n ...\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n ...\n\nNot sure how much it's related, but might be a sign for you \/shrug\n\nAnyway, I think I found a solution:\n\n## Configure the module\n\nAdd this exact content to `\/etc\/modprobe.d\/rtw.conf`\n\n options rtw88_core disable_lps_deep=y\n options rtw88_pci disable_msi=y disable_aspm=y\n\nYou can call rtw.conf anything you like\n\n## Configure kernel parameters\n\nI don't know how it works on other bootloaders, but basically your kernel\ncommand line should include:\n\n pcie_aspm.policy=performance\n\n### GRUB\n\n- Open `\/etc\/default\/grub` in some editor\n- Find where it says `GRUB_CMDLINE_LINUX_DEFAULT`\n- In that variable, between quotes add `pcie_aspm.policy=performance`\n\nFor example in my config:\n\n GRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=3 init=\/sbin\/openrc-init pcie_aspm.policy=performance\"\n\n## Configure wpa_supplicant\n\nOpen `\/etc\/wpa_supplicant\/wpa_supplicant.conf` or wherever you store your\nwpa_supplicant.conf file and in the main config add:\n\n beacon_int=9000\n\nFor example:\n\n network={\n ssid=\"My-C00l-Wifi\"\n psk=0000000000000000000000000000000000000000000000000000000000000000\n beacon_int=9000\n }\n\nOr\n\n network={\n ssid=\"My-C00l-Wifi\"\n psk=\"9Y-pAs$w0rd123\"\n beacon_int=9000\n }\n\nDepends on how your config is set up, but the only part that really matters\nis:\n\n network={\n ...\n beacon_int=9000\n }\n\n## Finishing\n\nIf you are using GRUB before anything run this:\n\n su -c 'grub-mkconfig -o \/boot\/grub\/grub.cfg'\n\nAnd if not skip this command\n\nAfter, no matter what you use:\n\n su -c 'poweroff'\n\nThen wait a couple of minutes (like between 2 and 5), and then power on your\ncomputer, this should fix the network annoyances\n\n## If your WiFi does not work anymore after this\n\nNot a problem, just revert all the steps in this blog, look for a new solution\nand find out what option is causing it, usually it's the `module` part,\nso try to modify or remove it\n\nAlthough if this does not work and you find a solution comment on\n and share the solution with others\n",
- "time": 1663613948.515744,
- "keywords": "wpa linux wpa_supplicant wifi network kernel fix rtw rtl rtw8821ce rtl8821ce wifi-driver"
- },
- "ari-web-browser-compatibility": {
- "title": "Ari-web browser compatibility",
- "content": "Marking system:\n\n- y -- Fully works with no flaws\n- m -- Very minor flaws, don't affect anything\n- k -- Kinda works, affects slightly medium\n- n -- Does not work at all\n\nAs of 2022\/09\/20 on latest versions of these browsers support\nari-web subdomains in these ways:\n\n- Chromium:\n - www: y\n - files: m [Unimportant header error]\n - blog: y\n - legacy.blog: m [Unimportant header error]\n - school: y\n - user: y\n - 3: y\n- Dillo:\n - www: n [Disabled JavaScript]\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: n [Disabled JavaScript]\n - 3: k [Displays the bare HTML, no counter]\n- Firefox:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Librewolf:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Edge:\n - www: y\n - files: m [Unimportant header error]\n - blog: y\n - legacy.blog: m [Unimportant header error]\n - school: y\n - user: y\n - 3: y\n- Qutebrowser:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Lynx:\n - www: n [Disabled JavaScript]\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: n [Disabled JavaScript]\n - 3: k [Displays the bare HTML, no counter]\n\n---\n\n7 Tests per browser:\n\n- GUI browsers:\n\n - Chromium:\n - Not counting minor: 7\/7\n - Counting minor: 5\/7\n - Dillo:\n - Not counting minor: 4\/7\n - Counting minor: 4\/7\n - Firefox:\n - Not counting minor: 7\/7\n - Counting minor: 7\/7\n - Librewolf:\n - Not counting minor: 7\/7\n - Counting minor: 7\/7\n - Edge:\n - Not counting minor: 5\/7\n - Counting minor: 7\/7\n - Qutebrowser:\n\n - Not counting minor: 7\/7\n - Counting minor: 7\/7\n\n - Total score:\n\n - Without minor: 37\/42 (88.09523809523809%)\n - With minor: 37\/42 (88.09523809523809%)\n - Average: 37\/42 (88.09523809523809%)\n\n - Average score:\n - Without minor: 6.166666666666667\n - With minor: 6.166666666666667\n - Average: 6.166666666666667\n\n- TUI browsers:\n\n - Lynx:\n\n - Not counting minor: 4\/7\n - Counting minor: 4\/7\n\n - Total score:\n\n - Without minor: 4\/7 (57.14285714285714%)\n - With minor: 4\/7 (57.14285714285714%)\n - Average: 4\/7 (57.14285714285714%)\n\n - Average score:\n - Without minor: 4\n - With minor: 4\n - Average: 4\n\n---\n\nConclusion:\n\n- Average total:\n\n - Without minor: 61\/84 (72.61904761904762%)\n - With minor: 61\/84 (72.61904761904762%)\n - Average: 61\/84 (72.61904761904762%)\n\n- Average score:\n - Without minor: 5.083333333333334\n - With minor: 5.083333333333334\n - Average: 5.083333333333334\n",
- "time": 1663636905.053169,
- "keywords": "mark marking average math support browser google chrome chromium firefox"
- },
- "how-to-make-your-own-gentoo-linux-overlay": {
- "title": "How to make your own Gentoo Linux overlay",
- "content": "So before we start, I have my own overlay @ \nand am running it for a while, it was a bit painful for me to\nmake one at the start and to help new Gentoo users I am making this\nblog post, anyway, here's how you do it:\n\n## Step one -- Think of a name\n\nThink of a name you will give your overlay because this information\nwill be needed in later steps\n\n## Step two -- Folder structure\n\nTo start with we need files and folders to work with,\nall names ending with a `\/` are folders and everything\nelse is a file, please make sure to also apply the templates\nin `<...>`, for example `` would be the current year:\n\n .\/\n \u251c\u2500\u2500 LICENSE\n \u251c\u2500\u2500 metadata\/\n \u2502 \u2514\u2500\u2500 layout.conf\n \u251c\u2500\u2500 overlays.xml\n \u251c\u2500\u2500 profiles\/\n \u2502 \u2514\u2500\u2500 repo_name\n \u251c\u2500\u2500 README.md\n \u251c\u2500\u2500 repositories.xml\n \u251c\u2500\u2500 sets\/\n \u251c\u2500\u2500 sets.conf\n \u2514\u2500\u2500 .conf\n\n## Step three -- License\n\nThe `LICENSE` file should have your license, if it doesn't\nalready please pick one, for example on my overlay\nI went for [GPLv3](https:\/\/www.gnu.org\/licenses\/gpl-3.0.en.html), but you can also go for some other\n_open source_ licenses, like GPLv2, WTFPL, BSD 3-clause, etc.\n\nWrite that license to the `LICENSE` file\n\n## Step four -- Master overlays\n\nThis step is always the same, you have to set the master\noverlay in `metadata\/layout.conf` file, the master is usually\ngoing to be `gentoo`, so in `metadata\/layout.conf` add this\ncontent:\n\n masters = gentoo\n\n## Step five -- Overlay index files\n\nOverlay index files are these files:\n\n- `overlays.xml`\n- `repositories.xml`\n\nBoth of these files should have the same content,\nmake sure to fill in the templates that are in SCREAMING_SNAKE_CASE:\n\n \n \n \n \n <\/name>\n <\/description>\n OVERLAY_HOMEPAGE<\/homepage>\n \n OWNER_EMAIL<\/email>\n <\/name>\n <\/owner>\n\n \n <\/repo>\n <\/repositories>\n\nOnce again, don't forget that all of these files have the same exact content,\nand no, it cannot be a symlink AFAIK\n\n## Step six -- Profiles\n\nYou only need one file in the `profiles` folder -- `repo_name`,\nthe content of it should be your overlay name, for example:\n\n dinolay\n\nThis is the `repo_name` content on my own overlay, basically the\ntemplate is\n\n \n\n## Step seven -- Readme\n\n`README.md` is an optional file, it's just used for information to give to users,\nit can have any content but here's a nice template:\n\n # \n\n > \n\n ## Installation\n\n ### Manual\n\n ```bash\n $ sudo mkdir -p \/etc\/portage\/repos.conf\n $ sudo cp .conf \/etc\/portage\/repos.conf\/.conf\n $ sudo emerge --sync ''\n ```\n\n ### Eselect repository\n\n ```bash\n $ sudo eselect repository add '' '' ''\n $ sudo eselect repository enable ''\n $ sudo emerge --sync ''\n ```\n\nAnd once you get into the [Offical Gentoo API](https:\/\/api.gentoo.org\/), for example\n[Like I did](https:\/\/github.com\/gentoo\/api-gentoo-org\/pull\/459) you also add how to add your overlay through\n[layman](https:\/\/wiki.gentoo.org\/wiki\/Layman):\n\n ### Layman\n\n ```bash\n $ sudo layman -a ''\n $ sudo layman -s ''\n ```\n\n## Step eight -- Sets\n\nThis directory is optional, although you can have sets\nof packages in there, like have you ever heard a term called\n'world set', it's the same thing, just on your own overlay\n\n[Read more about it here](https:\/\/wiki.gentoo.org\/wiki\/Package_sets)\n\n## Step nine -- Sets configuration\n\nThis file is needed unlike the sets directory, you should\nhave this content in it, although once again, please don't\nforget to fill in the template:\n\n [ sets]\n class = portage.sets.files.StaticFileSet\n multiset = true\n directory = ${repository:}\/sets\/\n\n## Step ten -- Portage overlay configuration\n\nThis file, although optional, will help the users of your\noverlay so much, they can just download this file,\nput it in `\/etc\/portage\/repos.conf\/.conf` and then\nrun\n\n sudo emerge --sync ''\n\nAnd they have it installed, anyway, this is what that file\nshould have\n\n []\n location = \/var\/db\/repos\/\n sync-type = \n sync-uri = \n\nE.g. for git it'd be:\n\n []\n location = \/var\/db\/repos\/\n sync-type = git\n sync-uri = https:\/\/some.git.service\/me\/my-overlay.git\n\n## Finishing\n\nAnd that's it, you can now publish your overlay on for example\nGitHub, like I did on , it's very easy,\nif you are confused about anything, refer to that repo yourself\n",
- "time": 1663872269.853418,
- "keywords": "gentoo overlay gentoo-overlay emerge portage repo repository github package linux gentoo-linux"
- },
- "ari-web-apis-are-going-public": {
- "title": "Ari-web APIs are going public",
- "content": "Ari-web APIs are going public very soon, meaning you will\nnot need to have a backend to use them, you could just do it\nin the frontend, yes, meaning you can even make a frontend\nfor this exact blog using [this API](\/blog.json) :)\n\nAlthough, just saying, if I notice abuse of these APIs I might\nhave to make them more private again, so be nice to everyone\nand don't over abuse it!\n\nCya :)\n",
- "time": 1663884258.412158,
- "keywords": "api apis ari-web ari-web-api blog frontend public public-api"
- },
- "ari-web-apis--how-to-use-them": {
- "title": "Ari-web APIs: How to use them",
- "content": "Ari-web APIs recently have become public, meaning\nanyone can use them on anywhere, so, how should you\nuse them properly?\n\n## 1. Validate hashes\n\nAll APIs have hashes for validation, and APIs are much more\nexpensive to call than just comparing two hashes\n\nFirst up make an uncached request, cache the request, then\nmake a request to get the calculated hash, cache it too\n\nNext time only make a request to get the hash, if the hashes\nmatch, if they do, use the cached API response, if it does\nnot match, get the updated data, cache it and so on\n\n### Hashes\n\nThe hashes are sha256 sums of the APIs, here's all the APIs\nhashing system\n\n- \n - Just make a request to \n- \n - Just make a request to \n- \n - Just make a request to with the `...` being the API name with all `.` characters replaced with `_`, for example for would be \n- \n - Just make a request to \n\nThis is already a standard in Ari-web, also if `www` subdomains don't work,\ntry out removing `www`\n\n## 2. Make as little requests as you can\n\nThis is kinda an extension of point 1, just don't make 10\nrequests to every API if you only need the `sitelist.json` once for\nexample\n\n## That's it\n\nThat's it, I got nothing else, this whole blog could have been\njust\n\n Make as little and I mean AS LITTLE requests as possible to the APIs\n",
- "time": 1663887522.323649,
- "keywords": "api ari-web ari-web-api caching hashing sha256"
- },
- "ari-web-now-delivers-minified-content": {
- "title": "Ari-web now delivers minified content",
- "content": "At build time ari-web minified only CSS, now it's also HTML\nand JavaScript, everything is minified to make it more accessible\nto users with worse network\n\n- Minified sites\n\n - \n - \n - (NOT FOSS, VERY CRINGE)\n\n- Semi-minified sites\n - \n\nAlthough this is ALL server-side, all source code is un-minified\nand very readable, so you are free to check it out, remember,\nin the ari-web standard `\/git` route always redirects\nto the source code, on proprietary sites it gives you an HTTP\/403\n(forbidden) and redirects to `\/`\n\nSources:\n\n- For open source minified sites\n\n - \n - \n\n- For open source semi-minified sites\n - \n",
- "time": 1664069535.771847,
- "keywords": "minification javascript css development server server-site open-source foss"
- },
- "the--www--subdomain-is-no-longer-the-default-for-ari-web-xyz": {
- "title": "The 'www' subdomain is no longer the default for ari-web.xyz",
- "content": "Okay, first, my apologies for making so many ari-web related\ntopics recently, ari-web is going through a lot of important\nchanges recently and I have to update people somehow\n\nAnyways, due to netlify handling the root level redirect weirdly\nrecently as shown here:\n\n- \n- \n\nMy HSTS was quite messed up, but then I thought, 'why not just\ndeprecate it', so I did, it should not cause much breakage\nas is still valid, just redirects to\n\n\nNetlify should fix this, but I can't do much about it, although\nI think I like it, so I think it's deprecated forever :)\n\nThanks for putting up with my ari-web updates shit, as of now,\ncya :D\n",
- "time": 1664072489.997986,
- "keywords": "ari-web-updates update hsts netlify www subdomain dns http https"
- },
- "fuck-you--putin--you-little-bitch": {
- "title": "Fuck you, putin, you little bitch",
- "content": "Seems like everyone has stopped talking about\nthe Ukrainian\/Russian war, just wanted to remind\nyou that the whole world is still in danger\nand Putin, being the little uwu bitch that he is\nis not seemingly stopping any time soon, essentially\nkilling young, unprepared people, pushing them into\na fire-y pit, 'put on these fancy shmancy clothes\nand go fight' he says, he's putting everyone at\nrisk, even his own country, he's raising inflation\nin others (for example, mine -- Lithuania), he's a\nbrainless little bitch with 0 morality, 0 braincells,\na careless little child who's head is stuck deep\nin his ass\n\nOnce again, fuck you, Vladimir Putin, pull your head\nout of your ass and see what you are doing you little\npiece of unworthy shit\n\n### [Click here if you want to support Ukraine financially](https:\/\/stand-with-ukraine.pp.ua\/)\n\n\\#SlavaUkraini \\#StandWithUkraine\n",
- "time": 1664208326.000201,
- "keywords": "putin vadimir vladimir-putin russia ukraine volodymyr zelenskyy volodymyr-zelenskyy slavaukraini"
- },
- "how-to-generate-a-report-for-songs-you-listen-to-using-mpv": {
- "title": "How to generate a report for songs you listen to using MPV",
- "content": "## Before we start\n\nThis blog is not updated, I made this whole thing into a baz\nplugin: \n\nA day ago I started collecting data about what I listen to\non my playlist, and currently it's working out amazing, it's very\nfun, so I thought to myself, 'why not share it', so here\nyou go\n\n## 1. Set up `mpvp` alias\n\n`mpvp` alias is what you will have to use to collect data about\nyour playlist, you can set up another name but code should be\naround the same\n\nBasically, add this to your `~\/.bashrc`:\n\n mpvp_collect() {\n [ ! -f \"$HOME\/.mpvp\" ] && : >\"$HOME\/.mpvp\"\n\n sleep 2\n\n while true; do\n sleep 5\n\n x=\"$(echo '{ \"command\": [\"get_property\", \"path\"] }' | socat - \/tmp\/mpvipc)\"\n\n [ ! \"$x\" ] && break\n\n if [ \"$x\" ] && [ \"$x\" != \"$(tail -n 1 \"$HOME\/.mpvp\")\" ]; then\n sleep 4\n\n y=\"$(echo '{ \"command\": [\"get_property\", \"path\"] }' | socat - \/tmp\/mpvipc)\"\n [ \"$x\" = \"$y\" ] && echo \"$x\" >>\"$HOME\/.mpvp\"\n fi\n done\n }\n\n alias mpvp='mpvp_collect & mpv --shuffle --loop-playlist --input-ipc-server=\/tmp\/mpvipc'\n\nWhen you use the `mpvp` alias it'll start the data collector in the background,\nthe IPC will be accessible though `\/tmp\/mpvipc`, this will collect all\ndata to `~\/.mpvp`, listen to some music and ignore it for a bit, also, keep in mind,\nthis code is bad because I'm too lazy to improve it and I made it fast, anyway, you\nneed to install `socat` for this to work\n\n## 2. Generate data report\n\nWell at this point you can do anything you want with your data, although\nI made a simple generator for it\n\nSo I made use of the data I have and my playlist structure, here's an example entry:\n\n {\"data\":\"playlist\/girl in red - i'll die anyway. [8MMa35B3HT8].mp3\",\"request_id\":0,\"error\":\"success\"}\n\nThere's an ID there so I add YouTube adding to the generator by\ndefault, yours might not have it, but I mean, you can still pretty much\nuse it, just links won't work\n\n### 2.1 The script\n\nI made a python script as my generator:\n\n #!\/usr\/bin\/env python3\n # -*- coding: utf-8 -*-\n \"\"\"MPV playlist song reporter\"\"\"\n\n import os\n import sys\n from html import escape as html_escape\n from typing import Any, Dict, List, Tuple\n from warnings import filterwarnings as filter_warnings\n\n import ujson # type: ignore\n from css_html_js_minify import html_minify # type: ignore\n\n SONG_TO_ARTIST: Dict[str, str] = {\n \"1985\": \"bo burnham\",\n \"apocalypse\": \"cigarettes after Sex\",\n \"astronomy\": \"conan gray\",\n \"brooklyn baby\": \"lana del rey\",\n \"come home to me\": \"crawlers\",\n \"daddy issues\": \"the neighbourhood\",\n \"feel better\": \"penelope scott\",\n \"hornylovesickmess\": \"girl in red\",\n \"i wanna be your girlfriend\": \"girl in red\",\n \"k.\": \"cigarettes after Sex\",\n \"lookalike\": \"conan gray\",\n \"lotta true crime\": \"penelope scott\",\n \"my man's a hexagon (music video)\": \"m\u00fcnecat\",\n \"r\u00e4t\": \"penelope scott\",\n \"sappho\": \"bushies\",\n \"serial killer - lana del rey lyrics\": \"lana del rey\",\n \"sugar, we're goin down but it's creepier\": \"kade\",\n \"sweater weather\": \"the neighbourhood\",\n \"talia \u29f8\u29f8 girl in red cover\": \"girl in red\",\n \"tv\": \"bushies\",\n \"unionize - m\u00fcnecat (music video)\": \"m\u00fcnecat\",\n \"watch you sleep.\": \"girl in red\",\n \"you used me for my love_girl in red\": \"girl in red\",\n }\n\n\n class UnknownMusicArtistError(Exception):\n \"\"\"Raised when there is an unknown music artist\"\"\"\n\n\n def sort_dict(d: Dict[str, int]) -> Dict[str, int]:\n return {k: v for k, v in sorted(d.items(), key=lambda item: item[1], reverse=True)}\n\n\n def fsplit_dels(s: str, *dels: str) -> str:\n for delim in dels:\n s = s.split(delim, maxsplit=1)[0]\n\n return s.strip()\n\n\n def get_artist_from_song(song: str) -> str:\n song = song.lower()\n delims: Tuple[str, ...] = (\n \"\u2013\",\n \"-\",\n \",\",\n \"feat.\",\n \".\",\n \"&\",\n )\n\n if song not in SONG_TO_ARTIST and any(d in song for d in delims):\n return fsplit_dels(\n song,\n *delims,\n )\n else:\n if song in SONG_TO_ARTIST:\n return SONG_TO_ARTIST[song].lower()\n\n raise UnknownMusicArtistError(f\"No handled artist for song: {song!r}\")\n\n\n def get_played(data: List[Tuple[str, str]]) -> Dict[str, int]:\n played: Dict[str, int] = {}\n\n for song, _ in data:\n if song not in played:\n played[song] = 0\n\n played[song] += 1\n\n return sort_dict(played)\n\n\n def get_yt_urls_from_data(data: List[Tuple[str, str]]) -> Dict[str, str]:\n return {song: f\"https:\/\/ari-web.xyz\/yt\/watch?v={yt_id}\" for song, yt_id in data}\n\n\n def get_artists_from_played(played: Dict[str, int]) -> Dict[str, List[int]]:\n artists: Dict[str, List[int]] = {}\n\n for song in played:\n artist = get_artist_from_song(song)\n\n if artist not in artists:\n artists[artist] = [0, 0]\n\n artists[artist][0] += 1\n artists[artist][1] += played[song]\n\n return {\n k: v\n for k, v in sorted(artists.items(), key=lambda item: sum(item[1]), reverse=True)\n }\n\n\n def parse_song(song: str) -> Tuple[str, str]:\n basename: str = os.path.splitext(os.path.basename(song))[0]\n return basename[:-14], basename[-12:-1]\n\n\n def parse_data(data: List[Tuple[str, str]]) -> Dict[str, Any]:\n played: Dict[str, int] = get_played(data)\n\n return {\n \"total\": len(data),\n \"played\": played,\n \"artists\": get_artists_from_played(played),\n \"yt-urls\": get_yt_urls_from_data(data),\n }\n\n\n def generate_html_report(data: Dict[str, Any]) -> str:\n styles: str = \"\"\"\n @import url(\"https:\/\/cdn.jsdelivr.net\/npm\/hack-font@3\/build\/web\/hack.min.css\");\n\n :root {\n color-scheme: dark;\n\n --clr-bg: #262220;\n --clr-fg: #f9f6e8;\n\n --clr-code-bg: #1f1b1a;\n --clr-code-fg: #f0f3e6;\n --clr-code-bg-dark: #181414;\n\n --scrollbar-height: 6px; \/* TODO: Firefox *\/\n }\n\n *,\n *::before,\n *::after {\n background-color: var(--clr-bg);\n color: var(--clr-fg);\n font-family: Hack, hack, monospace;\n\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n scrollbar-color: var(--clr-code-bg-dark) transparent;\n\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n\n word-wrap: break-word;\n\n scroll-behavior: smooth;\n }\n\n ::-webkit-scrollbar,\n ::-webkit-scrollbar-thumb {\n height: var(--scrollbar-height);\n }\n\n ::-webkit-scrollbar {\n background-color: transparent;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: var(--clr-code-bg-dark);\n }\n\n html::-webkit-scrollbar,\n body::-webkit-scrollbar {\n display: none !important;\n }\n\n body {\n margin: auto;\n padding: 2rem;\n max-width: 1100px;\n min-height: 100vh;\n text-rendering: optimizeSpeed;\n }\n\n h1 {\n text-align: center;\n margin: 1em;\n font-size: 2em;\n }\n\n li {\n margin: 0.5em;\n }\n\n a {\n text-decoration: none;\n text-shadow: 0px 0px 4px white;\n }\n\n pre,\n pre * {\n background-color: var(--clr-code-bg);\n }\n\n pre,\n pre *,\n code {\n color: var(--clr-code-fg);\n }\n\n pre,\n pre code {\n overflow-x: auto !important;\n\n scrollbar-width: initial;\n -ms-overflow-style: initial;\n }\n\n pre {\n padding: 1em;\n border-radius: 4px;\n }\n\n code:not(pre code) {\n background-color: var(--clr-code-bg);\n border-radius: 2px;\n padding: 0.2em;\n }\n\n @media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n -webkit-animation-duration: 0.01ms !important;\n animation-duration: 0.01ms !important;\n\n -webkit-animation-iteration-count: 1 !important;\n animation-iteration-count: 1 !important;\n\n -webkit-transition-duration: 0.01ms !important;\n -o-transition-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n\n scroll-behavior: auto !important;\n }\n }\n\n @media (prefers-contrast: more) {\n :root {\n --clr-bg: black;\n --clr-fg: white;\n\n --clr-code-bg: #181818;\n --clr-code-fg: whitesmoke;\n\n --scrollbar-height: 12px; \/* TODO: Firefox *\/\n }\n\n html::-webkit-scrollbar {\n display: initial !important;\n }\n\n *,\n *::before,\n *::after {\n scrollbar-width: initial !important;\n -ms-overflow-style: initial !important;\n }\n\n a {\n text-shadow: none !important;\n\n -webkit-text-decoration: underline dotted !important;\n text-decoration: underline dotted !important;\n }\n }\n \"\"\"\n\n songs = artists = \"\"\n\n for song, times in data[\"played\"].items():\n songs += f\"{html_escape(song)}<\/a> (played {times}<\/code> time{'s' if times > 1 else ''})<\/li>\"\n\n for artist, songn in data[\"artists\"].items():\n rps: str = f\" ({songn[1]}<\/code> repeats)\"\n artists += f\"{html_escape(artist)} ({songn[0]}<\/code> song{'s' if songn[0] > 1 else ''} \\\n played{rps if songn[1] > 1 else ''})<\/li>\"\n\n return html_minify(\n f\"\"\"\n \n \n \n \n \n HTML mpv song report<\/title>\n\n \n \n \n \n \n\n \n \n\n \n \n What are you listening to?
\n\n
\n\n Stats
\n\n \n - Songs played:
{data['total']}
\n - Unique songs played:
{len(data['played'])}
\n - Artists:
{len(data['artists'])}
\n
\n\n Top stats
\n\n \n - Top artist:
{tuple(data['artists'].keys())[0]}
with {tuple(data['artists'].values())[0][0]}
songs played and \\\n {tuple(data['artists'].values())[0][1]}
repeats \n - Top song:
{tuple(data['played'].keys())[0]}
by {get_artist_from_song(tuple(data['played'].keys())[0])}
\\\n with {tuple(data['played'].values())[0]}
plays \n
\n\n Songs\n\n \n Expand for the list of songs
\n \n \n\n Artists
\n\n \n Expand for the list of artists
\n \n \n\n Raw JSON data
\n\n \n Expand for the raw data
\n {ujson.dumps(data, indent=4)}
\n \n
\n \n \"\"\"\n )\n\n\n def main() -> int:\n \"\"\"Entry/main function\"\"\"\n\n data: List[Tuple[str, str]] = []\n\n with open(os.path.expanduser(\"~/.mpvp\"), \"r\") as mpv_data:\n for line in mpv_data:\n if '\"data\"' not in line:\n continue\n\n data.append(parse_song(ujson.loads(line)[\"data\"]))\n\n with open(\"index.html\", \"w\") as h:\n h.write(generate_html_report(parse_data(data)))\n\n return 0\n\n\n if __name__ == \"__main__\":\n assert main.__annotations__.get(\"return\") is int, \"main() should return an integer\"\n\n filter_warnings(\"error\", category=Warning)\n sys.exit(main())\n\nThis is a pretty easy thing, very stupid and not fool-proof but eh,\nthis generator should work out of the box with the song name format\nbeing `artist name - song`, if it's not make sure to add a lowercase\nentry to `SONG_TO_ARTIST`, like if your song was named like `naMe - Artist`\nyou will have to add this entry:\n\n \"name - artist\": \"artist\",\n\nThese settings that you see in my script are for my playlist\n\n## 2.2 Dependencies\n\nHere's the python dependencies you need:\n\n css-html-js-minify\n ujson\n\nYou need to install them using\n\n python3 -m pip install --user css-html-js-minify ujson\n\n## 2.3 The data report\n\nOnce you have enough data to make a report from, run the script,\njust\n\n python3 main.py\n\nOr whatever, it'll generate `index.html` file and it'll include all of\nyour report data, you can also style it using the `styles` variable\n\n## 3. Finishing\n\nThat's all, enjoy your statistics, and as of now I shall go collect more data,\nI already have 18KB of it!\n\nPlus, I'll admit it, most of this code is **garbage, complete dog shit**,\nI just wanted to make it work and I did, it's readable enough\nfor just a messy script I'm not even releasing as anything legit\n",
+ "keywords": [
+ "song",
+ "report",
+ "song-report",
+ "ststistics",
+ "mpv",
+ "mpv.io",
+ "player",
+ "music",
+ "listening",
+ "data",
+ "html",
+ "css",
+ "python",
+ "python3",
+ "generator"
+ ],
+ "created": 1664422575.771071
+ },
+ "fuck-you--putin--you-little-bitch": {
+ "title": "fuck you, putin, you little bitch",
+ "description": "Seems like everyone has stopped talking about the Ukrainian/Russian war, just wanted to remind you that the whole world is still in danger and Putin, being the little uwu bitch that he is is not s ...",
+ "content": "Seems like everyone has stopped talking about\nthe Ukrainian/Russian war, just wanted to remind\nyou that the whole world is still in danger\nand Putin, being the little uwu bitch that he is\nis not seemingly stopping any time soon, essentially\nkilling young, unprepared people, pushing them into\na fire-y pit, 'put on these fancy shmancy clothes\nand go fight' he says, he's putting everyone at\nrisk, even his own country, he's raising inflation\nin others (for example, mine -- Lithuania), he's a\nbrainless little bitch with 0 morality, 0 braincells,\na careless little child who's head is stuck deep\nin his ass\n\nOnce again, fuck you, Vladimir Putin, pull your head\nout of your ass and see what you are doing you little\npiece of unworthy shit\n\n### [Click here if you want to support Ukraine financially](https://stand-with-ukraine.pp.ua/)\n\n\\#SlavaUkraini \\#StandWithUkraine\n",
+ "keywords": [
+ "putin",
+ "vadimir",
+ "vladimir-putin",
+ "russia",
+ "ukraine",
+ "volodymyr",
+ "zelenskyy",
+ "volodymyr-zelenskyy",
+ "slavaukraini"
+ ],
+ "created": 1664208326.000201
+ },
+ "the--www--subdomain-is-no-longer-the-default-for-ari-web-xyz": {
+ "title": "the 'www' subdomain is no longer the default for ari-web.xyz",
+ "description": "Okay, first, my apologies for making so many ari-web related topics recently, ari-web is going through a lot of important changes recently and I have to update people somehow Anyways, due to netl ...",
+ "content": "Okay, first, my apologies for making so many ari-web related\ntopics recently, ari-web is going through a lot of important\nchanges recently and I have to update people somehow\n\nAnyways, due to netlify handling the root level redirect weirdly\nrecently as shown here:\n\n- \n- \n\nMy HSTS was quite messed up, but then I thought, 'why not just\ndeprecate it', so I did, it should not cause much breakage\nas is still valid, just redirects to\n\n\nNetlify should fix this, but I can't do much about it, although\nI think I like it, so I think it's deprecated forever :)\n\nThanks for putting up with my ari-web updates shit, as of now,\ncya :D\n",
+ "keywords": [
+ "ari-web-updates",
+ "update",
+ "hsts",
+ "netlify",
+ "www",
+ "subdomain",
+ "dns",
+ "http",
+ "https"
+ ],
+ "created": 1664072489.997986
+ },
+ "ari-web-now-delivers-minified-content": {
+ "title": "ari-web now delivers minified content",
+ "description": "At build time ari-web minified only CSS, now it's also HTML and JavaScript, everything is minified to make it more accessible to users with worse network - Minified sites - \n - \n - (NOT FOSS, VERY CRINGE)\n\n- Semi-minified sites\n - \n\nAlthough this is ALL server-side, all source code is un-minified\nand very readable, so you are free to check it out, remember,\nin the ari-web standard `/git` route always redirects\nto the source code, on proprietary sites it gives you an HTTP/403\n(forbidden) and redirects to `/`\n\nSources:\n\n- For open source minified sites\n\n - \n - \n\n- For open source semi-minified sites\n - \n",
+ "keywords": [
+ "minification",
+ "javascript",
+ "css",
+ "development",
+ "server",
+ "server-site",
+ "open-source",
+ "foss"
+ ],
+ "created": 1664069535.771847
+ },
+ "ari-web-apis--how-to-use-them": {
+ "title": "ari-web apis: how to use them",
+ "description": "Ari-web APIs recently have become public, meaning anyone can use them on anywhere, so, how should you use them properly? ## 1. Validate hashes All APIs have hashes for validation, and APIs are m ...",
+ "content": "Ari-web APIs recently have become public, meaning\nanyone can use them on anywhere, so, how should you\nuse them properly?\n\n## 1. Validate hashes\n\nAll APIs have hashes for validation, and APIs are much more\nexpensive to call than just comparing two hashes\n\nFirst up make an uncached request, cache the request, then\nmake a request to get the calculated hash, cache it too\n\nNext time only make a request to get the hash, if the hashes\nmatch, if they do, use the cached API response, if it does\nnot match, get the updated data, cache it and so on\n\n### Hashes\n\nThe hashes are sha256 sums of the APIs, here's all the APIs\nhashing system\n\n- \n - Just make a request to \n- \n - Just make a request to \n- \n - Just make a request to with the `...` being the API name with all `.` characters replaced with `_`, for example for would be \n- \n - Just make a request to \n\nThis is already a standard in Ari-web, also if `www` subdomains don't work,\ntry out removing `www`\n\n## 2. Make as little requests as you can\n\nThis is kinda an extension of point 1, just don't make 10\nrequests to every API if you only need the `sitelist.json` once for\nexample\n\n## That's it\n\nThat's it, I got nothing else, this whole blog could have been\njust\n\n Make as little and I mean AS LITTLE requests as possible to the APIs\n",
+ "keywords": [
+ "api",
+ "ari-web",
+ "ari-web-api",
+ "caching",
+ "hashing",
+ "sha256"
+ ],
+ "created": 1663887522.323649
+ },
+ "ari-web-apis-are-going-public": {
+ "title": "ari-web apis are going public",
+ "description": "Ari-web APIs are going public very soon, meaning you will not need to have a backend to use them, you could just do it in the frontend, yes, meaning you can even make a frontend for this exact blo ...",
+ "content": "Ari-web APIs are going public very soon, meaning you will\nnot need to have a backend to use them, you could just do it\nin the frontend, yes, meaning you can even make a frontend\nfor this exact blog using [this API](/blog.json) :)\n\nAlthough, just saying, if I notice abuse of these APIs I might\nhave to make them more private again, so be nice to everyone\nand don't over abuse it!\n\nCya :)\n",
+ "keywords": [
+ "api",
+ "apis",
+ "ari-web",
+ "ari-web-api",
+ "blog",
+ "frontend",
+ "public",
+ "public-api"
+ ],
+ "created": 1663884258.412158
+ },
+ "how-to-make-your-own-gentoo-linux-overlay": {
+ "title": "how to make your own gentoo linux overlay",
+ "description": "So before we start, I have my own overlay @ and am running it for a while, it was a bit painful for me to make one at the start and to help new Gentoo users I am maki ...",
+ "content": "So before we start, I have my own overlay @ \nand am running it for a while, it was a bit painful for me to\nmake one at the start and to help new Gentoo users I am making this\nblog post, anyway, here's how you do it:\n\n## Step one -- Think of a name\n\nThink of a name you will give your overlay because this information\nwill be needed in later steps\n\n## Step two -- Folder structure\n\nTo start with we need files and folders to work with,\nall names ending with a `/` are folders and everything\nelse is a file, please make sure to also apply the templates\nin `<...>`, for example `` would be the current year:\n\n ./\n \u251c\u2500\u2500 LICENSE\n \u251c\u2500\u2500 metadata/\n \u2502 \u2514\u2500\u2500 layout.conf\n \u251c\u2500\u2500 overlays.xml\n \u251c\u2500\u2500 profiles/\n \u2502 \u2514\u2500\u2500 repo_name\n \u251c\u2500\u2500 README.md\n \u251c\u2500\u2500 repositories.xml\n \u251c\u2500\u2500 sets/\n \u251c\u2500\u2500 sets.conf\n \u2514\u2500\u2500 .conf\n\n## Step three -- License\n\nThe `LICENSE` file should have your license, if it doesn't\nalready please pick one, for example on my overlay\nI went for [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html), but you can also go for some other\n_open source_ licenses, like GPLv2, WTFPL, BSD 3-clause, etc.\n\nWrite that license to the `LICENSE` file\n\n## Step four -- Master overlays\n\nThis step is always the same, you have to set the master\noverlay in `metadata/layout.conf` file, the master is usually\ngoing to be `gentoo`, so in `metadata/layout.conf` add this\ncontent:\n\n masters = gentoo\n\n## Step five -- Overlay index files\n\nOverlay index files are these files:\n\n- `overlays.xml`\n- `repositories.xml`\n\nBoth of these files should have the same content,\nmake sure to fill in the templates that are in SCREAMING_SNAKE_CASE:\n\n \n \n \n \n \n \n OVERLAY_HOMEPAGE\n \n OWNER_EMAIL\n \n \n\n \n \n \n\nOnce again, don't forget that all of these files have the same exact content,\nand no, it cannot be a symlink AFAIK\n\n## Step six -- Profiles\n\nYou only need one file in the `profiles` folder -- `repo_name`,\nthe content of it should be your overlay name, for example:\n\n dinolay\n\nThis is the `repo_name` content on my own overlay, basically the\ntemplate is\n\n \n\n## Step seven -- Readme\n\n`README.md` is an optional file, it's just used for information to give to users,\nit can have any content but here's a nice template:\n\n # \n\n > \n\n ## Installation\n\n ### Manual\n\n ```bash\n $ sudo mkdir -p /etc/portage/repos.conf\n $ sudo cp .conf /etc/portage/repos.conf/.conf\n $ sudo emerge --sync ''\n ```\n\n ### Eselect repository\n\n ```bash\n $ sudo eselect repository add '' '' ''\n $ sudo eselect repository enable ''\n $ sudo emerge --sync ''\n ```\n\nAnd once you get into the [Offical Gentoo API](https://api.gentoo.org/), for example\n[Like I did](https://github.com/gentoo/api-gentoo-org/pull/459) you also add how to add your overlay through\n[layman](https://wiki.gentoo.org/wiki/Layman):\n\n ### Layman\n\n ```bash\n $ sudo layman -a ''\n $ sudo layman -s ''\n ```\n\n## Step eight -- Sets\n\nThis directory is optional, although you can have sets\nof packages in there, like have you ever heard a term called\n'world set', it's the same thing, just on your own overlay\n\n[Read more about it here](https://wiki.gentoo.org/wiki/Package_sets)\n\n## Step nine -- Sets configuration\n\nThis file is needed unlike the sets directory, you should\nhave this content in it, although once again, please don't\nforget to fill in the template:\n\n [ sets]\n class = portage.sets.files.StaticFileSet\n multiset = true\n directory = ${repository:}/sets/\n\n## Step ten -- Portage overlay configuration\n\nThis file, although optional, will help the users of your\noverlay so much, they can just download this file,\nput it in `/etc/portage/repos.conf/.conf` and then\nrun\n\n sudo emerge --sync ''\n\nAnd they have it installed, anyway, this is what that file\nshould have\n\n []\n location = /var/db/repos/\n sync-type = \n sync-uri = \n\nE.g. for git it'd be:\n\n []\n location = /var/db/repos/\n sync-type = git\n sync-uri = https://some.git.service/me/my-overlay.git\n\n## Finishing\n\nAnd that's it, you can now publish your overlay on for example\nGitHub, like I did on , it's very easy,\nif you are confused about anything, refer to that repo yourself\n",
+ "keywords": [
+ "gentoo",
+ "overlay",
+ "gentoo-overlay",
+ "emerge",
+ "portage",
+ "repo",
+ "repository",
+ "github",
+ "package",
+ "linux",
+ "gentoo-linux"
+ ],
+ "created": 1663872269.853418
+ },
+ "ari-web-browser-compatibility": {
+ "title": "ari-web browser compatibility",
+ "description": "Marking system: - y -- Fully works with no flaws - m -- Very minor flaws, don't affect anything - k -- Kinda works, affects slightly medium - n -- Does not work at all As of 2022/09/20 o ...",
+ "content": "Marking system:\n\n- y -- Fully works with no flaws\n- m -- Very minor flaws, don't affect anything\n- k -- Kinda works, affects slightly medium\n- n -- Does not work at all\n\nAs of 2022/09/20 on latest versions of these browsers support\nari-web subdomains in these ways:\n\n- Chromium:\n - www: y\n - files: m [Unimportant header error]\n - blog: y\n - legacy.blog: m [Unimportant header error]\n - school: y\n - user: y\n - 3: y\n- Dillo:\n - www: n [Disabled JavaScript]\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: n [Disabled JavaScript]\n - 3: k [Displays the bare HTML, no counter]\n- Firefox:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Librewolf:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Edge:\n - www: y\n - files: m [Unimportant header error]\n - blog: y\n - legacy.blog: m [Unimportant header error]\n - school: y\n - user: y\n - 3: y\n- Qutebrowser:\n - www: y\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: y\n - 3: y\n- Lynx:\n - www: n [Disabled JavaScript]\n - files: y\n - blog: y\n - legacy.blog: y\n - school: y\n - user: n [Disabled JavaScript]\n - 3: k [Displays the bare HTML, no counter]\n\n---\n\n7 Tests per browser:\n\n- GUI browsers:\n\n - Chromium:\n - Not counting minor: 7/7\n - Counting minor: 5/7\n - Dillo:\n - Not counting minor: 4/7\n - Counting minor: 4/7\n - Firefox:\n - Not counting minor: 7/7\n - Counting minor: 7/7\n - Librewolf:\n - Not counting minor: 7/7\n - Counting minor: 7/7\n - Edge:\n - Not counting minor: 5/7\n - Counting minor: 7/7\n - Qutebrowser:\n\n - Not counting minor: 7/7\n - Counting minor: 7/7\n\n - Total score:\n\n - Without minor: 37/42 (88.09523809523809%)\n - With minor: 37/42 (88.09523809523809%)\n - Average: 37/42 (88.09523809523809%)\n\n - Average score:\n - Without minor: 6.166666666666667\n - With minor: 6.166666666666667\n - Average: 6.166666666666667\n\n- TUI browsers:\n\n - Lynx:\n\n - Not counting minor: 4/7\n - Counting minor: 4/7\n\n - Total score:\n\n - Without minor: 4/7 (57.14285714285714%)\n - With minor: 4/7 (57.14285714285714%)\n - Average: 4/7 (57.14285714285714%)\n\n - Average score:\n - Without minor: 4\n - With minor: 4\n - Average: 4\n\n---\n\nConclusion:\n\n- Average total:\n\n - Without minor: 61/84 (72.61904761904762%)\n - With minor: 61/84 (72.61904761904762%)\n - Average: 61/84 (72.61904761904762%)\n\n- Average score:\n - Without minor: 5.083333333333334\n - With minor: 5.083333333333334\n - Average: 5.083333333333334\n",
+ "keywords": [
+ "mark",
+ "marking",
+ "average",
+ "math",
+ "support",
+ "browser",
+ "google",
+ "chrome",
+ "chromium",
+ "firefox"
+ ],
+ "created": 1663636905.053169
+ },
+ "how-to-fix-contant-freezing-or-disconnecting-of-wpa-supplicant-wifi-on-rtl8821ce": {
+ "title": "how to fix contant freezing or disconnecting of wpa_supplicant wifi on rtl8821ce",
+ "description": "## Tl;dr - Module configuration: `/etc/modprobe.d/rtw.conf` Should have: options rtw88_core disable_lps_deep=y options rtw88_pci disable_msi=y disable_aspm=y - Kernel command line If ...",
+ "content": "## Tl;dr\n\n- Module configuration: `/etc/modprobe.d/rtw.conf`\n\nShould have:\n\n options rtw88_core disable_lps_deep=y\n options rtw88_pci disable_msi=y disable_aspm=y\n\n- Kernel command line\n\nIf you use grub just add `pcie_aspm.policy=performance` to the kernel\ncommand line in `/etc/default/grub`:\n\n GRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=3 init=/sbin/openrc-init pcie_aspm.policy=performance\"\n\n- WPA configuration: `/etc/wpa_supplicant/wpa_supplicant.conf` or wherever you keep your `wpa_supplicant.conf` file\n\nShould have:\n\n network={\n ...\n beacon_int=9000\n }\n\n(Append `beacon_int=9000` to your main config)\n\n- Finishing\n\nOnly run this if you use GRUB:\n\n su -c 'grub-mkconfig -o /boot/grub/grub.cfg'\n\nThen no matter what you run:\n\n su -c 'poweroff'\n\nThen wait a couple of minutes (2-5 min) and power your computer on\n\n---\n\nI use the `rtl8821ce` driver for my WiFi and recently I noticed how often\nit begun to disconnect from the internet, wpa would always give me this\noutput:\n\n ...\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n wlo1: CTRL-EVENT-SCAN-FAILED ret=-16 retry=1\n ...\n\nNot sure how much it's related, but might be a sign for you /shrug\n\nAnyway, I think I found a solution:\n\n## Configure the module\n\nAdd this exact content to `/etc/modprobe.d/rtw.conf`\n\n options rtw88_core disable_lps_deep=y\n options rtw88_pci disable_msi=y disable_aspm=y\n\nYou can call rtw.conf anything you like\n\n## Configure kernel parameters\n\nI don't know how it works on other bootloaders, but basically your kernel\ncommand line should include:\n\n pcie_aspm.policy=performance\n\n### GRUB\n\n- Open `/etc/default/grub` in some editor\n- Find where it says `GRUB_CMDLINE_LINUX_DEFAULT`\n- In that variable, between quotes add `pcie_aspm.policy=performance`\n\nFor example in my config:\n\n GRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=3 init=/sbin/openrc-init pcie_aspm.policy=performance\"\n\n## Configure wpa_supplicant\n\nOpen `/etc/wpa_supplicant/wpa_supplicant.conf` or wherever you store your\nwpa_supplicant.conf file and in the main config add:\n\n beacon_int=9000\n\nFor example:\n\n network={\n ssid=\"My-C00l-Wifi\"\n psk=0000000000000000000000000000000000000000000000000000000000000000\n beacon_int=9000\n }\n\nOr\n\n network={\n ssid=\"My-C00l-Wifi\"\n psk=\"9Y-pAs$w0rd123\"\n beacon_int=9000\n }\n\nDepends on how your config is set up, but the only part that really matters\nis:\n\n network={\n ...\n beacon_int=9000\n }\n\n## Finishing\n\nIf you are using GRUB before anything run this:\n\n su -c 'grub-mkconfig -o /boot/grub/grub.cfg'\n\nAnd if not skip this command\n\nAfter, no matter what you use:\n\n su -c 'poweroff'\n\nThen wait a couple of minutes (like between 2 and 5), and then power on your\ncomputer, this should fix the network annoyances\n\n## If your WiFi does not work anymore after this\n\nNot a problem, just revert all the steps in this blog, look for a new solution\nand find out what option is causing it, usually it's the `module` part,\nso try to modify or remove it\n\nAlthough if this does not work and you find a solution comment on\n and share the solution with others\n",
+ "keywords": [
+ "wpa",
+ "linux",
+ "wpa_supplicant",
+ "wifi",
+ "network",
+ "kernel",
+ "fix",
+ "rtw",
+ "rtl",
+ "rtw8821ce",
+ "rtl8821ce",
+ "wifi-driver"
+ ],
+ "created": 1663613948.515744
+ },
+ "my-music-artist-recommendations": {
+ "title": "my music artist recommendations",
+ "description": "First up, none of these people payed me or anything I just like their music and that's all :) This list is in no way ordered so yeah, this is just an unordered list of people who make good music ...",
+ "content": "First up, none of these people payed me or anything\nI just like their music and that's all :)\n\nThis list is in no way ordered so yeah, this is just\nan unordered list of people who make good music\n\n\n- Clairo\n - Song recommendations\n - Clairo - Bags\n - Clairo - I Wouldn't Ask You\n - Clairo - Sofia\n - Website: \n- Crawlers\n - Song recommendations\n - CRAWLERS - Fuck Me (I Didn\u2019t Know How To Say)\n - CRAWLERS - Hush\n - CRAWLERS - I Don't Want It\n - CRAWLERS - Placebo\n - Website: \n- Conan Gray\n - Song recommendations\n - Conan Gray - Heather\n - Conan Gray - Memories\n - Conan Gray - Wish You Were Sober\n - Website: \n- Fazerdaze\n - Song recommendations\n - Fazerdaze - Lucky Girl\n - Fazerdaze - Misread\n - Fazerdaze - Come Apart\n - Website: \n- Girl in red\n - Song recommendations\n - girl in red - i'll die anyway.\n - girl in red & beabadoobee - eleanor and park\n - girl in red - .\n - girl in red - midnight love\n - girl in red - we fell in love in october\n - girl in red - You Stupid Bitch\n - Website: and \n- GIRLI\n - Song recommendations\n - GIRLI - Dysmorphia\n - GIRLI - More Than A Friend\n - GIRLI \u2013 I Don\u2019t Like Myself\n - Website: \n- MOTHICA\n - Song recommendations\n - MOTHICA & emlyn - GOOD FOR HER\n - MOTHICA - BEDTIME STORIES\n - MOTHICA - HIGHLIGHTS\n - Mothica - VICES\n - Mothica - motions\n - Website: \n- Phem\n - Song recommendations\n - phem - watery\n - phem - flowers\n - phem - silly putty\n - Website: and \n- Lana Del Rey\n - Song recommendations\n - Serial Killer - Lana Del Rey\n - Lana Del Rey - Video games\n - Website: \n- Sir Chloe\n - Song recommendations\n - Sir Chloe - Femme Fatale (The Velvet Underground & Nico Cover)\n - Sir Chloe - Mercy\n - Sir Chloe - Sedona\n - Sir Chloe - Squaring Up\n - Website: \n- Troye Sivan\n - Song recommendations\n - Troye Sivan - Rager teenager!\n - Troye Sivan - STUD\n - Troye Sivan - YOUTH\n - Website: \n- VIDEOCLUB\n - Song recommendations\n - VIDEOCLUB - Amour plastique\n - VIDEOCLUB - Euphories\n - Website: \n- R\u00f6yksopp\n - Song recommendations\n - R\u00f6yksopp - I Had This Thing\n - R\u00f6yksopp - Skulls\n - R\u00f6yksopp feat. Robyn - Monument (The Inevitable End Version)\n - Website: and \n\nYou can find more in [YouTube], but these are\nmy favs\n",
+ "keywords": [
+ "phem",
+ "music",
+ "youtube",
+ "girl",
+ "girl-in-red",
+ "lgbt",
+ "playlist",
+ "music-playlist",
+ "clairo",
+ "conan-gray",
+ "fazerdaze",
+ "lana-del-rey",
+ "sir-chloe",
+ "troye-sivan",
+ "videoclub",
+ "royksopp"
+ ],
+ "created": 1663445401.401932
+ },
+ "sorry-for-deleting-some-blog-posts": {
+ "title": "sorry for deleting some blog posts",
+ "description": "So basically, some people that know me IRL will see this blog most likely, I have not even hidden them, I just straight up deleted some of the blogs, sorry about it if it bothers you :thumbs_up: ",
+ "content": "So basically, some people that know me IRL will see this blog most likely,\nI have not even hidden them, I just straight up deleted some of the blogs,\nsorry about it if it bothers you :thumbs_up:\n",
+ "keywords": [
+ "sorry",
+ "blog-deletion",
+ "delete",
+ "remove",
+ "post"
+ ],
+ "created": 1662644210.102135
+ },
+ "homework---ish-have-to-present-some-stuff-about-my-projects-and-things": {
+ "title": "homework: -ish have to present some stuff about my projects and things",
+ "description": "## Projects Don't ask me about the names, ari-web came from how I name my hostnames while using Linux distros like ari- so it only makes sense that ari-web would be for my website ig, ot ...",
+ "content": "## Projects\n\nDon't ask me about the names, ari-web came from how I name my hostnames\nwhile using Linux distros like ari- so it only makes sense that\nari-web would be for my website ig, other names I just made up ig, I really\nhave 0 clue what they mean but yeah, also I only created my GitHub account\nin 2020/09/10, meaning I have not released too much, usually my projects used\nto be smaller scale, the most I did was share them on discord or something,\nbut also there's the issue that I have deleted over 50 of them from github\nbecause they're.. Very useless\n\n- Ari-web things\n - [Main page](https://ari-web.xyz/) -- The actual main page, source code: \n - [Blog](https://blog.ari-web.xyz/) -- My.. Blog ig lol, but actually is managed and built unlike the legacy counterpart, source code: \n - [Legacy blog](https://legacy.blog.ari-web.xyz/)-- Why do people even read this, I have not updated it in like half a year, source code: \n - [Comments and opinions](https://user.ari-web.xyz/) -- Literally just a static page using uterances for people to comment stuff on rather than flooding me with github issues, source code: (nothing interesting)\n - [School stuff](https://school.ari-web.xyz) -- Very bad and cringe, also not foss\n - [(Mainly personal) File hosting](https://files.ari-web.xyz/) -- A place where I upload files because using conventional file uploading services like filebin is annoying because they have like an md5 hash as their file id, src: \n - [Three](https://3.ari-web.xyz/) -- Yeah, just 3 :) src: \n- My dotfiles: \n- My [Gentoo Linux](https://gentoo.org/) overlay: \n- A quite simple sudo alternative for _purely_ Linux (bc I suck and I don't use BSD yet, will be painful to port but eh, we'll see (yes I actually use it)) written in C++: