<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sascha Bardua</title>
    <description>The latest articles on DEV Community by Sascha Bardua (@thesaatsch).</description>
    <link>https://dev.to/thesaatsch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F246739%2F58125a92-ff19-4405-b7b4-2f5d2ff105da.png</url>
      <title>DEV Community: Sascha Bardua</title>
      <link>https://dev.to/thesaatsch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thesaatsch"/>
    <language>en</language>
    <item>
      <title>Best practises to build GDPR-compliant cookie banners with Klaro</title>
      <dc:creator>Sascha Bardua</dc:creator>
      <pubDate>Fri, 04 Jun 2021 14:50:15 +0000</pubDate>
      <link>https://dev.to/taikonauten/best-practises-to-build-gdpr-compliant-cookie-banners-with-klaro-nn3</link>
      <guid>https://dev.to/taikonauten/best-practises-to-build-gdpr-compliant-cookie-banners-with-klaro-nn3</guid>
      <description>&lt;h2&gt;
  
  
  🇪🇺 What are the current guidelines in Europe for GDPR?
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://gdpr.eu/"&gt;General Data Protection Regulation (GDPR)&lt;/a&gt; is the toughest privacy and security law in the world. Though it was drafted and passed by the European Union (EU), it imposes obligations onto organisations anywhere, so long as they target or collect data related to people in the EU. The regulation was put into effect on May 25, 2018. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is GDPR, the EU’s new data protection law?&lt;/strong&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The GDPR will levy harsh fines against those who violate its privacy and security standards, with penalties reaching into the tens of millions of euros. &lt;a href="https://gdpr.eu/what-is-gdpr/"&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;European countries are obliged to implement the GDPR. As of now it’s recommended to go the extra mile and be as law-compliant as possible, even if cookie laws are not fully implemented in many countries yet and rather count as guidelines. &lt;/p&gt;

&lt;p&gt;Personal data is any information that relates to an individual who can be directly or indirectly identified: Names and email addresses, but also location information, ethnicity, gender, biometric data, religious beliefs, web cookies, and political opinions. &lt;/p&gt;

&lt;p&gt;The overall objectives are to increase transparency, accountability and data security. And ultimately give back control to the user, who [as a data subject] has these rights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The right to be informed&lt;/li&gt;
&lt;li&gt;The right of access&lt;/li&gt;
&lt;li&gt;The right to rectification&lt;/li&gt;
&lt;li&gt;The right to erasure&lt;/li&gt;
&lt;li&gt;The right to restrict processing&lt;/li&gt;
&lt;li&gt;The right to data portability&lt;/li&gt;
&lt;li&gt;The right to object&lt;/li&gt;
&lt;li&gt;Rights in relation to automated decision making and profiling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since 2016 the EU parliament is working on a draft for “ePrivacy”, which takes data privacy some steps further: by holding accountable providers of web browsers, regulating machine-to-machine communication (see Internet of Things, e.g. GPS data), an obligatory end-to-end encryption, opt-in cookie consent (cookies need to be proactively approved, before they can be used), the opposite is opt-out (the user can revoke cookies afterwards and is not proactively informed).&lt;/p&gt;

&lt;h2&gt;
  
  
  📔 Guide: How to choose a cookie consent tool for your website?
&lt;/h2&gt;

&lt;p&gt;For each use, case or business model there are different factors and requirements that need to be considered. At Taikonauten we went through such an evaluation ourselves to offer our clients the most efficient solution and reduce development and UX overhead.&lt;/p&gt;

&lt;p&gt;Our criteria to choose a third party cookie consent provider:&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosting - server location, open source
&lt;/h3&gt;

&lt;p&gt;Where is the server located? Which are the valid laws for that server location? Can we host the service ourselves? Is the service even open source?&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalability per domain
&lt;/h3&gt;

&lt;p&gt;How does pricing scale for new domains or subdomains? Are subdomains included? What about sub pages? Is the pricing fixed or dynamic?&lt;/p&gt;

&lt;h3&gt;
  
  
  Ease of integration
&lt;/h3&gt;

