Flash AS3: Garbage collection and the importance of recycling

February 21, 2009

Today I am optimizing my portfolio site. It combines both dynamically generated- and static items. Now the static items pose no problem. The dynamically generated do.

Garbage collection

First of all: the garbage collector of Flash 9 sucks. Objects/movieclips with either/ or

  1. Events
  2. External references to-

Will sustain in memory. Apparently the next release of Flash will deal with this issue with some kind of “Kill” or “Die” or “Dispose” function. For now, we have to be creative.

The problem of Flash’s lazy/sloppy garbage collection is not the only thing that bugged me.

“Memory leaks”

In my portfolio site I create tiles with an image inside the tile. The tile itself is a button. Each time I switched to another Panel to present other data, the memory use of that Flash movie increased with 20MB to 24MB. First I blamed the images I loaded inside the MovieClips. But when I did NOT load the images into the movieclips, the increase/leakage stayed the same.

The culprits: 4 tiny tiles x 5MB each
4 tiles = 20MB memory leak

The tiles are the only variable element in the site. As 4 new tiles are created with every new page loaded and are hard to dispose of, the increase in memory use will be at least 20MB with each new page view, since old pages are not stored but (should be) disposed of. Since the garbage collection of Flash is crap anyway I decided to drop Plan A (write a garbage cleaner) and go for plan B.

Plan B: The short term solution for Memory Leaks: Recycling

When the garbage truck does not come along and rubbish piles up around your house what can you do? Recycling the old crap to avoid more rubbish to come into your house is one of the easiest ways.

Once I create my objects on stage, I keep tabs on them via an Array. When I “destroy” them, I simply remove them from stage and make them available for re-use. Instead of creating new instances of my interactive objects I run through the array with already created ones, clear their settings and call them back on stage. Only when more movieclips are required I create them.

My current solution is rather straight forward since the array is per  Content Pane (3 in total) and there is only one stip of tiles.

The memory leakage is now “only” 1 MB per new view.

Next step

The next step to take is to create a solid pattern for recycling assets (including images and SWFs). When time allows I will improve my current solution and release it as open source.


Shoutcasting, event models and AS3 – basics

February 21, 2009

Today I am redesigning the event structure of my new portfolio site. Instead of sketching things out on paper and have things ending up in some stack of paper I decided to put it in a blog post. This is part 1, explaining the basics ot two principles I use:

  1. Shoutcasting – “I do not know where you are or who you are so I simply shout your name and when you hear me you will respond”
  2. Pointcasting – “I do not know nor care where you are, but I know your name and you are in my list, so I call you directly”

Starting points

ORIGINS

In the past year I have done several projects where flash-content was created by others. In contrast to code-driven sites (where all assets are placed on stage- and are stitched together via code) these sites were design driven (where all assets are placed on stage and have to be stitched together via code).

SHOUTCASTING

Let’s look at the possible strategies to find and address someone within a venue:

  1. Address the person directly. You do need to know what this person looks like and where he or she is, or cal him or her via their cellphone (which is easier). See “pointcasting” for the implementation of that scenario.
  2. Ask around. You only need to know the persons name, but you are dependent of a chain of people and connections. If your strategy is fuzzy, it might take a lot of asking around. If it is focused it will take less time. You are dependent of a chain of people though. When the chain is broken, you will not reach the person you are looking for.
  3. Shoutcasting via an centralized announcement system. It is a bit crude, but you are not dependent of a chain of people nor do you need to know where the person is within the venue.

Setup

  1. There is a Central Handler (named CENTRAL in my code)
  2. This Central Handler is a singleton and provides the shoutcast eventlistener model using “subscribe” and “broadcast” to subscribe to and broadcast the occurrence of an event
  3. There is a Smart MovieClip (Flash / actionscript). This “smart movieclip” carries a toolset of handy things I can use for 96% of all smart objects in my proejcts, including: loading and mappng XML data to elements in a Page/Panel/Button, event handlers and shared objects.
  4. There are Panels/Pages and Buttons
  5. Panels/Pages and Buttons use the Smart MovieClip as their basis via inheritance / extension
  6. The Smart MovieClip imports and instantiates the Central Handler
  7. Via the Central Handler, Smart MovieClips have direct access to the eventlistener

