<?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>Tag: open source &#183; Blog &#183; Liip</title>
    <link>https://www.liip.ch/de/blog/tags/open+source</link>
    <generator>Kirby</generator>
    <lastBuildDate>Tue, 09 Oct 2018 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://www.liip.ch" rel="self" type="application/rss+xml" />

        <description>Liip Blog Artikel mit dem Tag &#8220;open source&#8221;</description>
    
        <language>de</language>
    
        <item>
      <title>Add syntactic sugar to your Android Preferences</title>
      <link>https://www.liip.ch/de/blog/syntactic-sugar-android-preferences-kotlin</link>
      <guid>https://www.liip.ch/de/blog/syntactic-sugar-android-preferences-kotlin</guid>
      <pubDate>Tue, 09 Oct 2018 00:00:00 +0200</pubDate>
      <description><![CDATA[<h2>TL;DR</h2>
<p>You can find <a href="https://github.com/liip/SweetPreferences">SweetPreferences on Github</a>.</p>
<pre><code class="language-kotlin">// Define a class that will hold the preferences
class UserPreferences(sweetPreferences: SweetPreferences) {
    // Default key is "counter"
    // Default value is "0"
    var counter: Int by sweetPreferences.delegate(0)

    // Key is hardcoded to "usernameKey"
    // Default value is "James"
    var username: String? by sweetPreferences.delegate("James", "usernameKey") 
}

// Obtain a SweetPreferences instance with default SharedPreferences
val sweetPreferences = SweetPreferences.Builder().withDefaultSharedPreferences(context).build()

// Build a UserPreferences instance
val preferences = UserPreferences(sweetPreferences)

// Use the preferences in a type-safe manner
preference.username = "John Doe"
preference.counter = 34</code></pre>
<h2>Kotlin magic</h2>
<p>The most important part of the library is to define properties that run code instead of just holding a value.</p>
<p>From the example above, when you do:</p>
<pre><code class="language-kotlin">val name = preference.username</code></pre>
<p>what really happening is:</p>
<pre><code class="language-kotlin">val name = sweetPreferences.get("username", "James", String::class)</code></pre>
<p>The <em>username</em> property is converted from a property name to a string, the <code>"James"</code> string is taken from the property definition and the <code>String</code> class is automatically inferred. </p>
<p>To write this simple library, we used constructs offered by Kotlin such as <a href="https://kotlinlang.org/docs/reference/inline-functions.html">Inline Functions</a>, <a href="https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters">Reified type parameters</a>, <a href="https://kotlinlang.org/docs/reference/delegated-properties.html">Delegated Properties</a>, <a href="https://kotlinlang.org/docs/reference/extensions.html#extension-functions">Extension Functions</a> and <a href="https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver">Function literals with receiver</a>. If you are starting with Kotlin, I warmly encourage you to go check those. It's only a small part of what Kotlin has to offer to ease app development, but already allows you to create great APIs. </p>
<p>Next time you need to store preferences in your Android app, give <a href="https://github.com/liip/SweetPreferences">SweetPreferences</a> a try and share what you have built with it. We’d like to know your feedback!</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/7d1c08/blogpost-sugar.jpg" length="1447202" type="image/jpeg" />
          </item>
        <item>
      <title>LiipImagineBundle 2.0.0 Release</title>
      <link>https://www.liip.ch/de/blog/liipimaginebudle-2-0-0-release</link>
      <guid>https://www.liip.ch/de/blog/liipimaginebudle-2-0-0-release</guid>
      <pubDate>Tue, 08 May 2018 00:00:00 +0200</pubDate>
      <description><![CDATA[<p><strong>Changelog</strong><br />
<a href="https://github.com/liip/LiipImagineBundle/releases/tag/2.0.0">https://github.com/liip/LiipImagineBundle/releases/tag/2.0.0</a></p>
<p><strong>Important changes</strong>:</p>
<ul>
<li>minimum required <a href="http://php.net/">PHP</a> version is 7.1</li>
<li>added support of <a href="https://symfony.com/4">Symfony 4</a></li>
</ul>
<p>Full list of changes could be found at <a href="https://github.com/liip/LiipImagineBundle/releases/tag/2.0.0">https://github.com/liip/LiipImagineBundle/releases/tag/2.0.0</a></p>
<p><strong>Overview</strong></p>
<p>This bundle provides an image manipulation abstraction toolkit for <a href="http://symfony.com/">Symfony</a>-based projects.</p>
<ul>
<li>
<p><a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/basic-usage.html">Filter Sets</a>:<br />
Using any Symfony-supported configuration language (such as YML and XML), you can create <em>filter set</em> definitions that  specify transformation routines. These definitions include a set of  <em><a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters.html">filters</a></em> and <em><a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/post-processors.html">post-processors</a></em>, as well as other optional parameters.</p>
</li>
<li>
<p><a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/filters.html">Filters</a>:<br />
Image transformations are applied using <em>filters</em>. A set of  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters.html">build-in filters</a> are provided by the bundle,<br />
implementing the most common transformations; examples include  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/sizing.html#thumbnails">thumbnail</a>,  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/sizing.html#scale">scale</a>,  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/sizing.html#cropping-images">crop</a>,  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/orientation.html#flip">flip</a>,  <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/general.html#strip">strip</a>, and <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/filters/general.html#watermark">watermark</a>.<br />
For more advances transformations, you can easily create your own  <a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/filters.html#filter-custom">custom filters</a>.</p>
</li>
<li>
<p><a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/post-processors.html">Post-Processors</a>:<br />
Modification of the resulting binary image file (created from your <em>filters</em>) are handled by <em>post-processors</em>.<br />
Examples include <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/post-processors/jpeg-optim.html">JPEG Optim</a>, <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/post-processors/jpeg-moz.html">Moz JPEG</a>, <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/post-processors/png-opti.html">Opti PNG</a>, and <a href="http://symfony.com/doc/current/bundles/LiipImagineBundle/post-processors/png-quant.html">PNG Quant</a>.<br />
Just like filters  you can easily create your own  <a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/post-processors.html#post-processors-custom">custom post-processors</a>.</p>
</li>
</ul>
<p>For more detailed information about the features of this bundle, refer to the <a href="http://symfony.com/doc/master/bundles/LiipImagineBundle/index.html">documentation</a>.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/bd17bf/liipimagine200.jpg" length="133946" type="image/jpeg" />
          </item>
        <item>
      <title>Chatbots are dead! Long live chatbots! Learn how to build your own chatbot and what mistakes to avoid.</title>
      <link>https://www.liip.ch/de/blog/chatbots-are-dead-long-live-chatbots-learn-how-to-build-your-own-chatbot-and-what-mistakes-not-to-make</link>
      <guid>https://www.liip.ch/de/blog/chatbots-are-dead-long-live-chatbots-learn-how-to-build-your-own-chatbot-and-what-mistakes-not-to-make</guid>
      <pubDate>Thu, 22 Mar 2018 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Chatbots have been quite the trend of 2017. Several <a href="http://www.inside-it.ch/articles/49513">swiss</a> <a href="http://www.inside-it.ch/articles/49015">companies</a> have launched their chatbot services, with mixed experiences.  <a href="https://www.grandviewresearch.com/press-release/global-chatbot-market">Experts</a> expected that the global chatbot market  is growing from 50 Million dollars (2015) up to 1.5 Billion dollars in 2025. The main reason  is of course the reduction of customer service costs. The rationale is simple, if the chatbot can handle customer requests for free, you will need less staff. </p>
<p>Although its 2018 - and the chatbot trend might have cooled off a bit - I thought I'd still cover some of my experiences of building a chatbot for Facebook. Its purpose is suggesting a game you can play with kids.  It asks you in which context you are in right now (e.g. Outdoors with 2 Kids / In the car with your kid / Waiting room etc..) and then the chatbot suggests you a game you might play together. </p>
<p>But before diving into the project, this article will provide you with a bit of background information on chatbots and explains why it is hard for machines to understand use first. It will then provide an overview of different options if you want to build a chatbot: Go for an open source solution or use one of the many services available. We will finally cover an implementation of a simple chatbot with chatfuel and finish with an evaluation and lessons learned before providing an outlook.</p>
<h2>Overview</h2>
<p>If you  follow the “chatbot” topic closely, you might have noticed, that companies who have invested in this technology went through the typical <a href="https://www.gartner.com/technology/research/methodologies/hype-cycle.jsp">Gartner hype cycle</a>. In 2018 you can expect most of them to follow through the valley of <a href="https://www.finews.ch/news/banken/30995-chatbots-cs-ubs-swissquote-cler-postfinance-amelia-carl-rose">disillusionment</a>. So what happened - you might ask? Well it turns out in the majority of cases chatbots simply couldn't live up the hype. After all, building a chatbot which works as well as a personal assistant on  the phone, turned out to be as hards as making a machine pass the <a href="https://de.wikipedia.org/wiki/Turing-Test">Turing test</a>. </p>
<h3>Why is it still hard for machines to understand us?</h3>
<p>So why is it so hard to build a chatbot that understands us? After all we have seen huge improvements in language oriented machine learning tasks. For example Google was able to launch a new translation product whose product lead (Barak Turovsky) is described as: &quot;It has improved more in one single leap than in 10 years combined&quot;. This big leap forward in translation in 2016, was mainly based on the use of neural networks that allowed to consolidate translation efforts in one big <a href="https://blog.google/products/translate/found-translation-more-accurate-fluent-sentences-google-translate/">system</a>: Here Google started to use deep learning systems (in particular <a href="http://colah.github.io/posts/2015-08-Understanding-LSTMs/">Long Short Term Memory networks</a> (LSTMS), which are a special form of recurrent neural networks (RNNs)) and achieved outstanding results, as shown below:</p>
<figure><img src="https://liip.rokka.io/www_inarticle/ec5482/translation.jpg" alt="An example of the big leap forward in translation in 2016, when Google started to roll out neural networks based translation for this task"></figure>
<p>I suspect that a lot of people saw this leap forward as a sign that the computer finally understands us.  Unfortunately this is still not the case yet. While neural networks have learned to rather translate sentence by sentence and not word by word and map whole sentences from one language to another their task was never, to actually understand what we mean by our words. So right now we are at the point where we can use RNNs to <a href="http://karpathy.github.io/2015/05/21/rnn-effectiveness/">mimick</a> human language extremely well, but still not really understanding it. </p>
<p>All these progresses- although groundbreaking - unfortunately mean that chatbots have been hyped for “AI” in 2017 - still have a long way to go before we can have a meaningful conversations with them. Until then, they are to a certain extent able to distinguish the <a href="https://en.wikipedia.org/wiki/Named-entity_recognition">named entities</a> (e.g. Barack Obama, Zürich, Flight to Frankfurt) that are present in a sentence and finding out the intent (basically what you want to do with that entity). In this task they are rather still limited to cookie cutter phrases like &quot;What time is it in Beijing?&quot;. While <a href="https://en.wikipedia.org/wiki/Natural_language_understanding">natural language understanding</a> will advance rapidly for sure, for chatbots it turns out to be a good idea to bear two things in mind:</p>
<ul>
<li>limit the chatbot application to a very narrow context (e.g. in our example selecting games to play)</li>
<li>make use of &quot;canned&quot; quick replies to narrow down the possibilities of misunderstanding a user and save him some typing.</li>
</ul>
<p>That is why in this blog post I have chosen to build one of these &quot;dumb&quot; chatbots which is  using a very narrow context and make heavy use of quick replies to get the user to navigate through a big solution space (in our case a database of games).</p>
<h2>Open Source Solutions</h2>
<p>By trying something new, as a developer you want to give the open source solutions a try first. In this case you are particularly lucky, since there are quite a few solutions available. We have been trying to list options for chatbot frameworks under <a href="http://datasciencestack.liip.ch">http://datasciencestack.liip.ch</a> . Let me show you three: </p>
<p>1.There are options like <a href="https://github.com/patrickjquinn/P-Brain.ai">P-Brain</a>, that uses node and bootstrap and roll the chatbot logic and the visual representation into one handy framework that you can use in your browser.<br />
2.<a href="https://botpress.io">Botpress</a> offers you a very developer friendly and modular (e.g. natural language understanding, analytics, etc..) node solution (think of rake for chat bots :)</p>
<ol start="3">
<li>Last <a href="https://botkit.ai">Botkit</a> offers you a full stack solution with a dialog editor, analytics and various plugins - all rolled into one node module. </li>
</ol>
<p>The good thing about these open source frameworks is that as a developer or business owner you are in control: You control the data and the logic and you are flexible on where to integrate the solution and might even save some money. A big benefit is also that all of those solutions can easily be connected to a number of Platforms such as <a href="http://slack.com">Slack</a>, <a href="https://www.jabber.org">Jabber</a>, <a href="https://www.twilio.com">Twilio</a> , <a href="http://messenger.com">Facebook Messenger</a> or generic web apps of course. The latest being actually quite a promising way of reducing complexity on websites (thinking of those big menu bars, with millions of sub-menus) or offering a smart and conversational search option. </p>
<h2>As a service Solutions</h2>
<p>If you have been living under a rock, you might expect some cool startups in the chatbots as a service area. But the reality is that we are probably 2-3 years to late for this game. So as usual the big 5 (Facebook, Amazon, Microsoft, Google and IBM) have bought the most promising candidates on the market and are now competing for your attention. As a developer that might not be the worst thing, since you have a number of options to choose from. So here they are:</p>
<ol>
<li>Facebook offers <a href="http://wit.ai ">wit.ai</a> as a chatbot framework. Wit.ai allows you to model entities and intent, and offers integration for automatic speech recognition too. A topic I have covered in another <a href="https://www.liip.ch/en/blog/speech-recognition-with-wit-ai">blog post</a>. </li>
<li>Amazon offers <a href="https://aws.amazon.com/de/lex/">lex</a> which is used internally to power Alexa. It also offers automatic speech recognition (ASR) and natural language understanding (NLU). When scaling your service to replace dozens of call centers, the integrated Amazon infrastructure probably makes sense for you :). One cute fact is that they offer also speech synthesis under the cute name &quot;polly&quot;. </li>
<li>Microsoft offers two solutions: One of them is <a href="http://luis.ai">luis.ai</a>, a NLU solution that mainly does entity recognition and intent disambiguation. The other one is the <a href="https://dev.botframework.com ">botframework</a> which is a framework that integrates with the Microsoft universe (Cortana, Skype, etc.. you see where this is going :))</li>
<li>Google offers <a href="http://api.ai ">api.ai</a> a startup they bought two years ago and  rebranded it  to dialog flow. It runs on Google's tensorflow infrastructure. </li>
<li>Finally IBM uses their familiar Watson brand to also offer a <a href="https://www.ibm.com/watson/de-de/wie-man-einen-chatbot-entwickelt/">chatbot</a> solution, that runs in the IBM cloud. </li>
<li>Even SAP has bought a startup called <a href="https://recast.ai,">racast.ai</a> in this field, which also offers quite a few existing libraries for developers (e.g. go, erlang, ruby, python, etc..).</li>
</ol>
<p>After reading all of these options and maybe after browsing through the fancy feature descriptions, you might be intimidated thinking: Chatbots are expensive, or that sounds really complicated. Luckily you don't have to be. It's fairly easy to get started. For this blog post I have picked none of the options above, but went with <a href="https://chatfuel.com">chatfuel</a>, because it makes starting so much fun. </p>
<h2>Lets get started</h2>
<p>Chatfuel is a chatbot solution that work best for Facebook with their messenger service. Yes it's mainly for Facebook, but you can also integrate it on your website, if you feel like it, and after all you can potentially reach over 1.5 billion people on this platform. In simple cases you don't even need to be able to program to create an easy chatbot. All you need is to login for Facebook to  authenticate chatfuel. Then the dashboard shows up and you can create your first chatbot. </p>
<figure><img src="https://liip.rokka.io/www_inarticle/5faa0c/new-bot.jpg" alt="The template system makes it really easy to get started."></figure>
<p>Generally among things like; being able to analyze your chatbots performance, trigger promotions, broadcast messages to all users or setup additional attributes for your users,<br />
; the most important part is the conversation flow modeling. That's the part where you connect pre-written text blocks with user inputs and decide which text blocks should follow, based on the response. </p>
<h2>Conversation Modeling</h2>
<p>Usually you start with a welcome message, greeting the user and then sending him to a &quot;block&quot;. A block is an area filled with different additional questions which the user has to answer. When I say &quot;has&quot; to answer you already see where this is going. Usually users follow a predefined path through a conversation with having only a few options to &quot;explore&quot; a conversational space. This is possible though, because you can always define fuzzy trigger words or whole sentences such as &quot;I am done here.&quot;, that instantly take you to a certain part in the conversation - in this case the end.</p>
<p>Generally it makes sense to draft the conversation to have a general idea how to structure it. It might seem superfluous at first but you might get lost quickly otherwise. So in our case there are basically two questions that we want to ask the user: </p>
<ol>
<li>Where do they want to play games? Potential answers: &quot;Doesn't matter&quot;, &quot;Inside&quot;, &quot;Outside&quot;, &quot;Waiting Room&quot;, &quot;Car&quot;, &quot;Kids birthday&quot;.</li>
<li>Which kind of games do they want to play? Potential answers: &quot;Solo-game&quot;, &quot;cooperative&quot; or &quot;competition&quot;</li>
</ol>
<p>Once the chatbot collected these answers, he can start suggesting games to the user. </p>
<figure><img src="https://liip.rokka.io/www_inarticle/b1ab55/flow.jpg" alt="Conversation flow based on user attributes or answers given."></figure>
<p>As you can see in the image above, the user has been asked where he wants to play games. Based on his response, which is captured by so-called &quot;quick replies&quot;, he is sent to another part of the conversation. Both responses are saved to user attributes that we can use to send to our server to trigger a query on our database of games now.  </p>
<p>So you might notice,that the combination of &quot;Kids birthday&quot; games with the type &quot;Solo-Game&quot;, does not make much sense  for example unless it's a very lonesome birthday :). You can imagine, that in a more complex scenario, you might encounter more of such cases, where you have to take care of the conversation flow manually. </p>
<h2>Sinatra Service</h2>
<p>Encoding your &quot;data&quot; in the chatbot service is a bad idea (I tried it in the beginning). Maintaining, updating and migrating your data will just be a horrible nightmare. That’s why it makes much more sense, to store it in a database and run a small web-service on top of it, to be able to use it in your chatbot. In our case, I've chosen to use a small <a href="http://sinatrarb.com">sinatra</a> micro-framework, that offers two routes. One is a /search route that the chatbot uses to query our database of games. The second one is a /show route that allows us to extract games from the database in a way that can be processed by the chatbot. </p>
<h3>Search</h3>
<p>The good thing about chatfuel is, that you can interact with it via a <a href="http://docs.chatfuel.com/plugins/plugin-documentation/json-api">JSON API</a>. When the user has answered both questions we are sending his response to the server via a simple GET request. </p>
<figure><img src="https://liip.rokka.io/www_inarticle/697dfd/json.jpg" alt="Sending data to our server containing the data."></figure>
<p>On the server we simply query the database for games matching the criteria and respond with a JSON object that chatfuel is able to understand. In this case, we are building a gallery object out of 10 random matching games, that the user can flip through. Once he selects one he will be redirected to the /show route.</p>
<pre><code class="language-ruby">
get "/search" do 
    games = Game.where(:type =&gt; params["game_type"]).where(:context =&gt; params["context"]).sample(10)
    games.each do |game|
        output &lt;&lt; {"title": game["Name"], 
                    "image_url": "http://xxxxx.herokuapp.com/images/resized/" + game["Bild"],
                    "subtitle": game["Kurzbeschreibung"],
                    "buttons": [{"type": "json_plugin_url","url": "http://xxxxx.herokuapp.com/show?id=#{game["ID"]}","title": "Das will ich spielen!"}]
                  }
    end
    content_type :json
    {
    messages: [
      {
      "attachment":{
        "type":"template",
        "payload":{
          "template_type":"generic",
          "image_aspect_ratio": "square",
          "elements": output
        }
       }
     }
    ]}.to_json
    end</code></pre>
<h3>Show</h3>
<p>Once the user has selected a game, we are showing  a matching image and the game description to him. Using the JSON API we can very conveniently also supply more messages to the user, in this case the simple question is, if he wants another game or wants to end his conversation. Interesting fact to notice is, that we can point the user to a &quot;block&quot; in chatfuel directly, where the conversation is picked up. In our case the block &quot;configure&quot; starts by asking the user again (the same two questions), allowing to find other games.</p>
<pre><code class="language-ruby">get "/show" do 
    game = Game.where(:id =&gt; params["id"]).first
    content_type :json
    {
      messages: [
        {
         text: game["Kurzbeschreibung"]
        },
        {
          attachment: {
            type: "image",
            payload: {
              url: "http://xxx.herokuapp.com/images/" + game["Bild"]
            }
          }
        },
        {
            "attachment": {
              "type": "template",
              "payload": {
                "template_type": "button",
                "text": "Willst Du noch eins?",
                "buttons": [
                  {
                    "type": "show_block",
                    "block_name": "configure",
                    "title": "Ja."
                  },
                  {
                    "type": "show_block",
                    "block_name": "danke",
                    "title": "Nein Danke."
                  }
                ]
              }
            }
       }
      ]
    }.to_json
end</code></pre>
<h2>Integration into Facebook</h2>
<p>Of course after deploying your code to the server (in my case I've simply used heroku) you are ready to go. The good thing about chat fuel is, that all changes to the conversation flow are saved quickly and you can directly test your bot in <a href="http://messenger.com">Facebook messenger</a>. From a testing perspective its rather tedious to write automated tests, that guarantee the functionality of your chatbot, since this might means to go down every conversational path and making sure that the responses make sense. Once you are happy with the results, you can interact directly with your bot, by addressing him with his name (that you have defined in chatfuel) in messenger. From here, you might as well create a Facebook page or community and integrate the communication with your chatbot prominently in the header of the page.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/1d5503/facebook.jpg" alt="Integrate it on a Facebook page"></figure>
<h2>Evaluation and Conclusion</h2>
<p>Chatfuel and Facebook are offering quite a bouquet of analytics for your chatbot application. Beyond simple metrics, like the total number of users, the number of new users and general user activity, you can also compute user retention. Generally you want users to come back and interact with your bot. If they are not coming back,  something might be wrong with the user experience. To investigate such problems chatfuel offers a way to see user inputs that have not been recognized by the system or shows which buttons or blocks have been used the most. </p>
<p>Similar to a website, where a high percentage of users might e.g. not scroll below a certain point, in a chatbot scenario users might stop interacting with the chatbot once they feel that the conversation is not getting them closer to their goal.  Having to answer more than 3 questions before receiving your answer/reward etc. is very tiring for the end-user, at least that’s what I experienced. Repetitively typing responses, or having to think of responses that are understood by the bot, might become a burden for the user too. In general, I think providing a smooth user experience is a very thin and tricky line to walk. I've only seen a few examples where this is done right. I personally think,  a bot can shine in scenarios especially, where you want users to navigate through a vast and complex solution space, while not overwhelming them with the variety of options. After all, chatting with a chatbot, should not feel like filling out a long form.</p>
<h2>Whats next?</h2>
<p>Trying to predict the success of chatbots in different scenarios, I think they will be made use of in customer service heavily. They might either be used to dispatch the customers as a way of 0-level support or even be able to answer some very easy and popular problems right at the start of a conversation maybe to reduce the workload of the staff. A few solutions out there are able to seamlessly handover the conversation to a human already, after they run out of solutions, which might be an interesting hybrid. Yet, personally I feel very annoyed by having to go through these systems to only talk to a human. After all it is hard to replace the touch of humanity with a chatbot system. It is also a question of the value that a customer is having  for a company - e.g. having to talk to a chatbot when wanting to buy an expensive insurance just feels wrong. </p>
<p>In  different  fields I see bigger potential, especially since social acceptance of those  systems is on the rise, with systems like Cortana, Siri or Alexa. We can probably expect chatbots to turn into full fledged assistants in the commerce area, but we have been waiting since the early 90ies. So although the hype of chatbots is over, we can still expect very interesting and promising scenarios, especially in more mundane commonplace areas, beyond baking,commerce and insurances. So feel free to check out our small <a href="http://facebook.com/gutespielideen/">games chatbot</a> from this tutorial on facebook.</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/36b21f/marketing-man-person-communication.jpg" length="5213440" type="image/jpeg" />
          </item>
        <item>
      <title>Time for Coffee available on Android</title>
      <link>https://www.liip.ch/de/blog/time-for-coffee-android</link>
      <guid>https://www.liip.ch/de/blog/time-for-coffee-android</guid>
      <pubDate>Mon, 06 Mar 2017 00:00:00 +0100</pubDate>
      <description><![CDATA[<p><em>Do you have time to take a coffee before your next public transportation connexion? <a href="http://www.timeforcoffee.ch">Time for Coffee</a> is a project initially started by François Terrier among friends in 2015.  We continued the work to make it available on further devices. </em></p>
<p>When the Apple Watch came out, a few Liipers had the idea to make an app for it because having the next departures on the wrist was a perfect use case for this kind of device. The app received quite a lot of attentions in Swiss newspapers and received a Silver in the <a href="https://twitter.com/time4coffeeApp/status/664934048993816576">best of swiss apps</a> in the category “Wearables &amp; New Devices”. Since the Android world deserved also our attention, we made the app available for Android and Android Wear watches. The app is downloadable on the <a href="https://play.google.com/store/apps/details?id=ch.liip.timeforcoffee">Play Store</a>.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/b6f3a2b951339f166ced7a7d1ca10e86cc08524b/timeforcoffee-1024x683.jpg" alt="Coffee cup"></figure>
<p>Do you have time for coffee before your next public transportation? Get the app!</p>
<h2>Departures at a glance</h2>
<p>The particularity of the app is to focus on giving the quickest and easiest look at the timetable of all the means of  transport that are next to you. The app should require very few user interactions : we don't want to enter the start station on the keyboard. This idea fits really well with a smartwatch: you look at you watch and quickly have the information you need. The Android app has extended features with the ability to favorites stations or to search stations.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/f1347d6f5b1d40cf5733d029af739bef376a2fc6/device-2016-08-30-153256-300x300.jpg" alt="Time for Coffee - Departures on Android Wear"></figure>
<p>Departures on Android Wear</p>
<figure><img src="https://liip.rokka.io/www_inarticle/d14c0f006d40190db2c71c96254adf8bc216e67e/device-2016-08-30-153309-300x300.jpg" alt="Time for Coffee - Nearby stations on Android Wear"></figure>
<p>Nearby stations on Android Wear</p>
<figure><img src="https://liip.rokka.io/www_inarticle/1b3d625523edd00559dd77ae160837fa9edb315c/h5ini-u4gto.jpg" alt="Time for Coffee - Departures on Android"></figure>
<p>Departures on Android</p>
<figure><img src="https://liip.rokka.io/www_inarticle/c66d45b06a572eff4cc70c1b99ca0c5142cd2092/2hfd9-j5shm-169x300.jpg" alt="Time for Coffee - Nearby stations on Android"></figure>
<p>Nearby stations on Android</p>
<h2>Real time timetable thanks to Open Data</h2>
<p>Timetable data come from the Open Data platform. The objective is to give the most precise information with real time data if they are available (currently all SSB trains, Zurich area, Lucerne, Geneva, North-Western and Eastern part of Switzerland). More regions are coming with the integration of the <a href="https://opentransportdata.swiss">new open data portal of SBB</a></p>
<h2>Open source</h2>
<p>The code is open source and <a href="https://github.com/timeforcoffee/timeforcoffee-android">available on Github</a> under the MIT licence. The plan is to improve continuously the app in the next months. The mains objectives are to make the app working outside of Switzerland and to develop a Widget for the Android home screen. We are very open to contributors if you are interested!</p>
<h2>To conclude</h2>
<p>Time for Coffee has started first as a web project and is now also an app for the iOS and Android world. It brings a lot of fun to contribute to the open source community with an idea that is useful for everyone in their daily life. The iPhone / Apple Watch app is regularly improved and we want to make the same for the Android version. To know more about the project, you can follow us on <a href="https://twitter.com/time4coffeeApp">twitter</a>. We would be very happy to receive your feedbacks.</p>
<figure><img src="https://liip.rokka.io/www_inarticle/ba6a48ee99e5c8326c8bcd3ebfe3a3a689ff958a/timeforcoffee-300x300.jpg" alt="Logo Time for Coffee"></figure>
<p>More information on <a href="https://app.timeforcoffee.ch/">app.timeforcoffee</a> !</p>]]></description>
                  <enclosure url="http://liip.rokka.io/www_card_2/9d0ec6cde7cbc5ad1ad9b80f7b2fb4e355a50616/timeforcoffee.jpg" length="113074" type="image/jpeg" />
          </item>
        <item>
      <title>Geld sparen mit Drupal: Effizientes Content Management</title>
      <link>https://www.liip.ch/de/blog/drupal-effizientes-content-management</link>
      <guid>https://www.liip.ch/de/blog/drupal-effizientes-content-management</guid>
      <pubDate>Wed, 25 May 2016 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>In meiner Blog Reihe über Geld sparen mit Drupal schrieb ich bereits über <a href="https://journal.liip.ch/de/2016/05/drupal-die-nachhaltige-cms-investition-2/">vier Gründe für den attraktiven ROI</a> von Drupal. Dabei ging ich detailliert auf die Thematik der <a href="https://journal.liip.ch/de/2016/05/content-management-ohne-lizenzgebuehren/">nicht vorhandenen Lizenzkosten</a> sowie die <a href="https://journal.liip.ch/de/2016/05/flexible-und-marktintegrierte-entwicklung/">flexible und marktintegrierte Entwicklung</a> ein. Heute widme ich mich dem effizienten Content Management.</p>
<p>Eine der grössten Stärken von Drupal ist die Strukturierung von Inhalten. Damit einhergehend trennt das Framework den Inhalt von der Darstellung. Dieses Konzept ermöglicht eine sehr effiziente, kohärente und logische Administration von Text und Bild. Webmaster erfassen Inhalte einmal und setzten diese beliebig oft ein. In Kombination mit den im System integrierten Rollen, kann das Administrationsteam die Pflege des Inhalts sinnvoll organisieren und in Drupal entsprechend abbilden. So fallen aufwändige Schulungsverfahren weg oder reduzieren sich auf ein Minimum. Selbst internationale Teams profitieren: Drupal unterstützt sowohl im Frontend als auch im Backend mehrere Sprachen.</p>
<p>Lesen Sie nächste Woche mehr zu meinem vierten Grund des attraktiven ROI's von Drupal: Die langfristige Investition. Bis dahin freue ich mich über Ihre Inputs und Reaktionen.</p>]]></description>
          </item>
        <item>
      <title>Geld sparen mit Drupal: Keine Lizenzgeb&#252;hren</title>
      <link>https://www.liip.ch/de/blog/content-management-ohne-lizenzgebuehren</link>
      <guid>https://www.liip.ch/de/blog/content-management-ohne-lizenzgebuehren</guid>
      <pubDate>Fri, 13 May 2016 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>In meinem <a href="https://journal.liip.ch/de/2016/05/drupal-die-nachhaltige-cms-investition-2/">vorherigen Post</a> führte ich vier Gründe auf, wieso das CMS Drupal so erfolgreich ist und einen ausserordentlich attraktiven ROI ermöglicht. Heute will ich detailliert auf den Vorteil von Drupal und Open Source eingehen.</p>
<p>Die <a href="https://en.wikipedia.org/wiki/GNU_Free_Documentation_License">GNU-Lizenz</a> (Open Source) ist sicherlich einer der Schlüsselfaktoren für das kostengünstige Umsetzen mit Drupal. Neben dem Grundsystem (='Core') stehen Unternehmen über 30'000 verschiedene Module komplett kostenfrei zur Verfügung. Verglichen mit einer proprietären Lösung, wo Kunden in der Regel eine Jahreslizenz oder eine Lizenz pro Version bezahlen, können Unternehmen diese Aufwände bei Drupal direkt in die Custom-Entwicklung des Systems investieren. Ein Wechsel des Content Management Systems ist mit sehr hohen Kosten und Zeitaufwänden verbunden, welche Kunden daher in der Regel für einige Jahre an eine Lösung binden. Erhöht ein Anbieter eines proprietären Systems zudem die Lizenzkosten, trifft Sie dies als Betreiber besonders empfindlich. Mit Drupal haben Sie im Gegenzug jederzeit die freie Marktwahl bezüglich der Entwickleragentur.</p>
<p>Lesen Sie nächste Woche wie Sie mit Drupal dank der flexiblen und marktintegrierten Entwicklung Geld sparen. Bis dahin freue ich mich über Ihre Inputs und Reaktionen.</p>]]></description>
          </item>
    
  </channel>
</rss>
