Liked https://twitter.com/LeanneFischler/status/1243881726318907392
Leanne Fischler on Twitter
Today the ducklings hatched and the announcement came that I will be trained in lambing and beekeeping in case everyone else becomes ill. #IslandLife pic.twitter.com/0RrcZPSEKF
— Leanne Fischler (@LeanneFischler) March 28, 2020
Liked https://matthiasott.com/notes/visual-studio-code-setup
My Visual Studio Code Setup: Extensions and Themes
And then, the display of my MacBook Pro broke. So after five years, it was time to get a new machine, after all. Every time this had happened in the past, I took the opportunity to start from scratch and do a fresh install of all the software I in fact use and need. Consequently, I spent the past couple of days setting up my new Mac. As part of that, I also set up my development environment and my current editor of choice, Visual Studio Code. One of the strengths of VS Code is the ecosystem of extensions that has grown quite substantially and many of the extensions can really take our coding experience one step further. But which are the extensions one should install? I already had tried and installed quite a few extensions before but I also asked on Twitter to get other people’s opinions and maybe learn about a few extensions I hadn’t heard of before. So here’s the list of extensions I ended up installing, in alphabetical order. If you have more to add, feel free to write me a message or email.
Extensions
Auto Close Tag
https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag
This extension automatically adds HTML or XML closing tags so you don’t have to do it manually.
Better Comments
https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments
Better Comments will help you write, well, better comments by highlighting different types of comments, like alerts, questions, or TODOs, in different colors.
Bracket Pair Colorizer 2
https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2
This extension colorizes matching brackets in the same color. So useful once you get used to the many additional colors in your code.
Dash
https://marketplace.visualstudio.com/items?itemName=deerawan.vscode-dash
Dash is an app that lets you read API documentation and code snippets, also offline. This integration for Visual Studio Code is an easy way to access documentation from VS Code.
EditorConfig for VS Code
https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig
Providing an .editorconfig
file has become a standard for many, especially when working together in teams. It allows you to define editor settings for a project so that, for example, a newline is inserted at the end of files automatically or that everyone indents their code with spaces, or tabs, or spaces, or tabs…
ESLint
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
Code linters analyze your code and find problems and errors. This extension integrates the JavaScript linter ESLint into VS Code.
Git History
https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory
If you are using Git for version control, this extension lets you explore the history of your project within VS Code. View and search Git log, view previous versions of a file, or compare branches, commits, and files across commits.
GitLens — Git supercharged
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
The essential extension for Git. You can see when and by whom each line of code was changed – inline in your editor. GitLens also lets you explore the history of your codebase and compare branches, commits, tags, and much more.
Import Cost
https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost
If you are working with JavaScript modules, it happens quickly that you import too much code. Using Webpack, this extension will display the size of the imported package right behind the import statement.
Live Share
https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare
Visual Studio Live Share enables you to collaboratively edit and debug with others in real-time. You can share your current project, and then as needed, share debugging sessions, terminal instances, localhost web apps, voice calls, and more.
npm Intellisense
https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense
npm Intelligente autocompletes npm modules in import statements. As simple as effective.
Path Intellisense
https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense
This extension autocompletes filenames.
Permute Lines
https://marketplace.visualstudio.com/items?itemName=earshinov.permute-lines&ssr=false#review-details
Permute Lines lets you reverse or shuffle lines of code or filter for unique lines.
PHP Intelephense
https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client
Intelephense provides PHP language features like code completion, documentation, formatting, and more.
Prettier - Code formatter
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
Prettier is a code formatter for JavaScript, TypeScript, JSON, CSS, SCSS, HTML, Vue, Markdown, YAML, and many more code styles.
Project Manager
https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager
Project Manager helps you to easily access your projects, no matter where they are located. You can manually add projects or let the extension auto-detect Git, Mercurial or SVN repositories, VSCode folders or any other folder. Thanks to Max Böck for the suggestion!
SVG
https://marketplace.visualstudio.com/items?itemName=jock.svg
SVG adds full SVG language support to VS Code, including auto-complete, a live preview, the MDN reference, and a color picker.
Remote - SSH
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh
The Remote - SSH extension lets you use any remote machine with an SSH server as your development environment. Thanks to Timo Salm for the suggestion!
Task Explorer
https://marketplace.visualstudio.com/items?itemName=spmeesseman.vscode-taskexplorer
Lists all supported tasks (think npm, Gulp, Ruby, etc.) for a project in a tree view. Tasks can be viewed, edited, started, and stopped directly from within VS Code.
Twig Language 2
https://marketplace.visualstudio.com/items?itemName=mblode.twig-language-2
Adds support for the Twig templating language. Useful if you use Craft CMS, for example.
VS DocBlockr
https://marketplace.visualstudio.com/items?itemName=jeremyljackson.vs-docblock
A DocBlock is a special type of comment that includes details about a method or function, like the function parameters or the type of returned data. VS DocBlockr makes writing those comments easy: Pressing enter or tab after /**
will yield a new line and automatically close the comment. This alone makes it much easier to write longer comment blocks. But if the line directly afterward contains a function definition, then the name and parameters of the function are automatically added to the comment, too.
Wrap Console Log Simple
https://marketplace.visualstudio.com/items?itemName=WooodHead.vscode-wrap-console-log-simple
Put your cursor on a word and use a shortcut to create a console.log statement with that exact word.
Themes
So that’s it as far as extensions are concerned. But there is one important topic missing: Themes. The theme substantially influences how comfortable you feel in your code editor. So it is worth mentioning, although, in the end, it is above all a matter of personal preference.
For quite a while, I was using the dark City Lights theme. I like the balanced colors of the theme and that it puts a lot of focus on functions and variable names. It also comes with an icon pack that fits in nicely with the overall look of the theme.
A few days ago, though, I decided to switch to Sarah Drasner’s Night Owl theme. Sarah has done outstanding work in creating a theme that is colorful without being distracting. Night Owl is also accessible to people with colorblindness and in low-light circumstances. I like the background of the editor window to be a tiny bit darker than the default blue of the theme, so I adjusted the color in the preferences. So far, I enjoy the theme a lot.
So that wraps up this post about my current VS Code setup. I hope you found this list helpful and, as mentioned before, if you have anything to add like better or more extensions, I’d love to hear from you.
~
Liked https://twitter.com/momodraws/status/1240426636488650755
Momo on Twitter
Existential crisis
— Momo (@momodraws) March 18, 2020
I’m not a morning person
But also not particularly an afternoon or evening person
Liked https://twitter.com/Melophilus/status/1240558007064412160
Robin on Twitter
So close. I'm ready. pic.twitter.com/Ev0VVuWUKS
— Robin (@Melophilus) March 19, 2020
Liked https://twitter.com/ViewtifulGaz/status/1236981400848515078
=%GOOD VIBES=% GAZ on Twitter
Melty Bird pic.twitter.com/432LELiVYy
— 🔥GOOD VIBES🔥 GAZ (@ViewtifulGaz) March 9, 2020
Liked https://www.smashingmagazine.com/2020/03/setting-height-width-images-important-again/
Setting Height And Width On Images Is Important Again Smashing Magazine
width
and height
attributes on your images to prevent layout shifts and improve the experience of your site visitors.
Web performance advocates have often advised to add dimensions to your images for best performance to allow the page to be laid out with the appropriate space for the image, before the image itself has been downloaded. This avoids a layout shift as the image is downloaded — something Chrome has recently started measuring in the new Cumulative Layout Shift metric.
Well, a dirty, little, secret — not that well-known outside the hard-core web performance advocates — is that, until recently, this actually didnt make a difference in a lot of cases, as well see below. However, adding width
and height
attributes to your <img>
markup have become useful again after some recent changes in the CSS world, and the quick adoption of these changes by the most popular web browsers.
The CSS contain
property gives you a way to explain your layout to the browser, so performance optimizations can be made. However, it does come with some side effects in terms of your layout. Read more →
Why Adding Width And Height Were Good Advice
Take for example this simple page:
<h1>Your title</h1>
<p>Introductory paragraph.</p>
<img src="hero_image.jpg" alt=""
width="400" height="400">
<p>Lorem ipsum dolor sit amet, consectetur&</p>
This might render in two stages, first as the HTML is downloaded, and then second once the image is downloaded. With the above code, this would cause the main content to jump down after the image is downloaded and the space needed to display it can be calculated:
Layout shifts are very disrupting to the user, especially if you have already started reading the article and suddenly you are thrown off by a jolt of movement, and you have to find your place again. This also puts extra work on the browser to recalculate the page layout as each image arrives across the internet. On a complex page with a lot of images this can place a considerable load on the device at a time when its probably got a lot of better things to deal with!
The traditional way to avoid this was to provide width
and height
attributes in the <img>
markup so even when the browser has just the HTML, it is still able to allocate the appropriate amount of space. So, if we change above example to the following:
<h1>Your title</h1>
<p>Introductory paragraph.</p>
<img src="hero_image.jpg" alt=""
width="400" height="400">
<p>Lorem ipsum dolor sit amet, consectetur&</p>
Then the render happens like below, where the appropriate amount of space is set aside for the image when it arrives, and there is no jarring shift of the text as the image is downloaded:
Even ignoring the annoying impact to the user in content jumping around (which you shouldnt!), the impact on the CPU can also be quite substantial. The below screenshot shows the performance calculations performed by Chrome on a site I work on which has a gallery of about 100 images. The left-hand side shows the calculations when width
and height
are provided, and on the right when they are not.
As you can see, the impact is considerable — especially on lower-end devices and slow network speed, where images are coming in separately. This increases load time by a noticeable amount.
How CSS Interacts With Element Widths And Heights
Widths and heights on an image can cause issues when you try to alter them using CSS. For example, if you want to limit your images to a certain width you might use the following CSS:
img {
max-width: 100%;
}
This will override the width
of the image and constrain it when necessary, but if you have explicitly set the height
on the image tag, then we are not overriding that (only the width) and you will end up with a stretched or squashed image, as we have no longer maintained the aspect ratio of the image:
This is actually very easily fixed by adding a height: auto
line to the CSS so the height attribute from the HTML is overridden too:
img {
max-width: 100%;
height: auto;
}
However, I find it still catches people by surprise and sometimes leads to them not specifying image dimensions in the HTML instead. With no image dimensions, you can get away with just specifying max-width: 200px
in the CSS without having to specify height: auto
and the browser will automatically figure out the height itself — once it has the image.
So, once we add the dimensions and that the height: auto
trick, we get the best of both worlds, right? No layout shifts, but also the ability to resize images using CSS? Well until very recently you might have been surprised to find out the answer was in fact: no (I was — hence why I decided to write this article).
For example, take the code below:
<style>
img {
max-width: 100%;
height: auto;
}
</style>
<h1>Your title</h1>
<p>Introductory paragraph.</p>
<img src="hero_image.jpg" alt=""
height="500" width="500">
<p>Lorem ipsum dolor sit amet, consectetur&</p>
This would have resulted in this load:
Wait, whats going on here? Were back to the first problem. I thought I said that by specifying the image dimensions in the HTML you could avoid this layout shift problem? Well, this is where it gets interesting and will lead on to the main point of this article.
The problem is that, unless you were giving explicit width
and height
CSS values to your images — and who wants to limit themselves like that in a responsive world where you want the image to expand or shrink to fill up the available space — then CSS will need the dimensions from the image file itself to figure out the auto
part of the dimensions. It ignored any width
and height
attributes set in the HTML.
The implication of all this is that specifying width
and height
attributes on images often wasnt actually that useful in a lot of cases. Yes, when an image is being shown at full size, without any CSS changing any dimensions, it is useful to resolve the layout shifting problem. However, when you use CSS like below to ensure images do not overflow their available space, then you run into problems as soon as the available width becomes smaller than the actual image size.
img {
max-width: 100%;
height: auto;
}
This affects any page where we constrain the image size in a responsive manner — i.e. small screen mobile devices. These are likely to be the very users suffering with network constraints and limited processing power that will suffer most from layout shifts! Of course, we ideally should be delivering appropriately sized images for the screen size, but you cannot cover every device size, so often images will need some resizing by the browser, particularly on mobile.
Many websites may not bother to specify width
s and height
s on their <img>
tags. That could be because they werent aware this was useful, or because they were all too aware of what we talked about here and knew it actually wasnt that useful in a lot of cases. Whatever the reason is beside the point, they are frequently not provided. (How can we even evangelize putting the effort into using them given what Ive just described?) Even the popular Lighthouse auditing tool doesnt flag when you dont do this (though in light of some of the things were about to talk about, that is under discussion again).
Working Around The Problem
The limitations for responsive images have been known for a long time and many workarounds, including the so-called padding-bottom hack, have been created to work around the issue. This uses the fact that padding
percentages (including padding-bottom
) are always based on the container width (to ensure a consistent padding even if height and width differ). This fact can therefore be used to create a container with where the height is set based on a ratio of the width. For example for, lets say we have an image with an aspect-ratio of 16:9, then the following CSS code will create the appropriately sized space for the image:
.img-container {
position: relative;
padding-bottom: 56.25%; /* 16:9 ratio */
height: 0;
overflow: hidden;
}
.img-container img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
The three main downsides of this technique are the following:
- It requires a hard-coded ratio to be calculated (
56.25%
— 9�16 — in this example), so it potentially requires custom CSS for each different image. - The CSS code is not exactly easy to remember — forgetting or removing a single line of the above CSS code will break the whole thing. Not to mention this technique requires all images to be wrapped in an extra container element.
- This is a more advanced technique that not all web developers know about or use.
And, lets be honest — its a bit of a hack! So, we really should fix this properly, shouldnt we?
Fixing The Resizing Problem
The issue has been tackled from a few different directions by a number of different standards organizations.
The CSS Working Group (CSS WG) proposed the aspect-ratio
property that Rachel wrote about previously. This would tackle the complexity problem (issue 2) once it becomes available, and simplify the above code to just this:
img {
width: 100%;
height: auto;
aspect-ratio: 16/9;
}
Much nicer! This is particularly useful for video where we usually have a set number of commonly used aspect-ratios, so we could create a few classes like above for each size. Its perhaps less useful for images where dimensions are much less standardized, as it doesnt solve issue 1 (custom CSS code required per image), nor issue 3 (website developers will need to remember to set this). So, its a step forward, but not a full solution.
Separate to this, the Web Incubator Community Group (WICG) — a group of browser developers and other interested parties that can experiment on technologies to see if they work before formal standardisation — also created a proposal to fix this. They proposed the intrinsicsize
attribute, that would look like this:
<img intrinsicsize="400x400" style="width: 100%">
As this is an HTML attribute, it can be set per image (solving issue 1), and is relatively easy to code (solving issue 2), but was still likely to suffer from adoption issues (issue 3) unless it became very well-known with a big push from the whole community.
We already have a common, well-known method of setting the width
and height
on <img>
elements (even if they are not used as much as they should be!) so anything new, other than that, is going to suffer from the adoption issue. And that is where the (now seemingly obvious!) answer presented itself.
Jen Simmons proposed this elegant, and simple solution, that she had come up with, along with fantasai:
<style>
img {
width: 100%;
height: auto;
aspect-ratio: attr(width) / attr(height);
}
</style>
<img src="hero_image.jpg" alt="" width="500" height="500">
Rather than hard-coding the aspect-ratio
, this uses the attr
CSS function to create the appropriate aspect-ratio based on the image width
and height
attributes provided by the HTML. The attr
function has been around for a while, but has been very limited in scope — its supported for content
by all browsers, but not for the wider use case of any other attribute like width
and height
, which is what is needed here.
If attr
was able to be used for the well-known width
and height
attributes from img
elements, then it could use be used to automatically calculate the aspect-ratio
as per above. This would solve issue 1 (no hard-coded aspect ratio needs to be set in the HTML nor the CSS), issue 2 (very simple to add) and, as we shall see, there is a very simple answer to issue 3 (adoption).
Basically, this solution means if the following four conditions are true, then the correct image dimensions could be calculated without needing to wait for the images to download, and so without the need of a content layout shift:
height
is set on the element in HTMLwidth
is set on the element in HTMLheight
(orwidth
) is set in the CSS — including using percentage values likemax-width: 100%;
width
(orheight
) is set toauto
in the CSS.
If any one of these were not set, then the calculation would not be possible, and so would fail and be ignored and have to wait for the image to be downloaded.
So once browsers support using the HTML width
and height
to calculate the aspect-ratio
we can solve our problem very simply with no change in practice to HTML and one line of CSS code! As mentioned above, this is also something many web developers may have already assumed was happening anyway.
Driving Adoption Of This Solution
Because this is just a CSS attribute, the proposal contained a further twist — it could be added to the user-agent stylesheet used by browsers so would not even require any changes from web developers to benefit from this.
The user-agent stylesheet is where default CSS definitions are set (e.g. what font-size
the h1
element uses), which can be overridden by your own CSS if you want. By adding the above aspect-ratio
one-liner to this we dont need to drive adoption — we basically turn it on automatically for all sites that meet the above four conditions!
However, this does depend on the attr
function having access to the width
and height
HTML attributes, and also the upcoming aspect-ratio
CSS property to be completed — neither of which has happened yet. So instead, as an easier fix, the browsers could implement the equivalent logic deep in rendering code rather than exposing it via the user-agent stylesheet, but the effect is the same. This alternative implementation approach was even suggested as part of the proposal.
Firefox went ahead and did this as an experiment and then turned it on by default for Firefox 71. Once that was released, then your site may well have just got faster for free — thanks Mozilla! Maybe in future, they will move this to the user-agent stylesheet method, but for now, this is sufficient (and perhaps more performant?).
Backwards Compatibility
When introducing a change in behavior, there is always a concern about backwards compatibility and this feature was no different. In theory, as long as the four attributes were appropriately set, there should be no breakage with this.
However, when Firefox initially experimented with it, they discovered problems for those setting the width
and height
incorrectly in their HTML. Whereas previously these incorrect values would be ignored if the CSS overrode them, now they were being used when auto
was set and the images were not displayed correctly and led to squished or stretched images. Now you could argue that web developers shouldnt set these values incorrectly, and in some cases, it would be already broken even without this change (the case above when you didnt set height: auto
), but still, breaking sites is never a good thing. That is also something the web tries very hard to avoid — and is mostly very good at avoiding that (its one of my favorite things about the web as a platform).
The solution to that problem, however, was relatively simple: have the actual image aspect-ratio of the image override any CSS calculated aspect-ratio. This way the (incorrectly) calculated aspect-ratio can be used for initial layout, but then can be recalculated when the image is downloaded, so the image is displayed as it was before. This does cause a layout shift (since the incorrect space was allocated initially) but that was happening before anyway, so its no worse. In fact, its often a lot better as an incorrect aspect ratio will often be closer to the truth than a zero aspect-ratio.
Rollout To Other Browsers
After Firefoxs successful experimentation, Chrome also decided to implement this (again using the layout coded method for now rather than default user-agent stylesheet), and rolled it out by default in Chrome 79. This also took care of the other chromium-based browsers (Edge, Opera and Brave, for example). More recently, in January 2020, Apple added it to their Tech Preview edition of Safari, meaning it should hopefully be coming to the production version of Safari soon, and with that, the last of the major browsers will have implemented this and the web will become better and less jolty for a huge number of sites.
Limitations
There are a few limitations to be aware of with this feature, including issues with:
- Art Direction
- Lazy Loading
- Non-Images
Art Direction
The fix works great to calculate the aspect-ratio based on a fixed width
and height
, but what about when those change? This is known as art direction and an example is shown below:
In this case we are using a wide image for desktop, and then a square, cropped image for mobile. Responsive images can be implemented using srcset
attributes on an <img>
element:
<img
srcset="hero_800x400.jpg 800w, hero_400x400.jpg 400w"
sizes="(min-width: 327px)" 800px 400px
src="hero_800x400.jpg" alt=""
width="800" height="400">
or with the <picture>
element like this:
<picture>
<source media="(min-width: 327px)"
type="image/jpeg" srcset="hero_800x400.jpg">
<source type="image/jpeg"
srcset="hero_400x400.jpg">
<img src="hero_800x400.jpg" alt=""
width="800" height="400">
</picture>
Currently, both these elements only allow the width
and height
to be set once on the main, fallback <img>
element and not on the individual <srcset>
alternatives. Adding these has been proposed but until then, this is currently a limitation of the solution, and using images with different dimensions will still experience a layout shift.
Lazy Loading
This feature would be perfectly suited for use with lazy-loading. Ideally, all lazy-loaded images are loaded off-screen as you scroll down the page before the lazy-loaded image enters the viewport, but often this is not the case depending on how fast the user scrolls and the network, so having the image area correctly set would at least avoid the layout shift after loading does occur. Additionally, even when loading is happening off-screen, layout shifts can be costly in terms of CPU time, as we have shown above.
However, lazy loading techniques may involve not using an <img>
element, or at least one without a src
(to prevent the browser from downloading the image by default). Therefore, it may not be able to benefit from this recent change depending on how your browser handles the element used or src
-less <img>
elements. Though if the CSS version of this solution becomes available, then website developers will have greater control over specifying aspect-ratio
themselves.
Native lazy loading was recently released by the Chrome team and it has since been added to the HTML spec. Other browsers are also looking to support this with Firefox also getting this soon, and Safari hopefully not too much later. That does make use of the <img>
element with a src
with syntax like the following (including when used as part of the <picture>
element):
<img src="hero_800x400.jpg" alt=""
width="800" height="400" loading="lazy">
Perfect! Well, unfortunately, I discovered this height and width solution is not compatible with the recently released native lazy-loading functionality as can be seen on this test page. Ive raised a bug for this issue and hopefully the Chrome team will fix this soon.
Non-Images
Currently, the browsers that have implemented this, have only done for the <img>
element, but it would also be useful for <video>
, <iframe>
and <object>
elements to name a few, and this under discussion. Again, if the CSS version of this technique becomes available through the attr
functions and aspect-ratio
property, then that puts the power in the website developer to implement this for whatever elements they want!
Conclusion
I love improvements that just work without any effort required of website owners. That is not to ignore the hard work required by the browser developers and standardization teams, of course, but its often rolling out to websites that is the real difficulty. The less friction we can add to introduce these improvements, the more likely they will be adopted, and theres no better friction than none at all! Fixing the impact of layout shifts on users for responsive images seems to be one such improvement and the web is all the better for it.
The one change that is required of us web developers is to ensure we are providing width
and height
attributes in our markup. Its a habit we shouldnt really have gotten out of, and many CMS and publishing tools make this relatively easy. I queried the HTTPArchive and it looks like 62% of <img>
tags have width
or heights
, which is way higher than I expected to be honest — but lets try to increase that statistic even more now we have a reason to again. So, I implore you to check that you are doing this on your sites and, if not, start to. It will improve the experience for your users and ultimately make them happier, and who doesnt want that?
Liked https://twitter.com/GH_Esquire/status/1236395918339067906
Dedotated Grahm on Twitter
Why has it taken me 30 years to find out here's a Jackie Chan Cartoon Ps2 game out in the wild? pic.twitter.com/AFO8qyZgVJ
— Dedotated Grahm (@GH_Esquire) March 7, 2020
Liked https://twitter.com/Wallmasterr/status/1234742868704624641
Alastair Low on Twitter
Flea is now 100% funded in 3 days!
— Alastair Low (@Wallmasterr) March 3, 2020
Thanks everyone whos backed so far, stay tuned for some streach goals.https://t.co/lYpSNZrvyB#homebrew #flea #lowtekgames #nes #nesmaker #indiegamedev #gamedev #kickstarter #platformer #game #nesdev #retro pic.twitter.com/wOQZoeTsD6
Liked https://janboddez.tech/notes/c3c70e4b63
There’s always _some_ weird thing going on with … There’s always some weird thing going on with others’ IndieWeb/microformats feeds, isn’t there? Tagged: indieweb By Jan Boddez on Feb 4, 2020 Indigenous for Android Also on Mastodon
There’s always some weird thing going on with others’ IndieWeb/microformats feeds, isn’t there?