Author Archive

SMART goals

So this was originally something I came across while working in the civil service. I came across it years ago at the beginning of my career after leaving university and it’s actually over 40 years old, but still we have people not doing this! I have also come across it in a CBT context for setting goals for self-help.

This post is mostly some rough notes after reading through a short chapter on setting SMART goals. THIS IS NOT MEANT TO BE COMPLETE BY ANY STRETCH OF THE IMAGINATION. For me, it is simply evidence I covered this material at some point and it’s something I can look back at to jog my memory from time to time.

Smart goals was not invented as part of CBT, but it reflects an appropriate approach to goal setting which is a useful tool in achieving the positive changes brought about by CBT. While CBT might help us decide the relevant goal, using SMART allows us to make sure the goal has every chance of being positive for us rather than a rod to beat ourselves with when we fail.

Like many tools, SMART is an acronym. Originally it stood for

Specific
Measurable
Assignable (this has changed over the years)
Relevant
Time-bound

To make a goal positive, it is good to ask if it meets each of these criteria and if necessary, to restructure it so that it does.

Assignable and Relevant? That’s not what I heard!

Now this was obviously for a workplace, so “assignable” was in there. One would ask themselves, can I set this goal for someone else to do easily? But now 40 years later we normally use these goals for personal goals so “Assignable” is no longer relevant. It is common to change it to Attainable.

Relevant is also often changed to realistic because no longer are we making sure it is relevant to company needs as the SMART goals tool is being self-applied to self-set goals rather than applied by a manager to assignable goals. I am not a fan of “realistic” as a goal, because I think that attainable has mostly the same impact and “relevant” could be used to ask if the goal is relevant to our main objectives in life even though there is no company in this consideration. Sometimes it is rendered as “resource-efficient” which is a good question to ask, but relevant can also cover that. If it is an inefficient use of resources to achieve relevant goals, then we meet the criteria of relevant. Finally, it is sometimes rendered results-based. Again I’m going to throw that out because if something is specific, measurable and relevant then it is going to be results-based.

Questions I should ask myself when setting goals

So to make SMART goals we should ask ourselves the following questions:

Specific

Is this goal specific? Can I easily tell if it was achieved or not achieved? If any of these questions is answered “no”, how can this goal be restructured so the answer will be yes?

Measurable

Is this goal Measurable? Can it be qualified with numbers or a black-and-white line? Will the success or failure be fact rather than a matter of opinion? If any of these questions is answered “no”, how can this goal be restructured so the answer will be yes?

Attainable

Is this goal Attainable? Is it realistic that I could achieve this goal with the resources I have, in the time I have available? Will this goal be difficult to achieve? Am I more likely to scold myself for failing than praise myself for achieve it? If I am likely to fail to achieve the goal then it could have a negative impact. This means that it could discourage employees, clients or ourselves rather than encourage them/us. If so can we divide the goal into manageable pieces that are more easily attainable? How else can we make this attainable? Can we obtain other resources or people to help us finish the goal?

Relevant

Is this goal relevant to your long-term goals for yourself? Will it help you in the long run? Is it short-term? If it is long term is it relevant to a goal that is likely to change? Could there be changes that effect this goal politically, economically, socially, technologically, legally or environmentally which could render this goal pointless? How could it be adjusted to be more relevant and less potentially pointless?

Time-Bound

When do I want to achieve this goal by? Is it going to drag on? Could I set a shorter goal which is closer to 1-2 weeks? Often if we have a goal hanging around for a while uncompleted it feels like we failed for the whole time leading up to it being completed, even before we ran out of time we are already feeling like we failed, is that going to happen here? How do we avoid that happening? Is there a way to adjust the goal so it won’t drag on. I often feel like short-term goals should be set for 1 week to prevent us spending forever setting goals, but longer term goals still should not be longer than a month. Ideally 2 weeks works which is why so many companies have 2 week sprints.

Conclusion

This has formed a small part of my CBT training. Setting positive achievable goals which are relevant is really helpful to us. Having uncompleted goals hanging around for months and months or stuff we can’t get on with, makes it very difficult for us to stay positive and often drains us. In CBT we often have a lot of work to do to change natural patterns in our brains and learn new patterns which are more beneficial. Using Smart goals enables us to chip away at that work one goal at a time.

Graeme

Protected: Holiday documents

This content is password protected. To view it please enter your password below:

Graeme

Computer Games!

So I decided to blog what was going on with my life right now and what I have achieved recently. Well, it’s not been a time of massive accomplishments. I’ve set up a residency in North London for Drag Bingo which has required a great deal of effort, but is quite fragile and transient. If you’re around Palmer’s Green check out drag bingo in the Fox.

However for years I have banned myself from buying video games until I have played to death the games I already have. Recently, I took up that challenge, but I started with some of my first ever video games.

I completed:

  • Sonic the hedgehog
  • Sonic 2
  • Sonic 3
  • Sonic 2 & Knuckles
  • Sonic 3 & Knuckles (with Knuckles as character)
  • Mickey Mouse in Castle of Illusion
  • Mickey Mouse and Donald Duck in World of Illusion
  • Sonic Spinball

Graeme

Confidence

So people used to tell me to be more confident. I often get quite defensive about this. Because frankly I feel quite a lot of confidence. As I look back over myself I think I acted with loads of confidence. I went and did a Law degree with little to no evidence I would be able to do well in a subject that is not geared towards my strengths. I showed up a board games club I had never been to alone not knowing anyone there and made friends. I have done the same with kink events. Pretty confident thing to do if you ask some people. So what was encouraging people to suggest this? Well, my hang ups about my body were a significant part. I ended up wondering what people were referring to and listening to audiobooks and online Youtube videos about how to meet their expectations. I wondered if a person could write a pathway to confidence.

I have been confident in my career I think. I totally changed my career when I was in a dead end and felt held up by people. I up and left a job where they failed to honour my contract properly with nothing to go to, but I successfully got another job within 3 days. I have led sprint reviews and sprint planning sessions. Hell, I started a company and this was after Brexit and it was going to depend on tourism. Thinking about it that might have been a dumb action if it weren’t for the minimal start up costs, but it worked out and it definitely took guts. I have thrown myself into a shitty costume with mild make up skills and performed in drag despite reservations about my skill. That took guts too!

So what exactly am I doing that makes people think I’m not confident? Should I even care? My inability to accept compliments about my body was a huge part. Interesting how it is something we think of as so vain and superficial, but it is the only part of myself I used to be not confident about and people focused on that. Are we that shallow as a society? Perhaps it was just me, but it is them as well. I think it is the one thing I have been pulled up about since before my age was double digits. Their focus on the physical and visible. I could work on my body and I am doing that, but I should I really be pandering to what other people think? Is that even confident at all?

I am a big guy and not very physically fit, but I took up a martial art which I kept at for quite a while! I climbed to the top of the tallest mountain in Wales with little evidence I would be able to do it and I was scared I was going to end up needing to be rescued somewhere, but I felt the fear and did it anyway. We didn’t even do the easiest route to avoid the crowds. I am fat and despite continually failing to lose weight since I was a child, guess what I am doing? I’m trying despite all the evidence technically suggesting that I will fail like nearly every attempt before. I am ignoring my prior failures and going for it. Is that not pretty damn confident? But apparently I don’t come across that way because superficially people focused on my difficulties with my body. One small and insignificant part of me, the head of the iceberg.

Despite being overweight I am posting provocative pictures in certain places where some of my peers can see them. Suddenly, people think I am confident. It feels so superficial, but it does help me, but I feel like it shouldn’t.

I went through an audiobook and came to the end of it really wondering if “confidence” as far as some people see it, is something we truly need. James Smith the author of the audiobook “How to be confident” describes a time he had nearly sold out an entire room of people for a seminar he hadn’t even written yet. Now I have left things to the deadline before, but I would never do this. I would be concerned that those people deserve better than a half-arse written seminar done at the last minute. I am confident in my ability to deliver high quality and I hold myself to that standard because I believe I can do a higher than average standard if I put my mind to it. If cobbling a talk together in an hour and charging for it is what the world defines as confident, I do not want any part of it.

My mind instantly goes to the number of difficult situations caused by sales guys who over sold a feature that wasn’t finished yet and suddenly a development team needs to rush to put out a low quality product. Some people call this confidence. I call this lack of confidence in the product to be suitable for the customers needs as it is, followed by anxiety of losing the sale. That anxiety and lack of confidence caused the salesperson to lie. If this is what the world is calling confidence then I don’t want any part of it. I am confident being supposedly “unconfident”.

I recognise that I am not what other people want to call confident some of the time. Their honest views of me, not being confident no longer affects me. Their opinion before bothered me that I wasn’t what other people expected for a time. But as I investigated, I discovered that sometimes they can’t agree about what is needed to be confident, sometimes their idea of confidence is superficial, or acted rather than felt. Sometimes their idea of confidence is actually what I would call short changing people and something I don’t want associated with my brand. Sometimes it is being so anxious, and de facto unconfident, that you have to lie about something with the confidence that other people will make up the gaps later thereby dropping other people in the mud. I have decided that I am good how I am and if that is what they think of as confident, it is not something I need. Shirking off other people’s opinions rather than trying to live up to them, is me finally, truly behind confident.

I have one last effort to vamp up the supposed confidence impression I leave with people and that’s the Teach Yourself Confidence Workbook and I might see if I can write a coaching course off the back of it that I can use with clients, but frankly it’s at the back of the pile right now. I am confident I don’t need it!

Graeme

CBT Certificate

My old CBT certificate had expired so I worked through a Udemy course to get a new one. Not the best course in my opinion, but it newed my certificate so I am pleased.

When I first approached Cognative Behavioural Therapy I was originally put in a group session to learn about it back in 2012. It was going to take some time before I could get 1-2-1 CBT and in the mean time I wanted to get a headstart on the process. I had really enjoyed working my way through many books “for dummies”, many “Complete idiot’s guide to” books and many “Teach Yourself” books so I looked through the options. Satisfied with Teach Yourself Cognitive Behavioural Therapy, I began to work through the exercises and had huge success. By the time I was in 1-2-1 CBT, I knew a vague outline of the process and could make the most out of the sessions focusing on the stuff that could not be dealt with by knowing a basic outline of CBT, the stuff that really needed a therapist. I saw other people who were annoyed that they were put into group therapy. They sadly became despondent and did not want to engage. By the time they were in a 1-2-1 session they had already declared that CBT didn’t work for them.

I never actually finished Teach Yourself Cognitive Behaviour Therapy and my 1-2-1 session led me to focus on more specific exercises to my needs. Trying to clear out my bookshelves, I thought after finishing my recent course, I will skim my way through the book as well to cement my knowledge and just enjoy the parts of the book which were helpful before. More than anything I hope this to be an exercise in celebrating how far I have come by engaging with the tool that Cognitive Behavioural Therapy has given me.

As I run through I’m going to leave a trail of notes here. THESE ARE NOT MEANT TO BE COMPLETE BY ANY STRETCH OF THE IMAGINATION.

What is Cognitive Behavioural Therapy?

  • Often it is not the events in our lives that makes us happy or sad, but instead out reaction to them.
  • Some of the happiest people on earth don’t necessarily have circumstances that reflect this.
  • CBT is a combination of Behavioural therapy and Cognitive or learning approach.
  • Sometimes the Behavioural approach is almost like fake it till you make it when it comes to the practice. Changing the behaviour which impacts the internal.
  • Cognitive is more focused on learning.
  • In CBT it is common to look at how Beliefs impact the consequences of our experiences. Frequently we go from an experience to an emotion, but the emotion is impacted by a belief. If through the cognitive approach we can change the belief our emotion can be impacted. For example, if a persons believes “many people ignore me because I have low value” when they experience a person blank them, they will likely fall into low mood. If however they regulate that thought by saying, “maybe they blanked me because they had headphones in and didn’t hear me.” “Maybe they were too focused on something so see me” “maybe they just didn’t see or hear me” then the belief is assuaged. Suddenly the emotional reaction is more realistic because it might not be that they were deliberately ignored due to a perceived low value, but it could be any number of situations. Now the belief is changed. This might be done in a diary session afterwards so the initial emotional event might not be avoided, but the process can teach the patient or coachee to use the new belief if they face a similar event in future.

As part of this book I covered SMART Goals, but this seemed worth putting down as a separate article since as it stands alone quite nicely. See SMART Goals.

The next chapter looks a little bit at cognitive distortions. Cognitive distortions are ways of thinking which are prone to errors. This is a unique area because sometimes thinking like this is actually helpful or accurate for us, but you know what they say about a broken clock, it too is accurate twice a day. It’s important to unlearn unhelpful habits otherwise our emotions will frequently reflect information that is inaccurate or prone to errors.

Normally examples of this are mind-reading (presuming the subject knows what someone else is thinking), catastrophizing, negative filter or negative automatic thoughts (NATs), Overgeneralization, Exaggeration, Misfortune telling (assuming you know the future and particularly making it negative), black-and-white thinking and more.

I noticed one which is really important, but I hadn’t noticed it as much before. It reads as follows “blaming other people for your feelings”. This is a special one for me. I often say to people “I blame myself for everything”. This can be terrible a lot of the time, but at least when I blame myself I look at what I could have done differently and I improve rather than not changing how I act and expecting the world to be different. I know other people who never change because they always blame the world. A lot of the time I get very upset with the council for the stuff I am dealing with where I live because I feel the council “should” act a certain way, and I continually surprise myself when it doesn’t. I let the council constantly affect my mood by setting unreasonable expectations of it. That’s my bad. Now the council is truly terrible and should be doing certain things, but I do not have the power to change them and well if we think about the serenity prayer… It should be acting with the wisdom to know that the council will not change unless it is forced to and so I need to have the serenity to accept the things I can’t change.

Serenity prayer – This is a prayer which is addressed to god, but it need not be a request to god only a recognise of health attitudes. It is said as follows: God grant me the serenity to accept the things I cannot change, the power to change the things I can change and the wisdom to know the difference Amen. This means not messing around trying to change broken systems which we are powerless to change and focusing on the things within our power.

The Importance of Our Own Judgements

An important chapter notes how the same thing happens to 3 people. While no two people’s experiences are identical it provides a clear example about how our reaction to things can give rise to our feelings. 3 people are “chewed out” by their boss about some recent work. The first person was deeply unset. They believe their boss never appreciates the effort that went into the work or how difficult the work was. He only looks at the final result which they admit wasn’t great. They feel unappreciated and like their own work is poor, so they feel unable and inadequate to improve the situation. It feels hopeless. The second person blames their boss. They believe their boss has bad mornings sometimes, he did not pay attention to the work and needed to chew someone out. He did not think he deserved it and he was angry at his boss. He thinks his work is perfect, but his boss is unable to admit that, so he squarely blames his boss and feels anger. Finally, the third person has a more balanced thought process. They recognise that this is not their best work, but also, that their boss can’t read their mind, so their boss doesn’t know the difficulties they faced. They also know that most of the time they have a good working relationship with their boss and it is possible that this situation is not their fault as they have seen their boss “chew someone out” when it wasn’t that person’s fault before, so they are trying not to take it personally. They are disappointed in the situation but think they could make it better. They know should make sure their boss is aware of the hurdles they have overcome. They also recognise that their boss would like to know those hurdles are not going to be an issue going forward, so they also came up with a plan as a good way to overcome similar hurdles in the future. They hope to give the boss a few hours to calm down, they will then present to their boss the difficulties they had, and what they plan to do in the future to improve the situation. They feel disappointed in themself, disappointed that their boss did not ask questions considering how good their work normally is, but they don’t feel hopeless, they have a plan to improve the situation.

You see these three people had very different feelings about the situation that reflected their thoughts. The first and second person had very strong feelings and felt helpless/hopeless. The third person still had negative feelings that reflected the situation, but their feelings were more accurate because they were more aware of all the possible angles. They also had a plan to sort it out.

If I were person 1 who entirely felt the failure was theirs, but that their boss did not consider effort only results, I would need to sit back and consider the possibility that their boss might consider effort if they knew what effort went into it. They also need to remember that although the work might not be their best, there was still some effort in there whether or not it was recognised. The failure to recognise the work does not mean the effort vanishes. They also need to consider the possibility their boss might be wrong and hadn’t considered the positives. Then they might have a more balanced fully considered mindset and their feelings might better reflect this. They also would benefit from having a plan to approach this matter going forward.

If I were person 2, who entirely felt this was my bosses fault, I would question whether my work needed improvement and perhaps my boss might be right about somethings even though he doesn’t always get it right. This means my feelings would be more balanced and because I recognised that at least some of the failure was in my court then I could finally think about what I could do about it.

The Flow of Effect

When experiencing an event which gives rise to emotion there’s a number of stages involved. Firstly, an event happens to this often gives rise to thoughts from existing beliefs held. The person then forms their own personal judgement of the situation and what it means about the things important to them. This judgement then gives rise to feelings and Bodily Sensations, for example sadness and feeling tired, happy and energised, guilty and heavy or something else.

By altering our judgements of situations and making sure we select judgements which are helpful which consider a whole situation we can control the feelings and sensations we experience. This sometimes means taking a second to think about things. Over time as we practice this, forming better judgements becomes easier. We also form beliefs that better guide our natural judgements of the situation.

flowchart TD A[Event] –> B(Thougths and beliefs) B –> C{judgement} C –> D[judgement 1] C –> E[judgement 2] C –> F[judgement 3] D –> G(Feelings and Sensations) E –> H(Feelings and Sensations) F –> I(Feelings and Sensations)

Identifying Issues

Often this exercise works as a diary entering rows into this table at the end of each day. This enables you to identify the bigger and smaller issues in your life. It is often considered bad advice to go after the bigger issues first. It is better to increase your CBT skills working with smaller issues rather than the deep-set ones first. You need to learn how best to perform the technique before tackling the more difficult situations and often removing highly damaging beliefs is like trying to pull up a tree with deep roots. Those deep roots are going to be very difficult to pull up, but if you can loosen some of the soil around them first then you’re going to find it a lot easier. In fact, you might spend so long removing all the small issues that there is nothing holding those big heavy roots any more than the tree just falls on its own. This is like when you remove all the small events which confirm your deep-set negative beliefs and then you begin to realise that you no longer actually believe a very damaging things any more and suddenly loads of emotional issues vanish at once.

I have provided an example of the table here.

FeelingSituationAutomatic ThoughtsStrong?

Graeme

Weight Loss

I recently hit my biggest weight ever. I was actually going hiking once a month and going to the gym three times a week, but I was still eating trash and I managed to weight gain. Some of it will have been muscle, but it feels like I would be kidding myself if I put down all my weight gain to that. I do seem to be loosing belly (albeit very slowly), but I was getting heavier. So I thought I would change up my diet a bit again try intermittent fasting and keep a track of it here.

I used to maintain 105kg while doing 2-4 hours of kung fu a week, so this seems like a good starting aim. If I got there and was quite muscular I would be happy with my results. Technically that is still obese according to bmi but if I have a low fat to body ratio it does kind of blow bmi out of the water.

My heaviest is 145kg after 2 weeks of intermittent fasting I am 141.2kg.

Graeme

Who I am?

Okay so this is a blurb for the Life Coach page, but to describe myself in a nutshell here’s what I have to say.

What I can tell you about me is: that I am gay, I am pro-trans-rights and generally, my political leanings are left. You don’t need to be any of these things to use my services. I am neuro-diverse so I am very open to people being unqiue and different, in fact I often prefer people who are happy to present and enjoy what makes them special. I can be very logical and rational because of my unique brain so often I like to use CBT techniques to compartmentalise things, refine our mentalities around stuff and reintergrate them into a better holistic world view that supports us reaching our goals! You don’t need to be neuro-diverse to use my services, but if you are neurodiverse what better can you expect from a coach than someone who understands what it’s like to have your thinking so different from those around you.

