<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>OpenNeo Blog</title>
        <link>https://blog.openneo.net</link>
        <atom:link
            href="https://blog.openneo.net/feed.xml"
            rel="self"
        type="application/rss+xml" />
        <description>For Dress to Impress, and uhh maybe other things later!</description>
        <lastBuildDate>Fri, 04 Oct 2024 17:50:46 -0700</lastBuildDate>
        <language>en-us</language>
        
        <item>
            <title>This week in DTI: Performance upgrades!</title>
            <link>
                https://blog.openneo.net/2024/10/03/perf-upgrades.html
            </link>
            
            <author>Matchu</author>
            
            <description>
                
                &lt;p&gt;Hi, everyone! You might’ve noticed earlier this week that DTI had started to
stutter a bit. We experienced a bit of a traffic spike, and pageloads would
sometimes start taking a few seconds. (My phone was ringing off the hook to let
me know!)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024-10-03-perf-upgrades/email.webp&quot; alt=&quot;Screenshot of my email inbox: many emails on Sep 30, from health@openneo.net, saying &amp;quot;GlitchTip: Dress to Impress is down&amp;quot; or &amp;quot;is back up&amp;quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;When we dug into it, there wasn’t any &lt;em&gt;specific&lt;/em&gt; cause—just a bit more pressure
causing our database to max out our server’s CPU a bit too often.&lt;/p&gt;

&lt;p&gt;Rather than just throw more CPU at the problem (always an option, but never a
cheap one!), we popped open the slow query log. We found the worst offenders,
and started getting to work fixing database queries that have &lt;em&gt;always&lt;/em&gt; been a
bit slow—in some cases, for many years!&lt;/p&gt;

&lt;p&gt;Here’s the three big changes we made:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Item searches:&lt;/strong&gt; We
&lt;a href=&quot;https://code.openneo.net/OpenNeo/impress/commit/efda6d74ab6b9405cd563ccc72bb45b4f10eabe3&quot;&gt;sped&lt;/a&gt;
&lt;a href=&quot;https://code.openneo.net/OpenNeo/impress/commit/efda6d74ab6b9405cd563ccc72bb45b4f10eabe3&quot;&gt;up&lt;/a&gt;
some of our tougher filters (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;occupies&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fits&lt;/code&gt;) from taking a couple
seconds at worst, to always nearly instant! &lt;em&gt;(We did this by “caching” more
data about the item’s appearance onto the item record itself.)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Trade listings:&lt;/strong&gt; Earlier this year, we added the Offering/Seeking pages to
Classic DTI, and built them faster than the Impress 2020 versions. Now, we’ve
&lt;a href=&quot;https://code.openneo.net/OpenNeo/impress-2020/commit/067da33025cbf5ed92707efa1558a658135e310e&quot;&gt;deleted&lt;/a&gt;
Impress 2020’s slower version of the page, redirecting to Classic’s faster one
instead. &lt;em&gt;(This brings us closer to &lt;a href=&quot;/2024/09/20/state-of-dti-2024.html#simplicity&quot;&gt;merging
the apps&lt;/a&gt;, too!)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Modeling progress:&lt;/strong&gt; When we’re missing data for new items, we ask for help
at the bottom of the homepage—and we
&lt;a href=&quot;https://code.openneo.net/OpenNeo/impress/commit/03e4233f67935b6e8998904d41305fb41f7660af&quot;&gt;used the same upgrades&lt;/a&gt;
from item searches to make this faster, too. &lt;em&gt;(We also
&lt;a href=&quot;https://code.openneo.net/OpenNeo/impress/commit/fe4db1b60571cbc2b6d295cfc1230f2ebbc6f3bb&quot;&gt;fixed&lt;/a&gt;
the long-standing bug of Maraquan items asking for more help than we need!)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And these changes don’t just affect these features: when our CPU starts to peak,
&lt;em&gt;everything&lt;/em&gt; gets slower. And so when we make the site more efficient and stop
hitting those limits, &lt;em&gt;everything&lt;/em&gt; gets faster!&lt;/p&gt;

