Can we discuss this a bit? What is the plan for the discount codes? I think the idea was to have more than one discount code but less than a unique code per buyer.
With one discount code, people can purchase more than they signed up for, which leaves those who don’t order the first day running the risk of getting an “out of stock” message. One code per buyer is a logistical nightmare, one code per light is a data entry nightmare. Now that we are getting close to buy time, having a plan for this is important.
Oh, yeah, I was talking about shell commands, not python functions. “ls | LANG=C sort” versus “ls | LANG=en_US.UTF-8 sort” , which will sort in asciibetical order or language-specific alphabetical order. Asciibetical is dramatically faster, when sorting large amounts of data, and I prefer it in general. So I have LANG=C most of the time except when I specifically want something else.
Not that this has anything to do with flashlights, but still. It weirds me out a little when upper and lower case get mixed together while sorting.
Swapping places of a pair of cells in 2S1P configuration? Please be advised that this will make absolutely no difference at all. Both cells in a simple serial bank will at all times draw the same current and discharge the same capacity. If they don’t match, swapping their position will not help at all.
Analyzing and pairing-by-capacity every once in a while IS arguably useful, though.
For a 4S2P battery bank, methodically swapping cells between the two holders might have a theoretical advantage. Monitoring, comparing and logging their final voltage might still give better results. I would mostly ignore that because that sort of light will have a dedicated set of batteries and receive comparatively low hours. Just recharging 4 at a time in, say, Nitecore i4, would betray a failing cell in time.