HHC: Config Refactor

I’ve had the HugeHonkinConsole set up to derive its configuration information from the place where it’s executed, which is…convenient in a sense, but really a pain in the ass long-term. With multiple versions of the code in the source tree and deployed on different machines, it creates this strange split of data repositories that’s not reasonable to keep track of.

So today’s task is to take the configuration class (which I’ve taken to calling Environment) and add a filename to the constructor so that it can optionally populate the internal configuration dictionary from that instead of just deriving all the file locations and such from argv[0], scriptroot() and such.

With what should prove to be a truly trivial change (yadda yadda “contact with the enemy” notwithstanding) I’ll gain a massive amount of flexibility.

The original code is dead simple because it just doesn’t need to do much at all. In fact, here’s the important bits of the source file (allow for some shitty wordpress code formatting.):

-— Environment.py


import socket
import os
import sys

class Environment:
def __init__(self):
    self.env = dict()

    self.populate_environment()

def populate_environment(self):

    # Independent (system derived) values
    self.env['hostname']   = self._gethostname()
    self.env['scriptroot'] = self._getscriptroot()

    # Derived values
    self.env['dataroot'] = self._get_data_path()

def _gethostname(self):
    return socket.gethostname().lower()

def _getscriptroot(self):
    return os.path.dirname(os.path.realpath(sys.argv[0]))

def _get_data_path(self):
    return self.env['scriptroot'] + '/data/'

——-

It’s really not rocket surgery. A couple system methods to grab the current host name, local run location, and build a config entry or two off of that.

Now I don’t want to change anything that’s IN there because I’ve got a bunch of nonsense that’s relying on it, simple as it is. So I’m really just going to add a couple lines of code to the constructor and a single new method and I…THINK it’ll be done.

So the constructor now looks like this:
——-

def __init__(self,filename=None):
    self.env = dict()

    self.populate_environment()

    if filename:
        self.env['config_file'] = filename
        self.load_config_file(self.env['config_file'])

——-
It takes an optional new argument, the configuration filename and only changes behavior if it’s been provided. That, insofar as it goes, guarantees it won’t break any existing code.

Now let’s take a look at the new load_config_file method.

——-

def load_config_file(self,filename):
    fh = open(filename,'r')
    config = json.load(fh)
    self.env = config
    fh.close()

——-

As you can see there’s almost nothing in there.

  • Open a file
  • Pass the file handle to json.load
  • take the result and assign it to the internal ‘env’ dictionary
  • close the file.

Now…this presumes a fair bit. It’s definitely “happy path” code.

  • The file needs to exist or the code will unceremoniously die.
  • The file needs to be well formed json or the code will unceremoniously die.
  • The implicit assumption is that the json file contains a top-level dictionary with the keys and values we want.

But I’m going to be manually writing the json file. So the danger is really so low as to be nonexistent. Also, you should really only capture errors you can do something about. If this code blows up on a bad json file, I don’t want it doing anything else. Die with an error message. Once these blocks of functionality are out and running on all kinds of different machines with the possibility of complex errors and auto-distributed configuration changes (because why not?) then I may want a more sophisticated error reporting system. But there’s no reason to engineer it to be more resilient than that at this stage. It works or it dies.

So great! I can now wire this in by passing a configuration file name in at the very beginning when the Environment object is created and I’ll be done. Now I just have to go write the config file.

Well…no I don’t. Not really.

Let’s add another method to the same class for shits and giggles:

——-

def save_config_file(self,filename):
    fh = open(filename,'w')
    json.dump(self.env,fh,indent=2,sort_keys=True)
    fh.close()

——-

That saves whatever’s in the current object’s ‘self.env’ dictionary to a well formatted json file.

So NOW I just drop to the command line and interactively execute the following:

——-
> import environment
> env = environment.Environment()
> env.save_config_file(‘foo.json’)
> quit()
——-

There. Now there’s a config file named foo.json with the default parameters already there. It clears up any issues I might have with how to format the file, what parameters need to be fulfilled, and how I can add more. I’ll take the system-specific values out, certainly. But it makes for a great little template.

