<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Kirby" -->
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">

  <channel>
    <title>Mot-cl&#233;: mobile app &#183; Blog &#183; Liip</title>
    <link>https://www.liip.ch/fr/blog/tags/mobile+app</link>
    <generator>Kirby</generator>
    <lastBuildDate>Wed, 11 Jul 2018 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://www.liip.ch" rel="self" type="application/rss+xml" />

        <description>Articles du blog Liip avec le mot-cl&#233; &#8220;mobile app&#8221;</description>
    
        <language>fr</language>
    
        <item>
      <title>It's never &#34;just a WebView&#34;</title>
      <link>https://www.liip.ch/fr/blog/its-never-just-a-webview</link>
      <guid>https://www.liip.ch/fr/blog/its-never-just-a-webview</guid>
      <pubDate>Wed, 11 Jul 2018 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Thomas already talked about how <a href="https://www.liip.ch/en/blog/do-i-need-a-mobile-application-or-a-mobile-website">the web and the app ecosystems are different</a>. They don't have the same goals, and should aim for a different user experience. I will focus on the technical side on implementing a website into a native app using <a href="https://developer.android.com/reference/android/webkit/WebView.html">WebView</a> on Android and <a href="https://developer.apple.com/documentation/webkit/wkwebview">WKWebView</a> on iOS here.</p>
