<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Roman Veselý: Learning Log</title><description>Collection of interesting news, resources, tips or issues and their solutions.</description><link>https://romanvesely.com/log.xml</link><language>en-us</language><lastBuildDate>Sat, 18 Apr 2026 10:47:41 GMT</lastBuildDate><item><title>0048</title><link>https://romanvesely.com/log/0048</link><guid isPermaLink="true">https://romanvesely.com/log/0048</guid><description>It&apos;s possible to protect against CSRF attack without traditional hidden input fields with tokens.
Header Sec-Fetch-Site is sent by browsers with every request since 2023.
This header should be read by...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&apos;s possible to protect against &lt;a href=&quot;https://owasp.org/www-community/attacks/csrf&quot;&gt;CSRF attack&lt;/a&gt; without traditional hidden input fields with tokens.
Header &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Sec-Fetch-Site&quot;&gt;&lt;code&gt;Sec-Fetch-Site&lt;/code&gt;&lt;/a&gt; is sent by browsers with every request since 2023.
This &lt;a href=&quot;https://blog.miguelgrinberg.com/post/csrf-protection-without-tokens-or-hidden-form-fields&quot;&gt;header should be read by server&lt;/a&gt; that can act according to its value.
For example, reject requests that are not &lt;code&gt;same-origin&lt;/code&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0047</title><link>https://romanvesely.com/log/0047</link><guid isPermaLink="true">https://romanvesely.com/log/0047</guid><description>When working in multiple git repositories it is handy to know what one did last day or even many days ago.
git-standup can display a log of commits from multiple repositories
making it easy to remembe...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When working in multiple &lt;code&gt;git&lt;/code&gt; repositories it is handy to know what one did last day or even many days ago.
&lt;a href=&quot;https://github.com/kamranahmedse/git-standup&quot;&gt;&lt;code&gt;git-standup&lt;/code&gt;&lt;/a&gt; can display a log of commits from multiple repositories
making it easy to remember what happend.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0046</title><link>https://romanvesely.com/log/0046</link><guid isPermaLink="true">https://romanvesely.com/log/0046</guid><description>Capability URLs are unique, hard-to-guess links that grant access to specific resources without requiring traditional authentication.
Possession of the URL itself serves as permission to access the in...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.w3.org/TR/capability-urls/&quot;&gt;Capability URLs&lt;/a&gt; are unique, hard-to-guess links that grant access to specific resources without requiring traditional authentication.
Possession of the URL itself serves as permission to access the information.&lt;/p&gt;
&lt;p&gt;Once a user has accessed a page through such an URL, they are able to do all they need to do within that page.&lt;/p&gt;
&lt;p&gt;Some of the examples are: Google Calendar share links or password reset links.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0045</title><link>https://romanvesely.com/log/0045</link><guid isPermaLink="true">https://romanvesely.com/log/0045</guid><description>In VSCode you can highlight next occurence of the selected text with &amp;lt;kbd&amp;gt;CTRL&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;.
To select all occurences at once use &amp;lt;kbd&amp;gt;CTRL&amp;lt;/kbd&amp;gt; + &amp;lt;kbd&amp;...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In VSCode you can highlight next occurence of the selected text with &lt;kbd&gt;CTRL&lt;/kbd&gt; + &lt;kbd&gt;D&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;To select all occurences at once use &lt;kbd&gt;CTRL&lt;/kbd&gt; + &lt;kbd&gt;SHIFT&lt;/kbd&gt; + &lt;kbd&gt;L&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;Take a look at &lt;a href=&quot;https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf&quot;&gt;Keyboard shortcut cheatsheet&lt;/a&gt; (Windows).&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0044</title><link>https://romanvesely.com/log/0044</link><guid isPermaLink="true">https://romanvesely.com/log/0044</guid><description>I didn&apos;t know that scrollytelling as a term exists.
If a page must tie content interactivity to scrolling, the best way is to use it to teach something!
Check out one of the examples.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I didn&apos;t know that &lt;em&gt;&lt;a href=&quot;https://en.wiktionary.org/wiki/scrollytelling&quot;&gt;scrollytelling&lt;/a&gt;&lt;/em&gt; as a term exists.
If a page must tie content interactivity to scrolling, the best way is to use it to teach something!&lt;/p&gt;
&lt;p&gt;Check out one of the &lt;a href=&quot;https://tympanus.net/Development/StorytellingMap/&quot;&gt;examples&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0043</title><link>https://romanvesely.com/log/0043</link><guid isPermaLink="true">https://romanvesely.com/log/0043</guid><description>There are situations where forced colors should be disabled even when the rest of the page stays in high contrast mode.
Example is a color selector in an eshop page.
Reduced color palette would deteri...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There are situations where &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors&quot;&gt;forced&lt;/a&gt; &lt;a href=&quot;https://polypane.app/blog/forced-colors-explained-a-practical-guide/&quot;&gt;colors&lt;/a&gt; should be disabled even when the rest of the page stays in high contrast mode.
Example is a color selector in an eshop page.
Reduced color palette would deteriorate user experience.&lt;/p&gt;
&lt;p&gt;You can turn off forced colors with &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/forced-color-adjust&quot;&gt;&lt;code&gt;forced-color-adjust: none&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0042</title><link>https://romanvesely.com/log/0042</link><guid isPermaLink="true">https://romanvesely.com/log/0042</guid><description>It&apos;s possible to limit the number of lines in a block element with -webkit-line-clamp CSS property.
Although, it must be accompained with some additional properties to work:
p {
  display: -webkit-box...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&apos;s possible to limit the number of lines in a block element with &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-line-clamp&quot;&gt;&lt;code&gt;-webkit-line-clamp&lt;/code&gt;&lt;/a&gt; CSS property.
Although, it must be accompained with some additional properties to work:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;p {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://caniuse.com/mdn-css_properties_-webkit-line-clamp&quot;&gt;Browser support&lt;/a&gt; is sufficient.
In the future, it might be replaced with &lt;code&gt;line-clamp&lt;/code&gt; property.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0041</title><link>https://romanvesely.com/log/0041</link><guid isPermaLink="true">https://romanvesely.com/log/0041</guid><description>In Markdown (or other compatible markup format) every sentence can be on its own line, but still rendered in the same paragraph.
Besides other benefits it may lead to a more readble git diffs.
Welcome...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In Markdown (or other compatible markup format) every sentence can be on its own line, but still rendered in the same paragraph.
Besides &lt;a href=&quot;https://sive.rs/1s&quot;&gt;other benefits&lt;/a&gt; it may lead to a more readble git diffs.
Welcome &lt;a href=&quot;https://sembr.org/&quot;&gt;Semantic Line Breaks&lt;/a&gt;!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0040</title><link>https://romanvesely.com/log/0040</link><guid isPermaLink="true">https://romanvesely.com/log/0040</guid><description>Lazy consensus is a decision-making process where silence means approval.
It encourages participants to take initiative and lowers the cost of governance.
It is used within various open-source project...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://medlabboulder.gitlab.io/democraticmediums/mediums/lazy_consensus/&quot;&gt;Lazy consensus&lt;/a&gt; is a decision-making process where silence means approval.
It encourages participants to take initiative and lowers the cost of governance.
It is used within various open-source projects teams and organizations, such as &lt;a href=&quot;https://community.apache.org/committers/decisionMaking.html&quot;&gt;Apache Software Foundation&lt;/a&gt; or &lt;a href=&quot;https://github.com/adobe/react-spectrum/blob/main/CONTRIBUTING.md#contributor-to-committer&quot;&gt;Adobe Spectum team&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0039</title><link>https://romanvesely.com/log/0039</link><guid isPermaLink="true">https://romanvesely.com/log/0039</guid><description>ICU Message formatting is very powerful. It is really convenient to test translation strings in real time to see the output. Here&apos;s an awesome online ICU Message editor!
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://unicode-org.github.io/icu/&quot;&gt;ICU Message&lt;/a&gt; formatting is very powerful. It is really convenient to test translation strings in real time to see the output. Here&apos;s an awesome &lt;a href=&quot;https://format-message.github.io/icu-message-format-for-translators/editor.html&quot;&gt;online ICU Message editor&lt;/a&gt;!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0038</title><link>https://romanvesely.com/log/0038</link><guid isPermaLink="true">https://romanvesely.com/log/0038</guid><description>When working with microformats, it is valuable to check whether they are implemented correctly. We can use several online parsers for that, such as: X-Ray or Microformats Parser.
What can be done with...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When working with &lt;a href=&quot;https://microformats.org/wiki/microformats2&quot;&gt;microformats&lt;/a&gt;, it is valuable to check whether they are implemented correctly. We can use several online parsers for that, such as: &lt;a href=&quot;https://xray.p3k.app/&quot;&gt;X-Ray&lt;/a&gt; or &lt;a href=&quot;https://pin13.net/mf2/&quot;&gt;Microformats Parser&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What can be done with microformats? You can &lt;a href=&quot;https://indiewebify.me/validate-h-card/?url=https%3A%2F%2Fromanvesely.com&quot;&gt;indiewebify yourself&lt;/a&gt;!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0037</title><link>https://romanvesely.com/log/0037</link><guid isPermaLink="true">https://romanvesely.com/log/0037</guid><description>Normally, fonts display numerical digits in varying widths - proportional figures. Monospace fonts display every letter and digit in the same width. It is possible to opt-in to this behaviour (tabular...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Normally, fonts display numerical digits in varying widths - &lt;a href=&quot;https://otf.show/pnum&quot;&gt;proportional figures&lt;/a&gt;. Monospace fonts display every letter and digit in the same width. It is possible to opt-in to this behaviour (&lt;a href=&quot;https://otf.show/tnum&quot;&gt;tabular figures&lt;/a&gt;) also in non-monospace fonts in CSS with &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric&quot;&gt;&lt;code&gt;font-variant-numeric: tabular-nums&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some fonts (like &lt;a href=&quot;https://fonts.google.com/specimen/Roboto&quot;&gt;Roboto&lt;/a&gt;) use tabular figures by default and provide proportional numbers as an option.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0036</title><link>https://romanvesely.com/log/0036</link><guid isPermaLink="true">https://romanvesely.com/log/0036</guid><description>Wouldn&apos;t it be helpful to see type hints in JavaScript configuration files? Let&apos;s say, for Rollup configuration, so you have at least a glance of all the possibilities?
Thankfully it can be done with ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Wouldn&apos;t it be helpful to see type hints in JavaScript configuration files? Let&apos;s say, for &lt;a href=&quot;https://rollupjs.org&quot;&gt;Rollup&lt;/a&gt; configuration, so you have at least a glance of &lt;a href=&quot;https://rollupjs.org/guide/en/#big-list-of-options&quot;&gt;all the possibilities&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Thankfully it can be done with &lt;a href=&quot;https://jsdoc.app/tags-type.html&quot;&gt;JSDoc &lt;code&gt;@type&lt;/code&gt; tag&lt;/a&gt;! Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// rollup.config.js

/** @type {import(&apos;rollup/dist/rollup&apos;).RollupOptions[]} */
export default [
  {
    input: &quot;./index.js&quot;,
    // ...
  },
];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I think that&apos;s really neat!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0035</title><link>https://romanvesely.com/log/0035</link><guid isPermaLink="true">https://romanvesely.com/log/0035</guid><description>Working on design system implementation I found there&apos;s W3C Community Group for Design Tokens! Its mission is to define common glossary and specification for better interoperability between developers...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Working on design system implementation I found there&apos;s &lt;a href=&quot;https://www.designtokens.org&quot;&gt;W3C Community Group for Design Tokens&lt;/a&gt;! Its mission is to define common glossary and specification for better interoperability between developers and tools.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0034</title><link>https://romanvesely.com/log/0034</link><guid isPermaLink="true">https://romanvesely.com/log/0034</guid><description>CSS is sometimes unpredictable - property names and their values are not always obvious and do not easily come to one&apos;s mind. Check this incomplete list of mistakes in CSS by its very own creator - CS...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CSS is sometimes unpredictable - property names and their values are not always obvious and do not easily come to one&apos;s mind. Check this &lt;a href=&quot;https://wiki.csswg.org/ideas/mistakes&quot;&gt;incomplete list of mistakes in CSS&lt;/a&gt; by its very own creator - &lt;a href=&quot;https://www.w3.org/Style/CSS/&quot;&gt;CSS Working Group&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0033</title><link>https://romanvesely.com/log/0033</link><guid isPermaLink="true">https://romanvesely.com/log/0033</guid><description>JavaScript is never going to stop surprise me. You can continue or break parent loop inside nested for loops by using a label.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;JavaScript is never going to stop surprise me. You can &lt;code&gt;continue&lt;/code&gt; or &lt;code&gt;break&lt;/code&gt; parent loop inside nested &lt;code&gt;for&lt;/code&gt; loops by using a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label&quot;&gt;label&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0032</title><link>https://romanvesely.com/log/0032</link><guid isPermaLink="true">https://romanvesely.com/log/0032</guid><description>As opposed to Gitflow, Trunk based development promotes short-lived branches. It is a great resource of knowledge on this matter including techniques such as CI/CD, feature flags, monorepos, and more....</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As opposed to Gitflow, &lt;a href=&quot;https://trunkbaseddevelopment.com&quot;&gt;Trunk based development&lt;/a&gt; promotes &lt;strong&gt;short-lived&lt;/strong&gt; branches. It is a great resource of knowledge on this matter including techniques such as CI/CD, feature flags, monorepos, and more.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0031</title><link>https://romanvesely.com/log/0031</link><guid isPermaLink="true">https://romanvesely.com/log/0031</guid><description>While watching a tutorial on YouTube I spotted some CSS properties I&apos;ve never seen before. The presenter used block-size, inline-size or padding-inline, and some others as well. I immediately thought ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;While watching a &lt;a href=&quot;https://www.youtube.com/watch?v=qiCRutGzGBw&quot;&gt;tutorial on YouTube&lt;/a&gt; I spotted some CSS properties I&apos;ve never seen before. The presenter used &lt;code&gt;block-size&lt;/code&gt;, &lt;code&gt;inline-size&lt;/code&gt; or &lt;code&gt;padding-inline&lt;/code&gt;, and some others as well. I immediately thought those must be ones I neglect due to their lack of support in browsers. &lt;a href=&quot;https://caniuse.com/?search=logical%20properties&quot;&gt;I was correct&lt;/a&gt; but also learned that they are part of the CSS module &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties&quot;&gt;Logical Properties and Values&lt;/a&gt;, which properties depend on &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode&quot;&gt;writing mode&lt;/a&gt;. Great for multilingual sites.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0030</title><link>https://romanvesely.com/log/0030</link><guid isPermaLink="true">https://romanvesely.com/log/0030</guid><description>One of the newsletters I subscribe to is Bytes. Once a week, it brings information about new releases and trends in the JavaScript ecosystem. And if you like catchy challanges, there&apos;s something for y...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the newsletters I subscribe to is &lt;a href=&quot;https://ui.dev/newsletters/bytes/&quot;&gt;Bytes&lt;/a&gt;. Once a week, it brings information about new releases and trends in the JavaScript ecosystem. And if you like catchy challanges, there&apos;s something for you in every issue.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0029</title><link>https://romanvesely.com/log/0029</link><guid isPermaLink="true">https://romanvesely.com/log/0029</guid><description>Surprisingly, &amp;lt;abbr&amp;gt; attribute is not accessible on mobile devices. By default, its title is visible on mouse hover, but there&apos;s no hover on mobiles.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Surprisingly, &lt;code&gt;&amp;lt;abbr&amp;gt;&lt;/code&gt; attribute &lt;a href=&quot;https://utcc.utoronto.ca/~cks/space/blog/web/HTMLAbbrAndMobileBrowsers&quot;&gt;is not accessible&lt;/a&gt; on mobile devices. By default, its title is visible on mouse hover, but there&apos;s no hover on mobiles.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0028</title><link>https://romanvesely.com/log/0028</link><guid isPermaLink="true">https://romanvesely.com/log/0028</guid><description>When working with password inputs, it&apos;s possible to add a bit more information on how the autocomplete should work. It can be set on and off, but the real power comes with options current-password and...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When working with &lt;code&gt;password&lt;/code&gt; inputs, it&apos;s possible to add a bit more information on &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password#Allowing_autocomplete&quot;&gt;how the &lt;code&gt;autocomplete&lt;/code&gt; should work&lt;/a&gt;. It can be set &lt;code&gt;on&lt;/code&gt; and &lt;code&gt;off&lt;/code&gt;, but the real power comes with options &lt;code&gt;current-password&lt;/code&gt; and &lt;code&gt;new-password&lt;/code&gt;. The former allows the browser to enter the known password - suitable for the login form. The later allows the browser to suggest (create) a new password - suitable for sign up or &quot;forgotten password&quot; forms.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0027</title><link>https://romanvesely.com/log/0027</link><guid isPermaLink="true">https://romanvesely.com/log/0027</guid><description>Lea Verou shared a simple yet effective way to add a favicon to your site - use emoji in SVG!
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://twitter.com/LeaVerou&quot;&gt;Lea Verou&lt;/a&gt; shared a simple yet effective way to add a favicon to your site - use &lt;a href=&quot;https://twitter.com/LeaVerou/status/1241619866475474946&quot;&gt;emoji in SVG&lt;/a&gt;!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0026</title><link>https://romanvesely.com/log/0026</link><guid isPermaLink="true">https://romanvesely.com/log/0026</guid><description>In git, a commit is referenced via its hash value - 40 digit string. Usually, only the first 8 digits are used, as that&apos;s enough to be able to (visually) differentiate one commit with others. Alas, it...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;code&gt;git&lt;/code&gt;, a commit is referenced via its hash value - 40 digit string. Usually, only the first 8 digits are used, as that&apos;s enough to be able to (visually) differentiate one commit with others. Alas, it may lead to a security hole if such a way is used in, let&apos;s say, a build script - because of &lt;strong&gt;Commit Hash Collisions&lt;/strong&gt;. Thanks to that, one might also &lt;a href=&quot;https://blog.teddykatz.com/2019/11/12/github-actions-dos.html&quot;&gt;take down Github Actions&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0025</title><link>https://romanvesely.com/log/0025</link><guid isPermaLink="true">https://romanvesely.com/log/0025</guid><description>How did you learn HTML? Just looking at the sites&apos; source code? Well, it was much easier back then. Found thanks to the Mozilla Developer Newsletter.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://twitter.com/m_ott/status/1233442735266418688&quot;&gt;How did you learn HTML&lt;/a&gt;? Just looking at the sites&apos; source code? Well, it was much easier back then. Found thanks to the &lt;a href=&quot;https://www.mozilla.org/en-US/newsletter/developer/&quot;&gt;Mozilla Developer Newsletter&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0024</title><link>https://romanvesely.com/log/0024</link><guid isPermaLink="true">https://romanvesely.com/log/0024</guid><description>Applications are being served on many types of devices - desktop, mobile (Android, iOS), and even on something more exotic, like smartwatches. Every device means a different way of application usage, ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Applications are being served on many types of devices - desktop, mobile (Android, iOS), and even on something more exotic, like smartwatches. Every device means a different way of application usage, so are the requirements for API. Oftentimes, there is one, general-purpose API that serves all types of clients, but it may become cumbersome. Why not have one API per user experience? Read more about &lt;a href=&quot;https://samnewman.io/patterns/architectural/bff/&quot;&gt;Backends For Frontends&lt;/a&gt; pattern.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0023</title><link>https://romanvesely.com/log/0023</link><guid isPermaLink="true">https://romanvesely.com/log/0023</guid><description>While resolving import statements, @types directory is significant for TypeScript compiler, as it looks there for type declarations before it reaches the actual package node_modules directory. The log...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;While resolving &lt;code&gt;import&lt;/code&gt; statements, &lt;code&gt;@types&lt;/code&gt; directory is significant for TypeScript compiler, as it looks there for type declarations before it reaches the actual package &lt;code&gt;node_modules&lt;/code&gt; directory. &lt;a href=&quot;https://github.com/Microsoft/TypeScript/issues/9184&quot;&gt;The logic behind&lt;/a&gt; this behavior is that if the package itself had type declarations, you wouldn&apos;t have installed it from DefinitelyTyped.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0022</title><link>https://romanvesely.com/log/0022</link><guid isPermaLink="true">https://romanvesely.com/log/0022</guid><description>DefinitelyTyped is the repository for TypeScript type definitions. We may call it the official repository now, but that has not always been the case. When Boris created a repository for this project n...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://definitelytyped.org/&quot;&gt;DefinitelyTyped&lt;/a&gt; is the repository for TypeScript type definitions. We may call it the official repository now, but that has not always been the case. When &lt;a href=&quot;https://twitter.com/borisyankov&quot;&gt;Boris&lt;/a&gt; created a repository for this project nobody knew TypeScript will become so widely-used. Read its &lt;a href=&quot;https://blog.johnnyreilly.com/2019/10/definitely-typed-movie.html&quot;&gt;whole story from zero to hero&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0021</title><link>https://romanvesely.com/log/0021</link><guid isPermaLink="true">https://romanvesely.com/log/0021</guid><description>In GitHub, you can highlight not only the code syntax but also a differences, just like with git diff command. It may be very helpful while providing some step by step guides in READMEs or issues.
Her...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In GitHub, you can highlight not only the code syntax but also a differences, just like with &lt;code&gt;git diff&lt;/code&gt; command. It may be very helpful while providing some step by step guides in READMEs or issues.&lt;/p&gt;
&lt;p&gt;Here&apos;s the syntax:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```diff
+foo
-bar
baz
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;that results in:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;+foo
-bar
baz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, it&apos;s not possible to use both language syntax and diff highlighting together.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0020</title><link>https://romanvesely.com/log/0020</link><guid isPermaLink="true">https://romanvesely.com/log/0020</guid><description>You can push your console.log()-driven development to a more advanced level with console.group() method. It creates a new inline group, indenting all following output. To move back, use console.groupE...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You can push your &lt;code&gt;console.log()&lt;/code&gt;-driven development to a more advanced level with &lt;code&gt;console.group()&lt;/code&gt; method. It creates a new inline group, indenting all following output. To move back, use &lt;code&gt;console.groupEnd()&lt;/code&gt;. Check this &lt;a href=&quot;https://mariusschulz.com/blog/advanced-javascript-logging-using-console-group&quot;&gt;article about advanced logging&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0019</title><link>https://romanvesely.com/log/0019</link><guid isPermaLink="true">https://romanvesely.com/log/0019</guid><description>In TypeScript, the difference between union types and intersection types can be counter-intuitive at first glance. Ryan Cavanaugh gave a great explanation: &quot;the union of the domain of values produces ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In TypeScript, the difference between &lt;strong&gt;union types&lt;/strong&gt; and &lt;strong&gt;intersection types&lt;/strong&gt; can be counter-intuitive at first glance. &lt;a href=&quot;https://twitter.com/SeaRyanC&quot;&gt;Ryan Cavanaugh&lt;/a&gt; gave a great &lt;a href=&quot;https://stackoverflow.com/a/38857724/5549874&quot;&gt;explanation&lt;/a&gt;: &quot;the union of the domain of values produces an intersected set of properties and vice versa.&quot;&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0018</title><link>https://romanvesely.com/log/0018</link><guid isPermaLink="true">https://romanvesely.com/log/0018</guid><description>Besides learning new stuff, networking is another crucial part of conferences or other events. But, it can be hard to join the discussion of the group of people one doesn&apos;t know. That&apos;s where the Pac-...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Besides learning new stuff, networking is another crucial part of conferences or other events. But, it can be hard to join the discussion of the group of people one doesn&apos;t know. That&apos;s where the &lt;a href=&quot;https://www.ericholscher.com/blog/2017/aug/2/pacman-rule-conferences/&quot;&gt;Pac-man rule&lt;/a&gt; comes in. When standing as a group of people, always leave room for 1 person to join your group.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0017</title><link>https://romanvesely.com/log/0017</link><guid isPermaLink="true">https://romanvesely.com/log/0017</guid><description>How to make your application more accessible? What about to include No mouse day into your development process?
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How to make your application more accessible? What about to include &lt;a href=&quot;https://www.npmjs.com/package/no-mouse-days&quot;&gt;No mouse day&lt;/a&gt; into your development process?&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0016</title><link>https://romanvesely.com/log/0016</link><guid isPermaLink="true">https://romanvesely.com/log/0016</guid><description>How to make your application faster? Firstly, you may want to know how does it behave under a slow connection. To get an idea of what is it like, developers at Facebook have 2G Tuesdays - simulating s...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How to make your application faster? Firstly, you may want to know how does it behave under a slow connection. To get an idea of what is it like, developers at Facebook have &lt;strong&gt;2G Tuesday&lt;/strong&gt;s - simulating slow connection for the whole one day. This is how the performance should be tested! From the talk &lt;a href=&quot;https://slideslive.com/38919333&quot;&gt;New adventures in front-end&lt;/a&gt; by &lt;a href=&quot;https://www.smashingmagazine.com/author/vitaly-friedman/&quot;&gt;Vitaly Friedman&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0015</title><link>https://romanvesely.com/log/0015</link><guid isPermaLink="true">https://romanvesely.com/log/0015</guid><description>Some time ago I was struggling with TypeScript generic types and decided to reach for help from smarter guys on Stack Overflow. I received an answer, thanks! The solution is based on very specific con...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Some time ago I was struggling with TypeScript &lt;strong&gt;generic types&lt;/strong&gt; and decided to reach for &lt;a href=&quot;https://stackoverflow.com/questions/50371994/typescript-type-guarding-of-argument-based-on-the-previous-one&quot;&gt;help from smarter guys on Stack Overflow&lt;/a&gt;. I received an answer, thanks! The solution is based on very specific &lt;strong&gt;conditional type&lt;/strong&gt; which I was not familiar with back then,... and I&apos;m probably still not. But, there is a one truly &lt;a href=&quot;https://www.youtube.com/watch?v=O1rn-d_P_Rc&quot;&gt;helpful talk&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/gregonnet&quot;&gt;Gregor Woiwode&lt;/a&gt; describing the matter of this TypeScript magic. I really recommend you to watch if you want to understand it better.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0014</title><link>https://romanvesely.com/log/0014</link><guid isPermaLink="true">https://romanvesely.com/log/0014</guid><description>Is your project compiled from TypeScript? Are you too strict? If so, you may like --strict compiler option. It&apos;s a shorthand for enabling all (currently 7) strict type-checking options. You can always...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Is your project compiled from TypeScript? Are you too strict? If so, you may like &lt;a href=&quot;https://www.typescriptlang.org/v2/en/tsconfig#strict&quot;&gt;&lt;code&gt;--strict&lt;/code&gt; compiler option&lt;/a&gt;. It&apos;s a shorthand for enabling all (currently 7) strict type-checking options. You can always turn off individual options if needed.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0013</title><link>https://romanvesely.com/log/0013</link><guid isPermaLink="true">https://romanvesely.com/log/0013</guid><description>I have recently revealed my first browser extension, which enhances Google Calendar. To work it needs to fetch calendar data from Google API. There is a neverending (okay, several steps...) approval p...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have recently revealed my &lt;a href=&quot;/journaling&quot;&gt;first browser extension&lt;/a&gt;, which enhances Google Calendar. To work it needs to fetch calendar data from Google API. There is a neverending (okay, several steps...) approval process one has to undergo to get API access. To make the extension work also under Firefox I had to specifically &lt;a href=&quot;https://discourse.mozilla.org/t/firefox-webextension-and-oauth-browser-identity-getredirecturl-with-google-resolved/42362&quot;&gt;request support to whitelist &lt;code&gt;allizom.com&lt;/code&gt;&lt;/a&gt; as a verified domain. It just cannot be simpler, everything for the user&apos;s security...&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0012</title><link>https://romanvesely.com/log/0012</link><guid isPermaLink="true">https://romanvesely.com/log/0012</guid><description>Learning in public - is a quest to be as open as possible. But there&apos;s also kind of a counterpart to such spreading movement, that has probably always been a part of the World Wide Web - dark web. Bew...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Learning in public&lt;/strong&gt; - is a quest to be as open as possible. But there&apos;s also kind of a counterpart to such spreading movement, that has probably always been a part of the World Wide Web - dark web. Beware, not &lt;a href=&quot;https://en.wikipedia.org/wiki/Dark_web&quot;&gt;The Dark Web&lt;/a&gt;, but &lt;strong&gt;&lt;a href=&quot;https://www.sonniesedge.net/posts/real-dark-web/&quot;&gt;The Real Dark Web&lt;/a&gt;&lt;/strong&gt; - rarely acknowledged majority of web developers.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0011</title><link>https://romanvesely.com/log/0011</link><guid isPermaLink="true">https://romanvesely.com/log/0011</guid><description>Did you know the difference between border-bottom&apos;s values 0, none and hidden? Neither did I! See examples and explanations.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Did you know the difference between &lt;code&gt;border-bottom&lt;/code&gt;&apos;s values &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt; and &lt;code&gt;hidden&lt;/code&gt;? Neither did I! See &lt;a href=&quot;https://codepen.io/denilsonsa/pen/LkdHh?editors=110&quot;&gt;examples and explanations&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0010</title><link>https://romanvesely.com/log/0010</link><guid isPermaLink="true">https://romanvesely.com/log/0010</guid><description>Bad Frost is a father of Atomic design concept, which is now 6 years old. In his article he writes about the inception of the idea and how have the design systems changed throughout the years. If you ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bad Frost is a father of &lt;a href=&quot;https://bradfrost.com/blog/post/atomic-web-design/&quot;&gt;Atomic design&lt;/a&gt; concept, which is now 6 years old. In &lt;a href=&quot;http://bradfrost.com/blog/post/extending-atomic-design/&quot;&gt;his article&lt;/a&gt; he writes about the inception of the idea and how have the design systems changed throughout the years. If you work with CSS you may like the &lt;a href=&quot;http://getbem.com/introduction/&quot;&gt;BEM&lt;/a&gt; methodology which clicks with this concept very well.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0009</title><link>https://romanvesely.com/log/0009</link><guid isPermaLink="true">https://romanvesely.com/log/0009</guid><description>npm comes with some very handy scripts by default, which one of them is npm version. It is used to bump your package version (in package and shrinkwrap files). In a git repository, it also creates a c...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;npm comes with some very handy scripts by default, which one of them is &lt;code&gt;npm version&lt;/code&gt;. It is used to bump your package version (in package and shrinkwrap files). In a git repository, it also creates a commit and adds a tag in &lt;a href=&quot;https://semver.org/&quot;&gt;semver&lt;/a&gt; notation. This step might not be desirable when you use a different type of versioning, so it can be skipped by running it with &lt;code&gt;--no-git-tag-version&lt;/code&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0008</title><link>https://romanvesely.com/log/0008</link><guid isPermaLink="true">https://romanvesely.com/log/0008</guid><description>One more tip on security - keep opened tabs safe and use rel=&quot;noopener&quot; attribute. Asking why? Find the answer. There&apos;s also a nice eslint rule for JSX.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One more tip on security - keep opened tabs safe and use &lt;code&gt;rel=&quot;noopener&quot;&lt;/code&gt; attribute. Asking why? Find &lt;a href=&quot;https://mathiasbynens.github.io/rel-noopener/&quot;&gt;the answer&lt;/a&gt;. There&apos;s also a nice &lt;a href=&quot;https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md&quot;&gt;eslint rule for JSX&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0007</title><link>https://romanvesely.com/log/0007</link><guid isPermaLink="true">https://romanvesely.com/log/0007</guid><description>The security of the system must be preserved even when its architecture and functionality is publicly known, as far as the keys stay secure. Kerckhoffs principle about cryptosystems.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The security of the system must be preserved even when its architecture and functionality is publicly known, as far as the keys stay secure. &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Kerckhoffs&apos;s_principle&quot;&gt;Kerckhoffs principle&lt;/a&gt; about cryptosystems.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0006</title><link>https://romanvesely.com/log/0006</link><guid isPermaLink="true">https://romanvesely.com/log/0006</guid><description>Level up your git terminal skills. git add -N adds a new file to the history without its content. Then it is easy to see the whole file with git diff and add only some portions of it with git add -p. ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Level up your git terminal skills. &lt;code&gt;git add -N&lt;/code&gt; adds a new file to the history without its content. Then it is easy to see the whole file with &lt;code&gt;git diff&lt;/code&gt; and add only some portions of it with &lt;code&gt;git add -p&lt;/code&gt;. Kudos to &lt;a href=&quot;https://dev.to/oscherler/comment/cjb8&quot;&gt;Olivier&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0005</title><link>https://romanvesely.com/log/0005</link><guid isPermaLink="true">https://romanvesely.com/log/0005</guid><description>Don&apos;t know why, but I have been neglecting CSS background-position&apos;s offsets for a very long time. Probably I forgot it exists! I&apos;m pleased I&apos;ve discovered it just recently. Now I&apos;m again able to posi...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Don&apos;t know why, but I have been neglecting CSS &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/background-position#Values&quot;&gt;&lt;code&gt;background-position&lt;/code&gt;&apos;s offsets&lt;/a&gt; for a very long time. Probably I forgot it exists! I&apos;m pleased I&apos;ve discovered it just recently. Now I&apos;m again able to position background images relative to the edges of their elements.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0004</title><link>https://romanvesely.com/log/0004</link><guid isPermaLink="true">https://romanvesely.com/log/0004</guid><description>Icon fonts have still their place even in today&apos;s world of wide SVG support. With fontello.com is possible to easily create one font with characters from different sets. And that&apos;s very handy!
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Icon fonts have still their place even in today&apos;s world of wide SVG support. With &lt;a href=&quot;http://fontello.com/&quot;&gt;fontello.com&lt;/a&gt; is possible to easily create one font with characters from different sets. And that&apos;s very handy!&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0003</title><link>https://romanvesely.com/log/0003</link><guid isPermaLink="true">https://romanvesely.com/log/0003</guid><description>Staying in sync with the project&apos;s dependencies versions across different workstations and servers can be sometimes problematic. npm ci can help with many issues. It stands for a clean install and is ...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Staying in sync with the project&apos;s dependencies versions across different workstations and servers can be sometimes problematic. &lt;a href=&quot;https://docs.npmjs.com/cli/ci&quot;&gt;&lt;code&gt;npm ci&lt;/code&gt;&lt;/a&gt; can help with many issues. It stands for a clean install and is available since &lt;a href=&quot;https://github.com/npm/npm/releases/tag/v5.7.0%5D(https://github.com/npm/npm/releases/tag/v5.7.0)&quot;&gt;version 5.7.0&lt;/a&gt;. It installs dependencies only from your &lt;code&gt;package-lock.json&lt;/code&gt; file (it also removes &lt;code&gt;node_modules&lt;/code&gt; directory). It should be used in the CI environment, project setup, etc. I&apos;ve started using it in all my projects ever since.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0002</title><link>https://romanvesely.com/log/0002</link><guid isPermaLink="true">https://romanvesely.com/log/0002</guid><description>window resize event behaves a bit unexpected, well, just at a first glance. It is fired almost whenever you scroll a page in the mobile browser. My investigation revealed it&apos;s the correct behavior. It...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;window&lt;/code&gt; resize event behaves a bit unexpected, well, just at a first glance. It is fired almost whenever you scroll a page in the mobile browser. My investigation revealed it&apos;s the correct behavior. It&apos;s common for mobile browsers to show/hide omnibar or other toolbars while scrolling up &amp;amp; down which &lt;em&gt;does&lt;/em&gt; change the size of the visible area - thus &lt;a href=&quot;https://developers.google.com/web/updates/2016/12/url-bar-resizing?authuser=0&quot;&gt;firing the event &lt;em&gt;is&lt;/em&gt; expected&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item><item><title>0001</title><link>https://romanvesely.com/log/0001</link><guid isPermaLink="true">https://romanvesely.com/log/0001</guid><description>I was experimenting with CSS pseudo elements and generated content to find out if it is possible to use it as a base for other selectors - it isn&apos;t. Live example.
...</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://twitter.com/rmnvsl/status/1122487791152242688&quot;&gt;I was experimenting&lt;/a&gt; with CSS pseudo elements and generated content to find out if it is possible to use it as a base for other selectors - it isn&apos;t. &lt;a href=&quot;https://t.co/FriKFVU3MP?amp=1&quot;&gt;Live example&lt;/a&gt;.&lt;/p&gt;
</content:encoded><author>roman@romanvesely.com (Roman Veselý)</author></item></channel></rss>