I am a massive geek. When I was kid I played video games before it was cool. While I don’t do this as much these days, my youth was so ingrained in that culture that I still get it today and most of my friends draw me back into it from time to time! I have watched Star Trek, Star Wars, Stargate and Starship Troopers, so if that’s your jam I might actually know what you’re talking about. Other coaches might go cross-eyed when you try to man-splain Battlestar Galactica’s politics to them, but not me. I am far more likely to talk to you in video game analogies than sports analogies, but I can still adapt to you if neither of these are your cup of tea. Life for me is about playing games and having fun. This seems to rub off on clients and their approach to life is a more fun one. Achievements are great, but not worth sacrificing your happiness for, otherwise what’s the point?

I am fat. I have been told I was fat since I was 13 years old and with a renewed effort I am doing something about it. I am what is called a bear in the gay world which means I am always surrounded by people who love my thicker figure (other members of the bear community), but I am still trying to better myself, mostly for my health. I have never been the best at this and I certainly can’t advise you on what’s the best gym routine, but I can help you keep on top of yours using the methods that helped me maintain mine. I can help you with your weight loss plan, but with 0 jugement when you de-rail it because I know what it is like to fail at this. During the pandemic, I put on an additional third of my weight. I used to weigh 75% of what I weighed a few weeks ago! Finally, I committed to lose it. So far I have lost 5%, but I have 20% more to go! I believe in me and in you and your ability to do it, but I can’t judge you if you slipped up, had a korma and missed two zumba classes, because I know I was probably there 3-4 months ago!

I love my old movies and television. I recently went to a Solve-Along Murder She Wrote and Golden Girls is one of my favourite background tv programs when I am cleaning. I have seen them all, but still love them. Nostalgic movies from the 80s is one of my most common ways to recover my energy. Don’t judge me, but Flight of the Navigator, Short Circuit, Batteries Not Included, The Haunting [1960] and Dune are DVDs in my house which never collect dust. (Yes I still have DVDs; not everything is on Prime quite yet).

I have done drag and love it, but the greatest fantasy I am already living. I love to sing, perform, give banter and my stand-up routines have nearly killed someone. They couldn’t breathe because they were laughing too much. Yes I you could say I totally slayed, but more like Buffy the Vampire Slayer than like Rupaul.

My spirituality is an important part of me, but I also recognise spirituality is not the be all and end all. I believe the universe is made of pure joy and we often have things in the way to stop us experiencing it. One of the things that can stop us is trying to reach for some more spirituality sometimes. I love the Buddha, but I think he was wrong… suffering is not the nature of the universe, suffering is the delusion we surround ourselves with that stops us experiencing the ecstasy of pure being. But what’s the point in experiencing pure being? It might feel good, but sometimes so does walking into the office in the most fashion forward outfit possible. Spirituality is just another experience why should it be treated like its better than other experiences? Frankly, it takes a lot of effort and if you would rather go Bowling with your friends, it’s your choice and just as valid an experience. Too many spiritual people are too hauty because of their belief or practices, they think they’re better. This is just another form of materialism… it’s spiritual materialism. In fact I rarely believe anything, I just practice to obtain different experiences, but sometimes when I see people really happy for wanting to collect every type of Nike sneaker then I wish I could be so easily made happy rather than committing to meditation and ritual.

Anyway. That’s me in a nutshell and there’s a whole lot more to love hunny. Come meet me and find out!

Graeme

Qualified Mental Health First Aider

I got myself qualified in mental health first aid.

Graeme

Learn Mobile Photography Technologies For Incredible Photos

I just completed a great course on Udemy. I have been learning how to build my body confidence with posing for photos. Some people just seem to take better photos than me and often the pictures I take do not build my confidence as much as I would like, so I decided to undertake this course which is focused on Samsung phones.

I had a Samsung when I started but to be honest I am a Pixel customer now. The course was incredible and showed me some fantastic techniques. I am going to try my best to use the course content to take some fantastic photos, one for each technique. I will say however that my hope was to learn how to pose for camera and the course was mostly focused on backgrounds, leading lines, sunsets etc. Not posing people so it did not hit the exact need criteria of creating confident, well-posed pictures. There is always more to learn.

https://www.udemy.com/share/1044Kk3@OqhEvkPyGEZlCWM1O5HbGfuKfqw_2XxyxMgS2PyzswOje2c2LojWFYWV2fQgchma9Q==/

So with the picture above I was trying to use the trees and the over hanging branch to create a framing effect. It might be more successful if I trimmed off the right bit of with the blue sky. But it was very picture-esque anyway. It kind of says to me how far one can get from the city without leaving Croydon.

This was a bit of a failure. I was trying to capture Dobbie my dog in the foreground and go close to the ground to get more foreground, but unfortunately she doesn’t hold still for very long. She ended up not quite on the edge of the third and not quite in the centre. The the darkness of tree draws the eyes in with the footpath’s leading lines so there is almost something ominous about that big tree in what was supposed to be the background but seems to create a second layer of foreground.

This was done on someone else’s phone so I could not get the colour quite right and it was immediately interrupted by other family members getting to the shot and doing whatever they wanted before I could truly get my mum posed properly. But by sheer luck truly, one picture truly encapsulated the beauty of her outfit. It really shocks me how my mum can so often espouse so many personality types traditionally reserved for men in the mass media to the point where you might cease to think of her as a woman, but then she pulls out such a beautiful outfit such as this and truly embraces her femininity.

Graeme

Kindness Method

I am currently working through a book called “the Kindness Method” with the help of a friend. This is an incredible book! Shahroo Izadi takes ideas, which in hindsight seem really simple and obvious, but which are so heavily neglected in so much Life Coaching.

Her work includes exercises to help the individual remember the attitude that fuels their desire to achieve change. Exercises in her book, help the client maintain awareness of what they have already achieved. They finally have loosely structured ways to remember what helped them achieve their goals and what derailed their efforts so they make sure they are planted in the most fertilized soil to achieve the growth that they want. Now, when you’re trying to achieve your goals you can make sure your life is helping you and not hindering you. Your life can be turned into a vehicle for driving that self-improvement. This is similar to the work I did with the

Suddenly, a Life Coaching session is relevant again!!! I can’t express enough how disappointed I was during previous Life Coaching sessions, where my plans for my life and goals were ignored and I was led to discuss different things that weren’t relevant to what I wanted to achieve in my life because the Life Coach was trying to fit it in with their system, for example: NLP, Jungian Archtypes or, in one case, the Psycho-Analysis of Freud.

Golden Girls gif – Blanche is Stunned!

My friend and I, have been working very deeply on our snapshot letters and maps. I am shock with how deep it has allowed us to go. In the words of Blanche from Golden Girls “I am stunned. I. AM. STUNNED. ‘Stunned’ is the only way to describe how stunned I am” with the sheer amount of hell we humans can put ourselves through. So embarrassed about our failures, we hide them from other people and then we do not have the support we need to actually do something about it. We force ourselves to bare this load alone. Why would we hurt ourselves and our chances at recovery by doing this? How horrible we are! And who is the victim? Ourselves!

I have to say I am so proud of my map of things I am proud of. I feel like I have been working on this for 11 years since my initial CBT work as a client. I won’t share it here, it’s kind of private, but I am so proud of it. Maybe if I feel it’s worth it at some point I might make a public one but, this very blog is a small homage to creating a list of successes to encourage myself. I was deliberately doing for years before I got Shahroo’s sexy light blue book.

Shahroo Izadi has her readers paying attention to the things that help them achieve and see what screws you over. In my own coaching, I tend to address the issues that prevented us after the fact so setting it up at the beginning is a novel idea! Imagine a type of coaching that is

Did you find this book interesting but reading is difficult for you? Trust me this book is easy to get through. Short to the point chapters. I also got the audible book because, I even as a gay man, I love a woman with a beautiful London accent and her confident air really adds to the experience. I don’t get any more from making any of these referals, I just think this is a great book and I want more people to get benefit from it!

Audible Audio book

Working through this book with a friend and having her do the exercises really lit a fire under me for Life Coaching again. I want to jump back into the saddle, which I was interested in from 2017, but needed to focus on my programming career because that was needed if I was ever going to have any chance of moving to London in positive position and afford some sort of mortgage to hopefully sort out potential retirement wealth before I run out of time. Maybe I could use it to make some more money to help me pay off my new bathroom and save money to repair the kitchen. It would be great to use my Civil Service Coaching training, my CBT training, keep developing my Hypnosis skills and NLP skills. I could even offer Tarot reading sessions and Witchy training to support people whose goals align more with that and would benefit from what I can teach them.

At present, I only use these skills in my job and with certain friends, but if I could supplement my income to help me clear my credit cards, do some of the work on the house I want to do and pay back my folks for the money they loaned me to pay the deposit.

Graeme

Protected: Mika’s Birthday

This content is password protected. To view it please enter your password below:

Graeme

WiX Toolset Course

So the WiX Toolset consists of 5 tools used to help software developers move easily between written code and windows installers. It consists of:

The compiler – candle.exe
The linker – light.exe
The Bootstrapper – burn.exe
The Harvester – heat.exe
The Decompiler – dark.exe

msiexec – is the application that reads and installs msi files.

The MSI file mainly consists of a relational database with files.

The installation process is divided into two main parts which are called “server-side” and “client-side”. The serverside seems to me to be the part which actually installs and is sometimes called “execute” phase. I wonder if this occurs within the msiexec application itself or whether this a client which reaches to something else. The client-side provides the UI support. Server side has elevated privileges.

Be careful with the XML it’s very case-sensitive. Nearly all the names for the tags and attributes begin with a capital letter. It is similar to PascalCase for example the “UpgradeCode” attribute.

Properties

Properties are like variables used during the install process. Public properties are shared between “server-side” and “client-side” parts of the installation process. In order to make a property public just make sure all its letters are capitals, private properties must contain lower case letters.

Properties get added to the property table of the relational database when and only if they are assigned a non-null value.

When logging the properties can be dumped to the log file so don’t store secrets.

The following properties are required:

  • Product Code
  • Product Language
  • Product Name
  • Product Manufacturer
  • Product Version

Upgrade Code should also be included so upgrades are possible in future.

There are usually on the Product tag inside the Wix tag

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="My App" Language="1033" Version="1.0.1.0"
           Manufacturer="Graeme Inc" UpgradeCode="000121DF-ABCD-4684-C1EF-FEC86B738909">
...
     </Product>
</Wix>

Features and Components

Features are essentially containers of components that should be installed togther.

Features appear in the feature tree in the UI.

There must be at least one feature.

Components are things that should be installed together. Each one is a registry key, a file or shortcut.

Features can have an attribute of Absent set to disallow to prevent a user from being able to disable a feature. For example if you were installing Microsoft Word then being able to install with support for East Asian languages being absent is fine, but you should not be able to install and have the Word Processor absent.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="My App" Language="1033" Version="1.0.1.0"
           Manufacturer="Graeme Inc" UpgradeCode="000121DF-ABCD-4684-C1EF-FEC86B738909">
        <Feature Id="FeatureA" Title="Word Processor" Level="1" Absent="disallow">
            <ComponentRef Id="ModuleA" />
        </Feature>
        <Feature Id="FeatureB" Title="Support for East Asian Languages" Level="1">
            <ComponentRef Id="ModuleB" />
        </Feature>
    </Product>
</Wix>

Sequences

Actions and components are installed in order.

