From d704be19afb2e4701a1947a28ef4970d0b3acfa3 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Thu, 24 Oct 2024 01:11:49 -0700 Subject: post: the oshimark problem --- package.json | 1 + pnpm-lock.yaml | 17 ++++++ src/components/Latex.astro | 18 +++++++ src/content/blog/the-oshimark-problem.mdx | 89 +++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 src/components/Latex.astro create mode 100644 src/content/blog/the-oshimark-problem.mdx diff --git a/package.json b/package.json index 2b3db54..499d084 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@astrojs/rss": "^4.0.9", "@astrojs/sitemap": "^3.2.1", "astro": "^4.16.5", + "katex": "^0.16.11", "react": "^18.3.1", "react-dom": "^18.3.1", "sharp": "^0.33.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2fd6127..dc1e36d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: astro: specifier: ^4.16.5 version: 4.16.5(rollup@4.24.0)(typescript@5.5.4) + katex: + specifier: ^0.16.11 + version: 0.16.11 react: specifier: ^18.3.1 version: 18.3.1 @@ -800,6 +803,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -1136,6 +1143,10 @@ packages: engines: {node: '>=6'} hasBin: true + katex@0.16.11: + resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + hasBin: true + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -2637,6 +2648,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@8.3.0: {} + common-ancestor-path@1.0.1: {} convert-source-map@2.0.0: {} @@ -3019,6 +3032,10 @@ snapshots: json5@2.2.3: {} + katex@0.16.11: + dependencies: + commander: 8.3.0 + kind-of@6.0.3: {} kleur@3.0.3: {} diff --git a/src/components/Latex.astro b/src/components/Latex.astro new file mode 100644 index 0000000..f335189 --- /dev/null +++ b/src/components/Latex.astro @@ -0,0 +1,18 @@ +--- +import katex from 'katex'; + +const { formula = '' } = Astro.props; +const html = katex.renderToString(formula, {throwOnError: false}); +--- + +
+ +
+ + + diff --git a/src/content/blog/the-oshimark-problem.mdx b/src/content/blog/the-oshimark-problem.mdx new file mode 100644 index 0000000..873207b --- /dev/null +++ b/src/content/blog/the-oshimark-problem.mdx @@ -0,0 +1,89 @@ +--- +title: 'The Year 11779 Oshi Mark Problem' +description: 'When will we run out of 2-emoji oshi marks?' +pubDate: 'Oct 24 2024' +heroImage: 'https://files.catbox.moe/8gr7k2.jpg' +--- +import Latex from '../../components/Latex.astro'; + +(This is a problem that lives rent-free in my head) + +The oshi mark is are emoji(s) that VTuber fans will often put in their social media usernames to represent their support for a particular VTuber. These are typically chosen during or before a VTuber's debut stream, you'll often see many VTubers changing their usernames to include them too! + +Seems like a good idea, until you realize that there is a finite number of emojis... + +## Definition +As of writing this there are 3790 emojis in the Unicode standard. I know that platforms like X have may have their own standards (Twemoji), but for the sake of this problem let's assume that we're using the Unicode standard. + +This also includes skin-tones, which may or may not be appropriate to use in this context as well. However, this is just all theory anyways so let's include them and take this as a best-case scenario. + +## Problem +Ideally, VTubers all want a unique oshi mark to represent them. Of course, in the early days of VTubing a single emoji would be enough to represent a VTuber. However, as the industry grows and more VTubers debut, the chances of a VTuber getting a unique oshi mark decreases... + +So the fix is intuitive, let's just use 2 emojis for each new VTuber. This is fine, in fact its the solution we're on right now, but how long until we run out of 2-emoji oshi marks? + + + +We then assume that all 1-emoji oshi marks are taken, so add that to the total number of 2-emoji oshi marks and we end up with 7,175,545 VTubers. + +### Predicting Growth +We can predict VTuber growth in a fairly crude manner using Holodex. I wrote a Java wrapper for the Holodex API a while back, so I was easily able to spin something up quick. +```java +import com.pinapelz.Holodex; +import com.pinapelz.HolodexException; +import com.pinapelz.datatypes.Video; +import com.pinapelz.query.VideoQueryBuilder; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class App { + public static void main(String[] args) { + try { + Holodex holodex = new Holodex("API_KEY"); + VideoQueryBuilder query = new VideoQueryBuilder().setTopic("Debut_Stream").setLimit(100); + List