yo i just signed into lemoncurry on my phone!! hopefully this will reduce posting friction and get me actually using my own site for stuff lmao
also it’s been updated a lot since i last posted? lots of general polish, performance tweaks, type checking and such. delicious
not really many new features honestly, just a lot of cleanup and paying off technical debt
anyway yeah i’m feeling pretty good about it! yay 💖
yo i just published lemoncurry 1.9.2! there’s nothing new that you can actually see lol
there are two new things behind the scenes though??
i started writing automated tests?? i’m generally pretty bad at writing tests for my projects so this is kinda notable, i think?? currently the only things covered by my tests are a few utility functions and a couple of the
/.well-knownviews, but it’s a good start and i’m proud ✨
i’m using the lovely pytest?? the main reason i chose it is that it’s got super-smart assertion introspection: if you write tests using the standard python
unittestmodule, then you have to write ugly things like
self.assertEqual(result, 5)into your tests, whereas if you’re using pytest all you need to write is
assert result == 5and you still get the same information when the assertion fails! yay! 🐱
i was hashing passwords with django’s default algorithm, pdkbf2, which is quite good! but it’s not the best password hasher out there, so i’ve now switched to the newer and stronger algorithm argon2 instead! 💖
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
q=syndicate-to, which tells the client what syndication targets the server supports (currently none)
q=config, which tells the client where the micropub media endpoint is (currently nowhere) and what the syndication targets are (still none)
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!
- i added rudimentary support for producing accelerated mobile pages versions of each entry!
yoooo i forgot to work on lemoncurry! again! oops?? here’s 1.8.4
the reason i forgot to work on the site this time is that i bought a new 3ds xl, which arrived the day after i last updated lemoncurry 😳 the last nintendo handheld i bought was a ds lite, so i’ve missed a lot of gaming in the meantime and i have a lot to catch up on :o
i got a special samus edition 3ds, which i guess was released to commemorate the new metroid game released for the platform? it’s really cool, here’s what it looks like
the best part is that it came with a download code for the aforementioned new metroid game, samus returns, which is fantastic???
- it’s a remake of metroid ii: return of samus for the game boy, which apparently was poorly received since it was a lot more linear than the first metroid??
- samus returns, however, is quite possibly the best side-scrolling metroid game. yes, it’s that good
- to progress through the game’s areas you have to find and slay a certain number of metroids in each, thereby unlocking the path to the next area, which is what made metroid ii so linear
- that hasn’t changed, but now each area is absolutely colossal and takes literal hours to explore? you head off down a side path thinking “i’ll just check here quickly before going back to the main path”, and then, you don’t return to that spot for like an hour?? so it’s like you’re playing eight non-linear exploration-focused metroid games in a row??? i love it 💖
- it’s also using utterly gorgeous 3d graphics, despite being a sidescroller, since the 3ds is so very good at 3d graphics. the environments look amazing, samus looks really really cool especially after finding the suit upgrades, everything looks super great.
- this is the first side-scrolling metroid for a dual-screen console, which means it can finally use those two screens in the best possible way: the map - not a minimap, a full-size map - is constantly visible on the touch screen, which makes exploring a delightful breeze. it’s the perfect arrangement for classic metroid gameplay, and it makes me wonder why the ds never got a classic metroid?? silly nintendo
- samus can aim and fire in any direction with the circle pad, rather than only eight directions like every previous side-scrolling metroid - this makes for some really engaging combat, especially while fighting the metroids (which are like, minibosses, i guess?) since they’re flying all over the place and you gotta hit their weak point for massive damage
- she’s also got a new attack, called the “melee counter” - when an enemy charges at her, tapping the x button with good timing will stun the enemy, dramatically weaken them, and automatically aim her gun at them. it doesn’t do a lot of damage, but it means you can wipe out enemies with just a few blasts once they’re stunned! many, many enemies charge at you, including the metroids, so you get to use the melee counter a lot. it makes combat faster and way more interesting than in previous metroids, it’s brilliant 💕
- i love this game please play it ✨
oh yeah, the lemoncurry update!! like last time, i made two little changes
- font awesome 5.0.4 was out, so i bumped my version again! yay! i also found a changelog, which i can’t link since it’s inside the private fa pro repository :o it looks like they fixed a lot of spacing issues with the previous versions? neato burrito 🌯
two little upgrades in 1.8.2!
- i put the
aria-hidden="true"attribute on any icon elements that aren’t necessarily font awesome - fa automatically inserts that attribute for you, but only for its own icons? what it’s for is accessibility:
aria-hiddenindicates that an element is just for presentation and can safely be ignored by screen readers c:
- font awesome 5.0.2 is out so i upgraded again! there are no changelogs for fa 5.x yet so idk what the differences are but yeah
- i put the
also websub now works properly! i bumped the version to 1.8.1
the problem was that superfeedr, despite claiming to support the field name
hub.urlfor passing multiple urls in one ping? doesn’t actually do that? so now i’m just using
hub.urland making several requests to it at once
needing multiple requests isn’t a big deal, since websub pings are handled by the job queue 🐱
1.7.3 makes a teeeeeeeny change, but a very important one: my little profile links at the bottom of my h-card are now fully accessible for screen readers!
previously a screen reader could see my username, but it couldn’t tell what site the username was for. now the entire
username@domainaccount specifier will be available to screen readers, as well as sighted users by hovering over the link. technically a smart screen reader could parse the actual h-card markup and find out the urls that way? but that’s not very user-friendly and this is much nicer c:
i also stopped displaying the username for sighted users, since it was getting super cluttered and i like hovering (or just clicking on it and going to the profile!) to see that better. plus it’s almost always just a variation on “00dani” so it’s not that important that you see it 😉
oh also font awesome 5.0.1 is out so i bumped the version, that happened too lol
just one teeny-tiny change in lemoncurry 1.7.2!
specifically, i noticed that the free version of font awesome 5 just came out, so i migrated lemoncurry across from fa 4 to fa 5! you’ll notice most of the icons look a little different, and some of the brand icons (like bitbucket!) are way different because the actual brands changed their icons! amazing
i actually have a fa 5 pro license but it’s currently pretty complicated to use fa pro with an open-source project like this one :/ apparently there’s a special pro cdn on the roadmap? so i might switch lemoncurry to that once it’s available. for now the free icons are very nice tho!