It’s not a terribly common scenario. Mostly, the dataset is pre-defined and static, and your designer can weave everything together into a thing of beauty and elegance, with absolute control over placement and flow. Usually, that interface is then solidified, changing only after the design is discarded for something better, and then only in small ways. But sometimes you have no idea what the dataset will look like from one day to the next, and it’s likely to change and shift regularly. This is the scenario I found myself in with two completely unrelated projects, recently.
With one, the UI is designed to manage and maintain a complex gateway application, which itself relays incoming requests to myriad third-party services and locations, then presents the results in a unified format. The settings for each of these third-party data sources include auth data, the exact composition of which is different for every one. Anywhere from one to four values (in my experience so far) must be presented for a request to go through successfully, and hard-coding these defeats part of the design – we must support multiple sets of credentials for any given data source. The answer here is a dynamically-generated form, defined by the same parts of the code that allow access to each particular third-party data source.
The other is much less complex. It consists of what is essentially a survey. Of course, things are complicated by the fact that the questions will change over time. This could be handled by changing the underlying code every time – but the client is a non-profit, so the more they can do without having to pay for my time doing it, the better. So again, the answer is a dynamic form.
That means the front-end becomes responsible for the actual construction of the form. Which in turn means DOM-manipulation. OK, there are a number of ways to do that, so no huge deal, but there didn’t seem to already be a library to do it automatically – I’d have to implement it directly in the application both times. And then I’d have to maintain both. And what if I encountered yet another project that needed such functionality? I resolved to build a library that could do what I needed, then simply include that library in both applications.
Both applications are built with AngularJS, which has native support for DOM-manipulating libraries in what it calls directives. Essentially, directives are a way to extend HTML by defining (and then handling) new elements and attributes. For the validation-paranoid, attributes can be prefixed with
data-, which keeps most validators happy. You can also specify such extended functionality with classes, which sometimes makes more sense if what you’re building is a presentational extension – or your validator is too stupid ancient to allow
data- prefixed attributes.
So the natural result of all this is that I built the dynamic forms library as an AngularJS directive. It is hosted on both GitHub and BitBucket, because GitHub is awesome for getting projects seen and worked on, and BitBucket is what we use at work, so it kind of made sense to put it there, too. Both repositories have existed for several weeks, but I just now reached the point where the project is releasable, though probably only at a mature alpha or early beta level. Which is why the release version is tagged as v0.0.0. I don’t anticipate a large amount of involvement, because thus is such an uncommon use case, but it’s good to mention the release so the project’s visibility goes up (even if only for the search engines…).
Either way, let me know what you think!
I don’t know if anyone will read this within a day, a week, or even a year of its posting, but I suspect that’s not the point. It doesn’t matter if it ever gets read. What matters is that I write it.
Those who know me personally probably already know that I am taking medication for migraines. Most of those also know that the medication I was prescribed is an anti-depressant, this specific variation of which is sometimes used for its side effect of reducing the frequency and severity of chronic pain. A few will be aware that this might be a good thing for me beyond handling the headaches, since I’ve shown several of the symptoms of depression off and on for many years.
Well, now I’m out, and can’t afford to get any more. The medication itself isn’t particularly pricey, but the office visit to renew the refills is.
Now, before anyone pulls out the wallet and heads to PayPal or whatever, I’m not looking for help with this. I just want to discuss a few things with myself, as it were. Get my head back on straight.
See, the pills were beginning to lose effectiveness on the headaches, but they were actually doing wonders (apparently) on my depression-like symptoms. (I’m trying to avoid self-diagnosis so as to not marginalize those who actually for-certain have depression. Unless/until someone with the training to know says I have something, it’s only symptoms.)
At least, since the meds started effectively leaving my system, my mood has been less predictable and more negative.
I’ll spare anyone reading this the full details of my symptoms, but it does bring up a few other items I feel are important enough to put out there, even though they are of little importance otherwise. These are facets of my life that I start to fixate on whenever my mood turns this direction, and if I can get the discussion on them out of my own head, it may do me some good.
First, my belief system. It’s both very simple and very complicated, all at once. The simple part: I believe that the sheer force of belief itself shapes reality. It certainly shapes our actions, at least, and I don’t know many rational people who would argue that our actions have no effect on reality. Then there is the effect of shared beliefs on how objective reality is perceived, and thus explained and explored. Whether this cascade effect continues to the level espoused by spiritualism and religion is ultimately beyond the point that those beliefs shape the actions of those who hold them, which in turn shapes the world we share with them. That in itself is often enough.
The complexity, if that isn’t obvious already, comes from how those myriad beliefs interact, and how to determine which beliefs are most true at any given moment. I tend toward treating them all as equally effective, since I don’t have sufficient data to know for sure in any case.
Second is a personal understanding of my own nature which, frankly, can only be interpreted as insanity given current knowledge and understanding of various scientific principles. Probably schizophrenia, or one of its relatives. I feel strongly about its truth, but my certainty doesn’t help in my attempt to defend myself. I’ll leave this one at that.
Last is a facet of myself that isn’t widely known (mostly because it doesn’t really matter in the vast majority of situations), but which shapes my own thoughts and actions, sometimes in ways that make others uncomfortable. This bit will probably make many people even more uncomfortable around me than they already normally are, but I think it’s beyond time I say it.
I am a practicing bisexual.
What does that mean? It means that I love my wife, and we are as intimate as our bodies will allow. But it also means that I am attracted to men just as much, and enjoy such intimacy with them as well. This is not a surprise to my wife, who is wonderful beyond what I could possibly deserve. We discussed the matter long ago, and decided that the main issue with extramarital intimacy wasn’t the sex itself, but rather the damage of trust. So long as neither of us tries to hide a sexual relationship from the other, if it happens, it happens.
Now, this doesn’t mean we’re out sleeping around. I won’t speak on her sex life (aside from the one she has with me) because that’s her story to tell or not as she pleases. For my part, however, I don’t tend to find myself in situations where I could take advantage of this arrangement anyway. That said, I have had a few exhausting nights with a member of my own sex. And I enjoyed every minute just as much as I do the ones I share with my wife. So, no, I’m not just “bicurious”. I know I like playing both sides of the field.
That was as non-graphic as I could make it while still being clear about that bit of myself. I suspect some – if not most – of the people reading this (assuming, again, that anyone will) will place as much distance between me and themselves as they can manage. Hell, it’s even still legal for me to lose my job(s) over it. (Well, not so much legal as not illegal, but in practice, they’re about the same…) I accept that as something I cannot change. But I feel the need to have it said is far more important than maintaining friendships or employment where this aspect of me justifies such reactions. Indeed, if this is enough to end these relationships I’ve built even while being this person I’ve now admitted to being, then those relationships probably weren’t worth the time to cultivate in the first place.
I hope, though, that the relationships I have with others are strengthened by this knowledge, if they are affected at all. That would be the best scenario for everyone, I believe. It would certainly do a lot for my faith in people in general.
We will see, I am sure.
With all that written down, I am indeed feeling more sure of myself, as hoped, and could probably store this away someplace where it would never be read by anyone other than myself. That wouldn’t be particularly honest of me, though. Not after what I’ve written here. So here you go, world. I accept whatever damage this will do to my career(s), my friendships, and even my family, as I take full responsibility for it.
And who knows. Maybe my fears are misplaced.
I am ashamed of myself. I have waited until just now, over twenty-five and a half years into my entire life, more than a third of the time I can expect to live, to start watching episodes of Classic Doctor Who. My repentance is late in coming, perhaps, but thorough nonetheless.
I started my journey as any clueless wanderer ought – by asking Wikipedia to list off the episodes in correct order. The explanatory material shocked me. Episodes gone missing? However could that have happened? A policy to destroy old episodes of shows? How barbaric. I was appalled, of course. A series popular enough to run for 26 seasons – yes, twenty-six of them – and the people responsible for its very creation and existence had a policy to destroy the older installments? I knew there had to be a reason, but what reason could they possibly have had which would make any logical sense? How could the destruction of such great material be justified?
As it turns out, though film and even broadcasting technologies weren’t exactly brand new, they were still, as the world transitioned from black-and-white to color, operating under the same contructs as the stage. If you wanted to broadcast a story, the players would perform it for you, allow you to record it for that broadcast, and expect you to rehire them for subsequent rebroadcasts. The ability of film to reduce the workload of everyone involved wasn’t entirely overlooked, however; time- and number-limited broadcasting licenses were usually attached to each piece, so it could be rebroadcast up to the set number of times within the set amount of time. This time period was generally fairly short, amounting to only a couple of years.
When these licenses expired, the film copy was no longer of any use to the purchaser, since they no longer had the rights to use it, so these were destroyed to make space for other, frequently newer films. If the originals were kept on tape instead of film – and many were – these tapes were erased and reused for other projects. This had the added effect of reducing overall costs, as the amount of storage space required was kept low, and what space there was remained free of old projects which could no longer see a profit.
The idea that broadcast television material might serve a cultural purpose rather than simply a financial one eventually caught hold enough that preserving these older recordings became the policy, even when the rebroadcasting rights had expired. There was, it had been determined, a cultural duty to preserve them. From then on, the hunt for destroyed episodes was on – not just for Doctor Who, but for every series that had met with this unfortunate end. Many such episodes had been sent overseas when broadcasting rights to them had been purchased there, though only copies were sent out; never originals. Over the next several years, continuing to the present, most of the missing episodes returned, and Doctor Who is (among) the most compeletely recovered of such series.
Doctor Who is also peculiar in that it is the only series of that era for which every single episode has survived in at least an audio form – thanks mostly to viewers who didn’t have VCRs (this is before VHS/Betamax had their now-legendary war), and so had to accept merely recording the audio component during various broadcasts. These audio versions are of course in varying states of quality and repair, but every episode’s audio still exists today, regardless of whether the video exists alongside it.
That bit of background absorbed, I then learned that each epsiode was generally considered merely part of a larger story, a “serial”. Essentially, Classic Doctor Who is a collection of mini-series tied together only by the common character of the Doctor (though many other characters can be considered recurring at various points throughout). I find this format to be fascinating, as it presents some interesting opportunities for storytelling. Still, this format choice meant that a single missing episode would effectively ruin several adjacent as well, at least to the point where a video version of the surrounding episodes would probably not be released until the missing one(s) were restored.
Armed with my list, I set to Netflix to watch them all in order. And discovered that the streaming service, at least, didn’t offer but a small handful of the full 155 serials originally broadcast, nor the 1996 TV movie which aired 6.5 years (approximate) after the last serial, and nearly 9 before the introduction of the Ninth Doctor in the presently-airing series. Still, the theme song had now been running through my head incessantly for at least a week by this point, so I dove into the earliest of these I could find – Doctor Who: The Aztecs, the sixth serial, which can be found in Season 1. I then proceeded chronologically by broadcast date through the paltry selection until arriving at Season 16, which is composed of six serials, themselves tied more closely together in a single arc called The Key To Time (if you find a DVD by that title, you have the entire 16th season of Classic Doctor Who in your hands). And discovered that four of the six stories were actually available, including one written by none other than Douglas Adams, of Hitchhiker fame. Called The Pirate Planet, this is the serial which I have just finished. Downright amazing, and perhaps surprisingly coherent by Adams’s standards. Many of the concepts Adams brought to Doctor Who, especially if they never actually made it to the screen, were later reused in his published works.
The true tragedy, though, is that none of the serials available on Netflix have anything to do with the Daleks at all, despite the fact that Daleks are perhaps the true icons of the series – after the Tardis, of course. Still, the fact that any of these classic episodes are available to begin with is satisfying, so I can’t complain too loudly for too long.
Have you met the good Doctor yet? Have you braved the Classic series, or stayed safely in the confines of the modern version? So long as you expect material from the 1960s through the late 1980s, I suspect you’ll enjoy the Classic episodes just as thoroughly – and gain a greater insight into what’s really going on here. But you don’t have to take my word for it.
Today is your LAST CHANCE (ever?) to get a FREE copy of James A. Owen’s amazing book, Drawing Out The Dragons. Yes, FREE. No contests, no gimmicks, just an email. Do yourself the favor of getting this book while it’s still free – not because I don’t want to support the author by having you buy it, but because it’s really worth so much more than he’s charging for it, you’ll feel like you stole it if you wait to pay.
Please. Get your copy now. You won’t regret it.
For those curious, here’s a brief overview of the Things I’m Up To at the moment. I’ll try to make these kinds of posts fairly frequently.
My main focus with writing, at the moment, is with a project I actually can’t say much about, yet. It’s simply not ready for public knowledge. I can say that I’ll be working with my great friend and colleague Ian Mayes on this project, but that’s about it.
I’m also very excited about James A. Owen’s Drawing out the Dragons ebook giveaway, which was extended to a full week from the single day he originally had planned. I urge you to take advantage of this offer, if you haven’t already – more information can be found in my previous two posts here on my blog. And to anyone who thinks this is a marketing ploy – well, you haven’t read the book or heard him speak.
I do have a couple of novels outlined, though one will probably never see the light of day – it’s truly awful. As the project I can’t say much about reaches the point where I can focus elsewhere, I’ll start to work on turning the other outline into something worthwhile.
I’m very nearly ready to start taking on other clients. I’ve already approached one group, but still need to present a quote and mockup to them before things progress any further. Should they accept, my client search will be placed on hold for a while as I push forward on their project; otherwise I’ll start actively searching elsewhere. Either way, when I open my doors to more clients, I’ll be looking to do any sort of programming project you can think up. Of course, faster delivery will come from projects I’m already familiar with, but I’m still always up for a challenge. I’ll provide more details on this as soon as I open up my client search.
My current projects include migrating a client web site to a new server, and finishing a development framework I designed so I could develop an information management database for my Navy Reserve unit. The migration has top priority, of course, and is finished with the exception of selecting and acquiring an SSL certificate, and getting the server moved from my basement to the data center where it will be permanently housed. I can’t do the latter without first doing the former, of course, but this should be taken care of by Monday, I hope.
As far as the framework is concerned, it’s actually open source. I need to update it with current information, but the official home for the project is SourceForge, project name IDLX. The current version would be on SF hosting if their PHP installation supported the HTML Tidy module. The basic premise is that the framework itself does any heavy lifting, through module extensibility, and your framework-based project simply defines the user interface and connects that to the underlying framework capabilities. My goal is to make the framework operate on the web or on the desktop with equal ease, with modules translating your interface design code (written in one flavor or another of XML) into whatever format is needed for the current platform. It promises to be a lot of work, but it’s been fun so far.
I have recently created a GoodReads account, and am using that to keep track of my progress with reading things. I didn’t realize I was reading six things at once until I started using this! I think there’s actually a seventh that I need to go back and add, but I think I’ll have to restart that one anyway, so I’m not too worried about it at the moment. You can see what I’m currently reading just by looking at the bottom of this page.
A friend of mine has run a website with an extensive White Wolf RPG section for several years. Indeed, that’s actually how we met. I have been working on a PDF version of his content, which is difficult to do between all the other projects I’ve been working on, and the updates he’s been making between the time I started and the present day. Still, I promised a PDF, so I shall deliver. Eventually.
Normally I’d have other role-playing news to report, but I’m currently in a gaming-free period.
I’m on the wire with re-enlisting or not. My original contract, a standard eight year deal, expires in a month, and I need to either sign a new one or never return. There are some things happening that might even prevent me from being able to re-enlist, but we’ll see. More on that if it turns out to be a huge problem.
And finally, a small section for things happening that aren’t really projects, even in the loosest sense.
I’ve been married for two years and almost four months. My wife and I had a son two days before our second anniversary – so he, too, is almost four months. He was born exactly on time, but was fairly small – a mere 3 lbs 14 oz. He’s strong, though, and has already reached, if not surpassed, ten pounds. I made the joke in the delivery room, but stand by it to this day, that our little guy just couldn’t resist showing off his smarts by making his first act into a math joke. I also suspect he’ll like pie.