<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Blog of Andreas Jung, ZOPYX]]></title><description><![CDATA[Blog of Andreas Jung: Python • Plone • Publishing • IT  • Social]]></description><link>https://blog.zopyx.com/</link><image><url>https://blog.zopyx.com/favicon.png</url><title>Blog of Andreas Jung, ZOPYX</title><link>https://blog.zopyx.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Mon, 18 May 2026 05:01:46 GMT</lastBuildDate><atom:link href="https://blog.zopyx.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Cancer diagnosis and treatment]]></title><description><![CDATA[<p>The last few weeks have been quite eventful. On October 21st this year, I received a cancer diagnosis—prostate cancer. Based on earlier tests, the likelihood of this diagnosis was a 50:50 chance. Just four days later, I underwent surgery and was discharged from the hospital another four days</p>]]></description><link>https://blog.zopyx.com/turbo-cancer-treatment/</link><guid isPermaLink="false">67399e17f2adb500019672a7</guid><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Sun, 17 Nov 2024 07:41:48 GMT</pubDate><content:encoded><![CDATA[<p>The last few weeks have been quite eventful. On October 21st this year, I received a cancer diagnosis—prostate cancer. Based on earlier tests, the likelihood of this diagnosis was a 50:50 chance. Just four days later, I underwent surgery and was discharged from the hospital another four days after that. Eight days from diagnosis to leaving the hospital—what a whirlwind week!</p><p>As someone who has always been open about my life, I see no reason not to share this experience. For me, talking about cancer is a way of processing and dealing with it.</p><p>To keep it brief: the surgery went exceptionally well, and the final histology and pathology results came back completely negative. I achieved the best possible outcome from a medical perspective, thanks to the expertise of my local university hospital, being treated by highly skilled professionals, and the incredible support of my husband, Oliver, whose connections within the hospital were invaluable.</p><p>As of today, my physical recovery is progressing smoothly. I am currently unable—and not allowed—to engage in the sports I love or do any heavy lifting. Being unable to ride my bike feels like a nightmare, but I’m staying optimistic—2025 is just around the corner. Remarkably, I’ve already been back to working nearly full-time on my projects for about two weeks, even though the standard recovery time for this type of surgery is around 73 days!</p><p>Unfortunately, I had to cancel my plans to attend the Plone Conference 2024 in Brasília. Missing this opportunity is heartbreaking, as it would have been my first trip to South America and Brazil. However, my husband Oliver and I are already planning to visit South America together at some point in the future.</p><p>The physical aspect of surgery is one thing; the mental aspect of a cancer diagnosis is entirely another. I’m grateful to say I’ve never had negative thoughts about my diagnosis and remain optimistic about the future. That said, as a man—particularly as a gay man—this type of surgery does have an impact on sexuality. Only time will tell how things evolve in that regard.</p><p>I’ve received an outpouring of personal messages and well wishes, even from people I didn’t know or couldn’t remember. To everyone who reached out: thank you. Your empathy has been a tremendous source of strength for me. I hope to see you all in person very soon.</p><p>Andreas</p>]]></content:encoded></item><item><title><![CDATA[PyCON 2024 in Pittsburgh experience]]></title><description><![CDATA[<p>I am a regular visitior of PyCON US conference since 2001 and I visited most conference cities at least once.</p>]]></description><link>https://blog.zopyx.com/pycon-2024-in-pittsburgh-experience/</link><guid isPermaLink="false">664ab309db0d0500015e58c5</guid><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Fri, 31 May 2024 02:25:00 GMT</pubDate><content:encoded><![CDATA[<p>I am a regular visitior of PyCON US conference since 2001 and I visited most conference cities at least once.</p>]]></content:encoded></item><item><title><![CDATA[New print-css.rocks release available]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2021/10/image-1.png" class="kg-image" alt srcset="https://blog.zopyx.com/content/images/size/w600/2021/10/image-1.png 600w, https://blog.zopyx.com/content/images/size/w1000/2021/10/image-1.png 1000w, https://blog.zopyx.com/content/images/2021/10/image-1.png 1020w" sizes="(min-width: 720px) 720px"></figure><p>A new print-css.rocks <a href="https://print-css.rocks">release</a> is available with support for some new tools:</p><ul><li>Typeset.sh </li><li>Vivliostyle</li><li>PagedJS</li></ul>]]></description><link>https://blog.zopyx.com/new-print-css-rocks-release/</link><guid isPermaLink="false">61644f938b197500012d5ab7</guid><category><![CDATA[Print-CSS]]></category><category><![CDATA[Publishing]]></category><category><![CDATA[Meta]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Mon, 11 Oct 2021 14:55:52 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/10/PRINT_CSS_LOGO_FINAL-large.svg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2021/10/image-1.png" class="kg-image" alt="New print-css.rocks release available" srcset="https://blog.zopyx.com/content/images/size/w600/2021/10/image-1.png 600w, https://blog.zopyx.com/content/images/size/w1000/2021/10/image-1.png 1000w, https://blog.zopyx.com/content/images/2021/10/image-1.png 1020w" sizes="(min-width: 720px) 720px"></figure><img src="https://blog.zopyx.com/content/images/2021/10/PRINT_CSS_LOGO_FINAL-large.svg" alt="New print-css.rocks release available"><p>A new print-css.rocks <a href="https://print-css.rocks">release</a> is available with support for some new tools:</p><ul><li>Typeset.sh </li><li>Vivliostyle</li><li>PagedJS</li></ul>]]></content:encoded></item><item><title><![CDATA[2021-08-03