Implementation

  1. Each panel/page is given an unique name.
  2. Each panel/page/button subscribes to one or more events using the following setup:
    CENTRAL.subscribe(“eventtype_”+myPagePanelName , myOnEventDoAction). myPagePanelName will personalize the “eventtype_” event to a specific page/panel or button.
  3. Via XML definitions, the objects recieve “targets” to shoutcast to. “sources” are passed to child objects (like buttons) via code. For instance:
    <XML><button action=”open_panel3″ src=”mySource.xml”></XML> can be shoutcasted as CENTRAL.broadcast(“open_panel3″)

When the user presses the button, only objects named: “panel3″ with the subscription “open_” (“open_panel3″) will respond. The code can look like this:

CENTRAL.subscribe(“open_”+this.name, onOpenEvent)
// When whatever component fires a “broadcast” with “open_”+ myPagePanelName the onOpenEvent function will be called.

CENTRAL.subscribe(“hideallpanels”, onHideEvent)
// Since it is not named to a specific panel, all panels will respond and hide when this event occurs.

function onHideEvent(evt)
{
this.visible=false;
// Hide this panel (and all other panels: on the general “hideallpanels” event)
}

function onOpenEvent(evt)
{
CENTRAL.broadcast(“hideallpanels”) // All panels – including this one – listens to this event and will be set to invisible
this.visible=true; // After every panel is hdden:  show this panel
}

Advantages

Since there is no need for objects to be aware of each other, the event model stays resonably simple. With only 6 lines of code you hide all panels and show only the panel whose name was “shoutcasted” with an instruction.

POINTCASTING

With pointcasting, you only address very specific items. In some cases, when loading data into another object, pointcasting might be preferrable above shoutcasting. Again I used a shortcut, by registering every object of relevance into a list, like a phone directory named: CENTRAL.objects.

When using the example of people, again I want to avoid too many dependencies. I do NOT WANT or NEED to know WHERE this person is or what he or she LOOKS like. Like with my mobile phone: when I dial the number I simply want a response, regardless if this person is at home or on the road somewhere.

To get there I use three steps:

Registering a page/panel
CENTRAL.objects[this.name]=this; // Using the name of the (visual) object to register the object reference to it.

Using XML to tie things together
<button action=”loaddata” target=”myTarget” src=”myXML.xml”>

Calling the target object using the settings in XML
myTarget=CENTRAL.objects[button.@target]
myTarget.loadData(button.@src)

How it works:

  1. Each panel/page registers itself in the objects list, using their unique name.
  2. Via XML I tell objects like my buttons where to pointcast their actions to.
  3. Within the Button-class I simply use the objects list in CENTRAL with the XML definitions bound to the button to perform a specific action
  4. When the target object is there, the XML file will be loaded within that object

LIMITATIONS AND DISADVANTAGES

Using a loosely based structure like this also carries its risks. “What if there is no panel with the name I called?”. In the sample given above all panels are closed and none will be opened. Also, when multiple elements carry the same name there will be conflicts of references will be overwritten by other references.

SUMMERY

Shoutcast and Pointcast as described here are two simple methods to address objects within my Flash projects.


Snow! AS3 filters and performance tests

February 18, 2009

Inspired by the falling snow in the third epsode of Mushishi: “Tender horns” I decided that a snow generator might be a nice benchmarker for several items:

  1. Using filters
  2. Addressing a LOT of particles
  3. Exploring the boundries of AS3 performance and looping through arrays

Why snow?

Snow is reasonably limited in its behaviour and nice to look at. It falls down. It can be moved by wind. It can flutter when there is hardly no wind. It is white and has this semi-transparency to it.

Screenshots:

Source of inspration: Mushishi – episode 3 – snow fall

picture-67

Snow using Blendmode

picture-651

Snow using Blur filter

picture-661

I only loosely based my snowfall on the Mushishi thing. (Mainly the sheer amount.) The snow created with Blur (the third image) is somehow less convincing to me than using the “add” Blendmode as they lack transparency. Beautiful snow has its price however. With only 1000 particles the Blendmode snow already make Flash consume 100% processor power on my MackBook Pro.

My assumptions

I assumed that the Blending filters (“add” and “screen”) would have a better performance than the Blur filter and Alpha. In theory the Blend-filters are binary manipulations like “add” “OR” “XOR” “bit shift left” and “bit shift right”. These are instructions the processor (old school types) only needs one or two clock cycles to perform. Blur and transparency require “snapshots” of the underlying layers on which the blur and transparency effects are placed. Many more clock cycles to do that, you would think.

My goal

I strive to keep my flash sites below 20% processor usage when the user is doing nothing. When you add something extra like snow, 50% constant processor usage to run an effect like snow is already a lot.