By putting the configuration, all the magic constants in one single location, then abstracting that information into an external file I’ve taken total control of how the code behaves. The environment object is available all over the code base, so if I need something that looks like a constant or a conceivably configurable parameter, I can just add it to the json file and it will be automatically picked up and populated into the environment object and I can start using it.

Nothing else has to change.

Now here’s an idea: Since I have access to the system routines that tell me exactly where this code is being executed from, I COULD add code that says “IF this Environment object was created with no configuration file name, go to the root directory of this application and look for a file named ‘config.json’ and load that if it’s there.” THEN I wouldn’t even have to specify a filename. I wouldn’t have to change a single line of code outside that file in order to have it start picking up the new config file.

It’s tempting. But I’m not inclined to do it, and here’s why.

Fast forward six months (or, you know, three hours. Because that’s how this stuff happens.) I’m plugging away on something and suddenly the code just dies. Now let’s say the configuration file has been renamed or moved or something.

Think about what the diagnostic process looks will look like, because there’s no way I’ll remember I actually had the Environment module figure out the name of the config file on its own. So the first thing I’ll do is open the main script file and look there. It creates an environment object with no parameters. So now I have to go spelunking through the code to see what and where it gets that filename from. I’ll have to reread the constructor (once I’ve even gotten there) to come up with what the problem must be.

The added convenience of not requiring an explicit filename is outweighed by the forensic overhead that will (not might, will) be required to diagnose a config issue.

WITH the explicit filename in the top-level of the code I’d open that file, see the config filename sitting there, then go look at that file, assuming the Environment class code to be essentially stable. Then I’d far more quickly get to the actual issue.

Coding for simplicity isn’t just about removing lines of code and cleaning up the boundaries of responsibility, it’s about anticipating future maintenance load and understanding the long-term costs of “simplicity.”

So yeah. I’m not going to do that.

and then there’s THIS asshole

So, people who don’t know me think I’m nice. It’s among many things I think are absolutely fascinating. The disjunction between the reality of who I am and how I’m treated is just stunning.

Oh I try. I try to pull in the right direction, to ‘behave the way someone nice would behave.’ But it’s really just that, most of the time.

I fight constantly against my actual nature to try and treat people well, do the right thing, leave places better than I found them, be gregarious, not always tell stories where I think I’m the hero, to be solicitous of the opinion and stories other people are excited to share, enjoy other peoples’ successes, help them with their failings and quandaries without being invasive; to ask for nothing in return.

But I’m a rank failure. I can play the game here and there. I have random moments where I actually come off as a good person. But all in all I’m a truly venomous judgemental narcissistic egomaniacal shithead.

People repeatedly treat me as if I were a good person, whatever the shit that actually means.

But people see what they want to see, clearly.

So I’m invited to social gatherings. People seem friendly and sometimes actually excited when I walk in the room. I get smiles and waves, politely smartass playful bantering comments.

I’ve overheard waitresses say “I know he’s in your section, but can I wait on Mike?” And I know it’s because I’m a heavy tipper.

I’ve been accepted into this social group at the cigar lounge by a bunch of people who clearly just don’t know any better.

Yesterday I got a text message from one of the guys at the cigar lounge, who included only one other people from the group, celebrating a personal success of his and inviting us to come hang out with him to enjoy some bourbon and a cigar to celebrate. I think I actually fist-pumped and cheered out loud at his news. It felt good but then I realized that he just doesn’t know what a jackass he’s dealing with. Or possibly just a wrong number. Either way.

Just now I shut down twitter for an hour, trying to keep myself from the distraction and ended up on facebook, where I posted some stuff about the cigars I’ve been smoking here at the cigar lounge, as well as chiming in on a couple of their posts about new cigars. Well, the proprietor came back here to my high-top holding a Fuente asking if I’d smoked that one in particular.

“This one?” I took it and examined the label which looked subtly different from other Fuente labels. “I…don’t THINK so.”

“Well you can only get those in stores. Here. That’s from me. Thanks for posting.” He…gave me a cigar? Really?

“Hey thanks man! I appreciate it. I just lit an Ashton but I’ll smoke this next!” Poor guy. He just doesn’t understand I’m actually a complete dick.

But then there are Cigargoyle, BostonActress, BlackCatsAndPoppies, Flixology, and the rest of them. All fooled, completely. I suppose they can be forgiven since I only know them on the internet. I mean how could they possibly?

