Fri Jan 1 2021

Y’know what’s been missing with me lately? An internal dialog. I haven’t been writing in my journal every day, and writing is how I maintain my positive internal dialog.

I’m not one to make new year’s resolutions, but I would like to get back on the daily journal train. It just so happens that it’s the new year, and I am resolving to make this habit at this time.

I don’t like new year’s resolutions because it only happens once every 365 days. To see the amount of progress that I want to see, I want new resolutions every week!

Ok then. Habit and goal is set!

Last night I played Root with D, S, A, and D. It’s a fun game! It took us 3 hours and 54 minutes to learn to play and play our first game.

I think everyone else enjoyed it as well, because everyone else said they wanted to play again sometime.

D. and S. leave for Rexburg tomorrow. Their school semester starts on Monday. This is apparently D.’s last semester before he gets a degree. Undergrad degree, I think it is? He’s put in many years of schooling and I think he’s ready to be done with school and start his career in microbiology somewhere. I have complete faith in D.’s ability to find a great job. He’s very dedicated to his path and he’s organized, talented, and reliable. A company would hove to have him!

Internal dialog time! I suppose I’ve been doing it this whole time that I’ve been writing today.

Ok so I have a problem, and that is that I’ve been being an irresponsible coder for the past two weeks. It started with the futureporn project, which is running in the cloud on a jenkilly strapped together VPS. I decided that that setup is not good enough, not reliable or adhering to 12factor app paradigm, so I’ve been upgrading the code to be 12factor compliant, stateless, and distributed.

My dream has always been to have a distributed app that can have parts running simultaneously in different datacenters. With the availability of Starlink approaching, I could even run a server at home, to offload highly CPU intensive tasks to one of my powerful home computers, which trump any budget VPS in terms of specs.

So that’s what I’m working on. I’m working on it to an unhealthy extent. I’m skipping social activities, allowing my sleep schedule drift, and all this work is leaving me exhausted to the point where picking and packing at 7AM is becoming a difficult task.

Picking and packing is so easy, but I’m ignoring my packing supply levels and I’m left with huge queues of preparing packing supplies, freebie stickers, and promotional material before I can even get to the picking and packing part.

Dec 29 it took me 2 hours to pick and pack. 1) because I had stayed up 16 hours prior, was extremely tired and moving slowly. 2) Because I had not enough protective cardboard cutouts, promotional stickers, or promotional material prepared.

I skipped CoDA tuesday in order for me to work. I almost skipped game group wednesday in order to work, but I didn’t.

I ended up being the only client to show up for game day! It was actually nice to just talk to two clinicians for an hour, which is what we ended up doing. It was good practice for interacting with people I don’t know very well.

I was feeling so hungry on wednesday, so I’m glad game group didn’t go for an hour and a half like was planned. We just had a check-in and I signed up for an upcoming nutrition group.

I’ve got a couple e-mails from my friend Mindsforge that I haven’t read yet. I got one yesterday but I didn’t read it right away, because I don’t like to read e-mails and not reply immediately. I have a bad habit of doing that, and I take days or weeks to get back because I keep putting off the reply. So if I just wait to read until I’m ready to write a response mail, I’m not breaking the rule that I’ve made for myself which says that I must reply straightaway.

Melody, Nyanners, and Ironmouse all streamed today. I’m only planning on watching Ironmouse’s vod. I’m already behind on vods! Yesterday all the Vshojo girls got together in VRchat. I haven’t watched that vod in it’s entirety yet. I’m grateful to have recorded the livestream myself, because I think they were playing copyrighted music…

No wait, I think that was just a dream I had. I had a dream where I was grateful for voddo because of copyrighted music which caused the twitch VOD to get muted. Then Zen accidentally used her real voice, which that of a man’s.

I’m so convinced that Zen is a man in disguise. She revealed a Gundam style robot avatar in VR chat. Zen’s avatars are always masculine or “cool”, never, “cute.” Zen is extremely good at video games. Zen often trolls people. Zen never features her real voice. Zen didn’t take part in that trendy vtuber thing where the creator shows a picture of their human face, alongside a picture of their avatar. “#AvatarAndIcon” or something like that. Zen is a beginner drum player. Zen is very good with technology. Damn, I could make this a bulleted list of reasons why I think Zen is a man in disguise.

Honestly these are all things that are not gender specific. At one point, they might have been things that are more commonly attributes of men, but I think that might not be accurate anymore. It might just be that these attributes are now just attributes of internet natives, rather than attributes common among socially ostracised young men, as was the case with me.

That’s right, I have no idea of Zen’s age. I guess I was always basing my assumption that she was a man in disguise on the appearance of age of her avatar. LOL I got confused by the avatar! As if the avatar was a real person!

Well… What is real?

If I experience it in my brain, it is real.