What I did

I tried single and multiple “snow flakes” per  particle, compared different settings in my particle count, and tried different approaces to animate the particles via code. For performance with the flash-render engine there is hardly no difference in 1000 individual snowflakes of a 1000 snowflakes in 250 particles. Both approaches make the render engine bog down.

The setup of the showflake engine:

  1. Each particle is pushed into an array
  2. There are four arrays for four layers of snow (more distant layers move slower and contain smaller particles)
  3. Updating particles is done by cycling through the arrays and adding values to the current X/Y coordinates

What I found

Processor usage ADD / BLUR – 3000 particles

  1. ADD: processor to 130%
  2. BLUR: processor to 75%

Checking X/Y position of each particle

To see whether the particles are out of sight I simply check if the Y-coordinate is larger than a specific number. In my case: 500. Then I subtract 700 to place the flakes “in the sky” again. A simple “perpetual fall” scenario.

  1. If/then: every cycle: Processor to 70%. Snow seems to fall less smooth. More “hiccups” in the animation
  2. If/then: only every 20th cycle: Processor to 75%. Snow seems to fall a bit smoother

Calling a function in the object versus updating via references in the “for” loop

When the snow falls, the X/Y coordinates of each particle is updated by adding a value to the current X/Y coordinates. When doing this in the “for/next” loop I choose stick my test to two things:

  1. Assign the reference of the object to a variable. Update the settings of the object via the object reference in the variable. The assumption is that this is cheaper than constantly referring to the object via pointers in the array.
  2. Call an “update” function in each particle. I assumed that calling a function would be more expensive than assigning the object reference from the Array to a variable. It turned out that calling the function and let the particle take care of itself is a bit cheaper.

Again: snow seems to be falling smoother when the second scenario is followed.

Many particles with one flake versus few particles with many flakes

For the Flash render engine, the number or size (I did not check that yet) of elements is one of the determing elements for performance.

I found no niticable performance difference by creating less particles with more flakes per particle.

No (blur) filter

Surprisingly, when I let the engine animate snowflakes without any filter, the processor use leaps to 100% compared to the 75% it takes when Blur is applied. Apparently Flash alreay performs some optimization on blurred objects. Very likely by rendering them as bitmaps.

Only when “Cache as bitmap” is switched on the “unfiltered” flakes are in the same usage-range as blurred flakes.

Cache as bitmap on/off

There is no measurabel difference between Chace as bitmap on/off.

Blur applied to all flakes via parent clip

When the blur is applied via the parent clip on all flakes, no gain is gotten. Apart from that the snow becomes one unclear blob.

Conclusions on blur and add-blendmode

Based on the above tests and finding and with no warrenties (as these tests were limited in their range)

  1. Blur and Alpha are way more cheap than Blendmode filters (for snowflakes)
  2. There is no significant loss when particles are asked to take care of their own state (by calling the “update” function of the particle)
  3. There is no significant loss when each particle has its own blur
  4. If/Then statements are costly. Although the processor usage seems to remain stable, the animation seems to be more sluggish
  5. Caching as bitmaps makes no difference for snow particles

Me and my old patterns, my subconcious and the desintegration of old shit

February 11, 2009

After 3 years I still wake up every morning around 4:00 or 6:00 AM with fear in my body. The fear is related to “unfinished business” and basically a literal wake-up call to close things. Based on some new reading and exploring I encountered the technique to conciously relive specific moments over and over again instead of avoiding them. The idea behind reliving is to reduce the emotional charge connected to this moment in the past. One way is by changing the “movie” every time you replay it in your mind and replacing the threatening elements by something more neutral. When done well, the complex of memories, physical reactions and emotions can be even turned around into something empowering. I entered my session today with the question if this approach could be useful.

I found that it could and that the standard methods are too elaborate and indirect to keep my interest going. My mind has been very creative in finding evasive movements via distractions and spontanious loss of focus and recollection of my planned actions: “what was I doing again?”. The “replacement” method requires focus in constant replay of the movie. So I basically need a shortcut, a way to get down to the core of things.

We discussed the technique of “you sitting in a cinema and watching the movie of your memories, replaying specific scenes and revaluaing your emotional responses”. Here is a brief transcript of my deconstruction of that approach into some core elements I think will be valuable to me.

The main assumptions

