Journal
-
# Amazon
Amazon. Listen. I’ve been trying to give you some money for days now. I have bent over backwards trying to give you money. You won’t take it, you keep refusing because of…what? The publishing houses are being dicks about geographical barriers? Well, I already refuse outright to spend money on books in Australia because the Australian publishing houses are trying to screw me over on import restrictions; and now you’re telling me I have to be screwed by the US publishers as well? Sure, ok. I get it. You believe your relationship with them is more important than the one with your customers. That’s fine. Except…well, I have given you my last cent. And not just you, I refuse to allow any of my money to go to these companies anymore.
I’m sorry, authors I like to read, but I’ll be pirating your books from now on.
-
# Website CMSs are not my bête noire
So about that those CMS ideas that I was totally not going to implement because that would be re-inventing the wheel. Well. Turns out what I described is neither common nor really all that well done. And I keep realising how useful it would be to other projects I have bubbling in my head, the ones I never really get around to.
So naturally I have sketched out a few ideas on how to architect the system. If I know me at all, that’s the last bit of work I will do on it. Honest.
-
# Content Management Systems too web centric
I’ve put in a lot of hours looking at CMSs in the last week and a half. $employer is setting out on a grand project to offer a platform for sale and a CMS is part of the plan; the platform will be an evolution of something we already do, but no one is particularly happy with the CMS currently being used, so we’re evaluating possible replacements. Cino help us, we’re even giving some consideration, however faint, to the notion of writing our own, which isn’t as wrong as it feels if it is a core part of our business.
I put it to you thusly: the ecosystem of CMSs is presently overly focused on website publishing, conflating the two tasks of managing content creation/workflow and publishing said content, to the detriment of anyone for whom websites are not the only delivery medium.[1]
Somewhere in the Illuminati three-ring binder on running the world there is a page on CMSs that dictates that it should be written in such a way that no one will like it. It’s an actual rule! Hence, CMSs get written to be end-user focused and painful for developers to integrate; but the UI gets written by developers and is soul-crushingly awful to use. Soon the developer will get frustrated and let forth a rant on how they could write a better CMS than what they are working with. I started working with Ektron on the $hellProject September 2009, and heard my first angry declaration of authorial intent in October 2009.
Now that I’ve mocked the Developer disease of “I can do it better”, there are ways I think CMSs could be improved, at least for my current purpose. Primarily I think there should be a robust separation of Content Production and Presentation Management. I wish to be able to enter content in snippets, perhaps group it into logical sets – if it were destined to be a web site, the logical sets would be sections of the page and the snippets would be the contents of those sections. The actual presentation of those sets is up to a different system entirely. I want to publish it as JSON that is then parsed and used by a SWF app; there should be nothing stopping me from publishing it as web pages though. That’s how I would architect a CMS, if I were to be silly enough to get frustrated and start doing one. Which I’m not. Honest.
<Looks at the mess of code that is this blogging engine.>
Yep, totally not.
You know, I could use Mongo or CouchDb, they’re perfect for the task of storing arbitrary data documents.
1 Although there is a lot of selection bias here. The kinds of CMSs I tend to see are selected because they are focused on website publishing.
-
# Regular
Someone at work described me as a someone who blogs regularly. They then backtracked and described me as someone who blogs.
I navigated to the second page of my most recent posts and it reaches back to 2009.
-
# Completing my OCD
A peculiarity of my OCD is that I like to know which of my tracks in iTunes are from complete albums. So I might only sync those albums.
Thus.
-
# Bête Noire
Ahhh
Data driven tiered web applications are not my bête noire. ORMs are my bête noire. No, scratch that. ORMs in c# are my bête noire. If i could get back the hours I have spent thinking about ORMs, I could redo my BCompSci and have time for the Honours year.
I’ve written an ORM, or three if you count the versions, for c#. I even sort of ported the first version to PHP back when I still admitted to working with PHP. I’ve ripped that ORM out of an application and replaced it with nHibernate. And now I am working for an agency that has had at least three completely different approaches to the problem in the last eighteen months.
ORMS are not my bête noire. ORMs that require repetition are my bête noire. I am looking at an ORM framework that requires me – when i want to add a new column to an entity – add that column in six places.
- Add it to the db table
- Add it to the nHibernate mapping config
- Add it as a property to the class in the Domain models namespace that nHibernate spins up, the Business objects
- Add it as a property to the class in the Contract models namespace that the Domain model converts itself into, used as DTOs
- Add it to the method that converts Domain models to Contract models
- Add it to the method that converts Contract models to Domain models
Now, to be fair, the last three are because the architecture demands that the UI tier only gets DTOs and there are ways to alleviate some of the problems: I could use Fluent auto-mapping with some conventions and minimize the mapping config required; i could return the Domain models, or at least inherit the Domain models from the Contract models. That would be bring it down to two places, which is still unacceptable repetition.
Repetition isn’t my bête noire. Having to manually create ORM mappings at all is my bête noire. Two of the ORM frameworks at the company made attempts at fixing this with code generation. Neither solution was complete: one still required columns to be defined twice; the other generates some code – sprocs – then requires the user to import the sproc into the database, and then manually create an xml file, using a custom schema – that references those sprocs that will then be used by a second code generation step to create c# classes. The third framework, the only one that for one reason or another is the only one with a credible claim to be generally usable, has no code generator at all. I would have to write one from scratch to fit in with the existing architecture. Inevitably I will do this, in all likelihood, but…
Having to create a code generator is not my bête noire. The architecture is my bête noire. The Domain objects are part of an Anemic Domain Model; there is vanishingly little behaviour. The difference between the DTOs and the BOs? The BOs include the relationships. The DTOs have to call a service layer to do any object associations. Buh, what’s the fucking point? So much of the implementation of So much of the implementation of this architecture is replication to support a hair-thin difference. I could go on.
Architecture is not my bête noire. Knowing that this is a problem that has been solved and solved well in Rails and Django is my problem. Every time I have to face another crappy ORM framework in c# I stew that in Rails I can write and execute a database migration, and I’m done. No manual config, no messing around with partial classes or extension methods or even specially decorated regions to prevent the code generator scribbling over custom finders. One database update and I can use it.
Knowing that Rails does it better is not my bête noire. Not Invented Here and Second System Syndrome and Reinventing the Wheel are my bête noire. My current remit is to look at all these existing systems with ‘fresh eyes’. There is a party within the company that would be all for a solution that was simpler for new developers to pick up and implement, and I am intrigued by this party’s ideas and wish to subscribe to its newsletter. But I also don’t want to get into chucking out a bunch of existing code that I could easily be re-using. But re-using it might just make me want to throw in the towel because it’s so very ugly.
Being torn is not my bête noire. Repetition is my bête noire. This is not the first time I have been here. And unless I plan to quit my job and become a junior dev at a Ruby shop, this won’t be the last.
I hate ORMs.
-
# Would you believe, an elipsis?
Taking my blog writing seriously is hard. I have a post in production that never seems to work properly; but it is important to me to get it to work because the topic is the core of my thinking right now. I’ll take my time.
Meanwhile, I cooked food tonight. Specifically, one of Jamie Oliver’s 30-minute meals, Roast Beef with carrots, potatoes and baby yorkies. I heard on the grape vine that some people think there is a lot of ‘cheat’ in the 30 minutes thing. I dunno, maybe.
I followed the lead of my friend in the link above and had D as a co-pilot, reading out what next to do. I got everything ready…well, almost. I don’t actually own two pans, so I had to use the biggest pot I have as a makeshift pan. I didn’t get the watercress ready because we forgot to buy it. There was none in Woolies on shopping day and we just agreed to get it from the fruit & veg shop later. And then forgot all about it. Bah. Also didn’t think hard enough about every thing I would need, so there were some moments of pushing junk around in the utensils drawer muttering “Where. The. Hell?!?” Also, I had olive oil, but not Jamie Oliver quantities of olive oil.
The potatoes were supposed to be in the missing pan; the boiling went fine, but then I needed to drain the water and, meanwhile, the olive oil had been used up on other bits. I’m unsure if it was that or the thin, light base of the pot that caused the potatoes to burn a little.
The carrots were not baby carrots, so I had to babify them, which in this context basically meant slicing them into quartered wedges. Otherwise, they were the component that flat out worked out the best…even if I unaccountable didn’t have the bay leaves I thought I did. The meat also worked out well; D and tWM were never going to eat horseradish, so I just sprinkled it with parsley instead.
The big issues were the gravy and the salad. Obviously the salad didn’t get made because there wasn’t the watercress to make it with. We also skipped the gravy out of weight watchers concerns; that was a mistake, I think the gravy would have added the touch that was missing from the potatoes and particularly the yorkies – which worked perfectly, by the way.
I finished within the half hour, but that was always going to be the case given what I skipped. I had a lot of time on my hands during the last seven or eight minutes to clean up, aimlessly look around, so forth and so on. So I have to think that if not within time, I wouldn’t have been terribly far off if I had made the gravy and salad.
Picture? Yeah, that would have been great, wouldn’t it. Maybe I should have thought of it before we finished eating. Next time, when we will make the gravy and salad.
-
# A semi-colon
Have I reached the age, or has society reached a point, where getting rid of a couple of decades of satellite junk becomes appealing. Or is it just synchronicity?
That hillock of books referred to earlier was resolved. D and I spent a very hot Saturday going through all the books and checking what could be replaced electronically, what couldn’t and what we didn’t care about. We actually did end up with a small hill of books as the outgoings were thrown into a pile. I didn’t count them, but there’s ~0.2 cubic metres of book waiting for St Vinnies (or similar) to collect. Sell them? Cino! I just couldn’t be bothered. I am willingly passing up the opportunity for a couple of hundred dollars, I am in effect paying a couple of hundred dollars to avoid having to go through all the effort to create that many eBay auctions.
We got rid of a lot more than just books. Floppy discs. A hundred of them, or thereabouts. There hasn’t been a working FDD in this house for at least three years. Cassette tapes. Again, haven’t owned a working reader for this type of media in years. You’d think this would give me pause in my quest to replace all my books with e-books. Maybe because those books have lain undisturbed for months and years; if Amazon should go under and I lose access to all those Kindle editions, presumably bought over months and years as I feel the need to reread a particular story, I may feel a twinge of pain, but it would pass pretty quick.
Incidentally, set myself a goal of reading 42 books this year. Time was, that would have been a dead cert. Probably would have read that many in half the time. Now, feels like real effort will be required, particularly if I impose a 3-way split of non-fiction, non-fantasy/scifi, and (duh!) fantasy/scifi.
-
# 2010
At the beginning of 2009 I started noting down the books I read. Wish I’d kept that up, I’d really like to be able to go through a list like that and track my mood based on the reading material I sought out. I could tag each book with a basic mood – waxing, waning, expansive, depressive – and I am quite certain that I would find tell tale plot lines of emotion. I’m quite certain I would find a Prussian blue track start in May, denoting a foray into K J Parker and descending down down down into July, mirroring the darkening of the commute to and fro. I bet I would also be able to detect an upwards tick in play counts of the entire Pornography album during the same period, if I were so inclined.
Perhaps unsurprisingly, May through July were also the darkest hours of the $project, when certain difficulties made themselves significantly more prominent and then receded; but like an oily wave on the Gulf of Mexico, I was left covered with a greasy muck. It was during that time that the unofficial team leader of the $project went entirely off the rails and the leadership fell to me, at first also unofficially and then all too officially. Just when I was sure the project was going to fall over in an incomplete heap I was having the responsibility thrust into my hands. I was just as sure I would become damaged goods at $employer due to the sure-to-be-incipient failure of the project. Said catastrophic failure never eventuated – the demise of the project came much later and less dramatically – and now, outside of the swirl of the moment with Robert Smith, K J Parker, and, crucially, tWM no longer providing an emotional feedback, I can see I was not going to be so branded.
I wonder what my tweets were like during the same period. I have all these resources at my disposal to detect the Figure of my state of mind via the Ground represented by its leavings: ramblings tweeted, music scrobbled, books read. I could track the ebb and flow of my disdain for Facebook – well, let’s be honest, Mark Zuckerberg – by the gaps between status updates. I could replay my year and it would be like watching the power graph at the end of a game of Civilisation. How many emails did I send to old friends?[1] How effective was I at work during the year based on tasks finished in the project manager software? How optimistic was I about my ability to not flake in front of the television based on the time it took to actually read something I sent to Instapaper. Or just how optimistic was I based on the stuff I was sending to Instapaper? What is my slack cycle at work, based off my browser history?
This is all just information I’m already leaving. None of this would actually require me to start a new process.[2] I could be garnering my sleep patterns from apps like Sleep Cycle with only a little bit of effort. I could extract direct reports of my happiness from Mappiness. I could track my caffeine intake to plot against both, and I wonder what that would show.
We’re not in the future yet – where’s my Dr Fusion? – but how far am I from Manfred Macx and his externalised brain?
It’s 2011 tomorrow. I have so much I haven’t done. I want to conquer myself and do one of those things this year, plus at least one other. The one I have to do is become healthier. I was at 70 kilograms in August 2009. I am now once again back up to 16 centimeters too short. And shit yes, I can feel it. I can feel it in the way I don’t always have a firm hold on my breath, in the way my body protests when I change directions too quickly.
The other? That derives from a list of well worn personal desires that have, to date, been smothered beneath the enveloping coils of the boa constrictor of demotivation. I don’t really mind which one I succeed at.
Happy New Year.
1 One. I’m an awful human being.
2 Aside from taking up again the act of recording books I read. Goodreads you say?
-
# Stuff
- Two dozen glasses and coffee cups
- Half a dozen shirts I no longer wish to have fit me
- More back issues of recipe magazines than I cared to count, but only after the good recipes were retained
- Several bottles of expired medicine
- Three appliances, surplus to requirements.
- A river of old makeup
- An avalanche of old documents, now beyond useless
These are just some of the things now removed from my life in the preceding few days. In additional, several tons of dance trophies, accumulated over the years and left on horizontal surfaces all over the house have now been boxed and placed inside the garage. I imagine they will survive a similar excision of bric-a-brac, garbage, and items previously hidden to see if someone would notice that will take place in the garage on Saturday and Sunday. The house already feels better for it.
D and I moved a shelve set after the trophies it once contained were boxed and moved into some of the shelves a bunch of books, mostly books that speak to who we are as the shelves are in the living room. Art books from various exhibitions we have been to, knitting books deserving of pride of place, a Tolstoy book that makes me seem awesome even though I still haven’t finished it. You know, the usual thing. The book shelf in our room was overflowing, with books piled on the floor at its base. It still is, albeit to a lesser degree. I came to a decision point while I was moving books between rooms. In the future I will go out of my way to not buy physical editions of books I desire, I will preference ebooks. D must have thought highly of this because yesterday she bought a Kindle. Our plan is to share an Amazon account across my iPad and her Kindle and then cross-pollinate our book purchases. It’s not a foolproof solution and I’ve already had difficulties with some books, admittedly older books, but I’ll always make the effort to find it in ebook format first before I go to the Book Depository1.
This still leaves us with piles and piles and boxes and boxes of books that we simply don’t have space for. I don’t even know what we have and the prospect of cataloging it is one I have faced before during earlier christmas holidays; I fled then and I imagine I would again. The entire pre-2001 oeuvre of David Eddings; almost, if not all, of Stephen King’s back catalog; Anne Rice; Anne McCaffrey; Robert Jordan. A hillock of prose that I and D will surely never actually read again but that we most probably will not find within ourselves the fortitude to get rid of. We certainly couldn’t convert it to electronic format, Amazon has two Anne McCaffrey books in the Kindle store and neither of them seem to involve either dragons or psychic families or singing spaceships.
Or perhaps they just aren’t available to Australians. Book publishers, meet me at camera 3.
Hey. You wanna know what will happen if you keep up that shit? Please refer to what is happening to television in Australia. Australians, sick of being made to wait weeks and months for episodes of US programs to be aired in Australia, if they ever are aired, choose instead to download the shows minutes after the finish airing in the US. Guess what? Every book I kinda want to buy, I can find on a torrent site. Indeed, I downloaded Towers of Midnight despite D having purchased the dead tree format in Borders so that we could read it at the same time, so I could read it on my commute and not have to deal with the weight. You keep fucking me around, I’ll keep my money.
Because this isn’t a technophile thing, this is a quality of life thing. I don’t want piles and piles of physical objects in my life. I want the bare minimum I can get away with. The satisfaction I find in my environment is inversely proportional to the number of objects crowding me in.
I wonder what the interplay of this minimalist impulse and my desire to do more of my own elementary food preparation. I make my own pasta. I want to bake my own bread, and I am doing this but not at the level that we no longer buy bread. I want to cure bacon for D and tWM. I want to roast my own coffee beans. None of this can be done without acquiring and surrounding myself with sundry implements. In a kitchen with barely enough space to prepare the simplest of meals, no less.
My ideal home would be dominated by a kitchen/living room. A bedroom that exists solely for, as Dr Oz says, “sleep and sex” would be tucked away to the side. The only table would be the size of a whale. There’d be no television, just a white wall and a projector connected up to a big fat disc.
Bliss.
1 D keeps telling me I should use booko.com.au to find the best price, but invariably I find it sends me to the Book Depository anyway; besides, I made a vow to never buy a book from an Australian publishing house or an Australian store again – excepting Kinokuniya2 – and that pretty much leaves Amazon and tBD anyway.
2 Kinokuniya lobbied for the removal of territorial copyright and to allow parallel imports, so I will stil buy from them.

