2026-05-18

CE

CE marking is important for ensuring consumers are buying things that are safe and meet their expectations.

However, CE marking has a lot of implications, in terms of costs and tests, and so on. It basically outlaws your average "cottage industry" type set up.

With modern tech, that "cottage industry" can be technological.

But what if it is not "safe". And this is a very good point.

So there are sites like Tindie, and Lectronz, that act as a platform / marketplace to sell loads of tech that is "home grown" and "cottage industry", with a lot of caveats on T&Cs.

My personal view is ...

  • Most consumers need robust consumer protection law
  • Buying something should, by default, be 100% safe
  • If, and only if, the seller is super amazingly clear on what they sell should there be exceptions.

Oddly this ties in to the utter stupidity that is the fact England and Wales allow selling "raw milk". It is crazy, but the laws require (a) higher hygiene standards, and importantly (b) VERY CLEAR warnings that what you are buying is not safe to drink!

So are PCBs the same?

I make a load of PCBs, and sell a load. As it happens, as a company, we also make some serious routers. For those there is a SHIT LOAD of stuff we do to make totally sure it meets all the requirements. I mean, heck, this is stuff using mains voltage inputs, so it matters. And it costs a lot.

But we also make small PCBs, hobbyist stuff, prototype boards. And the cost of CE marking would be mental. Make 10 PCBs and pay £10,000 for testing and certification. No. That does not work, does it?

So can we sell them without a CE?

This gets in to a grey area, as CE mark is needed for most things but not, for example, prototypes. Indeed, you can order a PCB from China for your own use, and no way they CE mark / certify it for you.

Interestingly, one of the key aspects of CE for many of my boards is RF compatibility, and for that the ESP32 module I use is CE marked and certified.

But we want to be 100% clear to customers that these board are not certificated or tested beyond that. They are prototype/dev boards, for specialist/hobbyist use only.

So we came up with a new mark... NONCE (Thanks Alex for help making that). Maybe we should trademark that, LOL.

And to be clear, what we sell is generally PCBs, in a panel, break off excess parts, and so on. And even if we sell a case it is a two part resin 3D print you use to contain the snapped out PCB. The end user does the "final assembly", it is a "kit".

At the end of the day we would not want to, in any way whatsoever, mislead a customer as to what they are buying, ever.

2026-05-17

Customising PCBs

It is pretty impressive what you can do with "silk screen" printing on PCBs these days. I think JLC even offer full colour now (not tried it). I imagine they have a UV printer.

But for some of my smaller run boards, doing an over print of the assembled PCB could be very useful.

I already have code to make 3D cases from PCB files - I can see me automating making an SVG overprint from the files.

2026-05-16

Cheeky domains

I have a "shop" on Tindie (albeit currently all zero stock until they get working again, if ever) and now one on "Lectronz".

Ages ago I made tindie.uk domain, it web redirects to the shop on Tindie. Was a bit of fun. And a shortcut for me.

Now I have a Lectronz shop, so I made lectronz.uk in a similar way.

But this is a tad naughty maybe. Well maybe.

  • As far as I know neither have a UK trademark so I could even make a legitimate business matching theirs, and even register a UK trademark, if I wanted, using their name.
  • They could dispute with Nominet, but if I then did a UK trademark, I may manage to keep it.
  • The URLs do actually go to their web sites (albeit my "shop" on their web site) so is not, in that respect, a breach of trademark - it references *them* - so just like someone selling Nike shoes can use the word Nike to do so, in an advert for their "shop". I'm selling/referencing their platform.

But yes, it is cheeky, shall we say. And in hindsight maybe a tad childish and not like me...

So now, given that Tindie is a waste of space compared to Lectronz, even when Tindie is working (which they have not been for a month), I now have a much simpler URL:

https://shop.revk.uk/

It goes to Lectronz.

FYI, if Tindie do come back I may list Faikout only, like we do on Amazon. Lectronz is likely to be the main place for any of the other circuit boards (and Faikout). Amazon only continue because they are one of the first places people go, still, so sensible to be on there, and they handle EU VAT, and shipping - but Lectronz do the EU VAT and US tariffs, so Amazon are only there to mop up on their reputation, as it is.