The main assumptions are that:

  1. Many of my emotional, physical and mental reactions on a situation are based on old patterns triggered by assumptions
  2. These patterns were once successful and helped me to get through the situations they were designed for
  3. To get from a negative to a neutral state is the easiest way. I will get back on that later.
  1. By desintegrating old patterns, room for new patterns will be created automatically
  2. My brain can let go of old triggers of old patterns when it no longer needs to solve the “why’s” regarding the surrounding issues
  3. Desintegration is faster and more long-lasting than “re-training / reprogramming the brain” methods (like positive affirmations)

I go through my findings of today step by step.

Emotional triggers

When I am in certain social situations, old patterns are triggered. My basic response is to withdraw, to avoid contact. In other situations other triggers and other patterns related to these triggers have me ending up feeling frustrated, angry, fearful, drained of energy, depressed or waking up in fear at 4:00 or 6:00 AM. They create tensions around issues and possible actions which bear relatively no danger except from looking stupid to other people (when it regards people who tend to judge in that way).

The first step today, based on the technique of the cinema was to define the following model:

  1. Recognition of the event in the past
  2. Recognition of me in that past period, with the knowledge and experience I had then.
  3. Seperation of me NOW from myself THEN, with my new experiences, new insights and new knowledge
  4. Taking action from that new perspective / building a new model / building new assumptions

If I look at the event in the past through the eyes of my old me, there are a lot of unanswered questions: “why did I choose ‘A’ instead of ‘B’?” “Why did I not call for help?” “Why did I let it happen even though I knew what was coming?” and so on. Since there is no time machine available for me now, I can only look forward and try to grow into new states of working that will make these old blocking patterns obsolete.

In my attempt to deconstruct the given methods of replaying and replacing aspects of memories I defined the following. The orginal notes fit on one A4 page, but would be totally cryptic and meaningless for anyone except me.

Problem solving:

I think that a major part of our brain is very focused on problem solving (using pattern recognition as one of the tools). It strives very hard to find answers on any question with enough relevance (by matching old patterns with new situations). I compared it in a older post with an “addiction to problem solving”. Unsolved issues (like cliffhaners in movies) are hard to accept for the problem-solving patterns in our brain and can create feelings of unease and/or ‘wants to solve’. I believe that this is one of the reasons why we like mysteries and puzzles and why some things from the past keep hunting us. Only when the problem has a clear resolvement status, the mind can release the question. My experience is that for my mind these resolvement states are the following: “the problem is irrelevant”, “the problem is solved” and “the problem can not be solved now / will be picked up later”.

Avoidance of pain:

In almost all assumptions below, the premis is taken that one of the reasons to create reactive patterns is to avoid pain I have experienced in the past.

Five primary responses to a (possible) situation:

  1. Assumptions of pattern repetition: “that what is happening now / what will happen now / what I am going to do now is very similar to something I have done / seen / experienced in the past and will most likely lead to a similar result”
  2. Event recollection: “what situations from my past look like the current one?”
  3. Emotional and physical recollection: emotional and physical reactions connected to those recollected events
  4. Avoidance of possible pain: when the recollected patterns are experiences as “negative”
  5. Problem solving reflex: “What did I do wrong then?” “Why did it happen?” “How could it have happened?” “What could I have done differently?” “Why did I (not) do it?” “How will that repeat itself now?”

When out of control, the Problem Solving reflex can create what I used to call “upside down mind pyramids” representing the thought-constructs of assumptions and inner conversations that start with one topic and ends with an bulkous towering “thing”. Little side-note: To stop that process: I looked at the inner conversation and the original question. In most cases they had no connection any more. So I started to treat everything not related to the original question as being irrelevant (without fighting the thought process! that was what I tried before). At a certain moment, the process slowed down and eventually stopped. Only seldomly I create upside down mind-pyramids now.

Boosting the process of problem solving

The problem solving reflex is handy to create new strategies to avoid pain. A workable approach is the three step approach on the triggered recollections:

  1. Problem definiton: How did it happen? / Why did it happen? / When did it happen / Why did I let it happen?
  2. Classification in relevance: What can I solve now? / What can I only solve later? / Can I solve it? / Is the solutions in my hands?
  3. Exploration of possible solutions and alternative paths: What can I do different this time? / What should I avoid? / What can I avoid? / What actions are absolutely required in which situations? / What is Plan “B”? / What is Plan “C”?

Questions that do not help are like: “Why is it always me?”

Approach 0: Neutral state – I am, this is now, what are my options?:

