SVG all the things!

I am quite amazed how many things in the business are postscript based, i.e. code or scripts generating postscript, or just hand crafted postscript files, which are then converted to PDF or printed.

I have been working all week on this, not just the plastic card printing, but now the invoices and statements and letters from the accounts system. Because of my new library for fonts I have also been updating systems that were already SVG based but coped badly with long names and strings.

But there is still a lot to do, so this is not going to happen over night.

The main change now for invoicing is the system generates SVG files. I originally planned on making simple multiple page SVG using inkscape style "layers" but actually inkscape is slow to load a multiple page SVG anyway even though it can pick out one page to convert to PDF. SVG does not (yet) have pages as a concept, but that may happen soon. Sadly I cannot seem to easily script loading once and then converting each page, so I ended up making multiple SVG files. But I have the option to make one SVG file, and I may make one that is interactive with page turn buttons, for use in a web page as well.

As has been a big topic on my blog, of late, fonts have been the challenge. I am getting the hang of it now. Latest annoyance if font family names - where some fonts have one family name and many weights and slants and so on, but others make each combination a different family name. I have ended up with code to "normalise" this (including, in one case, removing a trailing space from a family name which refused to work in the browser even in quotes!).

It also took me a while to realise that SVG font-style is *just* the slant (normal, italic, oblique), and also that SVG font-weight is 100-900 but free type uses a totally different scale. Oh, and it is normal, not "normal" when using in a style, but always "normal" when used as an XML attribute (obviously).

Anyway, finally we have a system which uses SVG masters as a letterhead and template for the content of invoices, statements and letters. This allows a lot of fine tuning (the accounts system is used by a lot of different companies). The old system using postscript allowed even more fine tuning but only if you could code postscript. This way you can edit a letterhead or layout in inkscape, which is a lot easier.

I have even set up a system to allow font control at various levels, even per account. This means we could set up an account for large print, for example. There are limits on what will fit with invoices and statements, but we can make text much larger in most cases, and text on letters even larger. We can also control font, such as using the Open Dyslexic font, if wanted. Whilst I doubt we would get many requests, especially as such documents are almost always emailed and so easily scaled on screen, we have the option now.

The other good thing is the new PDFs have much better copy/paste of content including good unicode support. I expect this would help screen readers extract text more easily.

Whilst mostly the plan was to make an equivalent system for invoices, statements, and letters, I have taken the chance to improve some things - such as a summary and totals on page 1 of invoices when they do not fit on one page.

Right now, some customers are on new format, so we can get some feedback, but we'll switch over completely soon. The "formal" invoice remains the PGP signed plain text that is emailed, but the PDF and print versions should be much nicer now.

Even so, much more to do - things like the call data records need changing and improving. This is a bit of a never ending task.

And finally, I have to say how excellent Google Fonts is. I have not loaded them all, but so far a reasonable selection can be seen on the card printing system, which I have managed to group by the base font family name. I'm happy to load any more free fonts if people have requests.

Thanks for the help from those that have been testing, especially Neil for his pedantry.

P.S. This seems odd in a way, laying out letters, as one of the very first projects I ever coded was a text editor and formatter for a TRS-80 written in Z80 code and printing to a daisy wheel printer over a Centronics interface. How time flies...

Non breaking spaces


There is the normal space character (0x20), and there is the non breaking space character (0xA0).

I was not expecting to have to do anything with these specially in any way to be honest apart from spotting space characters for paragraph text wrapping logic...

However, I have run in to snags, and ended up having to add it as a special case in my code.

The first snag is simple - some fonts (and only a few) do not have the non-breaking space character encoded. So my new font system wants to know the size of every character to work out layout of text in SVG, and it "falls back" to Google NoTo fonts to find the character if missing.

This logic was originally for Emojis, but actually has the full Google NoTo set now, so does Egyptian hieroglyphics and so on. It works well (once you remove the Color[sic] Emoji font).

Thankfully most of the fonts I am using even have extended Latin, so things like Polish crossed "l" characters just work in the base font. Google's free fonts are pretty good!

The problem is that when the main selected font has no non breaking space I fall back, and I hit the Emoji font quite quickly which does, only it is about twice as wide as you expect!

So my text ends up with non breaking space encoded in the Emoji font, and being wide.

Well, this is not ideal, but why would I encounter non breaking spaces anyway? Well, because when I make the SVG output, extra spaces, and leading spaces, and trailing spaces, are all zapped. So any actual formatting with spaces (especially if using mono-spaced fonts) is totally lost. This is bad enough, but I have worked out the size with the spaces and so the result looks horridly stretch to fit the space it should take with all the spaces in place. This took me ages to find as one string I was testing with had a trailing space which I had not spotted. So now I convert all spaces to non breaking spaces for output to SVG.