What is funny about Tindie is being off for a month is that someone has made a "new Tindie" from scratch and got on line and working during that month - https://smallrun.net/. To be fair, if I put my mind to it, I am sure I could. They even have tariffs and EU IOSS all sorted (which Tindie do not, still). How Tindie are so slow and so bad at communicating is really quite amazing.

2026-05-05

&

The ampersand used to be consider the 27th letter of the latin alphabet...

i.e. ex, why, zed, "and - per say - and"... I.e. "and" was a letter after zed (Z).

Then came XML and HTML.

As a company with and ampersand in the official actual company name this has been, shall we say, challenging.

We had serious issues with BT XML order integration for some time.

But more lately.

Nominet say things like this...


    Registrar:

        Andrews & Arnold Limited [Tag = AAISP]

        URL: https://aa.net.uk

Yeah, that is NOT our company name.

Other examples, in that past, with bank payee verification showing ANDREWS ARNOLD LIMITED, so I created ANDREWS ARNOLD LIMITED registered (company 12972728) to complain that a different company was being shown than  us.

Now, for Nominet, I decided why not register ANDREWS & ARNOLD LIMITED. Then complain they are using a different company in whois...

To be honest I should have just renamed 12972728, but have done it now as separate company.

Firstly Companies House did not consider an 05555 phone number valid. Hmmm. But I did a different number, and applied for the company.

Now I get an email. An email to my x@x.xx format email address to tell me that my email address is invalid...

Yes, read that again. It is a kind of SPECIAL!

I called them, and well, the person I spoke to kind of appreciated the irony here. Emailing me to tell me my email is invalid, is, well, special.

She said the system was fine but a person, an examiner, rejected based on the email address. She has sent a memo to not reject that email. We'll see.

Why can people not simple follow standards, for email addresses, for phone numbers, for everything.

I have applied again. Once I have new company I can then complain to Nominet over whois.

And again rejected. Another weird one is when logging in to gov gateway using x@x.xx format address they say they are emailed a code to xx@x.xx !!! They actually email x@x.xx address, but why double the first letter when shown on screen... Hang on, I get the show first...last letter and a one letter address confuses the hell out of that. That makes more sense, but is still stupid.

Oh, there is more! The email from Companies house was wrong. It stripped & to &. Wow. How is this hard in this day and age?!

2026-05-03

Lectronz and IOSS

We sell lots in the UK (services and goods), and handle UK VAT, obviously.

Some of you may be surprised that A&A sell all over the world as well - development circuit boards. I have mentioned it, I am sure.

For now, we have used Amazon and Tindie.

Both are a problem...

Amazon

Two good aspects of Amazon, one is they will do fulfilment, so we send stock and they ship to customers. and secondly they handle selling to EU, etc, and the VAT and so on. We do not have to worry about it, and for these exports we are paid the VAT exclusive price.

Amazon have been arseholes, they unlisted the most popular product on a mere accusation, took months to sort with frozen stock, and finally returned after I threatened to sue. We lost all the reputation and reviews, and new listing of same item is selling 20% of the rate.

We now only list this one popular(ish) product on Amazon, as they do sell some, and sell to EU easily. But they did screw us over for no reason.

Tindie

Tindie are useless at tax and VAT. We have to do the shipping. However, we have integrated their API such that staff can see a list of orders, click and get postage via Royal Mail (with all the customs declaration stuff). They put in a jiffy bag, stick on label, and postman collects with the rest of the days postage.

Tindie were selling pretty well, close to Amazon rates, and sometimes more. But we had to ship. The much more slick postage integration I recently did makes it a lot easier and my staff can take over many of the products we sell without any hassle.

Tindie then shut down with no warning for maintenance, lied about it for two weeks, finally said new owners, made site live but with the one important feature of "paying us" (or anyone else) missing. We shipped some more orders, but have now zeroed all stock until sorted. They claim to have sent balance, but we will not know for sure for a day or two.

Lectronz

So we have signed up with Lectronz. They are tiny compared to Tindie, but that seems to be changing (I wonder why!).

They work the same as Tindie, free to list, charge a fee for sales, and card processing charges too (stripe). They even have Tindie API integration to import products (they then need a little work, and Tindie may be blocking some of it).

But they have a lot of extra bits...

Better shipping rates

