Thursday, 30 October 2014

Story Time - No Answer Phone

It has been a year since I disabled my mobile's voice message service, the reasons I had to take this drastic action was my mother who would persist on calling me and leaving 5 messages each of 10 minutes length which I neither wanted nor listened to, but which she would spread out with little glimpses of important information within.... They were a little like having to listen to the entire X-Factor coverage last Saturday night just to hear Simon Cowell read out the lottery numbers which would win the following weekend.

Anyway, this does leave a bit of a gap when people call me and expect to just leave me a message, they either get me, or they don't and I've even been asked if my number is a mobile... "It is"... "But you haveno voice mail"... "I turned it off, so you either get me or you don't".

It makes for interesting changes to people communicating with me, notably currently selling a house agents call to arrange a viewing, they either speak to me or don't.

I just called one such lass back "I'll call and leave you a message"... Ah, no you won't ducky.

Doing without an answer phone however, you'd not think it affects you... To me it makes no difference, I was born before anyone had answer machines, companies were either open or closed, they had ladies in nice dresses with immaculate reciprocated pronunciation to take your call, or those ladies were at home.

But today's world with the internet, messaging, with answer phones, everyone is always on the go, they've given up on face-to-face communication, hence the success of Facebook and Twitter... But now people are doing away with the skill of actually talking, they are happy to just leave a message.

I don't want a message, I want to hear from you, if you can't tell me I don't know, if I don't know it don't happen... And this isn't self-inflation, I don't think the world revolves around me, but I do at least know when, how and what people are trying to do with my valuable time.

Rather than people popping in and out of my cast of life characters thinking they've let me know what's going on via voice mail.

Wednesday, 29 October 2014

WarThunder - BF110 Great Plane

The other night I finally broke my drought of aerial kills whilst flying out in my BF109E3, taking down two US F6F's and then a Russian Lagg-3... These were unfortunately in Realistic Mode...

I had spent quite a lot of time in Simulator battle, for little reward, I'd flown out in both my 109E3 and E1, had this on several aircraft, notably a P38 with it's obvious planform.

However, in Simulator I've been listening to other people for "improving" visibility of the distant dots... and I can only say its made things worse.  I had dot popping and my spotting levels dropped dramatically.  So I'll be returning to my standard settings tonight.

The switch to realistic mode however came from wanting to grind another plane entirely my BF110C, which I've had aced a very long time, I suddenly spotted I had a skin I could unlock.  Unfortunately for Air Kills, and the 110 is not going to compete for air kills in Simulator... It's definitely going to struggle in Arcade.

Hence, realistic was the middle ground.

Flying out, I was immediately into one of my favourite missions "Malta", with 2 x 250 kilo bombs I expected to make a run on ground targets and then mop up... Needless to say, that's not how things panned out.

Opposing the scratching of Italian MC class fighters myself in the 110 and a single 109 were a ground of 4 spitfires, 2 hurricanes, a gladiator, a Beaufort and a player controlled fury... They clearly had more guns in the air, and more ammo for those guns.

I constituted, by far, the most armed plane, but was - even compared to the Beaufort - the least manoeuvrable, so I took a right hand bent to strafe the beach, drop my bombs and clear the landing for Zone A... Whilst I hoped the other fighters at least found the enemy for me to climb above and pounce on.

However, by the time I got to the beach the 109 was already there, shooting up the artillery, just so he got "First strike".  To add insult to this injury he was then almost immediately shot up by the Beaufort who swooped in behind him and let his gunners set him smoking...

I really couldn't abide the 109 doing this, and told him so, but I pulled up and over the cliffs, used an energy climb (still carrying my bombs) to come out above level and slow behind the Beaufort, unleashing a stream of cannon fire at him I silenced his gunner, but only after taking coolant system damage to my right engine, and then a longer burst I killed the pilot and the British bomber plunged into the waves for my first kill.

Damaged and low, I dropped the bombs into the water and returned to base, complaining bitterly to the 109 who was also on approach.

Repaired and rearmed I was out again and ran my bombs over a light bunker, missing, but taking out the accompanying AA and artillery pieces.

At this point the HE111's on the team were on their return sweep, low and fast they tried to out run the enemy, however, one of the bombers was swooped on by a Hawker Typhoon, turning left and staying below this Typhoon however I avenged the bomber and tore the right wing off of the aircraft.

Using my speed to swing up and yo-yo over I came into a head-on with a Hurricane, who burned, then I switched to my rear gunner to start spraying a Spitfire, who soon spewed black smoke and turned off me, but I had taken heavy damage to my right wing now and the aircraft had a constant list to the right.

