Timeline of Scribbington

Over the many years Scribbington has been alive, I have been asked many times, “how did Scribbington start?” With the latest move to better code and a clearer path ahead, I started tracking down the earliest conversations and code commits to draw a path. This is what I have uncovered.

Supybot (2006-2008)
The first version of Scribbington was essentially a mostly-vanilla Supybot that was primarily used for IRC convenience commands. One day, someone said, “I wish Scribbington would talk.”

pyBorg (2008-2012)
I found pyBorg and really enjoyed what it did, at first. One of the first things I did was gut out tools that we didn’t need and wrote some cleanup functions, so that the brain would compact and automatically trim itself. There was a fork of pyBorg that some code was taken from to help with this, but eventually I started doing some things with the brain that made it no longer compatible with other pyBorgs. During this time one or two other people tinkered with Scribbington, as I had used it as an Ubuntu Beginners Team project.

Scrib (2012-2015)
Originally scrib was a fork of pyBorg, but after doing more experimentation and running into more walls of frustration, I decided that there needed to be a rewrite. This was a hot mess. Four people contributed to this project, mostly with ideas and feedback. One contributed a lot of time and code, and shared in the frustrations with me. The hot mess only got worse, and by the time it hit version 1.1.0 we were maintaining bots at version 0.8.3, 1.0.0, and 1.1.0.

We flopped the brain around to pickle, json, Redis-based, among other abominations. It was becoming too awful to maintain and the git commit history was horrendous. There were many problems with the transition from Python 2.x to Python 3, as well, since the brain data contained mixed types of strings (binary, unicode, and ascii). A great deal of time was put into building a converter-cleaner, and though one finally did export the data into a usable format, I made an executive decision to drop this path entirely.

Harbinger (2015)
After much waffling and hand-wringing, I decided to fork scrib and slim it down to its bare essentials. Thus harbinger came to be. Harbinger, by design, only ferries data between users and its plugins. By itself, it will only sit and accept input.

In an attempt to reconstruct the old brain in the new system, I realized it would be easier and less awful to just make the working version of Scribbington into a plugin, so that the brain data could be transferred to a better system through the plugin system. This brings us to LegacyBrain.

The LegacyBrain plugin for harbinger is a stripped down (but not efficient) version of scrib 0.8.1 and supports the brain version 0.1.3. The main purpose is to allow full functionality of the original Scribbington while we build other brain alternatives.

Relocating Steam Screenshots

It is a pain to find Steam screenshots in Windows (and to a lesser extent, Linux and OS X). For example, the default location is C:\Program Files (x86)\Steam\userdata\[id]\760\remote, where [id] is your SteamID number. Windows versions since Vista will allow you to create symlinks, which lets you move data without having to change the program’s output location.

You will need to rename or move remote before mklink will work!


You will need Administrator privileges to do this and will need to use cmd. Pressing Win+ x will open a menu where you can select “Command Prompt (admin).” When open, you can type something like: mklink /D "[Steampath]\userdata\[id]\760\remote" "C:\new\path\to\Screenshots\"

For my purpose, I cut and pasted remote to D:\Pictures\ and renamed it to Steam, then did:
mklink /D "C:\Program Files (x86)\Steam\userdata\[id]\760\remote" "D:\Pictures\Steam"


The remote folder in the Steam directory will now have the shortcut arrow to indicate that it’s really in another location. If you are a screenshot junkie like I am, this makes it much easier to curate screenshot galleries outside of the Steam platform.

In Linux and OS X, use ln -s instead of mklink /D.

Location in Linux: ~/.local/share/Steam
Location in OS X: ~/Library/Application Support/Steam
Example: ln -s ~/.local/share/Steam/userdata/[id]/760/remote ~/Pictures/Steam

If this isn’t working for you, send me a tweet or email me!

Milepost 2: Is That a Snake or..?

It has been a very long time since I wrote a more personal entry online. After rediscovering a post of mine on Medium, I felt like I should write some another life update milepost for my future self. Since writing In Pursuit of Happiness, I have hit some really low points. I have not been all sunshine, rainbows, and worked-on-the-first-try code. I sincerely felt that I no longer belonged, that there was no place for me anywhere. I’m on my sixth week of walking uphill back into the land of Happiness, for which I am definitely grateful. This battle is ever-changing and always finding new ways to challenge me.

I have gone through fits and spurts of confusion and chaos, trying to find out what I really like and who I really am. To this end, I tend to go on mass-deletion sprees of online content I have curated, because I feel that it no longer shows who I am. The only place I haven’t deleted in years is Twitter (the last time I deleted that was in 2013), but it is far more accurate a picture of the evolution of Sina. One of the more telling places in the past has been Tumblr, but I have deleted it twice since my last “happiness update.” (I do have one again, which I started today — it is what led me to start this rambling stream-of-conscious writing. It can be found at: sillysina.tumblr.com).

It is strange to feel at peace without having the little voice in the back of my mind nagging at me, saying, “when is the bad stuff gonna happen?” It is also not as uncomfortable to rebuild, as I had been imagining it would be. The whole “coming out” and the shenanigans that ensued has caused me to lose a lot of amazing people that I connected with. I have lost friends and family, but more importantly, I have found my family of people that accept me as I am. I thought I would have stronger feelings of regret, but after putting many hours and days of thought into it, I realize that I am far happier despite the shuffling of the who and what in my life.

