Archive for the ‘Systems Theory’ Category

After the last 5k run I took a week off.  This was partly because of other commitments, but also because of a pain in my left calf.

I expected some discomfort. Afterall, the body needs to adjust to the gargantuan effort of running continuously for longer periods of time. The pain got a little worrying after it was still noticable at rest two days later. 

The internet is a fantastic thing, allowing instant expertise in a given subject with just a coupes of Google searches – and an obligatory visit to specialist subject forums and of course,  Wikipedia.

After about an hour,  I was an expert in running injuries including over-pronation,  runners knee and shin splints.

This new found expertise persuaded me that I had all of the above along with a case of Plantar Fasciitis.

I booked a trip to a sports physio that I have visited a couple of times in the past for **very real** back and knee pain.

After an exam and a couple of tests, he diagnosed a couple of contracted muscles in the calf and thigh. I don’t recall the names, although he did a good job of explaining the mechanism of injury and systemic pathology. He also gave my back a going over too for good measure.

After the session, I felt a bit sore but walking back to the car, I felt an enormous improvement. Possibly psychological, but if so – job done.

I decided to rest up for a couple of days more just to be safe.

Advertisements

 

UML Tool for Fast UML Diagrams.

If you want a tool that robustly enforces UML syntax or has the latest UML language elements or SysML profile, then this is not the tool you want.  However, if you need a way of developing a quick concept without going through endless rigour and data dictionary definition, then this is a fantastic option. The most common model elements are all there and you can annotate all the class elements, associations, relations, etc.  that you need.

I have used this twice now to rapidly develop a diagram to convey a systems concept for which UML syntax is an obvious choice, but didn’t have the time to use Rhapsody or EA. Less cumbersome (and expensive!) than Visio – its easy to cut/paste the diagram as a bit map and quick to load up and modify. Can be used stand alone or as a plug-in to the Eclipse SDE. I have only used it standalone, so can’t comment on its use within Eclipse.

 

I have carried an ache in my left shoulder for about 4 days now. Yesterday, I decided to get it looked at. I couldn’t get an appointment yesterday, but managed one today – Good  Friday – unusual for a bank holiday (public holiday in the US).

What has this got to do with system’s theory?

Emergence” is the concept that behaviours emerge when different  systems are integrated or joined together. In this case systems could be, hardware or software components, a sub-system built from these components or even sociopolitical systems such as a country’s welfare state or voting system.

Giant's Causeway in Northern Ireland is an exa...

Giant's Causeway in Northern Ireland is an example of a complex emergent structure created by natural processes (Photo credit: Wikipedia)

Each of these systems or components has an inherent (and in most cases, known) behaviour. Emergence can occur when these systems are coupled together. In some circumstances its easy to predict the resulting behaviour such as when an oscillating system is joined to an amplification system – the oscillation gets bigger. In that case the resulting behaviour is probably desired. The designer intended to make the oscillation bigger for what ever the application – radio transmission, louder music, etc.

But even in a system such as the oscillator/amplifier combination, emergence can bring a number of unwanted emergent properties such as distortion or feedback. These can be remedied by adding a further system to filter out distortion or control unwanted feedback signals. This result of coupling is well-known in the craft field of electrical engineering and is generally considered during design. However, in evolving systems or large-scale, complex systems it is harder to predict. This is where the discipline of Systems Engineering looks specifically at system issues such as emergence.

 

So what’s that go to do with my back pain?

Last week, I wrote about my hike up into the Brecon Beacons from Pencilli. On the descent, I noticed a sharp pain in my left hip. I mentioned this to the therapist today, wondering if it were connected. She immediately started focusing on my right side and found that I had a partially immobile right SI joint (where the pelvis connects to the spine). She explained that the pain in the left hip was probably due to the body placing extra stress on the left knee as the brain attempted to level-up the pelvis. This in turn causes the IT Band (which is a piece of fascia tissue that runs between the knee and the muscles around the pelvis) to become inflamed by friction as it crosses the hip bones.

As the body has a natural aversion to pain, this causes muscle groups to tighten around the painful area to protect it. The tightening of these muscles caused the pulling of other muscle groups under the arm and in turn, the rhomboid muscles that sit under the shoulder-blade to tighten.

The body has a huge amount systems which it tries to keep in a balanced state (called homoeostasis) through everything we put it through. Generally, this is governed by feedback supplied by various biological sensors around the body and control mechanisms relayed through the nervous system.

In this case, a failure in one part of the body’s structural system, caused a pain signal in another part of the structural systems which led to body triggering a protection response which results (days later) in a painful condition elsewhere in the body.

The human body is a wonder of engineering and is a fantastic example of systems coupled together. Sometimes it doesn’t turn out how we would like, but its pretty good most of the time!

I just found an article on Lifehacker about Creative Thinking processes. There are many processes that promise to generate creativity in the form of ideas and solve problems. The most basic of which is (I suppose) brainstorming, but there are complex methods like Triz.

The 4 stage Creative Thinking process described is quite simple. You immerse yourself in the context of the area (or problem space). Then you leave it and relax. Ideas will then flow to you!

This process is sound – when writing software, I found that working on a problem to the point you cant get further (Step 1 – immersion) followed by a trip to the coffee machine, a walk or trip to the loo (Step 2 – Incubation) usually leads to Step 3 Illumination. The third step invariably occurs at inopportune moments like the middle of a lunch break, middle of the night, etc. The issue being that there is a big gap before being able to implement the idea at step 4 (Verification).

I believe the subconscious is at work here – this is why thing usually occur to us when resting. Many people follow the process without realising it – they work on something to the point of frustration, then take a break and the work out how to solve it. Unfortunately, again in software, there is an a side-effect of this process that I would refer to as the “recursive re-factoring effect”.

For the uninitiated,  Re-factoring is a process where code written to a design is re-written to take advantage of a better design usually as part of an iterative object-oriented development.

recursion

recursion (Photo credit: Sidereal)

A recursion is structured programming technique whereby a piece of code refers to itself. To avoid an endless (or bottomless) recursion, there must be an end.

Following the problem solving process described, a software engineer can work on a problem, and perhaps after taking a break, return to solve it in a non-optimal way. After another break, he realises that there is a better way to solve the problem and goes on tinkering in this way indefinitely.

The pseudo code here may not be a perfect implementation of the algorithm, but you get the drift. Its been a while since I actually wrote any code:

function SolveProblem( Problem p; ){
  while ( !frustrated ){
    solution_context = WorkOnProblem( p );
  }
  inspired_solution = TakeBreak( solution_context ) ;  //implementation stage - go for recursion!
  SolveProblem( ImplementSolution( inspired_solution, p ) ) ;
}

As can be seen this is effectively and endless recursion as there is no way out. The engineer goes on solving an infinite series of problems which require further and further optimisation. This is where engineers and developers get accused of “gold plating” by the project managers and there is a guard around the recursion like this:

if ( Time&&Budget&&CommonSense ){
  SolveProblem( ImplementSolution( inspired_solution, p ) ) ; 
}