Discontent

Shi scratches hir face, frowning as hir hand runs across the still too human contours of hir jaw. Shi looks at hir hands and rubs them, sore. Everything was coming up fine, according to hir doctors. Things proceeding slightly quickly, not outside the error bars of the average range though.

Hir ears were pointed, longer. Shi flexes on the nascent muscles, flipping hir ears slightly downwards, and utterly dislodging hir glasses. Hir glasses clatter to the floor, luckily undamaged.

Shi sighs, and picks them up. It wasn't clear if they were going to be necessary forever, since hir eyes were going to be changing over time. That timeline was fuzzier than shi would like,between 2 months and 10 years(whenever the stem cells feel like it essentially).

And from now until then there would be a lot of problems, the glasses will need to be adapted for the nose as it is, then as it will be. Everything will change.

This state has no name because it is intermediate between two more substantial ranges of appearances. But most of all, it's not a state that particularly lends itself to seeing hirself as shi wants to be, the features that shi wants gone most are still upon hir, while the things that have already changed feel disharmonious.

Shi wants to like what's happened so far, but all it has done is turn hir into a wookie. It's all intermediate steps, but, it still doesn't feel good to be somewhere that doesn't feel like it's closer to where you want to be.

daily report(7/12)

I have spent today cleaning up comments from previous commits. I have come to the conclusion that the hooks exist for the sake of the plugins who actually maintain their own state, so the configuration_hook stuff will have to go into the irods core library rather than the executable code.

That way I can put all the authentication initialization in the place where it makes sense, the authentication plugins themselves.

What that might require is adding a hook to load new plugins, but that strikes me as being a potentially thorny situation.

Twenty-Seventh, the Language

I have had an irresistible idea lately. What if you had forth but you had 256 stacks. We can't start there, what if it was based on the venerable MUF(Multi user forth) language, which has some relatively simple typing and generally provides a higher level interface, ameliorating one of the biggest issues I personally have in learning the Forth language proper, the untagged nature of the memory space.

Of course, this comes at a performance decrease, 256 stacks is a lot of context to lug around, and every instruction needs to be able to fit N bytes for the addresses of the operands, which means that the decoding will be more complicated.

There are a couple of types that MUF implements, and so too shall this implement:

  • Integer
  • Floating point(double precision)
  • Strings
  • Dynamic growable arrays
  • Associative ordered dictionaries

Given that I'm not writing a MUCK, I don't need to worry about property or database manipulation directly, and the time-slicing is an entirely optional component rather than an essential way to partition a single core across a hundred processor hungry players.

MUF implements call by name, using a string addressed call. For the sake of consistency, and because I can't imagine how awful it would be to have to specify the entire list of argument stacks in a variable length instruction, the CALL instruction shall be expected to draw from stack 0. This instruction will not normally be invoked by the user, but it may if the user wants to permit a dynamic choice of what word is invoked.

As I am basing it off of MUF, so things like sockets, file handles, etc are understood to be integers.

The language design should permit an unhinged degree of indirection, deception, and flow while writing while permitting an unsettling mixture of register and stack based paradigms.

This is a project which I intend to use for an iRODS rule engine, but my intention is to make this flexible enough that you could, if you wanted, write an actual muck with it.

My current thought on how this should look for the primitive instructions is like this:

pop[0] (pops from the 0th stack)
123[1] (pushes 123 to the 1st stack)
swap[1][1] (swaps the top two items in stack 1)
swap[1][2] (swaps the top item from stack 1, and the top item from stack 2)
rot[1][1][1] (rotate the top 3 items of stack 1)
rot[1][1][2] (rotate the top 2 items of stack 1 and the top item of stack 2)
rot[1][2][1] (rotate the top item of stack 1, the top item of stack 2, and the second item of stack 1)
rot[1][2][3] (rotate the first item of stacks 1,2,and 3)
... etc

In either case, I'm quite excited, this should be a language that will allow all sorts of silly hacks.

Human Replacement Therapy

"So," My dad says, "you're really sure you want to go through with this? I understand that it has effects that are irreversible past a certain point" His eyes are full of concern. It is misplaced concern, I think, but I can tell he is trying to be as kind to my ambitions as he can manage.

"I've wanted this my entire life." I say. He nods and swallows, looking back and forth between myself and my mom, she was concerned too, but I had talked about it more with her. She's the parent I always confided in.

"Well, your mom and I can help you with the cost for now." He says.

It was one of the easier discussions I have had with him.


Informed Consent

The clinic was full of posters that sent tingles up my spine, medical conditions relevant to people such as myself, that were leaving the human species behind, genetically at least, socially, well, that seems more like a longer term arc.

The doctor looks between me and the paperwork that I had signed. I wish I had known that it was informed consent sooner, and the thought of that fills me with regret. "You understand the basic risks here, that there are changes that will not revert over time? That the treatment may cause blood clots?" I nod twice, the second concern was more common in the previous generation of treatments, but it seems easier to say yes than point that out. "Alright," She smiles at me and hands me a tablet, "There's a lot more options here than in human-biased gender dysphoria treatments; fill out this form, then we'll go over the risks of the specific treatments together."

The options were impressively diverse. Species, hybrids, and sex and gender characteristics of course. A disproportionately large number of therians, myself included have issues with that too. It was easy to select the species, but the other options had me flushing imagining the scenarios I could never have fulfilled as I am right now.

I went with a more 'feminine build', dual wielding.