&lt;p&gt;Since then, the site has been back to being steady, and I’ve been glad to see
item searches—one of the most common things that happens on the site—run much
faster for everyone!! And it’s always a joy to clean up decade-old code and
bring it closer to what it always deserved to be 🥰&lt;/p&gt;

&lt;p&gt;Hope everyone’s doing well, and that you’ve got fun Halloween plans! I’m excited
to see your pets all dressed up again this year!!&lt;/p&gt;

&lt;h2 id=&quot;job-hunting&quot;&gt;By the way, I’m job-hunting right now!&lt;/h2&gt;

&lt;p&gt;After a few years consulting part-time, I’m looking for a full-time role again!
(The tech layoffs came for me and my family, whuh oh—time to step it up!)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Lore dump!]&lt;/em&gt; In addition to running Dress to Impress for 15 years, I’ve also
been a senior engineer and tech lead at an edtech nonprofit (2015–2020), focused
in B2B partnerships, team mentorship, and building integrated platforms to
support multiple products across teams.&lt;/p&gt;

&lt;p&gt;I’m primarily looking for remote roles hiring in the United States, leveled at
senior or staff—but some of that could be flexible for the right situation!&lt;/p&gt;

&lt;p&gt;Right now, I’m especially interested in:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Consulting firms, especially with a focus in nonprofit&lt;/li&gt;
  &lt;li&gt;Stewarding critical integrations long-term, like identity or payments&lt;/li&gt;
  &lt;li&gt;Shifting to information security, or technical writing&lt;/li&gt;
  &lt;li&gt;Engineering management, for the right human-focused team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you happen to have an opportunity, please
&lt;a href=&quot;mailto:dti-jobs-thank-youuu@matchu.dev&quot;&gt;reach out&lt;/a&gt; and let me know! It’d help
me out a lot.&lt;/p&gt;

&lt;p&gt;Thanks for taking a look!&lt;br /&gt;
&lt;em&gt;—Matchu&lt;/em&gt;&lt;/p&gt;

            </description>
            <pubDate>Thu, 03 Oct 2024 14:47:00 -0700</pubDate>
            <guid>
                https://blog.openneo.net/2024/10/03/perf-upgrades.html
            </guid>
        </item>
        
        <item>
            <title>State of DTI: 2024</title>
            <link>
                https://blog.openneo.net/2024/09/20/state-of-dti-2024.html
            </link>
            
            <author>Matchu</author>
            
            <description>
                
                <![CDATA[
                    <img
                        src="/assets/images/banners/state-of-dti-2024.webp"
                        width="800"
                        height="267"
                    />
                ]]>
                
                &lt;p&gt;Hi, everyone! Hough, this post is a long time coming but I have not had the
power of Words—but today I do, and so we write!&lt;/p&gt;

&lt;p&gt;First off, thank you for being so kind and helpful as you always are! Idk if
y’all know that like, the community does the majority of the work for DTI? We’re
just doing our best to keep the lil guy chuggin’ along underneath you! And thank
you always for your kind words, too 🥺 It helps a lot.&lt;/p&gt;

&lt;p&gt;After 15 years of DTI (what the heck??!), and 15 years of changing
circumstances, &lt;strong&gt;our primary focus is keeping DTI around for the long-haul&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And, I’ll be real with ya, the choices I made in earlier times weren’t really
designed for decades of operation 😅 (DTI I think is now officially older than I
was when I started it? 🤐)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Back at the start, I wasn’t really uhh, good at working with others? So I
never put together a formal team, and I built a codebase that was difficult to
share.&lt;/li&gt;
  &lt;li&gt;And when we rebooted as Impress 2020, I borrowed the technology and design
intuition I’d gained in &lt;em&gt;professional&lt;/em&gt; software—not realizing that’s a level
of complexity designed for teams of &lt;em&gt;fifty&lt;/em&gt; to keep up with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But now, here we are, with &lt;em&gt;two&lt;/em&gt; apps instead of one, and just me as the
operational bottleneck—and my &lt;em&gt;own&lt;/em&gt; life focus has shifted more toward my
personal household, with not even enough volunteer time to even do the work to
&lt;em&gt;hand over the keys&lt;/em&gt; 😖&lt;/p&gt;

