<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: offen.software</title>
    <description>The latest articles on DEV Community by offen.software (@offen-software).</description>
    <link>https://dev.to/offen-software</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F350497%2F14479633-d351-42d4-9eec-c20acae69157.png</url>
      <title>DEV Community: offen.software</title>
      <link>https://dev.to/offen-software</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/offen-software"/>
    <language>en</language>
    <item>
      <title>Keeping track</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Mon, 31 Oct 2022 10:36:24 +0000</pubDate>
      <link>https://dev.to/offen-software/keeping-track-27od</link>
      <guid>https://dev.to/offen-software/keeping-track-27od</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0240"&gt;Offen,&lt;/a&gt; a fair and self hosted web analytics software that treats operators and users as equal parties. Here's what's been happening over the past five months. &lt;/p&gt;

&lt;p&gt;We are very pleased that &lt;a href="https://twitter.com/appwrite"&gt;@appwrite&lt;/a&gt; is supporting us as part of their initiative to promote the Open Source community. Big thanks guys for being our first &lt;a href="https://github.com/sponsors/offen"&gt;GitHub sponsor!&lt;/a&gt; We really appreciate the &lt;a href="https://dev.to/appwrite/appwrite-loves-open-source-why-i-chose-to-sponsor-offen-5efn"&gt;recognition&lt;/a&gt; and generous funding. It helps us to continue to improve Offen Fair Web Ananlytics and make the web a better place.&lt;/p&gt;

&lt;p&gt;Users of Firefox, Chrome and Edge can now install our companion browser extension &lt;strong&gt;Offen Istant Access&lt;/strong&gt; that keeps track of all Offen Fair Web Ananlytics instances they have visited. The extension detects if there is an official installation running on the currently open website and displays a link to the dedicated Auditorium. &lt;a href="https://www.offen.dev/blog/instant-access/?utm_source=forum&amp;amp;utm_campaign=0240"&gt;Read our Offen blog post to learn more.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, our consent banner and the Auditorium for operators as well as users can be displayed in one more locale. Offen is now available in English, French, German, Portuguese, Spanish and, most recently, &lt;strong&gt;Vietnamese.&lt;/strong&gt; Thanks to the wonderful contribution by &lt;a href="https://github.com/hiensarahly"&gt;@hiensarahly&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

&lt;p&gt;As always, be sure to stay tuned and follow us here or on &lt;a href="https://twitter.com/hioffen"&gt;Twitter&lt;/a&gt; and &lt;a href="https://fosstodon.org/@offen"&gt;Mastodon&lt;/a&gt; for the next release updates.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Introducing the Offen Consent Tool</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Mon, 20 Jun 2022 13:10:16 +0000</pubDate>
      <link>https://dev.to/offen-software/introducing-the-offen-consent-tool-5bal</link>
      <guid>https://dev.to/offen-software/introducing-the-offen-consent-tool-5bal</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=socialmedia&amp;amp;utm_campaign=0230"&gt;Offen,&lt;/a&gt; a fair web analytics software that treats operators and users as equal parties. Operators can gain insights into how users interact with their services, while ensuring that they retain full control over their data.&lt;/p&gt;

&lt;p&gt;Along the way, we created the &lt;strong&gt;Offen Consent Tool&lt;/strong&gt;. A lightweight solution for managing user consent on websites. Read the full version of &lt;a href="https://www.offen.dev/blog/consent-tool/?utm_source=forum&amp;amp;utm_campaign=0230"&gt;this article on the Offen blog.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Tool is using 1st Party Cookies to store user's consent decisions. To enable this mechanism, you need to deploy the respective server to a sibling domain, i.e. if you plan to use the tool on &lt;code&gt;www.example.com&lt;/code&gt;, it should be served on a domain like &lt;code&gt;consent.example.com&lt;/code&gt;. The tool can serve any number of domains at once, so it's possible to use the same deployment for multiple domains at once.&lt;/p&gt;