I went to Johnathan’s last Friday and one of the guys who works there but was off came over and hung out at my table for a few hours and talked. I kept waiting for the people he was waiting for to show up or the few minutes he was killing sitting there to expire before he moved on to what he was really there for.

Over those couple hours we were sitting there a bunch of people pulled up to the bar got out and greeted me warmly. I only recognized about half of them. “Hey man how’ve you been! Nice to see you back in your seat. What’ve you been up to? Your hair’s gotten REALLY long. Looks good. Wish I had that much to grow out.” No idea who they were, like I say, about half the time. I’m still not sure who the hell they thought I was.

So many people in my life just…so wrong…so bad at reading people.

I mean…it’s the only thing that makes any sense.

Right?

Full And Well Rested

That “Sleep When Hungry, Eat When Tired” post I put up a couple days ago has gotten me thinking. (It’s been a long time since I’ve considered writing more the result of thinking than the cause of it.)

Cigargoyle read it on his nightcap that night and as he read it I realized that it didn’t…quite have the gravitas that I thought it would as I was writing it. By which I really only mean that I could have gone much farther than I did.

No no, this isn’t going to be an attempt to correct that. It was just something I found interesting.

The thing I’ve been thinking about, which I couldn’t (but feel like I should) have considered is that articulating those things which have been kicking around in my head in some nebulous form clearly, if insufficiently, resulted in a net clarity that was far beyond my intention.

I’ve known this was going to happen to some extent. But even a bit under 48 hours later I’ve been able to clearly recalibrate a lot of things by asking myself if they contribute to a best case or worst case day.

Some of that may be the “manic” energy of the upswing I’m prone to; those “today is the first day of the rest of my life and I’m going to do everything right from now on” type moments that generally accompany an empty stomach and a bunch of caffeine. Usually those are good for a couple days of frenetic positivity that ends in a

But it doesn’t feel like that. It feels nice and clear.

It’s weird. I’m really not used to feeling nice and clear about anything. My brain is a thousand screaming demons vying for dominance.

In the time since I’ve spent a bit of time listing out my pending projects (I like to do that from scratch now and again rather than just going back to my ever-growing list of projects and ideas. It helps filter them out.) and asking myself what the value is in each of them.

For instance: I’ve “felt I should” get on top of modern javascript programming technologies for a while. So I’ve got a bucket of (free) courses on udemy that I’ve been following along with to learn React and other frameworks. On the blackboard in my kitchen is (or, was) “Finish the course.” I set about yesterday going back in to it for an hour before realizing: It’s crap. That nonsense is all nonsense. Yeah there’s a reason to learn to write javascript/html5/css. But those goofy tools people have created seem to exist primarily so that a novice programmer can avoid learning how to actually use the tools. So I realized it was a goal that wasn’t worth accomplishing. I deleted the entire source tree, uninstalled node and erased that line on my blackboard, replacing it (for now) with “Fuck the course.”

Felt good to cut away dead weight.

I have a couple other projects that received similar treatment.

Then my mind bent to some of the weirder stuff I’ve been working on: The raspberry pi internet radio, the cyberdeck (I haven’t mentioned that more than in passing here. But it’s a neat project.) I thought “Do these pull in the right direction or are they a waste of creatie energy.”

I came to “there are projects worth pursuing merely for the love of them, even if they never leave the prototype stage to see if I’m actually interested enough to pursue the field further” so those two in particular stayed.

I didn’t get rid of as much as I thought I was going to with that process (though I’ve yet to go spelunking into my software projects, which are legion.) But the increased clarity of understanding what it was I intended to get out of them, why I was really doing them, made them all the more valuable.

It’s only a couple days. But this is really the kind of thing I’ve been looking for. Taking an ideal and backing out from that to trying to bring those things to fruition.

It’s almost like Jordan Peterson was right.

Who knew?

Sleep When Hungry, Eat When Tired

Or…something like that.

[Note: This is gonna seem pretty maudlin at the beginning. Stick with it.]

My moment by moment “eat when tired, sleep when hungry” day would look something like this:

