From 04676e480939807f928760fbbefc96dd1bfc7554 Mon Sep 17 00:00:00 2001 From: hendr-ik Date: Tue, 16 Mar 2021 10:52:53 +0100 Subject: [PATCH] update headlines in blog content --- homepage/content/articles/0010-milestone-1.md | 18 ++++----- .../content/articles/0020-untold-roads.md | 36 ++++++++--------- homepage/content/articles/0030-milestone-2.md | 22 +++++----- .../content/articles/0040-test-offen-today.md | 4 +- homepage/content/articles/0050-milestone-3.md | 40 +++++++++---------- homepage/content/articles/0060-milestone-4.md | 30 +++++++------- homepage/content/articles/0070-budget.md | 20 +++++----- homepage/content/articles/0080-beta.md | 2 +- homepage/content/articles/0090-milestone-5.md | 30 +++++++------- homepage/content/articles/0100-matomo.md | 6 +-- homepage/content/articles/0110-milestone-6.md | 28 ++++++------- .../content/articles/0120-opt-in-quality.md | 2 +- homepage/content/articles/0130-performance.md | 24 +++++------ homepage/content/articles/0150-interfaces.md | 20 +++++----- homepage/pelicanconf.py | 2 +- 15 files changed, 142 insertions(+), 142 deletions(-) diff --git a/homepage/content/articles/0010-milestone-1.md b/homepage/content/articles/0010-milestone-1.md index b60a68e..167753d 100644 --- a/homepage/content/articles/0010-milestone-1.md +++ b/homepage/content/articles/0010-milestone-1.md @@ -8,34 +8,34 @@ image_url: /theme/images/offen-blog-0010-milestone1.jpg author: Hendrik Niefeld bottom_cta: blog -# Episode One — Laying the foundation for fair web analytics +## Episode One — Laying the foundation for fair web analytics Milestone 1 is completed. This is what we've achieved in the last six weeks. --- -### Extension through middleware +#### Extension through middleware We have further refined the existing application architecture to make it more robust and accessible to both contributors and people who want to build upon Offen. As a developer, you can transparently control additional behavior by adding or removing middleware. -### Easy to test drive +#### Easy to test drive Download a single binary file and run it on your local computer to get an Offen instance up and running immediately. At the moment this setup only supports Linux. Windows and MacOS will follow soon. -[Download binary](https://8342-180605180-gh.circle-artifacts.com/0/tmp/artifacts/offen-stable.tar.gz){: target="_blank" data-button="outline"} +[Download binary](https://8342-180605180-gh.circle-artifacts.com/0/tmp/artifacts/offen-stable.tar.gz){: target="_blank" data-button="outline"} -### Develop without complex setup +#### Develop without complex setup Docker and Docker-Compose are the only hard requirement for you to develop Offen. We have successfully tested this setup under Linux, Windows and MacOS. Head over to our wiki for instructions how to get the setup up and running. [Open wiki](https://github.com/offen/offen/wiki/Developing-offen#setup){: target="_blank" data-button="outline"} -### Lightweight and accessible interfaces +#### Lightweight and accessible interfaces The *Auditorium* is ready for a dry run. It's a functional prototype for accessing and managing user data. We opted for [Choo](https://choo.io/){: target="_blank"} as the application framework and [Tachyons](https://tachyons.io/){: target="_blank"} as the CSS framework. -### Ready to localize +#### Ready to localize You can now localize all user-related content in server- and client-side applications. At the moment English is the only supported locale, but we would be happy to add more locales soon. Contributors wanted after milestone 3 is completed. [Get in touch](mailto:hioffen@posteo.de){: data-button="outline"} -### Read the docs +#### Read the docs The work on our wiki has started. Including documentation for [developers](https://github.com/offen/offen/wiki/Developing-offen){: target="_blank"} as well as for [website operators](https://github.com/offen/offen/wiki/Running-offen){: target="_blank"} who want to deploy and run Offen. -### No reverse proxy required +#### No reverse proxy required We have further hardened and improved the HTTP server that Offen exposes. If you want to, you can already expose this server to the Internet without having to run a reverse proxy in front of it. ### Up next diff --git a/homepage/content/articles/0020-untold-roads.md b/homepage/content/articles/0020-untold-roads.md index 4ea3661..b63b7c0 100644 --- a/homepage/content/articles/0020-untold-roads.md +++ b/homepage/content/articles/0020-untold-roads.md @@ -8,7 +8,7 @@ image_url: /theme/images/offen-blog-0020-untoldRoads.jpg author: Frederik Ring bottom_cta: blog -# Untold roads to v1.0 +## Untold roads to v1.0 After a lot of experimenting, taking detours and having unanticipated revelations while building the foundation for Offen over the last months, the state of the project is starting to settle, and we are eager to get ready for users to install our software, and use it for transparently collecting usage statistics for their websites and applications. @@ -18,7 +18,7 @@ While there is lots of theory and writing about how to version and release softw --- -## Happy hacking in Alpha +### Happy hacking in Alpha In the earliest stage of any project, you will still be figuring out the interfaces your software has to the outside world. Requirements will evolve, be defined and change yet again - and so will your interfaces. Which is fine for quite a while: as long as your development setup allows you to recreate a fresh environment to work against easily, you are free to break basically anything with every commit. @@ -28,23 +28,23 @@ The only decision that affects the outside world at this point is the following: Lots of ways to break your software -## Lots of ways to break your software +### Lots of ways to break your software Another thing you will need to think about before you can even start versioning your software are the interfaces you expect your users to use, and those that your users will actually use. Just because you do not document a method of your library, it doesn't necessarily mean it will not be used in the wild. And just because your database migration script assumes a well defined set of tables in the application database, it doesn't mean some user might have started storing other data in there. Applications like Offen will have different constraints than libraries or developer tools do. It's important to know if *you need to interface with data, code or humans* as all of these interfaces come with their own set of constraints. Steering the code being written and the interfaces exposed into a direction where its usage is as unambiguous as possible will pay off when it comes to knowing what you can actually break with a release. If you explicitly consider something to be unstable and internal, communicating this clearly will be of great help to anyone who's trying to use your product or build upon it. -## When do you even start versioning? +### When do you even start versioning? If you develop software, you want others to use it. If you're a user, you want your software to be reliably versioned and updated. This means that at some point, a project will have to start versioning, and its *users will start to project their expectations onto the version numbers being applied*. When exactly you choose to start doing this depends on what you are focusing on. -### Feature completeness +#### Feature completeness Depending on your product, it might not make sense to use it before all of the features you are planning to build are included. Venturing down this path, it's a good opportunity for deferring versioning a little longer. If the lack of features makes adoption impossible anyways, you won't hurt it any further if you don't release versioned software. -### Establishing a userbase +#### Establishing a userbase Alternatively - assuming your product allows you to do so - you might also want to start shipping way before you are feature complete, establish a userbase, and gain understanding on what these users are doing with your product. These insights come with a price: you need to start versioning. Users that don't have clear and documented ways of upgrading their software without any unexpected surprises stop being users once the version they are using stops being on par with what both you and others are offering. If it's just as easy to install something else as it would be to upgrade to a newer version, why should your users stick? @@ -54,7 +54,7 @@ Just like when working without any approach to versioning *communicating what yo Detour -## Detour: What's in a version number +### Detour: What's in a version number If you're planning to label a release with a version number any time soon, it's a good idea to reflect on what this new version number actually means. Both to you, and to your users. @@ -70,21 +70,21 @@ If this appeals to you, and makes versioning sound like a solved problem for you Another important factor to consider here is which target audience you are actually serving. Will non-technical people really value a version number that tells them about API stability, upgrade paths and such? Could a product like Microsoft Windows really work with such a purely technical versioning scheme? If your audience is far, far away from implementation details, they are probably just interested in you making it work for them. -### SemVer and early stage software +#### SemVer and early stage software For what their spec calls "initial development", SemVer uses `0.x.x` versions that come with no guarantees at all, which in the scope of this article doesn't leave us with much but the underlying concepts of *breaking changes, features and patches*. Certain scenarios might want to map these to a pre-v1 scheme or at least adopt the same vocabulary when communicating about the changes included in a new release in your changelog. --- -## Flexibility vs Stability +### Flexibility vs Stability -Moving towards a v1.0 every slightly larger project will find itself oscillating between these two goals. What makes decisions in this regard even harder is the fact that both opposites are of equal importance to your project. *Adding new features to a product requires flexibility and stability* at the same time. +Moving towards a v1.0 every slightly larger project will find itself oscillating between these two goals. What makes decisions in this regard even harder is the fact that both opposites are of equal importance to your project. *Adding new features to a product requires flexibility and stability* at the same time. A common approach towards solving this antagonism is the introduction of budgets for both sides. Maybe each iteration has a dedicated budget for breakage and experimenting, just like it has a budget for areas that remain stable and will only change when their interfaces can be guaranteed to stay the same. Maybe every other iteration will focus on stability while the alternating ones will allow for breakage and experimenting. The latter is a concept adopted early on by the Node.js project where an odd version number will signal "punk rock", i.e. unstable and rapid progress, and even version numbers will signal "Fortune 500", i.e. stability. -Whatever approach a project picks, finding a suitable way of balancing these two requirements will be a major enabler of adoption. +Whatever approach a project picks, finding a suitable way of balancing these two requirements will be a major enabler of adoption. -## Migration plans and pains +### Migration plans and pains Sometimes, breakage you want to or have to introduce, can be cushioned softly when you are able to supply *scripts and tooling for users* to adjust their setup so that is is compatible with a new version. @@ -94,7 +94,7 @@ The same can be done for configuration changes. If an update requires new or cha Eat your own dogfood -## Eat your own dogfood +### Eat your own dogfood While this is a scenario you cannot easily create just for its own sake, a setup where *you are a user of your own product* - a.k.a. dogfooding - will be pretty insightful in this context. @@ -102,7 +102,7 @@ You as a user will certainly cover only a single use case, yet this one use case Keep in mind though that when you represent one usecase, the first hand knowledge your userbase has can give you the big picture. If your project allows, reach out to them and gain understanding on what they actually do and how it compares to what you think they do. -## 1.0 like you mean it +### 1.0 like you mean it It's impossible to tell how your project will get to a v1.0, but it's very likely it will do so at some point. This will likely feel very good, but *putting that label onto a piece of software will come with certain expectations*. @@ -110,7 +110,7 @@ If you can embrace v1.0 and all the new requirements it brings, they will allow --- -## How we are going to version Offen +### How we are going to version Offen Offen's main channel of distribution will be via packaged binary files. Users can run them supervised or unsupervised against a supported set of OSes and database solutions. While we are indeed planning to enable the use Offen's code as the building blocks for other developers to create tailor made, privacy friendly analytics solutions, versioning the code-level interfaces is a non-goal for us at the moment. @@ -123,11 +123,11 @@ Upgrade paths for our users will mostly be bound to the event and key data that - The `/script.js` URI exposed by the web server is locked so that pages that embed the script can always expect a sensible response. We will try to keep the rest of the exposed routes stable, yet if it helps us improving the product in some way, we will change these too. - The development setup is kept subject to change at any time. Renaming a `make` target may be annoying to contributors once, but we prefer to keep things lean in this regard, and we hope our contributors will do the same. -### Initial development +#### Initial development Right now, Offen is still in the stages of initial development. During this period we will *release an alpha version on each milestone* we hit. We invite users to start using Offen by deploying these releases (or by building any revision themselves), but we also need to make sure that while we are still in initial development, we will possibly *introduce breaking changes* or changes that are *hard to upgrade*. -### From v0.1 to v1.0 +#### From v0.1 to v1.0 Once all features we deem necessary for Offen to be used in the wild are included, we are planning to continue as following: kicking off, we will release an officially supported *v0.1.0*. @@ -145,6 +145,6 @@ We definitely do invite you to start experimenting with Offen right now and also --- -## Where are we right now? +### Where are we right now? Laying out detailed plans for the future is one thing, seeing how they came into life and changed is yet another. If you want to see how we managed to translate the plans described above into reality check our [GitHub repository](https://github.com/offen/offen) and the [releases we have done by now](https://github.com/offen/offen/releases). diff --git a/homepage/content/articles/0030-milestone-2.md b/homepage/content/articles/0030-milestone-2.md index 892ba64..b8d3421 100644 --- a/homepage/content/articles/0030-milestone-2.md +++ b/homepage/content/articles/0030-milestone-2.md @@ -8,36 +8,36 @@ image_url: /theme/images/offen-blog-0030-milestone-2.jpg author: Hendrik Niefeld bottom_cta: blog -# Episode Two — Collecting data securely +## Episode Two — Collecting data securely We finished milestone 2. Here is what we' ve been doing for the last 8 weeks. --- -### Collecting data only with consent +#### Collecting data only with consent A first approach to one of our major features is implemented. Websites that embed the Offen script now display a user consent banner. In case of user's deny, no other requests than loading the script are made from then on. -[Learn more](https://offen.offen.dev/){: target="_blank" data-button="outline"} +[Learn more](https://offen.offen.dev/){: target="_blank" data-button="outline"} -### Accidental leaks don't expose data +#### Accidental leaks don't expose data We encrypt all event data before it leaves the browser. [Two types](https://github.com/offen/offen/pull/270){: target="_blank"} of crypto implementations are used for this. This allows us to handle user data from both https and http-only sites securely. -### What exactly happens on your website? -The insight into user behavior has been improved. Still, no sensitive user information is collected. We have added seven additional statistics like Average Page Depth as well as Landing and Exit Pages. Here you find an [overview of all added stats.](https://github.com/offen/offen/pull/270){: target="_blank"} +#### What exactly happens on your website? +The insight into user behavior has been improved. Still, no sensitive user information is collected. We have added seven additional statistics like Average Page Depth as well as Landing and Exit Pages. Here you find an [overview of all added stats.](https://github.com/offen/offen/pull/270){: target="_blank"} -### We are live +#### We are live The current state of *Offen runs on this domain.* You should have noticed our conset banner by now. Opted in? Head to the [Auditorium](https://offen.offen.dev/auditorium/){: target="_blank"} to manage your data. If not, please have a look at our [Explainer.](https://offen.offen.dev/){: target="_blank"} *We welcome any feedback* on this key subject. Did our banner text inform you sufficiently? Which issues have been left open? How can we do better? Thanks in advance. -[Send feedback](mailto:hioffen@posteo.de){: target="_blank" data-button="outline"} +[Send feedback](mailto:hioffen@posteo.de){: target="_blank" data-button="outline"} -### Testdrive on your system +#### Testdrive on your system Whether you are a developer that want to contribute or a website operator that wants to test Offen. Have a demo up and running in no time on your local machine. Download and install a single binary file on Linux, Windows or MacOS. [Download demo](https://github.com/offen/offen/releases/download/v0.1.0-alpha.2/offen-v0.1.0-alpha.2.tar.gz){: data-button="outline"} -### Feeling adventurous? +#### Feeling adventurous? Offen is under active development but with the introduction of the user consent banner has become usable for the general public. If you are brave enough you can use our [latest alpha release](https://github.com/offen/offen/releases/latest/){: target="_blank"} in a production environment. -### We need to talk about Safari +#### We need to talk about Safari Currently, the way we store encryption keys securely on the client side does not work in Apple's Safari browser. Fortunately, our improved opt-in flow will allow us to resume Safari support in milestone 3. Please bear with us until then. ### Up next diff --git a/homepage/content/articles/0040-test-offen-today.md b/homepage/content/articles/0040-test-offen-today.md index bd4d8d4..c68a646 100644 --- a/homepage/content/articles/0040-test-offen-today.md +++ b/homepage/content/articles/0040-test-offen-today.md @@ -8,7 +8,7 @@ image_url: /theme/images/offen-blog-0040-test-offen-today.jpg author: Hendrik Niefeld bottom_cta: blog -# Test Offen today +## Test Offen today We’re excited to present our first version that is officially ready for testing. @@ -22,7 +22,7 @@ Although we have dug very deep, things may still contain issues. Therefore, we r --- -## Offen v0.1.0-alpha.3 +### Offen v0.1.0-alpha.3 ##### Single binary file for Linux, Windows or MacOS [Download](https://get.offen.dev/){: data-button="full"} diff --git a/homepage/content/articles/0050-milestone-3.md b/homepage/content/articles/0050-milestone-3.md index f802c95..ef9aea8 100644 --- a/homepage/content/articles/0050-milestone-3.md +++ b/homepage/content/articles/0050-milestone-3.md @@ -8,7 +8,7 @@ image_url: /theme/images/offen-blog-0050-milestone-3.jpg author: Frederik Ring bottom_cta: matomo -# Episode Three — Displaying data +## Episode Three — Displaying data In the middle of strange times Milestone 3 - "Displaying Data" - is done. This means we focused on how we aggregate and display the data Offen collects in a way that operators can use it to improve their services and users can understand what is being collected and what it means for their privacy. @@ -23,9 +23,9 @@ As always, you can download the latest release from [https://get.offen.dev](http --- -## Achievements +### Achievements -### Improved and annotated Auditorium +#### Improved and annotated Auditorium The Auditorium is where both users and operators access and manage usage data. Operators want to gain insights in how their services are being used, users want to understand what data Offen is collecting and manage this data. @@ -35,23 +35,23 @@ The user facing Auditorium is now annotated with explanations for each metric an In addition to that we added new metrics and improved the overall user experience for both users and operators alike. Relevant PRs are [331](https://github.com/offen/offen/pull/331), [328](https://github.com/offen/offen/pull/328), [327](https://github.com/offen/offen/pull/327), [324](https://github.com/offen/offen/pull/324), [319](https://github.com/offen/offen/pull/319), [317](https://github.com/offen/offen/pull/317), [291](https://github.com/offen/offen/pull/291) -### Account Management fundamentals +#### Account Management fundamentals Operators that are using Offen to improve their services are likely to work in teams. This is why the application needs tools for managing user logins and accounts for segmenting usage data. In a first draft we added basic versions of these features so that the absence of such capabilities doesn't further prevent the adoption of Offen. This initiative has been started in [PR 288](https://github.com/offen/offen/pull/288) and will be refined further during Milestone 4. -### In-Browser setup +#### In-Browser setup The command line can seem daunting when you don't use it regularly. This is why we added an in-browser setup screen for Offen. Instead of performing the initial setup using the `offen setup` command from the CLI, operators who prefer to do so can now use their browser to navigate to the `/setup` URL of their installation and perform the initial setup there. We hope this helps us gaining further traction with semi-technical users that want to use privacy friendly tools. This has been implemented in [PR 299](https://github.com/offen/offen/pull/299). browser setup -### Goodbye, Choo +#### Goodbye, Choo We started out with using Choo as our frontend framework and it was a great choice as it allowed us to build dynamic UIs very rapidly. But as Offen's Auditorium was growing over the last few months we noticed its lack of mechanisms for breaking interfaces into components was starting to slow us down significantly and made simple changes cumbersome to implement. This is why - before starting work on the annotated Auditorium - we migrated the application to use Preact in [PR 289](https://github.com/offen/offen/pull/289). Preact is a great choice as it allows us to use modern paradigms for programming interfaces without having to buy into a Facebook-dominated ecosystem. The library is distributed under a MIT license. -### Signed binary downloads +#### Signed binary downloads As we start to target more and more distribution channels, ensuring the integrity of what people actually download is very important for an application like Offen. With [PR 338](https://github.com/offen/offen/pull/338) we started signing our binaries with a GPG key. Downloaders can now verify that a binary they are planning to use is the one we intend to distribute: @@ -60,11 +60,11 @@ gpg --keyserver pgp.mit.edu --recv F20D4074068C636D58B53F46FD60FBEDC90B8DA1 gpg --verify offen-linux-amd64.asc offen-linux-amd64 ``` -### Safari Support +#### Safari Support Offen generates client side keys for encrypting data for each user. At the end of Milestone 2 we noticed issues where the Safari browser would not store these keys properly which means users would lose access to their user data. We fixed this in [PR 282](https://github.com/offen/offen/pull/282) by adding a fallback mechanism that Safari can use. Keys are guaranteed to be safe from third party access in both implementations. -### 1-Click Deploy +#### 1-Click Deploy Self hosted software is a great fit for privacy focused software like Offen. Yet, it can seem daunting to non-technical users and make them stick to established SaaS solutions longer than needed. This is why we put a lot of effort into finding easy "1-click" options to deploy an Offen instance. In Milestone 3 we have created a 1-click solution for deploying Offen to Heroku: [https://github.com/offen/heroku](https://github.com/offen/heroku). Using free resources only, people interested in running Offen can now deploy a production ready instance to Heroku in less than 1 minute. We hope this encourages website operator to consider self hosted software and Offen as a real option. Required changes for this were implemented in [PR 287](https://github.com/offen/offen/pull/287). @@ -74,17 +74,17 @@ To offer even more options we are also looking into building a 1-click option fo --- -## Next up +### Next up Milestone 4 is up next and is called "Managing Data". This means we will focus on features that allow operators and users to manage their usage data and Offen instances. This is also *where we will have a slight deviation from the original product plan*: We originally had an item called "Selective Data deletion for users", yet as we have moved to focus on self-hosting more and more, this feature does not make too much sense anymore. Instead we will allow users to delete their data tied to an instance entirely and *will make it easy to follow how deletion works and what the implications are*. -### Account management +#### Account management In addition to the basic account management features Offen already offers, we'll work on implementing more fine grained access control mechanisms so that teams that are using Offen can easily and safely share access to an instance. In addition to that we will also revisit existing features and try to make them easier to use and more accessible. -### Collecting and implementing real world user feedback +#### Collecting and implementing real world user feedback We are still labeling Offen as `alpha` right now, but we think the next weeks could be the right time to slough that potentially scary label off and attract more users by going `beta`. @@ -92,13 +92,13 @@ Before we do so though, we would like to collect feedback from people that are b --- -## Getting your hands dirty +### Getting your hands dirty -### Installing Offen as a systemd service +#### Installing Offen as a systemd service We're eager to get people to install Offen and send us their feedback and tell us about their experience, so instead of adding features to the software itself, we will today look at how Offen can be installed on a Linux system that supports `systemd`. -### Download the binary +#### Download the binary First, download and unpack the tarball containing latest release and verify its signature: @@ -109,7 +109,7 @@ gpg --keyserver pgp.mit.edu --recv F20D4074068C636D58B53F46FD60FBEDC90B8DA1 gpg --verify offen-linux-amd64.asc offen-linux-amd64 ``` -### Install the binary +#### Install the binary Next, let's move the downloaded version to `/opt` and create a symlink in `/usr/bin` so the command is available in the system's `PATH`: @@ -128,7 +128,7 @@ $ offen version INFO[0000] Current build created using revision=v0.1.0-alpha.5 ``` -### Scaffold the required directories +#### Scaffold the required directories Offen follows the Linux Filesystem Hierarchy Standard, so next, we need to create the directories for storing data, configuration and certificates: @@ -138,7 +138,7 @@ sudo mkdir -p /var/opt/offen sudo mkdir -p /var/www/.cache ``` -### Creating the service +#### Creating the service The Offen server needs to be run in a supervised manner so we can be sure it is always responding. `systemd` can do this for us. First we create the service definition: @@ -181,12 +181,12 @@ $ sudo systemctl status offen └─6701 /usr/bin/offen ``` -### Running the in-browser setup +#### Running the in-browser setup To create the initial account for your Offen install, head to `[localhost:3000/setup](http://localhost:3000/setup)` and fill out the form. After doing so, your Offen instance is ready for local use! If you want to expose this instance to the public internet, [refer to our docs site](https://docs.offen.dev/running-offen/tutorials/configuring-deploying-offen-ubuntu/) for instructions on how to get free automated SSL up and running. --- -## Feedback? Found a bug? +### Feedback? Found a bug? If you have any feedback, comment or bug report on this milestone release, we'd love to hear from you. [Open an issue](https://github.com/offen/offen/issues) or send us an email at [hioffen@posteo.de.](mailto:hioffen@posteo.de) diff --git a/homepage/content/articles/0060-milestone-4.md b/homepage/content/articles/0060-milestone-4.md index 93f238f..c9841f8 100644 --- a/homepage/content/articles/0060-milestone-4.md +++ b/homepage/content/articles/0060-milestone-4.md @@ -9,7 +9,7 @@ image_caption: