<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vivian Rose</title>
    <description>welcome to my website</description>
    <link>http://rose.systems/</link>
    <atom:link href="http://rose.systems/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 08 Aug 2026 14:29:16 +0000</pubDate>
    <lastBuildDate>Sat, 08 Aug 2026 14:29:16 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>I helped a moth today</title>
        <description>&lt;p&gt;Moths/butterflies need to hang vertically (like on a wall or tree) shortly after they eclose for gravity to inflate their wings with fluid.

&lt;p&gt;Cicadas are the same way. If you&apos;ve experienced a periodic cicada emergence, you may have noticed a cicada with shriveled wings. If it&apos;s vertical (likely hanging from its exuvia), it&apos;s probably &lt;a href=https://commons.wikimedia.org/wiki/File:Cicada_Final_Molt_sequence_2021.jpg&gt;inflating its wings&lt;/a&gt;. If it&apos;s on the ground, it&apos;s probably seeking a vertical surface, or already failed to mount one in time and thus can never fly.

&lt;p&gt;Today I found this creature crawling on pavement:

&lt;p&gt;&lt;img alt=&quot;Moth with tiny undeveloped wings&quot; src=https://rose.systems/post_assets/moth-wings/grounded.webp&gt;

&lt;p&gt;Coworkers thought it a bee or hornet, but I recognized it as a moth with tiny wings. I gave it a folded napkin to perch on, even though its wings were so tiny I doubted they would inflate properly. The moth hung vertically as soon as it could, and inflated its wings to full size over about 20 minutes.

&lt;p&gt;&lt;img alt=&quot;Moth hanging vertically&quot; src=https://rose.systems/post_assets/moth-wings/taken.webp&gt;
&lt;p&gt;&lt;img alt=&quot;Moth, now with larger wings&quot; src=https://rose.systems/post_assets/moth-wings/inflating.webp&gt;
&lt;p&gt;&lt;img alt=&quot;Moth, now with fully-sized wings&quot; src=https://rose.systems/post_assets/moth-wings/inflated.webp&gt;

&lt;p&gt;Here&apos;s a macro photo that makes you want to run a hand through its fur:

&lt;p&gt;&lt;img alt=&quot;Moth close-up&quot; src=https://rose.systems/post_assets/moth-wings/fur.webp&gt;

&lt;p&gt;It knocked off a lot of scales on its first flight attempt, and also shed some while merely buzzing its wings. I&apos;m guessing this is normal for clearwing moths?

&lt;p&gt;&lt;img alt=&quot;Moth, held, with missing scales&quot; src=https://rose.systems/post_assets/moth-wings/held.webp&gt;

&lt;!--&lt;p&gt;I think it&apos;s &lt;a href=https://en.wikipedia.org/wiki/Hemaris&gt;Hemaris&lt;/a&gt; genus. Maybe a snowberry clearwing?--&gt;

&lt;p&gt;I like knowing enough about bugs to help them out like this. If you find a moth/butterfly/cicada on the ground with crumpled wings, consider offering it a vertical surface. (If you do this, I should warn that the moth does take a piss as soon as it&apos;s done gaining flight. It&apos;s been in a chrysalis for a long time; wouldn&apos;t that be second on your to-do list, too?)

&lt;p&gt;Another favorite trick of mine: If you catch a spider indoors, offer it a tiny wet piece of paper towel (or a wet cotton ball). The spider is likely thirsty, so you can watch it lick water from the paper.
</description>
        <pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate>
        <link>http://rose.systems/blog/moth</link>
        <guid isPermaLink="true">http://rose.systems/blog/moth</guid>
        
        
      </item>
    
      <item>
        <title>about list animals until failure</title>
        <description>&lt;p&gt;I made a web game, &lt;a href=/animalist&gt;List Animals Until Failure&lt;/a&gt;. You just name as many animals as you can. Play it and show me how far you get.

&lt;details&gt;&lt;summary&gt;Inspired by a meme&lt;/summary&gt;
&lt;p style=text-align:center&gt;&lt;img src=/post_assets/brain_workout.jpg alt=&quot;&quot;&gt;
&lt;/details&gt;