Wake up and put on my bathrobe, trudging over the dirty clothes on my floor, into the kitchen where I grab two slices of pizza from the counter, having ordered one the night before and eating about 3/4 of it, along with a coke. Dick around on twitter and reddit in my bathrobe while going through my list of video games on Steam/Epic/etc before picking one and spending a few hours grabbing cheap dopamine hits on easy mode, playing games I’ve played hundreds of hours of.

I imagine at some point, maybe 3 or 4 in the afternoon, I’d condescend to put on actual clothes and head to a bar (IF I was feeling particularly motivated/social) where I’d get ripping drunk, smoke a couple cigars, be the life of the party, eat bar food (probably a pizza) then drive home, where I’d spend the evening, erm… “sacrificing the contents of my gut to Johann the White” before taking a couple electrolyte tablets and drinking a gatorade to mitigate the aforementioned self-destruction then passing the fuck out.

Rinse, repeat.

That’s not a life.

Fast forward that about 6-9 months: I’m 260 pounds, maybe 280. Maybe I’ve downgraded to size 42 stretchy walmart jeans. I’d have a couple dozen new self-help books still in boxes sitting around my computer. I’d rarely get up before noon because I don’t go to bed before 4-5 in the morning. I’d blame that on “being a night owl” which, when coupled with considering the day over at 6-7 in the evening would be a not-terribly complicated justification for dodging the awareness that I wouldn’t be accomplishing anything “during the day” except sleep.

Now, it would be far FAR worse even than that. But there are only so many details of that life envisioned that I’m going to put down here. Sprinkle that with listening to depressing music, porn, drinking alone, and damn near any vice you can come up with.

Fast forward that a couple/few years and that ends exactly one way: A bullet to the brain. Maybe there are a couple years in the middle where I “progress” to really hard drugs first. But that’s absolutely how it ends.

I could say that’s “unthinkable” but it’s really not. Not at all. (I mean, obviously, duh.)

None of that is an option.

And all this talk about purpose and drive, these projects and pursuits are, in no small part, attempts primarily to stave that shit off.

All this gives the wrong impression, I’m sure. There’s no real danger of this happening. But it does serve as a nominally complete answer to the “Dude, why do you torture yourself?” question. The answer is “I don’t.” What I’m doing is exactly NOT torturing myself.

I’m trying to make the switch to positive pressure pulling me towards the life I WANT to lead, rather than avoiding the life I don’t want to lead.

So what about the other side of the equation? What does a day from my optimal life vision look like? Fascinatingly I’m FAR more hesitant to post about that.

What a fascinating realization. I’m going to write it out, but not…in its complete form.

But what does that say? It suggests quite starkly that the courage required to dream of an optimal life is far greater than that required to admit how badly things can go if I merely take my hands off the wheel.

IS it so simple that dreaming/fantasizing of an ideal life is hard because it sets a standard that I might not reach, indeed almost certainly won’t? Is it just a matter of feeling like I’d be setting myself up for disappointment? It seems a little pat, but that doesn’t mean it’s not dead on.

So to stake out the ideal, to plant that flag in the distance and say “yes, let’s get as close as I possibly can to that and…even though I’ll necessarily fall short the pursuit of that goal itself makes for a life well lived” is… fuck it’s REQUIRED.

There are two other things I feel I need to cover for this to be complete, even as an outline.

1) Enumeration of my ideal self and my ideal day. They’re as inseparable as they are separate. One really presumes the other, so they collapse into one readily.

2) How do I live today, as a distance from both of those points, near as I can figure.

It’s hard not to feel that this all comes down to this. I’m wary of grand pronouncements since a head of steam produces its own righteousness and righteousness, positive or negative, just feels good. Then I look back on them in more sober moments and roll my eyes a bit. There’s very little in this life that’s quite as intoxicating as Righteous Rage after all.

“Today”

The alarm on my phone rings at 7:30. I pad around the bed for my phone and, through pretty much closed eyes I shut it off. But it does begin the process of waking me up. I spend an hour in a hypnogogic haze before actually waking up.

Without much of an agenda I pad to the bathroom, retrieve my bathrobe and go turn on the computer, then back to the bathroom where I stare at the scale, sometimes walk away for a couple minutes, not REAL excited about the coming accusation on how I’ve spent the previous day. But before too long I make my way back in and get on the scale. (Today it’s 203, marking a couple days of consistent improvement after the whipsaw incurred by last week’s 4 day fast.)