&lt;p&gt;Next deploy the application to a domain like &lt;code&gt;consent.example.com&lt;/code&gt;. On the host site &lt;code&gt;www.example.com&lt;/code&gt; embed the client script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://consent.example.com/client.js"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which exposed &lt;code&gt;window.ConsentClient&lt;/code&gt;. In your client side code, construct a new client instance pointing at your deployment and request user consent for the desired scope(s):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ConsentClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://consent.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;acquire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;analytics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marketing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;decisions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decisions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// load analytics data&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decisions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;marketing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// trigger marketing tools&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;Offen Consent Tool&lt;/strong&gt; further allows you to create the binary yourself and provides a development setup. It can also be used as a library and be integrated into any web server written in Golang. &lt;a href="https://github.com/offen/consent"&gt;Learn more&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read the Docs for further assistance with installation and use. &lt;a href="https://github.com/offen/consent/blob/main/MANUAL.md"&gt;Open Docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any feedback, comments or bug reports about this or other project, we would love to hear from you. Open an &lt;a href="https://github.com/offen/consent/issues"&gt;issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Celebrating v1.0.0</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Mon, 04 Apr 2022 12:50:01 +0000</pubDate>
      <link>https://dev.to/offen-software/celebrating-v100-4pl9</link>
      <guid>https://dev.to/offen-software/celebrating-v100-4pl9</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0220"&gt;Offen,&lt;/a&gt; a fair and self hosted web analytics software that treats operators and users as equal parties. Here's what's been happening over the past four months. Read the full version of &lt;a href="https://www.offen.dev/blog/complete-stable/?utm_source=forum&amp;amp;utm_campaign=0220"&gt;this article on the Offen blog.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Yes, you have read correctly. Offen v1.0.0 is here! Altough this does not bring major changes, we have decided to keep Offen and its configuration APIs stable for now. That means you will always be able to upgrade a v1 instance to a later v1 version without any further steps required.&lt;/p&gt;

&lt;p&gt;Obviously, the development of Offen is not finished with ther current v1.0.0 version. We will continue to maintain the project and adapt it to new requirements. For this we also need your support. Continue to test and install Offen &lt;a href="https://github.com/offen/offen/releases/tag/v1.0.0"&gt;latest releases&lt;/a&gt; and share your experience with us.&lt;/p&gt;

&lt;p&gt;Furthermore, our consent banner and the Auditorium for operators as well as users can now be displayed in two more locales. Offen is available in English, German, French and recently also in Spanish and Portuguese.&lt;/p&gt;

&lt;p&gt;Maybe now would be a good time to look back on the past 2 years. However, since we are already working on projects that take the idea behind Offen even further, writing a project summary is postponed for the time being. In the meantime, we suggest taking a look at this &lt;a href="https://www.offen.dev/blog/our-story-so-far/?utm_source=forum&amp;amp;utm_campaign=0220"&gt;interim retrospective&lt;/a&gt; and our &lt;a href="https://www.analyticstxt.org/"&gt;analytics.txt&lt;/a&gt; project. Also be sure to stay tuned and follow us here or on &lt;a href="https://twitter.com/hioffen"&gt;Twitter&lt;/a&gt; and &lt;a href="https://fosstodon.org/@offen"&gt;Mastodon&lt;/a&gt; for the next release updates.&lt;br&gt;
_&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Introducing the Offen Protocol</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Tue, 18 Jan 2022 09:10:24 +0000</pubDate>
      <link>https://dev.to/offen-software/introducing-the-offen-protocol-3inm</link>
      <guid>https://dev.to/offen-software/introducing-the-offen-protocol-3inm</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=210"&gt;Offen,&lt;/a&gt; a fair and lightweight web analytics software that treats operators and users as equal parties. Along the way, we discovered many subtleties and details to consider and created the Offen Protocol for all software out there that aims to handle usage data in a transparent way. Read the full version of &lt;a href="https://www.offen.dev/blog/offen-protocol/?utm_source=forum&amp;amp;utm_campaign=210"&gt;this article on the Offen blog.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The underlying concept is the definition of five actions that clients can take when they interact with a server that processes their data. These actions correspond to the rights of the data subject as defined by GDPR.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Probe&lt;/strong&gt; is used to request additional information about the service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Register&lt;/strong&gt; is used when a client wants to make itself known to the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit&lt;/strong&gt; is the action taken when a client transfers data to the client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query&lt;/strong&gt; will be used when clients want to query the server for data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Purge&lt;/strong&gt; can be used by clients that want to initiate removal of data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full specification document can be &lt;a href="https://offen.github.io/protocol/"&gt;found on the website&lt;/a&gt;. The protocol is not overly complicated and is perhaps even more of a convention than a specification. However, we have extracted what we use in Offen and added these implementations to the &lt;a href="https://github.com/offen/protocol"&gt;GitHub repository&lt;/a&gt;, which also contains the specification itself.&lt;/p&gt;