There is a couple of tables such as the InstallUISequence table and InstallExecuteSequence which have an order of things in each sequence. (these sequences ae different for the admin install (network installing) and the adversative installing.

Conditions

Is evaluated to a boolean value to determine if a line in the sequence table runs or not.

Operators: =, <>, <=, >=, < and >.

  • contains >< (“hand” >< “handsome” evaluates to true)
  • starts with <<
  • ends with >>
  • case insensitive equals ~= (“A ~= “a” TRUE, “A” = “a” FALSE (Case sensitive comparison))

“A” < “B” evaluates to true.

Binary Operators AND, OR, XOR (either but not both), EQV (both true or both false), IMP (left is false or right is true)

If a condition has just a property in it then it is true if that property has been given a value, false if undefined.

%Name = environment variable called Name

  • $Mycomponent = action state of specified component. What state it will be in when finished.
  • ?Mycomponent = installer state of specified component. What state it is currently in.
  • &MyFeature = action state of specified feature. What state it will be in when finished.
  • !MyFeature = intaller state of specified feature. What state it is currently in.

The above all resolve to an integer -1 to 4.
-1 – no action
1 – Advertised Feature
2 – Not present Component / Featre
3 – Locally found
4 – In remote location

Formatted Strings (Interpolated strings)

Use [] to put variable in your strings for example:

"A newer version of [ProductName] is already installed."

\[ and \] can be used to escape the characters and prevent this happening.

Directories

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="My App" Language="1033" Version="1.0.1.0"
           Manufacturer="Graeme Inc" UpgradeCode="000121DF-ABCD-4684-C1EF-FEC86B738909">
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="My App">
                </Directory>
            </Directory>
        </Directory>
    </Product>
</Wix>

The TARGETDIR Directory tag is part of the MSI file structure so the Wix XML reflects this, but this does not map directly to an actual logical directory on the drive.

The Tag with Id ProgramFilesFolder maps directly to the ProgramFiles Folder for non 64-bit applications. This folder is usually called “Program Files (x86)” on newer versions of Windows. This can alternatively be replaced with the Id ProgramFiles64Folder for the Program Files folder for 64-bit applications. This is normally called “Program Files” on newer versions of Windows.

Embed the cab file

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="My App" Language="1033" Version="1.0.1.0"
           Manufacturer="Graeme Inc" UpgradeCode="000121DF-ABCD-4684-C1EF-FEC86B738909">
        <MetaTemplate EmbedCab="yes" />
    </Product>
</Wix>

Msi files store the data in cab files (cabinet files) however to make it easier you can embed the cab in the msi file so you only have one file to install the application. I recommend doing this, so that they cannot become separate as easily. This is done by adding the MetaTemplate with EmbedCab set to “yes” as above.

UI bits

In order to use any of these features you need to include the WiXUIExtention

If you add a UIRef in the Product tag this can be used to add parts of a UI. Adding a UIRef with Id WixUI_FeatureTree will add multiple pages not just the feature selection page. In fact, this is a full UI with a start page, a page that has the license agreement, a customize dialog that has a feature tree which allows the user to select which features they would like installed and displays the file size, a browse button which allows the user to select a folder and checks disk space before attempting to install.

For example

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Product Id="*" Name="My App" Language="1033" Version="1.0.1.0"
           Manufacturer="Graeme Inc" UpgradeCode="000121DF-ABCD-4684-C1EF-FEC86B738909">
        <UIRef Id="WixUI_FeatureTree" />
    </Product>
</Wix>

One of the projects I worked on we had to create a unique set of dialogues, which did not already exist and I had to add to it. As far as I can tell the people who worked on it before used Publish tags to select which dialogues were used and to determine what happens when the buttons on them are pressed.

In my case, I created a whole new dialogue rather than using publishing and configuring an existing one, because the others did not meet the needs of the client. My boss kindly pointed me to this list of existing dialogs so that I could easily create one which fits with the existing dialogs. https://github.com/wixtoolset/wix3/tree/c02e48ec301a60eba88a3b519d47e88eeaa4c978/src/ext/UIExtension/wixlib

<Wix ...>
    <Product ...>
        <UI>
	    <UIRef Id="WixUI_CustomizeMyOrgUI" />
	</UI>
    </Product>
    <Fragment>
        <UI Id="WixUI_CustomizeMyOrgUI">
	    <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
	    <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
	    <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
	    <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
	    <Property Id="WixUI_Mode" Value="InstallDir" />
	    <DialogRef Id="BrowseDlg" />
	    <DialogRef Id="DiskCostDlg" />
	    <DialogRef Id="ErrorDlg" />
	    <DialogRef Id="FatalError" />
	    <DialogRef Id="FilesInUse" />
	    <DialogRef Id="MsiRMFilesInUse" />
	    <DialogRef Id="PrepareDlg" />
	    <DialogRef Id="ProgressDlg" />
	    <DialogRef Id="ResumeDlg" />
	    <DialogRef Id="UserExit" />
	    <Publish
                Dialog="BrowseDlg"
                Control="OK"
                Event="DoAction"
                Value="WixUIValidatePath"
                Order="3">1</Publish>
            <Publish
                Dialog="BrowseDlg"
                Control="OK"
                Event="SpawnDialog"
                Value="InvalidDirDlg"
                Order="4">
                <![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]>
            </Publish>
            <Publish
                Dialog="ExitDialog"
                Control="Finish"
                Event="EndDialog"
                Value="Return"
                Order="999">1</Publish>
            <Publish
                Dialog="WelcomeDlg"
                Control="Next"
                Event="NewDialog"
                Value="SelectAutoUpdate">NOT Installed</Publish>
            <Publish
                Dialog="WelcomeDlg"
                Control="Next"
                Event="NewDialog"
                Value="VerifyReadyDlg">Installed AND PATCH</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="Back"
                Event="NewDialog"
                Value="SelectAutoUpdate">1</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="Next"
                Event="SetTargetPath"
                Value="[WIXUI_INSTALLDIR]"
                Order="1">1</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="Next"
                Event="DoAction"
                Value="WixUIValidatePath"
                Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="Next"
                Event="SpawnDialog"
                Value="InvalidDirDlg"
                Order="3">
		<![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]>
            </Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="Next"
                Event="NewDialog"
                Value="VerifyReadyDlg"
                Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="ChangeFolder"
                Property="_BrowseProperty"
                Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
            <Publish
                Dialog="InstallDirDlg"
                Control="ChangeFolder"
                Event="SpawnDialog"
                Value="BrowseDlg" Order="2">1</Publish>
            <Publish
                Dialog="VerifyReadyDlg"
                Control="Back"
                Event="NewDialog"
                Value="InstallDirDlg"
                Order="1">NOT Installed</Publish>
            <Publish
                Dialog="VerifyReadyDlg"
                Control="Back"
                Event="NewDialog"
                Value="MaintenanceTypeDlg"
                Order="2">Installed AND NOT PATCH</Publish>
            <Publish
                Dialog="VerifyReadyDlg"
                Control="Back"
                Event="NewDialog"
                Value="WelcomeDlg"
                Order="2">Installed AND PATCH</Publish>
            <Publish
                Dialog="MaintenanceWelcomeDlg"
                Control="Next"
                Event="NewDialog"
                Value="MaintenanceTypeDlg">1</Publish>
            <Publish
                Dialog="MaintenanceTypeDlg"
                Control="RepairButton"
                Event="NewDialog"
                Value="VerifyReadyDlg">1</Publish>
            <Publish
                Dialog="MaintenanceTypeDlg"
                Control="RemoveButton"
                Event="NewDialog"
                Value="VerifyReadyDlg">1</Publish>
            <Publish
                Dialog="MaintenanceTypeDlg"
                Control="Back"
                Event="NewDialog"
                Value="MaintenanceWelcomeDlg">1</Publish>
            <Property
                Id="ARPNOMODIFY"
                Value="1" />
            <Dialog
                Id="SelectAutoUpdate"
                Width="370"
                Height="270"
                Title="Auto Update">
                <Control
                    Id="BannerBitmap"
                    Type="Bitmap"
                    X="0"
                    Y="0"
                    Width="370"
                    Height="44"
                    TabSkip="no"
                    Text="!(loc.BrowseDlgBannerBitmap)" />
                <Control
                    Id="BannerLine"
                    Type="Line"
                    X="0"
                    Y="44"
                    Width="370"
                    Height="0" />
                <Control
                    Id="BottomLine"
                    Type="Line"
                    X="0"
                    Y="234"
                    Width="370"
                    Height="0" />
                <Control
                    Id="Description"
                    Type="Text"
                    X="25"
                    Y="23"
                    Width="280"
                    Height="15"
                    Transparent="yes"
                    NoPrefix="yes"
                    Text="You can select whether to turn on automatic updates." />
                <Control
                    Id="Title"
                    Type="Text"
                    X="15"
                    Y="6"
                    Width="200"
                    Height="15"
                    Transparent="yes"
                    NoPrefix="yes"
                    Text="Autoupdates" />
                <Control
                    Id="Autoupdatecheckbox"
                    Type="CheckBox"
                    X="25"
                    Y="50"
                    Width="290"
                    Height="17"
                    Property="AUTOUPDATE"
                    CheckBoxValue="1"
                    Text="Autoupdate" />
                <Control
                    Id="Next"
                    Type="PushButton"
                    X="236"
                    Y="243"
                    Width="56"
                    Height="17"
                    Default="yes"
                    Text="!(loc.WixUINext)">
                    <Publish
                        Event="NewDialog"
                        Value="InstallDirDlg">1</Publish>
                </Control>
                <Control
                    Id="Back"
                    Type="PushButton"
                    X="180"
                    Y="243"
                    Width="56"
                    Height="17"
                    Text="!(loc.WixUIBack)">
                    <Publish
                        Event="NewDialog"
                        Value="WelcomeDlg">1</Publish>
                </Control>
                <Control
                    Id="Cancel"
                    Type="PushButton"
                    X="304"
                    Y="243"
                    Width="56"
                    Height="17"
                    Cancel="yes"
                    Text="!(loc.WixUICancel)">
                    <Publish
                        Event="SpawnDialog"
                        Value="CancelDlg">1</Publish>
                </Control>
            </Dialog>
        </UI>
        <UIRef Id="WixUI_Common" />
    </Fragment>
</Wix>

Searches

These can be used for check pre-requisits. You can run AppSearch to check if there is a application installed and to find their installation directory.

Other options:

  • DirectorySearch – search for existence of folders
  • FileSearch
  • RegistrySearch
  • ComponentSearch – search for windows component
  • IniFileSearch – search inside .ini files
<Property Id="VALUETOBESET">
    <DirectorySearch Id="myDirSearch" Path="C:\foo\bar">
    </DirectorySearch>
</Property>
<Property Id="REQUIREDVALUE" ComplianceCheck="yes">
    <DirectorySearch Id="mySecondDirSearch" Path="C:\David\Bowie\Labrinth">
    </DirectorySearch>
</Property>

If C:\foo\bar folder is found, then the global property called VALUETOBESET is set to the full path name C:\foo\bar otherwise it remains null.

If you want to prevent installation should a folder not be found you can add a ComplianceCheck to the Property so if it does not have have a certain folder it will not go through with the installation. The end result would be this error message which isn’t very descriptive

Alternatively you could remove the attribute above and use a launch condition in a condition tag which simply says:

<Condition Message="Before installing this product please make sure the Folder C:\David\Bowie\Labrinth exists first!">
     <![CDATA[Installed OR REQUIREDVALUE]] />
</Condition>

This allows you to display the full message if the REQUIREDVALUE is null AND the product is not already installed. Obviously, if it is already installed and we are uninstalling we don’t want this message to appear.

I believe <![CADTA[…]] /> allows for you to type names which might be null without it being invalid XML.

You can also do a FileSearch, but this must be inside a DirectorySearch which should be in property.

<Property Id="VALUETOBESET">
    <DirectorySearch Id="myDirSearch" Path="C:\foo">

        <FileSearch Id="barFileSearch" Path="bar.txt">
        </FileSearch>
    </DirectorySearch>
</Property>

The window registry is as far as I see it an attempt to centralise .INI files which were key value pair files with sections and subsections.

RegistrySearches seek values which are stored in 4 roots:

  1. HKEY_CLASSES_ROOT (HKCR)
  2. HKEY_CURRENT_USER (HKCU)
  3. HKEY_LOCAL_MACHINE (HKLM)
  4. HKEY_USERS (HKU)

The key attribute is the full address which follows the root in making the path to the value for example: “SOFTWARE/Microsoft/Windows NT/CurrentVersion”.

Graeme

Learning Italian

Learning Catalan went incredible well. I reached 150 days of doing it on DuoLingo just before going on holiday. I was pleased to be able to speak to some shop owners and waitresses in Catalan. They seemed very pleased too, in fact, one thought I was living there and couldn’t believe I was just there on holiday or that I had only been learning for a few months. Either that or, more likely, he was just being polite. But I feel it is less than polite to show up in Catalonia and speak Spanish, the language of what they view as technically a different country, a country that repressed and claimed to own them, particularly in a time when there is growing support for Catalonian independence.

After getting back from Barcelona and Sitges, I switched to studying Italian, which my Dad and Sister are learning on Duolingo. At present, my Italian vocabulary is around 3000 words. My aim is about 10,000 which is my approximation of relative foreign-language fluency in a European language. I am lucky to have a few Italian study books and tools floating around for me to use. For example, I have a huge box of vocab cards. A cursory glance over the vocab cards and I already knew around 2 fifths of them, nearly half. Perhaps having a few cards on the go to read through each day would have me build toward that goal and a Practice Makes Perfect Italian vocabulary book to help cement that knowledge. I will let you know soon how I’m getting on.

Graeme

Keeping Kung-fu stretching consistent

I want to get back on top of my kung fu game and I have wanted to do so for while now. I made a few recordings for me to listen to in order to make sure I’m working at a consistent rate and not forgetting anything.

Graeme

Completed Clean Coding in C#

I completed the course Clean Coding in C# outside of work hours.

https://app.pluralsight.com/achievements/share/0ba09b69-61bb-458f-8db3-28d982780b42

Graeme

Learning Catalan on DuoLingo

I have always loved language learning and frankly, I want a job programming for language learning applications. The only reason I haven’t gone and got one is basically I live in the wrong country for Rosetta Stone, MindSnacks, DuoLingo and Memrise don’t seem to be interested in me. Well, it’s their loss really because there’s a level of enthusiasm and can-do attitude that is essentially unparalleled among my peers.

But since I booked a trip to Barcelona I decided to learn Catalan on DuoLinguo and I have now reached 90 days yay!!! Unfortunately Catalan for English speakers isn’t available so I have been learning it from Spanish which can be confusing. I often don’t know if I am answering something in Spanish or Catalan!!!

I should be able to hit 150 days on the day I fly to Barcelona on 2nd September 2022. I’ll see how far I can get on the app this month, but I’m going to switch to Complete Catalan (part of the teach yourself series for August for more dialogues and grammar) and just maintain the course that I have learned so far on DuoLingo.

Then when I get back from Spain I have a trip to Rhodes a month and a bit later so I might switch to Greek, but my Dad and Sister are hitting 80 days of consistent Italian learning so that might be something to learn soon or after Greek.

Graeme

C# Development Fundamentals Path Pluralsight

I really did not need to do this course. In fact, I teach it in person to my juniors better than this course teaches it. But while I have a Pluralsight subscription, I figured I might as well put it on in the background and see if I learn something. It was better than listening to Heart FM while I work, I tell myself.

It is not very practical as far as courses go. These days a lot of people are coming to C# as their first programming language and well it’s not a good introduction because programmers tend to be very practical. Especially those that are learning through a course like this and not at university. I have juniors write me text-based games to start. So they’re actually doing coding rather than hearing about it. I actually don’t know a coder who learns better from hearing than they learn from doing. It works because it is very practical. Before long, I am asking them to “research” how to generate a random number in C#, so not only do they learn how to program, but also how to be independent. It’s a very practical process and uses the skills they would use in the field, but this course has you sit and watch the teacher do it. I don’t think that is best suited to the audience. I think this course would be a lot better if it were practical. I note to the contrary that the Introduction to Types has some downloadable exercise code so there is stuff you can do, I just think a few more structured exercises would be better.

It was a good opportunity to look at structs and records since I hardly use these, but with 5 years’ experience and having worked for an architect who got me to read the language specification, there was little in the course I didn’t know already. It’s funny how you learn all these structures and statements and then there never seems to be an opportunity to use them. I get excited when there’s actually a chance to use a do-while loop or more commonly a select statement. Something so fundamental yet often just ends up referenced as a for-loop or while-loop.

I did actually learn something I hadn’t come across before since we are using a newer C# version. I learned target-typed new expressions. This is where if you use a specifically typed variable like myObject below, which is specifically typed to be MyClass, you can omit the type when calling the constructor with the new keyword.

MyClass myObject = new(parameter);
// instead of
MyClass myObject = new MyClass(parameter);

Graeme

LGB Alliance included in National Lottery Community

I am very concerned about the inclusion of the LGB Alliance in the National Lottery fund. So far it has only received £9000. It is a charity whose funds are frequently used in an attempt to defend transphobic people, who lose their jobs due to expressing trans-hate in the workplace. Yes, this group promotes transphobia in the workplace particularly as their leader was dismissed from her Chambres for transphobic comments. Their slogans seek to exclude trans people and promote hate toward trans people.

I’ve written a very short email that you’re welcome to send to the national lottery and you can flesh it out if you like. If you click below it will be automatically done for you.

Suggested email is as follows:

To: customer.services@tnlcommunityfund.org.uk
Subject: Inclusion of trans hate group in community fund
To whom it may concern,
I write to raise concerns. I have been made aware that the National Lottery Community Fund has donated £9000 to the LGB Alliance. This is a group that actively tries to damage trans rights and therefore human rights in this country. I write to ask you to cease contributing funds to the LGB Alliance affective immediately.
Thank you,
A concerned member of the public
Graeme

Drag Idol

Dolores appeared in Drag Idol! It was quite a nightmare to get ready for and very nerve-wracking to perform in front of peers. But it was done and achieved, she received some good feedback, but did not get far in the competition.

Alternatively, the artist formerly known as Evangelina Holie, now Letitia Delish got through, not only to the venue final, but also to the semi final and we will follow her closely.

For some samples of Dolores’s Drag Idol performances check here.

https://www.instagram.com/p/CdpD4gmoK9h/
https://www.instagram.com/p/Cdo_QoeoKcU/
https://www.instagram.com/dodaydrag/

Graeme

The Pragmatic Programmer 20th-anniversary edition

Do I really need to read the pragmatic programmer 20th anniversary edition? I mean I read the original one years ago and loved it. So why waste the time? Well to be honest because I loved it! Why not see what I forgot and what is new?

But I don’t have time: I’m trying to bring my high blood pressure back down through exercise and getting my 135kg body through martial arts training and healthy eating while doing a full-time job. Frankly, I have a stack of new books to read some fiction, some fact and I’m studying Google’s SRE so is another book really a good idea? Well, what programmer doesn’t have a huge stack of books… Code Complete, SRE Workbook, Working with Legacy Code.

How about an audiobook? YES! Perfect. I can listen to it while I walk the dog and while I am cleaning the house! Which was a great idea, until the audiobook started trying to read a Linux grep instruction out loud. Soon after it was reading out semaphor code in the concurrency section and I quickly realised I needed to read it, in order to … well … read it.

Eventually, I did. Overall it was a great read and as always there were parts in it that I had forgotten over the last 4-5 years since I last read it. Well worth taking the time! The audiobook helped, but it sort of needed to pause and pop-up code on a window instead of reading it out loud.

To anyone thinking about reading this, go for it! It’s oriented for junior programmers, which I was when I originally read it, but there are themes, which I recognise have been subtly around me for the last 5 years without me even noticing they were from the book. It definitely had a huge influence on my career and even if you only read the beginning there are some concepts such as the broken window example, which have really helped me in job interviews.

Graeme

Correct English

I have recently taken action to improve my English. It has been a few weeks of work and for my own sake, it seems worth recording here, why not? A huge part of my spirituality is my obsession with self-improvement and communication is a skill that everyone needs to work on. So here, I am learning about English.

I have always been insecure about my use of English. I often find my English skills lacking. It was the one subject that I struggled with at school and sadly no teacher was really available to tell me the difference between good English and bad English, particularly when it came to writing essays. A certain abscess of knowledge impacted me during my school years.

I thought that English was a matter of opinion. It was not like Maths or Science, where if you wrote the answer then it couldn’t be denied. It seemed the teacher might have a good day or a bad day. I wondered if our grades could be affected more by how much caffeine the examiner had in their system than what we wrote on paper. In fact, sometimes I imagined that if I and my best friends submitted the same answer for an English exam, then they would get an A and I would get a C because the teacher had more faith in my friend’s skill with the subject than their faith in me. Sometimes I think that my whole process of self-improvement is secretly a process of unpicking the woven threads of a troubled history, but whatever the reason improvement is always good.

Luckily through my degree at London Metropolitan University, I was aided by some incredible tutors who noted my tendency to dance around subjects and often assume everyone else was there with me already knowing what I knew. If they already knew, then why would they read what I had to say? I had to actually say it in a concrete way, not allude to it.

There was still a certain absence of style. My close friends were obsessed with it. One in particular, who will remain nameless, would not submit an essay until she was content with the style. By the time she was content with it, the essay would often be late and the tardiness often detracted from her score. Too often she got a lower score having improved the work due to the tardiness than if she had just handed it in on time with poor style, in the first place. What was this style that my friends were obsessed with and how could it be objectively achieved?

Luckily in later years, communication was a higher priority than a good readable style. I was able to work well as a type of secretary for a Law Court which involved drafting many letters and legal documents. I was able to learn a bit about the Ministry of Justice’s “house-style”, through the staff intranet and ensure that my writing was at least consistent. The house-style documents also taught me to remove many of the common mistakes that plague a lot of writers of Modern English.

However, my skill still affects me today. I found myself feeling unable to stand up for what I believed when someone, who clearly could not tell the difference between direct speech and indirect speech, started to disagree with me. I struggled the first time I came across someone referring to a work environment as “a fifty strong office” with no hyphen. Finally, I find myself in disagreement with people with whom I run a business about how we should draft something that is going to a newspaper, staff or customer.

I need a better command of English for the future. In recent years, I have begun a number of blogs, written quite a lot and continue to write public-facing emails and web publishing for Dragged Around London Ltd, where I am a director. So not only do I need to demonstrate skill, but I also need to be confident. In fact, I think confidence and academic sources is what I need.

How did I go about this? Well, I worked through Simon Heffer’s Strictly English : The correct way to write… And why it matters. For each section, I took some time to work through some examples of what had just been explained and I tried to apply it to everything I wrote when I was not studying. I was actually quite shocked at the sheer number of times I had the opportunity to use the subjunctive mood for example, which is almost always substituted for the indicative in spoken English. This practise helped it form part of my skills.

There were many common mistakes and explanations of the finer points of grammar. If I were to reproduce them all here, I would end up writing a book’s worth of information. But I will leave some comments about style, since that was the greatest effect this work had on me.

Can Simon Heffer really be considered a good source of information though? One of the main things I noticed was that the author was a writer for the Daily Mail. In my mind, the Daily Mail will forever have an impression that its authors and readers believe that there is a correct way to live one’s life. In my experience, the publication has often passed judgement on people who are different. And hello, I’m one of them. When the author kept saying, some people think this archaic way of speaking is pompous, but I think it should be retained, I frequently felt that the author’s prejudices about people who live and speak differently from him, has prevented him from recognising an evolving modern culture, which had already begun to leave him behind. He fails repeatedly to accept the last 40-70 years of language evolution, which is strange because what we call Modern English has been evolving as its own language for about 500 years. Why would he accept the first 450 years of that evolution and not the last 50? It seems to me, he is simply a man stuck in his time. In fact, a modern article suggested that correctly punctuated English induced anxiety in text messages and social media messaging. Using proper grammar often indicated someone switching to a level of formality which demonstrated that they were avoiding familiarity with the reader. The reader would often wonder what they had done wrong to deserve this formality. That does not however mean that Simon Heffer has nothing to offer us, but that his approach is limited.

One of the main things that I took from the book was some very useful sources of information, which the author collected nicely together. His main sources were as follows:

  • Modern English Syntax – C. T. Onions [1974]
  • The King’s English – Ascribed to the Brothers Fowler [circa 1908]
  • Politics and the English Language – An essay by George Orwell [1946]

The key takeaways from this process of learning are a few lists on what makes good written style; knowledge that I was denied in my youth.

Fowler’s text lays this out with 6 simple criteria in his section on vocabulary:

  1. Prefer commonly used words over far-fetched.
  2. Prefer concrete words over abstract
  3. Prefer singular words over circumlocution (beating about the bush).
  4. Prefer short words over long.
  5. Prefer Saxon words over Romantic.

My first criticism of Fowler, is that it is focused primarily on singular words since that was the intention of the piece and it does not comment on flow or anything that requires a less microscopic view. Secondly, while it mostly holds true today it is over 100 years old and there are other concerns today, which should be higher on the list. For example, there was no respect for concise sentences at the time and the result is often something that is unreadable today. Finally, I am not entirely sure I agree with the preference for Saxon words. In today’s modern English we are more of a multicultural society than ever before. For the last 40 years, our children have been raised with the metric system rather than the imperial so we can better communicate with Europe. There is more migration than ever before meaning more romantic words get imported into this country with people than ever before. Choosing words derived from the Romantic languages often makes our English more suitable for publication on the internet and more acceptable for a wide audience. Fowler was however characterising the “King’s English” not modern English for the internet-age 100 years before it happened.

George Orwell also provides us with a list:

  1. Never use a metaphor, simile or other figure of speech which you are used to seeing in print.
  2. Never use a long word where a short one will do.
  3. If it is possible to cut a word out, always cut it out.
  4. Never use the passive where you can use the active.
  5. Never use a foreign phrase, a scientific word or a jargon word if you can think of an everyday English equivalent.
  6. Break any of these rules sooner than say anything outright barbarous.

This is far more suitable since it looks with a wider lens rather than microscopically looking at individual words. It covers more detail and is a good 40 years or so later than Fowler’s, but it is still over 70 years old. It is still missing a few things.

Simon Heffer’s book made me consider quite a lot of my own opinions and the 7 C’s of communication mentioned on the MoJ’s staff intranet. I eventually looked at some of my own blog posts that I did not like and concluded why. In the process of thinking about my own writing, I came up with my own list to replace those that came before.

My own additions:

  1. Keep your sentences short to avoid derailing the reader’s attention. Remember in modern day people are used to reading Tweets not blogs. If you can break a sentence into separate packets of information, then you would probably be wise to do so and use them like brick to rebuild the full information by their proximity. A sentence really should be shorter than 20 words.
  2. Vary your sentence length to create a sense of fluidity.
  3. Be weird. Don’t say the expected. Don’t conform. Don’t be a Daily Mail reader. If you write what they expect, they will assume the rest of the sentence and stop reading. I think this is the reason for Orwell’s first point. They assume they know what you’re saying and stop reading. They also feel like they heard it before; that makes it boring.
  4. Be complete. Say everything your reader needs to know. If they might want more, but also might not, then give them a way to get it, but don’t include it. A hyperlink is good for this. Say things as precisely as you can.
  5. Break up paragraphs into different points. The first sentence of the paragraph should announce what the paragraph is about. Then you should explain the point and finally, close. This helps organise your work into digestible chunks.
  6. Avoid pronouns at the beginning of a new paragraph. If you’re making a new point then you should say who the actors are again. Don’t use “it”, “he” and “she” when you are starting a new point: “The difficulty of obtaining these books in Chinese” instead of “it”, “Daniel” instead of “he” and “The unknown older lady” instead of “she”. Yeah it’s longer, but it makes it less likely people will lose track.
  7. Be clear about what’s fact and opinion. Differentiate between them in your writing. Opinions could be prefaced with words like “I conclude that”, “it seems to me that” or anything else, which makes it clear where this information comes from.
  8. Avoid jumps in logic. Like maths you need to cover all your working out. For example it is clear from x that y is true and we are led to believe by z that when y is true abc must also be true, so we can conclude that abc is true. Straight forward formulaic logic.
  9. Follow all Orwell’s comments on good style from his essay Politics and the English language (above).
  10. Prefer less words over many. If you can say it in less words try to do so so long as you don’t end up breaking Orwell’s rules.
  11. Prefer verbs which don’t come with loads of prepositions to help convey their meaning. They often have multiple meanings and can lead to poor communication. Instead of “I cleaned up the table” prefer “I tidied the table” after all what does “cleaned up” mean? Cleaned? Tidied? Put everything away? Instead of “I want to give up sweets” prefer “I want to forgo / abstain from sweets”. Note that ‘give’ can mean passing a gift to someone else, ‘give up’ can also mean a form of surrender as well as abstaining. So why use ‘give’ when ‘abstain’, although it also has a preposition, does not have these multiple meanings? Where the preposition is required to ensure that meaning of the verb is clear, consider another option. This is most obvious when the verb means something different when it has no preposition. ” These are sometimes called phrasal verbs. Avoid them.
  12. Don’t be pompous. If one is truly an intelligent educated person they don’t need to emphasize it and make others feel disrespected.

More than anything, I realised that my use of language is actually quite acceptable. I simply had a lot of insecurity from poor teaching in school, which could not be reversed by my last English teacher in the 6 months she had with us. My work, blogging and academic writing have had an impact on my ability as well. While my vocabulary to describe literature could still be grown, I tend to write in a clear style which is far more suitable for a modern audience than Simon Heffer could achieve. I am more confident than before and this time was definitely a success.

Graeme

New iNCD Website

Doing some work for mum, re-thinking and mega simplifying her website. I also want to try and make it very simple for the Twitter generation. So far we created a great landing page video for introducing NCD.

https://www.youtube.com/watch?v=_bIYEUHWk20

Graeme

Azure Services and Concepts

This is another notes dump. I’m working through a Pluralsight course called Microsoft Azure Fundamentals (AZ-900). These are some of my notes from doing this course.

Don’t Rely on this to Learn

I don’t recommend you read the notes. They might lure prospective future employers to my sight and I might look back and read them, but they’re not really there for people to learn from. However, Pluralsight is there for people to learn from. Because they’re not intended to be a source of learning they won’t be written to cater to learners. I will miss whole chunks of information, where I already knew that and I might drop whole sections if I feel it’s not relevant knowledge for my future career.

I tend to prefer to study things that aren’t bound to a specific technology or company, so I will avoid too much time being spent on this, so I can free up time to focus on other things. This is one of the major reasons for this Azure related gap in my knowledge. I would rather learn to make applications than use them and Azure provides a number of Microsoft-bound services. Also, since as I am a student, I am prone to misunderstanding and my notes might reflect a misunderstanding or out-of-date information.

Instead of reading this course pop over to Pluralsight for a small subscription fee, you can see the content of this spread out among a number of videos with multimedia. It will be quicker to learn from than this. For developers and sys-admins who tend to earn £20k+, they should be affordable at £24 per month and if someone is not a developer or a sys-admin, then this course is probably a bit beyond them at this stage.

AZ900 Content

This is about the specific products provided by Azure, which can be used in making a solution. Some things covered will be concepts like data centres, regions, ARM, Azure CLI, ARM Templates, Azure virtual network gateways, storage accounts, platform solutions like IoT, AI and big data solutions. This should cover the concepts portions of the AZ900 exam.

Sources for these notes

The majority of this is taken from Neil Morressy’s course on Pluralsight. This will reflect notes taken during a video so they might be a bit spacial. Grammar will go out the window, while I’m trying to keep up so good luck if you’re still reading. I’m also going to insert Vlad Catrinescu’s course content.

What is Cloud?

What is a Cloud? How does it help us? For a lot of people cloud just means online. The author Mr Catrinescu seems to suggest EVERY organisation out there is using Cloud computing… I don’t think this is true. I mean I tend to avoid absolutes like everything, but I know in my own limited company we use cloud and in my other employer, we provide a Cloud-based solution so there’s two that do use it. But some organisations like to avoid computers altogether, builders or wholesalers the odd company here or there. But I think any website is most likely going to be hosted on some sort of Cloud solution.

Once upon a time, we had dedicated servers for everything. Each networked application installed was often required to run on a dedicated server to ensure quality through dedicated processing power. Each one had its own CPU, RAM etc. Organisations were spending a ton of money on servers which mostly sat there unused. I mean not all applications are used all the time and yet they need dedicated server space.

We introduced virtual machines so something could have dedicated processing and more but on less architecture… there are still some more costs and there’s plenty of hardware requirements. This is more cost effective than before but there is space for improvement.

Cloud allows for a companies to pay for Saas without worrying about hardware maintenance, secure server rooms, and more. The cloud provider makes sure there are enough shared resources to provide the solution. The provisioning of new VMs and more is done for the user and provided in an almost instant manner. Services can be billed by their running time so you’re not paying for services when you’re not using them.

CAPEX and OPEX

Capex (capital expenditures) involve buying and setting things up which are going to be used for many years. Their costs can’t be deducted in the year it was spent some of it needs to be carried over into the future years.

Opex on the otherhand (operating expenditures) are deducted in the year they were used.

Why Use Cloud?

You can pay based on how many hours a virtual machine is up for you. You can set it to go up based on metrics for example if the cpu was at 70%. This is autoscale.

Cloud providers safeguard against loss or hardware failure. They can have services in other countries where they might not be affecgted by the same natural disaster for example. These provide redundancy.

Why Use Azure?

Azure is the most important cloud provider to use since it is the most used and it is used by 85% of the FTSE 500 companies.

X As A Service

We will be covering Iaas, Saas and Paas (Infrastructure as a service, Software aas and Platform aas). The main difference between these Services i the amount which is provided and who manages what.

With your typical On-premises servers you need to manage everything. With Iaas (Infrastructure as a Service) the hardware is set up by Microsoft or the Cloud provider while the software is entirely managed by the user.

With Paas the entire platform including things like the runtime, Operating system, any middleware, SQL server IIS are all managed by the provider and only the Application / Data is managed by the user.

Eventually we look at a Saas solution. This is where you are licensed access to a piece of software like Office365 where the management of the application is entirely provided by the supplier.

Catrinescu gives a good example of this using pizza. Check out his course on pluralsight.

I like to think of it as running a screening of a movie. Do it yourself, is where you hold the screening at home, and show the movie using your TV and DVD player etc. Infrastructure as a service is a bit like if you rent the room to run a screening but bring everything like the projector, DVD player and movie, Platform as a service is a bit like renting a room at the cinema, they provide nearly everything but you bring the movie. Finally, Software as a Service is like buying tickets for the cinema.

Deployment Models

Private and Public Cloud

There are two main strategies. Public Cloud and Private Cloud. If I were to guess on what Private Cloud means I would guess correctly, that in this circumstance the rented infrastructure is private to the organisation that commissioned it and not shared with other people.

With the other type the public cloud then some of the hardware can be shared between different cloud clients so the same hardware is being used by multiple people. This means you can save money especially while the application is remaining dormant.

Hybrid Cloud

A third-type enters the arena called the Hybrid which is essentially a mixture of the two with Orchestration and Automation between the two.

Community Cloud

The final type is essentially in my opinion a shared private cloud, it is called a “Community cloud”. This is where a cloud is used across an entire community of organisations, but not accessible to people outside of that community. This can be like a cloud used for government bodies, but not outside government bodies. Often when all the organisations on the cloud are from the same industry or community there are similar security concerns, data protection requirements and legal requirements which makes this really suitable to join resources.

Most Microsoft’s solutions are public cloud. Microsoft also has options for private and hybrid cloud solutions.

Azure stack connected scenarios – Hybrid
Azure stack disconnected scenarios – Private
Azure Government – Azure offerring specific to government bodies including FedRAMP, DOD, CJIS

Other Cloud Community offerings are Azure China and Azure Germany with specific requirements set to the needs to these particular countries. I assume Azure China is specific to China’s needs which require that the Azure be isolated from the world-wide internet and Germany has some Data Protection Laws that are very strict and specific.

Data Centres

Neil Morrissey in his course available on Pluralsight comments about Data Centres. A data centre is essentially a building which just hosts lots of infrastructure for providing cloud services. Naturally for security reasons they don’t publish the address of their datacentres.

Many of them include what’s called ITPACs which stands for IT PreAssembled Components. This is essentially a stack of servers and hardware with its own power supplies and coolant system. Microsoft also experimented with shipping containers of ITPACs so they could easily bring a whole one back online when one goes down but that model is being replaced now.

A datacentre generally complies with various security protocols such as FedRAMP, ISO 27001, HIPAA, SOC 1 and 2.

To enable separation, data is encrypted and kept separate from other customers. It is also stored 3 times over in each data centre for redundancy and you can also permit your data to be stored in multiple data centres for additional recovery.

These data centres consume a lot of power, but Microsoft is carbon neutral since 2012 and aims to be 100% renewable energy by 2025.

Data Regions

When you set up most services with Azure there is an option to choose where the data is stored. In the form of a “Location”. This is an area where there are a collection of Data Centres and this allows for you to choose a country and area of the country relatively close to your customers or in a place where specific laws operate. You can specify a region like UK South, Central United States, Japan West, Korea South, etc.

Some services are global and you don’t specify a region such as Azure Active Directory.

Not all azure services are available in all regions. If you want to see what is available where you can go to https://azure.microsoft.com/en-gb/global-infrastructure/services/ which will allow you to filter services offered by Azure and see what regions they are available in. Also certain VMs with certain levels of processing power might be restricted to certain regions or have different prices for different regions.

For example here I filtered for Genomics and found it’s not available in Canada for Central US regions.

Table from Microsoft website with ticks in columns where Microsoft Genomics is available. There are no ticks in the columns entitled Canada, Central US, North Central US or West Central US.

Any service where the “Non-regional” column is ticked are the ones where you are not required to pick a column as they are global services.

For more information on this, I recommend Neil Morrissey’s course on Pluralsight which is part of the Azure fundamentals AZ-900 path learning. This covers all basic concepts and information, which are relevant to Azure.

Azure Geography

This is an area that might include one or more regions. Often an entire Geography is subject to similar laws about data residency so they should mostly be entire countries where the law is the same.

Microsoft might copy data to other data regions other than the one you have selected for redundancy purposes but they would not copy it outside the Geography. This is particularly the case when you select something like Geo-redundant storage.

Region pairs

This pair is often two twinned regions, which are located over 300+ miles apart based in a single geography. They are so far apart because it allows for large redundancy against large scale issues for example Texas going without power a few months ago. If there was another data centre in a region just the other side of the state it too might be without power suffering in the strange snow-storm, which was probably caused by climate change. (Side note: Climate change is real yo! Companies didn’t want their climate damaging effects challenged, so it was cheaper to brainwash most of the US and whole pockets of the internet than actually investing in renewable energy so they released a ton of false propaganda to suggest Climate Change wasn’t real. It was real ask any scientist who works in the field and isn’t on an Oil company’s payroll).

When you select “Geo-redundant” storage then Microsoft automatically copies your data across to the other region in the Region Pair. When a disaster affects both Regions in a region pair one of the two pairs is prioritised.

Availability Zones

An availability zone is within a single Azure Region and may contain multiple data centres. Some regions just contain one data centre, but some contain 3 or more availability zones. You can organise zone redundant storage to replicate your data across different data centres in the region, but that data won’t be replicated across multiple Azure Regions, it will just remain in one Azure Region within one Azure Geography.

This is all explained thoroughly in Neil Morrissey’s course on Microsoft Azure’s Services and Concepts available via PluralSight. This April I think Pluralsight is doing an offer for them. I am not paid to recommend them, I’m just finding the courses available really useful and trying to step up my knowledge speedily and consistently with what’s required for my job.

Resource Groups

Information to follow.

Graeme

Adding Azure App Insights logging to Durable Functions

Firstly, when I approached this my question was “what are durable functions”? That question is best answered by beginning with what are Azure Functions. I need to prefix this with I am not someone who is in the know. I am making these notes as I learn things and I am no expert. It is likely this will contain information that is outdated or just plain wrong. Also I don’t plan to keep it up-to-date, this is simply a dumping ground for my notes.

Azure functions are a part of Microsoft’s solution to the serverless programming paradigm through Functions as a Service (Faas). This is coding for a solution without any concern for infrastructure. You write your code and azure automatically creates a box for it to run in and uses your code to achieve the desired response / action.

Your code can be triggered in a number of ways including a timer event such as running once an hour. It can run if there are messages on a queue waiting to be processed and run for each queued item. It can also run as a result of a http request.

The result of the design of this process is that the function is stateless. No matter what happens the function would always run the same, it never remembers anything between the times that it runs and never gets into a new state where it would run any different from how it would run otherwise.

Also Azure Functions runs on a consumption-based pricing model, which means you are only charged when you’re using it. Because there’s no infrastructure you do need to pay for it. Until such a time as the function needs to run there’s no server required to sit and wait for incoming requests. Then when you receive a request Microsoft ups a container, which is probably based on a VM on one of their machines that you’re totally unaware of. The implementation details of the infrastructure is totally handle by Microsoft so you don’t experience the server and instead only pay when you need to run briefly on one. An advantage of this is that when you need lots of infrastructure because for example there are loads of messages on the queue right now, the host can up lots of infrastructure and scale to meet your needs without you needing to pay for infrastructure that might not be used again for a while.

Often an Azure functions has a binding which can easily link its output to a SendGrid, CosmosDB / blobstorage which allows for many different outputs.

So that’s Azure Functions. But what I might make a function “Durable”? Well is an extension to Azure Functions which results from trying to solve a number of limitations in the serverless paradigm.

When running the Serveless paradigm is limited due to its stateless nature. Durable functions provides a means to handle state. In order for state to be achievable in Azure functions without this extension you would need to rely on some kind of storage like blobs or databases.

Also Azure functions has difficulty handling what’s called fan out and fan in workflows where one function can execute many function and then another continues when all those functions have finished. Fan out is a description of the workflow diagram that results.

Also Azure functions have difficulty trying to handle errors when they could occur anywhere in the workflow. Without using this extension for a function to call another function, it would normally rely on message queues or http requests to trigger the additional functions. In order to handle errors a system needs to be written to allow the error to propagate such as passing back the error state to the http caller or processing a poison queue.

With durable function you can write a function, which calls other functions and waits for a response. This is known as an Orchestrator function and it calls “action functions”. The Orchestrator can then sleep while waiting for activity functions to complete. Activity functions can receive and return data. The Orchestrator function is only the workflow and does not perform any actions. So Durable functions allows you to write better workflows isolated from other code.

In order to start an Orchestrator Function running you need to write a OrchestrationClient binding which allows you to start a orchestrator running from a normal azure function or get information about an orchestration. So for example imagine you have items on a queue. A normal Azure function is bound to the queue and triggers when each item is on the queue. It then uses the OrchestratorClient binding to call an Orchestrator function which defines a workflow. As it flows through the work flow it triggers a number of action functions. Each time a function is run various App Insights records are made recording success and metrics to enable better diagnosis of issues, analysis of processing needs and costs and better feedback.

Durable functions also allows for waiting for human interaction before continuing.

Under the hood

Durable functions uses Azure Storage to implement its workflows. It will therefore need a connection string to do so. It uses Message Queues to trigger other action functions, storage tables to store the state of current orchestrations and in a format called event sourcing. Event sourcing requires that everything is stored by appending new records rather than overwriting previous records which allows for better diagnosis of issues. When an orchestrator wakes up it can then play through this list to see what parts of the work flow have completed.

Creating a Function App

Luckily Visual Studio, when you enable the workload for azure development in the VS installer, has the boiler plate for a typical function app. A function app is a container for multiple functions. You can easily deploy each function into a separate function app, but sometimes you might benefit from group similar or related functions together. In the case of durable functions where they are involved in the same workload it is likely to become useful, due to the common deployment process.

Included in the boiler plate is a proj file which declare the AzureFunctionsVersion, includes a reference to the Azure Functions SDK. Also included are some settings file such as the host.json which explains which version of Azure functions is used and what logging is done. There is also a properties folder with some server dependencies for deployment and a local version.

The boiler plate includes a sample function according to whatever you requested. So for example a Http Request based function has one of those.

You can add more functions by right clicking on the project, clicking Add and clicking New Azure Function. You will need one for the Orchestrator function.

Before you can add any durable azure function’s stuff we will need the Nuget package Microsoft.Azure.WebJobs.Extensions.DurableTask and a using directive

using Microsoft.Azure.WebJobs.Extensions.DurableTask;

Then you just add the IDurableOrchestrationClient interface as a parameter. The SDK should inject the orchestration client you need.

public static class FunctionCallsOrchestration
    {
        [FunctionName("FunctionCallsOrchestration")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")]
            HttpRequest req,
            [DurableClient] IDurableOrchestrationClient orchClient,
            ILogger log
        )
        {
            throw new NotImplementedException();
        }
    }

First things first you will need to extract from the Http Request whatever data you intend to send to the function. I am not going to explain how to do that because it could be stored in any number of ways and getting data from a http Request is a different issue to working with Azure Functions, but I will include this boiler plate code for anyone that might benefit from it. It gets the string from the Http requests body, assumes that is a json encoded data object and creates the variable data based on it.

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);