This them hit the first snag that the non breaking spaces are not in the font, and so I ended up coding all spaces in Emoji (for some base fonts). Again, not spotted originally as the font I was using had non-breaking spaces encoded, but another font did not and just looks horrid spaced!

I have ended up:- (see P.S.)
  • Using only spaces for text wrapping (so non breaking spaces do in fact non-break)
  • Converting non breaking spaces to spaces for all width calculation
  • Converting all spaces to non-breaking spaces when making final SVG
It seems to finally work...

Fonts are fun!

P.S. xml:space="preserve" is your friend - it preserves spaces as they are.



One of the things that has always slightly amused and puzzled me is that unicode lacks a "cock" glyph. I mean, it seems to have characters and symbols from modern and historic cultures and forms of writing, and surely cave men have been drawing dicks on cave walls for tens of thousands of years, so why is this missing?

I can only assume someone is being prudish, and oddly enough people have used the eggplant 🍆 emoji for this, amongst others, so clearly there is a "demand" for this emoji.

What I never realised, until now, is there would appears to be one already, thanks to Egyptian Hieroglyphs!

There seem to be three of them!


And for those of you on Windows with a censored font (what a thing!) this is what they look like.

They are rather innocuously named U+130B8: EGYPTIAN HIEROGLYPH D052, U+130B9: EGYPTIAN HIEROGLYPH D052A, and U+130BA: EGYPTIAN HIEROGLYPH D053.

I cannot actually work out what the middle one is meant to be doing, to be honest. Looks painful.

Someone will no doubt explain to me that in fact that is not what the hieroglyph is and that I just have a dirty mind, but if that were true, why are they apparently censored in some fonts?

Reference: http://xahlee.info/comp/unicode_egyptian_hieroglyph.html

Who knew?!

P.S. Why was I looking for unicode dicks? I was not, but was checking if hieroglyphs worked on my new card printing system, and to my surprise, they do! May have to be time for a new SSID I think :-)

P.P.S. (yes, all the daft ones are on 2.4GHz so don't impact any of our devices)

P.P.P.S Wow, what a time to be alive!


Playing cards

Well, I am pleased to say we now have five packs of cards on Amazon. Sadly we don't have the Stargate cards yet, and I have a bad feeling that is going to finally hit a brick wall (more on that later).

Click on the pack for the Amazon page. Ideal Christmas present / stocking filler :-)

P.S. And yes, these are going for cost price, but if they are popular I'll buy in a larger quantity and get the price down.

A&A branded (with extra 11 card)
FireBrick branded (with extra 0 card)
RevK branded Left Handed deck
RevK branded Goodall & Son reproduction deck
RevK branded (well sort of) White Minimalist deck

All designed by me, see https://www.me.uk/cards for downloadable artwork for my card designs.

SVG being a tad special

I am pleased to say the work on fonts and SVG has, well, worked. FreeType just worked, and I was able to have a string of Google Noto fonts as backup for missing characters, so emojis, runes, Polish accents, all just worked. Even my new Farrington 7B font. Yay!

This is an update to A&A card printing.

But one aspect really fooled me.

In SVG you can have a text object, and that can be stand alone with the text as the content and attributes like font-family and font-size.

But you can include within it tspan objects. The advantage is that this allows different attributes for some text in-line.

For example changing to an Emoji font part way through, or some other font, or italic, etc, etc.

So far so good.

Then we come to the textLength attribute on text and tspan. This is meant to tell the application the calculated length of the text. As I now have FreeType working that out, and setting lower when I want to squash text, I have the figure to use. I added to the text element, and, err, nothing (when using tspan within text).

So... let's add to the tspan elements. I did this, and obviously I set the textLength on each tspan as the calculated length of that tspan.

It seems I am wrong. I do need to put the textLength on the tspan elements, but they have to be the total text calculated length not the length of the tspan!!!!

Update: For browsers I need textLength on tspan, but for inkscape (which makes the actual images for the card printing) I need textLength on the text object, so setting both!

Me no understand!

P.S. Everything but Safari struggles with a large value for font-size even when in a scaled SVG, showing things short (but stretched to textLength) and different if rotated! I may have to tinker with that at some point to work around. I am sure the SVG is fine!

P.P.S. I embedded fonts in the SVG for use as above, but even though that works in safari (and other browsers), it does not in inkscape. Shame.

P.P.P.S. This is what it looks like now.

P.P.P.P.S. I now have myself a nice svg/font library to do text objects, squashed, wrapped, justified, aligned, all sorts, based on system fonts using the fontconfig library to find system fonts and the freetype library to extract metrics. Works a treat and already deployed in four different systems we have using SVG (e.g. business cards if names are too long, etc).


Better audio

I was getting pretty good (I think) with some of my videos, using two cameras and so on, but as I have said before, audio is always an issue. This is largely because my "man cave" is quite echoey.

