Follow by Email

Saturday, March 3, 2012

Intense Development

There are periods of time during a project when I don't even want to sleep. Others around me get very annoyed. But when I come out the other end, something magical can be seen. This is partly because I, thankfully, work in the realm of computer graphics. And partly because I'm a visual person who can imagine a visual result that others can appreciate.

And it's all in the demo.

There is no sleight of hand in a demo. Not when people are to be impressed. But sometimes people just don't get the value in what you construct. This is where you have to educate them, to show them the value, to connect it to something they can understand. You have to make all that obsessive development time mean something.

You need to become tolerable again.

I have talked about where ideas come from. About the different frames of mind we can be in. About how to foster creativity in the first place. But, once you get the idea and reason out how it can be implemented, there is a new phase that needs to be explored. How does this process unfold, this intense development? How does the large feature or the complex technique get implemented? How can we, as mere humans, even manage something like this? What tools do we use to do the seemingly impossible? What parts of our brains do we have to use to accomplish our goals?


The best method to tackle a large project is to get organized. I do this by taking notes, drawing pictures, and building tools.

I have found that some of the best notes to take are these:

  • new ideas or features that you would like to explore
  • problems that need to be resolved
  • places to look when updating to some new arrangement of the code
For most people, the note-taking process is a hassle. But you really need to start taking those notes to accomplish a project that is so big you can't keep it all in your head!

When drawing a picture, sometimes a flowchart is useful. Here we have the basic step in constructing a Laplacian pyramid. The objective is to decompose the step into smaller operations, a process known as top-down decomposition.

Here the basic step gets split into reduction, expansion, and difference substeps.

The reduction step is the process of converting an image into another image that is half the size in both width and height. And one which thus does not contain any of the highest-frequency information in the original image. The expansion step is the process of resizing the half-sized image back into full size. This image will be blurrier than the original by definition. The difference step is the process of determining the differences between the original full-sized image and the blurred full-sized image. These differences form the highest frequency detail in the image.

This step can be repeated to create a quarter-sized image and a half-sized detail image.

So not only is the image decomposed into various frequency bands, but the process of decomposing the image has also been decomposed into steps!

Rational Processes

Using your rational mind is partly deduction, and partly experience. For instance, when you implement a gradient operation, experience tells you that the center of a line has a zero gradient, and either side of the line has a non-zero gradient. As a practical demonstration of this, consider the Painter brush stroke. It is from an airbrush at high opacity with a 2 pixel diameter: a typical thin line.

If you compute the gradient using a Sobel technique, each 3x3 neighborhood of the image is convolved with two 3x3 kernels. There are variations on this theme, but usually the kernels will look something like this:

 1  2  1                   -1  0  1
 0  0  0      and       -2  0  2
-1 -2 -1                  -1  0  1

The first kernel is for computing gradients in the y direction (horizontally-oriented edges) and the second gradient is for computing gradients in the x direction (vertically-oriented edges).

Convolution means multiplying each element of the kernel with  corresponding pixel in the actual neighborhood in the image and forming a sum of the products.

You do that for both kernels, producing two sums, which you can imagine to be the x and y value of a vector field. The gradient is simply the magnitude of that vector.

The result of this is a gradient like you see here. Notice that the center of the line has an empty space in it, corresponding to a zero edge.

My rational mind already knows this through experience. So this means that if I want to use the gradient as a mask, and process the center pixels of the line, I will have to do something to fill in the center of the gradient. Like an annealing operation (a blur followed by an increase of the contrast or exposure of the gradient).

A rational mind mixed with the ability to visualize is probably the best way to get image processing operations done the quickest. But there are times when visualizing is not enough. We must see the intermediate results and check that they are being produced correctly and effectively. This brings us to the next technique: building tools.

Building Tools For Visualizing and Debugging

Any process in image processing, no matter what it is, will have intermediate results. There will be a blurred buffer, morphology applied to something, a gradient, a vector field, some representation that needs to be visualized. And we may need to verify that each step is being accomplished correctly, or verify that the step is even doing what we imagined it would, and is thus useful in the process of finding a solution.

So we need to construct a tool to see the intermediate results, to study them, to inspect them, and to debug their construction when your idea of what they should look like does not match what you get.

I have done this time and time again with large projects I have worked on, and it has enabled me to make much faster progress on a large project. And with a tool such as this, it becomes another thing: your demo environment. Not only can you see what's happening, but others can as well.