&lt;p&gt;Please let us know what you think. We’re happy to open the discussion: &lt;a href="https://twitter.com/hioffen"&gt;tweet at us&lt;/a&gt;, send us &lt;a href="//mailto:hioffen@posteo.de"&gt;an email&lt;/a&gt;, or &lt;a href="https://github.com/offen/protocol"&gt;open an issue on the GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Meeting our standards</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Thu, 04 Nov 2021 21:10:01 +0000</pubDate>
      <link>https://dev.to/offen-software/meeting-our-standards-pei</link>
      <guid>https://dev.to/offen-software/meeting-our-standards-pei</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0200"&gt;Offen,&lt;/a&gt; a fair and lightweight web analytics software that treats operators and users as equal parties. Here is what we have achieved in the past weeks. &lt;/p&gt;

&lt;p&gt;Statistics about the location of visitors had been on our to-do list for a fairly long time. Yet implementing it in a way that met our privacy standards proved to be a veritable challenge. After &lt;a href="https://github.com/offen/offen/issues/423"&gt;careful consideration&lt;/a&gt; and intense research, we finally decided on an approach based on time zones.&lt;/p&gt;

&lt;p&gt;To derive the geographical location, this method does not rely on an IP database, but asks the browser for the selected time zone and tries to assign it to a country. This fully protects the privacy of users and provides sufficiently accurate results for analysis as well.&lt;/p&gt;

&lt;p&gt;Furthermore, we have addressed the issue of user awareness in Offen. Since the only direct link to the User Auditorium is in the consent banner, it was important for us to provide additional features to increase the attention of users. Widgets now give operators the opportunity to easily integrate a reference to the User Auditorium. Preferably with a link on every page.&lt;/p&gt;

&lt;p&gt;While there are still a few improvements on the agenda, with the implementation of location statistics we are a major step closer to v1.0. Be sure to stay tuned and follow us here or on &lt;a href="https://twitter.com/hioffen"&gt;Twitter&lt;/a&gt; and &lt;a href="https://fosstodon.org/@offen"&gt;Mastodon&lt;/a&gt; for the next release updates.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Cohorts and customisation</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Tue, 29 Jun 2021 10:54:58 +0000</pubDate>
      <link>https://dev.to/offen-software/cohorts-and-customisation-1ode</link>
      <guid>https://dev.to/offen-software/cohorts-and-customisation-1ode</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0190"&gt;Offen,&lt;/a&gt; a fair and lightweight web analytics software that treats operators and users as equal parties. Here's a brief glimpse of our achievements over the last ten weeks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customisable consent banner
&lt;/h3&gt;

&lt;p&gt;To make it more convenient for operators to implement Offen in their websites, banners can now be freely adapted via CSS. This is done within some limits to ensure readability and functionality of the banner. Discover your inner artist and adapt the consent banner to the design of your website. &lt;a href="https://docs.offen.dev/running-offen/customizing-consent-banner/?utm_source=forum&amp;amp;utm_campaign=0190"&gt;Learn more in our Docs.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Explore cohorts
&lt;/h3&gt;

&lt;p&gt;It is now possible for operators to filter the collected usage data based on URL, referrer, UTM parameters and landings as well as exits. In addition, we have added the tag "None" as a fallback for referrer values that are not supplied. Filters can be set and removed by clicking on the corresponding link element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engage in dialogue
&lt;/h3&gt;

&lt;p&gt;We aim to bring Open and the idea of fair data transfer closer to an interested audience. To do this, we want to engage in a dialogue with operators, users and activists and are looking for suitable events around the world. We are happy to receive recommendations for relevant lectures and conferences. Got something in mind that we should apply for? &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0190"&gt;Please let us know.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>How to make your open source project contributor friendly 🤗</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Wed, 09 Jun 2021 10:19:35 +0000</pubDate>
      <link>https://dev.to/offen-software/how-to-make-your-open-source-project-contributor-friendly-4fp7</link>
      <guid>https://dev.to/offen-software/how-to-make-your-open-source-project-contributor-friendly-4fp7</guid>
      <description>&lt;p&gt;There are many reasons that may lead you to the decision to run a project in an open source fashion. You might want to make your application code available to public to increase trust, or make it especially easy to distribute your library to increase usage. Another common motivation is to establish &lt;strong&gt;a healthy community of contributors around your project&lt;/strong&gt;, allowing you to solicit feedback, make your project more diverse and maybe also distribute the burden of maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributions are not only about writing code
&lt;/h2&gt;