To get from a negative to a positive state, you pass a neutral state. To get to a neutral state is easier than trying to jump from a negative to a positive directly. For instance, when I think: “I am stupid” my emotional state at that moment is not ‘happy’. It takes me a lot of effort to get “happy” or “joyous” when I feel down and when I fail I am even more stupid. Instead of forcing myself to turn the emotion around I can simply move to a neutral state. These are the steps I recalled this morning (after saving this post last night):

  1. I am: I am neither good or bad. I simply am.
  2. This is now: this is not the past and the future has not happened yet. I can not predict what will happen next. So no need for overly speculation.
  3. What are my options?:  in every moment there are multiple options to choose from. When I look around me I will find many possible roads to go. Which will be the best one in my situation, based on my observations of this present?

Approach 1: Dissection of questions in three categories:

  1. Solvable: you can answer this question now, find an actual solution for the problem now based on your current experience.
  2. Irrelevant: the question is actually impossible to answer and therefor irrelevant. For instance: “why did God not help me?”
  3. Unknown if it can be solved now: there might be an answer or solution for the problem, but you currently lack the knowledge.

The irrelevant questions (ones that can not be answered) can be dropped. The unknown require more investigation, reading and learning and the solvable can be used to work out new strategies. I am not sure if you can trick the mind for a long time by telling it that a relevant “why” is irrelevant.

Approach 2: Identification of the present and the past

  1. Past: The emotional trigger / emotional response is connected to a painful event in the past
  2. Fear: I am afraid to experience that “same” pain again in my current situation
  3. Present: The actual situation which may have no relationship to my past experiences at all and might lead to totally different outcomes
  4. Response: The choice I make in order to deal with the actual or imagined situation

Approach 3: Learning more about my patterns by dissecting my assumptions

If I start taking my assumptions apart, I might be able to understand what might have been the causes to the build up of these assumptions. For instance: if groups of people trigger fear or unease in me: IS THERE REALLY SOMETHING I SHOULD BE SCARED OF? What situations caused the pain that led to these reactive patterns? We take that there was a real and present fear of danger to develop any pattern like this. We do not question IF the response was once relevant, but WHY it was relevant. Then we move it to the current time and give it a new place.

  1. Definition of the assumption: What do I assume is going on? What do I assume will happen?
  2. Localization: When did a situation like that occur? Where did I see it? Was I involved myself? What physical and emotional responses are connected to that situation? What did I feel? How did I respond?
  3. Relevance and value then: Why was it relevant to respond like that then? What added value was there? What other options did I have not?
  4. Relevance and value now: Does it work for me now? If not: what are the prices I pay due to this behaviors?
  5. Re-valuation of the reactive patterns: Where and in what form could these reactive patterns be valuable again? Where in what form am I already using them in a constructive way?

Approach 4: Re-valuation of the core reactive patterns:

With re-valuation I mean: “to give an old pattern a new relevance based on what is valuable in my current life”. For instance: If I withdraw from groups because as a young child I experienced these groups as “hostile” I can redefine “hostile” by asking myself “what would be the hostile situations I can encounter in my current life? Where and how will this pattern be useful now?” Anger is another thing. Anger can be destructive when aimed at people and situations who pose no threat at all. However, when directed at someone who poses a very possible threat or will likely cause harm, anger or even rage can be very useful. The three basic questions are:

  1. Why, where and when was it relevant to trigger these emotions and responses in the past?
  2. What is the relevance of that reactive pattern in my current life?
  3. How can I re-valuate these reactive patterns with things that ARE relevant in my current life? Where can I use these patterns now? Where can I let them go / where are they no longer needed?

Approach 5: Recognizing the patterns

  1. Trigger: Based on a current situation one or more old emotional patterns are triggered
  2. Assumption: These patterns are triggered due to the (unconcious) assumption that one or more painful events from the past will reoccur in the present
  3. Recollection: Based on the assumptions certain emotional states and old strategies are recollected (like fear or tiredness)
  4. Response: Partly based on this old information I respond to my environment

Filters, focus, expecations, assumptions and emotional responses

In the models I discussed today, flters, focus, expectations and assumptions cam forward in the following way:

  1. Focus and filters: are neutral. Filters take out irrelevant information from observations. Focus is aiming the attention to one specific item. Focus and filters interact ans support each others process.
  2. Expectations and assumptions: are connected to emotional states. Expectations are my projected fantasies of a possible outcome regarding a specific situation. Assumptions are stories or patterns I created some time before and which I can use to quickly evaluate a situation.

I use Focus and filters and expectations and assumptions as handy tools to quickly judge the possible outcome of a situation before I have all the facts. However when my emotional response take over, I risk to forget to take the important next step of fact-finding.