Once you have your data then you can use the Orchestration Client that you injected as parameter to create a new orchestration function. If you remember you will know that this is the function that handles the work flow of your Durable Azure Function. It doesn’t do any of the actions itself it just figures out where we are in the process and orchestrates other functions to do the work, known as Action Functions. You need to pick a name which we will use when we are creating the Orchestrator for the name of the Orchestrator here, I have chosen O_RepondToName. As far as I can tell there seems to be a standard of prefixing Orchestrator Functions with “O_” and Action functions with “A_” particularly where coders are likely to have the same or similar names for each.

var orchesrtrationId = await orchClient.StartNewAsync(Orchestrators.RespondToNameConst, Guid.NewGuid().ToString(), name);

Finally it is helpful to respond with the means to get progress on the running of this orchestration. Note this uses the orchestrationId generated when the orchestration function was called and the Http Request message that was received to generate a response.

return orchClient.CreateCheckStatusResponse(req, orchesrtrationId);

Okay so that should compile, but it is not complete. When it attempts to run the function it will not find a function with the name O_RespondToName. So we need to create the Orchestrator function.

You can just create a basic static class to provide this. You can also create a static method to outline the Orchestration. It needs to have the attribute FunctionName with the name of the Orchestration function you chose earlier in this case “O_RespondToName”.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

namespace FunctionApp1
{
    public static class Orchestrators
    {
        [FunctionName("O_RespondToName")]
        public static async Task<string> RespondToName(
            [OrchestrationTrigger] IDurableOrchestrationContext orchContext,
            ILogger log)
        {

            throw new NotImplementedException();
        }
    }
}