I did get a lapel mic, and that improved things a lot, but I figured I could do better.

As an example, with the previous mic https://youtu.be/mYBRTz2ReZQ

But with the new mic https://youtu.be/mjJaOKZ4S0c

The new lapel mic is itself a lot better it seems, a lot clearer. But also I got a shotgun mic. So when recording messing with cards I pointed the shotgun mic at the cards for sound effects, and it hardly picked up any dialogue at all, perfect. My first attempt at mixing in an effect track with a dialogue track. I'll get the hang of it yet.

The new lapel mic is Movo LV8-C and the new shotgun mic is RODE NTG2, but also needed an XLR lead and mic holder.

I also got a Tascam recorder, as it seems able to do 4 tracks of 96kHz/24 bit with no problem, which is nice. It actually seems like quite a nice recorder, but I seriously doubt it is a factor in sounding better.

Of course, this is also the kit I have here for when I do live TV broadcasts from here :-)


On the matter of fonts and copyright

I think I am making some progress on using FreeType to work with fonts (previous blog post). And no, I am not planning to include my new Not Alteran font (blog post).

The plan is to move some things I previous did using postscript to SVG, mainly because of its much improved unicode handling. By being able to determine metrics when creating the SVG I can create an SVG that does line breaks and stretching or whatever correctly for the font.

One of the targets for this work is my existing card design platform. It needs some improvement I know, and I have done quite a few things recently, but moving to SVG would make it much neater - not only to see the designs on screen, but also to make cards using unicode characters properly.

And no, not just for emojis (though they will be included in the logic), but for all of the accented characters. Even just doing cards for a school reunion ran in to issues with the default Postscript font, and I still cannot manage some Polish names! Unicode would solve that properly.

Thankfully there are quite a lot of free web fonts (google do loads), so the system can use those. But there is one font that is annoying me. The Farrington 7B font.

It is defined in ISO 7811-1 which is one of the specifications related to bank cards, and is the font for the main large digits on the card (e.g. credit card number). The ISO standard has an appendix with detail drawings of the character outlines with measurements. They are simple as they are lines and arcs only. I had a copy of ISO 7811-1 ages ago for work, but don't have one now. I could pay for one I guess. Somehow they do manage to kill off dodgy copies just on the Internet (having paid once for a copy I can no longer find, I feel somewhat justified in using a dodgy copy if I could find one).

Also, there are several sites selling the 7B font. And it got me wondering, I may as well make one (assuming I find / buy a copy of the ISO). But then I don't actually have a clue what he copyright issues are here!

Fonts are special from a copyright point of view in that the font itself has copyright, but instances of use of the font are allowed. i.e. the font is like the written recipe and the printed work using it is the cake.

But an ISO is meant to be a set of instructions you can follow. You can make the bank cards following the instructions in the ISO you paid for, and presumably follow them to make an embossing machine to emboss the Farrington 7B characters, and do so without copyright issues.

So can one make a font from the details in the ISO and not be breaking copyright by effectively copying that appendix of the ISO in to a font? I have no idea.

The other issue is the font design tools - I need to work out if I can enter co-ordinates. It seems that they are designed to allow one to draw and drag points, and set guide lines, and so on, not simply enter co-ordinates off an engineering drawing.

The other annoying thing is that I have the spec converted to a Postscript font which I use now. I must have done this at least two decades ago.. From this I should be able to re-work the drawings, but to be honest, that is probably more work than the cost of paying for the ISO again.

Anyway, if I do make a font, I'll publish it for free. It is 10 digits, and that is it.