In order for a demo to come off smoothly, your implementation has to be fast as well. This means that you will need to implement selective update, and also you will need to make it go as fast as possible through optimization.

It doesn't matter what kind of project you are working on. You will always need to demo to justify your continued work. You will need to show progress. You will need to convince people that it can be done.

Tool construction (a testbed with demo capability) is your best tool to accomplish this!

Choosing the Best System to Build On

When constructing an image processing tool that involves steps, intermediate results, complex staging, or heavy computation, you need to choose a system to build it all on top of. For my purposes, I am considering a Macintosh as my system platform. But there are APIs and methodology that apply to any task.

Core Image is a good API for image processing, when your result is constructed one pixel at a time. It can allow you to utilize a GPU or a multi-core CPU to get the job done, and it can render the task of constructing a pass on your data into a simple thing. This is highly desirable when you have a lot of passes to construct. Core Image kernels are pretty easy to construct. You can reference any number of source images, but you may produce only one pixel in the destination image. This conceptually works pretty easy for blurs, color operations, compositing operations, and even transitions. You can build Core Image filters on top of your operations, and their parameters are entire images. And settings for your operations.

OpenGL is a good system for doing computation and presenting that computation inside a texture on screen. When this texture is transformed in 3D, as in "onto a 3D object" then this is the ideal API to accomplish the task. OpenGL may also be used for computing results on 2D flats that are presented using an orthographic projection. The computation can occur using almost any OpenGL operation or it can occur using a fragment program. This is conceptually the same as Core Image, so there is not much value in going the OpenCL route unless textures are going to be transformed in 3D.

OpenCL is a good system for doing arbitrary computation using the GPU and the CPU. You can support multiple output buffers as well as multiple input buffers. This means that come simulation operations are easier. Also, things like scatter and gather to and from planar color formats are much more natural. For instance, conversion of RGB to YCC where the Y is kept separate from the CbCr information can be supported very easily. One RGB image input, two images, one Y ands the other CbCr output.

Multi-core CPU computation is another good method to get things done fast. Here you can use Grand Central Dispatch to easily queue your computation on multiple CPUs. It has never been easier.

The Dangers of Obsession

You can get buried in a project. It can overcome you. This can have a very confusing effect. Unless you disentangle yourself from it for a while and take a step back, you run the risk of becoming irrevocably lost.

Back in my Caltech days, there were those people who were interested in Dungeons and Dragons (D&D). This sometimes resulted in people becoming obsessed with the rule systems and the immersive game-play.

And sometimes people just got lost. First they forgot to shower, neglecting their basic cleanliness. Then they showed the effects of malnutrition: the endless supply of Coke and little white powdered-sugar donuts. They started talking about fifth-level clerics and trolls. They always carried those little clear twelve- and twenty-sided dice around with them. And one day they didn't come to class. And never appeared again.

These were good, perhaps weak-willed people who were casualties of war. The war against obsession.

Yet I also saw people get obsessed in technical and scientific matters. These were called grad students. They would work on their thesis obsessively, disappearing into a dark cave until they came out with something hard and shiny like a diamond. I observed that obsession had its value, it seems.

Buried in Complexity

You can add more and more to a program over a period of many months. This is called add-on programming. And it can lead to another problem: complexity. A haphazard programmer can continue to kludge up a piece of code using branching and questionable data structures. This can lead to spaghetti code: twisty passages all alike.

The only solution to this problem is rethinking it: it must be rewritten. There is no other way if it is to be modified in the future. If you were adding more and more stuff to it, then this is a virtual certainty. At this point it is time to develop the right control structures and data structures to render the solution in the most effective and extensible way.

Immersive Programming

At some point you will need to debug what you have created and make it work. This requires total immersion. The better you have organized your code, the easier it will be to understand the processes it uses and thus to figure out which steps are correct and which are incorrect. This is the process of debugging.

It's like putting your head into the code and visiting codeland.

One thing is sure: you better have your head on straight when you debug a large project the first time. This will be when your organization and rethinking of control and data structures will pay off.

SOmetimes when debugging a project it becomes clear that there is a logic flaw in the code. This can be a small one, like an off-by-one error, or some statements that are out of order.

Or it can be a very large problem indeed. One with huge ramifications for the code.