Medizinische Leitlinien schneller online im Portal 'onkopedia']]></title><description><![CDATA[<p>Unser befreundeter XML-Dienstleister <a href="https://C-REX.net">C-REX.net</a>, der für uns in Publishing Lösungen das XML Processing übernimmt, hat einen schönen <a href="https://blog.c-rex.net/de-DE/posts/DGHO_DTS-conversion-services.html">Artikel</a> über unser Hauptprojekt <a href="https://onkopedia.com">Onkopedia</a> aus XML Sicht veröffentlicht.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.c-rex.net/de-DE/posts/DGHO_DTS-conversion-services.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Publikation wichtiger medizinischer Leitlinien auf onkopedia</div><div class="kg-bookmark-description">Umsetzung eines durchgängigen xml-basierten Publikationsprozesses</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.c-rex.net/blogassets/img/favicon.ico"><span class="kg-bookmark-author">crexnet</span><span class="kg-bookmark-publisher">c-rex.net</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.c-rex.net/de-DE/img/dgho/onkopedia-logo.png"></div></a></figure>]]></description><link>https://blog.zopyx.com/2021-08-03medizinische-leitlinien-schneller-online-im-portal-onkopedia/</link><guid isPermaLink="false">615e97df8b197500012d5a98</guid><category><![CDATA[Plone]]></category><category><![CDATA[Print-CSS]]></category><category><![CDATA[Publishing]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Thu, 07 Oct 2021 06:48:22 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/10/logo2.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2021/10/logo2.png" alt="2021-08-03

Medizinische Leitlinien schneller online im Portal 'onkopedia'"><p>Unser befreundeter XML-Dienstleister <a href="https://C-REX.net">C-REX.net</a>, der für uns in Publishing Lösungen das XML Processing übernimmt, hat einen schönen <a href="https://blog.c-rex.net/de-DE/posts/DGHO_DTS-conversion-services.html">Artikel</a> über unser Hauptprojekt <a href="https://onkopedia.com">Onkopedia</a> aus XML Sicht veröffentlicht.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.c-rex.net/de-DE/posts/DGHO_DTS-conversion-services.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Publikation wichtiger medizinischer Leitlinien auf onkopedia</div><div class="kg-bookmark-description">Umsetzung eines durchgängigen xml-basierten Publikationsprozesses</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.c-rex.net/blogassets/img/favicon.ico" alt="2021-08-03

Medizinische Leitlinien schneller online im Portal 'onkopedia'"><span class="kg-bookmark-author">crexnet</span><span class="kg-bookmark-publisher">c-rex.net</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.c-rex.net/de-DE/img/dgho/onkopedia-logo.png" alt="2021-08-03