Time allowing, I will rebuild connections with some people of my past. I am, however, focusing on forging new relationships and keeping existing ones in good health. It sounds easy, after reading these words, but shedding negative people and habits from my life has been terribly painful at points, but has opened some very important and personal questions in my mind.

Over the course of starting hormones, I have realized that my tolerance for awful people has plummeted. Rather, I have started to feel less dissonance between myself and my physical vessel, which has brought me back to a level of self-assuredness that helps do away with some of my more overly-anxious tendencies. I have recovered some of my previous ways of (positive) thinking and my life feels like it is coming together again. The kitten I am now is a strange conglomeration of what I liked in the past and how I intend on being in the future.

The biggest thing I have done this year is let go of the past, learn from mistakes, and move forward as best I can. Being on hormones has done wonders for the inconsistency of my emotions and of my acceptance of myself. One of the many large roadblocks in my life feels not so monumentally awful.

Some of the changes I have made this year include:

  • stripping and reorganizing The League of Magnificent Scoundrels to no longer be the main focal point of my life and livelihood,
  • getting back into the groove of programming, writing, and gaming, which leads to
  • formalizing WizardSpire Games and sharing with the world the creations we make,
  • making do with what I have and working toward a bigger goal,
  • speaking my piece when I feel it necessary,
  • finally starting hormone replacement therapy,
  • giving no fucks what people think of me,
  • listening to myself,
  • and letting go of things I thought I needed.

Look at all the bothers I give.

Reading some of my old writing, I reconnected with a fragment of my hidden core, and realized that I had lost my path to ataraxia (freedom from stress and worry). I had spent the last few years lamenting that I am a dusty ball of yarn that had been bleached by prolonged exposure to the sun. The more I let myself acknowledge me, the more I hid from the world, out of fear of what others thought, of how I would be perceived. The last few years have been rather uncharacteristic of me, because I dislike hiding.

I have increasingly been more vocal on matters important to me, and it has been positively scary. I feel alive and happy again, and am unafraid to speak my mind, even when I full well know the shit storms it may kick up. Sometimes those storms need to be kicked up, though. Constructive conflict is a good and healthy thing.

Speaking of storms, why did I ever stop writing? I have used a large array of excuses to justify this, even though not writing makes me profoundly unhappy. The consistency of my time programming has also been impacted negatively over the course of the past few years, which also bugs me. I have let negativity block the progress on one of my most favorite projects (Scribbington) and willfully atrophied my creative muscles.

Since taking up the habit of diary writing, I have felt less constipated in the land of figuring out how to put words onto paper (and into documents), as this post might reflect.

The last six weeks feel like they have been some of the consistently happiest weeks in my adult life. I have started to feel like myself, which has positively reflected in how others perceive this silly catgirl-loving Sina. It seems my reflection is working again.

This post is a hot mess but I knew that if I edited, it would never see the light of day.

Thank you for reading my words. ♥

Oh dear, it appears I'm fresh out of fucks.

Goodbye Artemis

Artemis is dead. She died not too long after I last posted about it. Her hard drive is now inside Remedios, my desktop. I have spent the last two months working at my desk, which has been really weird.

I miss having the freedom to work wherever and whenever. Honestly though, it is more of a convenience than anything. Not having a mobile computer beyond my phone has made me rethink bow I prioritize work. I have even started shifting some work back on to paper, which has benefited me in having less distraction. In a way, this has also helped me cope with my compulsive work behavior. It has not, however, helped with trying to “correct” my revolving sleep cycle. But, we won’t talk about that!

Performing server maintenance via ssh through one’s Android phone was initially really neat, but the lack of physical keyboard has grown quite tiresome. I know there are Bluetooth keyboards out there, but I really don’t know if I want to invest in that.

I really am looking forward to finding a replacement for Artemis.

“Not Your Average Pancake” Pancakes

This recipe could easily make 24+ pancakes at 1/4 cup size, but it all depends on what size you make ’em. I generally make ’em rather large, since I tend to cook for myself as well as my crew. In the initial creation of this recipe, I turned out 16 pancakes (four at 1 cup size, the rest at 1/2 cup size). I suggest you halve this for a family of four; this easily feeds our ship’s crew!

If you do halve it, use 1 chicken egg. Substitute the 1 duck egg for 2 chicken eggs, if you do not have access to duck eggs.

  • 3.5 cups all-purpose flour
  • 7 teaspoons baking powder
  • 2 teaspoons salt
  • 2.5 cups milk
  • 1 duck egg
  • 3 tablespoons melted butter


  • In a large bowl, sift together the baking powder, flour, salt and sugar.
  • Make a well in the center and pour in the melted butter, milk, and egg.
  • Mix until smooth.
  • Heat lightly oiled frying pan or griddle over medium high (or whichever you know to be best for your range).
  • Pour or scoop batter onto heated surface, using your preferred measuring size for each pancake.
  • Cook to your preferred stage and serve hot and with your desired toppings and drink.