Charging an EV for free - part 2
Charging an EV for free - part 2 In part 1 I described the fundamental principle of the system – the inputs and outputs to the system and the concept of having a control loop to maximise the charging power without exceeding the amount of excess energy available.
I’ll let you in on a little secret – at that point I didn’t even have an EV yet. I was still waiting on delivery.
read more
Charging an EV for free - part 1
Charging an EV for free - part 1 The solar landscape has changed in Australia.
In the boom days of solar, there were extensive and lucrative reasons to invest in solar power for the home. The FIT (Feed In Tarrifs) were so high (ludicrously so, really) with enormously long tenures, that getting solar was a no-brainer.
Not that I’m arguing that that was a bad idea. It has made us a nation …
read more
So you know X and you want to learn Go?
Inspired by a recent conversation about an ex-colleague wanting to learn go, I cast my mind back to the traps and pitfalls that I experienced when I was first picking it up. My background was mostly in dynamic languages (perl, php, python).
I’m assuming you have some existing development knowledge here.
Don’t worry too much about packages and code structure It’ll probably go …
read more
Embedded SQL migrations with jackc/tern
tern is a powerful standalone SQL migration
tool, which I’ve used quite a bit in the past.
I’ve always treated the migration as a separate step - deploy the application
and then perform the migration. This requires me to potentially move the
schema migrations files around, or run the migration via an ssh tunnel or
similar.
One of the advantages of golang is being able to ship a single …
read more
For loops with consistent timing
“Do a thing, sleep a while, repeat” is an extremely common paradigm. Here is how
that concept is typically expressed:
read more
htmx, embedded assets and html/template
htmx is a new javascript framework that tips the typical front-end development paradigm on its head. A typical webapp these days looks like:
backend, implementing business logic a transport layer (REST endpoints, serving JSON) a front-end in javascript While this has become the defacto model for front-end development in 2022, there are some problems with this approach:
You need two different …
read more
SSO for your homelab
At one point all of us homelabbers (remember when there wasn’t a dedicated name for people like you and me who just wanted to run cool things at home?) want access to their web application resources from the outside world.
This is easy enough, of course. Port forward, you’re done. However these simple solutions can be pretty clunky for a variety of reasons:
bad URL’s like …
read more
encoding/gob with wire encryption
The various io.* interfaces (such as io.Reader and io.Writer) are often touted as a golang “killer feature”, though once you are familiar with interfaces you realise there is not much to them. The beauty is in the simplicity.
When I first looked at the encoding/gob I was slightly peturbed by the requirement to provide a io.Reader (to the Decoder) and an io.Writer (to the Encoder). It …
read more
The dawning of a new age
What a pretentious title.
In my many years on the internet I’ve had a variety of personal home pages along the way.
As usual for the tech-nerd, they are often an excuse to rewrite the blogging wheel, or as a showcase to showoff various creations.
Looking backwards on archive.org is a cringeworthy experience. And I have vague recollections of my even earlier efforts, hosted under the …
read more
nginx unit + SSL certificates + Alpine Linux == Value doesn't exist
Are you getting nothing but this:?
{ "error": "Value doesn't exist." } when trying to upload a certificate?
The problem is that your nginx unit was not compiled with SSL support. The error message and logs are singularly un-useful in this respect.
If you install unit-1.21.0-r1 (edge) instead of the default unit-1.17, SSL support is compiled in and you will have a better time. …
read more