&lt;p&gt;Before we talk about how to be friendly to contributors, let’s take a quick detour to define what a contribution to an open source project actually is in the first place. Oftentimes, contributing to an open source project seems to be synonym with opening a Pull Request that fixes a bug or adds a feature. To us, it means a lot more than that. Opening an issue about how something does not work for you is a meaningful contribution as well. Proofreading documentation is just as important as writing code. Offering help to localize the project in a different language is a major contribution. Leaving product feedback, both praise and criticism contribute to moving a project forward. &lt;strong&gt;So when we talk about a contributor friendly project, we talk about all of these means of contributing, not only about writing code.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Things we try to do in &lt;code&gt;offen/offen&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.offen.dev/?utm_source=socialmedia&amp;amp;utm_campaign=0185"&gt;Offen&lt;/a&gt; is a fair and lightweight alternative to common web analytics tools. It’s self hosted software and all code is available at the &lt;a href="https://github.com/offen/offen"&gt;offen/offen repository on GitHub&lt;/a&gt;. In this constellation, feedback and participation is especially important for us. In this article we’d like to share &lt;strong&gt;what we do to make our repo friendly and welcoming towards any kind of contribution&lt;/strong&gt; from the community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Head first in the README, in-depth docs for later
&lt;/h3&gt;

&lt;p&gt;Striking the right balance between a brief introduction and an in-depth introduction is tough. If you have an idea and just want to get started, you don’t want to be bothered to read through detailed setup instructions. But if you have everything up and running, you probably would like to understand the how and the why of the project’s setup at some point.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;offen/offen&lt;/code&gt; we are catering both of those needs in different places. For people who just want to get things running as quickly as possible, we have &lt;a href="https://github.com/offen/offen#feedback-and-contributions-welcome"&gt;a short intro in our README&lt;/a&gt;. More in-depth explanations on the development setup and the application architecture have been collected in a dedicated &lt;a href="https://docs.offen.dev/developing-offen/?utm_source=socialmedia&amp;amp;utm_campaign=0185"&gt;documentation site for developers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This setup is also interesting because it will force you, the project maintainer, to answer two important questions: &lt;strong&gt;Can you get external contributors to get up and running with your setup in a few paragraphs? Can you also explain the setup and the architecture in-depth to outsiders in a way that it makes sense?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribution guidelines that are helpful and friendly
&lt;/h3&gt;

&lt;p&gt;An established and recommended practice is to have a &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file at the root level of your repository that has details about how to contribute to a project. This might seem like a trivial thing to write, but we found in reality it’s a tricky task to come up with something that is both inviting and helpful for potential contributors.&lt;/p&gt;

&lt;p&gt;Often times, documents like this focus on what potential contributors should not do: Don’t open a PR without an issue, don’t open an issue without having searched the existing ones. Those are valid points from a project management perspective and also help the contributors themselves manage the repository. However, &lt;strong&gt;phrasing all of this as a list of "donts" and "only ifs" exclusively will subconsciously deter people from contributing&lt;/strong&gt;. What would you prefer: a duplicate issue from time to time, or no issues at all being raised because users are too scared of doing the wrong thing? Also: do not forget to invite people to making non-code contributions as well.&lt;/p&gt;

&lt;p&gt;Check our &lt;a href="https://github.com/offen/offen/blob/development/CONTRIBUTING.md"&gt;contribution guidelines&lt;/a&gt; for an idea of how we approach this. We also have a &lt;a href="https://github.com/offen/offen/blob/development/CODE_OF_CONDUCT.md"&gt;Code of Conduct&lt;/a&gt; that defines the way we'd like to interact with people.&lt;/p&gt;

&lt;h3&gt;
  
  
  “Boring tech” is accessible
&lt;/h3&gt;

&lt;p&gt;If you want people to contribute code to your project, the choice of the tech you use is a major factor. Trying to make tech choices boring will help contributors to get started quickly, just because it’s already known to work, and also known how to work with.&lt;/p&gt;

&lt;p&gt;In our example, Offen is built as a server side application with a relatively complex frontend running in the browser. On the server we chose Go as a language and the Gin framework. Those might not be most exciting choices in tech, but they are optimized for easy setup, robustness and plenty of good documentation. As a contributor, this means that when I run into issues setting up the project, I will likely find answers online soon instead of having to wrangle some custom framework the maintainers came up with themselves.&lt;/p&gt;

&lt;p&gt;In our client side application we started out using the great, but slightly esoteric Choo framework, but soon migrated to Preact, just because the React ecosystem (Preact is a lightweight "clone" of React) is so ubiquitous and well-understood by a lot of people. We also do not use any fancy language features, but try to keep things simple so that you don't need to learn about brand new syntax constructs before you can contribute code. Think twice before you add something like TypeScript to a project you want to be accessible. Every additional layer - no matter how great or helpful they are for you who already knows how to use them - will make it harder for others to get started.&lt;/p&gt;

