Weshalb ist Machine Learning für Ihre Firma wichtig?

    Hans Hardmeier  18 August 2016 14:53:09
    Was ist Machine Learning und wie kann eine Firma es brauchen?

    Was ist Deep Learning? DL ist grundsätzlich rechnergestützte Wahrnehmung. Als Wahrnehmung definieren wir die Möglichkeit Daten zu interpretieren. In Machine Learning (ML) unterscheiden wir von supervised und unsupervised Learning. Entweder können wir direkt Daten einer bekannten (supervised) Kategorie zuordnen. Z.B. „Dieses Foto ist von meiner Tochter“, „diese Stimme ist von meiner Mutter“) oder zusammen in einer unbekannten (unsupervised) Kategorie sammeln: Z.B. „Diese zwei Personen haben den gleichen Akzent“ oder „Diese zwei Personen sind sicher verwandt“.

    Da dieses Konzept relativ abstrakt ist, kann man es überall anwenden. Wir können Algorithmen trainieren, um z.B. Spam-Mails von Nicht-Spam-Mails zu unterscheiden oder potentielle Gefahren zu erkennen. Ab hier wird es interessant.

    Mit Hilfe von Deep Learning und anderen Algorithmen können wir nahezu alles klassifizieren, gruppieren und sogar vorhersagen. DL erkennt automatisch bestimme Signale und Strukturen von den gegebenen Daten. Wenn die Parameter in der «Training»-Phase bestimmt werden, werden die Fehler der Vorhersagen anhand der Training-Daten minimiert. Dies bezeichnet man als «Optimierung».

    Daten können Bilder, Videos, DNA, Texte, Zahlenserien u.a. sein. Praktisch alles was der Mensch digitalisieren kann. Man kann nun grosse Datamengen intelligent, schnell und automatisch analysieren (viel effizienter und schneller als je ein Mensch in der Lage ist).

    Hat man die Vorhersage, kann man darauf früh und schnell reagieren. Spam-Mail  Spam-Folder, das Röntgen-Bild zeigt ein Tumor-Muster  Weiterleitung zu Experten oder weitere Tests.

    Um das zu erreichen, braucht man aber etwas Wichtiges: Daten. Heutzutage wird glücklicherweise alles digitalisiert. Es wird aber aus Platzgründen digitalisiert. Anstatt ein Buch hat man eine 145 KB Datei. Anstatt Papier-, Tinte- und Versandkosten zu decken, kann man ein E-Mail schicken. Es wird aber Zeit das Potential der Digitalisierung zu benutzen. Es gibt bereits verschiedene ML- und DL-Algorithmen um bestimmte Daten zu klassifizieren und vorherzusagen. Man braucht nur Fachkräfte, die diese Algorithmen an bestimmten Datensätze trainieren und praktisch einsetzen.

    Datenverarbeitung, Geschäftskontrolle und Geschäftsverwaltung sind die perfekte Voraussetzungen für die Erweiterung eines bisher noch nicht existierenden Markts: Intelligente Analyse. Grosse Firmen haben bereits die ersten Schritte gewagt: AMAZON Machine Learning, Microsoft Azure Machine Learning und SAS-ML-Lösung bieten diese Dienstleistungen bereits an.

    Die Deep-Learning-Firma Skymind stellte folgende Beispielliste der möglichen Anwendungen zusammen:

    Image:Weshalb ist Machine Learning für Ihre Firma wichtig?

    Sources:

    http://deeplearning4j.org/use_cases.html

    https://www.quora.com/What-are-the-practical-applications-of-deep-learning-What-are-all-the-major-areas-fields

    https://entwickler.de/online/azure-machine-learning-166738.html

    https://aws.amazon.com/de/machine-learning/details/

    http://www.sas.com/de_ch/insights/analytics/machine-learning.html

      Chat transcripts: Is there a better solution?

      Gregor Weisser  3 June 2016 15:17:42
      Today a chat transcript contains a chronologically sorted list of messages. The problem is, that sometimes a message posted refers to a message which has been posted several posts before so if someone reads the messages in the sequential order it is sometimes difficult to understand: one has to review older messages and try to find the one that corresponds logically.

      I propose a new function to be integrated into chat clients: A referral system which allows to post a new message with a link to a specific previous message.

      The advantage will be a better understanding of the sequence of messages. This will in fact support parallel chat message sequences.

      Let's do some definitions:
      - a chat consists of a chronologically sorted list of messages
      - the newest message is the lowermost message

      Now some new user interface actions have to be introduced:
      1. the user can click on any message and create a new message and the new message will have an implicit link to the message it is linked to
      2. the user can click on any message and tell the chat client to show only messages with links to it: this will allow to see a part of a chat conversation
      3. the user can click on any message and link it to another (older) message
      4. the links will be shown graphically so the user can see and understand the semantic links

      This additional functionality will enhance user's understanding of the messages and yet be a rather simple extension of the UI.

        Spannendes Problem, spannende Lösung

        Yanick Zeder  26 May 2016 15:57:50
        Notes DialogBox mit Richtext-Feld

        Beim Entwickeln von Notes-Applikationen gibt es häufig Situationen, in welchen es gewünscht ist, dass man dem Benutzer mittels einer DialogBox die Möglichkeit gibt Daten einzugeben oder anzupassen. Wenn man sich dabei aber nicht nur auf Text-Felder beschränken und auch Richtext-Felder benutzen möchte, stösst dabei bei Notes an seine Grenzen. Denn die Lotusscript-Funktion DialogBox() unterstützt das Rückschreiben von Richtext-Feldern in ein Dokument nicht. Das Field-Sharing funktioniert leider nicht für RichText, wie in der Lotusscript Referenz ersichtlich:

        Image:Spannendes Problem, spannende Lösungen

        Nach Recherche im Netz konnte ich keine Lösung finden welche zuverlässig funktioniert. Deswegen entwickelte ich eine eigene Lösung resp. einen Workaround..


        Der Workaround


        Der hier beschriebene Workaround nutzt die Zwischenablage um den Inhalt des Feldes in das Dokument zu übertragen. Er besteht grundsätzlich aus zwei Teilen:
        1. Vor dem Schliessen der DialogBox muss der Inhalt des benötigten Feldes kopiert werden.
        2. Das entsprechende Dokument wird mittels UI-Dokument geöffnet, der Feldinhalt eingefügt und gespeichert.


        Code im der Dialog-Maske


        Wir wollen vor dem Schliessen des Dokuments den Richtext-Content kopieren. Hierzu muss der Code im QueryClose angepasst werden:

        Sub Queryclose(Source As Notesuidocument, Continue As Variant)
              Set sourceUiDocument = Source
             
              ‘navigiere zum gewollten Feld
              Call sourceUiDocument.GotoField("Body")
             
              ‘kopiere den gesamten Inhalt in die Zwischenablage
              Call sourceUiDocument.SelectAll()
              Call sourceUiDocument.Copy()
        End Sub


        Lotusscript im Agent


        sendOk = ui.Dialogbox("DialogInstantMailingEdit", True, True, False, False, False, False, "Instant Mail Editor", email, True, False, True)
        'falls der User den Dialog mittels „OK“ geschlossen hat, muss der Inhalt übertragen werden
        If sendOk then
              ‚Reload the docment
              Set memoView = datenbank.Getview(„")
              Set dokument = memoView.Getdocumentbykey(objKey(0), True)
             
              ‘zuerst muss das Dokument im UI geöfnet werden
              Call ui.EditDocument(True, dokument)
        ‘dann wird der inhalt des Feldes gelöscht. Dies verhindert einen Prompt vom Notes welches darauf hinweist dass diese aktion nicht rükgängig gemacht werden kann.
              Call ui.Currentdocument.Fieldclear("Body")'Prevents the dialog:"This operation cannot be undone"
              Call ui.CurrentDocument.GotoField("Body")
              Call ui.Currentdocument.Selectall()
              Call ui.CurrentDocument.Paste()
              Call ui.CurrentDocument.Save()
              Call ui.CurrentDocument.Close()
        End If

          Schweizer Gemeinden sollten nicht Dropbox verwenden

          Alexander Weisser  14 May 2016 17:43:50
          Schweizer Behörden, Gerichte, Gemeinden, Ämter, etc. sind an das Schweizer Datenschutzgesetz (Bundesgesetz über den Datenschutz (DSG) vom 19. Juni 1992; https://www.admin.ch/opc/de/classified-compilation/19920153/index.html) gebunden, genau so wie auch Schweizer Unternehmen. Zusätzlich sind bei Schweizer Behörden noch kantonale Datenschutzgesetze und Vorschriften und das strafrechtliche Amtsgeheimnis zu beachten. Damit ist gemeint, dass Gemeinden besonders vorsichtig mit ihren Daten umgehen müssen.

          Allen diesen Vorschriften zum Trotz gibt es aber dennoch Gemeinden, die z.B. Dropbox für ihre Archive und offenen Dossiers verwenden. Dropbox ist ein praktisches Tool für Documentsharing. Es ist gratis und richtet sich vor allem an private User. Dropbox verwendet allerdings Server in den USA ("Storage servers are located in data centers across the United States.", Quelle: https://www.dropbox.com/en/help/7).

          Warum sollte es denn ein Problem sein, dass Dropbox die Daten ihrer User in den USA hostet?

          Die USA hat mit der Schweiz ein Safe Harbour Agreement (http://www.edoeb.admin.ch/datenschutz/00626/00753/00970/index.html?lang=de&download=NHzLpZeg7t,lnp6I0NTU042l2Z6ln1acy4Zn4Z2qZpnO2Yuq2Z6gpJCDdX98hGym162epYbg2c_JjKbNoKSn6A--), das es Schweizer Unternehmern und Behörden erlaubte, in den USA bei gewissen, zertifizierten Unternehmen Daten zu hosten. Es ist formell immer noch gültig, bringt aber nicht mehr viel. Am 6. Oktober 2015 hat der Europäische Gerichtshof (EuGH) nämlich das gleichlautende Abkommen zwischen den USA und der EU für ungültig erklärt, da die USA den Datenschutzanforderungen der EU nicht genügen (http://curia.europa.eu/juris/document/document.jsf?text=&docid=169195&pageIndex=0&doclangÞ&mode=lst&dir=&occ=first&part=1&cid=316922).

          Der Eidgenössische Datenschutz- und Öffentlichkeitsbeauftragte (EDÖB) hat in einer offiziellen Stellungnahme natürlich den notwendigen Schluss daraus gezogen: Das Safe Harbour Agreement zwischen der Schweiz und den USA ist demnach auch nicht mehr genügend für das Schweizer Datenschutzrecht, denn letzteres wird stetig an das europäische Datenschutzniveau angepasst. Der EDÖB ermahnt alle Schweizer Unternehmen und Behörden, dass "im Umgang mit modernen Kommunikationsmitteln die Verwendung bestimmter Tools und die Preisgabe persönlicher Daten stets wohl überlegt sein soll. Ist eine Auslagerung von Daten notwendig, sollten diese, wenn immer möglich, von europäischen Anbietern auf Servern im europäischen Raum gespeichert werden. Schweizer Unternehmen und Behörden, die Produkte und Dienstleistungen von US-Unternehmen in Anspruch nehmen, sollten Zusatzvereinbarungen zum besseren Schutz der betroffenen Personen und ihrer Daten treffen." (Quelle: http://www.edoeb.admin.ch/datenschutz/00626/00753/00970/01323/index.html?lang=de).

          Solche "Zusatzvereinbarungen" sind allerdings ziemlich belastend. Folgende Zugeständnisse müssen dabei an die Personen gemacht werden, deren Daten in den USA gehostet würden:
          "1. Personen, deren Daten in die USA übermittelt werden, müssen klar und umfassend über die möglichen Behördenzugriffe informiert werden, damit sie ihre Rechte wahrnehmen können. Der Vertrag zum Austausch von Personendaten sollte die beteiligten Parteien dahingehend verpflichten.
          2. Die Parteien müssen sich verpflichten, betroffenen Personen die für einen wirksamen Rechtsschutz notwendigen Behelfe zur Verfügung zu stellen, entsprechende Verfahren tatsächlich durchzuführen und darauf ergehende Urteile zu akzeptieren. "
          (Quelle: http://www.edoeb.admin.ch/datenschutz/00626/00753/00970/01320/index.html?lang=de)

          Hinzu kommt, dass die meisten Gemeinden ja über gar keine vertraglichen Beziehungen zu ihren Bürgern verfügen, deren Daten sie mit Dropbox in die USA schicken. Das bedeutet, dass gar keine solchen Zusatzvereinbarungen abgemacht werden könnten, und dies selbst wenn die Gemeinde genügend rechtliches Verantwortungsgefühl zeigte.

          Wenn eine Gemeinde daher ihre Daten in Dropbox bearbeitet, wird das über kurz oder lang datenschutzrechtliche Konsequenzen haben. Ausführlichere Erklärungen zum Thema Cloud Computing und Datenschutz gibt es in den Erläuterungen zu Cloud Computing des EDÖB (http://www.edoeb.admin.ch/datenschutz/00626/00876/01203/index.html?lang=de).

          ATEGRA bietet die elektronische Geschäftskontrolle (eGeKo; www.egeko.ch) an, die Gemeinden eine Lösung bietet, die mit dem Problem von Dopbox konfrontiert sind. Einheitliche Softwarelösungen bieten Gemeinden Sicherheit davor, dass jeder einzelne Mitarbeiter nicht irgendwelche datenschutzwidrige gratis-Software verwendet. Für weitere Informationen stehen die Informatik-Ingenieure von ATEGRA gerne jederzeit zur Verfügung.

            Things you have to think about, when you migrate away from IBM Notes

            Gregor Weisser  8 January 2016 14:05:00
            Plan for new solutions for your main workflow applications like
            • expenses
            • travel approvals
            • absence approval workflows
            • investment applications
            • project application workflows
            • management by objective workflows

            Plan a solution for your multi user address books, like department address books.

            Remember that migrating away from IBM Notes is not only migrating mail and calendar but also a wide set of applications.

              Verhalten von Agenten bei Domino-Server-Neustart

              Heinz Mathys  29 December 2015 10:55:28
              Ich werde immer wieder von Kunden angefragt, weshalb der Agent XYZ am Tag X nicht lief, resp. zweimal lief. Anbei eine kurze Zusammenstellung der häufigsten Situationen.

              Situation Server-Neustart, resp. Amgr-Task-Neustart

              Das Verhalten ist so, dass bei einem Neustart der Domino-Server der Amgr-Taks die zeitgesteuerten Agenten prüft, ob der Agent bereits gelaufen ist. Abhängig davon startet der Amgr-Task den Agenten oder eben nicht. Falls der Domino-Server 'crashed' kann es sein, dass die Agenten-Info zum kurz zuvor durchgeführten Lauf nicht korrekt abgespeichert wurde (siehe z.B. swg21099248). Seit R7 kann man dieses Verhalten für täglich laufende Agenten mittels Notes.INI-Parameter "Amgr_SkipPriorDailyScheduledRuns" übersteuert werden.
              Auszug aus der Hilfe zum Parameter "Amgr_SkipPriorDailyScheduledRuns=1":
              In Notes Domino 7.0 a new notes.ini parameter was introduced which allows you to prevent daily scheduled agents from running when initially enabled.

              Situation Design-Refresh

              Vor R8 hatte man hierzu praktisch keine Möglichkeit das Verhalten gut zu steuern (siehe z.B. swg21090238). Ab R8 kann man den Notes.INI-Parameter DESIGN_AGENT_UPDATE auf "0" (Default) setzen, sodass ein Agent nach einem Design-Refresh nicht deaktiviert wird.
              Auszug aus der Hilfe zum Parameter "DESIGN_AGENT_UPDATE=0":
              In this case the design task will update the agent if the agent in the template is newer than the agent in the database.  After the update is complete the design task will re-enable the agent adding the previous signer to the "run on behalf of" setting in the agent security properties.
              Leider gab es einen Bug hierzu (siehe SPR PALT842M2U) der dieses Verhalten wieder aufhob, d.h. falls nicht alle Agenten aus einer Schablone vererbt wurden, sondern aus verschiedenen, dann funktionierte das Flag nicht.

                Things I would like to have on the iPhone

                Gregor Weisser  12 November 2015 08:30:22
                1. The wifi hotspot on my iPhone should switch itself off after a user defined period of time (e.g. 2 hours).
                2. The calendar should show me all entries between 7 am and 23 pm without need to scroll.
                3. I want to have 20 different colors for different calendar entries based on the new field "category" that syncs with my calendar on the server.
                4. I want to disappear the ugly green color in my SMS text messages.
                5. I want to disappear the ugly red color in my iPhone calendar.

                  Notes-Client: Tipps für User

                  Gregor Weisser  10 November 2015 09:15:50
                  Frage: Wie kann ich zwei Ansichten derselben Datenbank nebeneinander offen haben?
                  Antwort: Zuerst für beide Ansichten ein Lesezeichen in der Lesezeichenleiste links erstellen. Dann beide Lesezeichen anklicken --> beide Ansichten sind in zwei Fenstern gleichzeitig offen! Nun kann man mittels Rechtsklick im Reiter "In neuem Fenster öffnen" wählen und beide Fenster wie gewünscht anordnen.


                    Usability: ein vernachlässigtes Gebiet

                    Gregor Weisser  30 June 2015 15:53:15
                    Es gibt Software für viele verschiedene Bedürfnisse und oft wird die Software vollmundig beworben als universell und besonders bedienerfreundlich. Wenn man aber genauer hinschaut und die Softtware in der Praxis benutzt, erlebt man Situationen, wo man wichtige Funktionen vermisst.

                    Fazit: Es gibt heute leider immer noch Software, die wichtige Anforderungen von Anwendern nicht abdecken. Im folgenden ein paar Beispiele:

                    Beispiel: Kino-Suche in meiner Stadt


                    Situation: Wir sind in der Stadt, es ist 1800 Uhr, wir wollen eine Komödie im Kino sehen. Das Kino sollte in Gehdistanz sein (max. 30 min zu Fuss)

                    Nicht abgedeckte Anforderungen:
                    • muss auf Smartphone bedienbar sein
                    • Suche sollte zu Beginn auf einen Umkreis von 3 km limitiert sein
                    • die Suche nach Zeit + Genre dürfte der häufigste Fall für die meisten User sein

                    Beispiel: Suche nach einer Ferienreise


                    Situation: Wir wollen frühestens am 5. Oktober für ungefähr zwei Wochen in die Ferien und müssen spätestens am 27. Oktober zurück sein. Es soll eine Gruppenreise in Japan sein. Der Reiseleiter sollte Spanisch sprechen.
                    Bei der Flugbuchung ist zu berücksichtigen, dass ich einen Platz mit mehr Beinfreiheit brauche, da ich lange Beine habe.

                    Nicht abgedeckte Anforderungen:
                    • User gibt das Zeitfenster an, in dem die Ferien sein sollen: früheste Abreise, späteste Rückkehr, minimal und maximale Dauer
                    • Typ: Gruppenreise mit Angabe der zugelassenen Sprachen der Reiseführer
                    • Anforderungen betr. Flug: Sitzplatz mit mehr Beinfreiheit

                      Automatisch Notes-Applikationen generieren

                      Remo Gisi  7 May 2015 16:50:42
                      Wir Informatiker möchten immer möglichst viel automatisieren - das gilt natürlich auch für unsere eigene Arbeit, die Programmierung.

                      Bei Notes-Applikationen können wir dies mittels Meta-Programmierung.
                      Von Meta-Programmierung sprechen wir dann, wenn unser Programm nicht mit normalen Daten (Mails, Dokumenten, Zahlen) arbeitet, sondern mit Programmen.
                      Mittels Meta-Programmierung können wir also automatisch neue Programme erstellen oder bestehene Programme verändern.

                      Hier ein Beispiel:

                      Für eine neue Applikation haben wir bereits einige Entitäten definiert, die jeweils eine zugehörige Maske haben:

                      Image:Automatisch Notes-Applikationen generieren

                      Auf jeder dieser Maske haben wir spezielle Felder definiert, z.B. bei der Maske Person die Textfelder für Vorname und Nachname:

                      Image:Automatisch Notes-Applikationen generieren

                      Nun möchten wir die zugehörigen Ansichten dazu erstellen, und da es sich um mehr als 2 Masken handelt sind wir - klar - zu faul, dies von Hand zu machen.
                      Die selbe Arbeit können wir mit einem simplen Agenten erledigen, hier in Pseudocode:



                      CreateViewsForAllForms:
                              thisDatabase.Forms.Foreach { CreateViewForForm }

                      CreateViewForForm(form):
                              view = thisDatabase.CreateView
                              view.Name = form.Name
                              view.SelectionFormula = "SELECT Form = " + form.Name + " & DeletionStatus != deleted "
                              form.Fields.foreach { CreateColumnForField }

                              CreateColumnForField(field):
                                      column = view.createColumn
                                      column.Title = field.Name
                                      column.Formula = field.Name



                      Im Handumdrehen haben wir so für jede Maske eine simple Ansicht erstellt und können uns wieder komplexeren Problemen widmen.