&lt;p&gt;So, today, DTI development is mostly a time management game. That’s why I’ve
been focusing on long-term choices I hope will change this in the years to come!
The themes are &lt;strong&gt;stability, simplicity, and sustainability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I also want to call out and thank TNT in particular for their help with
sustainability!! The NeoPass partnership has been a genuine game changer—I’ll
talk about it more below!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;stability&quot;&gt;Stability: Changes to keep the site running&lt;/h3&gt;

&lt;p&gt;At the start of the year, DTI was… uhhh, often broken 😖 We’d have multiple days
of downtime, and I’ll be real with ya: it was &lt;em&gt;mostly&lt;/em&gt; an awareness and time
management problem.&lt;/p&gt;

&lt;p&gt;Issues generally got resolved within hours or minutes of my sitting down to
&lt;em&gt;fix&lt;/em&gt; them, but… my world was large, and there were a lot of messes to clean
beyond just DTI 😭 So, I didn’t discover issues quickly; and when I &lt;em&gt;did&lt;/em&gt;, it
would sometimes take a few hours, or even days, to become available.&lt;/p&gt;

&lt;p&gt;When I was younger, it was easier to be on-call all the time… now, we have to be
smarter about it. So, hey—we’re being smarter!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;🔔 Alerts:&lt;/strong&gt; We’ve set up automated notifications to tell us when the site
goes down, or when a new kind of crash appears. &lt;em&gt;(If you’re curious, we’re
self-hosting &lt;a href=&quot;https://glitchtip.com/&quot;&gt;GlitchTip&lt;/a&gt;!)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;⚙️ Auto-monitoring:&lt;/strong&gt; For crashes that &lt;em&gt;kept&lt;/em&gt; happening, we configured our
machine to intervene. &lt;em&gt;(Like, if the site’s RAM usage gets high, we now
auto-restart it.)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;🧑‍💻 Simplifying:&lt;/strong&gt; Reducing the complexity in our whole dang architecture has
been huge for stability, too. &lt;em&gt;(We’ll talk about it more below!)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these changes, it’s been months since our last like, &lt;em&gt;major&lt;/em&gt; downtime
event. We’re still not as consistent as I’d like to be, but hey—more to come!&lt;/p&gt;

&lt;h3 id=&quot;simplicity&quot;&gt;Simplicity: Cleaning house, clearing hallways&lt;/h3&gt;

&lt;p&gt;The high-level goal here is: &lt;strong&gt;I want to remove Impress 2020, but only once we
no longer need it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Right now, Dress to Impress is a weird combination of apps… I copy-pasted some
of Impress 2020’s best UI changes over, but it all still used the Impress 2020
&lt;em&gt;server&lt;/em&gt; code, even when you’re on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impress.openneo.net&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This both doubled the danger of downtime (if &lt;em&gt;either&lt;/em&gt; server goes down, that’s a
problem for both!), and added networking complexities that are hard to track
down (hello, “error loading species/color”!)&lt;/p&gt;

&lt;p&gt;Like, it’s just not a great situation for stability, &lt;em&gt;or&lt;/em&gt; for removing me as a
bottleneck. There’s too much happening; and too much to know that, right now,
only I know! 😬&lt;/p&gt;

&lt;p&gt;So, here’s some of the changes we’ve been making:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;➡️ Porting features:&lt;/strong&gt; We finally brought Impress 2020’s improved
Offering/Seeking trade listings page into the main app!&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;🌸 Simpler rewrites:&lt;/strong&gt; We reimplemented the item page preview in Rails and
plain HTML/CSS/JS, instead of being a fragile, frankenstein-y React component
using Impress 2020 behind the scenes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;⚡️ Rewiring the wardrobe:&lt;/strong&gt; The main outfit editor still has a &lt;em&gt;couple&lt;/em&gt; API
calls to Impress 2020, but very few! And we’re exploring the possibility of
other ways to simplify that page, too.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;🧹 Ancient code cleanups:&lt;/strong&gt; As I wander the halls of the very old codebase,
I occasionally stumble into something unused, or confusing, or way more
complicated than it needs to be. And so I clean up, so my future roommates can
be comfy here!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of it is invisible work, toward the goal of &lt;em&gt;destroying&lt;/em&gt; things rather
than building them. And that’s important for us, I think: &lt;strong&gt;long-term projects
with small teams survive by having &lt;em&gt;less&lt;/em&gt; stuff going on.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I won’t get too much into why I chose to stick with upgrading the old app (built
with &lt;a href=&quot;https://rubyonrails.org/&quot;&gt;Rails&lt;/a&gt;), instead of keeping the new Impress 2020
app (built with &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt;). Mostly just, I think the Rails
app is simpler tech overall, and leans more into standards that I expect to be
longer-lived—and so I expect it to be easier to maintain and welcome new
collaborators into long-term!&lt;/p&gt;

&lt;p&gt;We’ll check in with y’all before retiring Impress 2020 altogether, I think
there’s still plenty of steps along the way! We’re just doing our best, bit by
bit.&lt;/p&gt;

&lt;h3 id=&quot;sustainability&quot;&gt;Sustainability: Finding more time, with TNT’s help&lt;/h3&gt;

&lt;p&gt;At the start of the year, the reality of the situation was just… I did not
&lt;em&gt;have&lt;/em&gt; volunteer hours available to give to DTI. What time I &lt;em&gt;did&lt;/em&gt; have for
coding was all going toward my technical consulting work, because our house
needed the paycheck, y’know?&lt;/p&gt;

&lt;p&gt;But you might’ve noticed, our site’s uptime got a lot better a few months ago—as
it happens, around the same time we launched NeoPass! This was because &lt;strong&gt;the
NeoPass partnership &lt;em&gt;gave us the time&lt;/em&gt; to invest in other changes like alerts
and monitoring,&lt;/strong&gt; which just weren’t happening on their own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The new “Shopping List” feature was also part of this partnership effort,
too&lt;/strong&gt;—though we didn’t end up building all of the integrated elements we were
hoping for. &lt;em&gt;(We were planning an “Add all to cart” NC Mall link, as a time
saver for folks, and a way to help TNT know that DTI helped you out.)&lt;/em&gt; Ah,
well—that’s product work! I hope it’s been helpful in this form, too 💝&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right now, we’re on a bit of a pause,&lt;/strong&gt; as TNT’s dev team focuses on the Void
Within plot and the other things on their plate. But our next plan is to look
into (spoiler) &lt;del&gt;saving DTI outfits to your Neopets directly&lt;/del&gt; 😳❗️ This is not
a promise, but it &lt;em&gt;is&lt;/em&gt; an intention! It’s the main integration y’all told us
you’d be excited for in that survey we sent out, thank you for that btw!!&lt;/p&gt;

&lt;p&gt;But personally, that’s why I’m excited about this partnership: I think we’ve
done a good job threading the needle on building things that are &lt;strong&gt;genuinely
useful for Neopians, not Worrisome, and ultimately building toward DTI’s own
independent goals, too.&lt;/strong&gt; I’m glad we’re not in the same stagnant place we were
earlier this year, and I hope we can keep moving forward!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(By the way, TNT and I decided not to talk too much about the details of, like,
what we signed and stuff… I would normally say more, y’know? But I hope this
gives you enough to understand the needs and values we’re bringing to it! I
promise I’m giving the community the best I know how to give, always 💜)&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;as-always-thank-you&quot;&gt;As always, thank you!&lt;/h3&gt;

&lt;p&gt;I hope this plan makes sense, as just one guy doing her best to keep the site
online! And I hope this work can help set the stage for more people to join our
team of maintainers in the coming years, too.&lt;/p&gt;

            </description>
            <pubDate>Fri, 20 Sep 2024 13:15:00 -0700</pubDate>
            <guid>
                https://blog.openneo.net/2024/09/20/state-of-dti-2024.html
            </guid>
        </item>
        
        <item>
            <title>NeoPass for DTI</title>
            <link>
                https://blog.openneo.net/2024/03/13/neopass-for-dti.html
            </link>
            
            <author>Matchu</author>
            
            <description>
                
                <![CDATA[
                    <img
                        src="/assets/images/banners/neopass.webp"
                        width="800"
                        height="232"
                    />
                ]]>
                
                &lt;p&gt;Hi, everyone! We’ve got big news coming up: we’re partnering with Neopets to add
“Login with NeoPass” and some other integrations to bring our sites a bit closer
together! Here’s what to expect and why.&lt;/p&gt;

&lt;h2 id=&quot;login-with-neopass&quot;&gt;Login with NeoPass&lt;/h2&gt;

&lt;p&gt;Over time, Neopets is planning to send more users our way, and we want them to
have a smooth experience when they get here!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, new users will be able to click “Login with NeoPass” and use their
existing Neopets account&lt;/strong&gt;, instead of creating a new DTI username and password.
Existing DTI users can also link accounts if they want, too!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All of this functionality is optional, and removable at any time!&lt;/strong&gt; Usernames
and passwords will still work as before—and unlike official Neopets accounts
that need long-term permanent linkage, we intend to offer both linking and
unlinking, so you can always have options.&lt;/p&gt;

&lt;p&gt;We also know that a &lt;em&gt;lot&lt;/em&gt; of the pain points in Neopets and DTI right now come
from transferring info between our sites by hand. &lt;strong&gt;It’s possible this could set
us up for other smoother experiences in the future, too!&lt;/strong&gt; (Nothing like that in
the first release though—we’ve just been chatting with TNT about what might come
next!)&lt;/p&gt;

&lt;h2 id=&quot;links-to-nc-mall&quot;&gt;Links to NC Mall&lt;/h2&gt;

&lt;p&gt;We’re also planning to add &lt;strong&gt;a few links from DTI to the NC Mall&lt;/strong&gt;, which we’ll
do our best to make thoughtful and unobtrusive. There’s two main reasons for
this!&lt;/p&gt;

&lt;p&gt;First off, when Neopets sends users our way, we don’t want them to get confused
and stuck here. Existing DTI users know their way around NC, but new users
probably won’t, so we’ll add a couple hints for how to get their designs onto
Neopets.com.&lt;/p&gt;

&lt;p&gt;The second reason is: we believe Dress to Impress is a critical part of the
Neopets economy, and we want TNT to be able to see that, too. We’ll include &lt;strong&gt;a
lil referral code in the link&lt;/strong&gt; so TNT can know which shoppers came from DTI,
and can evaluate accordingly. (We expect this to be important for us long-term!)&lt;/p&gt;

&lt;h2 id=&quot;why-now&quot;&gt;Why now?&lt;/h2&gt;

&lt;p&gt;Dress to Impress has always been a &lt;strong&gt;very small-staff volunteer project&lt;/strong&gt;, and
it’s been clear to everyone over the past few years that we’re struggling to
balance DTI with the rest of our lives 😖 Work and life and family have their
own needs, and they’ve been increasing!&lt;/p&gt;

&lt;p&gt;And so… there are reasons we’re being careful talking about details right now,
but the gist is: we’re hoping that partnering with TNT will not only help us
fill gaps in the customization user experience, but can also be part of &lt;strong&gt;a more
sustainable future for Dress to Impress long-term&lt;/strong&gt;. I hope we can tell you more
about it soon!&lt;/p&gt;

&lt;p&gt;I know full well, and I’m sure you do too, that partnerships between companies
and fan projects can be complicated. I promise I’m doing my best to represent
you all, focusing on securing what’s right for the community, and keeping in
mind the importance of autonomy! We’ll keep DTI independent, only do things we
believe genuinely serve everyone, and keep a critical eye as we go.&lt;/p&gt;

&lt;p&gt;So, yeah! It’s NeoPass time! We’ll be working on this in the coming months, and
I’ll let you know more along the way. If you have questions or thoughts, please
email me at &lt;a href=&quot;mailto:matchu@openneo.net&quot;&gt;matchu@openneo.net&lt;/a&gt;, and I’ll do my best to listen and help!&lt;/p&gt;

&lt;p&gt;Thanks as always, everyone. We’ll talk more soon! 💖 &lt;em&gt;—Matchu&lt;/em&gt;&lt;/p&gt;

            </description>
            <pubDate>Wed, 13 Mar 2024 12:20:00 -0700</pubDate>
            <guid>
                https://blog.openneo.net/2024/03/13/neopass-for-dti.html
            </guid>
        </item>
        
    </channel>
</rss>