&lt;p&gt;Each animal grants a point. You can be vague, but you don’t get extra points for nesting categories. E.g. you only get one point for listing “mammal” &amp; “primate” &amp; “human”, since those aren’t different animals.


&lt;h2 id=how-it-works&gt;How it works&lt;/h2&gt;

&lt;p style=text-align:center;min-height:19em&gt;&lt;img id=stamp alt=&quot;Powered by Wikidata&quot; src=/post_assets/Wikidata_stamp.svg style=width:20em&gt;&lt;/p&gt;

&lt;p&gt;I used Wikidata and Wikipedia. Read on for technical details.

&lt;h2 id=datamining&gt;Datamining&lt;/h2&gt;

&lt;p&gt;This was the sort of datamining project that goes like this:
&lt;ul&gt;
    &lt;li&gt;I can parse [all these entities] and that will be a good start.
    &lt;li&gt;That got me 90% of the way there, but there’s this other case I need to handle.
    &lt;li&gt;Now I’m 95% of the way there, but there’s another edge case.
    &lt;li&gt;Now I’m 98% of the way there, maybe if I parse this other thing too…?
&lt;/ul&gt;


&lt;h3 id=general-strategy&gt;General strategy&lt;/h3&gt;

&lt;p&gt;Mine Wikidata entities representing taxons. Use those to build a &lt;dfn&gt;phylogenic&lt;/dfn&gt; (evolutionary) tree. Get the taxons’ names from Wikipedia (since Wikidata entities link to Wikipedia pages, and Wikipedia has good judgement about what things should be called, and has good redirects). If an entity lacks a Wikipedia article, it’s probably not worth including — or if it is, the player should write a Wikipedia article for it! Also get names from the Wikidata entity itself since I later realized this would cover some missing cases; e.g. &lt;a href=https://en.wikipedia.org/wiki/Person&gt;Person&lt;/a&gt; is its own Wikipedia article, but Wikidata lists it as a name for &lt;a href=https://www.wikidata.org/wiki/Q5&gt;Human&lt;/a&gt;.

&lt;h3 id=combining-sources&gt;Combining sources&lt;/h3&gt;
&lt;p&gt;The Wikidata entity doesn’t always have both taxon data &lt;em&gt;and&lt;/em&gt; name data. For example, &lt;a href=https://www.wikidata.org/wiki/Q146&gt;Cat&lt;/a&gt; represents the common name (and lacks taxon data), while &lt;a href=https://www.wikidata.org/wiki/Q20980826&gt;Felis catus&lt;/a&gt; represents the species (and has poor name data).

&lt;p&gt;How to reconcile this? The &lt;code&gt;taxon known by this common name&lt;/code&gt; property links the two entities, so I use that. Get names from the common name entity and its Wikipedia page; get taxonomy from the species entity. I want to use common names as much as possible ingame; the phylogenic tree is just a means to construct a hierarchy of terminology.


&lt;h3 id=more-cases&gt;More cases&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Handle disambiguation pages: if an animal (as identified by previous steps) is the first (fully-nested wikilink in a wikilist) in a term’s disambiguation page, then recognize that term as the animal. Example: &lt;a href=https://en.wikipedia.org/wiki/Blood_worm&gt;Blood worm&lt;/a&gt;.
  &lt;li&gt;Same with &lt;a href=https://en.wikipedia.org/wiki/Category:Set_index_articles_on_animal_common_names&gt;Category:Set index articles on animal common names&lt;/a&gt;. Example: &lt;a href=https://en.wikipedia.org/wiki/Pumpkin_spider&gt;Pumpkin spider&lt;/a&gt;.
  &lt;li&gt;Same with &lt;a href=https://en.wikipedia.org/wiki/Category:Set_index_articles_on_snakes&gt;Category:Set index articles on snakes&lt;/a&gt; since those aren’t marked with the previous category for some reason. Example: &lt;a href=https://en.wikipedia.org/wiki/Diamondback_rattlesnake&gt;Diamondback rattlesnake&lt;/a&gt;.
  &lt;li&gt;If there’s an animal called “common &lt;b&gt;X&lt;/b&gt;”, then use it as a fallback for “&lt;b&gt;X&lt;/b&gt;”. Example: guessing “&lt;a href=https://en.wikipedia.org/wiki/Coquí&gt;Coquí&lt;/a&gt;” is equivalent to guessing “&lt;a href=https://en.wikipedia.org/wiki/Common_coquí&gt;Common coquí&lt;/a&gt;”.
