Mainly for a library where we want to add extra optional options in the future, so want almost C++ style optional and tagged arguments to a function, but in normal C (because C++ is just evil all by itself).
2020-08-27
Pseudo C++ using cpp (the RevK macro)
Mainly for a library where we want to add extra optional options in the future, so want almost C++ style optional and tagged arguments to a function, but in normal C (because C++ is just evil all by itself).
💩
I have been involved with SMS (i.e. text messaging) for a long time. I was even on the ETSI committees that designed GSM (not specifically SMS, sadly), and have been doing things with SMS for nearly 30 years in one way or another, including an SMS->fax/email gateway, and even the ETSI landline SMS module for asterisk. Now, at A&A, we have code to send and receive SMS via a variety of carriers and even a SIP a-law based ETSI landline SMS system.
The specification for SMS is a typical telecoms specification - very different to internet specifications where single bits packed in some small data header can subtly change the interpretation of some or all that follows. These specifications are normally very precise but absolutely horrid, in my view.
But where does the pile of poo come in, and how does it relate to a 30 year old specification for SMS? Well, you may be surprised, but SMS allows for 💩.
SMS are actually coded in the signalling used for calls, and so had limited space. There were actually only 140 bytes (or more correctly octets) of data for the text itself. As you may know SMS allow 160 characters, so this is achieved by packing a 7 bit alphabet in to the 140 bytes.
In fact SMS allows 4 ways the data can be coded, a 7 bit special alphabet, an 8 bit Latin-1 alphabet, and 16 bit unicode (allowing 70 characters). There are also ways to send one longer message in smaller parts. The SMS can also be raw data to be sent to a SIM rather than displayed. Had I written this I'd have used 2 bits to say which it is, but no, the specification uses a Data Coding Scheme which is complicated to say the least. Some times the coding is in 2 bits but others it is implied. It is not fun.
The 7 bit alphabet is sort of ASCII, but does allow some interesting characters - being a European spec it includes some accented characters and even some Greek letters.
Of course this also leaves out some key ASCII such as {, }, [ ], and does not even have € (which was added later). These are coded as two character sequences using ESC.
The 8 bit character set is just normal Latin 1, and the 16 bit is unicode. The unicode allows all unicode characters U+0000 to U+FFFF, but where is pile of poo? It is U+1F4A9 which is too big for 16 bits.
The way this is done is to use a little known trick called UTF-16. There are reserved 16 bit unicode characters U+D800 to U+DFFF. Using two such codes it is possible to encode U+10000 to U+10FFFF.
This means 💩 is actually coded as two 16 bit sequences, 0xD83D 0xDCA9 in SMS!
Why does this matter, I mean, who sends 💩 by SMS? As you can imagine, in the early 90's nobody had heard of 💩, and the best emojis we had were :-)
But we do care, honest, as we use it as a blue* M&M test for carriers we deal with. If they have enough attention to detail to handle a pile of poo they probably have the rest sewn up, technically. We are working with a new carrier for SMS messages, and I am pleased to say the unicode is working. They properly translate to/from UTF-8 coding in the messages we exchange (which is what we use internally). Unlike our previous carrier who could not cope. (* see comments)
We have seen a range of such failures, even the case where one carrier could not handle an @ symbol (presumably as it coded to 0x00 which is an end of string in languages like C). Thankfully that carrier was happy for us to send a raw hex TPDU for SMS, and hence allowing us to code any characters. Our SIP2SIM service has handled pile of poo since we launched it...
The end result is that, shortly, we will be handling a lot more SMS with unicode characters correctly, in most cases, both incoming and outgoing. Watch this space.
2020-08-15
Making a meme?
2020-08-01
A simple flat tyre - but this is 2020, so no...
2020-07-16
Account switching (Barclays to Monzo)
Setting it up (on Monzo)
Monzo make it easy - they have a button with a simple step by step guide. But there is a snag - the step by step instructions say you need last 5 digits of a debit card on the account. Hmm, the account in question did not have a debit card, so I had to order one from Barclays and wait for it to arrive. However, when I then continued with the process it DOES NOT ask for the card digits because I was moving a business account not a domestic one. I have fed back to Monzo.
I had to confirm the Barclays account, name, and address, and agree some terms, and that was it. Simple. It is then set for 8 days later.
Notifications
On the day
Next day
The day after
Issues
- It is unclear why Barclays "mess about" for a whole day - surely they could simply set a time, such as 9am, transfer the balance at that time, and relay all payments after that time. It is messy.
- Whilst a payment in the morning did arrive later as a "residual balance" there are no details. I assume if I had several payments in the morning I would not have seen any details of them, or even how many payments, just a balance. That is crazy. It is fortunate we already had most customers using the new account.
- The payment in the afternoon is missing still! I will wait and see if it turns up. Of course, customers could have also paid us in the afternoon and also be missing. Very worrying!
- Of course, I could only download CSVs of my Barclays accounts to the day before, and only because I checked before 9am, so no way to get a CSV of transactions on the day of the switch - also crazy.
2020-07-04
New covid rules (England, July 4th)
They have gone for a complete rewrite this time.
The Health Protection (Coronavirus, Restrictions) (No. 2) (England) Regulations 2020
Basically, gatherings up to 30 people now and more places allowed to be open subject to risk assessments and measures. All a bit wooly if you ask me.
But also special rules for Leicester
The Health Protection (Coronavirus, Restrictions) (Leicester) Regulations 2020
The way they have defined the area is rather odd, if you ask me. It seems they have picked something, perhaps a distance, or drawn a line, or some such, and then used a tool to make a list of postcodes and addresses. It would seem to me to have been simpler to just cover whole postcode areas rather than have 24 pages listing postcodes and addresses.
The addresses include gems like this on page 34!
I found it on street view.
So no gatherings of two or more people in that phone box!
That, to me, suggests this was really not thought about in any detail.
2020-06-23
Beyond credit cards - is this a way forward?
We all buy things on-line all the time, and use credit or debit cards to pay on web sites all of the time. As a company we have taken cards with orders in the past, but now most of our business is ongoing services paid by Direct Debit.Recently we changed the main account to which customers can send payment (when not paying by Direct Debit) to Monzo Bank. The reason, as I explained in my blog post, was that we get instant web hooks for incoming fast payments. I suspect this may be possible with some other banks, perhaps with OpenBanking, and that is something we do want to investigate, but it works well with Monzo.
Apart from allowing incoming payments to instantly be assigned to customer accounts, allowing sales and accounts staff to see the money and ship goods, place orders, or remove restrictions on an account, we also introduced a new feature for deposits with orders.
The idea was to take money by bank transfer as part of an order. This helps avoid some fraudulent orders, and means we have money up front. It also means we have bank details to validate correct Direct Debit instructions.
This was rather experimental - we had no idea how customers would react. We know people are familiar with a credit or debit card with an order, but sending money by bank transfer is not something that is at all common. We made it totally optional, but obviously having had payment with order it means we can progress orders a lot more quickly. Sales staff can immediately ship goods without waiting for our accounts department to check credit or get a deposit.
Over time we have gradually added to more and more types of orders and for lower amounts, and even for existing customers if they do not have a direct debit set up or working. In some cases we only ask for £1 or £2 deposit even, in others it is the whole cost of equipment being supplied.
To my utter surprise it is hugely popular - we have now handled many tens of thousands of pounds in this way. I recall only one case of someone specifically declining to pay a deposit with order so far, and I am frankly gobsmacked, this is excellent!
As a merchant
- No card processing fees.
- No delay receiving payment.
- No PCI DSS hassle (yes, obviously we comply with GDPR and have a privacy policy).
- No risk of a chargeback - it is just like cash.
- Allows us to validate Direct Debit details for on-going services, reducing mistakes and fraud.
- No choosing which cards to take or not take as any UK bank can send faster payments.
- No joke, scam, or fraudulent orders as they don't seem to want to send money up front.
- No real minimum, though some banks seem to dislike smaller than £1 (card fees often make small purchases by card less cost effective).
As a customer
- Faster order processing, we have the money so we can go ahead with the order, often automatically (so for VoIP, and L2TP these can be working in seconds any time of day or night, and for broadband the order for lines/circuits are even sent automatically).
- The UK banking system's "Confirmation of Payee" process means that the customer knows they are paying us, by name, and so they know who has their money (very often unclear when paying by card).
- If an order does not go ahead, or any other reason for refund, it can be instant, unlike (mostly) with card payments - though it does depend on us sending it back (which we do).
- If we refund, that is final - unlike cases I am now seeing where a card chargeback is now being disputed by the merchant months later, and I don't know for sure if my chargeback is "safe" yet.
- The lack of fees helps keep prices low.
- No need for address match - if wanting to send to a friend you can, as you have paid, just like cash.
Teething problems?
- Monzo very quickly fixed a Confirmation of Payee issue with our company name, and are working on the missing ampersand at present.
- We created a system to allocate a payment reference (account number on our system) without customer details yet, and ensure that did not then change later for future payments.
- We created a system so that the ordering process can check for incoming payments on such an account number cleanly and get bank details for setting up Direct Debit.
- We created a system to refund (by BACS at present) any deposit if the order does not complete. Hopefully in future we'll have a faster payment means to refund, and I can do it manually (as I have been).
- We had to decide how much money to charge - if just a deposit for good will and Direct Debit details, or if paying the total up front. We fine tuned how much we ask in each case over some months depending on the type of service, the risk to us, the goods being supplied, etc.
- We decided to make the up front payment whole pounds to try and avoid typing errors, and this has worked well - we are selling ongoing services so any balance of pence just ends up part of the first Direct Debit. This will obviously not be the case when just selling goods (which we plan to do also).
- We discovered just how bad people are at typing a payment reference correctly - it is a real shame that the Confirmation of Payee system does not allow us to send a regex for the reference! However, when a payment is wrong, we can easily immediately return it with "Wrong reference". This worked well and for once customer they resent with the right reference, all during the order process!
- The real time payments, and the payer name and bank details, also help allow us to easily tie up a payment with an order if a customer does make mistakes. We allow the customer to say carry on without deposit and flag that they had issues with the order. That has worked well for those few cases.
- We have introduced a checksum system that makes it easier to ensure a wrong payment does not simply go to someone else's account (easy to spot, but more of a nuisance as we email that customer confirming payment). Sadly we do not yet have a means to instantly automatically return such payments, but one day we will I am sure.
- Not really for new customer orders, but we have added a system to automatically email a statement to any existing customer paying - we also set a system to cancel any pending Direct Debits that are possible when applying the new payment. We even set the system to automatically remove restrictions on service automatically once payment arrives. Customers have used this to pay by bank transfer instead, and the system is totally automatic now!
Barcodes?
Spectre
A "Spectre" is a new shape. Yes, I did say new shape ! It is pretty incredible that there can be any such things as new shape , I...
-
This is an appeal for (sensible) comments. I am working on revised A&A tariffs for broadband. For those that are not sure how they wor...
-
Broadband services are a wonderful innovation of our time, using multiple frequency bands (hence the name) to carry signals over wires (us...
-
For many years I used a small stand-alone air-conditioning unit in my study (the box room in the house) and I even had a hole in the wall fo...