Approach 6: Stop, experience, re-evaluate, reconsider, take action

To avoid moving on assumptions, I have learned to use something like above: based on what A.E. van Voght quoted in “The world of Nul-A” which was heavily inspired by the work of Anton Korzybski called: Science and sanity (which has offered many of the things used as a basis for NLP). Korzibsky was one of the first to assume that our responses to our environment flowed in a specific direction related to the evolutionary development stages of our brain. The order of responses he defined was:

  1. Observation
  2. Physical response: contration of muscles, release or withdraw of specific signal chemicals, fight/freeze/flight action
  3. Emotional response: anger, fear, frustration, joy ..
  4. Verbal respons: exclemation of sound
  5. Mental response: thoughts
  6. (re) Actions

Based on this model something like the following action plan was introduced by Korzibsky. The original helped me greatly. This is how I formulate it today:

  1. Stop: do not take action. The information regarding the situation I want to respond to is very likely false
  2. Experience: what is currently going on? What emotions do I experience? What is my physical reaction? What are my thoughts? What do I want to express? What are my assumptions?
  3. Look around / investigate / re-evaluate: what is going on around me? What do I see? What are the facts? What is the basis? Do I have time for re-evaluation or must I act now?
  4. Reconsider: Based on this new information and my personal (creative) values: what would be the best response in this situation? What is really good to be my physical and emotional state?
  5. Act: Take the best action you can imagine at that moment based on your new information.

Approach 7: using my body and imagination

Whe I fear, my body tends to close and my energy goes down. I have found a very simple way to counter emotional states that cost me energy.

  1. I straighten my back and push my chest open/forward. This opens the body and the heart
  2. I focus on my solar plexus-area when breathing and imagine my breath goes “through” this area. It induces deep-breathing which releases tensions in this area. The solar-plexus area is one of the first areas to “tighten” and block when I am in an emotional state related to fear. Releasing this part releases my body-state of fear
  3. I focus on my heartbeat. By just doing that (and just accepting it is beating fast and heavy) it starts to calm down. No intervention is needed. It simply is and will calm down eventually without me having to do anything.
  4. I observe my assumtopns and fears without having to do anything but observing them to get to know them: no intervention or what so ever is required. They simply are and will pass.
  5. I imagine rings of golden light flowing down and pushing open my energy body

Manifestation via the curious subconcious

I close this long post wit the following: The last part of the session I had today brought a funny thing about manifestation via the subconcious. “The things you fear will happen” or “be careful what you wish for..” are two statements related to that. And Aristotle (if I remembered properly) stated that the subconcious are like horsed you need to tame.

I found – based on the train of thought above that there might be a more relaxing approach to the manifatation powers of the subconcious. I came to it via my own past vertigo.

When I experienced vertigo I had the feeling that “something is sucking me to the edge to fall down” With items (like my glasses) on my body I sensed “something pulling these items down”. Fear somehow seems to feed this mechanism.

What if it is not blind manifestation, but sheer curiousity of a playful “subconcious” mind, leading to response patterns that satisfy the curiousity (like the imagined suction towards the edge). “What if?” is one of the big questions the subconcious tries to solve.

I guess to un-learn stuff like vertigo one of the solutions could be to aim the curious subconcious to something else.


The new economic situation and me

February 8, 2009

Today I watched two TV-shows with the current economic situation as main topics. The brief: the debt per American is about 150.000 dollar. Banks are currently very reluctant to supply credit like loans and mortgages. In america the interest over loans (about 1%) was lower than the inflation (about 2%). House prices will very likely drop to 30% to 50% as they were in 2008.

In times of wealth the sky is the limit. When projects overceed their current budget, new budget is released trusting that the loss will be payed back in short notice. When sales drop, the story changes. Instead of “tomorrow” we will be talking about “next week”, “next month” or even “next year”.

Already prices are dropping in several markets because workers and machines are standing still and doing nothing, product do not get sold and services not taken.

The knife cuts both ways. Dropping prices will draw more work since you compete with others. It will also introduce less revenue and less margin. When one starts, some will follow and when the pressure is high enough the drop starts. It is also where the vultures pop up, promising you to help you out in any way they can imagine when you follow their sceme (or scam).

I have been wondering where to steer my single person  in this situation. I have a personal responsibility of roughly 110.000 euro a year regarding a lease contract that will end februari 2011. Covering most costs with subletting (which I am allowed to contractually) I still am presented with annual surprises ranging between 10.000 to 30.000 euro due to things breaking down, not working in order or due of energy usage and energy prices rising.