The shipping is saner, it is all linked to sets of countries, but is all weight based. You set the shipping for a weight range, and you can also set a tariff rate for US as a percentage! This is lacking in Tindie.

They don't have a shipping rate that is price + price per kg (I have asked) as that would be even better as that is how we pay Royal Mail for international shipping.

Tariffs for US

But this means sales to US show (and charge) a specific tariff fee - very clear, and we link in to doing PDDP shipping with Royal Mail.

VAT for UK

We can, and have, told them we are VAT registered and selling to UK has 20% VAT. They shows this and add it at point of sale. Simple.

VAT for EU

This is where it gets fun. For orders shipped to EU, under (I think) €150, they will automatically work out the EU VAT based on target country, and add to the price.

They deduct this from what they pay us, and settle with EU VAT authorities for us.

They then tell us an IOSS code to use with Royal Mail to record as a pre-paid VAT. The customer then has no hassle with paying VAT on import.

This is really hassle free for us and the customer.

Other countries still have VAT on import and so is any order to EU over €150, but they managed to make that all very clear on the checkout page.

Do buy some stuff, here. I will be adding more and more soon.

2026-04-28

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 mean, how do we not know all the shapes already? Also, to be fair, it is a reasonable bet that the ancient Greek's knew of this and forgot to write anything down. But certainly in my life time - this is indeed a new shape. Discovered in 2023!

So what makes it special? There is, of course, a whole wikipedia article on what is called The Einstein Problem, but I'll try and explain it simply.

This shape tessellates. Basically that means you can tile your bathroom wall with it - the shape fits together with itself to cover a surface with no gaps. Lots of shapes do this, squares, triangles, hexagons, and so on. You can rotate the tiles if needed (e.g. for triangle you have to). There are many that do not, such as pentagons, and circles, etc. You cannot tile a wall with circles without leaving gaps.

So what? Well, most tessellating shapes create a repeating pattern. Hexagons make a familiar honeycomb pattern for example. But with the Spectre you can make a pattern that does not repeat. In fact, you cannot make a repeating pattern with it at all, no matter how hard you try. Yes, some groups of tiles may appear the same in other places but even then these do not form a regular pattern, at any level.

There is some debate over the rules - this was, it seems, a competition. The rules allowed you to turn a tile over. The researchers created a shape called the "Hat" which worked but some of the tiles had to be turned over. People, quite reasonably, said "If I want to tile my bathroom wall I have to buy two sets of tiles". So the researchers came out with the "Spectre" a year later, and that works without turning over tiles. In fact if you can turn over titles, you can make a repeating pattern with it.

But basically, until this was discovered, nobody even knew if a forced aperiodic tessellating monotile shape even existed. That is what makes it a new shape.

You can now tile your bathroom wall with one type of tile and it is a non repeating pattern.

But how?

Well, you could just try placing randomly where they fit, but you quickly end up with gaps that are not Spectre shaped, and have to back track and try again.

However, there is an agorithm, published by Simon Tatham, here. I'd like to thank him for his work, but I have a word of caution if you want to use his paper. I also appreciate, as a coder, the counting from 0 all the way through.

It just so happens I had an idea how to use this shape, for reasons which will become apparent later this year I hope. So I wanted to code generating a surface covered with these tiles. Long story short - here it is, open source on Codeberg.

But this took me a couple of days, which is a long time for me, so let me explain the issues.

The principle is simple, a recursive set of meta tiles are groups of tiles in a pattern (represented has hexagons in the paper).

You can start at the top, pick a meta tile from a set of 9 different types, and that tells you how to place 7 or 8 subtitles in a honeycomb pattern, and their types (from the set of 9) and orientation. You repeat as far as you want and the last level you actually have Spectre tiles not hexagons.

You can also start at the bottom with a Spectre, and decide which of the meta tile types it shall be at random. You can then find a meta tile which includes that type, and it tells you the neighbouring Spectre tiles to place. This is then a meta tile which you can again decide is part of a higher level meta tile randomly, and that tells you what meta tiles to place for its neighbours and work down to Spectre tiles below. So you have one upward process in a loop, and at each point have a recursive downward process placing 6 or 7 neighbours at each level down. This is the approach I took.