My advice is to fix it before going any further, no matter how sweeping the implied changes are.

To Sum It All Up

Once you have been through fifty or so large projects, you begin to see patterns much more clearly. Perhaps you can profit from some of the patterns I have found, and some of the cautionary tales.

All I know is that I mostly had to learn these things the hard way.



  1. "the center of a line has a zero gradient, and either side of the line has a non-zero gradient"

    I was momentarily confused, until I realized from the context of convolution, that you meant 'edge' (and not end points) where you wrote 'side'.

    I hope it is not too overbearing if I relate my similar experience (although I am not nearly as accomplished as you are).

    Indeed I agree, it requires total immersion to be one of the great programmers. Also agree that one has to walk that fine line between burnout and productive obsession. You are spot on, that when the diet starts falling apart, that is a warning sign. I recently found that having a fulltime maid improved my sustainable interval.

    I was doing 14-18 hour x 7 days from July to Dec. 2011. I mitigate my obsession with sports, mostly running. Apparently you have your artistic outlets (music, etc). I recently exhibited symptoms of neuropathy (progressive nerve damage in feet, hands, and early symptoms in face), which goes into near remission when I am not on the computer and outside doing sports for a few weeks.

    I don't want to quit programming, so I am searching for balance. Recently trying to purchase a campus on a hilltop to have fresh air and view to relax the eyes and incite me to take breaks.

  2. gradients, lines, edges, sides. different nomenclature. I view "ends" as what happens at the start and end of the stroke. A line divides a plane into two sides, so I naturally used that word.

    A gradient function is for finding edges, though and I totally get your confusion. A line then has two edges. But I view traveling along a line to divide the plane into a left side and a right side, when moving in a specific direction along a stroke.

    This notion of left and right side comes from the scalar cross product.

    if a vector goes from point 0 (x0, y0) to point 1 (x1, y1), it can be expressed as (vx, vy) = (x1-x0, y1-y0). An arbitrary point p (x, y) can be seen as lying on one side or the other of the line. define (ux, uy) = (x-x0, y-y0). The point p lies to the left of the line if the scalar cross product is positive.

    to_left = vx*uy - ux*vy > 0

    Obsessive coding:

    Yes I have been through the full project development gamut several times, over the years. In college, when I was working on a project at Calma, I would work over night and survive on Coke (the kind in a bottle) and late night dinners at a local restaurant, like El Faro (Mexican). Tom liked to go to the Burger Pit (and that was a low point in most of our dining pleasure).

    But yes, diet does begin to suffer. Nowadays its Hot Pockets for programmers, or stuff from the Junk Food Machine. At Apple, they try to stuff the Junk Food Machine with healthy alternatives, but people do still have access to things like Famous Amos cookies and Snickers bars.

    What they do is to provide free dinners to developers who work over the weekend and at night. This encourages a more sensible kind of obsession and keeps the programmers healthy, if you can call obsession healthy.

    But, hey, somebody's got to do the programming around here! ;-)

    For you, neuropathy may be a sign of diabetes (which can happen to anyone) or perhaps repetitive stress injury (in the case of Carpal Tunnel Syndrome). But to have neuropathy on feet is more likely to be some kind of diabetes-related problem. (but that's not certain in any sense of the word).

    I'd see a doctor, of course, when this starts to happen. And check my blood sugar Just In Case.

    Searching for balance is a good thing, though balance in the strictest sense leads to stagnation. Really, you are seeking a way to continue moving forwards. To move forwards, you do have to stop and smell the roses from time to time. This is necessary. And its the kind of balance you do need, I think.

    There is a need to center as well. This can help to release anxieties that can naturally block your ability to move forwards. But, at the same time, anxiety and the release from it can also be a sustaining energy for creativity.

    I use music as a way to release unwanted anxieties. To good effect, I think.

    1. Ah yes, that is a generalized concept (from high school geometry) that I remember now that you allude to it. The 1 lower dimensional space bisects the 1 higher dimensional space. A line has no end points, whereas a line segment does.

      * point bisects a line (1D space)
      * line bisects a plane (2D space)
      * plane bisects a 3D space

      Yes I remember the right-hand rule for scalar cross product. I used that of course in Art-O-Matic. Perhaps I'm rusty, as I haven't been using that sort of math for past decade.

      "Tom liked to go to the Burger Pit (and that was a low point in most of our dining pleasure)"

      Hehehe. LOL ;) Tom had upgraded to Chinese food when I met him.

      I had thought I have adult borderline diabetes, because I had some other symptoms over the years (often thirsty, wild energy level swings correlated to when and what I eat, extended days of super low energy, severe bouts of insomnia). However, afair I was tested and the result was negative. Also I was a sugar addict for a couple of years in my early 20s (after I shut down my first startup Neocept Word Up), where I would eat a large grocery bag of cookies, candies, chocolates, pecan pies, etc.. every night and vegetate in front of the TV on a high. That was a low point in my life, I think I was depressed from a combination of:

      * family issues
      * failed relationship
      * burnout from coding 5MB of 68000 assembly code
      * disappointed because Atari purchased Federated electronics retailer and defocused from the ST computer into making calculators. You may remember the ST had more hardware for the money than the Mac at that time.

      Tangentially, after that I was getting into 3D programming and by 1993 I discovered Fractal.

      Since my mid-30s, I ingest no TV, no processed foods, no sugar, no alcohol, and no chemicals such as MSG nor preservatives.

      Additionally I took steroid drops in my 80% blinded (100% retinal detachment) eye for over a year. Experimented with taking DHEA, St. John's Wort, Green Tea, Melatonin, etc. to battle the insomnia, which hasn't returned for years. (to readers, don't use those, improve to a raw food diet instead) Also I was infected with a high # strain of HPV (dormant), so it may be an auto-immune dysfunction. Or it could be a cancer, say in the brain. Afaik, that exercise (systemic health) can suppress the symptoms perhaps provides some support for my auto-immune theory.

      I seem to have a uncanny, fortuitous knack for finding trouble, so programming in my cave is safer ;)

      Strange luck that what you and Tom had, came to me later (nerve damage in hands, blinded in one eye).

      I didn't put mercury in my hand ;) (read that in your other blog)

      I agree we need tangents to relieve anxiety and recharge our batteries. Mutiple passions can't really be balanced (one will take priority), yet agreed that falling forward while attempting to do so is more sustainable and effective than monomania.

    2. Right-hand rule: if your bitmap is in row-major order with the origin at the top left, though, you may need to use the left-hand rule. Ever since Tom Schaefer at Calma taught it to me (1976), the dot and codot (cross) products have been valuable additions to my analytical geometry toolset. And of course their 3D cousins. It occurs to me that my analytical geometry teacher, Mr. Pearson, was trying to teach me this in 1973.

      Tom Hedges ate Chinese food at the Panda Inn in Aptos every day for five years at least. He was a creature of habit, like one of my New York friends, who ate at the same diner for lunch every day for fifteen years. Me, I like to vary my intake a bit!

      These days I live on an LCHF diet, which is low carbohydrate high fat. You teach your body to metabolize the fat, while avoiding filler foods, that cause fat.

      After getting AVN (Avascular Necrosis in both hips) and getting operations to relieve edemas in the hip joints (which caused terrible pain and made it almost impossible to walk) I started taking Litozin as a supplement when glucosamine was doing nothing, and I saw an immediate improvement in my hips' ability to recover from injury. Now I walk pretty well.

      Although hip replacement will be the ultimate outcome. In both hips.

      I listened really well to someone who suggested these changes and they have made quite an improvement in livability.

      My left eye has always been a problem since birth, with optic nerve damage. This will never get better. I can see out of it, but recognizing and reading is simply impossible, though the images I see are sharp. This is almost impossible for most people to believe but it has to do with what areas of vision that actually work. Periphery is fine, but that area near the fovea is non-functional. I got an eye map one day and they were fascinated by the result. To me, i just explained what I had been seeing and made the situation quite hopeless.

    3. continuation:

      If your neuropathy is held in almost complete remission by exercise, then I see that as a divine message. At least it is something you can work with. With Tom, it was progressive and implacable. I wouldn't have wanted to be him, let's say.

      Though Tom was a powerful ally and a good friend, I still remember his strong opinions on lots of subjects that I couldn't really agree with. He never agreed with music compression, as in CDs and MP3's. Personally, though I do care about what happens to music I record, I think the compression standards are good enough.

      He used to have a turntable with mint copies of old records like Dark Side of the Moon and Revolver. Personally, I keep those on my iPhone. Every time I spoke to him, I learned that "to each his/her own" was the best way to deal with the world.

      The Atari ST taught us that there was always better hardware but computers are obsoleted quickly and there is more than hardware to a total solution.

      If you have an auto-immune disorder then More Power To You my friend. That's a hard road to travel. Trouble is easy to find these days. And sometimes it finds us.

      One friend had a nanny that coughed in their kids face. Next thing you know, the kid tested positive for TB. At 3 or 4 years old.

      So staying in a cave is not necessarily going to help you from trouble finding you.

    4. In the brief period I knew Tom, it seemed to me that he had love for hardware and analog, and a gregarious, boisterous, rebellious, blunt sense of humor. He was often fiddling with new hardware, writing "NFG" on rejects, and there was his interest in rockets:

      Someone (Bob Landson?) whispered to me that Tom had a photographic memory and could memorize a page of the white pages, so an off-the-wall thought is that perhaps discarding psychophysically indistinguishable (to the center of the bell curve) data was intellectually painful for him.

      I got the impression that Tom's strength was engineering, and yours was creativity. Tom could take a set of variables and optimize the solution. This was evident in how he could optimize his LAN messaging directives to me in a single sentence, and I would try to deduce all the unstated requirements which necessarily followed.

      You could develop new ideas and algorithms at an extremely fast rate, and afair he would keep you grounded in integration engineering concerns and also realistic scheduling deadlines. That was just my impression at a distance, and might be inaccurate.

      I remember when we went to lunch with some of the original Borland C developers Lars, Jeff Stock and Glenn Reid (if I remember correctly, I think I was the one who connected Fractal to them), and Tom got into a debate with Jeff about compiler graph theory. Jeff did consulting work (about 2 weeks) on CoolPage, and he implemented the Objects window. It was excellent and much appreciated. I asked him to fix the O(n^2) updating performance, and when he couldn't, I changed one line in his code to make it O(n) or O(log n). Afair that lunch was on my last day at Fractal, and I felt so guilty and with torpedoed self-esteem, especially after you and Tom had offered me such an incredible opportunity. I told Tom in the parking lot that I wasn't that good and bless his heart, he said "no you have a talent".

    5. Tangentially, I remember one weekend at the Aptos Fractal office, when there were no other employees around, you introduced me to a famous musician, perhaps it was a member of Crosby, Still, and Nash. I was so shy at that young age.

      Although not at your level of accomplishments, I have demonstrated some ability to spawn creative new algorithms and features often, e.g. the real-time depth-of-field blur and cartoon line algorithms in Art-O-Matic circa 1997. Of course I had to do all those left and right-handed coordinate systems, cross and dot products, etc.. I still have 2 books here with me, Computer Graphics: Principles & Practice, Foley and Three-Dimensional Computer Graphics, Alan Watt. The internet has been an amazing boost to my knowledge, and enabled me to catch up on some formal education I missed. I am always reading and thinking about novel ways to address problems, and trying to find new problems. I also have some of Tom's engineering focus, which is probably how I related well with him.

      My mother said I was the only child she knew of that took apart his toys instead of playing with them. There was a photo of me at roughly age 2, constructing something with a hammer. I think it was at age 5, that I helped my dad workout the geometry and design for platform he put in the back of his VW bus to leave us and live in Belize. At age 13 (1976), I bought the book, Understanding Microprocessors, Radio Shack, on my own initiative. I wanted to understand what the IC chips in my pocket football game were doing. I spent the entire summer between high school (1983) and college teaching myself BASIC programming on an Apple II solely by trial and error (no formal manual or guide). I implemented a simulation of flying through a 3D tunnel, even I had not yet any formal education in computer graphics. That was the first computer I had access to. I can only imagine if my parents had purchased me a computer sooner. I was on my own (divorced parents, absent father) and attended roughly 9 different schools before I graduated high school, because my mother was always moving. I was working from age 13, cutting grass in blistering heat in Lousiana, doing central A/C in that heat, also doing summer "death" camps for high school football (most guys physically can't finish), etc.. At one Baton Rouge elementary, my sister and I were the only white kids and the black kids had never touched fine hair. We sat in a classroom without a teacher and watch spitballs fly for hours. I remember the neighbor's dogs had distemper and the kids had ringworm.

      When I landed at Culver City High School for 10th grade to live with my father, I got a 3.2 GPA first year because I was often drunk (even though I won JV X-country league championship). I got a 4.0 GPA the rest of the way, and even started Calculus at college at night during my high school senior year. My freshman year in college (Lousiana State University, which has a top math department) I was placing for example top 3 out of 3 sections (1000+ students) in Chemisty, etc. I haven't scored too high on IQ tests, ranging between 115 - 140. I don't really know yet what my abilities are. Still striving. Hope I have time remaining.

      I vividly remember displeasing you when I broke the extremely long message loop of Painter while trying to organize it a bit. Sorry about that. I learned my lesson about hidden semantics when there isn't referential transparency. Also learned the proverb, don't fix what isn't broken. Luckily we had version control software (apparently due to Tom's systems engineering focus).

      Atari ST taught me that software (platforms) matter most.

    6. ...continued from prior 2 posts... (relating life stories is apparently very verbose)

      I was accepted at UC Santa Barbara in electrical engineering, but choose to go for UC Berkeley instead and was denied. So that is why I ended up at L.S.U. (my father's alma mater where he graduated top of his class in law school when L.S.U. was one of the top law schools in the country at that time). My father was West Coast Division Head Attorney for Exxon. I believe he handled the Valdez spill and Prudhoe Bay.

      I am relieved to read that your hips (especially distractive pain) are manageable with the new drug, and that hip replacement is an option in the future. Hopefully technology will continue to improve in that area in the meantime. Afaik, my optic nerve is still fully intact, and I need an artificial lens, cornea, and iris (mine were destroyed). I was able to read large type on magazine covers with a glass lens on my right eye, before my cornea hardened and got cloudy. Only perhaps 50% of my retina remains, so a retinal implant might be helpful. I wait on technology to improve.

      As for my (only self-diagnosed) neuropathy, it is reoccurring in bouts that last several days, as well as low grade symptoms that are often present. Appears to be spreading from the feet into the hands, arms, eyelids, and side of the face. But much of the time, the symptoms are slight to none. I had a breakout rash under my arm, so I am strongly suspecting the 2006 HPV infection as the cause of the progressive nerve damage. So far at 47, I am still competitive in sports with 20 year olds, so it is not yet debilitating. Symptoms seem to worsen when I am inactive on the computer.

      Yeah the infectious diseases are really a pain, especially when contracting a new one every week. I have had most of them by now ;) Remember you told me the worms would craw up in my feet if I didn't wear shoes in the tropics. I heeded your warning.

      Thanks Mark for all of it, including the interaction on the blog.

    7. Shelby,

      Sorry it takes me so long to answer. It has been a busy couple of days.

      You do have talent, of course, and Tom could see this. I'm sure you have been appreciated wherever you end up.

      Tom couldn't memorize a whole page of the white pages. But he was quite sharp. He could fix anything. And he and I in those days made a pretty good team with my creativity and his systems knowledge. I learned more stuff from him than from anybody else.

      Your memories of the interactions and codependence of Tom and I are quite realistic and correct. Nicely matched development monsters.

      So nowadays I have to do all the Tom-work myself. No problem. Like I said, I learned it all from him. God Rest His Soul.

      Yes, I remember introducing you to Graham Nash. The dude that wrote Teach Your Children and Our House. He is a really nice guy. And a great photographer too.

      It sounds like you were a troubled savant who didn't early know how to take an IQ test. I doubt you IQ is that low, Shelby. I know you too well!

      Difficult times often build the strongest souls.

      And none of us really knows our abilities until we try to do things that are harder than the last thing we tried to do. And so forth. Abilities are a moving target for all of us that care to find out.

      Breaking things: We have to fail to find out these things. There's really no other way is there? That's the moral of the blog post The Things We Throw Away. Failure is the only ticket to success in the long term, because it speaks of a goal earned rather than something you just "aced".

      And after time, one just develops a natural intuition for what will work and what won't work. This is what you are really trying for. The magic intuition! So much time wasted can be saved when you have this intuition.

      I have got that way with pictures, images, pixels.

      But I still keep an open mind because there are lots of people smarter than me. There's still lots to learn.

    8. Wastin' away: we all get older and experience sometimes brings with it some maladies that cause us grief. But pay attention to the research and the alternative medicine and sometimes you can beat it, or at least stave it off.

      I am always sorry to hear about problems with eyes. I can so sympathize. If the optic nerve is good then there may be hope yet. In my case, the optic nerve was damaged and the effects of this can be mapped out systematically with a light board. It explains my symptoms, and also why, when it's dark and a loud sound happens, that I can see zig-zag high-contrast patterns like a maze. It's actually known to occur in people with optic nerve damage. And I thought I was weird for so many years. Well, I was right about that, but at least the optic nerve damage explains this. ;-)

      And neuropathy can't be good, Shelby. Consult a physician about that, and soon. If you feel pins and needles, then you should find out why. If it spreads, it's *not* good!

    9. Much appreciated. Will do. I am happy to hear that you still stay open to outside ideas. I am thinking if one has a successful pattern (intuition) and blocks out everything else, adaptation will suffer. Yet we must have priorities, so there is a limit to how much extraneous information we can process.

      Typo: I was 13 in 1978.

      The song Our House represented my happy house with loving grandparents before 5.

      Ah the late 60s, riding in my Dad's convertible Triumph TR250 and catching crawfish together in the swamps.

      Perhaps we X-gens want to sometimes feel things in extremes. Blame the media or the 50+% divorce rate, rampant drug use, Vietnam war, etc..

      My beer bong songs as an example:

      Led Zeppelin - Dazed and Confused

      Tool - Sober

      AC/DC - You Shook Me All Night Long.

      Scorpions - Still Loving You

      Depeche Mode - Behind the Wheel

      Alice In Chains - Rooster

      Alice In Chains - Would

    10. P.S. It is worse than pins and needles. It includes uncontrollable fluttering movements (eyelids, side of face, hands, feet, and now recently arms), foot wants to cramp at the slightest touch, feet swell up, etc.. My time is limited, I know it.

    11. Shelby: please see a physician immediately. If nothing else, you will want to relieve some of the symptoms. Take potassium (bananas are rich in potassium, which, if it is in short supply can lead to severe cramping).

      Nothing in your song choices seems unusual to me. A playlist is just a reflection of musical preferences, and mood. For instance, I don't sit around listening to Our House all day, after all.

      The music I write is often brooding and melodramatic, or melodic yet startling. Sometimes brash, sometimes romantic. We all have our preferences. Some songs speak of hope, some songs speak of desperation. But all songs make you feel something. It's what makes music itself great.

      My problem is that sometimes I don't want to listen to music, because I hear it in my head and it's struggling to come out. And eventually it does, either by my singing it in the car or by playing it on the piano, both recorded into my iPhone.

    12. I understand what you mean about having some new creation at the tip of your tongue and needing to articulate the external recording before it is buried in the mind by new incoming stimuli.

      Music is more of an emotional release by now, because I muted most aspirations to create music some decades ago. That creative urge got overshadowed by other priorities. Music takes a lot of time and practice to master, but so do other creative domains. I posit there is the generalized concept of harmony in most every domain, e.g. even basketball and blogging.

      I am often more interested in creating the abstracted metamodel, than the set of concrete models that instantiate the metamodel. Which means I am often throwing away some concrete creation (possibly partially implemented), because I want to explore the metamodel of that the metamodel of that concrete model. OTOH, I do go through periods where I am very engrossed in the construction of concrete models, especially when exploring the creative limits of a new metamodel.

    13. I like prioritization, but not at the expense of the generality. While I wouldn't want to make money form music, I still would like to make it. The creative urge seems to come out of a lot of things I do.

      Is a sign of genius to look for a parallel between harmony and other subjects. This is a main tenet of creativity: relating the rules of one subject to another. To the average person, these ideas sound crazy. But, if you really pursue it, you can learn something, discover other things, and sometimes create whole new ways to understand them.

      Metamodels are a valuable tool, but sooner or later they must be tied to the concrete to be useful in solving real world problems.

      When solving a hard problem, usually the model gets more complex until it fully describes the problem. Once I understand the problem fully, then the solution is generally not far off.

  3. Wow! some beautiful colored pieces there mate! Those aren't chinese are they?

    1. Not a speck of Chinese in those drawings. They simply reflect my youthful enthusiasm (that’s when they were drawn). And they ironically mirror my poor coding style in those days, which was like drowning in noodles; it takes time and experience to organize one’s thoughts along the lines required for intense development.

      My most recent pieces are much more linear and conceptually focused. Of course I still draw knots but now with much greater symmetry and clarity.