This tool is an ongoing experiment in better HTML checking, and its behavior remains subject to change

Showing results for https://www.fourisland.com/

Checker Input

Show

  1. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 5, column 1; to line 5, column 55

    d</title><meta name="csrf-param" content="authenticity_token" /><meta

  2. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 6, column 1; to line 6, column 123

    token" /><meta name="csrf-token" content="RJe1v2anm8SgwpW34Fe8tFRYVPGrbYB40lYIzfZau1eoPwCfTcuq_LGLK1OrBOr0Pqv5VjqbVOE3r9RyP33l-A" /><link

  3. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 7, column 1; to line 7, column 157

    33l-A" /><link rel="stylesheet" href="/assets/main-c3791b181449ef41c78a0ff7af3e01bd55b4762c114f12cd5d809676d3fbcf0f.css" media="all" data-turbolinks-track="reload" /><scri

  4. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 35, column 1; to line 35, column 99

    <ul><li><img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" /><a hr

  5. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 35, column 1; to line 35, column 99

    <ul><li><img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" /><a hr

  6. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 39, column 1; to line 39, column 100

    /li><li><img src="/assets/tag_green-c53f0bbae24a8561b580aee7839803630cac7196572ac588ecba067ba2cf519a.png" /><a re

  7. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 39, column 1; to line 39, column 100

    /li><li><img src="/assets/tag_green-c53f0bbae24a8561b580aee7839803630cac7196572ac588ecba067ba2cf519a.png" /><a re

  8. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 43, column 1; to line 43, column 101

    /li><li><img src="/assets/tag_orange-2232042ad5b1a612274e5c3e8915a506093f03fb82512750aeb82012227dbbe3.png" /><a hr

  9. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 43, column 1; to line 43, column 101

    /li><li><img src="/assets/tag_orange-2232042ad5b1a612274e5c3e8915a506093f03fb82512750aeb82012227dbbe3.png" /><a hr

  10. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 47, column 1; to line 47, column 99

    /li><li><img src="/assets/tag_pink-52ef37efa51b757bb5ef0dbf47dad6d437c65146a6a3fb32209daead246e1f00.png" /><a hr

  11. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 47, column 1; to line 47, column 99

    /li><li><img src="/assets/tag_pink-52ef37efa51b757bb5ef0dbf47dad6d437c65146a6a3fb32209daead246e1f00.png" /><a hr

  12. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 58, column 1; to line 58, column 100

    <ul><li><img src="/assets/book_open-8bd44dedf43b1a576fbf32a97934a92a703b2d19c4ace265b8c9d8512e9d300b.png" /><a hr

  13. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 58, column 1; to line 58, column 100

    <ul><li><img src="/assets/book_open-8bd44dedf43b1a576fbf32a97934a92a703b2d19c4ace265b8c9d8512e9d300b.png" /><a hr

  14. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 62, column 1; to line 62, column 99

    /li><li><img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" /><a hr

  15. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 62, column 1; to line 62, column 99

    /li><li><img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" /><a hr

  16. Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

    From line 66, column 1; to line 66, column 95

    /li><li><img src="/assets/feed-5bb406880f456fd0fe4858a482696abeaede4262fdc29053346c5fdc92d5d216.png" /><a hr

  17. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 66, column 1; to line 66, column 95

    /li><li><img src="/assets/feed-5bb406880f456fd0fe4858a482696abeaede4262fdc29053346c5fdc92d5d216.png" /><a hr

  18. Error: Duplicate ID blog-post.

    From line 120, column 1; to line 120, column 24

    article><article id='blog-post'><head

  19. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  20. Error: Duplicate ID blog-content.

    From line 136, column 1; to line 136, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p><e

  21. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  22. Error: Duplicate ID blog-post.

    From line 161, column 1; to line 161, column 24

    article><article id='blog-post'><head

  23. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  24. Error: Duplicate ID blog-content.

    From line 177, column 1; to line 177, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p><s

  25. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  26. Error: Duplicate ID blog-post.

    From line 200, column 1; to line 200, column 24

    article><article id='blog-post'><head

  27. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  28. Error: Duplicate ID blog-content.

    From line 215, column 1; to line 215, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>I&

  29. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  30. Error: Attribute align not allowed on element blockquote at this point.

    From line 218, column 1; to line 218, column 49

    FAQ!</p><blockquote align="center" class="twitter-tweet"><p di

    Attributes for element blockquote:
    Global attributes
    cite — Link to the source of the quotation or more information about the edit
  31. Warning: The charset attribute on the script element is obsolete.

    From line 222, column 1; to line 222, column 76

    ckquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></scri

  32. Error: Duplicate ID blog-post.

    From line 238, column 1; to line 238, column 24

    article><article id='blog-post'><head

  33. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  34. Error: Duplicate ID blog-content.

    From line 253, column 1; to line 253, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>I&

  35. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  36. Error: Duplicate ID blog-post.

    From line 272, column 1; to line 272, column 24

    article><article id='blog-post'><head

  37. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  38. Error: Duplicate ID blog-content.

    From line 287, column 1; to line 287, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>I

  39. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  40. Info: Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.

    From line 293, column 52; to line 293, column 210

    ne-block"><img alt="There's some difficult platforming to be done here, but you won't be seeing much of it." src="/uploads/pictures/10/content_RunawayFerrisWheel.png" /><figc

  41. Error: Duplicate ID blog-post.

    From line 314, column 1; to line 314, column 24

    article><article id='blog-post'><head

  42. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  43. Error: Duplicate ID blog-content.

    From line 329, column 1; to line 329, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>I

  44. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  45. Error: Duplicate ID blog-post.

    From line 356, column 1; to line 356, column 24

    article><article id='blog-post'><head

  46. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  47. Error: Duplicate ID blog-content.

    From line 371, column 1; to line 371, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>I&

  48. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  49. Error: Duplicate ID blog-post.

    From line 390, column 1; to line 390, column 24

    article><article id='blog-post'><head

  50. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  51. Error: Duplicate ID blog-content.

    From line 403, column 1; to line 403, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>Re

  52. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  53. Error: Duplicate ID blog-post.

    From line 426, column 1; to line 426, column 24

    article><article id='blog-post'><head

  54. Warning: The first occurrence of ID blog-post was here.

    From line 82, column 19; to line 82, column 42

    'content'><article id='blog-post'><head

  55. Error: Duplicate ID blog-content.

    From line 440, column 1; to line 440, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>Du

  56. Warning: The first occurrence of ID blog-content was here.

    From line 97, column 1; to line 97, column 74

    </header><blockquote class='entry-content bubble rounded bottom' id='blog-content'><p>It

  57. Warning: Possible misuse of aria-label. (If you disagree with this warning, file an issue report or send e-mail to www-validator@w3.org.)

    From line 461, column 67; to line 461, column 130

    gination"><span class="previous_page disabled" aria-label="Previous page">&#8592

  58. Warning: Possible misuse of aria-label. (If you disagree with this warning, file an issue report or send e-mail to www-validator@w3.org.)

    From line 461, column 155; to line 461, column 214

    us</span> <em class="current" aria-label="Page 1" aria-current="page">1</em>

  59. Warning: This document appears to be written in English. Consider adding lang="en" (or variant) to the html start tag.

    From line 1, column 16; to line 2, column 6

    TYPE html><html><head