Medizinische Leitlinien schneller online im Portal 'onkopedia'"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[FastAPI for the next level of web applications]]></title><description><![CDATA[<p>We are building web applications since the mid-90s with Python. </p><p>Historically, we have used a bunch of related technologies and frameworks like</p><ul><li>CGI</li><li>FastCGI</li><li>Pyramid</li><li>Flask</li><li>Sanic</li><li>Plone (of course, for CMS-ish applications)</li></ul><p>All technologies and web frameworks had their time, their pros and cons (which I do not want</p>]]></description><link>https://blog.zopyx.com/fastapi-for-the-next-level-of-web-applications/</link><guid isPermaLink="false">60c0635f31dace00012a07c6</guid><category><![CDATA[Python]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Wed, 09 Jun 2021 07:10:50 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/06/logo-teal-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2021/06/logo-teal-1.png" alt="FastAPI for the next level of web applications"><p>We are building web applications since the mid-90s with Python. </p><p>Historically, we have used a bunch of related technologies and frameworks like</p><ul><li>CGI</li><li>FastCGI</li><li>Pyramid</li><li>Flask</li><li>Sanic</li><li>Plone (of course, for CMS-ish applications)</li></ul><p>All technologies and web frameworks had their time, their pros and cons (which I do not want to discuss here). Now, we are moving on to <a href="https://fastapi.tiangolo.com/">FastAPI</a> for new web applications.</p><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2021/06/logo-teal.png" class="kg-image" alt="FastAPI for the next level of web applications" srcset="https://blog.zopyx.com/content/images/size/w600/2021/06/logo-teal.png 600w, https://blog.zopyx.com/content/images/size/w1000/2021/06/logo-teal.png 1000w, https://blog.zopyx.com/content/images/2021/06/logo-teal.png 1023w" sizes="(min-width: 720px) 720px"></figure><p><a href="https://fastapi.tiangolo.com/">FastAPI</a> is one of the most modern Python web frameworks for building applications and services. The primary focus of FastAPI is on micro-services or REST services, but you can of course plug-in your own template language for generating HTML and serving static content. </p><p>The reasons for picking up FastAPI are these:</p><ul><li>modern code base (based on the Starlette framework for Python)</li><li>native support for asynchronous operations</li><li>schemas for incoming and outgoing data can be defined using Python type annotations or using the <a href="https://pydantic-docs.helpmanual.io/">pydantic</a> package for complex data models</li><li>validation of incoming and outgoing data according to their schema definition</li><li>OpenAPI/Swagger integration out-of-the-box </li><li>support for websockets</li><li>good documentation and tutorials</li><li>vibrant developer community</li><li>fully tested</li><li>optional support for GraphQL via <a href="https://github.com/graphql-python/graphene">graphene</a></li></ul><p>FastAPI can be deployed with any modern AWSGI server like <a href="https://www.uvicorn.org/">uvicorn</a>. Our personal preference however is <a href="https://pypi.org/project/Hypercorn/">hypercorn</a>.</p><p>Comparison with Flask? Flask had its time. It is still a good web framework, but you feel its age at all corners (still true with Flask 2). It is in general not a huge problem to move a web application from one framework to another (if it was written properly). I clearly like the built-in features like strong validation of incoming and outgoing data and the OpenAPI support which makes FastAPI the best available option for building micro-services.</p><p><strong>Further readings:</strong></p><ul><li><a href="https://www.analyticsvidhya.com/blog/2020/11/fastapi-the-right-replacement-for-flask/">FastAPI: The Right Replacement For Flask?</a></li><li><a href="https://testdriven.io/blog/moving-from-flask-to-fastapi/">Moving from Flask to FastAPI</a></li><li><a href="https://dev.to/meseta/flask-vs-fastapi-first-impressions-1bnm">Flask vs FastAPI first impressions</a></li><li><a href="https://github.com/mjhea0/awesome-fastapi">Awesome FastAPI</a></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[New major Produce & Publish Server release]]></title><description><![CDATA[<p>Today, I released a new version of our <a href="https://pypi.org/project/pp.server/">Produce &amp; Publish server</a>. The Produce &amp; Publish Server is a REST server that provides a unified API for PDF generation using the <a href="https://print-css.rocks">PrintCSS</a> approach for a variety of converter tools.</p><p>The old codebase has its origins in the years before 2010,</p>]]></description><link>https://blog.zopyx.com/produce/</link><guid isPermaLink="false">602918b06ac5d30001fca9c3</guid><category><![CDATA[Python]]></category><category><![CDATA[Publishing]]></category><category><![CDATA[Print-CSS]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Sun, 14 Feb 2021 12:42:24 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/02/produce-and-publish-300dpi.png-1-492x328-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2021/02/produce-and-publish-300dpi.png-1-492x328-1.png" alt="New major Produce & Publish Server release"><p>Today, I released a new version of our <a href="https://pypi.org/project/pp.server/">Produce &amp; Publish server</a>. The Produce &amp; Publish Server is a REST server that provides a unified API for PDF generation using the <a href="https://print-css.rocks">PrintCSS</a> approach for a variety of converter tools.</p><p>The old codebase has its origins in the years before 2010, based on the Python Pyramid web framework. For several reasons, it was time to trash Pyramid for something better. </p><p>The new implementation is based on the FastAPI web framework for Python which gives us out of the box support for building nice REST APIs, data validation, full Python async support and <a href="https://swagger.io/specification/">OpenAPI</a> integration.</p><p>FastAPI has become meanwhile our primary choice for building REST services on top of Python...and if you are still using Flask for building REST service, then you are doing something wrong.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/pp.server/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">pp.server</div><div class="kg-bookmark-description">pp.server - Produce &amp; Publish Server</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="New major Produce & Publish Server release"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="New major Produce & Publish Server release"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/pp.client-python/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">pp.client-python</div><div class="kg-bookmark-description">Produce &amp; Publish Python Client</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="New major Produce & Publish Server release"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="New major Produce & Publish Server release"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Medical Publishing Solutions]]></title><description><![CDATA[<p>Ein Tätigkeitsschwerpunkt von <a href="https://zopyx.de">ZOPYX</a> wird in 2021 im Bereich medizinischer Applikationen, insb. im Bereich  medizinischer Publishing Systeme liegen. Als Architekt und technischer Dienstleister der Leitlinien Plattform <a href="https://medical-publishing.solutions/onkopedia/">Onkopedia</a> und anderer Systeme haben wir in den vergangenen Jahre eine umfangreiche Expertise im Bereich Medizin aufgebaut, um auch als kleiner Player im Markt</p>]]></description><link>https://blog.zopyx.com/medical-publishing-solutions/</link><guid isPermaLink="false">60096f728e9fc600010618a5</guid><category><![CDATA[Plone]]></category><category><![CDATA[Publishing]]></category><category><![CDATA[Print-CSS]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Thu, 21 Jan 2021 12:28:38 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/01/MPS-Logo-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2021/01/MPS-Logo-1.png" alt="Medical Publishing Solutions"><p>Ein Tätigkeitsschwerpunkt von <a href="https://zopyx.de">ZOPYX</a> wird in 2021 im Bereich medizinischer Applikationen, insb. im Bereich  medizinischer Publishing Systeme liegen. Als Architekt und technischer Dienstleister der Leitlinien Plattform <a href="https://medical-publishing.solutions/onkopedia/">Onkopedia</a> und anderer Systeme haben wir in den vergangenen Jahre eine umfangreiche Expertise im Bereich Medizin aufgebaut, um auch als kleiner Player im Markt der medizinischen Dienstleistungen (und in dessen Umfeld) erfolgreich agieren zu können.</p><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2021/01/MPS-Logo.png" class="kg-image" alt="Medical Publishing Solutions" srcset="https://blog.zopyx.com/content/images/size/w600/2021/01/MPS-Logo.png 600w, https://blog.zopyx.com/content/images/size/w1000/2021/01/MPS-Logo.png 1000w, https://blog.zopyx.com/content/images/size/w1600/2021/01/MPS-Logo.png 1600w, https://blog.zopyx.com/content/images/2021/01/MPS-Logo.png 1608w" sizes="(min-width: 720px) 720px"></figure><p>Im Rahmen dieser Fokussierung und Profilschärfung von ZOPYX haben wir die neue Website <strong><a href="https://medical-publishing.solutions">Medical Publishing Solutions</a></strong>, die unsere Dienstleistungen und Expertise speziell im medizinischen Sektor bündelt und besser präsentiert.</p><p>Unsere medizinischen Publishing-Lösungen erlauben u.a.</p><ul><li>Verlustfreie Konvertierung von DOCX nach XML und zurück</li><li>Konvertierung von XML in alle gängigen Zielformate</li><li>instantanes Publizieren</li></ul><p>Durch unsere Publishing-Lösungen versetzen wir unsere Kunden ihre Informationen (z.B. medizinische Leitlinien) in Eigenregie unter Beibehaltung der Autonomie über Daten und Inhalte unabhängig von externen Dienstleistern und Verlagen zu veröffentlichen. Einstellen von Inhalten, Konvertierung und Publizieren erfolgt i.A. als Self-Service Portal ohne weitere Involvierung von externen Dienstleistern oder Verlagen.</p><p>Kern-Komponente unserer Lösungen sind das CMS <a href="https://plone.org">Plone</a> und das eigene<a href="https://xml-director.info"> XML-Director </a>Framework.</p><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2021/01/Onkopedia-Architecture-Original.png" class="kg-image" alt="Medical Publishing Solutions" srcset="https://blog.zopyx.com/content/images/size/w600/2021/01/Onkopedia-Architecture-Original.png 600w, https://blog.zopyx.com/content/images/size/w1000/2021/01/Onkopedia-Architecture-Original.png 1000w, https://blog.zopyx.com/content/images/size/w1600/2021/01/Onkopedia-Architecture-Original.png 1600w, https://blog.zopyx.com/content/images/size/w2400/2021/01/Onkopedia-Architecture-Original.png 2400w" sizes="(min-width: 720px) 720px"></figure><hr><p><strong>Kontakt</strong><br>Andreas Jung (<a href="mailto:info@zopyx.com">info@zopyx.com</a>)<br><a href="https://medical-publishing.solutions">Medical Publishing Solutions</a></p>]]></content:encoded></item><item><title><![CDATA[Going Wordpress]]></title><description><![CDATA[<p>I am moving corporate sites to Wordpress  🤡	-t his is not an April 1st joke!!!</p><p>I am currently in progress moving some of my corporate sites and some project sites from Plone to Wordpress. I struggled a long with the decision what to do with my almost ten year old</p>]]></description><link>https://blog.zopyx.com/going-wordpress/</link><guid isPermaLink="false">5ff448e0e7482600012497a5</guid><category><![CDATA[Plone]]></category><category><![CDATA[Wordpress]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Tue, 05 Jan 2021 11:26:28 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2021/01/WordPress-logotype-standard.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2021/01/WordPress-logotype-standard.png" alt="Going Wordpress"><p>I am moving corporate sites to Wordpress  🤡	-t his is not an April 1st joke!!!</p><p>I am currently in progress moving some of my corporate sites and some project sites from Plone to Wordpress. I struggled a long with the decision what to do with my almost ten year old corporate sites. I spend almost two year into static site generators, custom HTML page builders, frameworks like Tailwind UI kit and many more. </p><p>I always had an eye on Wordpress of the last years but stability never convinced me. In fact, I could break a fresh Wordpress within minutes...but this has not happened yet with Wordpress 5.6. </p><p>As a proof of concept and for getting deeper into Wordpress, I created a new project site (not online so far) for checking various site builder options, extensions and add-ons and deployment options. </p><p>Here is my current stack:</p><ul><li>Wordpress 5.6 (installed and maintained through the <strong>wp command line</strong> utility)</li><li>Porto theme</li><li>Elementor Pro as site builder (feels supernatural compared to WPbakery)</li><li>Smart Slider 3 </li><li>UpdraftPlus for backup and restore (stores all data on Dropbox)</li><li>WP Mail SMTP for mail </li><li>Caldera Forms - a super intuitive form builder</li><li>miniOrange 2 for 2FA </li><li>FileBird Lite - for folder support under "media"</li><li>DSGVO AIO for imprint/privacy and cookie alerts</li><li>WPPaint - for manipulating images</li><li>Duplicator - for cloning a WP site</li><li>Matomo Analytics#</li><li>Sucuri Security Suite</li><li>WP Fastest Cache</li></ul><p>My current Wordpress 5.6 setup appear rock solid and it's just doing the thing. "The thing" is creating (more or less) shiny websites and focus on content. The available theme for Wordpress leave a lot of room for your own corporate identity. I do not care so much about tiny design details and I don't want to invest a lot of time and money into my "own" theme.</p><p>In the end, the decision was based on "getting things done" in a reasonable timeframe and for a reasonable investment.  Of course, Wordpress leaves too many styling options for content creators but that's exactly what Wordpress is for in the first place: building shiny corporate sites, landing pages etc. This is not the primary scope of Plone and the primary scope of Plone can usually not be covered by Plone. So there is no contradiction here using Wordpress as a Plone solution provider.</p>]]></content:encoded></item><item><title><![CDATA[Plone migrations: importing collective.jsonify export data into ArangoDB (Part 3)]]></title><description><![CDATA[<p>In the last blog post, I described how to export a Plone site using <em>collective.jsonify </em>to the filesystem as directory of JSON data. This blog post will explain briefly to import the JSON data into <a href="https://www.arangodb.com/">ArangoDB</a> as interim migration database</p><hr><p><strong>Why ArangoDB? </strong>We are using <a href="https://www.arangodb.com/">ArangoDB</a> as a document</p>]]></description><link>https://blog.zopyx.com/importing-collective-jsonify-export-data-into-arangodb-part-3/</link><guid isPermaLink="false">5fc0b66a9c02b70001ac3d3e</guid><category><![CDATA[Plone]]></category><category><![CDATA[Python]]></category><category><![CDATA[Migrations]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Fri, 27 Nov 2020 08:47:25 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1-2.png" alt="Plone migrations: importing collective.jsonify export data into ArangoDB (Part 3)"><p>In the last blog post, I described how to export a Plone site using <em>collective.jsonify </em>to the filesystem as directory of JSON data. This blog post will explain briefly to import the JSON data into <a href="https://www.arangodb.com/">ArangoDB</a> as interim migration database</p><hr><p><strong>Why ArangoDB? </strong>We are using <a href="https://www.arangodb.com/">ArangoDB</a> as a document database for storing the JSON data. This allows us to introspect and query the data to be migrated and imported. This is often necessary in complex migration with unknown data and unknown object relations. Using <em>grep </em>or similar tools on a huge JSON dump is unlikely the right approach. Using <a href="https://www.arangodb.com/">ArangoDB</a> also allows us to run partial migrations for testing purposes (e.g. for testing the migration on a particular folder or a particular content type).</p><p>ArangoDB is multi-model database (key-value store, document store, graph database) and is available as community edition, an enterprise edition and as cloud edition (ArangoDB Oasis). The community edition is sufficient for migration projects. There are various <a href="https://www.arangodb.com/download-major/">installations options</a> for all operating systems, all Linux distributions and through Docker.</p><p>After the installation of ArangoDB, you need to create a dedicated user account within ArangoDB and a dedicated database. This can be easily achieved through the ArangoDB web UI.  We assume for the following steps that you have created a database named <em>plone </em>and an ArangoDB user account <em>plone </em>with password <em>secret.</em></p><hr><h3 id="preparing-your-target-plone-site">Preparing your target Plone site</h3><p>We assume that the target Plone site is running on Plone 5.2 and Python 3. The core functionality is integrated in the <em>collective.plone5migration</em> add-on for Plone. Prepare your buildout like this:</p><!--kg-card-begin: markdown--><pre><code>[buildout]
extends = buildout.cfg