On a personal level I am already cutting my budget regarding advertisement and marketing (8.000 euro over 2008) and other items with relatively low relevance for my business. They simply do not connect to my line of business. I operate in a higher end of a market of custom made solutions. Every new assignment is different and offer new challenges and solutions that do not come in standard packages. People who can deliver the services I offer are not so easy to find. And people like me are usually found by end clients via word of mouth and via agents.

Here are my basic assumptions:

  1. Duration: I assume this new economic reality will at least last for 3 years before it gets better.
  2. Budgets and flow of money: companies and clients will be more conservative in spendings than the past years. The rich flow of money will slow down.
  3. Certainty: where my score in the past years was close to 90% on having a project to continue it will be reduced to below 50%
  4. Delivery: delivery to budget and promise will be leading. All else will be less relevant.

This could scare the shit out of me if I had not been there before.

I started my Freelance existence in 2000 just before the so called “internet bubble” collapsed. Everywhere in my line of business (Web Development) companies wend belly up. Budgets wend down. Projects were halted or frozen. I simply adapted and survived.

The one killing factor I know is losing the following two:

  1. My optimism
  2. My ability to adapt

The fluke of religion and some ponderings on faith and rationality

February 6, 2009

We do not know if God exists. Our minds and senses are too limited. If we experience some kind of religious moment it is hard to say if we really saw God, or our mind just fucked us around on some God-trip. And religion? What is the value of religion?

I believe that any form of religion is an organized system of belief with a closed system of manipulation that is designed to expand by adding as many new believers as possible. In many religions there is one main story and a cluster of mindfucks to try to keep you in. To me the main difference between different religions and cults within these religions is the level of aggression. The story they have to share is usually a load of fantasy nonsense backed up by systems of fear and indoctrination.

With systems of manipulation, it works something like this: to make you believe, I first need to break down any other form of competing belief system. To do this I will start with things that seem to make sense  to you. Values, beliefs and morale-systems that feels good, that you will say “Yeah” to. When we have built a level of trust I will start to feed your insecurities and fears. I will narrow your worldview and show you my version of the “truth”. I will gently use systems of exclusion and peer pressure to draw you out of your circles of non-believers and slowly help you to change your mind if you do not completely buy my story. I will help you see that the people you knew and that what you held to believe in the past are bad influences, very wrong and maybe even evil.

Depending on how aggressive my method is I might even resort to different methods of brainwashing to break your resistance.

If I truly believe in what I am doing, I am actually convinced that I am doing you a favor. Otherwise I am just playing power games with you, with me on top and you as my devotee. And sure I will offer you stuff that works. Otherwise my system will be unmasked as a “take all, give nothing” scam.

I will use your longings for something better and I will promise you things you like to hear to soothe you, things to believe in, things that will improve your life. I will help you see that my way is the best and even only way to reach those things. When our viewpoints differ I will keep on using your insecurities and keep showing you where you are wrong and where I am right. I will use closed systems of beliefs and arguments to reshape your view on reality. I will induce new systems of fear in your system to undermine your freedom of movement. When you ask me why you should fear, I will tell you “because it is so” and offer you more proof from my closed system.

To spread my influence I will motivate you to have a lot of kids and to invite others to join us. When enough people follow my fear induced dogmatic system I can extend my power by power of exclusion. This could mean that you will never get a decent job, that you will never be part of a community if you do not follow my belief system. If my system is more agressive, followers of my belief might even turn against you, use lies and force to intimidate you, hurt you, create an hostile or unsafe environment around you or even destroy what you hold dear or precious.

In many if not all cases religion is hardly about the “truth”. It will not offer you a system for spiritual liberation. It does not help you to understand anything as it is a closed system showing only a limited view of “reality”. The promises of a better world, the ideas that my way will bring order and peace is nothing more than a sham. You will never get it, because it will not serve me when you reach personal freedom or liberation and my personal agenda has never been about these things I promised you.

Religion very often promotes faith. When mentioning faith many people automatically connect it to religion. I believe faith is wonderful but certainly not the ownership of religion. Here we go, from the dictionary:

Faith

  1. complete trust or confidence in someone or something
  2. strong belief in God or in the doctrines of a religion, based on spiritual apprehension rather than proof.