If I started at the top I would pick one of 9 meta tiles, and maybe one of 12 orientations, and that would be it, the Spectres under that are determined by the algorithm and not any more random. By starting at the bottom, I pick one of 12 orientations and place the first tile, and pick one of 9 meta tiles, but at each level as I go up I get to pick which higher meta tile it is in, and in some cases which of two sub tiles it is. This is random at each level and makes for a much more randomised final output.

So what was confusing me?

The distraction that took me most of the time trying to get this working is the rather excellent graphic representations in Simon's paper. They show a hexagon meta tile substituted with 7 or 8 joined hexagon meta tiles, and shows a hexagon meta tile substituted with a Spectre tile. These diagrams have specific orientation, and rotation, so one is lulled in to a sense of simplicity that you are literally replacing one hexagon with a set of them, each with specific orientation.

Looks pretty, and simple, but this is NOT the case!

The diagrams are actually simply a mapping, a look up table for what gets joined to what and what side. The hexagon has 6 sides, basically at the lowest level each Spectre is joined to exactly 6 other Spectre tiles (there is a special case for that G meta tile where it is two Spectre tiles, the others are all one, just to add to the fun). So you have each Spectre tiles as having 6 connection sets of edges - but these are not simple, as each of the 9 types of meta tile is a Spectre with a specific set of edges for each of the 6 sides.

The numbering is the key - on the yellow tile there is a side 0, which is actually the three edges 8, 7, and 6 (marked 0.0, 1.0, and 2.0). On the purple, there is a side 4, which is edges 13, 12, and 11 (marked 0.4, 1.4, and 2.4). But side 4 on the yellow tile is only sides 12 and 11 (marked 0.4 and 1.4). But you a see yellow side 0 and purple side 4 would fit together. Some of these 6 sides are one edge (see purple side 3), but can be as many as 6 edges in some cases. Each of the 9 meta tiles has a specific set of edges making up the 6 joint points to other tiles. Each similarly has a set of edges on the hexagon pattern, which is different for each type.

So in practice you connect the defined edges, and they end up nothing like hexagonal tiles. In fact they twist and distort all over the place. The graphical representations are really not helpful in my view, sorry. Also, I would have numbered side.subedge so 1.0, 1.1, 1.2, not 0.1, 1.1, 2.1, personally.

Once I grasped that logic, the code became simple. As I say, you start with one Spectre, and connect neighbours. You only need to know the specific 6 sets of edges for that tile. Then when you use the meta tile rules you know which set of edges that connects to on the neighbouring Spectre. It is pretty simple to then align the new Spectre connected on that edge. Having placed the 7 or 8 Spectres to make a meta tile, you then just need to know the 6 joining points on that meta tile, which are themselves 6 sets of specific Spectre tile edges within the meta tile.

One issues is these connecting sides are several edges, so I actually picked one end, e.g. for yellow it would be 8, 5, 2, 0, 13, 12, 10, and for purple it would be 8, 5, 3, 0, 13, 10 as the 6 outgoing edges. These are the first edge of each side (numbered 0.x). When placing a Spectre next to one of these, you pick the other ends, so 6, 3, 1, 13, 11, 9 for yellow and 6, 4, 1, 0, 11, 9 for purple, the last edge for each side.

So connecting yellow side 0 to purple side 4 you connect yellow edge 8 to purple edge 11. The 11 being the incoming edge. This means you don't have to think of the sets of edges, just one edge on one Spectre tile for each of the 6 outgoings sides of your meta tile, at any level. This is quite a small amount of data to hold in a simple recursive algorithm

Another thing I got wrong is I stored a list of tiles, and referenced them as the 6 sides. Each tile with a starting point and rotation so I could plot it, and align new attached tiles. But this really is not necessary, and ends up using memory. I can plot the tiles (output a path to SVG) as I go, and I just need the 6 sides of a meta tile to be the 6 sets of position, rotation, and outgoing edge number. The only memory usage is a small set of data for the level of recursion. You quickly cover a very large number of tiles in each level (multiple by 8 or 9 each time), so need very few levels of recursion.

Co-ordinates

