whoa, it’s lemoncurry 1.9! yep!

i bumped the minor version instead of the patch version, ‘cause lots of stuff happened!

  • i added rudimentary support for producing accelerated mobile pages versions of each entry!
    • it doesn’t always produce valid amp html, because i haven’t figured out how to convert the html i get out of my markdown parser into amp html?
    • but for simple entries, mostly entries that don’t have images in them, it works perfectly c:
  • lots of performance improvements
    • i cut down on the number of sql queries that lemoncurry needs to make to achieve various things?
    • most importantly, rendering an entry requires access to its author, its cats, its syndications, and so on. fetching all this took a lot of queries, but it turns out it could just make a few simpler queries up-front instead!
  • i bumped font awesome again!
    • it’s 5.0.6 now: i skipped 5.0.5 because 5.0.6 was actually released on the very same day?
    • i guess they made a mistake in 5.0.5 that needed urgent fixing or something like that :o
  • micropub is better again! specifically, i added support for GET /micropub, which lets micropub clients ask the server for information
    • there’s q=syndicate-to, which tells the client what syndication targets the server supports (currently none)
    • and q=config, which tells the client where the micropub media endpoint is (currently nowhere) and what the syndication targets are (still none)
    • and q=source, which tells the client the normalised microformats2 json for a particular entry! clients use this to retrieve entries in an editable format, as part of updating an existing entry. this part works perfectly so far, but because updating isn’t implemented it’s not too useful yet πŸ˜‰
  • additionally, micropub
    • does scope checking now! your token must contain the ‘create’ scope if you want to create a new entry! there aren’t any other operations you can perform yet that require a scope, but you’ll need the ‘update’ scope when i implement updating existing entries
    • returns better error responses, when you do things like pass a token that’s missing the scope you need? it turns out the micropub spec actually describes the format the errors should be in, which i wasn’t following, oops :3 now i am!
  • i turned off google analytics!
    • i don’t care about getting that kind of information
    • i didn’t like subjecting visitors to google’s tracking
  • this isn’t actually part of the app itself, just the way i’ve set up my deployment, but: i realised i had gunicorn running just one lemoncurry worker, which meant i could only handle exactly one request at a time??
    • this causes problems if for example your micropub source query works simply by directly requesting the page you asked for, and then parsing it with mf2py! (yes, that’s what lemoncurry’s implementation does πŸ˜‰ )
    • it also causes problems if you expect any decent amount of traffic to your site, since you can only handle one http request from anyone at a time?
    • so i fixed that, gunicorn has a couple of workers now c:

you may be wondering why the version is already 1.9.1? the reason is that 1.9.0, while containing all of the above exciting features, was unfortunately broken! while optimising the system’s performance, i accidentally broke the django authentication :o i didn’t notice because i was focused on micropub, which always uses its own tokens rather than the usual session-based authentication? anyway 1.9.1 fixed that

oh, by the way, it won’t roll over to 2.0 with the next minor release? unless i do something massive next, you can expect 1.10 to be the next minor version!

lemoncurry micropub to quote william shakespeare: words words words facebook.com octodon.social twitter.com