You will notice I included a couple of parameters. The most significant of which is the IDurableOrchestrationContext which we will be using. By prefixing it with the attribute OrchestrationTrigger this informs the compiler that this is an Orchestration function.

Obviously when we received the Http Request we removed a piece of data from it and passed it to the Orchestrator. We can do this with Queues as well. We passed the data to the Orchestrator when we called it so we might want to grab that data back now. We can do that with the GetInput function on the context.

var input = orchContext.GetInput<string>();

This doesn’t have to be a string.

Now for my first Activity I have chosen to call a function called “A_GetFullName”. Again I’m using the convention of beginning the Action Function names with A_ and prefixing O_ to the beginning of Orchestrator Function names. You will note that I specify the type of data that is returned, in this case a string. And once again we are calling a function that has not yet been created but we will do that next. I like to replace these function names with consts after they’re made to help link up the reference for anyone who is reading your code later.

var firstActionOutput = await orchContext.CallActivityAsync<string>("A_GetFullName", input);

Something to be aware of, here is that the await keyword works a little bit differently from how you might expect. In Durable functions this Orchestrator will queue up the Activity function to run using its connection to Azure storage (or in a dev environment azure storage emulator) and then it will record where it got to and stop running the Orchestrator so you’re not paying for functions running. The next time it runs the function it will run from the beginning to, but reaching lines like this, it will be able to determine from its records whether that Action Function has completed running and will be able to keep going through until it reaches a point where it has to wait for Action function to complete or it can return data.

Same process for second action…

var secondActionOutput = await orchContext.CallActivityAsync<string>("A_Greet", firstActionOutput);

Finally I am going to return something so I can get the data using the Durable Functions REST API later.

You can return the data you generated or just a string whatever you need.

return new
            {
                a = firstActionOutput,
                b = secondActionOutput
            };
// or
return secondActionOutput;

Now just like we did before we have an Activity or Action Function which is not yet defined and we need to define it. We can do so through the same process we did before however the parameters are slightly different. The OrchestrationTrigger is replaced with the ActivityTrigger which is not an Orchestration context but instead whatever the argument is that we had intended to pass into this function.

Here is a sample. I removed any references to my own servers and api keys replacing with just “google.com/api”. You will notice I have deliberately made distinct paths through the function where some do not rely on external servers so I can make sure that the function is working, even if the dependency is not available. This is simply for test purposed when setting up.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Extensions.Logging;
using System.Net.Http;
using System.Threading.Tasks;

namespace FunctionApp1
{
    public static class Activities
    {
        [FunctionName("A_GetFullName")]
        public static async Task<string> GetFullName(
            [ActivityTrigger] string input,
            ILogger logger)
        {
            if (input == "Grey" || input == "Gray")
            {
                return "Graeme Chetcuti";
            }

            if (input == "John" || input == "Jonny")
            {
                return "Agent John Smith";
            }

            if (input == "neo")
            {
                return "Mr Anderson";
            }

            //Won't work don't want to reveal my details
            //Also not example of good code
            var httpClient = new HttpClient();
            var result = await httpClient.GetAsync($"google.com/api/GetfulName?name={input}");
            var data = JsonConvert.DeserializeObject<FullName>(await result.Content.ReadAsStringAsync());
            return data.fullName;
        }

        [FunctionName("A_Greet")]
        public static async Task<string> Greet(
        [ActivityTrigger] string input,
        ILogger logger)
        {
            if (input == "Graeme Chetcuti")
                return "Hello Dolores Day";

            if (input.Contains("Anderson"))
            {
                return "Take the blue pill Neo!";
            }

            if (input.Contains("Agent"))
            {
                return "Goodbye Smith";
            }

            //Won't work. Don't want to reveal any of my details.
            var httpClient = new HttpClient();
            var result = await httpClient.GetAsync($"google.com/api/GetGreeting?name={input}");
            var data = JsonConvert.DeserializeObject<FullName>(await result.Content.ReadAsStringAsync());
            return data.greeting;
        }
    }
}

So that gives us our basic Durable function. Next we need to add application insights loggin.

Adding Distributed Tracing to Durable Azure Functions Logging

Okay so one of the issues with logging these is that, as we said before the function is called a number of times. Each time the Orchestrator function is called it could end up logging a different piece of data in application insights which does not give us any continuity with regards to exceptions and how the function arrived at certain points. By adding the following code to the host.json file the logging becomes correlated with other log messages arising from the running of the same Orchestration.

  "extensions": {
    "durableTask": {
      "tracing": {
        "DistributedTracingProtocol": "W3CTraceContext"
      }
    }
  },
  "logging": {
    "applicationInsights": {
      "httpAutoCollectionOptions": {
        "enableW3CDistributedTracing": true
      } 
    }
  },

When an error occurs, this allows you to see where in the running of Orchestrations it was. This is often called distributed tracing.

Check Status Object

When we originally wrote the return statement of the function we returned a Check Status Object which does more than just check status.

When this function is called is immediately starts the Orchestration Function and returns a few URI. These include a URI for checking the status and ultimately getting the data that has resulted from the completed running of the function. Another which is for adding more information for example when a user has responded to question and the last one is to terminate a long running orchestration which is no longer needed.

All you need to do is create an object which is ready to receive this response and then use the URIs when required.

Code

I have included my code on git hub.

https://github.com/gchetcuti/experimenting-with-azure-functions

Graeme

Primitive Obsession

I just learned this expression… I was complaining about the code using only basic datatypes and my boss agreed that it looked like “primitive obsession”. My reaction: What??? there’s a term for that???

A lot of the time I recognise a pattern in coding that works and I see issues with other patterns and I quickly develop rules in my head for good code. Sadly these rules do not necessarily exist in other people’s heads. One of the things I struggle with is my general assumption that everyone sees the same things I do and experiences them as I do. They don’t, I am really weird and often I need to remind myself of that.

Not speaking the lingo

A lot of the time when I try to explain the rules in my head to someone they say “that’s not a thing”. But it is obvious to me… then you end up disagreeing with someone. Here be monsters. The problem here is someone just told me I’m wrong. I can see the logic in what I am saying and when they don’t agree. Then, my brain assumes they just can’t see the logic I see, so I will show them. Then they hear me something that sound a lot like “No! You’re wrong”. Suddenly two people will fight to prove they are right even if they realise they were wrong all along.

Alternatively, when you know the special name for something, i.e “Primitive Obsession”, you just need to flash it, like it’s a detective badge or a VIP access all areas. Other devs suddenly recognise what I am talking about or otherwise look it up with a reputable source and walk away impressed.

The frustrating part is just because I might not know the special jargon name for it… it was still “a thing”. I just invented it. Just like the guy who invented it and established the name. The logic was sound, it just needed to be spoken by Martin Fowler and not me.

I guess I am trying to find a way to cultivate the understanding of logic and the ability to express it in a way that other people can understand. Sadly the only person who seemed to really communicate things well to me was the architect in an old company who couldn’t afford to pay me average wage.

Today, I learned about primitive obsession. This is where a developer sticks to the primitives of a programming language. Primitives are the basic building blocks of data within the language. For a language like C, these would be char, int, float… hopefully you get the picture. With regards to programming languages like C#, I think strings are also considered primitives too.

One of the great things about primitives is that everyone who uses the language knows how they work. They don’t need to do any reading. A string is a string and anyone who has used C# will know what a string is, unless they were doing something VERY niche in it.

Alternatively when you only use primitives then there’s a few things which I have spotted can go wrong.

A String is a String

Let’s imagine one of my most irritating issues… accidently swapping one parameter for another. Imagine you write a method and all its parameters are strings (I was dealing with one these recently). Now what if you wanted to rearrange the order of the parameters… well in places where the method was called you wouldn’t get an error message because it’s thinking login(string, string) not login(user, password). What if someone accidently wrote login(password, user) … the system does not complain.

Complex datatypes mashed together