<h4>Websites have extra UI that you don't want in your app</h4>
<p>Websites always have extra content which is not needed, when wrapping them in an app. They have a header title, a navigation menu, and a footer with extra links. Depending on how much &quot;native&quot; you want your app to appear, you will show a native navigation bar, a custom navigation flow and certainly not a footer under each screen.</p>
<p>If you are lucky, you can ask the website developer to create a special template for the app to remove those extra features and only show the main content. Otherwise you'll have to <a href="https://www.google.com/search?q=webview+inject+javascript">inject javascript</a> to hide this content.</p>
<h4>If the website contains a special &quot;app&quot; template, make sure you always use it</h4>
<p>We built an app where the website had a special template. Each page could be loaded with the extra parameter <code>mobile=true</code> like <code>http://www.liip.ch/?mobile=true</code>. This worked great, but each link contained to the page <em>did not</em> have this extra parameter. If we’d simply allowed link clicks without filtering, the user would see the non-app pages. We had to catch every link that the user clicked, and append the extra parameter &quot;manually&quot;. This is quite easy for <code>GET</code> parameters, but it can get quite tricky when <code>POST</code>ing a form.</p>
<h4>Making sure users cannot go anywhere</h4>
<p>By default a WebView will follow every link. This means that as long as the web page shows a link, the user will be able to click on. If your page links to Google or Wikipedia, the user can go anywhere <strong>from within the app</strong>. That can be confusing.</p>
<p>It is easier to block every link, and specifically allow those that we know, in a &quot;<a href="https://www.wikiwand.com/en/Whitelisting">whitelist</a>&quot; fashion. This is particularly important because the webpage can change without the app developer being notified. New links can appear on the application and capsize the whole navigation.</p>
<h4>WebViews take a lot of memory</h4>
<p>WebViews <a href="https://www.google.ch/search?q=webview+memory+usage">use a lot of RAM</a> compared to a native view. When a WebView is hidden — when we show another screen or put the app in background for example — it is very likely that the system will kill the Android <code>Activity</code> that contains the WebView or the whole iOS application.</p>
<p>As it takes a lot of memory, it matches killing criterias to making space for other apps in the system.</p>
<p>When restoring the <code>Activity</code> or application which contains the WebView, the view has lost its context. This means, if the user entered content in a form, everything is gone. Furthermore, if the user navigated within the website, the WebView can’t remember on which page the user was.</p>
<p>You can mitigate some of the inconvenience by handling state restoration on <a href="https://developer.android.com/guide/components/activities/activity-lifecycle.html#saras">Android</a> and <a href="https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html#//apple_ref/doc/uid/TP40007457-CH28-SW6">iOS</a>. Going as far as remembering the state inside a WebView will cause a lot of distress for the developer :)</p>
<h4>WebView content is a blackbox</h4>
<p>Unless you inject JavaScript to know what is inside, you cannot know what is displayed to the user. You don't know which areas are clickable, you don't know (easily) if the view is scrollable, etc...</p>
<h4>WebViews don't handle file downloads</h4>
<p>On iOS, there is no real concept of file system, even with the new <a href="https://support.apple.com/en-ph/HT206481">Files app</a>. If your website offers PDF downloads for example, the WebView does simply nothing. An option is to catch the URLs that are PDFs and open Safari to view them.</p>
<p>On Android, you can use <a href="https://developer.android.com/reference/android/webkit/WebView.html#setDownloadListener(android.webkit.DownloadListener)">setDownloadListener</a> to be notified when the WebView detects a file that should be downloaded instead of displayed. You have to handle the file download by using <a href="https://developer.android.com/reference/android/app/DownloadManager.html">DownloadManager</a> for example.</p>
<pre><code class="language-kotlin">webview.setDownloadListener { url, _, contentDisposition, mimetype, _ -&gt;
  val uri = Uri.parse(url)
  val request = DownloadManager.Request(uri)
  val filename = URLUtil.guessFileName(url, contentDisposition, mimetype)
  request.allowScanningByMediaScanner()
  request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
  request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename)
  val dm = context?.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
  dm.enqueue(request)
}</code></pre>
<h4>WebViews don't handle non-http protocols such as <code>mailto:</code></h4>
<p>You will have to catch any non-http protocol loads and define what the application should do.</p>
<h4>The Android back button is not handled</h4>
<p>If the user presses their back button, the standard action (leave activity, ...) will happen. It will not do a &quot;previous page&quot; action like the user is used to. You have to handle it yourself.</p>
<pre><code class="language-kotlin">webview.setOnKeyListener { _, keyCode, event -&gt;
 if (keyCode == KeyEvent.KEYCODE_BACK &amp;&amp; event.action == MotionEvent.ACTION_UP &amp;&amp; webview.canGoBack()) {
    webview.goBack()
    return@setOnKeyListener true
 }
  return@setOnKeyListener false
}</code></pre>
<h4>There is no browser UI to handle previous page, reload, loading spinner, etc...</h4>
<p>If the website is more than one page, you need to have the possibility to go back and forth in the navigation history. This is important if you removed the website's header/footer/menu in particular. On Android, users can still use the back button (if you enabled it) but on iOS there is no way to do that.</p>
<p>You should offer the possibility to reload the page. Showing a loading indicator so that users know when the page is loaded completely, like in a native application or a standard browser helps.</p>
<h4>This is no default way to display errors</h4>
<p>When an HTTP error occurs, if you don't have a network connection for example, the WebView doesn’t handle it for you.</p>
<p>On iOS, the view will not change. If the first page fails to load, you will have a white screen.</p>
<p>On Android, you will have an ugly default error message like this one:</p>
<figure><img src="https://liip.rokka.io/www_inarticle/9ab16d/webview-error-cropped.jpg" alt=""></figure>
<h4>WebViews don't know how to open <code>target="_blank"</code> links</h4>
<p>WebViews don't know how to handle links that are supposed to open a new browser window. You have to handle it. You can decide to stop the &quot;new window&quot; opening and load the page on the same WebView for example. But by default nothing will happen for those links.</p>
<h4>iOS and security</h4>
<p>iOS is — rightfully — very conservative regarding security. Apple added <a href="https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW14">App Transport Security</a> in iOS 9 to prevent loading unsecure content. If your website does not use a recent SSL certificate, you will have to <a href="https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html">disable ATS</a>, which <strong>never</strong> is a good sign.</p>
<h4>It is hard to make code generic</h4>
<p>Since every page can be different, having different needs, it is hard to make code generic. For a client, where we show two sub-pages of their website on different screens, we have two webview handlers because of the various needs.</p>
<p>Once you have thought through all these things and believe you can start coding your webview, you will discover that iOS and Android handle them differently.</p>
<ul>
<li>On iOS every page load if caught by <a href="https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455643-webview">webView(_:decidePolicyFor:decisionHandler:)</a> and can be treated by our code
<ul>
<li>Except <code>target="_blank"</code> links which have to be handled by <a href="https://developer.apple.com/documentation/webkit/wkuidelegate/1536907-webview">webView(_:createWebViewWith:for:windowFeatures:)</a> which is actually another delegate!</li>
</ul></li>
<li>On Android, only a subset of page loads are handled by <a href="https://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)">shouldOverrideUrlLoading()</a>
<ul>
<li>The first URL loading programmatically is always loaded</li>
<li>Only <code>GET</code> loads go through the filter. When <code>POST</code>ing a form, the handler is not called</li>
</ul></li>
</ul>
<h4>There is a strong dependency on the website</h4>
<p>Once you faced all challenges and your app is ready to ship, there is one last thing that you cannot control: You are displaying a website that you did not code, and that is most likely not managed by someone in your company.</p>
<p>If the website changes, there is a high chance that the webmaster doesn’t think of telling you. Mainly because he doesn’t think one change on the website is enough to mess up your app completely.</p>
<h2>Conclusion</h2>
<p>WebViews can be used for wrapping upon existing websites fast, but it is never &quot;just&quot; a WebView. There is some work to do to deliver the high quality that we promise at Liip. My advices for you:</p>
<ul>
<li>Use <a href="https://en.wikipedia.org/wiki/Defensive_programming">Defensive programming</a>.</li>
<li>List all features of each page with the client, and define the steps clearly, like for any native app.</li>
<li>Get in touch with the website developer and collaborate. Make sure they tell you when the website changes.</li>
</ul>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/2625d7/featured.jpg" length="9957" type="image/png" />
          </item>
        <item>
      <title>One.Thing.Less goes live!</title>
      <link>https://www.liip.ch/fr/blog/one-thing-less-goes-live</link>
      <guid>https://www.liip.ch/fr/blog/one-thing-less-goes-live</guid>
      <pubDate>Fri, 25 May 2018 00:00:00 +0200</pubDate>
      <description><![CDATA[<h2>Making privacy and data protection actionable by anyone</h2>
<p>You surely received many companies’ emails about your data privacy during last weeks. That’s due to the new European law (called GDPR for General Data Protection Regulation) that became enforceable on the 25th of May 2018.<br />
This is a major step towards a more responsible usage of personal data by companies, as you can now request information on how your data is being used, and ask to change it.</p>
<p>Nevertheless, as James Aschberger (Founder &amp; CEO of One.Thing.Less AG) noticed, many people didn’t understand how they can concretely claim their rights using this new regulation.</p>
<p><em>&quot;It’s overwhelming, where do I even start?&quot;</em></p>
<p><em>&quot;I am worried about my data, but I don’t have the time or knowledge to contact companies individually or read through all the privacy policies and terms of use they put in front of me.&quot;</em></p>
<p><em>&quot;I receive so many messages regarding data privacy, but I don’t understand all of it and don’t have time to read the fine print.&quot;</em></p>
<h2>There is an app for that now</h2>
<p>We at Liip have <a href="https://www.liip.ch/en/blog/one-thing-less-ag-unites-with-liip-to-launch-its-mobile-app">worked hard</a> during the past four months to make the One.Thing.Less dream of James happen — a free and simple way to take control over the use of your personal data.</p>
<p>You can now <a href="https://itunes.apple.com/app/one-thing-less/id1353068746">download the app on the Apple App Store</a> (and in June on Google Play for Android) and make your voice heard by companies.</p>
<figure><img src="https://liip.rokka.io/www_resize/resize-width-300/030ec3/onethingless-mobile-app-homescreen.jpg" alt="One.Thing.Less mobile app Homescreen" width="300"></figure>
<p><em>One.Thing.Less mobile app Homescreen</em></p>
<h2>Keep It Simple, Stupid (aka KISS)</h2>
<p>When James first came to us, he made it clear that the User Experience had to be simple. That was one of our main challenge: solve this complex legal problem via one click.</p>
<p>This is what we did.</p>
<figure><img src="https://liip.rokka.io/www_resize/resize-width-300/df49da/onethingless-mobile-app-ask-companies.jpg" alt="Ask companies about the use of your personal data, in one tap." width="300"></figure>
<p><em>Ask companies about the use of your personal data, in one tap.</em></p>
<p>On the above view, you can just press the “Send request” to ask a company seven (simple) questions about the use of your personal data. Companies have to provide a response within 30 days under GDPR.</p>
<p>Then you can request them to change how they make use of your personal data, still one click away.</p>
<figure><img src="https://liip.rokka.io/www_resize/resize-width-700/526751/onethingless-mobile-app-act-preview.jpg" alt="Change the way companies use your personal data." width="700"></figure>
<p><em>Change the way companies use your personal data</em></p>
<h2>A trustful partnership</h2>
<p>We can’t stop talking about trust here at Liip, as we believe that’s one of the core element of successful products and companies.<br />
This project was a great example of how one of our mottos “Trust over control” can lead to extraordinary results, in less than four months.</p>
<p><em>&quot;Successfully launching our platform in such a short time was only possible because we established and earned mutual trust along the entire journey together. If I had not been able to trust that each of the Liip team members delivers, we would have failed.&quot;</em> James Aschberger, Founder &amp; CEO at One.Thing.Less AG</p>
<p><em>&quot;It was a chance to craft such a meaningful product, in a trustful and solution-oriented partnership.&quot;</em> Thomas Botton, Product Owner at Liip</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/7c3560/onethingless-mobile-app-launch.jpg" length="663436" type="image/png" />
          </item>
        <item>
      <title>One.Thing.Less AG entrusts Liip with the launch of its mobile app</title>
      <link>https://www.liip.ch/fr/blog/one-thing-less-ag-unites-with-liip-to-launch-its-mobile-app</link>
      <guid>https://www.liip.ch/fr/blog/one-thing-less-ag-unites-with-liip-to-launch-its-mobile-app</guid>
      <pubDate>Wed, 02 May 2018 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>One.Thing.Less AG will empower and enable individuals around the world to regain control over the use of their personal data in an easy and secure way. We currently help the startup to craft its mobile app and platform so it’s ready for the launch day on the 25th of May 2018.</p>
<h2>From idea to product</h2>
<p>This product idea comes from James Aschberger, Founder &amp; CEO of One.Thing.Less AG, who saw the opportunity in the new <a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">GDPR regulation</a> to bring back balance in the personal data “crisis” that our world currently faces. Their mobile app will allow you — in one-tap — to ask for visibility on what some companies such as Facebook or Google or Starbucks have and do with your data. More importantly, once they answered, you will be able to act and request changes on how they deal with your personal data. The goal of the product is that you are in control of the use of your personal data.<br />
I loved to hear such a pitch, and so did my mobile teammates. We hence kickstarted our collaboration back in January.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/f0449e/liip-blog-otl-launch2.jpg" alt="One.Thing.Less-Liip team during a User Experience workshop"></figure>
<p><em>One.Thing.Less-Liip team during a User Experience workshop.</em></p>
<h2>Finding a strong mobile partner, with the right (startup) mindset</h2>
<p>One.Thing.Less’ challenge was their lack of an internal technical team. We solved their issue by putting up a cross-functional team tailored to their needs — composed of mobile and backend developers, as well as designers.</p>
<p>On top of this, and that’s maybe the most critical of all, we answered the need of James to find a trustworthy team with people having the right startup mindset:</p>
<p><em>“Once our idea was clear, the biggest challenge was to identify the right UX and technical team to bring it to life. Being a small startup, the chemistry needs to be right and the team mindset needs to be diverse. After our first meeting with Liip I had a strong feeling about the team and their know-how. It was after the second meeting that we were totally convinced that they not only have the technical expertise but also the right spirit and determination to bring this idea into a tangible product.”</em> — James Aschberger, Founder &amp; CEO of One.Thing.Less AG</p>
<p>We at Liip are all entrepreneurs, and the way we are <a href="https://www.liip.ch/en/blog/self-organization">self-organized</a> allows us to act as such on a daily basis. This reassured and convinced the CEO of One.Thing.Less that Liip was the right choice.<br />
It’s been only three months that we work together, but we already feel like we are one unique team, with one common goal — that is to launch a product that will impact lives positively.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/3d11d3/one-thing-less-mobile-development.jpg" alt="Development of the One.Thing.Less mobile app and platform"></figure>
<p><em>Development of the One.Thing.Less mobile app and platform.</em></p>
<h2>Data, public or private, should be controlled by whom it belongs to</h2>
<p>If you follow us since a while, you surely know that the data topic is part of our DNA. From <a href="https://www.liip.ch/en/work/api">API</a> to allow interoperability of IT systems, to <a href="https://www.liip.ch/en/work/open-data">Open Data</a> to give back transparency to citizens, we were always involved in such domains and will remain for the long run. This collaboration with One.Thing.Less confirms it.</p>
<p>We can’t wait to put this product into your hands on the 25th of May. Stay tuned and sign up for a launch notification at <a href="https://www.onethingless.com">www.onethingless.com</a></p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/bad153/liip-blog-otl-launch1.jpg" length="353028" type="image/jpeg" />
          </item>
        <item>
      <title>Meet Kotlin &#8212; or why I will never go back to Java!</title>
      <link>https://www.liip.ch/fr/blog/kotlin-why-i-will-never-go-back-to-java</link>
      <guid>https://www.liip.ch/fr/blog/kotlin-why-i-will-never-go-back-to-java</guid>
      <pubDate>Fri, 09 Mar 2018 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>When Google and JetBrains <a href="https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/">announced</a> first-class support for Kotlin on Android last year, I could not wait to use it on our next project. Java is an OK language, but when you are used to Swift on iOS and C# on Xamarin, it's sometimes hard to go back to the limited Java that Android has to offer.</p>
<p>Within this past year, we successfully shipped two applications using Kotlin exclusively, with another one to follow soon. We decided to also use Kotlin for previous Java apps that we keep updating.</p>
<p>I took my chance when the <a href="https://www.meetup.com/Mobile-Romandie-Beer">Mobile Romandie Beer</a> meetup was looking for speakers. I knew that I had to show others how easy and fun this language is. </p>
<p>It turned out great. We had people from various backgrounds: from people just curious about it, UX/UI designers, iOS developers, Java developers to people using Kotlin in production already.</p>
<p>You can find my slides below:</p>
<script async class="speakerdeck-embed" data-id="1504188547254400bb81fd9f30f2e701" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<p>I would like to share a few links that helped me learn about Kotlin:</p>
<ul>
<li><a href="https://try.kotlinlang.org">Kotlin Koans</a>: a step by step tutorial that directly executes your code in the browser</li>
<li><a href="https://developer.android.com/kotlin/">Kotlin and Android</a>: the official Android page to get started with Kotlin on Android</li>
<li><a href="https://github.com/android/android-ktx">Android KTX</a>: a useful library to help with Android development, released by Google</li>
</ul>
<p>See you at the <a href="https://www.meetup.com/Mobile-Romandie-Beer/events/246118655/">next meetup</a>!</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/cb1695/meetup.jpg" length="366348" type="image/jpeg" />
          </item>
        <item>
      <title>Urban Connect Mobile App Golive (And The Challenges We Faced)</title>
      <link>https://www.liip.ch/fr/blog/urban-connect-mobile-app-golive-and-the-challenges-we-faced</link>
      <guid>https://www.liip.ch/fr/blog/urban-connect-mobile-app-golive-and-the-challenges-we-faced</guid>
      <pubDate>Thu, 01 Feb 2018 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Back in October, we kickstarted the relaunch of the Urban Connect bicycle fleet solution for their corporate clients (amongst which are Google and Avaloq). We provided the startup with User Experience, design, and mobile development services. The goal was to launch a brand new iOS and Android mobile app, as well as a new back-office and API. This new solution will enable the startup to grow its activity based on a robust and scalable digital platform.</p>
<p>The golive happened successfully last week — yeah!, and while we prepare our celebration lunch, I thought it is maybe interesting to share the challenges we faced during this purposeful project, and how we overcame them.</p>
<h2>Make The User Use The App The Least Possible!</h2>
<p>This product development was particular because we soon realized that for once, we were crafting a mobile app that should be used the least possible. That’s for a goal when all what we hear nowadays is about user retention and engagement.<br />
The point is that Urban Connect service is about providing a bike solution with a smart lock that can be opened with your smartphone (via Bluetooth technology). People want to use it to book a bike and go from a point A to a point B, with the least friction possible — including with our mobile app software.</p>
<p>This key discovery was possible thanks to our UX workshops that focus on the user problems first. Concretely, it means that we went to the Google Zürich office to analyze and listen to how real users were using the solution, and which problems they had. That’s when we got that users wanted to use the app the least possible, and that it works automagically without getting their smartphone out of their pocket.<br />
It’s only afterwards that we started to draw the first wireframes, and iterated on prototypes with Urban Connect and its clients to be sure that what we’re going to build was answering the real issues.<br />
And finally, we developed and applied the user interface design layers.</p>
<p>This resulted in one of the Google users stating:</p>
<p><em><strong>“Wow, that’s like a Tesla!<br />
I never use the key, but it’s always there with me, and it just works.”</strong></em></p>
<p>Again, we looked at the problems first, not at the design aspects. It may sound simple, but it still isn’t such a mainstream approach as one could think.</p>
<h2>On Third-Party Smart Locks, Fancy Android Phones, and MVP</h2>
<p>Most of the struggles we had to overcome were linked to the Bluetooth connectivity between the smart locks from Noke, and the Chinese Android devices.</p>
<p>The issues we faced with the Noke Smart Lock solution were that the company is still a startup, and as such, there are still some perks to their product such as outdated documentation, or hardware reliability.<br />
Nevertheless, our solution was to not enter in a blame game party with them and Urban Connect, and rather contact them directly to fix the problems, one at a time. We must say that they were really responsive and helpful, so much that all of our main blockers were removed in less than a few days each time.<br />
But that’s something to take into account in the planning and investment margin when you do estimation — thankfully we did!</p>
<figure><img src="https://liip.rokka.io/www_inarticle/294682/urban-connect-mobile-app-development.jpg" alt="Tests of our Urban Connect Mobile App Developments"></figure>
<p><em>Testing Session of our Urban Connect Mobile App.</em></p>
<p>As for the fancy Android phones, that’s the same story one hear everywhere: Android devices’ fragmentation sucks. We’re prepared to face such issues, and bought many different Android devices to be sure to have a good coverage.<br />
Nevertheless, there are always corner cases such as a fancy Chinese phone with a specific Android ROM — one that is obviously not sold anymore to simplify the thing.<br />
We overcame this issue thanks to a simple tool: communication. We didn’t play the blame game, and got in contact with the end user to figure out what was the problem on his device, so that we could understand it better.</p>
<p>Although communication is a good ally, its effect is the most effective when you start to use it as early as possible in the project.<br />
As we use the Minimum Viable Product approach to develop our products, this allowed us to focus on this critical points upfront from day one, face them, and find solutions — vs. building the entire thing and being stuck at the golive with unsolvable issues.</p>
<h2>Trustful Partnership as a Key to Success</h2>
<p>On top of the usual UX and technical challenges that we face in every project, one key to the success of this product launch was the people involved. And the trustful collaboration between  Urban Connect and us.<br />
We faced many different challenges, from unexpected events, to sweats about planning deadlines (we made it on time, be reassured). And every single time, Judith and her team trusted us, as we did all along the way. Without this trust, we could have failed at many points during the project, but we both chose to remain in a solution-oriented mindset, and focus on the product launch goal. It proved to work, once again.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/e3e56a/urban-connect-trustful-partnership.jpg" alt="A Trustful Partnership as a Key to a Product Success"></figure>
<p><em>A Trustful Partnership as the Key to a Product Success.</em></p>
<h2>What’s next for Urban Connect?</h2>
<p>Now that we happily pressed the “Go Live!” button, we’re first going to celebrate it properly around a nice lunch in Zürich. It was intense, but we love to work on such purposeful products which will help cities get more healthier thanks to less pollution and more physical activity for its users.</p>
<p>Then, we’ll have plenty of features to work on in 2018, including innovative ones like integrating IoT modules to the platform. We’ll make sure to share such new cool stuff with you.</p>
<p>In case you want to learn more about Urban Connect e-bike fleet service, feel free to contact Judith to get more infos and a demo of our solution.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/3facca/urban-connect-golive.jpg" length="532536" type="image/jpeg" />
          </item>
        <item>
      <title>Going on a ride with Urban Connect</title>
      <link>https://www.liip.ch/fr/blog/going-on-a-ride-with-urban-connect</link>
      <guid>https://www.liip.ch/fr/blog/going-on-a-ride-with-urban-connect</guid>
      <pubDate>Fri, 03 Nov 2017 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Urban Connect provides complete bicycle fleet solutions for corporate clients. For example Google and Avaloq trust Urban Connect to provide fleets of e-bikes for their employees who need to move around the city. In this mobility environment, the user experience and stability of the software solution are crucial.</p>
<h2>A successful startup</h2>
<p>Judith Häberli founded Urban Connect in 2013. As CEO, her first concern was to test the market as soon as possible with a real product. For this reason, the team developed its initial minimum viable product. About a year later, the startup found its market and matured into an established enterprise in the mobility market. Today the proof-of-concept is achieved. Optimizing the user experience, improving the system stability, and having a better software evolutivity are the next challenges.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/8579514aad66211748d3ef4a44758363aa98c579/urbanconnectteam.jpg" alt="Urban Connect Team"></figure>
<p><em>On Urban Connect office’s terrace in Zürich for our partnership kick-off (from left to right): Judith (UC), Noé &amp; Darja (Liip), Luting (UC), Jonas &amp; Thomas (Liip) and Robert (UC).</em></p>
<h2>Towards a robust and scalable software base</h2>
<p>In order to ensure the next maturity level of the company, Urban Connect asked us to partner on the development of their product: new iOS and Android mobile applications connected to a hardware device, a new Fleet Management System, and a new API. The deadline is tight, in order to keep their customers satisfied. At Liip, we will put a strong emphasis on a flawless user journey, backed-up by a robust technical implementation. It will provide Urban Connect with the basis needed to grow during the upcoming years.</p>
<h2>Our commitment to delight Urban Connect users</h2>
<p>Our UX process will support Judith and her team to craft a new solution that is designed around the users. We will then develop it iteratively in order to receive user feedbacks as early as possible.<br />
We are excited to start this new partnership as it is exactly what we love. Indeed, we like to be fully involved from the start, and to work in an entrepreneurship spirit.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/781ba753ae1422dc05b795e45929c25a1f4c62c5/mig-2301.jpg" length="708254" type="image/jpeg" />
          </item>
        <item>
      <title>Houston App: System overview</title>
      <link>https://www.liip.ch/fr/blog/app-houston-system-overview</link>
      <guid>https://www.liip.ch/fr/blog/app-houston-system-overview</guid>
      <pubDate>Mon, 25 Sep 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>The system is spread over more than 200 busses, 30 team leaders and the operation center. It covers the needs of three types of users: the operators, the bus drivers and the team leaders.</p>
<h2>The major components</h2>
<p>So how's Houston working? Here is an overview of the major components. Houston is a distributed system composed of:</p>
<ul>
<li><strong>Two Mobile Apps</strong>  that fulfill the specific need of bus drivers and team leaders</li>
<li><strong>A Web Client</strong>  used by the operators to create any type of call</li>
<li><strong>A Cloud Communication Platform</strong>  to establish Voice over IP (VoIP) and standard phone call over the Public Switch Telephone Network (PSTN) without having to deal with the complexity of building and maintaining a communication infrastructure. The cloud platform used in this system is Twilio (more details on that later)</li>
<li><strong>A Public API</strong> : implemented by a backend server used as a bridge between mobile apps, web clients and Twilio. It is connected to a database that stores user identities and bus planning. The database also keeps traces of all performed calls.</li>
</ul>
<p>A deeper look inside each component of the system and how each of them interacts together will help to understand why Houston was a huge challenge.</p>
<h3>Mobile Apps</h3>
<p>Each of the two mobile apps provide specific features for busses and team leaders. There is no specificities in how the app is built. The apps are a set of views that allow to perform calls by communicating with the public API using standard HTTPS requests and JSON formatted messages.</p>
<p>The real challenges were the following:</p>
<ul>
<li>How to allow drivers to use an app without losing eyesight of the road?</li>
<li>How to integrate the app with the existing busses microphone and loudspeaker?</li>
<li>How to manage and upgrade a set of more than 200 devices remotely, as they are installed in busses dispatched in different locations?</li>
</ul>
<h4>How to tackle the usability problem?</h4>
<p>To tackle the usability problem, we organised workshops with the end-users (e.g. drivers) to find out the best way to interact with the app without having to look at the screen. The solution found, was to implement a carousel screen with voice feedback at each screen change.</p>
<p>The integration with the existing microphone and loudspeaker has been solved with the installation of a bluetooth amplifier. The big problematic here was to ensure that the app was automatically connected with the amplifier at any time.</p>
<p>Finally, we decided to use Android4Work and <a href="https://nomasis.ch/?gclid=CIGd5pqI99QCFe0Q0wodbowJlA">MobileIron</a> to manage the 200 devices distantly. </p>
<h4>About the importance of user testing</h4>
<p>We started with a prototype running on a server and on real devices. It was working like a perfectly in our offices. However, we should have installed the busses applications in real busses and let final users try it in their daily business. Even though we made many workshops with end users, a sketch on paper doesn't replace the real experience. </p>
<p>Deploying the prototype in the real environment would have save a lot of time! In fact, we ended up implementing some features that have not been used as much as we initially thought. </p>
<p>Another important lesson learned by our development team of mobile developers is that working with physical devices such as microphones and loud speakers is not trivial. We underestimated the impact of the environment on the device. Indeed, we had quite a bad surprise when we discovered after months of development that the volume in the busses was fare too low. Again, making a prototype working in a real environment would have helped.</p>
<h3>Web Client</h3>
<p>The web client is a single page application built using backbone JS. The challenge of the web client development was less in its technical aspects than in the definition of the features needed by the operators. In fact, it was difficult to make a system working similarly as a radio in a web browser. </p>
<p>To help operators understand what was happening as they created calls, we decided to display as much information about the state of the call as possible. For example, operators know – from the start of the call – which users are included in it as well as their current state.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/fcdea7efe1d446aea044f7809c7737ce80c8e902/140414-mc-5303-1024x768.jpg" alt=""></figure>
<h3>Twilio</h3>
<p><a href="https://www.twilio.com/">Twilio</a> is a cloud communication platform offering an elegant way to perform any type of call such as a telephone conference. It offers a RESTful API that completely hides the complexity of the infrastructure behind. Thanks to Twilio, the Houston public API offers the possibility to create conferences between more than 50 users in only one request.</p>
<p>Twilio API offers tons of features. The most used one in Houston are the followings:</p>
<ul>
<li>Getting real time information about ongoing and past calls.</li>
<li>Muting / Unmuting users</li>
<li>Adding / Removing users to an ongoing conference</li>
</ul>
<p>But this is not all, Twilio can register calls and offers a nice administration web client allowing to retrieve all records as well as the detailed logs of all performed calls. In addition to that API, Twilio offers libraries for web clients and mobile applications. This helped us a lot to handle incoming/outgoing calls.</p>
<h3>Heroku</h3>
<p>The public API offers a standardised set of endpoints to serve requests from the mobile applications and from the web client. We hosted it on <a href="https://www.heroku.com/">Heroku</a> in order to get rid of the hosting complexity. </p>
<p>Heroku allowed us to easily scale when the amount of user of the system raised. With Heroku It has been a piece of cake to integrate our system with Twilio and It solved lots of security issues.</p>
<h2>Conclusion</h2>
<p>Lessons learned during this project are numerous. The most important to remember is that innovation requires to start with a simple feature and to make it work in the final environment. User workshops and controlled environment testing is not enough. It is essential to test prototypes in a real environment with real users.</p>
<p>Finally, I think that what had most impact on the success of the project is the way we worked hand in hand with the client. From the beginning, we collaborated as one team. We were able to share challenges and issues. We did not hide problems, but talked about them openly to find the best solution together.</p>
<h2>What's next</h2>
<p>Hundreds of people use daily Houston. Of course there is still many improvements to bring. Today, we are still working on the project by analysing its use in order to improve it by bringing additional or improved features to make this system even easier and powerful to the end users.</p>
<p>Once the system will be stable enough, the door to many developments opportunities will open. Other sectors might be interested to implement similar systems. The good thing is that our team has become very experienced with these topics.</p>
<p>Finally, our team was delighted to be awarded 4 times in 2016 for this awesome project : 2 awards at the <a href="https://www.liip.ch/en/blog/best-of-swiss-apps-2016--liip-takes-three-silver-and-one-gold">Best of Swiss Apps 2016</a> (“Silver” in Enterprise category and “Gold” in Innovation category) as well as 2 award at the <a href="https://www.liip.ch/en/blog/liip-gets-4-awards-at-the-meilleur-du-web">Meilleur du Web 2016</a> (Winner in UX and in Technology Categories). These awards will just continue to fuel our appetite for more innovation and success! :)</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/7b1735e7b6a2197579dbbd9409a5dfcc2c73bd17/140414-mc-5303.jpg" length="991364" type="image/jpeg" />
          </item>
        <item>
      <title>Houston: a mobile app to replace a radio communication system</title>
      <link>https://www.liip.ch/fr/blog/houston-replaces-radio-system</link>
      <guid>https://www.liip.ch/fr/blog/houston-replaces-radio-system</guid>
      <pubDate>Mon, 07 Aug 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p><em>Bring your company radio system to the 21st century using VoIP and mobile applications to improve communication quality while reducing costs.</em></p>
<p>With the project <a href="https://www.liip.ch/en/blog/tpf-communication-system-for-buses">Houston</a>, we took the challenge of replacing the old radio network of the <a href="http://www.tpf.ch/">Transports Publics Fribourgeois</a> (TPF), a swiss public transportation company by a system using existing data network and running on mobile applications. This solution solved the problem of maintaining a dedicated radio network. It also improved both the global quality of the communication and the availability of the system.</p>
<h1>Initial situation: communication based on radio system</h1>
<p>Since decades, employees of the Transports Publics Fribourgeois (TPF) have been using standard radio to communicate between them. The radio system is meant to cover the needs of the users. It is spread over more than 200 busses, 30 team leaders and the operation center). There are three types of users, with specific needs:</p>
<ul>
<li>The <strong>operators</strong>  – working in the operation center – use the radio to speak to a specific bus driver, or to broadcast messages to all or part of the running busses.</li>
<li>The <strong>team leaders</strong>  are dispatched at different locations. They use the radio to manage daily events – such as the replacement of a driver – or to inform many drivers of a change in the network – for example in case of an accident.</li>
<li>The <strong>bus drivers</strong>  use the bus radio as the main means of communication while driving. They can call other busses, the team leaders or the operation center.</li>
</ul>
<figure><img src="https://liip.rokka.io/www_inarticle/801dcf37076028e232418077319ced469d88632b/140520-mc-09993-1024x768.jpg" alt="Logo TPF"></figure>
<h1>The project: replace the old radio system</h1>
<p>The radio system used by the employees of the TPF had some drawbacks : </p>
<ul>
<li>The poor quality of the communication,</li>
<li>The low coverage of the network (about 60% of the territory. This is because it is too hard to cover the all territory since busses drive all over the countryside),</li>
<li>The exploitation and maintenance cost of the a radio network were expensive (antennas were installed in strategic locations, all over the canton).</li>
</ul>
<p>The goal of the project Houston was to improve the former system by replacing the radio communication system. </p>
<p>The challenge was to provide at least all already existing features and possibly add some new one enabled by the geo localisation of the busses. The possibility to call all busses currently in a given region was one of the new requested feature. </p>
<center><figure><img src="https://liip.rokka.io/www_inarticle/39d9ca1ad306d89abca5901d222e43c56989a76d/screenshot-2016-09-08-15-19-23-169x300.jpg" alt="Screenshot_Houston"></figure>