%% Farrington 7 B characters (credit cards)
/7B 50 dict dup begin
/FontMatrix [1 233.7 div 0 0 1 233.7 div 0 0] def
/FontType 3 def
/FontBBox [20 0 120 170] def
/FontName (Farrington 7 B) def
/PaintType 3 def
/Encoding 256 array def
/CharStrings 11 dict def
0 1 255 { Encoding exch /null put}for
/Private 10 dict dup begin
/m/moveto load def
/l/lineto load def
/x{currentpoint exch pop lineto} bind def
/y{currentpoint pop exch lineto} bind def
/cp/closepath load def
/an /arcn load def
/a /arc load def
CharStrings /null {} put
/c {Encoding 1 index dup (0)0 get add exch ( ) cvs cvn put
    ( ) cvs cvn CharStrings exch 3 -1 roll put} bind def
{-15 80 m 15 50 30 90 0 an 15 -50 30 0 -90 an -15 -50 30 -90 -180 an -15 50 30 180 90 an
 15 70 m -15 50 20 90 180 a -15 -50 20 -180 -90 a 15 -50 20 -90 0 a 15 50 20 0 90 a}0 c
{-5 80 m 5 x -70 y 45 x -80 y -45 x -70 y -5 x 60 y -15 x 70 y}1 c
{-45 74 m -15 0 80 110 90 an 15 50 30 90 0 an 15 25 30 0 -90 an
 -15 -25 20 90 180 a -70 y 45 x -80 y -45 x -15 -25 30 180 90 an
 15 25 20 -90 0 a 15 50 20 0 90 a -15 0 70 90 110 a -41 65 l}2 c
{-45 74 m -15 0 80 110 90 an 15 50 30 90 0 an 15 25 30 0 -60 an 15 -25 30 60 0 an
 15 -50 30 0 -90 an -15 0 80 -90 -110 an -45 -74 l -41 -65 l -15 0 70 -110 -90 a
 15 -50 20 -90 0 a 15 -25 20 0 90 a -25 x 5 y 15 25 20 -90 0 a 15 50 20 0 90 a
 -15 0 70 90 110 a -41 65 l}3 c
{-45 80 m -35 x 5 y 10 x 80 y 20 x 5 y 45 x -5 y 20 x -80 y 10 x -5 y -45 x}4 c
{-45 80 m 45 x 70 y -35 x 5 y 15 -25 30 90 0 an 15 -50 30 0 -90 an
 -15 0 80 -90 -110 an -45 -74 l -41 -65 l -15 0 70 -110 -90 a 15 -50 20 -90 0 a
 15 -25 20 0 90 a -45 x}5 c
{-45 80 m -35 x 0 y -15 -25 30 110 90 an 15 -25 30 90 0 an 15 -50 30 0 -90 an
 -15 -50 30 -90 -180 an -45 80 l 15 -5 m -15 -25 20 90 180 a -15 -50 20 -180 -90 a
 15 -50 20 -90 0 a 15 -25 20 0 90 a}6 c
{-45 80 m 45 x -80 y 35 x 70 y -45 x}7 c
{-20 80 m 20 55 25 90 0 an 20 35 25 0 -30 an 10 0 l 20 -35 25 60 0 an 20 -55 25 0 -90 an
 -20 -55 25 -90 -180 an -20 -35 25 180 120 an -10 0 l -20 35 25 -120 -180 an
 -20 55 25 180 90 an 20 70 m -20 55 15 90 180 a -20 35 15 -180 -120 a 0 6 l
 20 35 15 -60 0 a 20 55 15 0 90 a -20 -70 m 20 -55 15 -90 0 a 20 -35 15 0 60 a
 0 -6 l -20 -35 15 120 180 a -20 -55 15 -180 -90 a}8 c
{45 -80 m 15 50 30 0 90 a -15 50 30 90 180 a -15 25 30 -180 -90 a 15 25 30 -90 -70 a
 35 0 l -80 y cp -15 70 m 15 50 20 90 0 an 15 25 20 0 -90 an -15 25 20 -90 -180 an
 -15 50 20 180 90 an}9 c
end def
 exch begin Private begin
 140 0 FontBBox aload pop setcachedevice 70 85 translate
 1 setlinecap 1 setlinejoin 10 setlinewidth
 newpath Encoding exch get CharStrings exch get exec closepath
 %0 setlinewidth
 end end
} bind def
end definefont pop

Update: First attempt at font here.

P.S. I was slightly cursing ISO 7811-1 as (apart from a couple of obvious typos) the dimensions were nasty and did not even add up exactly. E.g. character width 2.54mm but adding the stroke width to the control points gave 2.55mm. I am, of course, being thick, convert the dimensions to tho (1/1000th of an inch) and they come out as nice round numbers. Even the small rounding radius (0.13mm) comes out as 5/1000", and pretty much everything comes out as a multiple of 5/1000". I probably should have converted to tho first as it would have made it a lot easier to work out the co-ordinates. I may re-do some time.

P.P.S. I did redraw, converting to 1/5000th of an inch, which made some nice round numbers.


Not the Alteran font

This blog post has possibly no use whatsoever - I was pondering whilst I went for a walk, and came up with the idea. Unless you are a film producer looking for a free font to represent some high-tech alien race, then I doubt the blog is useful :-)

The thought I had was that in Stargate they use a block font for the Alterans/Ancients. No doubt with the objective of looking like some high tech font used by an alien race. It is based on grid format, 3 wide by 4 high, and then has a special case of an extra half pixel below the centre middle to mark numbers.

It occurred to me that you could make a more efficient font that this. Yes, I said this was a useless blog post, honest.

So my thoughts were, a 2x3 grid, i.e. 6 blocks, making 64 combinations. However, there would need to be a few restrictions as generally you do not want it to be possible for one letter to look the same as another letter if you cannot see the base line of the text, so we need a few rules.