Pulling up I took a snatch shot at extreme range towards what was the player controlled Fury coming in on me, tearing off his lower left wing I carried on my turn in a lazy left and then levelled off as another spitfire peeled onto my tail and started to put shots into my left wing.

Both wings beat up I had this spitfire smoking both black and white, but I was doomed, I tried to hit the spit with some fire from my forward machine guns as he over shot below me, but in the now terminal dive I don't know if I got a hit, however both he and I slammed and skidded across the field margins of Malta ending me the game with 5 ground kills, 5 air kills and a big smile on my face for the first time in ages.

Tuesday, 28 October 2014

Elite Dangerous - BETA 3.0 Servers Down

"We have all the major problems of a theme park and zoo all rolled into one"

Yes, its a quote, and an apt one today, as Elite Dangerous (BETA) 3.0 has hit the downloads, and even with it being a BETA Frontier Developments have two great big things in their favour when it comes to provisioning their servers for the data load they're going to take....

They know exactly how many people have bought into the game... And they can control how they turn the servers on or off.

Now, I accept they're not expecting everyone to play at once, but with a major update which they've been touting for days, if not weeks, and everyone being so intense about playing the game they've bought into then they SHOULD have expected a massive data load demand today.  Extra now and then level off when the demand plateaus, that's standard fair.  And sadly something one would hope was catered for, but which has not been.

Then the control they  have, it seems so many games design their connection mechanics around a point of access and server, so either some log-in and then direct to the data stream or a direct connection to the server, the former allows more spreading of the load, but only if the log-in server can keep up with demand, the latter opens a huge can of worms but should with scaling work more consistently more quickly.

So why does this bother me?... I've not even bought the game?... Well, it bothers me because too many people, too many players, who have paid up more than the release date cash to play are accepting this is okay, this is a beta, they cry, this is just a test, yes it is, and it's a failure, just like the test at beta 2.0 release was, there has been no difference or improvement if servers went down then and go down now, the server is the beating heart of most all the Elite Dangerous features which push it beyond my beloved Frontier Elite II... But if it is not stable, if it has no short term flex how can it flex in the long term?... Longevity, I return to it again!

I learned last night that yes you can play single player, but you still need to validate against the server, and the server was down... So I'm potentially buying an Elite game which has a finite life span!  They turn off the servers, I can't play!

I still have my complete box including 3.5" diskettes for Frontier, I can still pull an Atari ST out its box and I can still play it... If I get the Elite Dangerous : Mercenary release... I want to keep it in its box and keep it as long and I want it to be as good a game (which I don't argue it is, a far better game already) but I don't want to beholden to a server which can be shut off.

As I've previously mentioned David Braben has had his ups and downs with the Elite franchise, its ended up in and out of court, we've waited so very long for a new Elite game, and it looks brilliant, hats off to them, but for my money I want it to last, 5, 10... 15... 20... how about 35 years... Will the company still be in being?  Will the servers still run?

We've all seen what happens to Space MMO's when they turn the server off... So, longevity for Elite Dangerous... Or, Frontier Developments, let us run truely stand alone, to play single player on our own machines alone.  Yes validate stuff earned in certain single player mode before it can be moved into multi-player, I understand that, but I want to feel alone, and in awe of the sheer scale of this game, not beholden to a server with more cuckoo spit & duct tape holding it going.

Road Rage - Company To Be Named

I'm going to put this out there, because it bugged me to all hell, I'm currently enquiring with several companies whom all shared similar names to find out who operated the vehicle in question, because, I was a victim of road rage.  Not once, but twice, to this moronic driver who in a company vehicle a) could not read the road markings and b) was utterly in the wrong, and then blocked the road to have a good shout at me.

So, what happened, well coming through Long Eaton and the main Nottingham road spans two traffic islands, both have two lanes approaching and then two lanes leaving, both lanes go straight on AND turn...

But on the second island so many people simply do not read the road markings they assume the right hand lane is straight on, and the left land just goes left.

THEY ARE WRONG, and even assuming this is incorrect as by default on islands the left lane is left & straight on whilst the right lane used to be right or straight on and you indicate appropriately...

Anyway, here we have two lanes, to two lanes to two lanes, it is very simple, after the second island in the chain traffic then merges... Lets look at what the highway code has to say about merging and Lane discipline...


If you need to change lane, first use your mirrors and if necessary take a quick sideways glance to make sure you will not force another road user to change course or speed. When it is safe to do so, signal to indicate your intentions to other road users and when clear, move over.