There are never any big surprises. Sometimes it feels good. Sometimes it feels bad, affirming how I spent the previous day.

I head back to my office and write down my weight on the whiteboard. Red if it’s higher, black if it’s the same, green if it’s lighter, blue if it’s a new low.

Shower and get dressed regardless of what the day holds. I walk to the kitchen and get a water or a diet soda, grab a dizzying handful of morning supplements and swallow those.

Usually without an agenda I go get caught up on email, twitter, and reddit. That lasts a bit longer than I’d like. But it’s not usually out of control.

If it’s not a Tuesday or Thursday I pick a project (contingent upon the weather) I either head downstairs or open youtube to kick off my programming playlist and work with…admittedly limited intensity on whatever it is that I’ve decided deserves my attention that day. Usually until the hunger drives me absolutely bananas, at which point I head to the fridge.

The afternoon tends to go pretty slow as I plug away on whatever it is I’m working on. If a project is close to fruition (or if I’ve figured out how to partition my workload such that I have well-defined stopping points) then I can grind away pretty well.

I usually end up working on a couple things and satisfy my One Rule for a successful day: A day isn’t a success unless I’ve created something. It can be software, hardware, a reasonably complex foodstuff of some kind. Something. The metric by which I measure short term success is by acts of creation. (The trick is stringing those together. But that’s a different issue.)

As I go back and forth around the house I stop with relative frequence and do half a dozen chin-ups or maybe a couple pull-ups at the bar in my office door. Not a lot. Not enough. But more than I could do a couple months ago, which was…a half.

Sometimes I snack overmuch, generally in inverse proportion to how motivated I am by whatever project I’ve got kicking around.

Things come up and get in the way. I let myself get distracted quite a lot more than I’d like.

By 5 and 6 o’clock I’m frequently staring at the clock, again, that’s if I’m not hyper-engaged in whatever I’d decided to work on.

Eventually I’ll tap out and kick off Steam and pick a game to play for a couple hours leading up to 10:00.

If it IS a Tuesday or Thursday I spend some time cleaning up my laptop and making sure I have everything I’m going to need for a day at the cigar lounge before heading out at about 10:45-11:15, depending. A stop at a store if necessary first then I come in here, set all my toys up and open a Q10 window or start working on a software project, depending on where my motivation takes me. Empty stomach and a few cigars with water and/or diet soda makes for a great clarity of mind, so I get a metric shitton done before Bible Study begins (6:30 on Tuesdays, 4:00 on Thursdays.) During that time I usually end up putting a couple posts up on the blog, even if I do write a bunch of code I’ll almost always end up penning some words as well.

Afterwards I’ll either head over to Johnathan’s for a salad or just head home to grab something to eat quickly before I catch Cigargoyle’s night cap (Sunday through Thursday.) That’ll go from 10 to 11 at night and I’ll pick back up and play something again for an hour.

I grab my big notebook and write down some bullet-list items about the day including what I’ve eaten (broad brush) and what I did during the day. Sometimes I’ll cap it off with a note about how I feel about the day. That’s usually if I have an extremely good or extremely bad day. Otherwise the kind of day I’ve had is self-evident from what I’ve written.

Then I’ll head to bed and… well… I’ll pull out my iPad and play the dailies in Raid: Shadow Legends (a fun little game) while working on a sudoku or two on my phone. Yeah, screens in bed is a bad idea. But meh.

Then I pass the hell out.

Rinse, repeat.

That’s what I’ll call my median day. They’re good. There’s a lack of long-term goals there, to be sure. But they’re productive. Sometimes they’re just “busy” and sometimes I just fuck off online for hours and hours, having nothing pushing at me hard enough to stay focused on. Some days I’ll jam so much caffeine in my head that I can’t focus on shit. Other days I’ll jam so little caffeine in my head that I can’t focus on shit. Then there are the others ;).

The sanitized version of my ideal day doesn’t differ as much from my normal day as I’d expected.

I actually get up at 7:30 and get a quick workout in before hitting the scale (because why not optimize?)

Check to see if there’s anything that’s happened overnight that requires immediate attention and schedule/plan those additions to my day.