A first rule is no symbol should look the same as another symbol simply because it has been shifted by a pixel. Oddly, I decided later that there could be a few exceptions to this, but I'll come back to that. Basically, you don't have these two as separate symbols.

.. XX
X. ..

I.e. a small "r" shape should be in one position. Now, within a row of text, yes, you could tell them apart, but not on their own, and, if there are other symbols like this, one could easily have a whole word where the meaning depends on whether the word is shifted up a pixel or not. The same logic applies to something only on the left which could appear the same on the right. Oddly enough, I have decided later that some punctuation, which is rarely not next to other characters, could maybe break that rule. However, we definitely want that rule for normal letters and digits.

Restrictions like this cut down on the possible combinations. I did the sums in my head as I was walking, and work out I could easily allow for 40 combinations where there was always something both left and right, and always something on bottom row. These two restrictions meant the above rules were met. 40 is good, as you can have A-Z and 0-9 and 4 other symbols. Obviously any alien high tech font has to map to our normal characters and digits (the Alterans do!).


It occurred to me the digits should be logical, and obviously aliens will use base 10 (Alterans use base 8 except when it comes to their font). If I make them all from characters with the bottom two pixels set I am left with 16 combinations. This can be 0-9 and 6 extras. Sadly we have 4 extras over A-Z and 0-9 so that means I cannot make all letters out of characters where the bottom two are not set, there will have to be at least two letters will have to be in this style along with the digits. Shame.

So the digits I did as follows. I went for coding 0 as "10" because of underscore (see later).

.X X. XX .. .X X. XX .. .X X.
.. .. .. .X .X .X .X X. X. X.
1  2  3  4  5  6  7  8  9  0


Some letters could be made to vaguely match their normal characters, upper or lower case, e.g.

.X XX .X X. XX .. .X XX XX X. .X X. XX XX ..
X. X. X. .X X. X. X. X. .X XX XX .X .X XX XX
j  g  i  l  f  r  z  p  q  b  d  s  T  C  o

So that was a good start.


I had space for 4 punctuation characters in this style, so went for some basics...

.. .X X.
.. X. .X
XX .X X.
_  (  )

I decided the one, a solid block with all 6 pixels set, would be best as the .notdef special character for when a character is not defined.

But there was more than I could do, if I break some of my rules. For a start, I could make a few cases for where punctuation would be next to other characters so less ambiguous. We live with hyphen and underscore being the same (in some fonts). So...

.. XX
XX ..
.. ..
-  "

I could also do some single pixel wide options :-

. . X X X X
. X . X X .
X X X X . .
. , : | ' `

The only one I did not define, and may come up with something for, was a centre dot.

I could do a few more like this maybe... 


I decided to make a space that is just a blank character, but this sort of text probably looks better with no spaces. As far as I know, once upon a time people did not use spaces (when paper was expensive), and you can often work out when one word ends and another started #susanalbumparty

Making a font

I downloaded BirdFont for Mac. I have to say I don't like it much, but for this purpose it worked. I had a go with FontForge, and that looks better. I may re-make from scratch some time.

The result...

This font... TTF which you are free to use (some credit would be nice).

P.S. Crap, I have just re-invented Braille, haven't I. Oops.
P.P.S. And yes, Teletext and even TRS-80 allow exactly this style of block characters :-)


Getting bank details right

Whilst this is an area about which I have ranted before, it seems that things are changing soon. This BBC article covers the new system that will come in to place next summer.

In essence it will mean that, to send money, you will have to enter not only sort code, and account number correctly but also the payee name. If it is correct, all is well. If close, then you are promoted with the correct name. If wrong, you cannot send money.

The aim is simple, to reduce the significant amount of fraud where people are duped in to sending money to the wrong place. This is a good aim, I agree.

Of course, with any new system like this, there is the trade off of increased inconvenience caused by the new system, verses the reduced fraud. The trick is getting these well balanced and ideally not failing in one or both of these objectives.

We find it very difficult to get people to type the right reference on payments, and that is basically a letter and some numbers. As such, I have concerns :-)


The most obvious concern when this was all mooted a while ago is that having a means to find someone's name from their bank details is a privacy issue. If you could just get a name from account details you could easily use that information.

For example, if you are calling what you think is your bank, they ask for bank details, and come back and say, "And can you confirm that is Mr John Smith?", you are immediately re-assured the they must in fact be your bank.

Thankfully the article does address this - the name will only be given if the name you tried is similar. But the devil will be in the detail - what is similar? Too broad, and you have the same privacy issue, e.g. "And can you confirm your surname?"... "Smith"... "And that is Mr John R Smith is it?"... Again, an issue. Of course, if too narrow, you have inconvenience, see below.