auto-checkout +=
    collective.plone5migration     

sources = sources

[sources]
collective.plone5migration = git git@github.com:collective/collective.plone5migration.git


[instance]
eggs +=
    collective.plone5migration
</code></pre>
<!--kg-card-end: markdown--><hr><h3 id="importing-your-json-data-into-arangodb">Importing your JSON data into ArangoDB</h3><p>After running buildout with the configuration given above, you will find this generated import script:</p><!--kg-card-begin: markdown--><pre><code> bin/import-jsondump-into-arangodb --help
usage: import-jsondump-into-arangodb [-h] [-d DATABASE] [-c COLLECTION] [-url CONNECTION_URL] [-u USERNAME] [-p PASSWORD] [-i IMPORT_DIRECTORY] [-x]

optional arguments:
  -h, --help            show this help message and exit
  -d DATABASE, --database DATABASE
                        ArangoDB database
  -c COLLECTION, --collection COLLECTION
                        ArangoDB collection
  -url CONNECTION_URL, --connection-url CONNECTION_URL
                        ArangoDB connection URL
  -u USERNAME, --username USERNAME
                        ArangoDB username
  -p PASSWORD, --password PASSWORD
                        ArangoDB password
  -i IMPORT_DIRECTORY, --import-directory IMPORT_DIRECTORY
                        Import directory with JSON files
  -x, --drop-collection
                        Drop collection