That aside, the day’s projects planned, perhaps in to pomodoros or some similar time-blocking scheme I hit the ground running, maybe spending a few minutes getting caught up on social media, maybe just not.

Work until a late-ish lunch (of something reasonable), after which I do an hour or two of reading.

Then I do some more project work that may even be product work.

A quick shower, get dressed (up) and head out for a nice dinner date or drinks, cigars, something social.

I come home (or…since I’m talking about ideals…WE come home) and, well…you do the math.

Somewhere in there is a session where I plan the goals of the next day. But I’m not sure where that slots.

I want my projects to be aiming towards larger goals, my day to be a bit more tightly structured. I want deadlines on my projects. I want to be able to assess and abandon ideas that don’t make any damned sense. I want to explore things I’d never considered and spend my days stretching my boundries, physical, mental, and spiritual.

When I reread this a couple times I’m struck by my lack of imagination in “my ideal day.” I’m pretty okay with that really. It’s my considered opinion that much the way I need to get the crap out of my head before I can get down to real writing (I deleted a thousand plus words of rambling at the front end of this) I need to do the same thing with my day to day life before I can really see what it is that I can imagine, what I’m really driving towards. I’ll flesh it out, I’m sure. It’s a good baseline.

That’s fine and I suspect to be expected. Other kinds of wild speculations would just be silly without the clarity afforded by taking the first several steps on that path.

So, a couple things:

  • I currently don’t institute the level of discipline I need to accomplish that kind of day.
  • My projects are all over the place and I notice that I’ve avoided any real description of WHERE I want those things to lead. They break down into a few categories really. But that’s neither here nor there.

Local focus necessarily occults long-term planning. Time dilation is an amazing tool. But it can be used to distract. You’ve got to have the long-term goals set before you can safely zoom in to a tractable time horizon. I’ve thought that keeping my focus on the immediate would help clear the deck for longer term progress. But I think I’ve been thinking about that just exactly backwards.

SO… Goals:

  • Married (kids? I’m about to turn 52. I may have missed that boat.)
  • Fit
  • Smarter
  • Fucking Rich
    and maybe
  • Published. But frankly I’m not so married to that as people wish I was.

Let’s see where I can take that, shall we?

Digital Commonplace

I’ve been having a bitch of a time wrangling things I come across online that I want to save either for later reading or just to snip out and put in some kind of Digital Commonplace book.

Browser bookmarks are easy enough to wrangle. I’ve got a script that collects all the bookmark files from all my browsers on all my machines and sends them in to a central location of “read me” links then purges them from the source. I go through those every once in a while and purge most of them as uninteresting. But that’s the way of things.

Of the ones that contain long form text I want to read, I tend to print most of them out, staple them together and put them in a manila folder that goes in to my (physical) library’s “Read Me” file, which works out really well.

Then there’s a bunch of “ooh this is neat, make this” type stuff as well as a couple other “curiosity” type categories. Those get shuffled off into project idea folders and such.

But the problem comes when someone says something smart on twitter, reddit, or some similar platform. I don’t yet have a reasonably systemitized way of capturing those kinds of things. Yeah I could save links and go through the same process. But I generally don’t want to go through the effort of curating the whole page when I’m trying to grab a snippet.

What I’m wondering is how tough it would be to make a scriptlet (remember those?) that would post it to a local server of mine for catagorization and later library integration. I’d prefer to be able to select a bunch of text then click on a saved bookmarklet of some kind and have it take that content along with whatever context can be gleaned from the page, and pushed over to a server someplace.

It shouldn’t be THAT tough a programming project. Just a couple things I’d have to look up and a bit of (hurl) javascript.

I want to say that this kind of thing was pretty…erm…commonplace back in the golden age of the internet, that being 98-03 or so.

Gonna have to give it a think.

Brainstorming about Brainstorming

“I’m not writing shit today”

And that was the plan. But my head is a fucking mess and I only know one way to sort that out, so here we are.

Some development project brainstorming I think. We’ll see.

Every few months I pull down some mind-mapping software and try to use it for a brainstorming session to dump the ideas out of my head and on to a page of some kind.