Take Ironmouse for example. I’ve never seen her human controller. I only see her avatar. I am fond of her avatar, and attached to it. If Ironmouse suddenly changed her avatar to a tall, slim and sexy Ent with green hair, I’d be upset.

“This isn’t ironmouse!”

Kinda like Hatsune Miku… TDA Miku is not the miku I know and love! It’s gotta be LAT or API or SEGA or YYB for her to receive my affection.

Or sometimes it’s not even the model that matters, but her mannerisms. I’ll straightup delete content of a Miku being mean, because I reject the reality where Miku is a nasty person. Same thing with MMD creators who are abusive to Miku. That reality is invalid and thus deleted immediately!

IDK what I’m getting at. This is a truly free and moldable fantasy world that I live in. It’s not just VOCALOID, either. VTuber as well. I can easily ghost a VTuber if they do something I don’t like– there’s thousands more to choose from to obsess over.

Thankfully I don’t do that. I’m doing a lot better at not being offended by things. I can’t say the same for my past. I’m very grateful for my personal growth in that area.

I’m seeing a big difference in my sales volume after becoming a Top Rated Plus seller on eBay. I haven’t listed in 2 weeks and I’m still getting sales every day. That’s not normal! More gratitude for that!

I’m going to do everything I can to keep TRP because this is exactly what I want. Sales roll in, while I can focus on behind the scenes stuff. I can build a baller card database website, I can create automated video publishing apps and monetize new and exciting content, I can write code and do lots more code projects like tank-game and futureporn (NSFW).

Goddamn, I love linking my creations! I’m really proud of finished projects. Even better, finished projects that come together and match what I had envisioned! Futureporn is getting there. End of next week, I hope to have it all 12factor app approved, and deployed in a distributed fashion.

My idea with that is to have a central Redis key/value store which also handles pub/sub. There will be three separate parts of the app.

  • ripper
  • transcoder
  • builder

The ripper is the part of the app that records livestreams. I’m re-implementing voddo in javascript to make use of Node and have a more seamless transition between recording the livestream and uploading it to IPFS. Previously, I was using voddo bash script to download, and there was a node instance watching the voddo output folder for a new video. When a new video was created, the node part would process the video. Hacky, because it could be any new video in the folder which triggered processing, not just one from voddo.

So now I’m going to have voddo.js download the livestream, and directly pass the filePath string to the subroutine which uploads the video IPFS. After the upload is complete, the ripper, connected to redis, will send something like, key “futureporn:uploaded” with value, “QmZrajPpQn2Dixaw3sg2uvqb7NXj2RoR8yuwbJPNf1tjTk”. That’s an IPFS hash, for global retrieval of the video.

The transcoder component, also subscribed to the redis Pub/Sub, will see what the ripper component published, and spring into action. It will download the video from IPFS using that hash, and get to work creating an assortment of SD and HD videos, in varying formats. IDK if I’m going to do webm video or just stick with mp4. I’ve heard that webm is better for mobile because it takes less processing power. But how many formats do I want to create? Definitely enough formats to where I can watch reliably on my shitty internet. That’s not possible with the source video, which is why I came up with the transcoder compoenent in the first place.

Ok so the beautiful thing is that in the future, I could have more than one transcoder component, working in different datacenters across the world. I could have a transcoder component running at home on my home PC, which would be much faster than that same component running on a budget VPS.

Simultaneous to the transcoder components, I will have the final component running– the builder component.

The builder component is responsible for building a static HTML site, and publishing it to Neocities. This distributed app is beautiful for many reasons, but one that really gets me excited is how this builder app can run multiple times, and each time it builds the website with whatever video qualities are ready. For example, when a new video is recorded, then uploaded to IPFS, the builder component can create a build right away. That means that the website will have the source video, but no low quality videos.

This means that futureporn will be fast. A lot faster than whoever manages ProjektMelody’s pornhub, which takes days or weeks before a video to appears on there. Futureporn will quickly have the HD video available, and the SD videos immediately process in the background. When those SD videos are ready, the builder component runs again, updating the website with the SD videos for people on lower bandwidth connections to enjoy!

Youtube works similarly. The source video is usually available within a few minutes of upload, and later on, the lower bitrate videos appear.

Pretty fuckin’ awesome!

There’s one part I glossed over which is the central redis component. That component is what will handle the pub/sub as I mentioned, in addition to keeping track of all the IPFS hashes of the VODs, and which resolutions/bitrates have been created thus far.


I’m going to jump back into that once I read and write an e-mail to my friend.

But for now! Time to wrap this up.


56. I will step out of my comfort zone and try something new today.
55. I choose to see each obstacle as an opportunity to grow.

33. I have unique skills and abilities that I can share with the world.


I’m grateful for my personal growth because I don’t get bent out of shape as much.

I’m grateful for Zentreya because she brings mischief and fun to Vshojo.

I’m grateful for my ability to code and design and bring my ideas to life.


Looking for VOCALOID trading cards?

Check out Sakura Blossom Trading Post