</code></pre>
<!--kg-card-end: markdown--><p>In the former blog post we created a JSON export in I<em>/tmp/content_test_2020-11-25-15-40-59. </em></p><p>You can import this export directory into ArangoDB using:</p><!--kg-card-begin: markdown--><pre><code>bin/import-jsondump-into-arangodb -i /tmp/content_test_2020-11-25-15-40-59 -x -u plone -p secret -d plone
</code></pre>
<p>Output:</p>
<pre><code>connection=http://localhost:8529
username=root
database=ugent
collection=import
import directory=/tmp/content_test_2020-11-25-15-40-59
truncating existing collection
truncating existing collection...DONE
......
</code></pre>
<p>A nice progressbar will should you the progress of the import operation. The import speed depends on your local system. A typical import of 100.000 JSON files (100.000 Plone objects) with a total size of 50 GB takes about 45 to 60 minutes (largely dependent on the IO speed of your disk).</p>
<!--kg-card-end: markdown--><hr><p><em>collective.plone5migration </em>has been developed by Andreas Jung as part of a customer project with the University Ghent (migration of the <a href="https://ugent.be">ugent.be</a> site to Plone 5).</p>]]></content:encoded></item><item><title><![CDATA[Plone migrations: exporting a Plone site using collective.jsonify (Part 2)]]></title><description><![CDATA[<p>In this blog post, I describe to how to use <em>collective.jsonify</em> for exporting a Plone to JSON.</p><h3 id="buildout-preparation">Buildout preparation</h3><ul><li>install collective.json (we are using our<em> ugent-fixes </em>branch. This branch will be merged back into the <em>master</em> branch soon)</li></ul><blockquote>[buildout] <br>sources = sources <br>auto-checkout =  <br>    collective.jsonify <br><br>[instance] <br><br>eggs += <br>    collective.jsonify</blockquote>]]></description><link>https://blog.zopyx.com/exporting-a-plone-site-using-collective-jsonify/</link><guid isPermaLink="false">5fbd07219c02b70001ac3cdd</guid><category><![CDATA[Plone]]></category><category><![CDATA[Python]]></category><category><![CDATA[Migrations]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Wed, 25 Nov 2020 15:17:11 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1-1.png" alt="Plone migrations: exporting a Plone site using collective.jsonify (Part 2)"><p>In this blog post, I describe to how to use <em>collective.jsonify</em> for exporting a Plone to JSON.</p><h3 id="buildout-preparation">Buildout preparation</h3><ul><li>install collective.json (we are using our<em> ugent-fixes </em>branch. This branch will be merged back into the <em>master</em> branch soon)</li></ul><blockquote>[buildout] <br>sources = sources <br>auto-checkout =  <br>    collective.jsonify <br><br>[instance] <br><br>eggs += <br>    collective.jsonify <br><br>[sources] <br>collective.jsonify = git git@github.com:collective/collective.jsonify.git branch=ugent-fixes  </blockquote><h3 id="installation-of-collective-jsonify-inside-your-zope-plone-installation">Installation of collective.jsonify inside your Zope/Plone installation</h3><blockquote>bin/instance run src/collective.jsonify/collective/jsonify/scripts/install_migration.py</blockquote><h3 id="run-the-migration-export">Run the migration export </h3><blockquote>bin/instance run src/collective.jsonify/collective/jsonify/scripts/migration_export.py &lt;plone site id&gt;</blockquote><p>You will see some output similar to </p><blockquote>2020-11-25 15:40:59 WARNING collective.jsonify export &gt;&gt; Directory /tmp/content_test_2020-11-25-15-40-59</blockquote><p>Depending on the site of your Plone site and the number of Plone object, the export may take a while. An export on a larger customer site with 100.000 objects and 60 GB data, an export took about 90 minutes...these numbers may vary depending on disk and CPU speed. The export will generate an export directory in <em>/tmp</em> (by default). The directory name is based on the Plone site ID and a timestamp. You can specify a different export directory by setting the <em>$EXPORT_DIR </em>directory.</p><p>The next blog post will cover the aspect of setting up <a href="https://arangodb.com">ArangoDB</a> as migration data and importing the exported JSON data into ArangoDB.</p>]]></content:encoded></item><item><title><![CDATA[Plone Migration approaches (Part 1)]]></title><description><![CDATA[<p>This is the first of a series of blog posts that deals with Plone migrations. I am trying to tell the story about how we are doing large-scale Plone migrations which usually involves migration of code, switching add-ons and  reorganizing content. This is usually accomplished in our migration through an</p>]]></description><link>https://blog.zopyx.com/plone-migration-approaches/</link><guid isPermaLink="false">5fbd03e59c02b70001ac3cae</guid><category><![CDATA[Plone]]></category><category><![CDATA[Python]]></category><category><![CDATA[Migrations]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Tue, 24 Nov 2020 13:07:22 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg-1.png" alt="Plone Migration approaches (Part 1)"><p>This is the first of a series of blog posts that deals with Plone migrations. I am trying to tell the story about how we are doing large-scale Plone migrations which usually involves migration of code, switching add-ons and  reorganizing content. This is usually accomplished in our migration through an export of the original Plone site and "magic" importer script on the target system. This migration approach evolved over the years. Our current approach is based on the experience and the work over the last year when we worked on a large-scale migration for the University of Ghent (90.000 content objects, 50 GB of data) and some sites for an industrial customer in Stuttgart.</p><h4 id="migration-approaches">Migration approaches</h4><h5 id="in-place-plone-migration">In-place Plone migration</h5><p>Plone 5.2 supports a so-called “in-place” migration which is usually the right choice for simple sites with simple content-types and standard add-ons like PloneFormGen. The database file of Plone 4.3 is migrated in-place and transformed into a Plone 5.2 compliant database file. This is the approach in theory. It is often necessary to perform additional work and additional migration steps to migrate an old Plone database to Python 3 format - in particular when the Plone site has a certain age and history (which often implies a lot of cruft and old configurations that can break or interfere with the standard Plone migration). We use this migration approach only for small and simple sites.</p><h5 id="export-import-using-transmogrifier">Export/Import using Transmogrifier</h5><p>The export/import approach allows us to perform a clean export of the content from the old site and to perform a clean import into a fresh Plone 5.2 site. So the new site will not contain any cruft content or obsolete configurations etc. The export of the is usually accomplished using the collective.jsonify add-on for Plone which basically exports all content objects and their metadata as JSON - one JSON file per content object. We also have supplementary code to export additional Plone settings or e.g. the Plone users and groups (if need, unless users and groups are maintained in LDAP or Active Directory or something similar). The exported JSON files are the foundation for a fresh import using the Plone Transmogrifier tool. Transmogrifier is basically a processing pipeline for piping the JSON data into Plone. The import can be customized using so-called “blueprints” in order to inject project-dependent dependencies, filtering steps, etc.</p><h5 id="export-import-using-a-custom-migration-pipeline">Export/Import using a custom migration pipeline</h5><p>In our larger Plone migration projects, we often use a variation of the Transmogrifier approach. The export of the data and content from the original site is also done using the collective.jsonify add-on. The exported JSON files are then being imported into a migration database (we use ArangoDB). The migration database allows us to perform a partial import, query, and inspect the migration data in order to work on migration aspects and problems more easily than searching to Gigabyte of JSON files on the filesystem with operating system related tools like “grep”). The import is done using a custom migration package (which is to 80% generic for most Plone migrations, the remaining 20% are project-specific adjustments or additions because every migration is different). Our migration package allows us to run partial migration in order to test migrations more flexible. E.g. the migration package allows us to import a subset of content (either one or more folder or only specific content-types). This is very handy and time-saving. Migrating a large Plone site with a lot of content can take many hours. So testing changes on a particular feature with a subset of the data in advance is always better than having a failure on the full migration set after some hours.</p>]]></content:encoded></item><item><title><![CDATA[Some new Plone add-on releases]]></title><description><![CDATA[<p>Today, we released some small Plone add-ons as we developed and used over the last years for customer projects. In many cases we duplicated the same over and over again...so it was time for some refactoring and moving the code into dedicated packages.</p><h3 id="zopyx-plone-persistentlogger">zopyx.plone.persistentlogger</h3><p>zopyx.plone.persistentlogger</p>]]></description><link>https://blog.zopyx.com/some-new-plone-add-on-releases/</link><guid isPermaLink="false">5fbbdb1f9c02b70001ac3c6d</guid><category><![CDATA[Plone]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Mon, 23 Nov 2020 16:05:54 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/11/Logo_Plone.svg.png" alt="Some new Plone add-on releases"><p>Today, we released some small Plone add-ons as we developed and used over the last years for customer projects. In many cases we duplicated the same over and over again...so it was time for some refactoring and moving the code into dedicated packages.</p><h3 id="zopyx-plone-persistentlogger">zopyx.plone.persistentlogger</h3><p>zopyx.plone.persistentlogger supports persistent logging where the log data is stored on an arbitrary persistent Plone object (as annotation). Typical usecases are application specific logging e.g. for logging a history per content object directly in Plone rather then having a huge common log on the filesystem. The log entries are stored using object annotations.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/zopyx.plone.persistentlogger/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">zopyx.plone.persistentlogger</div><div class="kg-bookmark-description">Persistent logging for Plone objects</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="Some new Plone add-on releases"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="Some new Plone add-on releases"></div></a></figure><h3 id="collective-metadataaudit">collective.metadataaudit</h3><p>collective.metaaaudit logs metadata changes to Plone content objects transparently (for all content types). This add-on in in particular useful when you have to answer the question “who was doing what and when”.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/collective.metadataaudit/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">collective.metadataaudit</div><div class="kg-bookmark-description">Audit metadata changes</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="Some new Plone add-on releases"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="Some new Plone add-on releases"></div></a></figure><h3 id="collective-debug">collective.debug</h3><p>This add-on provides a @@debug browser view that returns some debugging information on the current context object, the current user and its roles, the instance dict of the current context object and request information.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/collective.debug"><div class="kg-bookmark-content"><div class="kg-bookmark-title">collective.debug</div><div class="kg-bookmark-description">A Plone debug view for introspecting the current context, user, roles and instance dict</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="Some new Plone add-on releases"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="Some new Plone add-on releases"></div></a></figure><h3 id="collective-contentsync2">collective.contentsync2</h3><p>Content sync between Plone sites over plone.restapi</p><p>Features</p><ul><li>sync content folders or individual content objects to a remote Plone site</li><li>full sync for initial sync</li><li>incremental sync for content updates</li><li>configurable sync behavior per content type</li><li>trigger immediate sync upon create or update operations through content rules</li></ul><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/collective.contentsync2/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">collective.contentsync2</div><div class="kg-bookmark-description">Content sync between Plone sites</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.6a76275d.ico" alt="Some new Plone add-on releases"><span class="kg-bookmark-publisher">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.90915068.jpg" alt="Some new Plone add-on releases"></div></a></figure><p></p>]]></content:encoded></item><item><title><![CDATA[New print-css.rocks release]]></title><description><![CDATA[<p>Earlier this month, I released an update of my PrintCSS Portal <a href="https://print-css.rocks">print-css.rocks</a>.</p><p>Thiis update includes support for new tools like</p><ul><li>WeasyPrint</li><li>Typeset.sh</li><li>PagedJS </li></ul><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2020/10/logo.png" class="kg-image" alt srcset="https://blog.zopyx.com/content/images/size/w600/2020/10/logo.png 600w, https://blog.zopyx.com/content/images/2020/10/logo.png 695w"></figure><p>I also want to mention the portal <a href="https://printcss.live">printcss.live </a>by Andreas Zettl. printcss.live is a very nice and supplementary addition to the PrintCSS community</p>]]></description><link>https://blog.zopyx.com/new-print-css-rocks-release-online/</link><guid isPermaLink="false">5f894bd4289ed90001a7401a</guid><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Fri, 16 Oct 2020 07:45:14 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/10/banner2-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/10/banner2-2.png" alt="New print-css.rocks release"><p>Earlier this month, I released an update of my PrintCSS Portal <a href="https://print-css.rocks">print-css.rocks</a>.</p><p>Thiis update includes support for new tools like</p><ul><li>WeasyPrint</li><li>Typeset.sh</li><li>PagedJS </li></ul><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2020/10/logo.png" class="kg-image" alt="New print-css.rocks release" srcset="https://blog.zopyx.com/content/images/size/w600/2020/10/logo.png 600w, https://blog.zopyx.com/content/images/2020/10/logo.png 695w"></figure><p>I also want to mention the portal <a href="https://printcss.live">printcss.live </a>by Andreas Zettl. printcss.live is a very nice and supplementary addition to the PrintCSS community because it allows you to test tools directly within the browser. Andreas Zettl also maintains a list a PrintCSS articles on <a href="https://medium.com/printcss">medium.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[Blog moved to Ghost]]></title><description><![CDATA[<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.zopyx.com/content/images/2020/10/2880px-Ghost-Logo.svg.png" class="kg-image" alt srcset="https://blog.zopyx.com/content/images/size/w600/2020/10/2880px-Ghost-Logo.svg.png 600w, https://blog.zopyx.com/content/images/size/w1000/2020/10/2880px-Ghost-Logo.svg.png 1000w, https://blog.zopyx.com/content/images/size/w1600/2020/10/2880px-Ghost-Logo.svg.png 1600w, https://blog.zopyx.com/content/images/size/w2400/2020/10/2880px-Ghost-Logo.svg.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Ghost Logo</figcaption></figure><p>After almost 12 years I moved my personal blog blog.zopyx.com from Plone 4 to the Ghost blogging platform. You may ask why? First, my old Plone 4 installation reached end of lifetime a long time ago and it was time for moving the content to a</p>]]></description><link>https://blog.zopyx.com/blog-moved-to-ghost/</link><guid isPermaLink="false">5f872bc0657d740001ccd20c</guid><category><![CDATA[Meta]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Wed, 14 Oct 2020 16:59:48 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/10/2880px-Ghost-Logo.svg-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.zopyx.com/content/images/2020/10/2880px-Ghost-Logo.svg.png" class="kg-image" alt="Blog moved to Ghost" srcset="https://blog.zopyx.com/content/images/size/w600/2020/10/2880px-Ghost-Logo.svg.png 600w, https://blog.zopyx.com/content/images/size/w1000/2020/10/2880px-Ghost-Logo.svg.png 1000w, https://blog.zopyx.com/content/images/size/w1600/2020/10/2880px-Ghost-Logo.svg.png 1600w, https://blog.zopyx.com/content/images/size/w2400/2020/10/2880px-Ghost-Logo.svg.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Ghost Logo</figcaption></figure><img src="https://blog.zopyx.com/content/images/2020/10/2880px-Ghost-Logo.svg-1.png" alt="Blog moved to Ghost"><p>After almost 12 years I moved my personal blog blog.zopyx.com from Plone 4 to the Ghost blogging platform. You may ask why? First, my old Plone 4 installation reached end of lifetime a long time ago and it was time for moving the content to a different system. I investigated a lot of time into options like static site generators like Eleventy, Huge and others but I was not very much happy with them. I just wanted a simple system where I can add and publish content easily. </p><p>The migration from Plone 4 to Ghost was a bit painful. First, I tried to use plone.restapi or collective.jsonify but the Plone 4 site gave me a bunch of headaches and errors. So I decided to create a static copy of the original bog using <strong>httrack. </strong>With some Python code I was able to extract the content part from the HTML markup of each document and some necessary metadata like publication date, title, description etc. All extracted data was written to a JSON file.</p><p>Ghost itself provides some JSON format as import/export format. Due to limited resources I hired a Ghost developer (for a very small budget) that converted my JSON format into the Ghost JSON format.</p><p>Then setting up Ghost (running in a Docker container) behind Apache was more or less straight-forward. As with every new system: you need to learn and try things out. </p><p>For the moment, I am happy with the result and outcome. There are clearly some issues like a better theme or some CSS fixes to be implemented.</p><p>I hope to blog again more in the future.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Plone and COVID-19]]></title><description><![CDATA[<p></p><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2020/10/image_mini-5.png" class="kg-image" alt></figure><p>These days are tough and challenging for all of us. COVID-19 affects everyone across the globe. The Coronavirus hits every country differently. Fortunately, Germany seems to be better prepared than other countries. However, there will be a huge fallout from this crisis and many things will not be the same</p>]]></description><link>https://blog.zopyx.com/plone-and-covid-19/</link><guid isPermaLink="false">5f84546c3156e30001254dc1</guid><category><![CDATA[Plone]]></category><dc:creator><![CDATA[Andreas Jung]]></dc:creator><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><media:content url="https://blog.zopyx.com/content/images/2020/10/onkopedia.svg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.zopyx.com/content/images/2020/10/onkopedia.svg" alt="Plone and COVID-19"><p></p><figure class="kg-card kg-image-card"><img src="https://blog.zopyx.com/content/images/2020/10/image_mini-5.png" class="kg-image" alt="Plone and COVID-19"></figure><p>These days are tough and challenging for all of us. COVID-19 affects everyone across the globe. The Coronavirus hits every country differently. Fortunately, Germany seems to be better prepared than other countries. However, there will be a huge fallout from this crisis and many things will not be the same as they were for a while. So, please #stayathome and stay safe.</p><p>But let me tell you a small success story around Plone and COVID-19.</p><p>We are running the portal <a href="https://www.onkopedia.com/">Onkopedia (www.onkopedia.com)</a> for over a decade where the medical guidelines for oncology and hematology for Germany, Austria and Switzerland are published. The portal contains treatment guidelines for over 60 diseases which also includes medical studies, protocols, certifications and information about individuals drugs and active components. With the growing Corona crisis in Europe, high-risk patients with pre-existing conditions like cancer came into the focus. There was an urgent need for providing COVID-19 specific information for most diseases to the public.</p><p>The Onkopedia portal was always running and powered by Plone (nowadays running on Plone 5.2, Python 3). Within two or three days we had to extend our data model for COVID-19 in order to provide the functionality required to publish the COVID-19 information specific for each disease. With the help of the whole Onkopedia development team, we were able to to roll out the necessary Onkopedia update within a very short time from of three days. The required changes affected the Plone data model for the guidelines and a bunch of UI aspects like a new COVID-19 section and individual markers in guideline documents for referencing the related COVID-19 information in the COVID-19 master guideline.</p><p>As a result, we managed to roll out the new <a href="https://www.onkopedia.com/de/de/onkopedia/guidelines/covid19-overview">COVID-19 section</a> on onkopedia.com (German only) yesterday with individual COVID-19 content for over 40 different diseases.</p><p>Key success factors: Plone and a great team (<a href="https://abstract-technology.de/">Abstract Technology</a>, <a href="http://www.practice-innovation.de/">Practice Innovation</a>, <a href="https://appweeve.com/">AppWeeve</a>)</p><p>Thank you all for making this happen and for contributing in the fight with COVID-19.</p>]]></content:encoded></item></channel></rss>