andrewducker: (Default)
2020-12-04 08:20 pm


You can find more info on my userinfo page - but this is just here to say that I'm very happy to be friended by anyone that wants to read me. I rarely post friends-only, and that only tends to be about things that mention work, so if I don't friend you back you're not actually missing much...

If you do friend me, this would be a good place to leave a comment introducing yourself, and letting me know how you found me!

I have lots of awesome friends - if you want to make a few more then take a look at here for Dreamwidth and here for Livejournal, add a few people, and leave comment so people can add you too.

The links posts come from my page at Delicious and are posted to DW and LJ via a web app which I wrote, and you can use yourself here.

A note to Livejournal users:
You can easily leave comments using OpenID - this allows you to "sign in" using your LJ id, and that way I can tell you're you!

A note on correcting people's grammar in the comments.

Official Spoiler Policy.
andrewducker: (Default)
2019-02-18 12:42 pm
andrewducker: (Default)
2019-02-16 01:43 pm
andrewducker: (Default)
2019-02-15 12:01 pm
andrewducker: (Default)
2019-02-14 01:05 pm

Interesting Links for 14-02-2019

andrewducker: (Default)
2019-02-12 12:05 pm
andrewducker: (Default)
2019-02-09 12:55 pm

How my current linkposter is working

Until I get a chance to get automatic posting back up and running I've hacked together a PowerShell script which I run each day around midday.

If you're interested in doing likewise then you can get it from GitHub here.
andrewducker: (Default)
2019-02-08 11:58 am
andrewducker: (Default)
2019-02-04 01:20 pm

For those people who are missing my links...

You can simulate the experience, while I get a replacement up and running, by visiting on a daily basis.

Sadly, you won't get the discussion. But rest assured I am working on that, in my occasional free time...
andrewducker: (Default)
2019-02-03 08:42 pm

Exploring the various Cloud Platforms

This weekend I did some exploration into what technology to use to replace the now-defunct Daily Link Poster.

(Sophia is now happy to spend longer entertaining herself, with the result that Jane even got to play some Sims at the same time, while the tiny beast crawled about the floor, occasionally hauling herself up the side of the sofa to demand a few minutes of attention and bubble blowing.)

Anyway, the thing about the poster is that, unless millions of people decide that it fixes an itch for them, it's going to be a tiny app. Literally all it needs to store for each person is the source of their links (exclusively Pinboard at the moment, as Delicious finally died a few years ago), a destination (LJ,DW, and Wordpress), the date/time of the next posting (so that it knows when the cutoff is for the links), and the formatting to apply (with/without tags, for instance).

That's probably less than 1k per posting, maybe up to 2k if I'm really lax with how I store stuff. And I've never had more than about ten people using it. So my needs are trivial. And, up until now, free. Because Google allows people using their AppEngine tools to have a free amount of some resources before the charges kick in, and I've never come anywhere near hitting it.

So, I went looking at the various large Cloud Computing suppliers, to see what their current offerings were, and what would make most sense. I fancied trying out the current Serverless technologies, to see what they're like to work with.

(Serverless doesn't mean "Has no server", it means "You don't need to think about the server they're on". You write code, and the platform makes sure that code runs in the situations you define. It might be on a Raspberry Pi under someone's desk, it might be on a mainframe, it might be on a cluster on unix machines - it's none of your business, or problem.)

Anyway, I quickly got a simple bit of "Hello World" code running on Microsoft's "Azure Functions" platform, went to go and see what I'd need to do to store some data, and discovered that there was absolutely nothing I could do without $5/month for a database. Which I was going to be using about a thousandth of the minimum resources they were willing to sell me.

This feels self-defeating to me. I know that Microsoft is firmly aiming at the corporate market, but one of the ways you get market share is by letting them build toy projects, getting used to the code, and then telling their boss "Yeah, I can do this really easily, using this technology I'm now used to." But clearly that's not a direction Microsoft are wanting to take Azure in.

So, to make sure I wasn't missing anything, I did a quick survey of the data storage capabilities of the big three - Microsoft, Google, and Amazon. And I'm sharing it with you in case anyone can point out something I've missed, or finds it useful themselves.

All three of them have two basic kinds of data storage:
1) Your very own MySQL (or other traditional database) server, charged for by the hour that it's active. And, for a website, it needs to be up 24/7, so I looked at the costs of that.
2) Their own database, which you can just fire requests at and it stores them in their own backends, and you don't have to worry about configuring a server, or anything like that. These tend to be a lot more scaleable, and also you get charged by usage rather than "just having a server up". Except, actually, some of them you get charged for that too.

Microsoft Azure
Basic MySQL database, $5/month. This gives me a 2GB MySQL database constantly up and ready to be used. It's massive overkill.
Cosmos. This isn't a database all of my own, it's basically access to store data in their general database. 1GB of storage is $0.25/month. And then I have to sign up for 4 "Response Units". Which basically means 400 calls per second. Or about 395 more than I'll need at peak times. And 400 more than I'll need 99% of the time. For $24/month. Again, massive overkill.

Azure summary: Not aimed at hobbyists who want to run something small and get experience of how their systems work. Which is a shame, because I set up a Serverless Function in 10 minutes, and had great fun playing with it.

Google Cloud
Micro MySQL database. $7.67/month for 3GB MySQL database. Again with the overkill.
BigTable. Charges per node. Minimum of 3. About $2/hour for that. Ahahahaha.
Spanner. Charges per node. About $1/hour. Also ahahahahaha.
FireStore. Charges per read/write/delete, and for storage. Looks like I'd easily fit inside the free limits, and if not, the costs are really cheap. Basically, what I was already doing (but upgraded - I'm using DataStore, and it's being upgraded to FireStore).

Google Cloud summary: Tons of options, one of which will work for me.

Micro MySQL database. $8/month for the server, plus $0.11 per month for the storage.
DynamoDB. First 25GB is free. $1.50/month for a million reads and a million writes. So not quite as cheap as Google's FireStore, but not bad.

Amazon summary: Multiple options, and DynamoDB looks workable.

Next up, looking at different languages which they both support. Because I've just spotted that for Google Cloud Functions I'd be doing the backend in Javascript, and...I really don't fancy that. Although a second look shows that you can do them with Typescript, which I've fancied playing with for some time. More thinking required!
andrewducker: (Default)
2019-01-26 03:55 pm

Technical Issue Upon Technical Issue

My Daily Link Poster has gone from "Will generate posts, but can't reach Dreamwidth to post them, so I have to manually copy/paste them into the DW Update page" to "Will not generate posts at all". Which looks to be because Google App Engine has upgraded to Java 8, and Velocity (the formatter which converts my posts from a bunch of link objects into HTML) is incompatible.

So I'd need to get it working again, and update that. And possibly also update Objectify, the database access layer I'm using. Which might mean an upgrade on the data format. And, also, the UI is written in Angular v1, which has been obsolete since 2016, and probably has all sorts of holes in it.

Oh, and the HTML build process was built around Gulp/npm, which has _also_ had incompatible upgrades since I last touched any of the code.

So the question is, do I put a lot of effort into upgrading all of that? Or do I write something from scratch again, which would probably be a not dissimilar amount of work, and a lot cleaner to work with? By the time I'm upgrading the back end tooling, the UI libraries, and the build process, there really isn't a lot of the original system left.

And, of course, no matter what I do, in another couple of years whatever technology I build it on will probably be obsolete _again_. *sigh*

The moral of the story is, of course, that nobody hates computers as much as people who work with them.