&lt;p&gt;How easily can the tool be integrated? Are there &lt;a href="https://www.npmjs.com/"&gt;npm packages&lt;/a&gt; or JS frameworks? Are there CMS plugins available? Is the tool compatible with Frontend frameworks like &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; or &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt;? What about client-side or server-side rendering? How complete and helpful is the documentation?&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Language Support
&lt;/h3&gt;

&lt;p&gt;Does the tool support multiple languages? Can we adjust the tools for multiple regions with different legislation?&lt;/p&gt;

&lt;h3&gt;
  
  
  Customisation &amp;amp; Styling
&lt;/h3&gt;

&lt;p&gt;Can we customise aspects of the cookie banner such as branding, colors, fonts and texts? Do we need to hack CSS rules or are there properties, configuration files or JS frameworks to do so? Can all texts be replaced?&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation
&lt;/h3&gt;

&lt;p&gt;Can websites be scanned regularly and automatically to update the cookie declaration? Can the contents of the cookie declaration be automated?&lt;/p&gt;

&lt;h3&gt;
  
  
  Other features
&lt;/h3&gt;

&lt;p&gt;What about A/B testing? Can consent data be exported?&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 6 Tips for implementing Law-Compliant Cookie Banners
&lt;/h2&gt;

&lt;p&gt;Take data privacy of your users seriously and make it part of technical conception and UX design.&lt;/p&gt;

&lt;p&gt;Get legal support up front if you’re designing or developing websites. Be on the safe side and avoid unnecessary costs and efforts later.&lt;/p&gt;

&lt;p&gt;Stay up to date with latest regulations and install a privacy manager in your team or company, dedicated to this topic.&lt;/p&gt;

&lt;p&gt;Reduce coding overhead by using a third-party cookie and consent management tool. &lt;/p&gt;

&lt;p&gt;Prepare for scalability: think of what happens when the website adds multi-language support, new domains/ subdomains or the number of users increases. Consider that each consent tool has different payment plans and scale less good for different scenarios.&lt;/p&gt;

&lt;p&gt;If you work with multiple clients, pick a tool that covers 90% of your cases in order to reduce your tech stack.&lt;/p&gt;

&lt;p&gt;What did we choose at Taikonauten&lt;/p&gt;

&lt;p&gt;At Taikonauten we build websites for different clients, each with very individual requirements: from corporate websites, online shops and digital service platforms. Trust and credibility towards their clients is a key ingredient for their success, which needs to be reflected in the choice of technology. As such, &lt;a href="https://heyklaro.com/"&gt;Klaro’s open-source approach&lt;/a&gt; and its highly customizable, versatile set of features made us choose Klaro as our go-to cookie consent tool. &lt;a href="https://dev.to/taikonauten/gdpr-compliant-user-consent-management-with-klaro-53i8"&gt;Read this article to learn more about how we work with Klaro in our projects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;💬 What is your take on data privacy at the faces of design and web development? Let us know in the comments below!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Evaluation and tweaks using Strapi Headless CMS + GraphQL</title>
      <dc:creator>Sascha Bardua</dc:creator>
      <pubDate>Tue, 25 May 2021 10:43:18 +0000</pubDate>
      <link>https://dev.to/taikonauten/evaluation-and-tweaks-using-strapi-headless-cms-graphql-4ofc</link>
      <guid>https://dev.to/taikonauten/evaluation-and-tweaks-using-strapi-headless-cms-graphql-4ofc</guid>
      <description>&lt;p&gt;Recently we developed a career website. We faced the challenge to mitigate the risks of integrating legacy code while staying in scope, on budget and on time during project execution. Key requirements were the integrating of APIs such as Salesforce and XING. We had limited access to the previous developers, which increased risks due to potential unforeseen bottlenecks.&lt;/p&gt;

&lt;p&gt;The approach we chose was to find a lightweight CMS backend with just enough functionality to match our specifications without being overly complex for our developers and our client (who maintains the website contents). &lt;/p&gt;