&lt;/ul&gt;


&lt;h3 id=paraphyly&gt;Paraphyly&lt;/h3&gt;

&lt;p&gt;Ducks, egrets, gnats, buzzards, hawks, mites: none of these are defined solely by a phylogenic taxon; they’re what you might call “form taxa”. In other words: iff it looks like a duck and quacks like a duck, it’s a duck.

&lt;p&gt;Sometimes the game uses the closest common ancestor of the group. So a player who lists “mite” only gets a point for “arachnid” and can’t score separately for “spider”. This is a bummer since tarantulas definitely aren’t mites, but it’s otherwise hard to define “mite” in a strict hierarchy.

&lt;!--&lt;p&gt;(We can find the closest common ancestor from the &lt;code&gt;parent&lt;/code&gt; (or &lt;code&gt;taxon&lt;/code&gt;) attribute of the &lt;code&gt;{{Paraphyletic group}}&lt;/code&gt; infobox.)--&gt;

&lt;p&gt;In other cases, there are better solutions. For example, &lt;a href=https://en.wikipedia.org/wiki/Trout&gt;Trout&lt;/a&gt; doesn’t even have a paraphyletic group infobox, maybe because it’s so colloquial a term, and even if it did, many barely-related fish are called trout. So I manually add a redirect to a single representative for the group: “trout” becomes “brown trout”.

&lt;p&gt;More extreme example: If you know of &lt;a href=https://en.wikipedia.org/wiki/Carcinisation&gt;Carcinization&lt;/a&gt;, you can imagine the difficulty of defining crabs. So “crab” becomes “brown crab”.

&lt;h3 id=away-from-phylogeny&gt;Away from phylogeny&lt;/h3&gt;

&lt;p&gt;A wasp is any Apocritan that isn’t a bee or an ant.

&lt;figure style=max-width:30em;margin:auto;padding:1em;min-height:min(30em,100%);&gt;
&lt;img alt=&quot;Taxonomic tree showing that ants and bees descend from wasps but aren&apos;t considered wasps&quot; src=/post_assets/Wasps_are_Paraphyletic.svg id=tree&gt;
&lt;figcaption style=font-size:small;text-align:center&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Wasps_are_Paraphyletic.svg&quot;&gt;(diagram by several Wikimedia Commons contributors)&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Everything in Apocrita is a wasp, &lt;em&gt;except&lt;/em&gt; bees and ants.

&lt;p&gt;If you’re an entomologist, or an evolutionary biologist, you might say “well, bees and ants are just wasps, really”, and I respect that. But colloquially, bees and ants aren’t wasps. If this game insists on a purely phylogenic approach, then it’s like, come on, I can’t get a point for saying wasp &lt;i&gt;and&lt;/i&gt; ant? That’s unreasonable. If I ask a 2-year-old to list animals and she lists wasp &lt;i&gt;and&lt;/i&gt; ant, I’m not gonna break out the DNA sequences like “Ohh well evolutionarily ants are technically wasps”. I’m gonna say yeah, good job, that’s two animals.

&lt;p&gt;So I promoted bees and ants to siblings of wasps rather than descendants. Now bee, wasp, and ant count as different animals. My animal term hierarchy is thus not phylogenic; phylogeny is just its starting point.

&lt;p&gt;I sorted out other groups, too; for examples, these groups of groups of birds distinguished chiefly by size: crows/ravens, hawks/eagles, ducks/geese/swans. (Ravens are bigger; Eagles are bigger; Geese are bigger and swans are yet bigger.)

