I suppose I was asking for trouble when I posted something nice about the Velvet Underground a few days ago; it always seems that whenever I give them credit, for some reason "they" do something to irk me. In this case, it was the contents of a book of writings on the group that I came across. I should've known better, what with my experience with some of the stuff Reed and Morrison have said about Dylan and Morrison (uhh Jim Morrison, that is, not Sterling, although Reed probably put down Sterling at some point!!), two artists I know and love. It seems that a lot of fans of VU share a dislike of Dylan and the Doors, which makes me wonder why this trend seems to be largely prevalent among hardcore fans of the group (the type who regard them to be the fathers of modern rock, not just a cool little avant-garde group). I think certainly part of the reason is quite simply because they feel that such artists are renowned unjustly. (Then again, it seems like everyone hates the Doors these days, so...) Dylan nowadays receives virtually all credit for making literate rock lyrics, and I think the VU fan reaction is, to some extent at least, one of envy. I've read that people maintain that Reed's lyrics were more "honest", and that Dylan's were somehow through a veneer of some sort. (Of course I disagree, but I only bring these things up out of interest). There certainly is a world of difference between say "Visions Of Johanna" and "Venus In Furs", and I can certainly see the motivation for comments about the "reality" of Reed's lyrics.
It seems to me then that it's a different view of what is important/what is good in rock lyrics which prompts the anti-Dylan sentiment. The fact that Dylan is heralded as being the greatest lyricist ever and what have you no doubt irks some VU fans who see Reed as being a revolutionary before his time. I'm not intrepid enough to try and compared the two; there are areas where both shine, and the true high points are rather distinct I think. Reed can be completely honest and truly break down the barrier between listener and singer, be it when musing over his life ("My House"), or startling confession ("Heroin"), but on the other hand. It's obvious to me that he is a gifted lyricist, but one should consider also that Dylan mastered the art of making the bizarre make sense ("Stuck Inside Of Mobile"), and his imagery is darn-near unparalleled ("Visions Of Johanna"). And Blood On The Tracks, I think, is one of the most powerful rock-albums ever. When I talked about Plastic Ono Band, I mentioned how it was far more direct, and that's true; BOTT doesn't start off with "Mother, you had me, but I never had you". But it doesn't seem right to compare the two, because POB doesn't have anything like "Simple Twist Of Fate", say. Much like the Reed/Dylan divide, I think some things just can't be put side by side and critically contrasted, with a "winner" being determined.
And of course when one mentions The Doors, one of the first things bandied around is that they introduced the dark side of rock. I actually traced "Heroin" to as early as 1964, and Jim was actually influenced by VU after seeing them play once (imagine that!! What are the odds?), so it's true that the whole dark side of life thing wasn't entirely new. The Doors seem to be universally reviled now, so it's probably not just the VU fans who hate them. I suspect most of this animosity is directed squarely at Morrison, rather than at the actual band. I think with the Doors, it is very much a philosophical objection in the most part - I think many feel the band's whole atmosphere is fake, primarily because they find Morrison's lyrics to be derivative and phoney. I disagree, of course, but again I can certainly see adequate motivation for such sentiments. Even if you enter the world of Morrison with an open mind, there's a good chance that you'll feel disgusted with what you see (or hear), and join the ever-growing (it would seem) conclave of Doors-haters (or at least Doors-dislikers, who think the band is overrated).
I don't think it's as easy to try to compare Morrison and Reed in any objective sense, but it confounds me if it's the music itself turns people off. Starostin says "Anyone who thinks the Doors are unlistenable has a hearing disorder", and although I wouldn't go that far, it seems to have the right idea. I again suspect that it's probably Morrison who gets in the way of the music sometimes for the Jim-haters - a shame, because "Peace Frog" would still be great even without Jim's little digression (which I find rather good, but anyway) in the middle.
Yet again, it truly amazes me how people can have such different points of view, and how there are so many things which can affect this!
Aside: I don't much like these posts, because there's no proper opinion being expressed. I sometimes think that I hate writing, because I find now that I have no will to write down anything about what I feel about VU in comparison to Dylan and Morrison. What is happening to me!?!
Tuesday, May 31, 2005
For the first time ever in my long and illustrious programming life, I have said to myself "Wow, I sure could use multi-methods right about now". ("They grow up so fast, don't they?") Of course, I can't be sure that multi-methods will really solve my problems, but a cursory glance at the situation seems to indicate that such a direction will be fruitful. A rough overview - I need have a scheduler that will take an event and return a random "next" event, which must be a sensible choice (by which I mean that one can't have an ArriveEvent before a LeaveEvent, unless one goes into the realm of philosophy; I would normally, but not today, gentle reader!). It seems that this means a set of methods operating on each derived class:
But, of course, the events themselves are stored as Event *s; to make sure the right schedule is called, one needs double-dispatch!
Consequently, for the first time I have come across a situation where a pattern has suggested itself - in this case, Visitor. Ahh, things are really falling into place now!
I suppose this harkens back to the post I made a while ago about the need for some of the design patterns in a language that does support multi-methods, like Lisp. The pattern solution is more elegant than any function pointer hacks or the like, but the amount of code required to express a "simple" concept (dangerous phrase, eh?) is a bit inordinate in this case I think. I think one sign of the limitation of this neat trick is that I find myself thinking about the problem in a multi-method way, but the implementation seems to present some sort of gap with this idea in my head - ideally, they should both be able to seamlessly fit together. But that is the ultimate aim of all programming languages, is it not!?
Update: Wouldn't you know it, it turns out that double-dispatch is indeed a valid solution to this problem, but, its services are not required. That is, my whole abstraction which created the need for double-dispatch is unfounded. This came after much thought and a lot of energy spent on trying to tweak a design which I was quite proud of; I felt it was complicated only as a direct result of the limitations of C++. I had a brainstorming session where I exchanged ideas with another unfortunate soul, and at the end of it I felt physically drained. I confronted all the uncertain areas of my proposed design and laid them open to critique and possibly demolition, yet at the end of the gruelling session, most of them stayed intact. Tired but somewhat content, I revelled in what I thought was a clever approach to a seemingly simple problem. However, the bane of every developer is perhaps the fact that sometimes the seemingly simple is the simple!
Before I attempted to validate my theories with the lecturer, I had a vague feeling of unrest, and was uncertain of why this was. It seemed to me that my ideas were so uncharacteristic of the level of thinking that we had applied thus far, and this sowed some doubt in my mind whether I was going towards a laughably obfuscated solution. The lecturer did not use such a harsh term, but seemed to think the whole idea quite excessive and unnecessary. I tried to justify my approach by citing the achievement of a powerful abstraction, but the more I tried, the more I started to realize that perhaps I was completely wrong after all. It's mildly humourous how the whole thing has panned out - imagine lying in a field, content and at peace, but then all of a sudden finding yourself sinking into the ground! Perhaps that is not an altogether ill-formed analogy, because that is rather like what was going on in my head. It is not an unusual experience for me, actually. It seems that the few times that I do have an original idea, it is hopelessly misdirected and off track; if there is any pattern at all, it is that I apply abstractions too early, and in too much abundance at the wrong times. It is ironic that I have another design I am working with at the moment where the exact opposite seems to be true; the system is almost bewildering in its simplistic design, yet I cannot see suitable abstractions suggesting themselves in any meaningful way. The situation is a total reverse - I look on with wry amusement at some alternate approaches, and spot areas which I think display the same characteristics that I just mentioned. Yet I would be willing to wager that it is these alternate solutions which will prove to be more flexible and generic; outrageous!
I was advised that perhaps I think "too hard" about some problems, yet I don't know that that's true. I seem to be very selective about the cases where I do give serious thought to problems - much like my alter-ego then, 'twould seem that my instincts are always wrong! I apply a pattern of thinking in the wrong context. But, how much of a flaw is this? I think that perhaps it is not as serious as all that, if only because the mistakes not only help cement the nature of the lesson nature, but also open possibilities to other modes of thinking. For instance, the epiphany of using a Visitor pattern will probably remain with me for a while; the result of a mistake, but nonetheless a very powerful discovery I think.
But at the same time I find part of me getting tired with the mental exertion required. I spend mornings reading about analytical scalpels and neatly dividing items with clear strokes, but it would seem that my evenings end up in frustration at my own blunt cuts. It is hard sometimes to put this into perspective, as with most things. For sometimes...ahhh, the yearning to somehow apply these pristine notions and concepts is overwhelming! As it stands, I have to restrain myself in an attempt to reign in any potential mental blocks - such things, I now believe, are possible as a result of too much focus on the abstract and aesthetic, or at the very least, as the result of inexperienced focus (guilty as charged!).
"How funny it all is!", I feel compelled to conclude. I suppose all I can really do is laugh and try another day (naturally abstracting away the burden of it being an assessment!).
void schedule (ArriveEvent &e) { ... }
void schedule (ShopEvent &e) { ... }
But, of course, the events themselves are stored as Event *s; to make sure the right schedule is called, one needs double-dispatch!
Event *e = new ArriveEvent ();
scheduler.schedule (e); // Oops! Not polymorphic on argument type!
Consequently, for the first time I have come across a situation where a pattern has suggested itself - in this case, Visitor. Ahh, things are really falling into place now!
I suppose this harkens back to the post I made a while ago about the need for some of the design patterns in a language that does support multi-methods, like Lisp. The pattern solution is more elegant than any function pointer hacks or the like, but the amount of code required to express a "simple" concept (dangerous phrase, eh?) is a bit inordinate in this case I think. I think one sign of the limitation of this neat trick is that I find myself thinking about the problem in a multi-method way, but the implementation seems to present some sort of gap with this idea in my head - ideally, they should both be able to seamlessly fit together. But that is the ultimate aim of all programming languages, is it not!?
Update: Wouldn't you know it, it turns out that double-dispatch is indeed a valid solution to this problem, but, its services are not required. That is, my whole abstraction which created the need for double-dispatch is unfounded. This came after much thought and a lot of energy spent on trying to tweak a design which I was quite proud of; I felt it was complicated only as a direct result of the limitations of C++. I had a brainstorming session where I exchanged ideas with another unfortunate soul, and at the end of it I felt physically drained. I confronted all the uncertain areas of my proposed design and laid them open to critique and possibly demolition, yet at the end of the gruelling session, most of them stayed intact. Tired but somewhat content, I revelled in what I thought was a clever approach to a seemingly simple problem. However, the bane of every developer is perhaps the fact that sometimes the seemingly simple is the simple!
Before I attempted to validate my theories with the lecturer, I had a vague feeling of unrest, and was uncertain of why this was. It seemed to me that my ideas were so uncharacteristic of the level of thinking that we had applied thus far, and this sowed some doubt in my mind whether I was going towards a laughably obfuscated solution. The lecturer did not use such a harsh term, but seemed to think the whole idea quite excessive and unnecessary. I tried to justify my approach by citing the achievement of a powerful abstraction, but the more I tried, the more I started to realize that perhaps I was completely wrong after all. It's mildly humourous how the whole thing has panned out - imagine lying in a field, content and at peace, but then all of a sudden finding yourself sinking into the ground! Perhaps that is not an altogether ill-formed analogy, because that is rather like what was going on in my head. It is not an unusual experience for me, actually. It seems that the few times that I do have an original idea, it is hopelessly misdirected and off track; if there is any pattern at all, it is that I apply abstractions too early, and in too much abundance at the wrong times. It is ironic that I have another design I am working with at the moment where the exact opposite seems to be true; the system is almost bewildering in its simplistic design, yet I cannot see suitable abstractions suggesting themselves in any meaningful way. The situation is a total reverse - I look on with wry amusement at some alternate approaches, and spot areas which I think display the same characteristics that I just mentioned. Yet I would be willing to wager that it is these alternate solutions which will prove to be more flexible and generic; outrageous!
I was advised that perhaps I think "too hard" about some problems, yet I don't know that that's true. I seem to be very selective about the cases where I do give serious thought to problems - much like my alter-ego then, 'twould seem that my instincts are always wrong! I apply a pattern of thinking in the wrong context. But, how much of a flaw is this? I think that perhaps it is not as serious as all that, if only because the mistakes not only help cement the nature of the lesson nature, but also open possibilities to other modes of thinking. For instance, the epiphany of using a Visitor pattern will probably remain with me for a while; the result of a mistake, but nonetheless a very powerful discovery I think.
But at the same time I find part of me getting tired with the mental exertion required. I spend mornings reading about analytical scalpels and neatly dividing items with clear strokes, but it would seem that my evenings end up in frustration at my own blunt cuts. It is hard sometimes to put this into perspective, as with most things. For sometimes...ahhh, the yearning to somehow apply these pristine notions and concepts is overwhelming! As it stands, I have to restrain myself in an attempt to reign in any potential mental blocks - such things, I now believe, are possible as a result of too much focus on the abstract and aesthetic, or at the very least, as the result of inexperienced focus (guilty as charged!).
"How funny it all is!", I feel compelled to conclude. I suppose all I can really do is laugh and try another day (naturally abstracting away the burden of it being an assessment!).
Sunday, May 29, 2005
I can almost guarantee that you will be amazed at the goings on at Google Print. When it lets you get results like this, really, what can one say? I am just amazed at what they are doing. As a pseudo computer scientist, I am just in awe of what their underlying implementations must be - it is truly amazing that they have managed to design fault-tolerant systems with perversely fast search algorithms. I can only shake my head in disbelief.
It does seem like this blog is turning into one of those blogs, eh? Funnily enough, my original concept for this blog was precisely things of this nature - it seems that only when I started to take it more seriously did the direction change. On a surface level, certainly the world of technology can seem cold and unforgiving, and really not all that appealing. It certainly does not spark up images like a piece of literature, but I maintain that underneath it all, there is some clarity and elegance which can affect one in a different way. What, say, is the appeal of an elegant algorithm? It is easy to look at it and dismiss it as being a set of procedures to be carried out, but that misses the point I think - the beauty is to be found in the idea, not in its manifestation. I suppose I've been intoxicated with this notion of late, which explains the sudden outburst of posts on software, design, and the good life. I can't promise I will change, but I've been through such phases before, and chances are good that next week I'll be back to posting..oh, wait, I haven't posted anything good since last year! Ah well, maybe I'll post more links to Google print? Or better yet, how about 1D Tetris?
It does seem like this blog is turning into one of those blogs, eh? Funnily enough, my original concept for this blog was precisely things of this nature - it seems that only when I started to take it more seriously did the direction change. On a surface level, certainly the world of technology can seem cold and unforgiving, and really not all that appealing. It certainly does not spark up images like a piece of literature, but I maintain that underneath it all, there is some clarity and elegance which can affect one in a different way. What, say, is the appeal of an elegant algorithm? It is easy to look at it and dismiss it as being a set of procedures to be carried out, but that misses the point I think - the beauty is to be found in the idea, not in its manifestation. I suppose I've been intoxicated with this notion of late, which explains the sudden outburst of posts on software, design, and the good life. I can't promise I will change, but I've been through such phases before, and chances are good that next week I'll be back to posting..oh, wait, I haven't posted anything good since last year! Ah well, maybe I'll post more links to Google print? Or better yet, how about 1D Tetris?
Saturday, May 28, 2005
Sunday morning, praise the dawning... You know, it has probably been a year since I first heard of VU & Nico. But just the other day, I was thinking about how wonderfully coy it was for them to open their album with a song like "Sunday Morning". I tried to imagine the face of people who, like me, might've bought the album because it was supposed to uncompromising, harsh, groundbreaking, and all that - one might expects a furious opening track, white noise, jarring rhythms, heavy distortion and what have you. Instead, you get this disarming, soft number! It just makes VU all the more acceptable in my book that they didn't try to be purposely unacceptable starting off. Sure, one may not be able to say the same of some of the other songs, nor the second album for that matter, but nonetheless, "Sunday Morning" maintains its own charming, special place. (Yes, I know it isn't just a quiet number; I think Reed said it was meant to be akin to one walking home late at night, paranoid ("It's just the wasted years so close behind"), but that isn't the mood I get. And isn't that what really matters?)
Friday, May 27, 2005
I'll try to stop posting links to forum discussions (and posting exclusively on programming for that matter), but have a read of (as one posted aptly called it) "the most polite flamewar I've ever read". I'm ashamed that it was only recently that I knew what the RAII idiom; reading GameDev just makes me realize how little effort I've made these last few years to really learn anything new in the field of software. Even last year I wrote a post heralding my insane printing of a 500-odd page book on Lisp. It still remains unread, and lies quietly in my cupboard. I think it's just about time for me to stop thinking and start learning.
I seem to keep heading over to the Boost website, reading about some of the libraries, but never actually using anything. After reading about the lambda library, I think that's going to change. It seems so deliciously evil that I don't think I can say I have C++ experience without trying it out. Perhaps if I learnt Lisp like I intended to, then I wouldn't be as impressed; from what I've read, Boost's lambda functionality, although mighty impressive, is nowhere near as expressive as the equivalent in functional languages. But still, it seems a valiant effort, and it amazes me how they managed to extract so much out of templates (which are a nice idea, but I never expected that it could allow for such a level of extension).
Now, although these advanced parts of C++ are interesting, are they significantly helpful? Do they help one be more productive? I seem very much to be in a state of ignorance when it comes to software, don't I? Alas, I seem unable to determine the metric that other people (seemingly) employ to decide when to use C++ or Java, or vice-versa for a "normal" program where portability is not an issue (so perhaps I mean "simple" rather than "normal"). These parts of C++ are certainly a striking difference to Java, but I can't honestly say that I think that yes, they will increase productivity dramatically. It seems to be personal preference from where I'm standing, but surely there has to be more to it than that?
After a long struggle, I managed to install the Boost libraries for use with Cygwin. I thought I'd do it yesterday, but I should've known better than to do anything that requires mental effort past bedtime; I ended up installing Boost for Visual C++ instead of gcc, because I downloaded the Windows version of BoostJam! It was quite unforgiving in that the installation took at least an hour, and after a lot of patient waiting, I was puzzled as to why nothing seemed to be working. Of course, this morning things became painfully clear, and I set about installing it all over again. The installation isn't as friendly as I'd like, but it's a C++ library, so I think they expect a minimal degree of technical competence. Anyhow, it it installed now, so I am able to write perverse wonders such as
Wow!
Of course, the point is made here that such things would read much more cleanly as something like
similar to how it's done in C#/Java 5. Anyhow, it seems that Boost's lambda library pushes C++ to its limit, and I'm interested in seeing what that limit is.
Now, although these advanced parts of C++ are interesting, are they significantly helpful? Do they help one be more productive? I seem very much to be in a state of ignorance when it comes to software, don't I? Alas, I seem unable to determine the metric that other people (seemingly) employ to decide when to use C++ or Java, or vice-versa for a "normal" program where portability is not an issue (so perhaps I mean "simple" rather than "normal"). These parts of C++ are certainly a striking difference to Java, but I can't honestly say that I think that yes, they will increase productivity dramatically. It seems to be personal preference from where I'm standing, but surely there has to be more to it than that?
After a long struggle, I managed to install the Boost libraries for use with Cygwin. I thought I'd do it yesterday, but I should've known better than to do anything that requires mental effort past bedtime; I ended up installing Boost for Visual C++ instead of gcc, because I downloaded the Windows version of BoostJam! It was quite unforgiving in that the installation took at least an hour, and after a lot of patient waiting, I was puzzled as to why nothing seemed to be working. Of course, this morning things became painfully clear, and I set about installing it all over again. The installation isn't as friendly as I'd like, but it's a C++ library, so I think they expect a minimal degree of technical competence. Anyhow, it it installed now, so I am able to write perverse wonders such as
vectorv (5);
for_each (v.begin (), v.end (), boost::lambda::_1 = 1);
for_each (v.begin (), v.end (), cout << "Element: " << boost::lambda::_1 << "\n");
Wow!
Of course, the point is made here that such things would read much more cleanly as something like
for_each (w in v)
cout << w;
similar to how it's done in C#/Java 5. Anyhow, it seems that Boost's lambda library pushes C++ to its limit, and I'm interested in seeing what that limit is.
Thursday, May 26, 2005
My recent musings on elegance in software reminded me of something I read a long time ago, a thread on GameDev that featured a discussion on whether code is art. Unfortunately, there is a flame-war for the most part, but it is interesting nonetheless. When I first read it, I thought that code was art, but probably for a very different reason. At that stage, I think I equated the artistic nature of code to purely succinctness (for instance, I was particularly enamoured with recursive solutions back then). Now I feel like I have a better idea about what SabreMan was talking about; he's one of those posters who contributed a lot of things that I still find interesting to read today. Unfortunately, 'twould seem that he doesn't post anymore, and that's a shame. I've been unable to find any really good software forum with characters as interesting and knowledgeable as Oluseyi, SabreMan, Fruny..my virtual mentors and teachers, who inspire me to greater heights!
I've put some faith in the notion of catharsis through art, but it is important to note that catharsis does not mean that the root of a problem is solved. By this I am clumsily hinting towards yesterday's lament, for although it cleared up some of the frustration mixed with excitement, it has most certainly not introduced any radical new solution to my problem. I sit here once again unsure of how to proceed with a design, the demons of paralysis having total control. If only things were easier!
I think that there is a class of patterns that are far more specific than the ones outlined in the GoF's book, and I very much suspect that one of my problems is that I haven't been able to spot them. For instance, cleanly designing a class' implementation from its storage on a file-system is something I messed up yet again. By now, it should be automatic to think to separate the class' intrinsic responsibilities from issues such as saving its state, but I seem to be quite a slow learner in this regard. I wish there were a catalogue of "practical" patterns; which would really be very idiosyncratic implementations of the abstract GoF patterns. I think most programmers and designers assimilate these practical patterns quite naturally, but I'll wager there are quite a few others like me who perhaps don't stop to give due consideration to certain small, easily overlooked aspects of a design. (Part of the problem with constructing a "good" design solo is that it's usually hard to think very much beyond one's intended use of a piece of software!)
I think that there is a class of patterns that are far more specific than the ones outlined in the GoF's book, and I very much suspect that one of my problems is that I haven't been able to spot them. For instance, cleanly designing a class' implementation from its storage on a file-system is something I messed up yet again. By now, it should be automatic to think to separate the class' intrinsic responsibilities from issues such as saving its state, but I seem to be quite a slow learner in this regard. I wish there were a catalogue of "practical" patterns; which would really be very idiosyncratic implementations of the abstract GoF patterns. I think most programmers and designers assimilate these practical patterns quite naturally, but I'll wager there are quite a few others like me who perhaps don't stop to give due consideration to certain small, easily overlooked aspects of a design. (Part of the problem with constructing a "good" design solo is that it's usually hard to think very much beyond one's intended use of a piece of software!)
Wednesday, May 25, 2005
My recent epiphany about the benefits of formal upfront design in software has been somewhat marred by that most feared condition known as analysis paralysis. Of course it greatly has to do with my inexperience, but it serves as a reminder about the very real, very tangible gap between the aesthetic beauty in the succinct, clean theory behind some of software design, and the actual process of putting this into practise. I've taken on three fairly simply designs, and each time I have found myself being literally paralyzed by indecision. I seem to reach a stage where I cannot think how to proceed any further - I get stuck in an infinite loop of weighing the pros and cons of the options I have, and never being able to determine which way to go down. I start off with good intentions, and grand notions of coming up with a basic design and suddenly shouting "But wait! Separate abstraction from implementation! Bridge! Bridge!". What actually happens is that I reach a state where I can get literally fixated on one particular piece of a problem, and stare endlessly at the screen, weighing and reweighing my ideas but never reaching a decision. The resolution comes when I take the path of just going with my instinct; there's something to be said for that, but it would be far more satisfying if I could then provide some sort of rationale for me rejecting the other alternative. I am very interested in the higher-level thought processes that "good" designers apply when they are faced with such problems. Design, as with most problem-solving, seems to consist of (at least) two potentially torturous questions that one must answer. First, how do I begin? The big question that everyone has asked at some point I suppose. It's fascinating to record the different ways of approaching problems, especially problems across different fields. My very brief exposure to electrical engineering was enriching if only because it showed me how an engineer tries to solve problems. I remember in particular that during one of the later tutorials I had in the semester, as the tutor began writing up the solution to one of the exercises, it struck me that what I was seeing was very much a design pattern in engineering (probably a very basic one, but anyhow). I seemed to keep approaching problems from a mathematical perspective, and this alternative opened my mind to other ways of thinking. I left engineering with a new-found respect; I had started off with the impression that it would be very much practical and no-nonsense, and it was to some extent, although it certainly had some underlying elegance.
The second question I think is quite simply "Have I made the right choice?!"! At the moment, I seem to be totally unable to answer this question whenever it crops up.
For instance, I recently had a problem where MI (multiple inheritance) seemed appropriate. Of course, most people suggest that one look to alternatives to MI where possible, since it is easy to abuse (and tricky to get right). Very reasonable advice, but determining whether something is appropriate is, not surprisingly, never expounded on in any of the references I came across. There are guidelines, but the sad fact is that one has to apply some sort of intuition to one's specific problem. The same goes with patterns - they are powerful, but they are no magic panacea that one can throw at any given problem. Indeed, which each of my designs I have found it actually impossible to see the applicability of any simple pattern! Alas, applying them is not as easy as one would think!
The second question I think is quite simply "Have I made the right choice?!"! At the moment, I seem to be totally unable to answer this question whenever it crops up.
For instance, I recently had a problem where MI (multiple inheritance) seemed appropriate. Of course, most people suggest that one look to alternatives to MI where possible, since it is easy to abuse (and tricky to get right). Very reasonable advice, but determining whether something is appropriate is, not surprisingly, never expounded on in any of the references I came across. There are guidelines, but the sad fact is that one has to apply some sort of intuition to one's specific problem. The same goes with patterns - they are powerful, but they are no magic panacea that one can throw at any given problem. Indeed, which each of my designs I have found it actually impossible to see the applicability of any simple pattern! Alas, applying them is not as easy as one would think!
Tuesday, May 24, 2005
I previously told myself that I wouldn't listen to "Stairway To Heaven" backwards to look at the claims of the "secret" Satanic messages hidden in it. Cognitive dissonance it may be, but I didn't want to sully the delicate beauty of the song (and no, I am not one of the people who consider it the best song ever, I don't even believe such a thing exists; ripoff of "Taurus" it may be, but I still think it grand). (The astute reader will remember me briefly mentioning the debate about the supposed backmasking in the song) Alas, Simon Singh laid waste to my vow, by luring me to one of his lectures and then playing back this precious song, leaving me squirming in my seat! But thankfully, Singh went on to point out the precise point countless others have made, namely that it seems to be more an exercise in the power of suggestion than anything else. Wikpedia's article on backmasking points out that "hidden" Satanic messages have even been found in songs by Christian artists!
I like Plant's response to the claims there were subliminal messages, intended to influence the listener subconsciously: "If it worked, every record would have the backward message 'Buy this record!' in it!". Indeed!
Singh's lecture was of course very entertaining, but it only struck me afterwards how much of an impact he had on my impressionable young mind. It is not a great exaggeration to say that he probably single-handedly forged in me a strong interest in maths, and introduced me to the (now almost obvious) notion that there is oh-so-much-more to it than just numbers and greek letters. Perhaps without my exposure to Fermat's Last Thoerem, the side of this blog would read "...primarily obsessed with chemistry, music and philosophy..."!?!
I like Plant's response to the claims there were subliminal messages, intended to influence the listener subconsciously: "If it worked, every record would have the backward message 'Buy this record!' in it!". Indeed!
Singh's lecture was of course very entertaining, but it only struck me afterwards how much of an impact he had on my impressionable young mind. It is not a great exaggeration to say that he probably single-handedly forged in me a strong interest in maths, and introduced me to the (now almost obvious) notion that there is oh-so-much-more to it than just numbers and greek letters. Perhaps without my exposure to Fermat's Last Thoerem, the side of this blog would read "...primarily obsessed with chemistry, music and philosophy..."!?!
Saturday, May 21, 2005
Realities. Some mad hysteria in the morning hardly seems real during the quiet contemplation of the evening. Images are playing back, and I sit and tell myself it isn't me I am seeing. It is dead quiet, and I feel the onset of a cold. An ill-lit room is no comfort as I continue this mental fixation. Let it go, I want to say, but things are never as easy as that. It doesn't matter, those words against your character that may well follow. It is not me, I say, it is not me. I give the monster a name, and the madness clears.
It strikes me - it's because the morning was disrupted. Warm cup of coffee in hand, and totally tranquil...no, that moment is now gone. Till next week then. As night approaches, things give way in my head, and I begin to wonder what is real.
It strikes me - it's because the morning was disrupted. Warm cup of coffee in hand, and totally tranquil...no, that moment is now gone. Till next week then. As night approaches, things give way in my head, and I begin to wonder what is real.
Thursday, May 12, 2005
I have half a mind to now make this blog entirely about music. I just realized that I know nothing about it, and it now seems more pertinent a question to ask "What is music?" than it is to ask "What is life?". Admittedly this is probably temporary insanity, but it really does seem like this is the new path my life has taken. How is it so easy to put into music things impossible to express in words? The opposite is certainly true, but right now, it just seems as though..I don't know, I suppose the mystery of the way music fills me with greater yearning to envelop myself in it. (It is frustrating in some sense then that when I attempt to strum the guitar, what I get pales in comparison with the sounds and images in my head, but I will swallow the bitter taste for now)
Tuesday, May 10, 2005
Sunday, May 08, 2005
What is it about The Kinks' "Some Mother's Son" that makes me so emotional? I've rambled many, many times about music and the powerful emotions it manages to trigger, never managing to put into any coherent form the precise wonder and awe at the power it almost effortlessly manages to exert. A lot of the time, there is some formless beauty that I can't help but bow down to - these cases usually lead to posts like this one. But this song is different, in that it seems to cast a pebble into the placid ocean of memories within me, a relative rarity among songs I've never heard before (of course, some manage to powerfully connect with times in my life, and future listens evoke this initial period) - the resulting ripples cannot be expressed in words. Like most art, music can sometimes seem like it was intended specifically for onesself, and I suppose that's the case with this song. (Ironically, it's probably true that thousands of people feel the same way..!) There is really no point in analysing lyrics or the nature of the song, as is often the case with anything really personal. The song inexplicably takes me back to my own childhood, and makes me remember the people and places I used to know. The most powerful image of all is to be found in one particular line, and it is truly a marvel that that's all it takes to bring me down to my knees. Aside from chronicling the inscrutable beauty of the song, this post is just me saluting Ray Davies. When I read George Starostin's review of The Kinks, and saw him agreeing with the assertion that Davies was one of the greatest songwriters ever, I was initially sceptical. Back then, my knowledge of The Kinks was solely confined to "You Really Got Me", after all. Now, well, I can't say I've heard enough to agree with the assertion, but anyone who can write something like this deserves special respect. There may be no end to the amount of magic in this world, but it is not everyday I come across something so tender and tragic, yet which leaves on a note of hope ("some mother's memory remains").
Oh, and the rest of the Arthur album isn't too bad either; maybe not the masterpiece Starostin, among others, claims, but very impressive nonetheless. The purchase it was part of probably ranks as the best one I've made for at least a year. XTC far surpassed my expectations, and Nick Cave was, well, Nick Cave. Darn, now I feel the urge to listen to The Good Son again; see what blogging does to you? Foi na cruz, foi na cruz...
I wonder how many times I have used the word "beauty" these last few months. At any rate, it is better than the bleak and sometimes frightening haze of last year. I just remembered that I once said "If the past week was my Tender Prey, let this one be my The Good Son"; turns out my wish was fulfilled, although maybe not as soon as I had anticipated.
Oh, and the rest of the Arthur album isn't too bad either; maybe not the masterpiece Starostin, among others, claims, but very impressive nonetheless. The purchase it was part of probably ranks as the best one I've made for at least a year. XTC far surpassed my expectations, and Nick Cave was, well, Nick Cave. Darn, now I feel the urge to listen to The Good Son again; see what blogging does to you? Foi na cruz, foi na cruz...
I wonder how many times I have used the word "beauty" these last few months. At any rate, it is better than the bleak and sometimes frightening haze of last year. I just remembered that I once said "If the past week was my Tender Prey, let this one be my The Good Son"; turns out my wish was fulfilled, although maybe not as soon as I had anticipated.
Friday, May 06, 2005
Something I read among a series of tips for entry-level programmer interviews (which I ought to try to familiarize myself with a bit more):
I know I'm stupid to say this, but I hate this aspect of life. I don't agree that putting one under pressure in an interview is quite the same as the prolonged, shapeless pressure one is likely to encounter in reality, but even aside from that, I disapprove. Yes, I am an escapist, and a completely mad idealist, and that is why I sometimes worry about the future. I don't quite know what I expect something like an interview would be in my make-believe world; two people sitting in a room discussing Camus!? Life is composed of so many realities, and some of them are beautiful beyond words, and some, well, some are far more sour. I can't claim that this falls squarely into the latter, but to me, at times like this, it can feel like it's almost as bad. It's mildly off-putting to be forced to deal with them, but I suppose some things can't be helped. Of late, I find that I want to treat the sour as some banal triviality when compared to the sweet - I can't say that I deny the existence of the bad, but rather I feel like it pales in comparison to the true purpose of everything ("What is that", you say? Ahh, an earlier post holds the answer!). Whether or not this is delusional, I am uncertain.
"Typically during interviews my goal is to make the person crack. No joke. My goal is to see one of several things: sweat on the forehead, shaky hands, sweaty palms, verbiage promoting extreme worry and anxiousness, nervous tendencies like shaking a leg, tapping a foot, or tapping a hand, shaky voice, or simply the person says they can't solve my problems because they can't think straight. I've had each of those happen in interviews over the last year. While none of those are a definite NO for me, I look to see how well you handle the pressure. Can you take an authority figure hammering away at you when you don't really know the answer? Are you decisive? Can you make the quick decisions on the spot with no referencing or research?"
I know I'm stupid to say this, but I hate this aspect of life. I don't agree that putting one under pressure in an interview is quite the same as the prolonged, shapeless pressure one is likely to encounter in reality, but even aside from that, I disapprove. Yes, I am an escapist, and a completely mad idealist, and that is why I sometimes worry about the future. I don't quite know what I expect something like an interview would be in my make-believe world; two people sitting in a room discussing Camus!? Life is composed of so many realities, and some of them are beautiful beyond words, and some, well, some are far more sour. I can't claim that this falls squarely into the latter, but to me, at times like this, it can feel like it's almost as bad. It's mildly off-putting to be forced to deal with them, but I suppose some things can't be helped. Of late, I find that I want to treat the sour as some banal triviality when compared to the sweet - I can't say that I deny the existence of the bad, but rather I feel like it pales in comparison to the true purpose of everything ("What is that", you say? Ahh, an earlier post holds the answer!). Whether or not this is delusional, I am uncertain.
It was probably little over three years ago that I became familiar with the phrase "Gang Of Four", and their seminal book on design patterns (and a few months ago, I was aware of their namesake's seminal punk-rock career, but that isn't the point), having read several glowing reviews praising it to the sky. To my shame, it was only recently that I became acquainted with the patterns themselves, and at first I was unsure, but I quickly appreciated the elegance I saw in some of them. The GoF provide some very neat, concise statements that make one think all software development should be easy - "find what varies and encapsulate it", for instance. The reality is that this is not so easy to do, but it's still nice to think of software in these conceptually easy, clear ways. Careful to try to balance this giddy hysteria, I turned to the Lisp crowd (as one would), and came across this article that suggests that the famous Visitor design pattern may be redundant with CLOS. It reminds me of how there are such different worlds, even in the microcosm of software development, and so many schools of thought. By far, the Lisp crowd seems to be the place to be; darn it, they're so smug! I printed out a book on Lisp a year ago, but I still haven't read it (I wish I had, just so that I too could sit smugly by myself and treat design patterns as cute playthings for other developers!)
I suppose this ties in with the post on LSP - I remarked to someone recently that I didn't see the point of the UML design we were doing, and that most of it seemed tedious formalization of trivialities. I was under the impression that there weren't any noticeable benefits in terms of the resulting software when these designs were undertaken. But looking at the various design patterns, and seeing the problems they solve, I realize that I was looking at the issue from the wrong angle. My notion of design was very simplistic, and indeed my concept of design certainly made it a pointless chore. Yet it took some examples of sheer succinct elegance to make me feel that there was more to the picture. I suppose I run the risk now of being overly eager to apply these new tools, but that comes with the territory I suppose - it will take time and experience to determine the extent of their applicability. Interesting times are ahead for the developer in me!
I suppose this ties in with the post on LSP - I remarked to someone recently that I didn't see the point of the UML design we were doing, and that most of it seemed tedious formalization of trivialities. I was under the impression that there weren't any noticeable benefits in terms of the resulting software when these designs were undertaken. But looking at the various design patterns, and seeing the problems they solve, I realize that I was looking at the issue from the wrong angle. My notion of design was very simplistic, and indeed my concept of design certainly made it a pointless chore. Yet it took some examples of sheer succinct elegance to make me feel that there was more to the picture. I suppose I run the risk now of being overly eager to apply these new tools, but that comes with the territory I suppose - it will take time and experience to determine the extent of their applicability. Interesting times are ahead for the developer in me!
Another entertaining tidbit that only the net could provide us - videos of games completed in record time. I'm most interested to see the Morrowind video, but I haven't finished it myself, so I don't want to spoil anything. Speaking of RPGs, I shall soon take a trip into the Planescape world, and maybe even the Fallout one. It will undoubtedly make for some rivetting experiences!
Subscribe to:
Posts (Atom)