We find it hard to get people to type a reference in correctly. I imagine we will have problems getting people to type "ANDREWS&ARNOLD LTD" correctly, and that is not that hard. Note the lack of spaces around the & so that it fits in an 18 character BACS reference, but we do have a space before Ltd. Yeh, that will be fun.

I am sure if your name is "JOHN SMITH" all will be well, but what if your name is "Quvenzhané Wallis" and you want someone to send you money? Good luck getting someone to type that on a phone keypad and even hit the "similar name" logic. Indeed, I know people that are known by their middle name not their first, and people that have names which are spelt differently if you don't have accented characters available.

Update: As per one of the comments, this gets even more complex if you are known by more than one name - I do hope banks will allow other names to be recorded for verification.

I can see some horror stories coming out of this whole system.

Trading names

A lot of businesses have different trading names. Heck, even we do, as we use "AAISP" a lot. So that will not match. Hopefully banks will allow trading names to be registered for this as well - though that then opens things up for scammers to register a trading name.

Of course, this will have side effects. If you are expecting to pay, say "Red Dwarf Building Contractors" you may be told "you need to put 'Kryton Ltd' as the payee name as that is our parent company".

Once people get used to that happening, scammers can easily just tell people what to type. They tell them the sort code and account number now, they'll just tell them the payee name to type. They'll also make it nice and simple to type correctly.

Of course the banks will be happy as the customer will have told the bank who to pay, and the bank will have done as they were told. The fact it is not who the customer actually wanted to pay will be the customer's fault again. Yay!?!!


The focus is on consumers being defrauded, but I have seen many cases of businesses being defrauded, and for much larger amounts (hundreds of thousands).

This system is almost certainly not going to impact any business using BACS files to send money, as a lot of larger companies do (even we do). BACS two day payments are still used for payroll and paying suppliers by a lot of companies. Unlike the on-line and mobile banking, these systems don't have the same interactive process - a file is submitted with some specific fields, and maybe a day later any errors are reported in a file. If payee name checks happened on BACS files, then suddenly a lot of outgoing payments (perhaps even payroll payments) would start failing and being delayed, so I seriously doubt this will impact BACS.

So businesses will still be vulnerable, and maybe fraudsters will move their focus to businesses. Before people start saying businesses can look after themselves, remember, a lot of businesses are quite small and could easily go bust as a result of a fraud like that - causing hardship for employees and business owners.


Fraudsters will simply adapt, sorry.

This system will help massively with silly typing errors on sort code and account numbers. It will however add inconvenience when people cannot type the right payee reference, more so for people with harder names.

But fraudsters will simply create accounts (after creating Ltd company) with a "similar name" to the one supposedly being paid, or register a trading name matching, or more likely tell you "Put XYZ as the payee name as that is our parent company" and people will just fall for it.

So I predict it to help a bit in the short term, to inconvenience a bit long term, and ultimately not help.

Does that make it not worth doing? - hard to say - it is all down to a trade off of inconvenience vs security, and that is always a tricky call.


P.S. The problem here is that the banks have not been doing anything wrong. Yes, I know it is odd my saying that. For a long time there was call to allow faster / instant payments and banks did that. Now, when people ask a bank to send money to somewhere, and the bank does that, the bank has done exactly what it was told. It is one of those occasions where it is not the bank being defrauded. So I can see why the banks have taken time to "do anything" as it is not actually them that has the "problem" here, but under pressure, they are now doing something, so well done. What this will do is again make it 100% clear it is not the bank's fault - when someone pays someone thinking they are paying one person but actually (for whatever reason) they confirm they are paying someone else (maybe as instructed by fraudster) the bank can be even whiter than white and say that they did as they were told and paid the right person not just by sort code and account number, but by name.


Canon EOS-R

For background I have used most of EOS 1D MkII, EOS 1Ds MkII, EOS 1D MkIII, EOS 1Ds MkIII, EOS 1DX, EOS 1DX MkII, belonging to us and friends. The ones we have get used in the business, for everything from coverage of sports events we are sponsoring, to photographs of products for packaging and web sites. We do offer photographic service even, but I am not really a professional photographer myself. I do, however, have some experience using Canon high end cameras.

In most cases I also had the WiFI adaptor and a GPS adaptor. The latest 1DXMkII has GPS built in, and the separate WiFI adaptor does 5GHz as well. The package works well, we take product shots and they instantly FTP to the file server where we can view then and use them.

I now have an EOS-R. I knew it was a slight backwards step. It is Canon's new full frame mirrorless camera and a few features are not quite as good as the 1DXMkII, but it has some nice things like built in WiFi and higher resolution sensor.

I don't intend to do a review of the optical / photographic features. There are many such reviews by those far more qualified than I to explain and review. In summary, the EOS-R is Canon's new full frame (30Mpix) mirrorless high end camera, with a new "RF" mount but with EF adaptor, which works nicely. It is small and light compared to 1DX, but has an optional battery clip which I like (others may disagree) which takes two batteries (battery life being one clear area it lacks compared to the 1DX). It is slower to start up, which is a tad annoying.