&lt;p&gt;This topic also extends to your project's local development setup. &lt;strong&gt;The more extra tools you need the less likely it is someone will try to get started setting up your project on their machine&lt;/strong&gt;. The setup should also work on all major OSes. A lot of people use Windows, some use Linux, many use a Mac, none of them should be left out. For Offen, we decided to use a &lt;code&gt;docker-compose&lt;/code&gt; based setup, which gives us a reproducible cross-OS setup without people having to install anything other than Docker. You can check the &lt;a href="https://github.com/offen/offen/blob/7e5a8b751db8aff0c347f3134fb586d26d60329d/docker-compose.yml"&gt;compose file&lt;/a&gt; in our repository to see how that looks like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Labels make issues discoverable
&lt;/h3&gt;

&lt;p&gt;In case you host your project on a platform like GitHub or GitLab, the repository’s issue tracker will likely be one of the most important ways of interacting with contributors. Writing clear and concise issues that do not require much insider knowledge is one thing, but &lt;strong&gt;how do you make these issues discoverable for anyone who wants to contribute to your project&lt;/strong&gt;? A common approach is to use labels for your issues.&lt;/p&gt;

&lt;p&gt;One aspect of labeling issues is conveying information that is specific to your project. What language would you need to be proficient with to work on the issue? Is the issue not related to code, but an ongoing discussion people could participate in?&lt;/p&gt;

&lt;p&gt;The other aspect of labeling is the external ecosystem that has evolved around GitHub issues. For example, sites like &lt;a href="https://up-for-grabs.net/#/"&gt;Up For Grabs&lt;/a&gt; allow anyone to search for issues labeled &lt;code&gt;help-wanted&lt;/code&gt; across all public repositories on GitHub. &lt;a href="https://goodfirstissue.dev/"&gt;Good first issue&lt;/a&gt; lets you find issues labeled &lt;code&gt;good first issue&lt;/code&gt; that are well suited for beginners. Applying such labels will connect you with others that otherwise wouldn’t know about your project in the first place.&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="https://github.com/offen/offen/issues"&gt;issue tracker&lt;/a&gt; of &lt;code&gt;offen/offen&lt;/code&gt; to see how we label our issues here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative means of getting in touch
&lt;/h3&gt;

&lt;p&gt;We use GitHub for hosting our repository, and while this makes both code and issues publicly visible for anyone, &lt;strong&gt;having a GitHub account should not be a requirement for contributing to the project&lt;/strong&gt;. Whenever we solicit feedback or contributions, we try to make it clear that people can also &lt;a href="//mailto:hioffen@posteo.de"&gt;email us&lt;/a&gt; (bonus points for providing a PGP key for those who prefer to use one), &lt;a href="https://twitter.com/hioffen"&gt;tweet at us&lt;/a&gt; or use &lt;a href="https://fosstodon.org/@offen"&gt;Mastodon&lt;/a&gt; to get in touch. Just because a service like GitHub or GitLab is free, it does not mean anyone can or wants to create an account with it. Having multiple feedback channels lowers the barrier of entry for anyone who wants to contribute.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you do to make your project contributor friendly?
&lt;/h2&gt;

&lt;p&gt;Do you run an open source project that is geared towards creating a community of contributors? What do you do to make it easy for anyone to make meaningful contributions?&lt;/p&gt;

&lt;p&gt;Let us know what you do, and also do not hesitate to start contributing your ideas and feedback about &lt;a href="https://www.offen.dev/?utm_source=socialmedia&amp;amp;utm_campaign=0185"&gt;Offen&lt;/a&gt;. We’d be happy to have you on board.&lt;/p&gt;

&lt;p&gt;Written by Frederik Ring&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>feedback</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Disclose what you collect</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Tue, 25 May 2021 10:21:46 +0000</pubDate>
      <link>https://dev.to/offen-software/disclose-what-you-collect-3p3j</link>
      <guid>https://dev.to/offen-software/disclose-what-you-collect-3p3j</guid>
      <description>&lt;p&gt;We are building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=180"&gt;Offen,&lt;/a&gt; a fair web analytics software that treats operators and users as equal parties. Operators can gain insights into how users interact with their services, while ensuring that they retain full control over their data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We have just drafted a standards proposition that will allow websites and services to disclose information about their use of analytics software and tracking software.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;As this relates to our work on Offen, we want to give some insight into this matter.&lt;/p&gt;

&lt;p&gt;The variety of privacy regulations worldwide and the consequently varying techniques for collecting usage data make web analytics a cluttered field. Terms such as "data protection" or "privacy-friendly" are widely used and show up regularly in consent banners and privacy statements of websites and services. &lt;/p&gt;

&lt;p&gt;Nevertheless, it is often difficult to find out what they really stand for in a specific case. Thats why we believe that a comprehensive description of the use of analytics and tracking is missing. It should be understandable for a non-technical audience, but also suitable for processing by software. &lt;/p&gt;