Often a complicated datatype containing all sorts of data ends up mashed together in a string. A perfect example of this is a URI. A uri consists of a scheme (expressed as https://), a domain (such as google.com), sometimes a routing structure or directory struction (/search) and sometimes a query string (?source=hp&q=hello). The query string could also be broken down into multiple parameters such as source and q which have values hp and hello. Now imagine you want to figure out what one of those is. You need to work through massive string manipulation techniques to figure it out. For example finding the value of q in the querystring. You need to jump to the string which is after the ? then it is preceded by a ‘q=’ that either immediately follows the question mark or immediately follows an ampersand after the question mark and it ends with either the end of the string or the next ampersand. It’s starting to sound complicated because it unnecessarily is. Compare this code:

Query.Parse(uri.Query)['q']  

It would be even greater if the query string wasn’t a bloody primitive either then it would just be

uri.Query['q']

And this is all on the assumption the string is correctly formatted as a Uri in the first place. That’s another matter.

Validation

Now imagine that you spend the beginning of every method that received a password and a username as a string checking for validation. Is the password field Hashed correctly? Does it have the right check digit? Is it blank? Does the user name have an email format with an @ and a domain like it is supposed to? Well with a basic data transfer object (or a POCO class) you can leave validation to the creation of the class and just assume it is valid from then on.

Passed by reference

When you pass a method a primitive in its arguments, in most high-level languages you pass the actual data. However with complicated objects that might contain multiple pieces of data in most high level languages you pass a reference to a object. It is always possible that this data could be updated in the process and something could change. The code which is executing will always be working with the latest version of the data. But with primitives, it will be working with whatever the value was when it was passed the data.

Conclusion

So there’s a number of issues caused by using primitives for everything. Please don’t be afraid of a POCO (plain old clr object) class. A POCO class or a DTO class (data transfer object).

These classes mostly consist of a collection of primitives so you’re not far from it. They don’t have much logic in them, maybe a little validation, but they’re pretty simple and they make sure the data you’re using doesn’t get sent as the wrong argument, help keep things valid, give you simpler access to a complicated data structure. They allow you to pass things by reference which are dynamically updated when things happen in other threads. Don’t do it for the word though… do it because you see the logic.

Graeme

Equivalent of a Computer Science Degree

Okay so I make no attempt to hide that I have no Computer Science degree. I am actually Law LL.B graduate. But why should a company hire me as their next developer when they have potential opportunities to hire someone who studied it at university? Well if this is the only criteria they can compare on then they shouldn’t. Hopefully my years of experience as a developer where I regularly push myself to learn new technology should really be what stands me in good stead, but often that is hard to prove.

Also how do I know I am not lacking something without a Computer Science degree? Let’s imagine I didn’t know data encryption. Chances are: I might also not know that data encryption existed and I would not know that I didn’t know it. I’ll wait while you re-read that… any more “know”s and it would be a tongue twister.

Well how can I really justify my own existence in a Computer Science role without really earning. I am flattered to have the role, but frankly to be earning above average in the UK I need to be above average. Not having a the information of the degree that is relevant to my employment doesn’t really put me above average.

Having spoken to people who study for our best universities for computer science I have managed to pull together a large syllabus which represents a full Computer Science degree. Unfortunately it is boring as hell. Too basic … but I hope a few courses down the line it will be a little bit better. For the most part I am looking at major courses and trying to find online courses particularly those on MIT and Coursera that match the sort of information I would have if I had done a CS degree.

As much as I find the courses boring I do come across some interesting information. Like for example, I use the term abstraction a lot to talk about removing the user from the implementation detail that they don’t need to know. However I wasn’t aware that the term to be stretched as far as text being an abstraction of the binary storage that is occurring in the RAM of the computer.

I had also heard that the term debugging had originated in the effect of a bug in a machine but I was not aware of Grace Hopper or that she had found a moth impeding a relay from functioning. So there was more information to be had there.

Graeme

Assembly Language

So if you couldn’t tell I’m actually a computer programmer by day. By night I’m a bit of a drag mother, who loves board games, mysticism, mystic artistic expression and to engage in philosophical and religious study. (Yes I am all over the place.) But … computer programmer.

When program computers, I often find that I work with high-level languages which do a lot of stuff for me. A perfect example of this is memory management and garbage collection. So often I don’t have a good idea of what the high-level language is doing for me.

Having spoken to friends who teach computer science at some of the best universities in the world, I have found one thing to be quite consistent. They like to take a bottom up approach. They go from electronics and switches to device style programming to high-level languages. I am trying to fill a hole in me that is left by the insecurity of not having the best degree for Computer Science, Law. Law enables me to engage with the customer and fully coordinate a meeting and make sure what we deliver meets exactly what the customer said they wanted, but I am often coding without a CS degree and that’s a bit like building a house on sand at times.

I hope to fill that gap with a number of different small projects like programming arduino projects, metal coding and assembling coding. Doing an Udemy course on programming for the Atari seemed a great place to start. I also have an actual Sega Mega Drive and a course from pluralsite on the memory registers of that so I should be able to take what I learn and apply it to the mega drive… but here goes.

This is the course I am working through:

https://www.udemy.com/course/programming-games-for-the-atari-2600/

Spec

When coding in assembly language, you’re writing specifically for the hardware you have so you need to be aware of the processor you have and all the other hardware and how it can be referenced from the motherboard. This becomes a crucial part of programming in assembly.

One of the crucial parts of programming is knowing the CPU which in the case of the Atari was the MOS 6507 (a cheaper version of the MOS 6502), which had 1.19 MHz. In the Sega Mega Drive it was the Motorola 6800 after the price had come down a bit.

Atari also had the Television Interface Adapter chip (TIA). This allowed for interaction with a cathode ray tube television in place of monitor used for modern computers.

The Atari had 128 bytes of RAM in the 6532 RIOT chip (RIOT = RAM input output and timer)

The Atari is used with a Cartridge being plugged directly into the motherboard which is a ROM of 4kb.

There are different versions of the Atari, but the Udemy course is focused on the “heavy sixer” which is version of the machine which was released in 1977 which has 4 switches on the console.

CPU

The CPU has a pin to indicate it is ready for an action it receives an incoming current and it is often indicated with RDY on diagrams.

There is also an interruption request pin indicated IRQ. In using the cheaper 6507 CPU there is not IRQ pin because it is not needed. To make the 6507 cheaper than the 6502 the interruption request was removed, NMI was removed and the address bus was slight more limited in size.

Registers. These are memory inside the CPU for current. We often refer to the Atari 2600 as an 8 bit machine because it can store 8-bit values in each register (1byte).

The data bus is 8 pins (or more in a 16/32/64-bit machine) is designed to put data in and out of registers.

The address bus is 16 pins sticking out of the CPU which indicate a memory location where something might be stored in ROM or RAM etc.

There are 2 chips for tv interaction (TIA), one is for NTSC TVs and the other for PAL TVs.

Additional pins tell us whether we are reading or writing to the CPU, some are for timers, resets, power and grounding. There is also the request bus ready state pin, don’t ask me yet what this does!

The CPU we are using has 1.19 million ticks per second.

Inside the CPU we are using here is 7 special areas. The pins can be used for input an output into the various areas. Those areas are the ALU and 6 addressable registers. A register is like a very fast access memory for a CPU.

ALU

The first part is the Arithmetic Logic Unit (or ALU). This is capable of a number of very simple addition, subtraction and binary operations. For multiplication and division it might have to do multiple operations.

PC

The register marked as PC is the “Program Counter”. I think this part of the CPU indicates where the program is going to go next. It might indicate what line of code to run next for example. I am not sure about a lot of this information so don’t learn from me go to Learn Assembly Language by Making Games for the Atari available on Udemy. It’s a cheap fun course with all the information you will need and it will be organised in a more sensible order for learning.

This contains memory addresses so in our 6507 processor this is 16 bits long.

SP

The next part is known as the “Stack Pointer”. When using the stack in memory we have a pointer to indicate where the latest value in memory is. Let’s imagine you’re adding to memory like pushing to an array in JavaScript, the SP will always point to the latest value and if you pop values off the stack it will retreat to previous values.

This contains memory addresses so in our 6507 processor this is 16 bits long, but the last 8 digits are always “00000001…”.

P

This next one is the Program flags. Instead of being a binary sorted number, this is a series of binary flags which can be switched on and off to indicate anything that happened in the last calculation run by the CPU. This could have a flag on to indicate that it failed in the previous calculation for example overflow where the calculated value was too big to be represented in the binary values available.

This could include whether the result was negative or zero. This contains 8 flags so is 1 byte in size.

The right most bit is called the “Carry Flag”. It determines whether during an addition it was required to carry a flag over to the next binary number, but could not do so because there are only 8 bits the carry flag is switched to 1. For example if you take the maximum number and added one then it would carry that 1 over when it completes the number and it would be too big to save.

The second to right flag is the “zero” flag. (XXXXXXX1X where X is a number that relates to a different flag) this would indicate that the result of the previous calculation was zero.

The third to right flag is used for IRQ disabled. Since this part of the process is not used it’s not relevant to this. (XXXXX1XX).

The forth flag is BCD (binary coded decimal). This is an accurate form of calculation, but it is slow so it is not always used. It indicates whether we were using BCD mode or not.

The fifth flag from the right is the break, which indicates a break signal caused the processor to interrupt what it was doing. (XXX1XXXX). Warning this might not be correct. Learn from the course; not from me!

The 6th flat form the right is unused by the processor just ignore that value.

The 7th flag from the right indicates that an overflow occurred and the value was unable to store the result of the arithmetic operation. It can be represented by a V. An example of this is when adding to a number written in two’s complement (where the 8th digit is negative) is the positive numbers are carried over to the next column and it’s a negative number. For example 0000 0001 + 0111 1111 = 1000 0000 which means 1 + 127 = -128 so this flag is activated to note that answer might not be quite right.

Finally the 8th flag (N) indicates whether the result was a negative number. (1XXXXXXX)

X,Y and A

The X and Y registers are general-purpose registers, which we can use for storing the data that we are working with. The A register is the accumulator, which is used by the ALU for doing work on the data. When the ALU performs a calculation one of the values comes from the accumulator.

These registers are all 8 bits in the 6502 / 6507 processor.

Binary

Obviously an important part of programming for electronics is understanding how a wire essentially can have a current or not and that is its state of 0 or 1, but you also need to understand how this can be abstracted as a number.

I already knew this from my A-level and GCSE Computing. But a quick review of it was useful.

Graeme

Stand-up Comedy Course

So the weird thing is I have actually written and delivered a course on stand-up comedy for drag queens and I use stand up for when I am doing drag. So why am I doing a course on it? Well, this really was my opportunity to check for gaps in my knowledge. I figure if someone is well received on Udemy for delivering a course then it must have some good content and I can use that to add any little extras to my stand-up course.

Once again… this is a notes dump. This will not contain all the content and it’s easier to listen to than to read. Also my notes will be full of my own experience and flavour and perhaps missing some important parts that didn’t seem relevant to me at the time. So if you want to know about comedy get onto Udemy. Order this course.

https://www.udemy.com/course/stand-up-comedy-mastery-writing/

So in the course they try to tell he person to be themselves. I think I said this before. I have a whole section on getting permission (from the audience) to be funny. A huge part of that is being authentic. But that’s not the limit of it. There’s a whole part about alpha – beta relations. Often a joke teller is assuming the role of alpha in the relationship and the audience is assuming the role of beta so there is a consent that is required. Often in the UK when a person is forced into a beta role they will be to polite to actually say anything, but they are uncomfortable and the longer the performance goes on the worse it is going to be received.

Different levels of energy

There’s different levels of energy in comedians. Compare Robin Williams to Jack Dee.

https://www.youtube.com/watch?v=BzI-iWobrGk

The key thing is to structure your material around your personality. If you are low energy like Jack Dee who often has low energy his comedy meets that by being grumpy.

Content

Be different. Stick out from other performers / comedians. Also if an audience is used to one type of joke or another switch into a very different format.

The course focuses on being the most authentic version of yourself… I’m a little bit nervous of this because the average person just isn’t THAT funny. So if we be ourselves then we’re not going to be that funny. I think we all have things we can work on to help us with our stage presence, charisma. (I personally quite like Charisma on command, a YouTube channel that looks at things people do and the effect their actions have on other people. It’s worth a listen. ) But the more we apply things like this… the further we get from our natural selves and I genuinely argue that’s good for comedy at times.

I guess we move the frame of authenticity a bit because when you learn something that works it becomes a part of you. You tell a certain joke and people laugh… dopamine hit. Do it again with another group of people, they laugh and dopamine hit. You end up retraining your brain and your personality authentically changes you become more prone to tell jokes like that. Have you ever heard of phantom phone vibration? It’s the same thing. So I guess you can maintain authenticity while still doing something different. But remember that an audience paid for a performance. So they are in a way permitting that to happen.

Most young boys will perform throughout their adolescence looking for where their performance gets accepted. This is how they establish a social hierarchy and alpha male. Testing to see what they can do. Testing to see if their flirting is accepted by the female. It’s like watching discovery channel. We can perform with people, but be clear about, what we are doing. Switch it on and off again. “I was approaching her like this… Hey baby.” She was all “tee hee.” You can have the audience recognise that it is an act and accept it as that.

How long does it take to write material

Sometimes you just need to sit down and plough though it. This does work for me, but it can be frustrating. I make a few jokes you just need to find a few lines to string them together.

Supposedly the average comedian will write around 5 minutes of comedy per month. Do you want to know more? Buy this course:

https://www.udemy.com/course/stand-up-comedy-mastery-writing/

I’m not paid to advertise…. I just hope that if a large chunk of the course is written here on this page they won’t sue me if I keep linking to their course… remember reading it is boring…. when you pay for this then you got it read to you. It’s as effortless as a baba having story-time. Far less work involved. Nearly all of this material is available somewhere on the internet, probably in more depth too, but this is a chance to have it read to you in a timely format with as little effort as watching some TV.

The course talks about trying material out, with an audience. The audience is going to give you the key thing you need. Feedback. Sometimes a joke is too inappropriate for an audience to let you get away with it. This again is related to my previous comment of permission to be funny. Sometimes you will need to edit it to put the punch line on the end. Sometimes it works well, but you might still want to try somethings to improve it. Don’t worry about trying to write material in less time try to get material perfected in less cycles, but never stop improving it.

Improving

Often a comedian goes through stages. They begin with real inconsistency and over time this becomes a more consistent personality. Eventually you can begin to just refine it.

When you have 3-5 minutes of consistent material then ideally you want to make it fit more and more with your personality. I spoke about this at length within the getting permission section of my talk. Having a character, refining the character writing the jokes around that character. I guess I was in a hurry to the end point. The speaking in this course homes in on what point that I didn’t think of, which was that when your jokes match your character they’re more likely to remember your character. I like to think of Tanyalee Davies. When you see her, you can’t help but notice that she’s a little person. Anyone that pretends they can’t see it, is just so scared of being considered prejudiced that they actually end up acting more prejudiced than other people because they can’t bare to acknowledge it. Since she then performs a full routine where at least 25% of the jokes are immediately related to her stature. They relate it to something very visibly undivorceable from people’s first experience of her. The end result. They don’t just remember the joke they also remember her!

Don’t be afraid to bomb. It’s like soldiers. There’s often a point in the battle where you have to accept your losses. “We are going to die… but we will at least take out as many of those enemy soldiers as possible before we do!” The same works for comedy. Except, less killing; more slaying. You are going to bomb. It’s going to happen. Sometimes it will be the way a night will go. Now you’re on this path, that’s done. It’s happened. The wheels have been set in motion. The best thing for you to do is to just go “I’m dying on stage again tonight… what can I learn from this?” You can even tell the audience that. It makes you authentic.

How much material do I need?

Okay so this section of the course is very different from what I am going to be doing. Because I am using drag as the medium of entertainment rather than stand-up alone, the amount of prepared material is very different. The course talks about having something potentially as short as a 2 minutes slot in a show. This is very possible for stand-up, but doesn’t work for drag. Often drag queens when they’re first starting out will prepare a a lip-sync as their first performance, which could be anything from 3-4 minutes long. If they’re good with a microphone they might talk a bit before the song and a bit after the song to work with the audience making a piece as long as 7-10 minutes, this might be after a few lip-syncs. Often Drag competitions in the UK, for example Drag Idol, you will have a 10 minute slot to fill and you need to be careful because you can be penalised for going over.

In the course he talks about open mics. You sometimes get them as drag events, but rarely. They are a great chance to get your drag out there and better known. What’s more common is where a Drag Queen who has a good social media following groups together a load of queens who all fill a 5-10 min slot and share a bit of the income. This is the equivalent of what the course calls a Showcase show where you still have a very short spot, but you’ve been invited and picked to join in or an opening act. You are unlikely to get more than 15 mins in a drag show where you are not the host so you need to book your own shows for that.

If people book you for birthdays / hen-dos, this is your chance to try longer material. You’re good to go for 30 mins to an hour, but remember most people did not come for you. They came for the birthday boy/girl. So you should focus on variety and make it all about the special guy/girl. If you show up just doing an hour set, then you might have some unhappy customers who didn’t care to see you. If you mix together 3-5 mins segments of stand-up with songs and games then you end up having a better show. If people don’t like the stand-up it will be over in 3 mins and back to a song, if they’re not a fan of the games then they get a chance to cheer on the birthday boy or the bride or whatever. It works really well to have a good mix of stand up, music and other things. I actually really like delivering my set on a tour bus going around London because the buildings that you see provide talking points. “See that chuch? It was originally built around 1050. That’s even older than Angela Lansbury. Now since we are outside Parliament I’ve got a song for Boris, hit play my darling!”

Just a side note. If you’re reading this to see what’s in the Udemy course … don’t bother. I’m not going to successfully include everything in the Udemy course. I’m just dumping notes of my take from it, so they have somewhere to go; I’m not bothering to make this readable or communicative. You’re going to find it hard work to read through. Why bother to read when for a low low price you can learn it through videos??? As should be clear from the paragraph above, my focus isn’t even just stand-up. So just go to Udemy.com or follow the link below.

https://www.udemy.com/course/stand-up-comedy-mastery-writing/

What I took from Joan Rivers’ Enter Talking?

So aside from doing the course I also read a lot from authors and one book from Joan Rivers which was an early biography leading up to her breakthrough. I learned about her “hook”, a short phrase to grab attention. Which for her was “can we talk?”. I thought about some of my own potential expression “just between us…”, “ssssh don’t tell her but…”, “let’s be honest”, “I don’t want to be mean but…”, “we’re friends now, I can be honest with you…”. As I watch comedians I’m going to look out for hook lines from now one see what things I notice. I like the expression which are very open because you can repeat them over and over again.

Typical hooks

  • In the middle of a story… “suddenly”
  • “Let me honest with you…”
  • “You want to know how I made the biggest mistake of my life”
  • “how many of you have”
  • “I’ll tell you one thing.”
  • “I’ve been married X years and …”
  • “I said to my friend, you know what?”

Joan has to distinguish between high comedy and low comedy and sniff out what’s working with an audience. If somethings not working with an audience she quickly changes subject or reacts to the audience not liking it. “Oh look we lost the gays now …. Insult Elizabeth Taylor and we lose the gays.”

For the most part, I took from her that I just need to get out there and keep working until I make a breakthrough. That’s easier said than done when you’re a drag queen who takes 2 hours to get make-up on. But it’s worth giving it a try.

Graeme

SRE

What is SRE?

These are just my notes about Systems Reliability Engineering. This is something I have chosen to study as part of my work for a company called BankBI. By all means read it if you will, but I’m not really writing for readability. This is just a notes-drop from various courses.

SRE is often described as “what happens when devs design operations”. It’s hard to say for definite, that it is one thing or another because different aspects of SRE appeal to different authors.

Often there is a lot of focus on delivering feature after feature, while assuming that once a system is up then it is going to stay that way. When has that ever happened? SRE is concerned with recognising and planning for failure. SRE involves among other things, setting goals for the reliability of a system and making sure that when the system falls short of a goal, the team focuses on reaching the goals of reliability rather than new features. Obviously there’s more to it than that, but it’s one of the key things that comes up early in many definitions.

SRE sits along side DevOps. Some people like to conflate the two, but they have distinct aims. Nearly every author is against comparing them like they are opposites and only one can be implemented. In a nutshell, DevOps gets the Sys Admins and Developers to work together and SRE gets Support team / Operations and Developers to work together. It would tend to suggest us Devs aren’t good at working with anybody since there’s all these grand initiatives in place to get us to work well with people!

SRE is a child of Google’s inner workings. For years Google kept it to themselves and then suddenly they went public.

The Problem

One way that we can define SRE is to consider the problem that we are trying to solve. We can define SRE as “a collection of principles, ideals and ideas which are brought in to solve a divide between Ops and Development”.

Why would there ever be a divide in a company? Well in this case it come because these two teams while seeming to work very closely together actually have very different difficulties and problems that they face. They face customers having very different experiences so they end up seeing customers with very different desires.

The developers will traditionally hear about the latest features wanted by customers and potential new customers. By always considering the desires for new features they will reasonably assume that customers always want new features. Their focus will be to deliver new features as fast as possible to help make the customers and to help the sales team to onboard new customers who want different features.

Operations (or Ops) are managing the system on an ongoing basis. They can see how many computing resources are required and they are often the first point of call went something goes wrong. They are often face-to-face with customers who are experiencing bugs or instability. They will likely assume that customers want stability and no bugs.

As you can see these two teams often have an very different idea of what the customer wants and SRE is the solution to prevent the potential warfare between these two factions.

In SRE you set a target for reliability and stability. When the system falls short of that target then development’s priority changes from delivering new features to dealing with stability. With DevOps the development team and the Ops team begin to overlap more.

Core Tenets of SRE

This highest priority of any SRE team or agent is the following things:

  1. Availability
  2. Latency
  3. Performance
  4. Efficiency
  5. Change Management
  6. Monitoring
  7. Emergency Response
  8. Capacity Planning

Toil

While this is not a definition of SRE it is a concept that comes up in a few of the definitions. Toil is hard work. It often refers specifically to repetitive tasks which do not require much brain to do. In SRE these tasks are usually automated to save time. Remember if it takes longer to automate it then to do it a few times you need to think about whether it is worth automating. In an environment that is always changing it might not be worth it because that might only be done a few more times.

Graeme

Couch to 5k

I didn’t really want to post about this until it was showing some signs of success. But I began to work through Zombie Run 5k. I found it hard, to say the least. I began to cause knee injury and cause some muscular issues. But that’s not stopping me. I have given myself space to recover, while maintaining a regular brisk walk daily for 30 minutes and I am about to get back into the saddle. It’s been going on and off for months now. But having only done walking for a couple of weeks I am ready to go back to running again. However in doing so, I must recognise that my body is very unfit, I have high blood pressure and I need to take the course at a slower speed than most people because I need to achieve more changes in my body than most people do.

My plan at the moment is to practice my vocal exercises everyday then either walk briskly for 30 or do a zombie 5k exercise for 30-50mins (alternating days). I need to wait until I can do the full week and extra exercises before moving on to the next week. Then I get back in I can rest for a bit and on the days when I am doing the harder exercise, I will need to work through a series of exercises from Fujian White Crane School’s Kungfu system.

Including:

  1. 10 push ups
  2. 10 sit ups
  3. 10 squats (carefully to avoid knee damage)
  4. 1000 punches (batches of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
  5. 20 leg lifts to stretch leg flexibility
  6. 20 leg lifts to opposite side
  7. 20 leg lifts to side (with blade of foot)
  8. 20 leg lifts to side (with toes pointed up)
  9. 20 upper crane block
  10. 20 lower crane block
  11. 20 twin upper crane block
  12. 20 twin lower crane block
  13. 20 front, back, side thrusting kick
  14. 20 triple upper crane block
  15. 20 triple lower crane block
  16. 20 low, medium, high round house kick
  17. 20 upper, lower, upper crane block with supporting hand
  18. 20 lower, upper, lower crane block with supporting hand
  19. 10 Double Mad crane kick
  20. 10 Uppercut
  21. 10 Back hammer fist
  22. Shuffle forward, Twin punch, Twin palm strike, shuffle back, washing machine, grab, downside
  23. Tiger swipe
  24. Tiger strike
  25. 1st pattern

Following some minor injuries, I had to take a break from this, but I am walking every day and soon as I am off some antibiotics (today is my last day), I will begin practising running again, but I will stay at “week 2” till the end of January and “week 3” through most of February before proceeding because I could not go straight to the week 4 exercises without severe cardiovascular issues, regular muscular injury and inflamed tendons, last time. Taking it slow, but always progressing is the key to success in exercise. When I am confident with the exercise and it is getting easier, I will re-introduce the kung fu. I am also applying for an early trial of Alter Titan a similar app which turns exercise into a video game!


Okay I’m really listening to my body and trying to do week 1 nice and slowly for a few weeks which has taken me into February. I really hope I can catch up and complete this before Alter Titan is released. I want to complete it

Graeme

Singing Course

So anyone that knows me. I sing… a lot. But my singing is mostly average. I find I often get moisture in the lungs, probably from being overweight and the impact this has on the heart. So I have to deal with a few issues. I hope to use this article to record my work as I go and keep me aware of whatever the last thing I was doing when I come back to the course. I find blogging helps me keep focused somehow and I like to be open with people about myself so I might as well publish the results.

Why? What’s the Application?

For the most part I just love singing and I love self-improvement, so why not? But other than the odd bit of karaoke, why might I seek out a course like this? Anyone who has seen me in drag, knows I work singing into my entertainment so there is an immediate use of this course! My voice is pretty good for a voice that isn’t coached, but it really isn’t at its full potential. Luckily for drag you don’t need to have voice that is a dead ringer for Shirley Bassey. So it has worked a little bit, but no-one wants to hear someone who is shit.

My voice does need a lot of work. For a long time I have wanted to pay for vocal coaching, but I decided before I fork out a lot of money I would try and see what I can do with a reasonably cheap course first.

What Course?

I picked a rock singing course from Udemy because I am particularly interested in techniques such a vocal fry and shouts that are more common place in rock singing. Sadly so far the course doesn’t seem that great, but it at least gives me something to work on and investigate each time and comes with exercises so I will try to withhold judgement until the end, but for now I will not mention the name of the course.

Regular Practice

Once again this is another exercise that needs to be practised a lot. In fact the course has a section called train like an athlete. So I guess this would precede my training for 5k which in turn precedes any kungfu training.

Voice Range

I find it hard to identify my “Fach” or vocal range. There are 25 different fachs to compare to and I don’t know them all. Very often my range, which I estimate to be around G3-E6 undeveloped, allows me to cover quite a few of them including: Bass (using low techniques), Baritone (using low technique), Tenor (easy), and Soprano (using resonance). I can also hit most of contralto and contratenor, but the practice pushes me into head voice. Tenor seems to be the most comfortable for me.

Stretch the Voice

Techniques for lower voice. Working with your growl, fry and subharmonic register, according to this video. Having practiced these techniques I think I need to practise them regularly to smooth it out.

To go higher and still sing with power you need to use a belting technique. Often this can be achieved by using a resonance chamber behind the nose. Unfortunately the Youtube artist, Felicia Ricci has removed most of her videos from when she was teaching belting, but I was able to find this one below where she talks about using the resonance chamber.

When I was going through her videos there was one where she helped people find the voice by saying “Nya” in a whiney child voice. (If you listen and emulate the sound from this video of the most annoying sound in the world. Then you will feel where this sound occurs.) This sound causes a vibration behind the nose. If you then try to combine this with a voice that vibrates in the chest to get rid of the nasal quality then you can use it for loud and high pitched piercing notes.

https://youtu.be/z7vWs8nrg0s

Mixed Voice

The interesting part of doing singing courses is that you really need to learn the human anatomy that is involved so you can train each muscle in isolation to allow for better singing and use all the chambers inside the body to create a resonant sound.

What is a resonant sound?

In physics resonance is where identical waves begin to overlap creating a more powerful wave. For example bridges have a natural frequency they vibrate at. That vibration is a bit like a really fast swing moving backwards and forwards. Now if you always push a swing as it moves away from you, you get a greater and greater swing movement. In some cases with bridges the wind has had that affect of pushing the vibration in a similar way and just increasing the vibration over and over.

A similar affect is created when a glass which vibrates as a natural frequency has someone sing the frequency at it which increases the glasses vibration until it vibrates so much that it can no longer hold itself together.

In singing there are different sounds created by causing resonance to occur within different air chambers within the body. Chest voice is the sound of singing when resonance occurs within the chest. Head voice uses the huge nasal cavity to create resonance. Now these different places have a different range of notes they an produce known as a vocal register. I used to think falsetto was the same thing as head voice but it is actually more open and airy with less vocal chord vibration as a result. This is a vocal mode rather than a register because it is about which parts are used rather than the range achieved (other modes include vocal fry and whistle).

With a good amount of effort you can blend these different registers together so that you can move from one voice to another seamlessly to create a single overall range. To help this process it is often worth working on the mixed voice which is the point where you are using both nasal resonance and chest resonance at the same time. This allows for an easier cross over between different registers.

One of the major issues I am hitting is that for years I have always had a lot of mucus around larynx. I will need to see if regular irrigation of the ENT passages helps.

30th Jan – more to come

Graeme

Human Computers

I have always been fascinated by the novel and the universe of Dune by Frank Herbert. One of the concepts in his novel is that a long time ago AI rose up, enslaved mankind and mankind freed himself. So it is based in a time where computers are banned. Interestingly enough human computers exist called “Mentats”. These are people expertly trained to do calculations.

In my studying I was surprised in the “Imposters’ Handbook” written by Rob Conery that this already existed. People with huge books of mathematical tables designed to do loads of calculations were called computers before actual computers were built… Now that I realise at the time of writing computers were relatively new so people must have already been very aware of this concept. Perhaps he was motivated by the lack of requirements on people once the computer was added. People were no longer required to learn to participate in large computations. Like today no-one is required to remember a telephone number.

So human computers is not a new concept … interesting.

Graeme

Training in Usability

Naturally for someone in my position where too often I find myself writing a web UI, it would be really useful if I could say I have some skills in Web UI Usability. I am hoping to achieve this through reading a couple of books and an online course. That should be enough to qualify me as at least knowing more than average Joe off the street. I will leave my notes here from my studies along with my own experiences.

Fundamentally Usability and User Experience is often an exercise in common sense. Most of its principles seem really obvious in hindsight, but it’s great to lay them out first and foremost. Unfortunately because they seem so obvious its hard to picture studying them as actually some kind of specialist skill.

One of the exciting points about approaching this is that I was hoping to put to bed all the arguments I have ended up listening to in the design room, but this isn’t the sort of subject where you can do that. It would be nice that if an argument breaks out in Sprint planning to be able to say “actually 99% of people find using that sort of UI more difficult, so lets put this discussion to bed and go with what Jamie suggested.” Sadly, the first book I turned to began with the words “Nothing is true, everything is permitted”. The frustration is that there is no one way to do things. While it would be great to spend less time in meetings arguing or listening to arguments and more time pumping out work, it is a bit of a pipe dream here. There’s always a matter of opinion and only the future will be able to tell the affect on a product’s eventual users.

Everyone has an opinion and some of them stink

Why do people argue? Everyone seems to be coming at this subject from different perspectives. While not everyone falls neatly into these boxes I have observed these different people in the work place and their ability to contribute to the decision is not complete.

Developers know their stuff, but can they really sympathise with a user? I often find that developers are often very techy and used to using very complicated UIs, so they find it hard to sympathise with a user who might not have that experience. If you don’t agree with me, just ask yourself how many developers you know that wouldn’t mine a CLI? Well a CLI is major “no-no” for most people, so the dev really isn’t “in their shoes”, so to speak and won’t ever wear their shoes, no matter how much they think they can. I am a developer and so I shouldn’t be able to see developer’s faults so easily because they are my own, but I can see these easily.

However a developer also often uses plenty of technology and in doing so they have seen a lot of UIs. With a little luck, they will remember which ones they found easy to use so their wider experience might mean they have access to some good inspiration when designing a UI. Most developers I know will have studied some form of UI design at some point in their career. I mean that’s why I am here. So they should ideally have an above average knowledge in this area. Devs also cycle through company to company every couple of years, so often they are looking at a system with relatively fresh eyes.

Product owners should know the user better than anyone. Product owners often know how to work in a field really well. If they are making software for manufacturing they understand the manufacturing industry well. They can sympathise well with all the advanced users of a system. In fact, its their job to be on the same page as those users.

Often Product Owners are not as IT savvy as other staff and have less experience of other UIs because their experience is more focused on the field the software is being introduced into. Too often in my own experience I have noticed that Product Owners have gotten too close to an advanced use of their system and don’t necessarily have a good understanding of someone who might be coming to their system anew. They have often stuck around the same product for at least 3 years sometimes closer to 10 years. They know this one system and everything about how it works, but they can’t look at it like someone who had never used it before. Their idea of good UI is often great for Advanced Experienced Users, but not good for newbies.

Sometimes Product Owners are speaking to the managers of the managers of the users of the product and well for as much as their know what the customer wants to buy, they don’t appreciate the day-to-day user of the system. I saw this a lot in the Civil Service. The product were not designed with consideration for the administrators who were going to use them so often things like typing short-cuts were not included and users who wanted to get stuff done as quickly as possible were left switching between keyboard and mouse constantly slowing down more experienced administrators like me. I remember when I was typing letters and I would type them in less than 3 minutes per letter, but then it would take me 5 minutes to record in the computer system that I had sent a letter because the requirements to go back and forward in wizards that were unintuitive and required constant swapping between keyboard and mouse because of a lack of keyboard short cuts.

Project Managers are awesome. They speak to every body. They context switch a lot and they can often understand everyone’s different language. But they are often under pressure and want a quick solution.

They are normally using a lot of simple UIs and can quickly identify what’s quick to understand and what is going to take a little bit more work. However the PMs desk is constantly being hit by problems and frankly some UI questions are a really low priority when a sales person is asking for a proof of concept of a new feature, the support team have uncovered a new bug, there’s a release at the end of the month and the current feature is behind. Their response can often seem curt. Soon as there is a simple solution to get this low priority problem back in the developer’s court then they will take it so they can focus on the things that are a higher priority.

A huge part of a PM’s job is working with a multidisciplinary team of people who all have different skills which the PM does not have. This means they are frequently being made aware of their lack of knowledge and approach the subject with blissful ignorance. This means they are very practiced at looking at something with what the Buddhist call “beginners mind”. They can sympathise with a new user.

PMs tend to shift around at similar speed to devs 2-3 years. So again they’re thinking of the new comer to your product. Not only that but they can think of the advanced user as well since, they just had 3 meetings with them last week.

So no-one really can give the best answer. There often isn’t just one truth. What’s good for one situation isn’t necessarily for another. Too often developers talk in absolutes when really in practice things are very much an art. With art there is not one way to do something there is only self expression. One person could make a UI that is fast to use for experienced users, but frustrates a lot of users particularly newbies. Another could use a method which is slower for the advance users, but the newbies get on boarded quicker because it’s almost identical to something common like google mail.

Sometimes its just best to pick up a great idea and run with it, but if someone else says B then I go with it. As a general rule, I find it’s rarely helpful to be assertive in the design room, because too many people have an opinion and its just exhausting to explore them all. If someone feels their idea wasn’t taken on board or it was criticised they will get upset and waste people’s time on it further. I will give my best way to solve the problem and if someone says don’t do that, then I will consider their alternative suggestion (sometimes they don’t even give one they just want to knock you down a peg). Once I have considered their opinion, I might say why I decided to go with what I did if I feel mine is better, but if they press their idea I’m not going to argue. Developers too often think in black and white. I do too sometimes. When they do so they will defend their opinion like a political activist. The only way to get the best opinion to make sure you listen to everyone and take on board all their views, but unless it is something that is going to be used 100s of times a day by 100s of users in 100s of offices then it won’t be worth the time to hash out for 3 hours so every stubborn developer can walk away from a meeting like a toddler having a tantrum and not tackle anything else.

Principles to keep in mind

Don’t Make Me Think

The first and primary principal is explored by Steve Krug. He felt this principal was so important he actually named his usability book after this principle. “Don’t make me (the user) think”. This is a nice quick read and worth reading if you get it. It’s short, entertaining and succinct. I was turned onto this book in a previous role by a boss who kept it in the work environment. He recommend I read it and I got through it while still working there.

The main idea is that the user having to think is frustrating for the user. Luckily they will stick around on your website even if they find it frustrating, but they will not like it. If they are the user of a product they will learn to find your product frustrating and imagine the grass is greener with a different product. A user who knows what they are looking for should be able to identify the right thing to click on without thinking about it.

The User Doesn’t Read

Steve Krug explains that the user does not use your page how you would expect. We often fill our page with carefully chosen text to explain everything. They don’t read it. They barely skim it. Krug explains that the user is simply looking for something that vaguely matches what he might be looking for and is obviously clickable. It should be clear when something can be clicked so principle one is taken care of. Don’t make the user wonder “Can I click this?”. Make it obvious. If the user has chosen wrong well that’s what a back button is for. So they can try again. We are not necessarily aware of it but often we scan pages only looking for words that are relevant to what we are looking for. Everything else gets filtered out. Do you remember the adverts at the side of your Facebook wall when you last logged on to Facebook? No? Filtered! That friend of a friend that you met one time called Bex posted again. Do you even remember or did you just skip? Last time you searched for information did you read the pages top to bottom or skip to the paragraph that seemed relevant? I certainly skipped to the paragraph and in research it has become apparent most people do and they don’t even realise they’re doing it.

In fact many users will not read the page at all. They do the equivalent of asking a member of staff in a department store, they search. I often do this when I am in a hurry and I know that I can go to Google and search and specify what website I want the search to be conducted on, but often you can go to the website and look for a Search box. Many users go straight to this so make sure it is visible and has “Search” as its label so the user doesn’t think. Not “Quick Find”, “Keyword Search” or anything but just search. This can be the text on the button or it can be to the left of the text box with “Go” on the button.

The User Assumes

This was also something written about by Steve Krug in his book. He calls it muddling through. He points out that a user doesn’t get to know your website or product he just figures it out and when something works he sticks to it no matter how buggy. The user then makes up all reasons why it works and often these are far from the truth. My dad was wondering why a certain file had become corrupted. He spoke about applications fighting each other for control over files. He means media player, itunes and other media playing software which all try to make all media files associated with them. He thought one application had tried to keep hold of a file while another application had tried to take control. This was far from what was happening when each application was changing a windows reference table which told you which application to use for each file and what parameters. It couldn’t have caused the problem. Krug gives the example of people who type URIs into search engines every time they want a website. It sort of work. It gives them a list of results and often what they want is at the top so even though they don’t understand it is a enough to assume that’s right and keep going.

Availability and Accessibility

The next principle is about whether the website is up and useable. If your website is not accessible then remember they are just one click away from the competitor. If your page doesn’t work on their mobile they can go elsewhere. If your page had broken links then they might end up at a Search Engine… You lost them.

Consistency

This is related to the users assuming they know how the website works. If everything is consistent then when they figure out how one area of the website works then based on that understand they can make an educated guess how another part of the site works with minimal thinking.

Credability

I didn’t feel this was really Usability but hey… it’s info. The web is full of people who believe the strangest things… like some who believe the earth is flat and the sun revolves around it. Some believe that a ring of Satanists rule the world. So you have to forgive the user that might land on your page and not believe what you’re saying. Give statistic, feedback ideally links to places where people can feedback separately like Trip Advisor and Facebook. Give a good About Us page, a telephone number and physical address and people are more likely to believe the site is genuine and trustworthy.

Concise

People won’t read text. We already mentioned scanning but if you give paragraphs they just won’t bother. If someone is reading this blog then you’re a diamond in the rough my friend. It’s basically just my notes put up there associated with my name so that one way when I’m like a consultant or something you can search some of these terms, come to my website and message me with work.

Krug also mentions this. He says its his second principle. Get rid of half the worlds … then get rid of half again. They just won’t be read anyway. He has a whole chapter devoted to this and says make everything self evident and you can do away with instructions. Also avoid “happy talk”… things like “Welcome to our page” and “We are about action and reliability”. Things which are vague. Get rid of everything that doesn’t say anything.

Billboard Design

Krug constantly mentions turning everything into a Billboard. Imagine people are walking past the computer screen as they try to read your website. To help you need to do a few things.

  1. Hierarchy – People want to quickly narrow in, on the more reasonable sufficing option. Also the top of the hierarchy should break up the page a in to easy digestible chunks. If they can see a clear hierarchy … let’s say 4 headings. Then they can already ignore 3/4 of the screen. Then they can zoom in on the chosen quarter … rinse and repeat. Things which are nested in an area should be clearly so. Things which are all children of the same parent should look alike. For example all the departments are children of the navigation menu so should all look alike. Also keep your site name and navigation bar at the top of the hierarchy so people know you’re still on the same page. This can also be a link to the home page. This reassures the use that they don’t have a loss of options which is incredibly frustrating for the user.
  2. Conventions – Stick to conventions. You might feel like being innovative and creative, but if your user sees what they know from elsewhere then they won’t have to even think about it. They will just know how to use your site. What’s clickable should be obvious it is clickable. For example buttons having edges that make them stick out, links being underlined and in a slightly different colour. This means they can click without thinking.
  3. Avoid background noise – When things are two busy it becomes harder to see. Let the colour of background things be a background colour … for example grey and stuff you want people to read in black and white. Think about how hard it is to read links separated by dark lines.
  4. Load quickly – You can establish a better CDN or traffic managers to help pages loads quicker but routing to servers nearer the users. Also preloading some elements. It was discovered that when users experiences a 2 second page load time often 80% of users were lost… 40% after the first two clicks and 40% more a short while after. Users asked said they felt it was broken and the company was probably of poor quality.
  5. Reactive – Your site needs to adjust for different devices so people can see it on different sized screens. Some pages that load on a mobile have links so small the user gets frustrated.
  6. Use White space – Often with counselling the provider will use silence to calm the patient. In visual design white space is used in the same way. It makes everything look less messy and busy. It can also help divide up things which belong to different areas of the page.
  7. Pages Need a Header – Whenever a user comes to a page they need to see the header that matches what they clicked to get there. That way they know they arrived in the right place. The user is never questioning where am I? Which naturally is thinking…

Deep or Wide Navigation

This is a big debate. Should the user be presented with fewer things to consider, but they divide up the pages of the UI / website into larger chunks or should there be more options and divide into smaller chunks.

The reality is somewhere in the middle and there are lot of things to consider as you’re going along.

image of a flat hierarchy and a deep hierarchy
  1. Is the using moving around the navigation a lot??? If so a shorter navigation with more options is better because they will get to know it and there are less clicks to get them to where they are going. If however they’re only likely to use it once this year then they don’t want to have to think them they click links, but they could easily click more links.
  2. Krug focuses on the thinking required in doing so. For example if you have a lot of product categories, but most of them are obviously not at all related then the user can easily without thinking filter these out. If however the categories seem to overlap a lot and many pages could easily fall under many different Nav buttons then you need to make it clearer by having fewer options.
  3. Deep hierarchies are often more prone to hiding things where a user can’t find it.
  4. Use breadcrumbs to show where you are, so users don’t feel lost. But they are not a great method of navigation so make them small. Steve Krug recommends “You are here” preceding them. Bold the page you’re on and make it not a link so you don’t think it is somewhere you can go other than here. But don’t use it as a title.
  5. Use an obvious header which matches the links that took you there so users feel they ended up in the right place

Home Page

Everyone wants a piece of this prime real estate, but there is only so much to go around. Unfortunately business politics often messes up this page having too many people wanting something on it.

As a web usability trainee you want to ensure the following are all obvious:

  1. What the page is.
  2. What sort of products do you have.
  3. What can the user do on this page.
  4. Why should I be here and no where else.

The front page should also include:

  1. Navigation to take you through the rest of the site.
  2. A reason to dig deeper in your website.
  3. Something that regularly updates (for SEO).
  4. Something visual – walls of text are a big killer of incoming traffic.
  5. A place to start if you’re going to search.
  6. A place to start if you’d rather browse.
  7. MAYBE: Social proof like copies of testimonies and customer feedback.
  8. MAYBE: Content offers (this can be like a white paper that contains much wanted industry specific content but it’s also a great place to explain the value of implementing your service / buying from you). Often you take email addresses before proceeding with this.
  9. MAYBE: Success indicators for customers
  10. MAYBE: Your product features
  11. MAYBE: Resources that you offer. Often you take email addresses before proceeding with this.

Usability Starts With Accessibility

Not everyone has the same level of accessibility as others. So it’s really important to consider the different level of different users. Some people with disabilities will find using certain interfaces so difficult they will end up rage quitting. We certainly can’t call this usable. A lot of developers are very able than other people so won’t immediately think to consider a user who might interact with a computer in a different way, using different devices or the same devices in potentially different ways.

Sometimes this is just a case of knowing how to use your HTML properly in a web interface. So for seeing impaired users having HTML that works well with a sight reading could make all the difference in the world. For user entry for example using different devices could be affected by specifying appropriately whether something is a text input, number input, phone input could work different with different input devices. Naturally this works really well with mobile design where if you were entering in a number then on mobile the number keypad comes up and entering numbers is much easier than if you were to type numbers into a full qwerty keyboard.

Placeholder text

This should not be used in place of labels. Yes it does make the form smaller but it does not work as well with the screen reader and if the user has entered data into the field they can no longer be sure it was the correct field it was entered into and the only way to be sure would be to delete their entry. Also while a field has focus this disappears. Make sure you use form labels to ensure the screen reader can help users with sight impairments.

Keyboard shortcuts

Don’t break keyboard shortcuts. HTML gives you plenty without needing to implement stuff through JS but if you want to do things with JS instead that’s fine just make sure you put all the shortcuts in place so users who are used to using them can do so. Some accessibility use the back button make sure this only ever goes back one step at a time and don’t break this because it can be very frustrating for accessibility users.

Fonts

Where possible don’t use set font sizes, use relative font sizes instead. For users with difficulty reading or visual impairments being able to set the front size for their browser can often make sites which would otherwise be easily usable require use of the magnifier which means the user will end up trying to look at the screen through a small window instead of being able to use their full screen. So in CSS you would write as follows:

h1{
    font-size: 2.5em;
}

h2{
     font-size: 1.5em;
}

p{
    font-size: 1em;
}

The following would be bad

h1{
    font-size: 32px;
}

h2{
     font-size: 24px;
}

p{
    font-size: 16px;
}

Also it’s important to pick fonts that are easily readable and clear spacing. Arial is often said to have been created to save screen space rather than for readability. Verdana has more spacing between words and characters. You also need to pick a front which has clear round shapes, that doesn’t use curves where a letter would normally be straight or straight lines where a letter would normally be curved.

A font should also stand out from its backgound easily using two very distinct colours such as white and black rather than two different degrees of grey. Be aware of common colour blindness. The most common types of colour blindness are inability to distinguish between red and green but also common is the inability to tell the difference between blue and yellow. Some people are completely colour blind and so it’s important to really use two clearly different levels of darkness between the font and its background.

Separate Presentation Logic from Content

CSS was designed to take the presentation information away from HTML. Avoid using HTML tags just for presentation function only. Nearly everything can be done with CSS and it has an impact on the screen reader and text based browsing.

Slow Processing Power

Less of a personal impariement. Some users have slow machines. Often with a developer using a top spec development machine this can leave them totally unaware of the experience of a user who might be stuck with Windows XP less than a GB of memory and low RAM. This means that heavy JS libraries could be quite slow for some users. A developer needs to be aware of this and the traffic required to load a page.

Resources for Web Accessability

https://www.w3.org/WAI/

https://developer.mozilla.org/en-US/docs/Web/Accessibility

Good is hard to judge, Bad is obvious

It’s often debatable what is good design, but often we don’t notice what’s obvious about a UI until it is absent. I think this a great site for showing you when something is wrong. It gives you a lot of things to think about and really consider. One of the major take-aways from this experience is the aphorism “don’t break the mould”. Everyone loves to be unique and different, but this just shows you how people are used to things operating a certain way and when things don’t do that they often don’t use them right.

https://userinyerface.com/

Usability Testing

This is where you get a single person at a time to use your website for some simple tasks while being watched.

Marketing teams often choose focus groups for this, but having users jointly decide how to do something hides many of the difficulties they might face because they work together.

This should be done early not later.

Don’t spend all your testing budget at once. Get less users to test it more often and you will identify more problems that are relevant.

Don’t get all the same users. You might like your target market but even that is going to be varied and the more varied you can be with tests the more inhibitors to good usability you will identify.

Conclusion

Okay so most courses I found on this subject were pretty useless, but I concluded stick to Steve Krug’s book.

Graeme

Reading “Being Geek” by Michael Loop

So sometimes when I am reading a book I write a little review of it and summarise the information. For some of the books I’m reading they’re just not relevant to the other blogs and page I write so, well they might end up dumped here for the sake of having some where to put them. Hopefully they will be relevant to what I am doing with my life and my career.

Okay so I massively recommend Being Geek by Michael Loop to anyone in the IT field who isn’t yet managing a massive team and it’s pretty good if you’re managing a team too. It’s like the career guide for devs. It starts before education and ends after management.

It touches on the academic vs vocational training routes debate, but in its attempt to cover everything it then can’t really cover things as thoroughly as possible and it attempts to focus on timeless wisdom rather than current technologies.

The author really contributed a lot to my soft skills. I have always felt that I need to work the most on them. I think what I love most about it is that is classifies certain personalities you come across in the field. For example you might have someone who acts a certain way in how they might control a meeting. For someone like me that seems helpful but in my experience no-one ever likes being put in a box and people are so varied that they often spill out of any box you try to classify them into. However the process of thinking about all these different types of people makes you more aware that your audience isn’t necessarily homogenous and often does not reflect you. One issue my brain struggles with.

The book gives you strategies for deal with each type of person. Having a strategy is important. Often it means when you question whether you acted correctly you can at least confirm your actions were the most professional thing possible in the given scenario. Even if it wasn’t successful, you couldn’t be expected to do better than that. This means you can continue with your day without over thinking it.

Sometimes I think the book is a little bit like telling a Geek how to use charm, intimidation and persuasion in an RPG game. It gives them the levels to try to pull. Okay it’s not perfect. Nothing is perfect, for the highly complicated world we live in, but it gives us the tools we need to start engaging with management and peers and that is what ends up resulting in great people skills!

I must admit I did slightly fall in love with the author when he spent most of a chapter talking about the social deduction game Werewolf. My favourite game is a very similar one called Avalaon : the Resistance. It is interesting how this lends the idea that we are of the same tribe and there is instant respect and liking on something so small and insignificant. But often so many developers are naturally of the same tribe.

Unfortunately for any readers, I have decided not to include my summaries of the content of the book to avoid reducing sales. Please go ahead and buy this book if you’re in a similar place to me or my juniors in a dev career.

Graeme

Basic Websites for Family

Spent a few days setting up some basic websites for some family of mine. So while my mum’s website suffers mostly under the hand of people who think they knew how to run a website changing and she desperately needs updating I’m avoiding the unsurmountable task of updating her NCD-UK website with no media to put on it.

I have also set up a basic WordPress for my cousin Sam to run his two sites Protrainer.uk and Next Door Works on and my sister’s coming soon beauty empire DDB Beauty.

Graeme

Reading Dune Prequels in Spanish

So I learned some Spanish when I was young. I used to be quite good at it, thanks to Michelle Thomas Spanish and the odd bit of practice with my Grampa who retired to Spain. I would like to chuck out all my old learn Spanish books and to do that I want to officially say “I speak, understand, read and write Spanish as well as I could ever want to”. I think that if I could say I have a 10,000 word vocabulary and I have read a few novels in Spanish then that would do and would help me clear out some of my old books, CDs and cassette tapes (yes I’ve had some books for learning languages since when Cassette tapes were still a thing).

With a new version of my favourite sci-fi novel Dune by Frank Herbert, coming out in yet another movie this December 2020 (if not delayed) and since I cannot be climbing mountains with Charita right now… I have decided to read the remaining 3 unread prequels…. but oh no… that would be too easy. I’m reading them in Spanish! Yes I do these things to myself.

I’m reading La Yihad Butleriana (The Butlerian Jihad) and when I have finished I hope to move on to La Cruzada de los Maquinas (The Crusade of the Machines) and finally La Batalla de Corrin (The Battle of Corrin). These books are written by Brian Herbet, the son of the author of the original series Dune, Frank Herbert and Kevin Anderson.

Once complete I can officially say I don’t need to have booked for learning Spanish anymore I can officially understand Spanish. So far it’s a hard job… learning words like reconnaissance, shields, flame-throwers and rocket-launchers, but I am slowly getting there! Maybe when I have finished I might remember to update this post…

Graeme

Machu Picchu

Me and my best friend Charita are up for climbing Machu Picchu we have set our sights high and it’s quite a lofty goal to go along the Incan trail. We have never done anything like it before. In the mean time we are looking at climbing in the UK starting with Box Hill on 22nd March 2020 and Blencathra on 3rd April 2020.

I am a little over excited and can’t wait to climb Ben Nevis and Bein a’Chrulaiste before stopping by my plot in Glencoe woods.


Unfortunately the spread of the Coronavirus in 2020 prevented us from being able to work on this!

Graeme

Third Kung Fu exam

So I completed my Third major Kung Fu exam on Sunday 2nd February 2020 and passed! I’m very glad. I am mostly impressed that I have kept this up consistently and I’m now well into my third year.

Sadly my teacher’s mother is ill and classes have been reduced to once a week so I am doing my Kung Fu training with T’ai Chi (taijiquan) once a week with a friend called Moz in addition to the Wednesday class.

Broken up by a series of 10 push-up, 10 sits up, 10 squatts, we run for 10 minutes with squatts and long jumps mid run, followed by bunny hops, kangaroo jumps, duck walking, then 100 punches, 30 stretching leg lifts ( front, opposite shoulder, side, side with toe up), 70 kicks (front thrusting, back thrusting, side thrusting, crane kicks, triple round house kicks). This usually takes 15 minutes.

After the conditioning of kung fu, we are practice Yang-style Taijiquan including, stepping, form, pushing hands and some applications. This is based on what we had learned from classes and based on a series of DVDs by Yang Jwing-Ming to augment and solidify the knowledge from classes.



Sadly due to Covid-19 in 2020 all face-to-face classes were put on hold. I decided to take up running for a bit in the hope this would help me with part of the class that I struggle to keep up with.

Graeme

Learning Arabic

I always wanted to learn Arabic which was a family language as a kid. I had great difficulty learning the Arabic spoken by my family as a kid. Everytime I had a book to help me learn, my grandmother would always say the same thing “no that’s not proper Arabic. The Egyptian Arabic is the proper Arabic.” She was mostly wrong, but the truth was I didn’t really want to learn MSA, I wanted to learn my family’s dialect so I could speak to my cousins and family.

My grandmother had found that Egyptian Arabic was understood by nearly all of the Arabic speaking world partly because Egypt has such a pivotal role in distributing the media, particularly television, in her day. So no matter where she went, or who she spoke to, they understood her strange combination of Egyptian Arabic, with the odd Lebonese word and a tonne of European loan words.

The problem was most of the Arabic world had jumped on something called MSA (Modern Standard Arabic). Nearly all books on the language were focused on MSA not my family’s dialect. Getting learning resources were difficult and I settled for a few phrase-books and romanized dictionaries in my dialect and most my text books were MSA. I also began to read some basic children’s books in MSA, but what was I learning… it certainly wasn’t the language my grandma spoke. My word for “what” was “maa”, but she said “ey” and my aunt said “shu”. Bread was “khebez”, my aunt said “khobz” but gran said “3esh” (the 3 is the sound of the vowel deep in the throat made by an Arabic letter called 3ain which looks like a 3). I said “sayaara” for car and she said “ara3biya”. What the hell was going on?

The Arabic world has always had massive respect for grammatical Arabic like that which was found in the Qoran. This language is the most complicated and oldest form the language. It incorporates strange additional sounds that indicate an noun’s relationship to the sentence. Is it doing the verb? Is the verb being done to it? Is it related to preposition in the sentence? These were things you barely worried about while speaking modern sentences. It became clear however that while the Arabic world seemed to all speak different languages their respect for tradition and religion had forced them to teach a version of proper Arabic across the Islamic world that was consistent.

In European, Latin spread around and local areas developed their own way of speaking and over time these all became extremely different. They became the different romance languages: Portuguese, Spanish, Catalan, French, Italian, Romanian etc. Imagine these countries still taught their children Vulgaric Latin. Then imagine one day instead of calling their languages all these separate names they would just call them all Latin and in school they would teach them the local spoken Latin (for example Spanish Latin) and teach them a modern simplified version of traditional church Latin (Modern Standard Latin). Well, this is actually very close to what happened in the Arabic speaking world. Instead of inventing a Modern Standard Latin, they invented a modern version of the Arabic of the Qoran with some dialectal influences, Modern Standard Arabic.

Modern Standard Arabic has the respect of the Qoranic Arabic since it essentially is Qoranic Arabic, but is accessible to a modern day speaker. However the closer the Arabic is to that of the Qoran the more respect it is afforded making it’s ideal form essentially 6th century Arabic. That was what I was learning.

No wonder my words didn’t fit. I was talking about carriages and my grandma about cars. I was talking about unleavened bread and my grandma about life sustenance, overtime in my Grandma’s Arabic the word for “which” had taken precedence over “what” and soon replaced it, while my aunt’s more Levantine dialect had preferred to say “the thing that” and dropped the question word altogether until the word for thing had essentially become the question word “what”.

Learning Arabic has been the biggest lingual challenge for me because of the 4-5 languages in one not to mention the vowelless Alphabet and the fact the word “you” declines in 6 different ways, but I am glad to have had the experience I have had and frankly even though it is basically learning 4-5 languages in one, I hope to continue with renewed effort. I have picked up some of my old books and I hope to use them to the best of my ability accepting that a lot of them are MSA and eventually get some more colloquial books in my dialect before having a good clear out and keeping only the dictionaries.

See you on the other side of this hopefully transforming experience.

Graeme

The student surpasses the master

Okay, he hasn’t surpassed me just yet… but I wrote in March about having a junior called Gareth. I look forward to the end of the month, where I not only celebrate his birthday with him, but also his second month in a programming role! Well done to Gareth who got his first programming role.

Graeme

I have a junior!

So You may have seen my “I made it” post in 2016 when I joined the ranks of programmers, something I had been trying to do for a while. Well, it is time to turn around and give back to the communities I have formed around me and give them the opportunity that I had to seize for myself.

I have met a couple of people that wanted to become programmers and basically I vowed to help them, because I remember how difficult it was for me. First I worked with a chap for a couple of months, but sadly because of his disabilities, he felt that he just didn’t have the energy to work at it. I decided to let him go and not push him, because I really needed someone who wanted it so much, that they could work independent of me more. I recently found that in Gareth.

Gareth has been learning programming by himself and with my encouragement he has really put the effort in, completed online courses and continues to learn with me.

I am finding with Gareth that I use a lot of jargon that leaves him feeling baffled and sometimes with a full week in between sessions he forgets what he has already learned, so we have written a bullet point list of the stuff we have covered already and before each session we will quickly run through and speak briefly about the stuff in the list to remind him of what he already knows, to cement the jargon and to start each session reminding him of just how much stuff he really has learned in a very short space of time.

We also have plans for him to complete a small test project for my employer and a specific application for Dragged Around London my company. I am excited to see where this goes!

Graeme

Dragged Around London: Christmas Charity Event

For the second year in a row, Dragged Around London has announced it’s Christmas Charity event.

This year the Drag Queens of Dragged Around London are holding it Upstairs at the Ritzy Cinema, Brixton.

I’m so proud of my girls and this mini-project!

Dragged Upstairs at the Ritzy | Drag Queen Show in Central London

Graeme

Arduino Programming

Most of the coding I do is very high level and so far removed from the physical technology I often feel like I don’t actually know the basics of what my code is doing on system level. I feel like I want to round out my programming knowledge so I’m working with a fun Arduino and I bought a collection of LEDs, resisters, capacitors, a bread board, a motor, a sensor and I think I’m going to have a little bit of fun!

My first project turned out very well. My hardware equivalent of a hello world project was a multi-coloured LED that flashed the colours of the rainbow in order combining different channels of RGB, but many more to come.

Graeme

Dragged Around London is Family

Probably not one of the best pictures of us, but an indication of the effect a group of people can make working together yet encouraging each others diversity. Together we brought attention to the Outside Project and raised awareness of them and frankly we will never stop doing that so long as they are continually supporting the community.

 

Graeme

Kung Fu Foundation Complete

After months of hard work I finally managed to get my red belt. That means sparring and harder work to come. We are all very proud of ourselves and I want to take this moment to state no matter what someone’s size or physical fitness if they truly want to they can set aside some time to learn a sport. Even someone like me!

Graeme

Dragged Around London Ticket system

So as you may have gathered Dragged Around London is a company that I helped form, of which, I own half. It has lots of potential to put on the books and we hope to have more and more tours and events coming up.

I hope to use the company to build my understanding of money, business and to give me a few hobbies in the mean time, but we have hit a huge snag! Our ticketing system Ticket Tailor is great, but only allows us to put a limited number of tours on the system. On the profit and loss analysis, it just doesn’t look like it is worth paying for the upgrade. In order for us to host more events we are left with few options. We are going to have to create a new ticketing system.

I have begun building the system in PHP! I thought I had forgotten this language having not touched it in a few years but it’s like riding a bike.

Interestingly I can now build using better structures so this should be more organised code.

I have begun building the Data Access Layer and the front end separately. The front end I want to put into  our WordPress CMS so I am learning to use WordPress Custom Pages to build it. I need to work on the Data Access Layer and make sure everything is secure which with PHP is no easy task! Injection potential galore!

I didn’t think DAL would stand for two things at Dragged Around London. Can’t wait to get this finished and fill the books with events!

Graeme

Psycho spender

I am looking into the psychology of money. It’s an interesting minefield which I don’t know why no-one looked at this before. A silly movie called Confessions of a Shopaholic briefly touched on the subject, but didn’t look at it much at all. I feel like this is something that should be taught at schools. I know people with real spending problems. I’m a major psycho-spender at times!

Why is this important because being able to pay our way through life is important. We constantly hear stories of people screwed over by society. Did you hear of the guy who was paralysed aside from being able to breath in one lung and move two fingers and one thumb. Supposedly he received a letter saying that he was expected to find a job. He was asked to find a job where adjustments could be made so he could work full time and his benefits were being reduced until he had found one.

I am now 30 and if we think I’d like to retire at 65 that makes 35 years. 35 years of 12 months until I might like to not have to go in to work anymore. If I was able to put aside £500 every month I could have £210,000. Ummm… in this day and age, that’s not even enough to buy a house in the area I live in. So I’m going to have to put more than that into it! Well, it will get easier as I get raises, but there’s always a chance I won’t get raises. I might even get fired. So I have t work on the assumption that my current salary is what I have to work with. Not easy but it will get easier when I buy a property and let a room. I might even get a buy to let second property to help me raise more money to pay off the first house quicker if that’s going well. If I can find a way to buy two houses by the time I’m 70 I should have an income of whatever 2058’s equivalent of £1000 a month coming in from the second house and I will be able to live in mine. That should be enough to keep me occupied for the last few years of my life, then when I die I can leave it to my nephew who is the most adorable 6 month-year-old you ever saw. That’s the plan, but I need to start acting now! 20-30 year olds, don’t leave this till later you’ll be broke and broken before you die and scraping the inside of a can of beans for a meal.

It was a the works of Brad and Ted Klontz that awoke me up to the scripts that are preventing me from doing this. The beliefs that are keeping me a chronic spending addict. I hope to read more of their work in the time to come.

Graeme

Piano

Also in the new year, I took up piano. I was able to race through my first grade 1 sight reading book from years ago with relative ease, but the more advanced exercising in the grade 2 sight reading book gave me trouble. I’m much further behind where I was as a 16-year-old kid, but it’s clearly like riding a bike stuff keeps coming back to me like I already know it. Even things I found difficult as a kid are easier now.

I was able to re-memorise all the major scales C, C#, D, D#, E, F, F#, G, G#, A, A# and B and I was able to spot the changes to make it a minor such as the 3rd, 6th and 7th notes of each scale were different. I reminded myself of all the chords including 2s and sus4s and finally re-learning Aug and Dim chords. I practiced the scales until they all flowed nicely.

I hope to get my sight reading to around grade 5 and also work on playing by ear. I have 2 sight reading books for grades 1-3 and one for grade 4. I have a couple of books of playing by ear to work from as well. I’m also printing off the occasional song when I want to practice it such as Beautiful by Christina Aguilera.

I hope one day when I have learned a full set perfectly from end to beginning I will be able to do a funny cabaret act through Dragged Around London as a beary man. This would give me a chance to make use of the deep parts of my voice which I can’t do in drag and maybe play some video games tunes.

Graeme

Dragged Around London

So I did drag what seems like a long time ago… well more came of it than I ever planned. I am now the proud owner of Dragged Around London. A company that provides drag-queen-lead tours of London. Business is picking up faster than I expected and it’s hard to keep it as a part-time project in my spare time. This could be big, but I doubt it would be lucrative.

Check out the website draggedaroundlondon.com.

Graeme

I made it!

After a year of continuous work I managed to secure a job in IT doing what I wanted to do: development. The road isn’t over yet as much as I wish it was. I just need to convince this company that they really want to keep me as a programmer and in order to do that I am taking a lot of work home.

It is not fun to do but it can be achieved and the end result will be a decent salary for years to come so it is worth the pain.

Graeme

Oracle Certified Java Programmer

So it doesn’t sound exciting but it is more exciting than it sounds. Basically I’ve been coming home from work every night and working hard until 11 o’clock at night to pass this professional exam. Studying… groans… but the truth is, this course is harder and more intricate and more complicated than anything on a bachelor’s IT degree and I am conquering it. My result of the first half were 93% when 60% was a pass. I am clearly meant for this type of work!

Not only do I get the basic concept of this type of programming but it is teaching me industry standard methods so if I take on a job in programming after this I’m not going to be a fresher junior but I’m going to know what I am doing like someone who has been working in this field for a couple of years already!

It’s going to take some time and most people do it over 2 years, so far I completed the first half in 3 months but I worked very intensely and the rest is still to come.

Graeme

Drag Queen in the making

So we have been watching too much Ru Paul’s drag race and my ex partner decided to come up with a birthday idea that we dress up as drag queens and do lip syncing. Well if you know me, you would know I don’t lip sync; I sing!

Well the new drag queen “Widow Ivanna Hairietta Thistlethwaite” hit the stage to celebrate the passing of her imaginary rich husband. Sadly, results were not recorded, but a video was…

 

Graeme

Learning to Drive!

Finally I have passed my text. 10 years ago I failed and now I have conquered.

Graeme

E-commerce venture

A new small shop in Glastonbury is looking to get online with E-commerce capability and I’m helping them. I’m very happy to use WordPress to give them access to their own Website to write what they like on the pages of their website and I’m going to use OSCommerce to provide the framework for the online shop.

They specialise in very specific products used mostly by Neo-Pagans and Thelemites in Britain as their market is very small and very specific having an online shop with methods of delivery will be very important to the working of their business.

Mysteria-Magicka.co.uk

Graeme

Yale Old Testament course

I am currently working through an incredible course published online by Yale University. It appears to be mostly the efforts of Christine Hayes who demonstrates a vast understanding of the culture within which our western religions grew up and matured. She balances many different views concerning the origins of biblical texts and presents views that many religious zealots avoid. These views often seem potentially heretic or deviating from standardized Judaism and Christianity but they are views based more on archaeological discovery than most other forms of religious doctrine.

So far with this course I have discovered the incredible similarities between the paganism of the near east, its literature and the content of the bible. The incredible similarities between Akkadian gods such as Baal and El when considered next to the god of Abraham as represented in the bible appear to reveal much of the demonstration of monotheism for the pagan masses which was going on at the time.

We have even explored multiple source theory for the bible and I reviewed the possible difference between these sources and the doctrines upon which they are based. I am somewhat sceptical about the ability of scholars to distringuish completely between different sources where E sources use the name Jahweh and J sources use the name Elohim (which is contrary to their respective definitions).

This course is incredible in its content and I can’t believe it is available for free online. I wish I could afford to buy all the books for the accompanying reading for this course but I can’t afford the money or the time and yet have determined to spend a substantial amount of time working through the material as what I learn is reward enough for the efforts of this endeavour.

For anyone who is interested in this material, click here : http://oyc.yale.edu/religious-studies/rlst-145#overview

Graeme

iNCD website

iNCD and NCD form a unique company in which my mum is on the board, so I am honoured to have the opportunity to work with them and humbled by their acceptance of my advice. I would not have had the opportunity to work in such a leading role on the marketing strategy of this company, if it wasn’t for my mum noticing my extensive knowledge of digital products and their use in the marketing process.

NCD provides churches and charities in the UK with a system designed to measure the enjoyment and loyalty of their customer bases and iNCD is a consultant team that provides methods of improving the growth rates following the research performed by NCD in to a company. NCD UK is one of the fast growing franchises of the NCD international movement and it is seeking my aid in providing digital marketing and IT services.

Recently we have used a CMS called WordPress to provide the iNCD team with control over their website. Many of the members of the team are consultants with expertise in church growth, but not in web technologies such as HTML and CSS. Providing these members with a website which can easily be modified was an important step in the marketing process. Following the implementation of this website a far greater number of people had access to the website and could update it.

Now we are looking to improve this website and give it a basis which represents the new way that most website express themselves these days with sliding images and changing screens. See www.foftravel.com for an example. We will be looking at how we can represent the two different bodies NCD-UK and iNCD in a similar way giving all employees access to the representation of these bodies and therefore an ability to strategic change the reputation of the company to better meet the customer’s needs.

See these websites for our progress:

www.ncd-uk.com
training.ncd-uk.com
www.incd.co.uk

Graeme