What I want to do is address the network side. Being something of a network engineer and having coded network stacks from scratch, I like to think I am a bit of an expert in this area. However, I 100% accept that some of the issues I have had may be user error. I'll update this blog where that is the case, but with the caveat that as someone with experience of previous high end Canon cameras, user error really should not be happening, if designed well.

1. Bad: No IPv6 (as far as I can see). When Canon started designing this camera, the IPv6 specs had been around for a couple of decades and the current version of Internet Protocol is v6. I could rant for ages on this, but I'll gloss over for now - for most things we can cope using just IPv4.

2. Good: Built in WiFi. Nice to have, and something I have always had to pay for as an extra adaptor before.

3. Bad: Seems to only be 2.4GHz WiFi. But to be fair they sell a separate WiFi adaptor too, which I really hope is 5GHz, so someone wanting faster WiFi can take that option. Fair enough I guess, but I doubt they saved a lot making it only 2.4GHz these days.

4. Bad: No built in GPS. I am sort of in two minds over this. I like GPS. I had a separate GPS adaptor on much older models, and the 1DXMkII built in GPS was nice. However, Canon have decided they can link to your mobile phone for location instead. I cannot work out if this is an annoying bodge or a cunning technical solution yet. I do, indeed, normally have my phone, and it knows where I am. I hope it will do it over Bluetooth as otherwise I have to faff with changing WiFi on my phone to use camera as AP or some such which I don't want to do.

5. Bad: Broken bluetooth. I have no idea at this stage if this is just my camera or generally, but any attempt to pair a bluetooth device does not get as far as a list from which to pick - it crashes out with Error 70 (a shooting problem?!?).

6. Bad: Very unhelpful error messages. I decided to try the cloud service thing. I am not going to use it as it means all photos go to Canon, sorry. But I did test it. Initially I was using the wrong WiFi SSID (partly because it does not show UTF8 SSIDs and partly as it does not show 5GHz only SSIDs) which meant it hit a wifi with an http intercept and splash screen. The error was that I had to set the camera data and time! This is so unhelpful as (a) you have internet, set it yourself FFS, and (b) if you have connection problems over internet say so, don't invent an unrelated error! (c) I had set the date and time, to within a fraction of a second.

7. Bad: No direct Ethernet, but maybe not the end of the world given it has built in WiFi.

8. Bad: It will not do FTP. This is not Canon deciding that people do not want FTP because it is old (which is an issue, I agree), as they will do FTP if you buy a second WiFi adaptor. The firmware clearly has the FTP capability and you can even select which images to transfer via FTP in the menus, but not actually set up FTP at all. For some inexplicable reason, even on this expensive camera, Canon have decided to cripple the software to not do FTP over the built in WiFi, and I cannot see any sensible reason for this massive backwards step. It almost makes me want to send it back for this alone. After all, most other models I have used will do FTP over Ethernet - you only need the extra WiFi adapter to, err, do WiFi. They don't cripple the protocols you have without it.

9. Bad: I simply cannot get the file transfer to a Mac to work at all. I have tried more than one Mac. I have even tried with camera setting up an SSID and Mac connecting to it. I have tried following the exact steps as explained by Canon on twitter only to find the app does not have a "Pairing over WiFi" button as shown in the manual. Even where I have managed to get a pairing over WiFi option though different routes, nothing shows on Mac or Camera. The WiFi does work (I can ping the camera, and even transfer to my iPhone over WiFi). This was after having to pretend I had High Sierra not Mojave (as advised by Canon). I am not keen on a call with their support, but may have to. Whilst this really is not as good as simply doing FTP, it may allow me to bodge something together to make it work overall, but I bet it will only work when on same WiFi as my Mac and not (as with FTP) from anywhere on the Internet.

10. Bad: I hope this is user error. I cannot seem to find any way to make the screen and view finder work as a normal SLR. It has a manual mode to always be screen or always be view finder, or auto to switch to view finder when you move your eye to it. What I cannot find is view finder when my eye is there, and menus / display photos / preview of shot taken on screen but NOT live shooting on screen. Why? Well (a) I am used to an SLR not live shooting, and (b) the live shooting is touch screen focus (nice when you want it) but bad when you touch with your nose, etc, (c) its uses power showing a live screen for ages when I don't need it. I'd like that option and a simple button to turn on live shooting on main screen when I want it and not all the time.

I'll update with more when I have chatted more to Canon on this.

Update1: Went through in great detail, with pictures (so as to be helpful) with Canon on twitter and they have no clue on the bluetooth issue! They have gone off to check with technical support.