&lt;p&gt;Earlier this year, we started working on such a standard and named it &lt;code&gt;analytics.txt&lt;/code&gt;. For now, it is available as a draft and waits to be discussed. We are actively looking for reviewers and welcome any feedback. Feel welcomed to take this idea forward together and get in touch with us. For more information on the standard and its implementation, have a look on the dedicated website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.analyticstxt.org/?utm_source=forum&amp;amp;utm_campaign=180"&gt;View analyticstxt.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Automate backing up your Docker volumes</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Mon, 03 May 2021 09:44:58 +0000</pubDate>
      <link>https://dev.to/offen-software/automate-backing-up-your-docker-volumes-3gdk</link>
      <guid>https://dev.to/offen-software/automate-backing-up-your-docker-volumes-3gdk</guid>
      <description>&lt;p&gt;Docker is an ubiquitous tool for us while building &lt;a href="https://www.offen.dev/?utm_source=forum&amp;amp;utm_campaign=0175"&gt;Offen&lt;/a&gt;, a fair and open source web analytics software. It is foundational for &lt;a href="https://github.com/offen/offen"&gt;our development setup&lt;/a&gt;, but we also use it for &lt;a href="https://github.com/offen/deployment"&gt;deploying our own Offen instance&lt;/a&gt; to production.&lt;/p&gt;

&lt;p&gt;One thing that we found missing was a simple and lightweight tool for taking and managing remote backups of Docker volumes. This is why we wrote our own tool called &lt;a href="https://github.com/offen/docker-volume-backup"&gt;offen/docker-volume-backup&lt;/a&gt; which. In this post I'd like to introduce you to the tool and how to use it for automatically taking backups of the Docker volumes in your own setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction to Docker volumes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/storage/volumes/"&gt;Volumes&lt;/a&gt; are Docker's way of managing persistent data. As Docker containers themselves are ephemeral, volumes can be mounted into the container's filesystem, enabling you to persist data beyond the lifecycle of a container. Volumes are commonly used for storing database data or similar.&lt;/p&gt;

&lt;p&gt;For example, this is how you would use a Docker volume to persist data for an Offen container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume create offen_data
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; offen_data:/var/opt/offen &lt;span class="se"&gt;\&lt;/span&gt;
  offen/offen:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the running container, data stored in &lt;code&gt;/var/opt/offen&lt;/code&gt; will be persisted in the &lt;code&gt;offen_data&lt;/code&gt; volume and can be reused in other containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using &lt;code&gt;offen/docker-volume-backup&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/offen/docker-volume-backup"&gt;offen/docker-volume-backup&lt;/a&gt; is designed to run sidecared next to an application container and &lt;strong&gt;periodically take backups of volumes&lt;/strong&gt; to any &lt;strong&gt;S3 compatible storage&lt;/strong&gt; (i.e. AWS S3 itself or storages like &lt;a href="https://min.io/"&gt;MinIO&lt;/a&gt; or &lt;a href="https://ceph.io/"&gt;Ceph&lt;/a&gt;). It can run on any schedule you wish and it can also take care of &lt;strong&gt;rotating away old backups&lt;/strong&gt; after a configured retention period.&lt;/p&gt;

&lt;p&gt;If needed, it can &lt;strong&gt;temporarily stop&lt;/strong&gt; and restart your running containers to ensure backup integrity.&lt;/p&gt;

&lt;p&gt;Using alpine as the base image and using the MinIO client instead of AWS CLI for uploading files to the remote storage keeps the image &lt;strong&gt;small and lightweight&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Defining the sidecar container
&lt;/h3&gt;