When people are in a gnarly situation: losing something dear, faith can be the one thing that pulls them through. “It will be allright. Today was terrible, but tomorrow will be better. And if tomorrow will not, the day after will be. I know it will.” “I just know that someone is watching over me.” The dark side of faith is that you will not questions things. Even when they can be harmful to others. When the circumstances are right, I can use my dogma’s, your faith and your religion to make you believe it is right to kill another human being.

Faith is a wonderful tool we learned to use, based on our capacity to invent and tell ourselves beautiful stories. And it works if you get into that state. It is our way to deliver ourselves to the unknown and leave it up to the universe or some other external power. It is another way of saying: “I actually know fuck all but I am totally OK with it.”

The thing about faith is that it has no grounds in reality. It is part of the realm of dreams.

When looking at rationality, the world gets a bit more sober. Pure rationalism leaves no room for faith. There is the stuff you can proof and the things you can not prove. The stuff you can prove is based on reproducible facts. For instance, the statement: “a glass holds water when held in the right position” is reproducible. The stuff you can not prove is not necessarily “untrue” but at least an assumption: “unknown until we know more”. Pure rationalism deals with the world of logics. The light side of rationalism is where you can acknowledge that there are many things you do not know and can not control. The dark side of rationality is where it gets you into states of fatalism.

Where faith just assumes, rationality (unless abused for other means) searches for tools to get down. For instance to cut away all the assumptions and fluff until until the most plausible explanation remains (Occams razor). It tries to cut it down to parts where reproducible facts remains. To get a completer picture you need to be willing to step out of boxes, move out of closed systems, park your old belief systems, open your mind.

To close this blog:

A Dutch comedian called Freek de Jonge was criticized last week in “HP / de Tijd”. One part struck me most. Apparently – according to the article – Freek de Jonge holds the belief that religion is one of the greatest inventions of man and humanism is a pipe dream. According to the article Freek de Jonge has said that the fear or awe for something greater keeps us from falling into chaos. I think that idea is a load of fatalistic nonsensical crap held by people with a creepy tunnel vision.

Things are never simple.


Arguments, Justification, fulfillment and joy

February 2, 2009

What is wrong with arguments? In basics: nothing. Arguments can help you to set things straight, clear the unclear, discover and border the uncharted territories of your own emotional landscape. However, when one or both parties offer a closed mind, arguments can turn into a war of will.

One of the instruments I use in arguments is justification. To save myself a lot of words, the Oxford dictionary translates “justification” to: “show or prove to be right or reasonable”. But when the other party discards your arguments or part of your arguments (for instance due to a different belief system) what is there to gain? Very little more then frustration or anger in my case and I am very much done with those emotions. Apart from that, the feeling that I was not able to “justify” myself almost automatically starts a time and energy consuming dialog in my mind where I try to find and mirror the arguments that will make me “rebound and win”.

So I started looking for a different approach, asking myself: “What am I really after? What is a better approach than justification?”

The answer that popped up in my mind was: “fulfillment”. Taking the dictionary again, we read: “satisfaction or happiness as a result of fully developing one’s abilities or character” or “the achievement of something desired, promised, or predicted”.

I clearly like “fulfillment” more to strive for. Why?

I love the “satisfaction or happiness” element. Second: I simply do not like battles that lead to loss. Third: justification as a goal in battles of will is basically a waste of energy. It is short sighted, single minded and in most cases counterproductive. There are more roads to Rome than “to prove myself right”. I guess this is where it hit me:

When I strive for fulfillment, more important than “proving my right” is to find the answers to the following questions:

  1. What is the actual situation / what am I dealing with here?
  2. What would I like to achieve for myself now?
  3. How important is that for me (really)?
  4. How many different routes are available to reach my goal?
  5. Which route would be the most effective?

I do not have to prove anything to anyone. Sometimes the right choice is to abort mission. Sometimes to wait. Sometimes to push through. Sometimes to do something totally different. Sometimes to just listen. Sometimes to do simply nothing.

I believe in win/win (1/1) situations and neutral outcomes (0/0). I simply do not believe in win/lose (1/-1) and lose/lose (-1/-1) situations.

To close this article, a friend recently asked me: “Are you happy?” I was not able to answer this question. I believe since “happiness” is a too abstract concept for me at this moment in life and dissatisfaction an intricate part of my creative drive. I do know “joy” however and certainly have more and more moments of silly pleasure and joy.I think letting go of justification will increase the amount of these moments, since my mind will be less and less occupied by internal dialogues “proving things right” when I feel I “lost” an argument.

I simply start to like this silly smile on my face too much I guess.