It’s always a disaster. Mindmaps, especially digital ones are fundamentally tree structures; nodes extending out from a single central point that have children, grandchildren, ad infinitum. It’s REALLY got the same topology as a simple outline, just without any implied sequencing within a tier.

I don’t know, maybe people think that way. But after the first two layers I’ve got this problem where I want to join nodes across the child branches of the tree.

I want a piece of software that can generate and navigate a more generic digraph. Problem is…I’m not sure something like that even exists. Sure I could go to yEd (something like visio) and just create nodes to my heart’s content. But then I’ve got to manage positioning and linkage on my own. Plus, yEd requires keyboard and mouse interactivity.

That doesn’t sound like much but when I’m blasting out text, even in bullet points, it’s a serious pain in the ass to move my hand back and forth off the keyboard. I’m typing THAT fast and it’s a damned disruption to which I won’t condescend.

About the best piece of software for keyboard-only diagramming like that I’ve found is FreeMind, which is a generic mind-mapping software and brings me back to the topology problem.

I really really really don’t want to write something from scratch. Dealing with UI coding is a headache enough at the best of times. But actually going so far as to manage blank canvas drawing, object representations, linkage drawing (bezier curves, anyone?) diagram fitting and such is the kind of thing that just gives me a fucking migraine.

I’ve got it in my head that GraphViz might be a useful way to go. But the diagrams it generates are still a bit stodgy and clinical. They’re useful for displaying small relationships between few nodes OR large clustering on a zoomed-out diagram. But there’s no interactivity so I’d have to regenerate the diagram every time there was a change to the underlying source, much like a recompilation process. AND it can only really be “given hints” about layout as its algos determine actual placement of all nodes.

So that’s really out for anything other than a documentation type process.

I’ve been banging my head against this wall for years. Shit, for decades if I’m being honest. Something like yEd is just SO close to what I want.

What would be about perfect is if yEd had a plug-in architecture or configurability that I could use to drive it completely from the keyboard. Creating nodes and ‘linked nodes’ without having to reach back and forth. I’d be willing to condescend to the mouse for some of the weirder functions, certainly.

Other than that I’m not sure I’ve even seen something that would fit the bill.

If I can let go of the graphic aspect of organizing my thoughts (I can’t, but let’s play a game) then what I’m left with is exactly a wiki structure: Hypertext linkable to arbitrary depth and breadth. I could even have different TYPES of linkages, categories, tags, just straight content linkage. All kinds of things.

In fact this is how I’d prefer to write, though my own software development to this effect is proceeding only in fits and starts.

And because I apparently can’t fucking help myself…off I go into the stratosphere…

I just can’t shake the feeling that if I had The Right Tool that I’d be able to dump the contents of my skull out into something that would help me organize and deal with it so I wouldn’t have to try and keep all the moving parts in the weird 4d diagram in my head all at once. There’s just too much there to juggle without externalizing it.

There’s this overwhelming sense in my head that there’s something big in there that I can’t see for no reason other than I can’t juggle all the fragments and pieces at once so that I can put them in to the puzzle, at whatever dimensionality it exists in.

Now that could be an illusion, just a complete fabrication. But I have no way to tell unless I keep pushing towards that frontier and fail forever. Even then I won’t be sure.

It could just be a damned emotional state drummed up by some inner working that I’m trying to attach higher level conceptual structure to in order to fit it into a more intellectually comfortable framework.

The fucking compulsion to solve this problem is driving me insane. Hell it may have done so quite thoroughly. After all I really am quite convinced I’m Mad.

Here’d be a fun thing:

Check out some of the VR painting systems. Imagine one of those that had gestures that would let you draw links between objects and create objects. Then a voice system that would let you put names on them.

Christ that would be amazing beyond compare. Of course once you had a digital representation you could process it with any piece of software since there’d be no reason not to have it saved in some easily machine manageable text format. Fucking json would work.

I think that’s about the closest thing I can envision to a completely functional piece of software.

Then I could sit at a keyboard and expand on each titled node, giving it a content body and whatever other attributes and tags I couldn’t manage through the VR interface itself.

It doesn’t….SEEM like it would be that hard. But I’ve spent years watching Minority Report and Tony Stark manipulating things in CGI, so my understanding of what’s possible and reasonable may be “a bit askew.”

Dammit there’s something here.