&lt;p&gt;The easiest way of managing such a setup is using docker-compose. A compose file that backs up its volumes would look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;offen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;offen/offen:latest&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db:/var/opt/offen&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docker-volume-backup.stop-during-backup=true&lt;/span&gt;

    &lt;span class="na"&gt;backup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;offen/docker-volume-backup:v1.0.2&lt;/span&gt;
        &lt;span class="s"&gt;# Ideally, those values should go into an `env` file or Docker secrets&lt;/span&gt;
        &lt;span class="s"&gt;# as they contain credentials. It's easier to spell them out here&lt;/span&gt;
        &lt;span class="s"&gt;# in the context of this tutorial though.&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# A backup is taken each day at 2AM&lt;/span&gt;
            &lt;span class="na"&gt;BACKUP_CRON_EXPRESSION&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
            &lt;span class="c1"&gt;# Backups are stored with a timestamp appended&lt;/span&gt;
            &lt;span class="na"&gt;BACKUP_FILENAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;offen-db-%Y-%m-%dT%H-%M-%S.tar.gz"&lt;/span&gt;
            &lt;span class="c1"&gt;# Backups older than 7 days will be pruned.&lt;/span&gt;
            &lt;span class="c1"&gt;# If this value is not given, backup will be kept forever.&lt;/span&gt;
            &lt;span class="na"&gt;BACKUP_RETENTION_DAYS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;7"&lt;/span&gt;
            &lt;span class="c1"&gt;# Credentials for your storage backend&lt;/span&gt;
            &lt;span class="na"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_ACCESS_KEY&amp;gt;"&lt;/span&gt;
            &lt;span class="na"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_SECRET_KEY&amp;gt;"&lt;/span&gt;
            &lt;span class="na"&gt;AWS_S3_BUCKET_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-backups"&lt;/span&gt;
            &lt;span class="c1"&gt;# If given, backups are encrypted using GPG&lt;/span&gt;
            &lt;span class="na"&gt;GPG_PASSPHRASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;SOME_KEY&amp;gt;"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# This allows the tool to stop and restart all&lt;/span&gt;
            &lt;span class="c1"&gt;# containers labeled as docker-volume-backup.stop-during-backup&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;
            &lt;span class="s"&gt;# All volumes mounted to /backup/&amp;lt;some-name&amp;gt; will be backed up&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db:/backup/offen-db:ro&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, you can also use the image using plain Docker commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume create offen_data
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; offen_data:/var/opt/offen &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-l&lt;/span&gt; docker-volume-backup.stop-during-backup&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
  &lt;/span&gt;offen/offen:latest
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; offen_data:/backup/offen-db:ro &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /var/run/docker.sock:/var/run/docker.sock:ro &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env-file&lt;/span&gt; backup.env &lt;span class="se"&gt;\&lt;/span&gt;
  offen/docker-volume-backup:v1.0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Manually triggering a backup
&lt;/h3&gt;

&lt;p&gt;Instead of running the backups on a regular schedule, you can also execute the command in a running container yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &amp;lt;container_ref&amp;gt; backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Restoring a volume from a backup
&lt;/h3&gt;

&lt;p&gt;To recover from a backup, download and untar the backup file and copy its contents back into the docker volume using a one-off container created for just that purpose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; backup_restore &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; offen_data:/backup_restore
  alpine
docker &lt;span class="nb"&gt;cp&lt;/span&gt; &amp;lt;location_of_your_unpacked_backup&amp;gt; backup_restore:/backup_restore
docker stop backup_restore &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker &lt;span class="nb"&gt;rm &lt;/span&gt;backup_restore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The volume is now ready to use in other containers. Alternatively, you can use a one-off volume created beforehand.&lt;/p&gt;

&lt;h3&gt;
  
  
  More information
&lt;/h3&gt;

&lt;p&gt;Detailed documentation and the source code is available at the &lt;a href="https://github.com/offen/docker-volume-backup"&gt;GitHub repository&lt;/a&gt; and at &lt;a href="https://hub.docker.com/r/offen/docker-volume-backup"&gt;Docker Hub&lt;/a&gt;. Source code is licensed under the Mozilla Public License 2.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Knowing you have remote backups around in case of unexpected infrastructure glitches helps moving forward with confidence and not too much worry. I hope this article demonstrated that adding them to your Docker setup is only a matter of configuring an additional container, and helps you get going with your backups so you can move forward with your product.&lt;/p&gt;

&lt;p&gt;Written by Frederik Ring&lt;/p&gt;

</description>
      <category>docker</category>
      <category>containers</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Broaden the view</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Wed, 21 Apr 2021 12:14:54 +0000</pubDate>
      <link>https://dev.to/offen-software/broaden-the-view-21h7</link>
      <guid>https://dev.to/offen-software/broaden-the-view-21h7</guid>
      <description>&lt;p&gt;We develop &lt;a href="https://www.offen.dev/?utm_source=forum"&gt;Offen&lt;/a&gt;, a fair and self hosted web analytics software that treats operators and users as equal parties. Here's what's been happening over the past eight weeks. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Widescreen&lt;/strong&gt;&lt;br&gt;