Screenshot of the app Houston</center>
<h1>The solution: a mobile application</h1>
<p>A mobile app would allow the system to modern technologies. With a mobile app, we also expected to drastically reduce the exploitation cost. Indeed, with a mobile app, it is not necessary to install and maintain radio antennas all over the Fribourg region.</p>
<p>We decided to create a mobile app, because they are easy to develop in comparison with dedicated embedded devices. The cost of 200 smartphones is more than justified by the flexibility and development cost that this solution offers.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/86cc0e95d35b72d91b969d4c2a3fac405faac780/160827-mc-0003-1024x683.jpg" alt="Public busses TPF"></figure>
<h1>We started by building trust</h1>
<p>The way we worked hand in hand with the client had a huge impact on the success of the project. From the beginning, we asked all stakeholders and end users to explain us how they worked together with the former system. We asked what the strengths and the weaknesses of the system were. We asked them how they would like to use it.</p>
<p>As a result, we had a good idea of what the main features to implement were. Most importantly, we also gained the trust of the end users. </p>
<p>The fact that there was such a level of trust, was a good basis to develop the project. We were not hiding problems, but we were exposing them directly to find the best solution possible together. This collaboration mindset helped a lot during the development of the project.</p>
<p><strong>Additional Information</strong> </p>
<p><em>Best of Swiss App 2016: Houston wins Silver in the «Enterprise» category and Gold in the «Innovation» category </em>(<a href="https://www.liip.ch/en/blog/best-of-swiss-apps-2016--liip-takes-three-silver-and-one-gold">read here</a>)</p>
<p><em>HOUSTON: The first VoIP Communication System for Swiss Public Transportation </em>(<a href="https://www.liip.ch/en/blog/tpf-communication-system-for-buses">read here</a>)</p>
<p><em>Meilleur du Web 2016: HOUSTON awarded in the category UX and Technology </em>(<a href="https://www.liip.ch/en/blog/liip-gets-4-awards-at-the-meilleur-du-web">read here</a>)</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/71c574424c8c1bcaa796b2c89c70fa6c4ae94fbb/160827-mc-0003.jpg" length="99853" type="image/jpeg" />
          </item>
        <item>
      <title>Native or Hybrid Mobile Application, Which One Should I Choose?</title>
      <link>https://www.liip.ch/fr/blog/native-or-hybrid-mobile-application-which-one-should-i-choose</link>
      <guid>https://www.liip.ch/fr/blog/native-or-hybrid-mobile-application-which-one-should-i-choose</guid>
      <pubDate>Mon, 19 Jun 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>It is complex for non-geeks to understand the mobile application ecosystem. We often hear jargon such as mobile apps, hybrid apps, native apps, single-codebase-cross-platforms apps, etc.</p>