There were errors.

Source

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Four Island</title>
  5. <meta name="csrf-param" content="authenticity_token" />
  6. <meta name="csrf-token" content="RJe1v2anm8SgwpW34Fe8tFRYVPGrbYB40lYIzfZau1eoPwCfTcuq_LGLK1OrBOr0Pqv5VjqbVOE3r9RyP33l-A" />
  7. <link rel="stylesheet" href="/assets/main-c3791b181449ef41c78a0ff7af3e01bd55b4762c114f12cd5d809676d3fbcf0f.css" media="all" data-turbolinks-track="reload" />
  8. <script src="/assets/application-13ca1c27a5cfc47eb068e103fd0dd63474cd23980d600e551ec087323e77ea7b.js" data-turbolinks-track="reload"></script>
  9. <meta property="og:site_name" content="Four Island">
  10. </head>
  11. <body id='main-body'>
  12. <div id='container'>
  13. <div id='page-header'>
  14. <header id='banner'>
  15. <h1><a href="https://www.fourisland.com/">Four Island</a></h1>
  16. </header>
  17. </div>
  18. <div id='page-body'>
  19. <div id='sidebar'>
  20. <div class='sidebar-module'>
  21. <blockquote class='pimped bubble rounded bottom'>
  22. <h2>I'm Hatkirby.</h2>
  23. <p>Coding is what I do. I make a lot of things, including Twitter bots. I really like Pokémon, and I write about it a lot.</p>
  24. <p>B.S. in CS, Carnegie Mellon 2017</p>
  25. </blockquote>
  26. <cite class='bubble'>
  27. <strong>Hatkirby</strong> on Four Island
  28. </cite>
  29. </div>
  30. <div class='sidebar-module fun-links'>
  31. <div class='bubble rounded'>
  32. <h2>My stuff</h2>
  33. <ul>
  34. <li>
  35. <img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" />
  36. <a href="https://code.fourisland.com/">Projects</a>
  37. </li>
  38. <li>
  39. <img src="/assets/tag_green-c53f0bbae24a8561b580aee7839803630cac7196572ac588ecba067ba2cf519a.png" />
  40. <a rel="me" href="https://beppo.online/@starlight">Mastodon</a>
  41. </li>
  42. <li>
  43. <img src="/assets/tag_orange-2232042ad5b1a612274e5c3e8915a506093f03fb82512750aeb82012227dbbe3.png" />
  44. <a href="https://archiveofourown.org/users/StarlightSystem">Fanfiction</a>
  45. </li>
  46. <li>
  47. <img src="/assets/tag_pink-52ef37efa51b757bb5ef0dbf47dad6d437c65146a6a3fb32209daead246e1f00.png" />
  48. <a href="https://www.fourisland.com/poke3">Pokémon</a>
  49. </li>
  50. </ul>
  51. </div>
  52. </div>
  53. <div class='sidebar-module fun-links'>
  54. <div class='bubble rounded'>
  55. <h2>Blog links</h2>
  56. <ul>
  57. <li>
  58. <img src="/assets/book_open-8bd44dedf43b1a576fbf32a97934a92a703b2d19c4ace265b8c9d8512e9d300b.png" />
  59. <a href="https://www.fourisland.com/blog">Archive</a>
  60. </li>
  61. <li>
  62. <img src="/assets/tag_blue-9ef6f6f282900d978fbfbf71a4236ca1de34e59ee8bf74b1d8e503e04f685752.png" />
  63. <a href="https://www.fourisland.com/tags">Tag cloud</a>
  64. </li>
  65. <li>
  66. <img src="/assets/feed-5bb406880f456fd0fe4858a482696abeaede4262fdc29053346c5fdc92d5d216.png" />
  67. <a href="https://www.fourisland.com/blog.atom">Atom feed</a>
  68. </li>
  69. </ul>
  70. </div>
  71. </div>
  72. <div class='sidebar-module'>
  73. <div class='bubble rounded'>
  74. <h2>Meta</h2>
  75. <ul>
  76. <li><a href="/users/sign_in">Log in</a></li>
  77. </ul>
  78. </div>
  79. </div>
  80. </div>
  81. <div id='main'>
  82. <div id='content'><article id='blog-post'>
  83. <header>
  84. <div class='post-calendar post-date-1'>
  85. <span class='post-month'>OCT</span>
  86. <span class='post-day'>22</span>
  87. </div>
  88. <div class='blog-title'>
  89. <h2><a href="/blog/return-of-the-quotes">Return of the Quotes</a></h2>
  90. <div class='post-author'>Hatkirby</div>
  91. <ul class='post-tag-3'>
  92. <li><a href="https://www.fourisland.com/tags/updates">updates</a></li>
  93. <li><a href="https://www.fourisland.com/tags/quotes">quotes</a></li>
  94. </ul>
  95. </div>
  96. </header>
  97. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  98. <p>It keeps happening. <a href="https://www.fourisland.com/quotes">The Four Island Quotes Database</a> is back.</p>
  99. <p>I&#39;m always excited about memorializing stuff. The interactions I have with my friends are a treasure, and I want to remember them and get to enjoy them again and again. I don&#39;t really trust third-party services like Discord to stay up forever, or continue to allow me easy access to old conversations. I prefer to own my data whenever possible.</p>
  100. <p>And that&#39;s why I semi-rewrote the Quotes DB <em>again</em> (well, I took the standalone Quotes DB I implemented in Rails for <a href="http://www.fourisland.com/blog/four-island-3/">Four Island 3</a> and integrated it into my current website). That&#39;s why I made sure to preserve all of the old quotes, even if they involve people I no longer talk to -- my past self considered them important enough to memorialize, so I&#39;ll respect that. That&#39;s also why I spent hours going through Discord, finding conversations to archive. And when I say that, I mean that there are over a <em>hundred</em> new quotes in the Quotes DB.</p>
  101. <p>It&#39;s actually kind of wild -- <a href="https://www.fourisland.com/quotes/512">the last quote from the FI3 era</a> was submitted in January of 2014. Then, almost <em>ten full years</em> pass, and 100 quotes get posted within the span of two days. The <a href="https://www.fourisland.com/quotes/513">first new quote</a> even mentions being raised from the dead. Classic.</p>
  102. <a href="/blog/return-of-the-quotes">Read more...</a>
  103. </blockquote>
  104. <cite class='bubble'>
  105. <strong>Hatkirby</strong>
  106. on
  107. October 22nd, 2023 at 8:17:50pm
  108. </cite>
  109. <div class='post-vote' id='blog-vote-section-432'>
  110. <span class='vote-link' id='blog-upvote-link-432'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/return-of-the-quotes/upvote">👍</a></span>
  111. <span class='post-rating' id='blog-rating-432'>0</span>
  112. <span class='vote-link' id='blog-downvote-link-432'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/return-of-the-quotes/downvote">👎</a></span>
  113. </div>
  114. </article>
  115. <article id='blog-post'>
  116. <header>
  117. <div class='post-calendar post-date-1'>
  118. <span class='post-month'>OCT</span>
  119. <span class='post-day'>17</span>
  120. </div>
  121. <div class='blog-title'>
  122. <h2><a href="/blog/eclipse-skip">Skipping the Eclipse in The Witness</a></h2>
  123. <div class='post-author'>Hatkirby</div>
  124. <ul class='post-tag-3'>
  125. <li><a href="https://www.fourisland.com/tags/video%20games">video games</a></li>
  126. <li><a href="https://www.fourisland.com/tags/speedrunning">speedrunning</a></li>
  127. <li><a href="https://www.fourisland.com/tags/the%20witness">the witness</a></li>
  128. </ul>
  129. </div>
  130. </header>
  131. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  132. <p><em>How many of you here have personally witnessed a total eclipse of the sun? To stand, one day, in the shadow of the moon is one of my humble goals in life.</em></p>
  133. <p><strong>(Spoiler warning for The Witness)</strong></p>
  134. <p>Most of the people reading this blog probably know that I am fond of a video game called <a href="http://the-witness.net/">The Witness</a>. &quot;Fond&quot; may not be a strong enough word -- it&#39;s my favourite game I&#39;ve ever played, and I&#39;ve been speedrunning it for over three years at this point. If you don&#39;t know what it is, it&#39;s a puzzle game set in a 3D environment, where you solve grid puzzles on screens scattered across a deserted island. It&#39;s all about epiphany-driven gameplay; the game doesn&#39;t tell you anything about how the puzzles work. You have to figure it out yourself, and when you do it&#39;s usually a really satisfying moment.</p>
  135. <p>Now, I&#39;ve been playing this game for a long time, and I&#39;ve memorised the solutions to every single puzzle. Most of the time, speedruns of this game are pretty straightforward. You have to solve certain sets of puzzles in order to get to a specific goal, be it the main end of the game, or the secret end, or the post-game level, etc. And in order to be fast at that, you have to 1) know the solutions to the puzzles, and 2) be skilled at inputting them. Both of these requirements allow for you to get gradual improvement the more you play, while allowing for a high skill ceiling. And that&#39;s it!</p>
  136. <p>Well... Sort of. If we don&#39;t think about 100%.</p>
  137. <a href="/blog/eclipse-skip">Read more...</a>
  138. </blockquote>
  139. <cite class='bubble'>
  140. <strong>Hatkirby</strong>
  141. on
  142. October 17th, 2023 at 4:48:02pm
  143. </cite>
  144. <div class='post-vote' id='blog-vote-section-431'>
  145. <span class='vote-link' id='blog-upvote-link-431'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/eclipse-skip/upvote">👍</a></span>
  146. <span class='post-rating' id='blog-rating-431'>3</span>
  147. <span class='vote-link' id='blog-downvote-link-431'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/eclipse-skip/downvote">👎</a></span>
  148. </div>
  149. </article>
  150. <article id='blog-post'>
  151. <header>
  152. <div class='post-calendar post-date-1'>
  153. <span class='post-month'>OCT</span>
  154. <span class='post-day'>13</span>
  155. </div>
  156. <div class='blog-title'>
  157. <h2><a href="/blog/goodbye-github">Goodbye Github</a></h2>
  158. <div class='post-author'>Hatkirby</div>
  159. <ul class='post-tag-3'>
  160. <li><a href="https://www.fourisland.com/tags/programming">programming</a></li>
  161. <li><a href="https://www.fourisland.com/tags/sysadmin">sysadmin</a></li>
  162. <li><a href="https://www.fourisland.com/tags/rant">rant</a></li>
  163. </ul>
  164. </div>
  165. </header>
  166. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  167. <p><strong>TLDR: Going forward, I will be hosting most of my code on <a href="https://code.fourisland.com/">code.fourisland.com</a> instead of Github.</strong></p>
  168. <p>At some point in the last decade, Github took over the world of open source development.</p>
  169. <p>I can&#39;t really remember when it happened. Before then, I would maintain my source repositories on my own server. I used CVS at first, before switching to Subversion, then Git, and then Mercurial. I stuck with Mercurial through most of high school, if I recall correctly, although now that I&#39;ve become an avid Git user (perhaps something forced onto me in college?), I&#39;m not sure what it was that I liked about Mercurial over Git. The point is that throughout that time, I just had source repos on my server, and I&#39;d clone them on whatever computer I was doing development on. It was fine.</p>
  170. <p>One of the earliest times I can remember using Github was to host the code for <a href="https://beppo.online/@rawr">Rawr eBooks</a>. It was adapted from a class assignment in my second year of college, so that timeline seems to fit the narrative that school got me into using Git. It was around that time that I also moved away from maintaining my own infrastructure as much. I was no longer using my personal website, Four Island (yes, the one you&#39;re on right now! it&#39;s complicated). I also was not working on the kind of projects I had worked on in high school anymore.</p>
  171. <a href="/blog/goodbye-github">Read more...</a>
  172. </blockquote>
  173. <cite class='bubble'>
  174. <strong>Hatkirby</strong>
  175. on
  176. October 13th, 2023 at 3:12:57pm
  177. </cite>
  178. <div class='post-vote' id='blog-vote-section-430'>
  179. <span class='vote-link' id='blog-upvote-link-430'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/goodbye-github/upvote">👍</a></span>
  180. <span class='post-rating' id='blog-rating-430'>1</span>
  181. <span class='vote-link' id='blog-downvote-link-430'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/goodbye-github/downvote">👎</a></span>
  182. </div>
  183. </article>
  184. <article id='blog-post'>
  185. <header>
  186. <div class='post-calendar post-date-3'>
  187. <span class='post-month'>MAR</span>
  188. <span class='post-day'>12</span>
  189. </div>
  190. <div class='blog-title'>
  191. <h2><a href="/blog/im-making-a-mother-3-fangame">Tanetane Island Fangame</a></h2>
  192. <div class='post-author'>Hatkirby</div>
  193. <ul class='post-tag-3'>
  194. <li><a href="https://www.fourisland.com/tags/video%20games">video games</a></li>
  195. <li><a href="https://www.fourisland.com/tags/mother%203">mother 3</a></li>
  196. </ul>
  197. </div>
  198. </header>
  199. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  200. <p>I&#39;ve been talking <a href="https://twitter.com/mysticalgloves">on Twitter</a> a good amount about the fact that I&#39;m making a Mother 3 fangame. I get a lot of questions about it, so I figured it was time to make an FAQ!</p>
  201. <blockquote align="center" class="twitter-tweet">
  202. <p dir="ltr" lang="en">if flint doesn&#39;t have anything nice to say, he shouldn&#39;t say anything at all. i implemented yes/no prompts in my game. <a href="https://twitter.com/hashtag/mother3?src=hash&amp;ref_src=twsrc%5Etfw">#mother3</a> <a href="https://t.co/1FAqCsem6K">pic.twitter.com/1FAqCsem6K</a></p>
  203. &mdash; star comes out of nowhere! (@mysticalgloves) <a href="https://twitter.com/mysticalgloves/status/1360041487971610629?ref_src=twsrc%5Etfw">February 12, 2021</a></blockquote>
  204. <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
  205. <a href="/blog/im-making-a-mother-3-fangame">Read more...</a>
  206. </blockquote>
  207. <cite class='bubble'>
  208. <strong>Hatkirby</strong>
  209. on
  210. March 12th, 2021 at 12:57:50pm
  211. </cite>
  212. <div class='post-vote' id='blog-vote-section-10'>
  213. <span class='vote-link' id='blog-upvote-link-10'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/im-making-a-mother-3-fangame/upvote">👍</a></span>
  214. <span class='post-rating' id='blog-rating-10'>1</span>
  215. <span class='vote-link' id='blog-downvote-link-10'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/im-making-a-mother-3-fangame/downvote">👎</a></span>
  216. </div>
  217. </article>
  218. <article id='blog-post'>
  219. <header>
  220. <div class='post-calendar post-date-4'>
  221. <span class='post-month'>AUG</span>
  222. <span class='post-day'>14</span>
  223. </div>
  224. <div class='blog-title'>
  225. <h2><a href="/blog/ive-washed-my-bots-mouths-out-with-soap">RE: @blessthisdoobie tweeted a slur</a></h2>
  226. <div class='post-author'>Hatkirby</div>
  227. <ul class='post-tag-3'>
  228. <li><a href="https://www.fourisland.com/tags/bots">bots</a></li>
  229. <li><a href="https://www.fourisland.com/tags/programming">programming</a></li>
  230. </ul>
  231. </div>
  232. </header>
  233. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  234. <p>I&#39;ve made some changes to my Twitter bots recently regarding how they choose the words that they post. This was in response to a situation wherein a follower notified me that @blessthisdoobie posted a tweet containing the n word. In this post, I&#39;d like to discuss 1) how this happened, and 2) what I&#39;ve done to prevent it from happening again. However, I first and foremost want to apologize to the followers of the bot. I take it very seriously when my bots post offensive content, and I want to do what I can to ensure that my bots remain safe and fun for all.</p>
  235. <p>Now, I&#39;d like to explain how this happened in the first place. A large number of my bots use a library I created called verbly for natural language processing. This includes @blessthisdoobie, which uses verbly to find nouns and verbs that rhyme. verbly is a complex library, and the reason behind this issue requires some knowledge of how verbly works. I will provide a brief description of the relevant parts of the library, and if it sounds interesting, I wrote a <a href="https://code.fourisland.com/verbly/plain/docs/object_structure_example.md">motivating example for the data model</a> that you can read later.</p>
  236. <a href="/blog/ive-washed-my-bots-mouths-out-with-soap">Read more...</a>
  237. </blockquote>
  238. <cite class='bubble'>
  239. <strong>Hatkirby</strong>
  240. on
  241. August 14th, 2018 at 9:23:16pm
  242. </cite>
  243. <div class='post-vote' id='blog-vote-section-8'>
  244. <span class='vote-link' id='blog-upvote-link-8'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/ive-washed-my-bots-mouths-out-with-soap/upvote">👍</a></span>
  245. <span class='post-rating' id='blog-rating-8'>1</span>
  246. <span class='vote-link' id='blog-downvote-link-8'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/ive-washed-my-bots-mouths-out-with-soap/downvote">👎</a></span>
  247. </div>
  248. </article>
  249. <article id='blog-post'>
  250. <header>
  251. <div class='post-calendar post-date-4'>
  252. <span class='post-month'>JUN</span>
  253. <span class='post-day'>15</span>
  254. </div>
  255. <div class='blog-title'>
  256. <h2><a href="/blog/these-shine-sprites-are-hard">My Top 5 Hardest Super Mario Sunshine Shines</a></h2>
  257. <div class='post-author'>Hatkirby</div>
  258. <ul class='post-tag-3'>
  259. <li><a href="https://www.fourisland.com/tags/video%20games">video games</a></li>
  260. <li><a href="https://www.fourisland.com/tags/mario">mario</a></li>
  261. </ul>
  262. </div>
  263. </header>
  264. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  265. <p>I love top 10 lists, and I love Super Mario Sunshine, so I&#39;ve been watching a lot of people&#39;s top 10 hardest Shine Sprite videos recently. While they were enjoyable, I found myself disagreeing with some of their choices. So, I decided to do my own! This is really just a top 5 list, though, because while I could find 5 other Shines that I found difficult to do, I didn&#39;t have as much to say about them as these 5. So, without further ado, here are the five Shine Sprites that I considered to be the hardest to get in my playthrough:</p>
  266. <h3>5. The Runaway Ferris Wheel</h3>
  267. <div style="text-align:center">
  268. <figure class="image" style="display:inline-block"><img alt="There's some difficult platforming to be done here, but you won't be seeing much of it." src="/uploads/pictures/10/content_RunawayFerrisWheel.png" />
  269. <figcaption>There's some difficult platforming to be done here, but you won't be seeing much of it.</figcaption>
  270. </figure>
  271. </div>
  272. <p>I don&#39;t usually get angry at video games, but this level made me angry. Not because the platforming was too difficult -- it wasn&#39;t easy, but had I been unencumbered I&#39;m sure I would have found it a welcome challenge. No, the problem is that the camera refuses to allow you to play this level. No matter what you do, no matter how high up the back of the Ferris wheel you get, the camera will be fighting you the entire time, trying to rotate around to the front of the structure. The problem with this is that you are then completely blocked from view. This can happen at any moment, and falling all the way back down to the beginning of the section just because the camera randomly swiveled away is completely infuriating. Regardless of how difficult or easy the actual level is ignoring the camera, the camera is part of gameplay and here is treating itself as a game mechanic.</p>
  273. <a href="/blog/these-shine-sprites-are-hard">Read more...</a>
  274. </blockquote>
  275. <cite class='bubble'>
  276. <strong>Hatkirby</strong>
  277. on
  278. June 15th, 2018 at 7:56:57pm
  279. </cite>
  280. <div class='post-vote' id='blog-vote-section-4'>
  281. <span class='vote-link' id='blog-upvote-link-4'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/these-shine-sprites-are-hard/upvote">👍</a></span>
  282. <span class='post-rating' id='blog-rating-4'>1</span>
  283. <span class='vote-link' id='blog-downvote-link-4'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/these-shine-sprites-are-hard/downvote">👎</a></span>
  284. </div>
  285. </article>
  286. <article id='blog-post'>
  287. <header>
  288. <div class='post-calendar post-date-3'>
  289. <span class='post-month'>JUL</span>
  290. <span class='post-day'>2</span>
  291. </div>
  292. <div class='blog-title'>
  293. <h2><a href="/blog/i-caught-mewtwo-using-the-imprison-method">Catching Mewtwo: The Imprison Method</a></h2>
  294. <div class='post-author'>Hatkirby</div>
  295. <ul class='post-tag-3'>
  296. <li><a href="https://www.fourisland.com/tags/video%20games">video games</a></li>
  297. <li><a href="https://www.fourisland.com/tags/pok%C3%A9mon">pokémon</a></li>
  298. </ul>
  299. </div>
  300. </header>
  301. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  302. <p>I recently spent some time coming up with and then executing an overly convoluted plan for <a href="https://feffernoo.se/says/i-caught-raikou-in-pokemon-firered">catching Raikou in Pokémon FireRed</a>. It was a lot of fun, and I wanted to see what I could come up with next. However, I&#39;ve already caught all three of the legendary birds, and to catch Entei and Suicune I can use the same method I used to catch Raikou. So what&#39;s left? Only the &quot;final boss&quot; (so to say) of the Kanto based games: Mewtwo.</p>
  303. <p>A challenge it is! Mewtwo is one of the hardest Pokémon to catch in FireRed (depending on how you feel about the roaming legendaries), and since I don&#39;t want to use my Master Ball, I tried to figure out what I could do to make the encounter easier. To formalize things a bit, I came up with some rules reminiscent of what I did last time:</p>
  304. <ol>
  305. <li>Don&#39;t use a Master Ball. No exceptions!</li>
  306. <li>Avoid trading with a Hoenn game; that is, if possible, only use Pokémon and items obtainable in Pokémon FireRed and LeafGreen. This rule is breakable on the condition that there doesn&#39;t end up being a satisfying solution that doesn&#39;t require a Hoenn game. However, in the event that I had to break this rule, I also came up with another cute little twist to make the challenge more interesting, which I&#39;ll talk about at another time.</li>
  307. <li>Avoid using a Smeargle (which is only obtainable in Pokémon Emerald anyway). The reason for this is that it&#39;s often not difficult to configure a Smeargle to have whatever moveset you want, and that can make the challenge less fun. It&#39;s not a hard and fast rule, but if there&#39;s a way I can get a Pokémon other than Smeargle to know the moves I need, I&#39;d rather do that.</li>
  308. </ol>
  309. <p>I ended up coming up with 4 different strategies, of which there were two standouts. Unfortunately, all of these strategies involved trading with a Hoenn game, and one of the standouts even involved a Smeargle. I was almost resigned to breaking the Hoenn rule, but I&#39;m happy I didn&#39;t give up, because I eventually figured out a way to modify the Smeargle method such that it no longer required Smeargle or even Hoenn! This plan is possibly (probably) even more complicated than the method I used to catch Raikou, and I had a lot of fun with it. I present to you: <em>The Imprison Method</em>.</p>
  310. <a href="/blog/i-caught-mewtwo-using-the-imprison-method">Read more...</a>
  311. </blockquote>
  312. <cite class='bubble'>
  313. <strong>Hatkirby</strong>
  314. on
  315. July 2nd, 2017 at 10:48:02pm
  316. </cite>
  317. <div class='post-vote' id='blog-vote-section-2'>
  318. <span class='vote-link' id='blog-upvote-link-2'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/i-caught-mewtwo-using-the-imprison-method/upvote">👍</a></span>
  319. <span class='post-rating' id='blog-rating-2'>1</span>
  320. <span class='vote-link' id='blog-downvote-link-2'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/i-caught-mewtwo-using-the-imprison-method/downvote">👎</a></span>
  321. </div>
  322. </article>
  323. <article id='blog-post'>
  324. <header>
  325. <div class='post-calendar post-date-3'>
  326. <span class='post-month'>JUL</span>
  327. <span class='post-day'>2</span>
  328. </div>
  329. <div class='blog-title'>
  330. <h2><a href="/blog/i-caught-raikou-in-pokemon-firered">How I caught Raikou in Pokemon FireRed</a></h2>
  331. <div class='post-author'>Hatkirby</div>
  332. <ul class='post-tag-3'>
  333. <li><a href="https://www.fourisland.com/tags/video%20games">video games</a></li>
  334. <li><a href="https://www.fourisland.com/tags/pok%C3%A9mon">pokémon</a></li>
  335. </ul>
  336. </div>
  337. </header>
  338. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  339. <p>I&#39;m currently working on completing my generation III Pokédex, which is fun but also rather challenging. One of the reasons for this is the existence of roaming legendaries. The game I&#39;m currently playing is FireRed, and my starter Pokémon was Squirtle, so the roaming legendary I&#39;m dealing with is Raikou, but the strategy I&#39;ll be describing works no differently in LeafGreen, and should work well catching Entei as well. Suicune, for reasons detailed later, is actually a lot easier to catch, and doesn&#39;t require such a convoluted plan. Well, nothing <em>requires</em> a convoluted plan like this, but it&#39;s a lot more fun this way.</p>
  340. <p>I maintain that the only Pokémon I could justify using a Master Ball on would be Arceus, and since the Azure Flute was never distributed and it&#39;s impossible to legitimately access the Hall of Origin, it seems like there&#39;s going to be a lot of unused Master Balls lying around in my bags. No matter, though, because not using a Master Ball means I can come up with a more interesting strategy for catching the hard-to-catch Pokémon. Another limitation that I imposed on myself here was that I decided only to use Pokémon catchable (or obtainable through trading with an NPC) in FireRed (although all the Pokémon I use are also obtainable in LeafGreen). If you allow yourself to use Pokémon from Emerald or Colosseum/XD, you may be able to come up with a different strategy, but I chose not to, and not just because I do not currently have any of those games in my possession.</p>
  341. <a href="/blog/i-caught-raikou-in-pokemon-firered">Read more...</a>
  342. </blockquote>
  343. <cite class='bubble'>
  344. <strong>Hatkirby</strong>
  345. on
  346. July 2nd, 2017 at 10:38:54pm
  347. </cite>
  348. <div class='post-vote' id='blog-vote-section-1'>
  349. <span class='vote-link' id='blog-upvote-link-1'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/i-caught-raikou-in-pokemon-firered/upvote">👍</a></span>
  350. <span class='post-rating' id='blog-rating-1'>1</span>
  351. <span class='vote-link' id='blog-downvote-link-1'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/i-caught-raikou-in-pokemon-firered/downvote">👎</a></span>
  352. </div>
  353. </article>
  354. <article id='blog-post'>
  355. <header>
  356. <div class='post-calendar post-date-1'>
  357. <span class='post-month'>SEP</span>
  358. <span class='post-day'>9</span>
  359. </div>
  360. <div class='blog-title'>
  361. <h2><a href="/blog/tinkering-with-a-vintage-macintosh-part-1">Tinkering With A Vintage Macintosh: Part 1</a></h2>
  362. <div class='post-author'>Hatkirby</div>
  363. <ul class='post-tag-3'>
  364. </ul>
  365. </div>
  366. </header>
  367. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  368. <p>Recently, I came into possession of an original Macintosh 128K; you know, the January 1984 Macintosh that was previewed to the world by a confusing but extremely memorable SuperBowl ad involving a sledgehammer entering Bill Gates&#39;s face. The moment I laid my eyes on this beautifully old piece of hardware, there was but one thought in my mind: I have to write a retro platformer for this thing.</p>
  369. <p>This statement doesn&#39;t require too much elaboration, but I will remind the world about my still-in-progress game &quot;Aromatherapy&quot;, which was supposed to be an exploration platformer that twanged at one&#39;s retro heartstrings by presenting itself as the screen of a CRT monitor. An idea I was particularly proud of in the conception of Aromatherapy was that the monitor was supposed to start glitching and breaking more and more as you advanced in the game. A lot of the idea was based around how much nostalgia I have for a time period of computing I did not even live through. While I haven&#39;t worked on Aromatherapy in some months now (since March), I am interested in continuing work on it again when inspiration strikes me again. Until then, I&#39;ve decided to occupy myself with a perhaps even more inane venture.</p>
  370. <p>So, there&#39;s the goal: write a platformer for the Macintosh 128K. Whether or not this platformer runs on the Mac OS or is just 68k assembly inside a beautiful Macintosh box is yet to be decided. However, for this post, I have decided to focus on a slightly smaller goal: getting the Macintosh to boot. Therein lies the first problem of this post:</p>
  371. <p><strong>Problem 1: I do not have a Macintosh 128K system disk.</strong></p>
  372. <a href="/blog/tinkering-with-a-vintage-macintosh-part-1">Read more...</a>
  373. </blockquote>
  374. <cite class='bubble'>
  375. <strong>Hatkirby</strong>
  376. on
  377. September 9th, 2015 at 1:00:00am
  378. </cite>
  379. <div class='post-vote' id='blog-vote-section-19'>
  380. <span class='vote-link' id='blog-upvote-link-19'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/tinkering-with-a-vintage-macintosh-part-1/upvote">👍</a></span>
  381. <span class='post-rating' id='blog-rating-19'>1</span>
  382. <span class='vote-link' id='blog-downvote-link-19'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/tinkering-with-a-vintage-macintosh-part-1/downvote">👎</a></span>
  383. </div>
  384. </article>
  385. <article id='blog-post'>
  386. <header>
  387. <div class='post-calendar post-date-1'>
  388. <span class='post-month'>MAR</span>
  389. <span class='post-day'>4</span>
  390. </div>
  391. <div class='blog-title'>
  392. <h2><a href="/blog/c-plus-plus-references">C++, References, Containers, and Polymorphism</a></h2>
  393. <div class='post-author'>Hatkirby</div>
  394. <ul class='post-tag-3'>
  395. <li><a href="https://www.fourisland.com/tags/programming">programming</a></li>
  396. </ul>
  397. </div>
  398. </header>
  399. <blockquote class='entry-content bubble rounded bottom' id='blog-content'>
  400. <p>During my leave from school, I&#39;ve been funneling my creativity and recuperative free time into making a autobiographical game. I&#39;ve <a href="https://twitter.com/starla4444">tweeted about it</a> quite a bit in the last month. Progress has been slow, due to the illness that I&#39;m recovering from, but the progress made so far has been both fun and illuminating. I&#39;m using C++ for this project, of course not for the first time, but still, using C++ always results in you learning something strange about the language that you probably didn&#39;t want to know.</p>
  401. <p>One of the things I&#39;ve been implementing for my game engine has been an entity-component system. In short, such a system consists of two fundamental objects: entities, and components. Entities are perfectly generic objects that have no properties besides being able to contain components. Components are specialized objects that provide specific functionality to their parent entities. Such a system allows one to decouple a lot of the inner workings of a game engine as well as provide a simple way to mix and match functionality.</p>
  402. <p>So, to start implementing this system, I created an Entity class and a Component class. I wanted Entity to be able to contain Components, but I didn&#39;t want to have to go through the trouble of writing my own linked list implementation, so I used one of the STL containers, <code>list</code>, which provides the exact functionality I am expecting. Well, almost the exact functionality, but we&#39;ll get to that later. Component was implemented as a class with several <code>virtual</code> methods that could be overridden by subclasses to provide their specialized funtionalities.</p>
  403. <a href="/blog/c-plus-plus-references">Read more...</a>
  404. </blockquote>
  405. <cite class='bubble'>
  406. <strong>Hatkirby</strong>
  407. on
  408. March 4th, 2015 at 12:00:00am
  409. </cite>
  410. <div class='post-vote' id='blog-vote-section-15'>
  411. <span class='vote-link' id='blog-upvote-link-15'><a rel="nofollow" class="blog-upvote-link" data-remote="true" data-method="post" href="/blog/c-plus-plus-references/upvote">👍</a></span>
  412. <span class='post-rating' id='blog-rating-15'>1</span>
  413. <span class='vote-link' id='blog-downvote-link-15'><a rel="nofollow" class="blog-downvote-link" data-remote="true" data-method="post" href="/blog/c-plus-plus-references/downvote">👎</a></span>
  414. </div>
  415. </article>
  416. <div role="navigation" aria-label="Pagination" class="pagination"><span class="previous_page disabled" aria-label="Previous page">&#8592; Previous</span> <em class="current" aria-label="Page 1" aria-current="page">1</em> <a rel="next" aria-label="Page 2" href="/?page=2">2</a> <a aria-label="Page 3" href="/?page=3">3</a> <a aria-label="Page 4" href="/?page=4">4</a> <a aria-label="Page 5" href="/?page=5">5</a> <a aria-label="Page 6" href="/?page=6">6</a> <a aria-label="Page 7" href="/?page=7">7</a> <a aria-label="Page 8" href="/?page=8">8</a> <a aria-label="Page 9" href="/?page=9">9</a> <span class="gap">&hellip;</span> <a aria-label="Page 42" href="/?page=42">42</a> <a aria-label="Page 43" href="/?page=43">43</a> <a class="next_page" aria-label="Next page" rel="next" href="/?page=2">Next &#8594;</a></div>
  417. </div>
  418. </div>
  419. </div>
  420. </div>
  421. </body>
  422. </html>

Outline

<h1> Four Island

<h2> I'm Hatkirby.

<h2> My stuff

<h2> Blog links

<h2> Meta

<h2> Return of the Quotes

<h2> Skipping the Eclipse in The Witness

<h2> Goodbye Github

<h2> Tanetane Island Fangame

<h2> RE: @blessthisdoobie tweeted a slur

<h2> My Top 5 Hardest Super Mario Sunshine Shines

<h3> 5. The Runaway Ferris Wheel

<h2> Catching Mewtwo: The Imprison Method

<h2> How I caught Raikou in Pokemon FireRed

<h2> Tinkering With A Vintage Macintosh: Part 1

<h2> C++, References, Containers, and Polymorphism

Used the schema for HTML + SVG 1.1 + MathML 3.0 + RDFa 1.1.

Used the HTML parser. Externally specified character encoding was utf-8.

Total execution time 217 milliseconds.


About this checkerReport an issueVersion: 23.9.13