Okay, so if YOU need to change lane... all this applies, did this guy who pissed me off need do this?... No, he was behind me... he was merging into my lane, I was on the left he was on the right, his lane ended and traffic was merging in turn.

Why merging in turn?.... Well the highway code says it...


You should follow the signs and road markings and get into the lane as directed. In congested road conditions do not change lanes unnecessarily. Merging in turn is recommended but only if safe and appropriate when vehicles are travelling at a very low speed, e.g. when approaching road works or a road traffic incident. It is not recommended at high speed.

So it is recommended but only if safe and appropriate... Well it was safe, traffic was slow, a head of us everyone was merging into the left and all was flowing well....

However, then this moron comes down the right hand lane, and he wants to be in front of me, or perhaps he thinks we drive on the right in the UK and that everyone was merging with the right?... or just perhaps he was such a cock-bite that he believed the world revolves around him and his kid in the passenger seat and the traffic should flow around him?

Either way, he's neither indicating, nor merging, he's just beeping, flashing his lights and screaming at me.  I can see this in my right mirror, becuase unlike him I'm using my mirror.

Everyone was looking at this fool, and he beeps and he's causing the hazard but there's nowhere for this idiot to go, a head are pedestrians and cars in a chevron turning area going right down the next road.

So he's come down the right, pushed a head of everyone and then wants to just push in, and its suddenly me at fault, he's no indicating, he's not glanced left at the vehicle which was behind me... And he's ranting, so he gets my middle finger.

Yes, I'm sorry to say, I rose to the bait and he got my finger, but I'm so sick of cock-bites doing this...

And what wound me up more... This is a company liveried vehicle he's in, he's in a company vehicle, he's currently at that moment an ambassador for his company....

I've made this point to other companies before, if my staff were in vehicles with my company logo plastered all over them then I want a level of decorum from them, even if joe public was in his way he should bite his fucking tongue because he's not in his own vehicle he's in his bosses, he's representing the livelihood of not just himself but his co-workers and the whole supply chain around that company.

And to be frank, if this moron can't drive, I don't want him or his company doing business with me or any company I work for, and once I've made certain the identity of the company in question I will be blacklisting them based on this moron's instability and lack of humanity.

Not only for his clear anger issues and lack of skill behind the wheel, but because he was driving around in this company vehicle and ranting like this with a child in the passenger seat.

I don't know, it maybe perfectly acceptible to drive aroundin a company vehicle with your child, it maybe find for him to drive this vehicle on a Saturday on what looked like a personal errand, it maybe his company, who knows... But personally, I'm done.

I have the registration plate and I'll be updating this post as soon as I have any official reply from the three possible companies (as they all have similar names and livery colours).

But in the mean time, lets take a look at the road....


This is the approach into Long Eaton, from Nottingham, onto the first traffic island, as you can see two lanes, both straight on or turning left & right accordingly...


This is the gap between the islands, again two lanes and we can clearly see both are straight on lanes or turning alternatively...


We can see the lane delimitation even on the island, there are two lanes onto and off of this island.


And then the merging in turn happens here...


Looking from overhead, here is where this moron decided to start ranting and raving.

And once the traffic moved on, he then thought it approproate to stop once again at the turning to Bennett Street, where I was going, he pulled up along side me and continued to scream...