<p>Some clarification is needed.</p>
<h3><strong>The Difference Between Native and Hybrid Apps</strong></h3>
<p>In this article, we talk only about apps that one can download from an app store (and not about <a href="https://blog.liip.ch/archive/2017/05/02/do-i-need-a-mobile-application-or-a-mobile-website.html">mobile websites</a>).</p>
<p><em>Native</em> apps are mobile applications that are written in a native language such as Swift for all Apple iOS apps, and Java for all Google Android apps. You have to write the code <em> two times</em>, once for each platform, which results in more development and maintenance work.</p>
<p><em>Hybrid</em> apps are based on a <em>single codebase</em> that produces mobile apps for both Apple and Google platforms.</p>
<p>Both native and hybrid applications are on app stores. Both are downloaded on your iPhone or Android smartphones. Both can be opened. Both can send push notifications. Both can be deleted from your smartphone. No matter what's inside.</p>
<h3><strong>Native or Hybrid App, Which One Should I Build?</strong></h3>
<p>“All this is very interesting, but what should I use for my next mobile product?”, you may wonder.</p>
<p>At Liip we use the following <em>criteria</em> to guide our strategy:</p>
<p><strong>Internal Business Logic</strong> If the app contains more than 50% business logic stored on the smartphone directly (vs. business logic stored at a backend server), then it's worth investing into a hybrid solution as the mutualization of code will have a significant financial impact on the project. An example we worked on is the <a href="https://www.liip.ch/en/what/projects/schindler-spare-parts-catalogue-app">Schindler elevators mobile app</a> with its offline requirements that required to store the logic on the smartphone app.</p>
<p>In the other case, we favor native mobile apps.</p>
<p><strong>Custom Design</strong> When the app has a lot of custom visual components (e.g. not the default list views proposed by Apple or Google), then we recommend to craft a <em>native</em> app as the hybrid approach wouldn't bring any mutualized value here because you anyway have to build custom User Interface for each platform.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/d0263ec55a47d67c1ca02f1878913be59d8961fe/native-or-hybrid-custom-design-example-1-1024x854.jpg" alt="On the left is a list using standard Apple iOS visual components, and on the right the example of the UEFA Champions League mobile app with a custom list view."></figure>
<p>On the left is a list using standard Apple iOS visual components, and on the right the example of the UEFA Champions League mobile app with a custom list view.</p>
<p><strong>Reliance on Third Party Plugins</strong> If your project relies on one or more third party plugins (aka SDKs), like for instance Tealium (a data management tool including Analytics monitoring), then we recommend to build a <em>native</em> app. These plugins are written in Swift and Java so you never have compatibility issues with native apps.</p>
<p>This criteria comes from an experience we had where we spent a lot of time integrating a third party plugin within a Xamarin hybrid app project.</p>
<h3><strong>It is a Weighting Game</strong></h3>
<p>As we often claim, <em>we are not religious with technologies</em> here at Liip. There is no magic formula that can be applied to all projects; we always have to ponder each criteria together with the client in order to find the best fit for his situation.</p>
<p>Do <em>you</em> have experience with one or the other kind of mobile application? Bad or good, <em>share your story</em> with us.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/aee2c6658f1dffba2ed8fcae5e21d42bddf6ef73/native-or-hybrid-mobile-application.jpg" length="510295" type="image/jpeg" />
          </item>
        <item>
      <title>5 lessons learnt about the new SAP Cloud Platform SDK for iOS</title>
      <link>https://www.liip.ch/fr/blog/5-lessons-learnt-about-the-new-sap-cloud-platform-sdk-for-ios</link>
      <guid>https://www.liip.ch/fr/blog/5-lessons-learnt-about-the-new-sap-cloud-platform-sdk-for-ios</guid>
      <pubDate>Thu, 01 Jun 2017 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>The SAP Cloud Platform SDK for iOS was <a href="https://blogs.sap.com/2017/03/30/sap-cloud-platform-sdk-for-ios-released/">released in March</a> and we were very excited to try it out. This toolkit allows companies to let developers build, extend, and run iOS apps based on SAP back-end data. Thus, business' employees can access live data at any time from their iOS mobile app, and enjoy the standard SAP Fiori design language they are used to.</p>