We have further optimized our display features. The Auditorium for operators now makes better use of screen real estate on desktop devices. Also, we have optimized the display of bar charts in mobile view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offen is now available in German, English and recently also in French.&lt;/strong&gt;&lt;br&gt;
Our consent banner and the Auditorium for operators and users are available in the respective language. If you would like to support our fair approach to web analytics by contributing Spanish, Portuguese or other language versions, please do not hesitate to &lt;a href="https://www.offen.dev/?utm_source=forum"&gt;request an invite.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More secure&lt;/strong&gt;&lt;br&gt;
Our Docker image of the application are so far running as &lt;code&gt;root.&lt;/code&gt; This would theoretically give the possibility to inject malicious code into Offen.&lt;br&gt;
&lt;em&gt;This did not happen in any Offen version.&lt;/em&gt; But to fix this possible vulnerability, all images published from now on will run the application as a non-privileged &lt;code&gt;offen&lt;/code&gt; user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coming up&lt;/strong&gt;&lt;br&gt;
We want to present Offen and the idea of fair data transfer behind it to a professional audienc. Recommendations for relevant talks and conferences worldwide are very welcome. Got something in mind that we should apply for? &lt;a href="https://www.offen.dev/?utm_source=forum"&gt;Let us know.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>How it all began</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Wed, 10 Mar 2021 10:41:48 +0000</pubDate>
      <link>https://dev.to/offen-software/how-it-all-began-4pem</link>
      <guid>https://dev.to/offen-software/how-it-all-began-4pem</guid>
      <description>&lt;p&gt;Here's how we came to develop &lt;a href="https://www.offen.dev/?utm_source=forum"&gt;Offen, a fair and open source web analytics software.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Privacy issues on the web have been a talking point for some time now. Since we have both been running websites for quite some time, this has always been a topic for us as well. Thats why the choice of which web analytics tool to use has always been a very important consideration for us.&lt;/p&gt;

&lt;p&gt;So in 2018, while once again searching for a new analytics tool, we found that there was no offering that allowed for a really fair data transfer between website operator and website user. That got us thinking. Of course, as website operators, we had an interest in seeing what was happening on our pages. Obviously, we wanted to know how we could improve what we offer. But couldn't this be done in a fair way, treating operators and users as equal parties?&lt;/p&gt;

&lt;p&gt;Another few months had to pass and by the end of 2018, after further in-depth research, we were convinced. Yes, of course it was possible. And if it didn't exist yet, we should build it ourselves! So we started looking for support to build our own tool. And as we dug deeper, we were amazed at how many funding sources for developing open source software exist around the world. Nevertheless, there are of course a lot of applicants. That is why we believe that one has to think carefully about one's application.&lt;/p&gt;

&lt;p&gt;That's why we focused on one German and a few international calls for proposals. And by summer 2019, we had submitted a few applications. To our great delight, our application to the &lt;a href="https://nlnet.nl/PET/"&gt;NGI Zero Privacy &amp;amp; Trust Fund of the Dutch NLnet Foundation&lt;/a&gt; was finally successful. What happened next is covered in detail &lt;a href="https://www.offen.dev/blog/?utm_source=forum"&gt;on our blog.&lt;/a&gt; In summary, it has been a great experience that is far from over. &lt;/p&gt;

&lt;p&gt;Being able to secure funding for your non-commercial open source project gives you the distance you need to think more deeply about how you can create a real alternative to existing solutions. A constellation that we can only recommend to every developer out there.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Improving interfaces</title>
      <dc:creator>offen.software</dc:creator>
      <pubDate>Mon, 08 Feb 2021 11:30:28 +0000</pubDate>
      <link>https://dev.to/offen-software/improving-interfaces-16ad</link>
      <guid>https://dev.to/offen-software/improving-interfaces-16ad</guid>
      <description>&lt;p&gt;We develop a fair and lightweight web analytics software called &lt;a href="https://www.offen.dev/?utm_source=forum"&gt;Offen&lt;/a&gt; that treats operators and users as equal parties. Here is a glance at what has been happening over the last six weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offen is now also available in English and German.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Our consent banner and the Auditorium for operators and users are available in the respective language. A further locale, Indonesian, is in the works at the moment. If you would like to support our fair approach to web analytics by contributing French, Spanish or other language versions, please do not hesitate to request an invite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom time intervals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To further develop Offen into a fully competitive analytics tool, we still have some essential UX improvements on our to-do list. In the last few weeks, we have been implementing just one of them. Using the new feature, you can now easily display customised intervals of existing data. In addition, we have revised the choice of default time periods. As always, we welcome feedback on usability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experimental JS API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those who would like a little more precision in exercising user consent, here's some good news. Offen captures a consent decision from the user automatically and gathers pageviews if consent is granted. Now, for finer control, you can instead use the JavaScript API provided by the Offen script and trigger a pageview event all by yourself. &lt;a href="https://docs.offen.dev/running-offen/embedding-the-script/#triggering-pageviews-using-the-javascript-api/?utm_source=forum"&gt;Read more about this in our docs.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
