From 8bdb79f190d6d677a7fa35b4a5692fca5e9bf02a Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 17 Dec 2020 16:14:54 +0100 Subject: [PATCH 1/9] use dedicated server for static assets in development --- docker-compose.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8668a44..b2d9edc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,13 @@ version: '3' services: - homepage: + proxy: + image: nginx:1.17-alpine + volumes: + - output:/usr/share/nginx/html ports: - - 8000:8000 + - 8000:80 + homepage: build: context: '.' dockerfile: ./Dockerfile.python @@ -11,9 +15,11 @@ services: volumes: - .:/website - homepagedeps:/root/.local - command: make devserver + - output:/website/homepage/output + command: make regenerate environment: DEBUG: 1 volumes: homepagedeps: + output: From 111cd9082bdcccf89094a4895fa5412e7cbb8d16 Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 17 Dec 2020 17:25:31 +0100 Subject: [PATCH 2/9] vendor decorate plugin to enable pickling of settings file --- .gitignore | 1 + homepage/pelicanconf.py | 6 ++-- homepage/plugins/decorate_content/__init__.py | 1 + .../decorate_content/decorate_content.py | 33 +++++++++++++++++++ homepage/requirements.txt | 3 +- 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 homepage/plugins/decorate_content/__init__.py create mode 100644 homepage/plugins/decorate_content/decorate_content.py diff --git a/.gitignore b/.gitignore index e8d29c0..58e2d13 100644 --- a/.gitignore +++ b/.gitignore @@ -115,3 +115,4 @@ venv.bak/ test.py *.json +homepage/cache diff --git a/homepage/pelicanconf.py b/homepage/pelicanconf.py index 5d5a226..bb4a79e 100644 --- a/homepage/pelicanconf.py +++ b/homepage/pelicanconf.py @@ -1,6 +1,5 @@ import os from datetime import datetime -from pelican_decorate_content import decorate_content # If your site is available via HTTPS, make sure SITEURL begins with https:// RELATIVE_URLS = False @@ -27,7 +26,8 @@ DEFAULT_PAGINATION = False THEME = './theme' # Delete the output directory before generating new files. -DELETE_OUTPUT_DIRECTORY = True +DELETE_OUTPUT_DIRECTORY = False +CACHE_CONTENT = True DIRECT_TEMPLATES = ['sitemap', 'archives'] @@ -45,7 +45,7 @@ PAGE_SAVE_AS = '{slug}/index.html' ARTICLE_SAVE_AS = 'blog/{slug}/index.html' PLUGIN_PATHS = ['./plugins'] -PLUGINS = [decorate_content, 'assets'] +PLUGINS = ['decorate_content', 'assets'] MARKDOWN = { 'extension_configs': { diff --git a/homepage/plugins/decorate_content/__init__.py b/homepage/plugins/decorate_content/__init__.py new file mode 100644 index 0000000..1dd5d68 --- /dev/null +++ b/homepage/plugins/decorate_content/__init__.py @@ -0,0 +1 @@ +from .decorate_content import * diff --git a/homepage/plugins/decorate_content/decorate_content.py b/homepage/plugins/decorate_content/decorate_content.py new file mode 100644 index 0000000..11ebd65 --- /dev/null +++ b/homepage/plugins/decorate_content/decorate_content.py @@ -0,0 +1,33 @@ +from json import loads + +from pelican import signals +from pelican.contents import Article, Page, Static +from bs4 import BeautifulSoup + + +def content_object_init(instance): + if isinstance(instance, (Article, Page, Static)): + plugin_settings = instance.settings.get("DECORATE_CONTENT", {}) + content_overrides = ( + instance.metadata.get("decorate_content", None) + if instance.metadata is not None + else None + ) + + settings = plugin_settings.copy() + settings.update( + loads(content_overrides) if content_overrides is not None else {} + ) + + soup = BeautifulSoup(instance._content, "html.parser") + + for selector, class_names in settings.items(): + elems = soup.select(selector) + for elem in elems: + elem["class"] = elem.get("class", []) + class_names + + instance._content = soup.decode() + + +def register(): + signals.content_object_init.connect(content_object_init) diff --git a/homepage/requirements.txt b/homepage/requirements.txt index 6118304..9a0c0e2 100644 --- a/homepage/requirements.txt +++ b/homepage/requirements.txt @@ -1,5 +1,4 @@ -pelican==4.0.1 +pelican==4.5.3 markdown==3.1.1 git+git://github.com/miracle2k/webassets#d1f3455e383446ca4ab0c644f326ee937e68e809 beautifulsoup4==4.8.1 -pelican-decorate-content==0.1.1 From 5a16b277810bd3f72b9fb3142024b08619cb317f Mon Sep 17 00:00:00 2001 From: hendr-ik Date: Mon, 28 Dec 2020 16:12:50 +0100 Subject: [PATCH 3/9] merge deep dive and about section --- homepage/content/pages/about.md | 71 ++++++++++++++++++++++---- homepage/content/pages/deep-dive.md | 79 ----------------------------- homepage/theme/templates/base.html | 3 -- homepage/theme/templates/index.html | 2 +- 4 files changed, 61 insertions(+), 94 deletions(-) delete mode 100644 homepage/content/pages/deep-dive.md diff --git a/homepage/content/pages/about.md b/homepage/content/pages/about.md index 35be0c4..076ea0d 100644 --- a/homepage/content/pages/about.md +++ b/homepage/content/pages/about.md @@ -1,25 +1,74 @@ title: About | Offen -description: Who we are, who supports us and how you can can get in touch. +description: Who we are, what we do, who supports us and how you can can get in touch. slug: about -bottom_cta: matomo +bottom_cta: fair ## About +### What is this thing called "my data" and why does seemingly everyone want to get hold of it? + +It has a ring, gives a slight spine-chilling sensation and generates a whole lot of clicks: consumer magazines like German "Computer Bild" caution about ["Google espionage"](https://www.computerbild.de/artikel/cb-Ratgeber-Kurse-Wissen-Was-weiss-Google-ueber-Sie-2799009.html){: target="_blank"} just like the internet has countless tutorials on turning off numerous ["data leeches"](https://praxistipps.chip.de/datenkrake-windows-10-so-schalten-sie-auffaellige-funktionen-ab_99652){: target="_blank"}. Interestingly, diving into these realms will have you accidentally catching the next toolbar, malware infection or [even worse](https://blog.malwarebytes.com/cybercrime/2012/10/pick-a-download-any-download/){: target="_blank"}. + +Yet, many internet users still do not know what really is happening to their data. Public relation activities trying to calm the public - as recently undertaken by Facebook [for example](https://www.zeit.de/digital/datenschutz/2019-01/social-media-facebook-mark-zuckerberg-ads-privacy-business-model-transparency){: target="_blank"} - end up being rather disturbing instead of creating transparency or adding any value to the public debate. Denelle Dixon, COO of Mozilla, just publicly [warned the European Commission](https://blog.mozilla.org/blog/2019/01/31/mozilla-raises-concerns-over-facebooks-lack-of-transparency/){: target="_blank"} about the dangerous effects an opaque apparatus such as Facebook can have on society. Updated Terms and Conditions only parenthetically mention that newly created Google accounts will now hand over real names to third parties for [advertising purposes](https://www.propublica.org/article/google-has-quietly-dropped-ban-on-personally-identifiable-web-tracking){: target="_blank"}. + +
+Detour +
+ +As a regular user of the internet, are you really being spied upon? *What exactly is "my data"?* Can a website operator see my name when I'm using it? Does it know about my Email address or my phone number? Does it know which other websites I have been visiting, which search query led me to the site in the first place, what I have recently purchased online, or who I am acquainted with? + +> [If you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place.](https://www.eff.org/de/deeplinks/2009/12/google-ceo-eric-schmidt-dismisses-privacy){: target="_blank"} +> +> Eric Schmidt (at this time CEO of Google), 2009 + +We would like to turn the tables on this much quoted statement and apply it to the operators of services and websites instead of their users. The analytics software Offen *transparently and uncompromisingly discloses what data is being collected and what it is being used for* to the users. + +--- + +### For users + +Visiting a website or using a web application that utilizes Offen, the user gains access to and ownership of the usage data collected. As a guiding principle, data collection is Opt-In only. Consent can be revoked at any time, just like users can choose delete their data retroactively. The cookie used by Offen allows viewing all of the associated metrics so that users can *assert themselves what is being collected and what isn't*. Data is being displayed in an accessible and articulate manner and each metric comes with explanations about its usage, relevance and possible privacy implications. + +Lots of ways to break your software + +### For operators + +Operators of small and mid-sized websites and web applications are faced with growing challenges not only since the introduction of GDPR: how do they gain insights into what users are interested in and which of the features offered are being used? Is it possible to showcase *transparent and considerate handling of user data* - i.e. neither being spy or data leech - without surrendering and abandoning usage metrics altogether? + +Choosing Offen, websites and web applications obtain a free, open and robust tool for collecting and analyzing relevant usage data. The insights gained enable continuous improvement of these services while still respecting their user's privacy. *Opening up the data to the users does not constitute a disadvantage, but strengthens the relationship with them* by being entirely transparent. + +### Part of the public debate + +Transparently handling usage data in the open creates mutual trust while still enabling operators to collect needed usage statistics. Offen is designed to be a mediating agent only, and does not side with either users or operators. Sharing knowledge between the two parties creates opportunities for an *open and fact based discussion* about user data and privacy. Users gain insights into what data is being collected and what these data points are used for, just like they learn about which kind of data is not part of the collection. They are enabled to reach self-determined decisions about what they consent with and what they disagree with when it comes to privacy on the web, also in other contexts than analytics. + +We want to exemplify that it is time to depart the age of ["data capitalism"](https://www.zeit.de/digital/datenschutz/2019-01/datenschutz-nick-couldry-datenkolonialismus-datenhandel/komplettansicht){: target="_blank"} and to create *technologies and infrastructure that are transparent, open and oriented towards the common good* + +
+Detour +
+ +### Offen as a technology + +At runtime, Offen is just mediating exchange between users and operators. Usage data is collected in conformance to GDPR and with the concept of ["Datensparsamkeit"](https://martinfowler.com/bliki/Datensparsamkeit.html){: target="_blank"} in mind. All user data is encrypted in the browser so that it can only ever be accessed by the users themselves or the matching operator. While being collected in the context of a website or application, neither operators nor third party scripts have any possibility to access the usage data. Offen itself doesn't have any way of decrypting, processing or even selling the gathered data at any point. + +The software itself, as well as *all the used tools are open source*, [project planning and technical specification](https://github.com/offen/offen){: target="_blank"} take place in the open and actively solicit feedback from the general public. + +Users and operators are given intuitive and accessibility-focused tools for analyzing and managing their data in the form of a web application and a browser extension. Operators deploy the service using a simple script tag. + +--- + +### Modus Operandi + +Developing and running Offen can only work out when it is entirely *free of any kind of economic constraints or goals* and its only objective is *contributing to the common good*. Development of a prototype is reliant on public grants or similar funding sources. Long term development and maintenance of the software is tied to resources granted by foundations or being donated by the public. + ### Status Quo -Offen is created by [Frederik Ring][frederik-ring]{: target="_blank"} and [Hendrik Niefeld][hendrik-niefeld]{: target="_blank"} and is currently being conceptually designed and in active development, both as a product as well as as a software. - -[hendrik-niefeld]: http://niefeld.com/ -[frederik-ring]: https://www.frederikring.com/ +Offen is created by [Frederik Ring](https://www.frederikring.com/){: target="_blank"} and [Hendrik Niefeld](http://niefeld.com/){: target="_blank"} and is currently being conceptually designed and in active development, both as a product as well as as a software. [![NLnet Foundation](/theme/images/nlnet-logo.svg){:width="160px" height="60px" class="mt4"}](https://nlnet.nl/){: target="_blank"} -We are happy to work with [NLnet Foundation,][nlnet-foundation]{: target="_blank"} which actively supports our efforts as part of its [Next Generation Internet][next-generation-internet]{: target="_blank"} initiative. +We are happy to work with [NLnet Foundation,](https://nlnet.nl/){: target="_blank"} which actively supports our efforts as part of its [Next Generation Internet](https://nlnet.nl/NGI/){: target="_blank"} initiative. -[nlnet-foundation]: https://nlnet.nl/ -[next-generation-internet]: https://nlnet.nl/NGI/ - ---- ### Contact diff --git a/homepage/content/pages/deep-dive.md b/homepage/content/pages/deep-dive.md deleted file mode 100644 index e58916e..0000000 --- a/homepage/content/pages/deep-dive.md +++ /dev/null @@ -1,79 +0,0 @@ -title: Deep dive | Offen -description: What do users know about their data? How can they access it? Do operators benefit from a careful handling of user data? Does Offen work in accordance with GDPR? -slug: deep-dive -sitemap_priority: 0.7 -bottom_cta: quality - -## Deep dive - -### What is this thing called "my data" and why does seemingly everyone want to get hold of it? - -It has a ring, gives a slight spine-chilling sensation and generates a whole lot of clicks: consumer magazines like German "Computer Bild" caution about "Google espionage" [^1] just like the internet has countless tutorials on turning off numerous "data leeches"[^2]. Interestingly, diving into these realms will have you accidentally catching the next toolbar, malware infection or even worse [^3]. - -[^1]: Gegen Google-Spionage wehren -[^2]: Datenkrake Windows 10: So schalten Sie auffällige Funktionen ab -[^3]: Pick a Download, Any Download! - -Yet, many internet users still do not know what really is happening to their data. Public relation activities trying to calm the public - as recently undertaken by Facebook for example [^4] - end up being rather disturbing instead of creating transparency or adding any value to the public debate. Denelle Dixon, COO of Mozilla, just publicly warned the European Commission [^5] about the dangerous effects an opaque apparatus such as Facebook can have on society. Updated Terms and Conditions only parenthetically mention that newly created Google accounts will now hand over real names to third parties for advertising purposes [^6]. - -[^4]: Sometimes People Assume Facebook Does Things It Doesn't Do -[^5]: Mozilla Raises Concerns Over Facebook's Lack of Transparency -[^6]: Google Has Quietly Dropped Ban on Personally Identifiable Web Tracking - -
-Detour -
- -As a regular user of the internet, are you really being spied upon? *What exactly is "my data"?* Can a website operator see my name when I'm using it? Does it know about my Email address or my phone number? Does it know which other websites I have been visiting, which search query led me to the site in the first place, what I have recently purchased online, or who I am acquainted with? - -> If you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place. [^7] -> -> Eric Schmidt (at this time CEO of Google), 2009 - -[^7]: Google CEO Eric Schmidt Dismisses the Importance of Privacy - -We would like to turn the tables on this much quoted statement and apply it to the operators of services and websites instead of their users. The analytics software Offen *transparently and uncompromisingly discloses what data is being collected and what it is being used for* to the users. - ---- - -### For users - -Visiting a website or using a web application that utilizes Offen, the user gains access to and ownership of the usage data collected. As a guiding principle, data collection is Opt-In only. Consent can be revoked at any time, just like users can choose delete their data retroactively. The cookie used by Offen allows viewing all of the associated metrics so that users can *assert themselves what is being collected and what isn't*. Data is being displayed in an accessible and articulate manner and each metric comes with explanations about its usage, relevance and possible privacy implications. - -Lots of ways to break your software - -### For operators - -Operators of small and mid-sized websites and web applications are faced with growing challenges not only since the introduction of GDPR: how do they gain insights into what users are interested in and which of the features offered are being used? Is it possible to showcase *transparent and considerate handling of user data* - i.e. neither being spy or data leech - without surrendering and abandoning usage metrics altogether? - -Choosing Offen, websites and web applications obtain a free, open and robust tool for collecting and analyzing relevant usage data. The insights gained enable continuous improvement of these services while still respecting their user's privacy. *Opening up the data to the users does not constitute a disadvantage, but strengthens the relationship with them* by being entirely transparent. - -### Part of the public debate - -Transparently handling usage data in the open creates mutual trust while still enabling operators to collect needed usage statistics. Offen is designed to be a mediating agent only, and does not side with either users or operators. Sharing knowledge between the two parties creates opportunities for an *open and fact based discussion* about user data and privacy. Users gain insights into what data is being collected and what these data points are used for, just like they learn about which kind of data is not part of the collection. They are enabled to reach self-determined decisions about what they consent with and what they disagree with when it comes to privacy on the web, also in other contexts than analytics. - -We want to exemplify that it is time to depart the age of "data capitalism" [^8] and to create *technologies and infrastructure that are transparent, open and oriented towards the common good* - -[^8]: Vielleicht wird in Zukunft auch mit Gewalt um Daten gekämpft - -
-Detour -
- -### Offen as a technology - -At runtime, Offen is just mediating exchange between users and operators. Usage data is collected in conformance to GDPR and with the concept of "Datensparsamkeit" [^9] in mind. All user data is encrypted in the browser so that it can only ever be accessed by the users themselves or the matching operator. While being collected in the context of a website or application, neither operators nor third party scripts have any possibility to access the usage data. Offen itself doesn't have any way of decrypting, processing or even selling the gathered data at any point. - -[^9]: Datensparsamkeit - -The software itself, as well as *all the used tools are open source*, [project planning and technical specification][github-org]{: target="_blank"} take place in the open and actively solicit feedback from the general public. - -[github-org]: https://github.com/offen - -Users and operators are given intuitive and accessibility-focused tools for analyzing and managing their data in the form of a web application and a browser extension. Operators deploy the service using a simple script tag. - ---- - -### Modus Operandi - -Developing and running Offen can only work out when it is entirely *free of any kind of economic constraints or goals* and its only objective is *contributing to the common good*. Development of a prototype is reliant on public grants or similar funding sources. Long term development and maintenance of the software is tied to resources granted by foundations or being donated by the public. diff --git a/homepage/theme/templates/base.html b/homepage/theme/templates/base.html index 01ccf3e..f54a417 100644 --- a/homepage/theme/templates/base.html +++ b/homepage/theme/templates/base.html @@ -53,9 +53,6 @@
  • Blog
  • -
  • - Deep dive -
  • Roadmap
  • diff --git a/homepage/theme/templates/index.html b/homepage/theme/templates/index.html index 2fd9bbd..f0ab61d 100644 --- a/homepage/theme/templates/index.html +++ b/homepage/theme/templates/index.html @@ -128,7 +128,7 @@

    - Web analytics is still an unfair and impenetrable business. A proper alternative to common tools is missing. Therefore we develop one. Deep dive + Web analytics is still an unfair and impenetrable business. A proper alternative to common tools is missing. Therefore we develop one. Learn more

    From fbbad51c3c02ea6991a1d1a99bd86fdb8f553688 Mon Sep 17 00:00:00 2001 From: hendr-ik Date: Mon, 28 Dec 2020 16:28:30 +0100 Subject: [PATCH 4/9] remove some Docs campaigns, hide summary menu section on index --- homepage/pelicanconf.py | 3 +-- homepage/theme/templates/base.html | 6 ++++-- homepage/theme/templates/index.html | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/homepage/pelicanconf.py b/homepage/pelicanconf.py index bb4a79e..ade321a 100644 --- a/homepage/pelicanconf.py +++ b/homepage/pelicanconf.py @@ -97,8 +97,7 @@ HEROKU_DIRECT_URL = 'https://heroku.com/deploy?template=https://github.com/offen UBERSPACE_DIRECT_URL = 'https://lab.uberspace.de/guide_offen.html' YUNOHOST_DIRECT_URL = 'https://github.com/offen/offen_ynh' OFFEN_AUDITORIUM_URL = 'https://offen.offen.dev/auditorium/' -DOCS_URL_CAMPAIGN_TOP = 'https://docs.offen.dev/?utm_campaign=top' -DOCS_URL_CAMPAIGN_BOTTOM = 'https://docs.offen.dev/?utm_campaign=bottom' +DOCS_URL = 'https://docs.offen.dev/' DOCS_GETSTARTED_URL = 'https://docs.offen.dev/running-offen/' DOCS_GETSTARTED_URL_CAMPAIGN = 'https://docs.offen.dev/running-offen/?utm_campaign=get-started' DOCS_TRYDEMO_URL = 'https://docs.offen.dev/running-offen/test-drive/' diff --git a/homepage/theme/templates/base.html b/homepage/theme/templates/base.html index f54a417..6470dcb 100644 --- a/homepage/theme/templates/base.html +++ b/homepage/theme/templates/base.html @@ -47,9 +47,11 @@