&lt;p&gt;My friend &lt;a href=https://devin.gay&gt;Devin&lt;/a&gt; argued for a strictly phylogenic hierarchy:

&lt;blockquote id=devinscript&gt;
  &lt;p&gt;evolutionary biologists are professional animal listers
  &lt;p&gt;so they should be the source of truth
  &lt;p&gt;and I think it’s cool to learn that wasps or egrets or stuff are paraphyletic
&lt;/blockquote&gt;

&lt;p&gt;Phylogeny can be fun (e.g. &lt;a href=https://metazooa.com/&gt;Metazooa&lt;/a&gt;) but that&apos;s not the game I wanted to make. Maybe I’m failing to educate my players about phylogeny, but I’m learning a lot about phylogeny myself; so it averages out, you see.&lt;/p&gt;


&lt;h2 id=performance&gt;Performance&lt;/h2&gt;

&lt;p&gt;Initial page load includes the full list of animals; the game avoids network calls to instantly respond to guesses. Initial load is 18MB compressed, 58 MB decompressed. That&apos;s about how much outlook.com loads &lt;em&gt;while logged out&lt;/em&gt; (19MB compressed, 33MB decompressed) which makes you wonder why a marketing page needs as much information as a list of every animal known to humanity.


&lt;h2 id=visuals&gt;Visuals&lt;/h2&gt;

&lt;p&gt;I learned about SVG filters.

&lt;div style=background-image:url(https://rose.systems/animalist/media/tile_ether.svg) class=bgdemo&gt;
    &lt;p&gt;Here&apos;s the colorful background that shows up when you exceed 50 points. It&apos;s just the raw output of the builtin turbulence filter. I like it.
    &lt;details&gt;&lt;summary&gt;The source code is pretty short.&lt;/summary&gt;
    &lt;pre&gt;
    &amp;lt;svg width=&quot;400&quot; height=&quot;400&quot;&amp;gt;
        &amp;lt;filter id=&quot;f&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;1&quot; height=&quot;1&quot;&amp;gt;
            &amp;lt;feTurbulence numOctaves=&quot;1&quot; baseFrequency=&quot;0.008&quot; stitchTiles=&quot;stitch&quot; /&amp;gt;
        &amp;lt;/filter&amp;gt;
        &amp;lt;rect width=&quot;400&quot; height=&quot;400&quot; filter=&quot;url(#f)&quot; /&amp;gt;
    &amp;lt;/svg&amp;gt;
    &lt;/pre&gt;
    &lt;/details&gt;
&lt;/div&gt;

&lt;div style=background-image:url(https://rose.systems/animalist/media/tile_clouds.svg);background-size:90em id=cloudy class=bgdemo&gt;
    &lt;p&gt;These clouds show up if you list enough birds in a row.
    &lt;details&gt;&lt;summary&gt;The source code is only a little longer.&lt;/summary&gt;
    &lt;pre&gt;
    &amp;lt;svg viewBox=&quot;0 0 400 400&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;
        &amp;lt;filter id=&quot;f&quot; width=&quot;1&quot; height=&quot;1&quot; x=&quot;0&quot; y=&quot;0&quot;&amp;gt;
            &amp;lt;feTurbulence numOctaves=&quot;5&quot; baseFrequency=&quot;0.015&quot; stitchTiles=&quot;stitch&quot;
                          width=&quot;400&quot; height=&quot;400&quot; /&amp;gt;
            &amp;lt;feColorMatrix type=&quot;matrix&quot;
                   values=&quot;0    0    0    1    0
                           0    0    0    1    0
                           0    0    0    1    0
                           0    -.3  -.7  2    0&quot; /&amp;gt;
        &amp;lt;/filter&amp;gt;
        &amp;lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;400&quot; height=&quot;400&quot; style=&quot;filter:url(#f)&quot; /&amp;gt;
    &amp;lt;/svg&amp;gt;
    &lt;/pre&gt;
&lt;/details&gt;
&lt;/div&gt;


&lt;h2 id=emoji-summary&gt;Emoji summary&lt;/h2&gt;

&lt;p&gt;At game over, you get an emoji summary like this:&lt;/p&gt;

&lt;samp style=max-width:40em;display:block;margin:auto;padding:1em;border-style:inset&gt;https://rose.systems/animalist&lt;br&gt;
&lt;br&gt;
144 animals listed&lt;br&gt;

🦀🦞🐦🐦🕊🕊️🦅🦅🐦🐟🐠🦈🦁🐅🐻🙀🐜🐛🐌🐦🐦🐦‍⬛🐦‍⬛🐦𓆣🐪🐊🐬🦈🦈🦈🐟🐡🦔𓇼🕸️🐦‍⬛🕷🐛🐋🐳🐋🫍🐄🦌🐺🐕🦬🦖🦕🐒🦍🦡🦨🐰🐙🐌🪱🪰🐛🦭🐓🦢🦆🐌🐛℥🐆𓅣𓆉🐢🪰🪰🪰🐛🪳🐛🦥🐦🐛🐛🐝
&lt;/samp&gt;

&lt;p&gt;Internally I call the emoji “mononyms” because they aren’t all emoji. Any single-character alias for an animal is a possible mononym for that animal. (Or any more-specific version of that animal; any bird becomes 🐦, unless a more specific mononym applies, such as 🦅 or 🦉.)

&lt;p&gt;Most of these aliases arise from Wikipedia redirects. Wikipedia typically redirects emoji to what they depict, unless the emoji itself is notable&lt;!-- (this is explained at &lt;a href=https://en.wikipedia.org/wiki/WP:REMOJI&gt;WP:REMOJI&lt;/a&gt;)--&gt;. For example, &lt;a href=https://en.wikipedia.org/wiki/🕷&gt;🕷&lt;/a&gt; redirects to &lt;a href=https://en.wikipedia.org/wiki/Spider&gt;Spider&lt;/a&gt;. Some mononyms I had to add manually; e.g. &lt;a href=https://en.wikipedia.org/wiki/🦖&gt;🦖&lt;/a&gt; is somehow notable enough for an article.

&lt;p&gt;&lt;a href=https://en.wikipedia.org/wiki/℥&gt;℥&lt;/a&gt; means ounce (as in the unit), but “ounce” also archaically means &lt;i&gt;snow leopard&lt;/i&gt;. This silly indirection is cute enough to leave in.

&lt;details id=℥&gt;&lt;summary&gt;1600s bestiary excerpt: The Ounce&lt;span id=🝳&gt;&lt;/summary&gt;
&lt;div&gt;
&lt;div lang=en-emodeng&gt;
&lt;p&gt;The Ounce is a moſt cruel Beaſt, of the quantity of a village or maſtiffe Dog, having his face and ears like to a Lions, his body, tail, feet, and nails like a Cats, of a very terrible Aſpect, his teeth ſo ſtrong and ſharp, that he can even cut Wood in ſunder with them; he hath alſo in his nails ſo great ſtrength, that he only fighteth with them, and uſeth them for his greateſt defence…&lt;/p&gt;
&lt;p&gt;The gall of this Beaſt is deadly poyſon, it hateth all creatures, and deſtroyeth them, eſpecially men; and therefore it may well be ſaid to be poſſeſſed with ſome evill ſpirit. It loveth none but his own kinde. And thus much for the Ounce.&lt;/p&gt;
&lt;/div&gt;
&lt;img src=/post_assets/ounce.jpg alt=&quot;Drawing of a snow leopard&quot;&gt;
&lt;/div&gt;
&lt;p style=text-align:center&gt;&lt;cite&gt;&lt;a href=https://archive.org/details/historyoffourfoo00tops/page/441/mode/2up&gt;The History of Four-footed Beaſts and Serpents, p441-442&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=remaining-bugs&gt;Remaining bugs&lt;/h2&gt;

&lt;p&gt;There are still animals requiring manual intervention. &lt;a href=&quot;https://en.wikipedia.org/wiki/Goanna&quot;&gt;Goanna&lt;/a&gt; for example isn&apos;t easily dataminable; it&apos;s a normal article with no infobox, and its Wikidata entity lacks a taxon. Maybe I could iterate over every article in every category like “Reptile common names” and look for a list of animals under a &lt;i&gt;Species&lt;/i&gt; heading, but sometimes it&apos;s headed &lt;i&gt;Taxonomy&lt;/i&gt; or &lt;i&gt;Classification&lt;/i&gt; or &lt;i&gt;Genera&lt;/i&gt;, and sometimes it&apos;s in paragraph or table form. So these cases are staying manual for now.

&lt;p&gt;&lt;a href=/contact&gt;Hit me up&lt;/a&gt; with bug reports. Or ideas. Or complaints, or whatever.&lt;/p&gt;
</description>
        <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
        <link>http://rose.systems/blog/list-animals-until-failure</link>
        <guid isPermaLink="true">http://rose.systems/blog/list-animals-until-failure</guid>
        
        
      </item>
    
      <item>
        <title>new blog</title>
        <description>&lt;p&gt;I want to write an abandoned blog. The kind that has a handful of posts over a year or so and then trails off.

&lt;p&gt;The blog will follow this archetype, 2&amp;ndash;5 posts total:

&lt;ul&gt;
&lt;li&gt;One pretty good, if unreadably boring, blogpost about a project of mine
&lt;li&gt;The lowliest form of human literature: blogging about blogging. Maybe about writing plans, or about the static site generator.
&lt;li&gt;Maybe a final post, after a hiatus, stating intent to get back to writing sometime this year &amp;mdash; or maybe as a New Year&apos;s resolution, so it can be put off until next year &amp;mdash; but then the blog tapers off and never updates again.
&lt;/ul&gt;

&lt;p&gt;I&apos;ll do the blogpost-about-blogging first; it can introduce the goals of the abandoned blog. I won&apos;t really &lt;em&gt;publish&lt;/em&gt; it first, though; I&apos;ll write all the posts in one go and backdate them. Then I can release the abandoned blog in one push instead of taking months or years.

&lt;p&gt;I&apos;d rather write the good blogpost about something recent though, so I&apos;ll date it 2026 to avoid anachronism. So you&apos;ll have to wait a few years for the abandoned blog vibe.

&lt;p&gt;There is a slim chance the whim strikes to write additional posts in the future. If this happens, I&apos;ll include them with real publication dates. I will consider this project a failure if I end up uploading longform blogposts semi-regularly for over a year.

&lt;p&gt;You can find the rest of my blogposts on &lt;a href=/blog&gt;the blog index page&lt;/a&gt;, or below:

&lt;ul&gt;
  
    &lt;li&gt;
      &lt;a href=&quot;/blog/moth&quot;&gt;I helped a moth today&lt;/a&gt;
    &lt;/li&gt;
  
    &lt;li&gt;
      &lt;a href=&quot;/blog/list-animals-until-failure&quot;&gt;about list animals until failure&lt;/a&gt;
    &lt;/li&gt;
  
    &lt;li&gt;
      &lt;a href=&quot;/blog/new-blog&quot;&gt;new blog&lt;/a&gt;
    &lt;/li&gt;
  
&lt;/ul&gt;




&lt;p&gt;^This list is dynamically generated in case something possesses me to write subsequent posts.

&lt;p&gt;I&apos;ll set up an Atom/RSS feed here: &lt;a href=/feed.xml&gt;&lt;img src=/post_assets/feed.svg alt=&quot;RSS&quot; style=height:1em;vertical-align:middle;margin-right:1pt&gt;feed.xml&lt;/a&gt;. If all goes according to plan, you can add it to your reader without getting bothered by notifications.

</description>
        <pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
        <link>http://rose.systems/blog/new-blog</link>
        <guid isPermaLink="true">http://rose.systems/blog/new-blog</guid>
        
        
      </item>
    
  </channel>
</rss>