This is the reason he's going to be listed on here for all eternity and the world let know, because it's not acceptable, not in your own car certainly, but definiately not in a company car where you're representing the prestige of your employer... That company now has zero prestige, and I'm going to inform my family, friends and employer (who between them own five different businesses and my employer turns over several hundred billion euro's a year - and would possibly be interested in the type of business this moron works for) not to consider this company.

Black-listed, black-balled, moron'ed into obscurity because he was not an ambassador for his brand, he was wrong and instead of thinking "Hey, why is everyone looking at me?" no he thought it appropriate to scream not once, but twice at me, in front of his own child too.... zero work ethic, zero self awareness, just a zero in life!

Monday, 27 October 2014

British Gas - Poor Systems

I have to just release this, because if I don't vent, I'm going to blow... The payment and billing systems at British Gas must be so archaic it's untrue, they seem to have different systems doing separate different parts of the same job, and these separate different systems don't share information, so they're out of sync or slow or just so fucking annoying.

I've commented to them directly about this several times and they've simply ignored me, but now I figure its beyond a joke.

Last night, I had a reminder to submit my meter readings, so I popped onto their website to put them in, as I logged in I noted last months bill was still not paid, so I checked and made payment in full.  Submitted the new readings and had an instant bill...

Here's my first beef, if my bill was a reading last time and a reading this time then the values are consecutive and they calculate a bill instantly, and I paid it instantly....

However, the previous bill went unpaid for a month because the bill prior to that was estimated, and they waaaaaaay over estimated, so the readings went in and they were lower than even the estimates that had been put in.

The system immediately has a brain fart and doesn't give a bill, so after waiting all weekend for it I clearly gave up and didn't pay all month, because their system is just so shit, I figure a human had to intervene somewhere and reconcile their stupid estimate bullshit and issue the bill, and I can say this happens because more than once I've had to call them and correct a bill, to have to manually intervene and call an Indian call centre just to get a bill is wholly unacceptable in my book, it's the online equivalent of standing up and waving for the waiter in a restaurant and him giving you the finger.

So what did the website do last night?... Well, luckily this time it generated a new bill, and so I paid the first, submitted and paid the second... right done?... All cool...

NO!!!!!!

Because fucking hours later another system at British Gas decides to e-mail me and tell me I need to submit my readings....

Time runs upwards here, earlier messages are lower...

I'm tempted to go give them a reading which is like 1kw/h different and watch their system's brain drop out... Or even, I might start submitting individual readings each time the gas and electricity meter changes value... You know proper spam that sucker, I've read their billing small print there's nothing which says how few readings one has to make, just that one has to submit a reading or allow access to the meters by reading taking staff at intervals...

So, I use say 301Kw/h of electricity per month, lets submit 301 readings, their system asked me to submit a reading 5 hours after I'd done just that for the month!

Friday, 24 October 2014

Elite Dangerous - Longevity

I've said many things about Elite Dangerous on these pages, and I keep going on about it, so I have to admit I'm interested.  I'm not happy about being interested, but one just has to watch the game being played or even see screen shots and you're instantly engaged.

As an old Elite hand and a Frontier Fervent Fanatic I have a series of expectations about the game, and in comparison to Eve-Online I had to admit the idea of paying once and not being a subscriber appeals.


One of the main problems I had with a subscription is that as a married man, working and trying to live life, the amount of game time I get is quite limited.  In a week I might only get to play an hour or two, so paying to subscribe to a game for the other 166 hours that week annoys me, it is just such a waste.

I however do understand why companies need to fund their service, they need to pay the developers yes, but they also need to pay to keep the lights on, and server bandwidth is not free.  It is cheap, but it's not free, energy is very costly also.

So, they're running their game server and you're paying.

However, this isn't the funding model Frontier Developments have seemingly declared for their title, they've stated that you will pay once for the title and play there after.

The multi-player information then does state that the connectivity will be a mix of peer-to-peer and server infrastructure, this makes sense as all the dynamic market elements and what players know as "Open Play" must have some short of server back-bone, despite what some players would lead you to believe.

My question to Frontier Developments, and I have posted this off to them, has been "How in the long run do they plan on funding the server", essentially I ask because the kick-starter funding literally funds the development to a point, and the amount funded is not huge.

One pays for the game also at purchase, either now for £50 in BETA or later for £39.99 (estimated), but that's it?

I can not really understand how a server is going to be funded without some sort of revenue, players will stop joining, sales will plateaux and fall.... So, might more micro-transactions appear?... Just as there are currently skins for sale?... Might a subscription be introduced for "Open Play"... Perhaps the game falls down to Single Player only, or Group play only?...

Personally I miss my adventures hosting the Frontier Club, where peeps sent in their disks with saved games, I copied them back to everyone else's disks and mailed them back... Good fun.

Thursday, 23 October 2014

C++ BCD Encoding Tutorial

What is Binary Coded Decimal?... Well, when I did my A-Level the book I read described it as encoding the numeric values 0 through 9 into 4 binary bits, and then shuffling them into bytes, so you can represent the values precisely, without worry of the bit representation (big or little endian) of the system in use, and using less memory...

How can it take less memory?... If I store perhaps, 123 that's going to take 3 bytes!  I could put that into 1 byte... Yes you could because a single byte will hold 0 to 255.

But, what if you represent an integer?  4 bytes, the most significant word (two bytes) maybe little or big-endian, with BCD you can program your machine to move the values back correctly.

Lets take a look at some code:


This is only the first part however, we're encoding 1 digit as 8 bits....

We can define this encoding and then load our bytes back in whatever computer architecture we want.  This is very useful to remember when we talk between different endianess machine, such as old macs, Amiga's, Atari ST's... Even Spacecraft!

But storing 0 through 9 into 8 bits is a little wasteful, how many bits can represent 0 through 9 easily?... How about a nibble, or 4 bits?...

To do this we nave to flipflop through each digit character in our loop, and we shift the current binary left 4 bits then mask append the new value as we go round the loop...


This saves us space and gives us the output:

Technically the final blue nibble should have been shifted 4 bits left, but I'll leave you to fix that up.

I hope this quick tutorial has you thinking about encoding and how it works to help make data more easily cross platform.

And if you don't know what "Endianess" is, go search for it, but think about communications, about older systems, about different processor types... and then their applications in different systems, historical systems support, emulators and games.

--- Full Source code below ---

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <bitset>

typedef unsigned char byte;
typedef std::vector<byte> BCDEncoding;

BCDEncoding EncodeIntegerIntoNibbles(const int& p_Value)
{
    BCDEncoding l_result;

    // Convert our integer into a string
    std::ostringstream l_oss;
    l_oss << p_Value;
    std::string l_string = l_oss.str();

    byte l_Value;

    byte l_Binary;
    bool l_FlipFlop = false;

    // Iterate over each character of the number, and add them to the encoding
    for (std::string::iterator l_itr = l_string.begin();
        l_itr != l_string.end();
        ++l_itr)
    {
        char l_current = (*l_itr);
        switch (l_current)
        {
            case '0': l_Value =0; break;
            case '1': l_Value =1; break;
            case '2': l_Value =2; break;
            case '3': l_Value =3; break;
            case '4': l_Value =4; break;
            case '5': l_Value =5; break;
            case '6': l_Value =6; break;
            case '7': l_Value =7; break;
            case '8': l_Value =8; break;
            case '9': l_Value =9; break;     
        }

        // First cycle, we load the bottom 4
        // bits of our binary byte with the
        // value, and the top 4 bits with zero's...
        // So just assign the value
        if (!l_FlipFlop)
        {
            l_Binary = l_Value;
            l_FlipFlop = true;
        }
        else
        {
            // In the second cycle, we move the bottom 4 bits up
            // then mask the second value part with the binary mask
            // 00001111, so we get the new lower half value... 00001111
            // being 15...
            l_Binary <<= 4;     /// Move up 4 places
            l_Binary |= (l_Value & 15);     // Set binary lower mask to the value 4 bits
            l_FlipFlop = false;

            // Now, we have the completed binary (2 nibbles) for a byte
            // we can add to our encoding
            l_result.push_back(l_Binary);
        }
    }

    // Finally, if we were part way through a binary
    // digit encode, we need to add that digit
    if (l_FlipFlop)
    {
        l_result.push_back(l_Binary);
    }

    return l_result;
}

BCDEncoding EncodeInteger(const int& p_Value)
{
    BCDEncoding l_result;

    // Convert our integer into a string
    std::ostringstream l_oss;
    l_oss << p_Value;
    std::string l_string = l_oss.str();

    // Iterate over each character of the number, and add them to the encoding
    for (std::string::iterator l_itr = l_string.begin();
        l_itr != l_string.end();
        ++l_itr)
    {
        char l_current = (*l_itr);
        switch (l_current)
        {
            case '0': l_result.push_back(0); break;
            case '1': l_result.push_back(1); break;
            case '2': l_result.push_back(2); break;
            case '3': l_result.push_back(3); break;
            case '4': l_result.push_back(4); break;
            case '5': l_result.push_back(5); break;
            case '6': l_result.push_back(6); break;
            case '7': l_result.push_back(7); break;
            case '8': l_result.push_back(8); break;
            case '9': l_result.push_back(9); break;
        }
    }

    return l_result;
}

void PrintEncoding(BCDEncoding& p_Encoding)
{
    std::cout << "Encoding : Length [" << p_Encoding.size() << "]" << std::endl;
    int i = 0;
    for (BCDEncoding::iterator l_itr = p_Encoding.begin();
        l_itr != p_Encoding.end();
        ++l_itr)
    {
        std::cout << "[" << (i++) << "] = " << std::bitset<8>((*l_itr)) << std::endl;
    }
}

int main()
{
    BCDEncoding l_Enc = EncodeInteger(1);
    PrintEncoding(l_Enc);

    l_Enc = EncodeInteger(24);
    PrintEncoding(l_Enc);

    l_Enc = EncodeInteger(123);
    PrintEncoding(l_Enc);

    l_Enc = EncodeIntegerIntoNibbles(123);
    PrintEncoding(l_Enc);
    
}