<p>We booked a one-day hands-on with <a href="https://twitter.com/noefroidevaux">Noé</a> in our <a href="http://thinkspace.ch/">ThinkSpace</a> war room with the objective to have a demo app up and running and plugged to the SAP Cloud Platform (formerly known as SAP Hana). This may sound like an easy goal but honestly, knowing SAP, we thought that it was already ambitious.</p>
<h3><strong>Lesson learnt #1: One can easily create a SAP Cloud Platform demo account</strong></h3>
<p>We imagined it would require many days to have our Liip's SAP Cloud Platform up and running with validation processes and all. That's old-thinking. It took Noé less than half an hour to have it ready.</p>
<p>It may be different with a production environment but still, the <em>developer experience</em> was great as one can have a playground and try to build a Minimum Viable Product (MVP) straight away.</p>
<h3><strong>Lesson learnt #2: The SAP SDK provides a skeleton app — really — ready to play with</strong></h3>
<p>When we browsed the <a href="https://www.sap.com/developer/topics/cloud-platform-sdk-for-ios.tutorials.html">tutorials on the SAP blog</a>, we're again (positively) surprised to see that the SAP team crafted a demo app that was supposedly ready-to-use. And it was!</p>
<p>In less than 3h, we installed the app, and connected it to our Liip's SAP Cloud Platform from which we could read and write data. It actually required more time to register and activate all needed modules in the SAP Cloud Platform than to actually deploy the app on Noé's iPhone!</p>
<h3><strong>Lesson learnt #3: iOS SAP SDK documentation is not centralized enough</strong></h3>
<p>One drawback SAP has to fix if they want developers to catch-up on their new tools is the documentation. Although the skeleton app works out-of-the-box, we had hard times to follow the setup steps which were spread over the main homepage, various tutorials, and other articles. For instance, there are several modules and settings to configure and we took a lot of time to figure it out. If some SAP engineers read these lines, please keep up the good work and remove the complexity from your documentation.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/35036db371f7c06db6930e5c04ee9c4e025e43eb/screen-shot-2017-06-01-at-10-55-09-149x300.jpg" alt="Our SAP iOS mobile application demo"></figure>
<p>Our SAP iOS mobile application demo</p>
<h3><strong>Lesson learnt #4: “SAP Fiori for iOS” documentation is complete and well structured</strong></h3>
<p>Compared to the previous point, the User Experience and Design documentation of SAP Fiori for iOS is impressive: it is well structured, complete, and easy to get through. All usual business use-cases are covered in a deep manner with all needed details about user flows.</p>
<p>I can't help but recommend the development department at SAP to follow their path as it would help the community to engage more, and as a result their products would take off more quickly!</p>
<figure><img src="https://liip.rokka.io/www_inarticle/d3f62505f8697f0406e1e5f4a031ae04657272ff/navigation-forward-300x167.jpg" alt='"SAP Fiori for iOS" User Interface Example'></figure>
<p>SAP Fiori for iOS User Interface Example (credits: SAP website)</p>
<h3><strong>Lesson learnt #5: User Interface customization will take you more than a day</strong></h3>
<p>Once we got the app and SAP environment ready, we dived into the code in order to play with screens' layout and data flows. As one might expect, that's what the demo app is for: testing in a playground. But when we wanted to customize the design to match our Liip corporate identity, we saw the limitation of the demo app: although it's not a blocker at all, it's good to know that it will require you more than a one-day workshop to get it implemented.</p>
<h3><strong>Summary</strong></h3>
<p>Below is what we achieved in less than a day with this new iOS SAP SDK:</p>
<ul>
<li>Setup of a Liip SAP Cloud Platform demo account with sample data</li>
<li>Running an iOS demo app on our iPhone</li>
<li>Live synchronisation of data between the app and the SAP Cloud Platform</li>
<li>Dive into the “SAP Fiori for iOS” documentation</li>
</ul>
<p>Did <em>you</em> play with the SAP SDK for iOS yet? Or even better, did you already release publicly an iOS app based on SAP? I'd be glad to share on the topic around a coffee or via the comments' section below.</p>]]></description>
          </item>
    
  </channel>
</rss>