One issue is coordinates. Ultimately the output uses pixels or millimetres to several decimal places, and indeed I allow a final output rotation. But internally all lines on the Sprectre tiles are at multiples of 30 degrees. Even so you do not want to use floating point - rounding errors will accumulate as you recurse and lead to tiles not quite aligning, and also it is not possible to test two points are the same (why you need this is explained below). So the solution is to use coordinates that are integers! How do you do that with 30 degree angles, well simple - each distances is an integer multiple of sin60 plus an integer multiple of cos60 - at the final stage you multiple out and add these. You can also make a simple table of one unit distance integers for each 30 degree angle. And a table of the relative integer offsets for each point on a Spectre at each angle. This means no floating point maths, nor sin/cos, until you actually output to SVG.

Finishing

One problem which I don't think Simon's paper covers, and was unexpected, is knowing when to stop! I am trying to cover a rectangular area. How do I know I have got there?! I could just set a maximum level, but using random choices for meta tiles at each level one can find the whole things quickly gets to way bigger than the area but ends up one sided leaving gaps in your rectangle. If I had gone top down, or always picked the current tile being in the middle of the meta tile, I could maybe work out a max level, but that is not what I am doing.

After a bit of head scratching I finally worked out a way. I wanted to make a grout line on top of the final tile output so I decided to keep track of all the edges I placed. A simple start/end for each unit length edge in a list. This can be made as I go along, and the integers mean I can always match to an existing edge to plot the grout efficiently as a series of lines.

This also meant I could actually keep two lists - one a list of first use of an edge, and then moving over to another list of second use of an edge, when a tile is attached the other side.

I could also check each edge I added to a list to see if it falls (even one end) within my target rectangle, and so only keep edges I need.

But this has the side effect that as soon as my list of single used edges, within rectangle, is empty, I must have 100% covered the rectangle, as no edges that don't have a tile on one side are in the target area. I can then immediately abort the whole placement process at every level just by checking the list of single use edges is now empty.

Cropping

The final challenge was the edge of rectangle. Firstly the SVG has a viewBox, and so I can simply plot tiles that fall even slightly within the rectangle, and the same for grout lines. These go off the edge, but you cannot see when looking at the final SVG.

This has a problem, if you want to use the SVG in another design, as I did, the embedding does not inherently crop the edges. But SVG has an answer for this, clipPath. It allows me to clip an object to a path, a rectangle in this case. Perfect.

The snag is support of clipPath is not that good. I don't know why, but lots of things mess up, ignoring it, or barfing in some other way. One was my resin printer, which simply ignored the whole block of tiles if it has a clipPath.

So I ended up making a whole path generation set of functions which understood cropping the path to the edge of the rectangle. I could not sleep, and ended up coding this at 2am.

The final result is I can now make an SVG of a randomised set of tessellating aperiodic Spectre monotiles, with loads of options. I even added a sort of bevel edge to the tiles with a lighting based shade.

This is shaded per level, showing how the tiles actually join up at a meta level.

2026-04-20

eufyMake UV Printer E1 more experience

I am very much getting the hang of it now.

Crystal glass is an issue, and still one option still to try involves a primer, which is on its way.

But some success stories are worth while.

For a start, printing on the resin printed 3D stuff works really well. This stargate for example. Looks very nice. This helps enhance some of the products we sell now, and having put on social media I promptly got an order where as previously they had not been selling at all. Once Tindie is back on-line I'll offer a choice of stargates.

Printing on various objects works well. The max height of 60mm when using the camera (due to focal length), or 100mm when not (needs measuring to position accurately).

Way better than using the label printer on tools :-)

I have got the large bed set up now, 420mm x 330mm (larger than A3), and that works well.

I also found some tumblers on Amazon. This was a little bit of an experiment as they are designed for dye sublimation printing not UV. I printed some text and put through the dishwasher (yes, they say hand wash only, but wanted to test). No problem at all, even without a gloss overcoat.

This bodes well as there are lots of dye sublimation blanks for printing available.

That tumbler is quite big, and can take an hour to print, but the end result is awesome, and so I have several grandchildren with them already.

But obviously one of the jobs I am working on now is testing designs to print on the new FireBrick front panels. That is next I expect.

eufyMake support have been generally helpful - I have found a couple of bugs, and made suggestions. It looks a lot like they use AI to reply, but I said not to, and got what felt like a real reply to my latest ticket, which is good.

So yes, impressed overall.

CE

CE marking is important for ensuring consumers are buying things that are safe and meet their expectations. However, CE marking has a lot of...