&lt;p&gt;From the various headless CMS options we compared (e.g. &lt;a href="https://www.contentful.com/" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt;, &lt;a href="https://prismic.io/" rel="noopener noreferrer"&gt;Prismic&lt;/a&gt;, &lt;a href="https://www.netlifycms.org/" rel="noopener noreferrer"&gt;Netlify CMS&lt;/a&gt; and &lt;a href="https://getkirby.com/" rel="noopener noreferrer"&gt;Kirby&lt;/a&gt;) we identified, that Strapi is the most suitable for our case. &lt;a href="https://strapi.io/" rel="noopener noreferrer"&gt;Strapi&lt;/a&gt; (a NodeJS Vue.JS based CMS) convinced is with its minimalistic UI and its simple integration with our React and GraphQL frontend tech stack. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2pmus5lp1lgbh2uujzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2pmus5lp1lgbh2uujzo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s good about Strapi?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;minimal and clean UI&lt;/li&gt;
&lt;li&gt;very simple role and user management&lt;/li&gt;
&lt;li&gt;drag &amp;amp; drop builder for data types (collections), pages and modules&lt;/li&gt;
&lt;li&gt;intuitive content management&lt;/li&gt;
&lt;li&gt;GraphQL integration + playground (plugin needs to be installed in CMS admin panel)&lt;/li&gt;
&lt;li&gt;growing community and continuous development&lt;/li&gt;
&lt;li&gt;self-hosted CMS (great for data privacy!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where is room for improvement?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;long initial installation process (using Docker containers)&lt;/li&gt;
&lt;li&gt;out-of-the-box Docker image was not ready to be easily integrated with Gitlab CI/CD and Ansible&lt;/li&gt;
&lt;li&gt;documentation a bit weary around JWT authentication process for users and content&lt;/li&gt;
&lt;li&gt;still early development with some bugs (e.g. our docker container needs to restart every time we make a change in the data model/ schema)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: How did Strapi work for our project?
&lt;/h2&gt;

&lt;p&gt;The initial struggles to set up Strapi using Docker ultimately ended up saving us valuable time during the development of the website. We build our React components and could map them nicely with the CMS data schema (see in hacks below). Querying the data was easy using GraphQL. The Strapi + GraphQL playground made writing queries super simple while being able to debug a query live. In the end, this tech stack reduced the overall development time by almost 30%.&lt;/p&gt;

&lt;p&gt;This freed up development time we then used to integrate and debug legacy code while staying on schedule. The existing Strapi REST API was well documented, so we built workflows to sync data between Salesforce APIs and our own database.&lt;/p&gt;

&lt;p&gt;Our client likes Strapi because of its intuitive UI and as developers, we can enforce input restrictions such as limiting text lengths, required form fields and more to maintain content quality (and prevent breaking the designs).&lt;/p&gt;

&lt;h2&gt;
  
  
  3 tweaks when developing with Strapi
&lt;/h2&gt;

&lt;h3&gt;
  
  
  (1) Remove query limit
&lt;/h3&gt;

&lt;p&gt;Initially, the returned GraphQL queries are limited to 100 entries. This can be changed using a settings.json in &lt;em&gt;/extenstions/graphql/config&lt;/em&gt;. See more in the documentation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;endpoint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/graphql&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tracing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shadowCRUD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;playgroundAlways&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;depthLimit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;amountLimit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;federation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  (2) Visualize Strapi markup as HTML
&lt;/h3&gt;

&lt;p&gt;We used &lt;a href="https://github.com/remarkjs/react-markdown" rel="noopener noreferrer"&gt;React Markup&lt;/a&gt; to visualize Rich Text contents. Some formatting like underlines needs to be handled manually, however. &lt;/p&gt;

&lt;h3&gt;
  
  
  (3) Coherent information architecture in front- and backend
&lt;/h3&gt;

&lt;p&gt;We mapped the React component properties 1:1 to our Strapi data models. This creates consistency throughout the technologies:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CMS Backend:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkhq039x15sxuqt1qw70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkhq039x15sxuqt1qw70.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GraphQL queries:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We also used GraphQL fragments to make code reusable and easily changed when the CMS schema changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BUTTON_FRAGMENT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
  title
  className
  fontColor
  buttonColor
  type
  route
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;React component with Typescript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;fontColor&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;buttonColor&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;JSX&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ButtonEl&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; button`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ButtonEl&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>headlesscms</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Creative Technology in Times of Crisis</title>
      <dc:creator>Sascha Bardua</dc:creator>
      <pubDate>Tue, 02 Feb 2021 16:41:29 +0000</pubDate>
      <link>https://dev.to/taikonauten/creative-technology-in-times-of-crisis-5ca1</link>
      <guid>https://dev.to/taikonauten/creative-technology-in-times-of-crisis-5ca1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Creative technology and empathy are crucial in times of uncertainty. A snapshot of how a health crisis forcefully digitalises our society to satisfy social needs and help.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since the term digitalisation started to enter our business and personal lives it was hard to grasp its true meaning. We just didn't really experience it with our own eyes and hands. The forceful digitalisation of our daily life in times of the Corona pandemic makes the term somewhat more tangible. &lt;/p&gt;

&lt;p&gt;We experience digitalisation in time of crisis in many ways:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We seek information online.&lt;/strong&gt; We already got information from online news and forums. Now we see a rise in new apps and websites and increased use of social media to provide us with real-time data about the pandemic, the spread of the virus, the situation of our favourite local shops or findings ways to help neighbours, friends and family.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We seek help online.&lt;/strong&gt; Spending our time locked up at home, we face new challenges. It’s our mental health and wellbeing, inability to go outside and do groceries or in the worst cases even domestic violence. The internet is the first go-to point for these personal challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We shop online.&lt;/strong&gt; Your local bakery, coffee shop, supermarket, retailers and doctors suddenly needed to offer their products and services online. Often without having any experience with the hidden required digital infrastructures, logistics, online payment workflows and IT-security. New platforms took this opportunity to offer digital marketplaces for small businesses, digitalise the Point of Sale, offer virtual customer experiences or help selling vouchers to &lt;a href="https://helfen-shop.berlin/"&gt;support your locals&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We learn online.&lt;/strong&gt; School fast-tracked their concepts of digital classrooms built on rudimental digital infrastructures. Online courses and personal education gave free access to their courses and made visible the digital illiteracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We take action online.&lt;/strong&gt; Suddenly we comfort a friend during a video call or organise our neighbourhood community in huge Telegram groups. Online communities and mobile apps became the platforms where we offer our help to people we can’t meet, where &lt;a href="https://www.weareopen.business/"&gt;businesses form alliances&lt;/a&gt; in existence-threatening circumstances and people work on projects initiated by  &lt;a href="https://wirvsvirushackathon.org/"&gt;national online hackathons&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We trigger change online.&lt;/strong&gt; Democracy and activism are finding their way online using web technologies, social media and decentralised organisation. This could be online petitions for basic income during Corona or even finding new ways to &lt;a href="https://extinctionrebellion.de/aktionen/rebellion-wave/digital/"&gt;make climate change activism digital&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We experience culture online.&lt;/strong&gt; Museums, galleries, bars and clubs started to offer virtual exhibitions or even offered &lt;a href="https://unitedwestream.berlin/"&gt;live streaming from the club&lt;/a&gt; with local DJs with a full-on financial concept to rescue and support the club scene.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We need creative thinking and empathy to review the ways we use and engage with web and mobile technologies.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To tackle new challenges in these rapidly changing circumstances for both people and organisations, we need to review how we use and engage with web and mobile technologies. Because the internet is our portal to offering and consuming the online world. Building user-friendly, accessible and safe digital products decide who we include. For this, creative thinking and empathy are substantial.&lt;/p&gt;

&lt;p&gt;We need to find ways to seamlessly integrate technology into our daily activities and routines. We need to find fast, scalable solutions for the most pressing and sometimes health-threatening problems. We need to find ways to make technology super easy to understand for everyone, particularly for non-millennials or tech-lovers. We need to make the digital world accessible for everyone on all devices at any time. We need to invest in &lt;a href="https://medium.com/@saschabardua/design-beyond-age-bef48ab0fa66"&gt;digital literacy as part of education and life-long learning no matter their age&lt;/a&gt;. We need to empower people to think digital and develop and maintain their own digital products. And we need to prepare businesses to run smoothly after the crisis, building on newly digitalised infrastructures, tools and processes.&lt;/p&gt;

&lt;p&gt;This how we did this at &lt;a href="https://taikonauten.com/"&gt;Taikonauten&lt;/a&gt;:&lt;/p&gt;

&lt;h1&gt;
  
  
  Schweigen macht Schutzlos
&lt;/h1&gt;

&lt;p&gt;Weißer Ring launched their German campaign &lt;a href="https://schweigenmachtschutzlos.de/"&gt;Schweigen macht Schutzlos&lt;/a&gt; to raise awareness and prevent domestic violence. We helped design and build a website and online shop to buy masks and donate. A brilliant example how digital complements traditional campaigning to increase reach and impact.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kkzcTr4dTEc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  bothAnd
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.bothand.eu/"&gt;bothAnd&lt;/a&gt; is a pan-European community of engaged citizens and domain experts working together for more clarity, transparency, and orientation around data privacy during the corona crisis. We helped design this digital platform to easily access and share the most relevant information on which public servants and technologists take action to serve everyone in need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bpVjNYpZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/2pt1dr3v1bepq1et79dr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bpVjNYpZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/2pt1dr3v1bepq1et79dr.png" alt="Alt Text" width="395" height="846"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Food for Thought 🍕
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How can we make technology accessible for everyone?&lt;/li&gt;
&lt;li&gt;How can we train digital literacy for young and old?&lt;/li&gt;
&lt;li&gt;What can we learn from the current crisis?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>discuss</category>
      <category>corona</category>
      <category>creativity</category>
    </item>
    <item>
      <title>The real challenges of using Mac Catalyst</title>
      <dc:creator>Sascha Bardua</dc:creator>
      <pubDate>Fri, 08 Nov 2019 10:30:30 +0000</pubDate>
      <link>https://dev.to/taikonauten/the-real-challenges-of-using-mac-catalyst-49e</link>
      <guid>https://dev.to/taikonauten/the-real-challenges-of-using-mac-catalyst-49e</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;In our latest project we tried to leverage the abilities brought by Mac Catalyst to make our iOS app Mac-compatible. However simple it was announced, the reality was and still is covered in pitfalls and challenges. In this post we'd like to share key insights and learnings, which we had porting our app. We are still looking for answers and are excited to get more input from this great community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adapt your information design
&lt;/h2&gt;

&lt;p&gt;Working on a desktop app is fundamentally different from working on  mobile devices. The way we interact with our environment, where we look for information and where we use the app have a massive impact on the overall app design and its information structure. We started with mobile-only designs and had to learn, that it's not quite that simple to bring it to macOS. Here are some implications which need to be reflected in the information architecture of your designs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will need an iPad app as a stepping stone from iOS to macOS. There is no way to avoid that step. &lt;/li&gt;
&lt;li&gt;Desktop navigation happens mostly at upper part of your screen or its window margins. Did you consider putting your commands and actions into the &lt;strong&gt;main menu, a toolbar or sidebar&lt;/strong&gt;? Did you design for segments instead of tabs?&lt;/li&gt;
&lt;li&gt;Mobile apps usually hide information until it's needed. Desktop resolution allows for showing more data or hide it in context menus or the menu bar. Did you rethink where the user finds all available information in a desktop-friendly way?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's look at the example of the new JIRA macOS app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fz27j2z0vqlm5yilmcntf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fz27j2z0vqlm5yilmcntf.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make all components and actions Mac-compatible
&lt;/h2&gt;

&lt;p&gt;Apps can make use of various UI elements, such as dialogs, prompts and push notifications. It is crucial to check whether all of these work as expected when being ported by Mac Catalyst.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add click capabilities
&lt;/h2&gt;

&lt;p&gt;Most of the native iOS components map touch handlers to click handlers. However, we have designed our own complex components building on a bottom-sheet navigation and touch-optimizing all user inputs in there. For cases like this, it makes sense to double-check all event handlers and test their "clickability". Does the click event handler return the same object and data than the touch event handler?&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect menu commands to React code
&lt;/h2&gt;

&lt;p&gt;To follow the Apple-given guidelines for an optimal Mac integration we need to write Swift code. For instance, we do need to put in menu commands which functionality is coded in React Native classes but called in a Swift file in Xcode. Bridging React code and native code is essential. &lt;/p&gt;




&lt;p&gt;We will update this article continuously and add new insights and code examples, once we fix some fundamental building issues. We appreciate all help solving a problem, which stops us: &lt;a href="https://github.com/facebook/react-native/issues/27166" rel="noopener noreferrer"&gt;Undefined symbols for architecture x86_64 React Native 0.61.2&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