Update2: Using camera as a WiFi AP, I managed to "pair" over WiFi to the EOS Utility, and then it worked via normal AP, but sort of only once and then freezes on the Mac so badly I end up rebooting. It does work in the mean time, but no way I am rebooting every time I want to transfer files. And that still does not give the auto file transfer to Mac as that is a different app! As I said in the comments, just one, standards based, protocol for sending images as taken over IP - that is all I want, whether FTP, SFTP, whatever, even https posts FFS. Anything that does not mean special proprietary code on my computer that Canon clearly struggle to make usable or stable.

Update3: Just to clarify, I can connect to iPhone, using normal WiFi AP, with its normal IP addresses (IPv4), and does not even have to be same SSID, just same LAN. So I can grab images to iPhone, remote shoot, and so on. That is moderately slick. So that is some progress. Talking to my Mac is still a struggle. Bluetooth is a total bust still.

Update4: I reproduced the stupid "set date/time" error by simply redirecting the https that is used for the cloud services to something without the right certificate. I have yet to check if a self signed or faked CA would work. What a stupid error to report though, really!

Update5: I tried again, resetting everything on the camera and rebooting the Mac and re-downloading the apps from canon. Somehow, this time, the Image Transfer Utility was able to "pair" with the camera. In face the mac is not even on the same SSID (but is on same LAN). And before you ask, the AP is not set with any broadcast filtering set up. So I do now have auto transfer (when here) to my Mac, so I'll have to code some magic to send to my photo site.

Update6: New stupid. Yes the auto file transfer to my Mac works, but not when I take a picture, no. It happens later, if I turn camera off, and later turn on again, then it suddenly catches up all unsent pictures at that point. WTF - what the hell is the matter with Canon. These are the people that, on the 1DX, with FTP, will actually connect and login on pressing focus and hold the TCP connection open so that the file transfer happens the instant you press the shutter.

Update7: Mirrorless it going to be hard to get used to - I pick up camera and hold view finder to my eye, and blackness initially - I even have to press something to see am image - that is so strange. Yes, it wakes up and I can then see something, but that is just weird, and I guess a feature of mirrorless.

Update8: Apparently the "Auto send images to computer" is designed like that, such that to to "auto send" the images you have just taken you have to "manually" turn the camera off and back on a gain. What the hell is wrong with Canon?

Update9: Apparently it can transfer to computer as you shoot, but only as "remote shooting", but that is misleading as in remote shooting mode you can shoot using camera. But to get to that is multiple menus and so on to get to it. Also, having got to the menu once, I cannot again - the camera says it is connect or not, but the EOS utility just offers pairing over wifi and does not list the camera now. Buggy as hell. There seems no way to just pick up the camera, take pictures, and have them transfer automatically as taken if you are on the local WiFi - it is hassle whatever you do with this camera. Nightmare. Canon used to be good, I thought, anyway.

Conclusion - going back for refund.

P.S. It is probably worth adding a few points. There are many ways to use a camera. I choose to have images stored on a server where they are backed up, and sorted in to albums and so on. The server links to geo-tagging as well, and presents images in different sizes or full size. For some, storing only on a local computer most of the time would be fine. For me, the server is in a data centre not next to me, so, for example, we have a shooting table at work for product shots but no computer is there, we take shots knowing they are on the server and use that later. So that means the EOS remote shooting would not work as you have to select on camera and then on Mac, so need the Mac there next to camera. That seems not to work for me over WiFi, but I know it does work over USB and if the Mac was there I'd use USB instead of WiFi to be honest. The way of working I have may be a minority - it is where I can simply pick up the camera and press the shutter and take a picture, and anywhere within the known WiFi we have in both offices and at my house I can be confident that, within seconds, even fractions of a second, the image is safely stored on the photo server where I can access it (even from my phone). Elsewhere I can connect to a local WiFi or even the hotspot on my phone, and it will transfer. If shooting away from these WiFI, it is a couple of buttons when I return to send all unsent images. This is fast, and easier than taking the card out, as that would mean then doing a file transfer from my Mac to the photo server which is a lot more manual that simply letting the camera do its thing. I am not fussed if not FTP, they have FTPS, and I'd be happy with any standards based file transfer, even just an https post to nominated URL would be great - please do that Canon - you basically do that to a fixed URL for your own Cloud system - just let me put my URL in instead. Canon used to support this way of working - heck they still do as FTP (and FTPS) is still a feature even on the EOS-R, but oddly, unlike other cameras where it was a standard feature even without having to buy the WiFi module, for the EOS-R you have to buy the WiFi module to use it, even though YOU ALREADY HAVE WIFI BUILT IN! It is also a big WiFi module (not like the little WTF-E8).

P.P.S. Wex photographic have been great, as always, and it is a bit of a shame that they had a faulty (bluetooth) unit.