The specifics selected, I hand the tablet back to the doctor, she reads over it, "Your libido will most likely be substantially different in general. The specific options you've selected with regards to digit structure may result in greater susceptibility to repetitive stress injuries, and ergonomic issues with common products. The changes in your skin will result in substantially decreased sweat production, which may lead to hyperthermia, so you will need to take effort keep cool. Your wings will result in increased shoulder and back strain, and you will need to be registered as an ultralight under FAA rules if you wish to fly in controlled airspace."

"Sorry, what?" I ask.

She looks at me very seriously, "The wash around helicopters and fighter jets is very dangerous so you don't want a run in with that sort of thing... Your reproductive cycle will result in periods of high libido coupled with high fertility so plan accordingly. There are no mechanisms that will prevent self fertilization so Plan Accordingly with sexual acts involving penetration. Is that all acceptable?"

I blush at that, is this really a life I want to live? It doesn't sound bad, or like I have to do anything that could result in that.

"Alright, I'll get your prescriptions delivered to your home—" She looks at me with a bit of concern, "You are in a place where that is safe for you, right?" I nod.

"Alright, I'm going to teach you how to do a subcutaneous injection and an intramuscular injection. Do you do know how a suppository works?"

If I'm honest, I love it. I feel like an experiment; tell me what to do so I can be your bat~


I am at home in my bathroom. The syringes and needles are out, the first one is a medicine sold as Pteroperine which apparently treats some unimaginably dire disease in cishumans, the sort of thing where if you come out of it with wings you're still grateful.

The other injection is a modulator of that to alter its expression a bit. The suppository was for the reproductive stuff, weird how that worked out huh.

I pushed the needle into my upper thigh, initially not getting much sensation, until suddenly a lightning bolt travels up my spine, I push the plunger in. Nerves aren't fun to hit. The subcutaneous injection is easier. The suppository just feels weird. Is that really the best way to take it? Searches on Internet 3(The one where you can mute America) found plenty of stories expounding how it worked sufficiently well swallowed, and also a few papers that said as much.

I rub at the area, the bleeding stops quickly. The site feels a little weird, but I haven't received enough injections to know if it's exclusive to this medication or not.

There still wasn't that much literature on the timeline that this stuff worked over, as the other uses were very uncommon and money for researching the needs of therians with it had only recently started to become plentiful.

I head to bed, with the dreams of what might become swirling in my mind.

Daily report(7/1)

Today was successful. I was able to get the control plane to stop crashing and get the configuration tests to run to completion properly. The benchmark is written and reloading the configuration is so much faster than killing the irods server and starting it again.

Of course, that means it has limitations. Currently it is believed that the authentication modules do not work properly when the settings are changed. Honestly, this isn't a very simple program, apache is way simpler than irods, especially in terms of the dependencies, and I'm skeptical that this can be made to work perfectly in all situations.

The problem I had yesterday was the control plane catching the SIGHUP signal and terminating the server. With that fixed, it's working like a charm, all I need to do is see if we can replace some more of the calls to restart in the tests. Might even gain a percent off the tests 🙂

Daily Journal 6/29

Today has been frustrating. It has been beset by constant crashes and test failures. Today it seems that the previous bug where the delay server would die constantly because runtime values were erased appears to have returned with a vengeance.

So far I have been isolating what is causing the particular issue in the reload function(which is now faulting on something)(that something was the .end() sentinel).

After all that, I have it working again, well, working enough to fail tests.

Daily Report(6/27)

Today has been spent addressing comments made on the pull request.

  • Address that the field visibility of acquire_*_lock functions implied that it was meant to be derived
  • Replace rodslog calls in get_server_property with the modern logging system
  • Restore some whitespace

In addition, I updated the rodsLog calls in rodsServer and irods_server_properties.

I still need to rewrite the hook manager to avoid introducing yet another singleton

Daily Report(6/22)

I am starting today by running more of the test suites to see if the changes have broken anything unrelated. So far so good, except for finding that the build+test script was running the specific test "0"(uninitialized variable).

Resource testing seems to fail on the same spots as before erratically. I'm going to assume that that's fixed in main.

I should really pull from main sooner rather than later, rebasing could get tricky if I'm not careful.

Oddly enough, moving the delay server tests towards using the .reload_configuration() made things slower, this seems to be because until now, the delay server did not refresh the amount of time it waits for. I suspect that there will be many more instances of things like that.

Showing that to be true, the delay server will need to be kicked over whenever the number of executors or the size of the queue changes, as it does not appear that boost::asio::thread_pool supports changing the number of threads mid-lifetime. I should be able to swap it out after calling .stop and .join on the thread pool(I will not use placement new for assignment) :p

Right now, it appears to not be killing the delay server properly. Or grandpa(the toplevel irods process) is falling down unexpectedly.

I need to run over some of this stuff with K and T tomorrow.

The delay server should use the hook manager to change the executor count, and it should probably use .reload instead of .capture

Daily report(6/21)

Today I started by deciding to work on what I anticipate to be an especially complicated bit, the authentication system. Later on in the day, I admitted I should work up to that, so instead I'm looking for low hanging fruits.

One of the first things I have found is that the changes in the server_property object are not being recorded adequately. I have fixed this somehow.

I have added '/' as a subobject path character in msi_get_server_property.

The first option that I investigated as to replacing the calls .restart in the tests is test_delay_queue. So far it appears that it may be using the restarts to do things beyond changing settings in many places.

Tests where .restart was replaced with .reload_configuration

  • test_sigpipe_in_delay_server
  • test_delay_queue_with_long_job (no)
  • test_exception_in_delay_server
  • test_static_peps_can_delay_rules_without_session_variables
  • test_session_variables_can_be_used_in_delay_rules_indirectly
  • test_delay_block_with_output_param__3906
  • test_delay_queue_connection_refresh