⚠️⚠️Deine Privatsphäre ist in Gefahr⚠️⚠️

Privacy – ein Wort, welches immer wieder fällt, meistens im Zusammenhang mit Facebook, Google, Microsoft oder Apple. Privacy heisst Privatsphäre; heutzutage wird der Begriff aber meistens im Kontext der Privatsphäre im Internet und vor allem im Zusammenhang mit Benutzerdaten sowie Surfverhalten verwendet.
Wenn man verstehen möchte, was Privatsphäre im Internet genau bedeutet und warum sie wichtig ist, muss man zuerst wissen, welche Daten gesammelt werden, und vor allem wie. Nehmen wir an, du besuchst die Webseite der Migros. Dazu gibst du die URL in die Adressleiste ein oder suchst via Google. Wenn du die Seite über die Google-Suche aufrufst, erfährt Google, dass du wahrscheinlich Migros-Kunde bist. Allerdings legt Google erheblich mehr Daten an, als nur zu deinem Besuch der Webseite.
Google speichert unter anderem auch, woher du die Seite besuchst, welches Gerät du verwendest und noch viel mehr. Zu den wichtigsten Infos die Google sammelt, gehören die Daten über die Nutzung der Webseite. Google verwendet ein Tool namens «Google Analytics», um Daten über die Nutzer seiner Webseite zu erhalten. Somit kann Google herausfinden, wie lange du auf der Migros-Webseite bleibst und für was du dich dort interessiert. Gemeinsam mit deinen bevorzugten Onlinezeiten, deinem Aufenthaltsort, deinem Arbeitsweg, den Geräten, welche deinem Profil zugeordnet sind und den Suchanfragen, welche deinem Profil entsprechen sind deine Daten gar nicht mehr so anonym.
Falls du einen Google-Account hast und während dem Surfen eingeloggt bist, erhältst du unter https://myactivity.google.com/myactivity und https://www.google.com/maps/timeline  einen kleinen Einblick in das, was Google alles sieht.

Das erklärt, wieso plötzlich vermehrt Werbung von IKEA auftaucht, nachdem du wiederholt nach einem neuen Sofa oder Bett gesucht hast. Denn Google verwendet die gesammelten Daten, um personalisierte Werbeanzeigen zu schalten. Solche Banner und Buttons sammeln wiederum Daten über die Nutzung der aufgerufenen Seite. Google ist jedoch nur eines von vielen Unternehmen, welche Daten sammeln. Weitere «Datensammler» sind zum Beispiel Acxiom und Datalogix.
Mehr Informationen über die erhobenen Daten findest du unter https://aboutthedata.com.
Dabei handelt es sich um diejenigen Daten, die während dem Surfen im Internet gesammelt werden. Noch problematischer sind Apps und Social-Media-Seiten, die richtige Goldgruben für Data Miners, wie man Datensammler und Verkäufer auch nennt, sind. Es gibt zwei Möglichkeiten, wie diese an deine Daten gelangen: Entweder kaufen sie sie direkt von der Seite bzw. von anderen Data Miners, oder sie nutzen die «Suchschnittstellen» der Seite, um an die gewünschten Daten zu kommen. Anschliessend aggregieren sie diese mit den Daten anderer Quellen, um ein Gesamtbild zu erhalten. Die Menge an Daten, welche Benutzer durch «Liken», Kommentieren und andere Interaktionen täglich an Facebook übermitteln, ist beachtlich. Facebook kann jedoch mehr als nur Daten zu sammeln: Die Anzahl an Berechtigungen, welche die Facebook-App auf Android anfordert, ist erschreckend: Telefonnummern, Anrufprotokoll, Netzwerkstatus ändern und viel mehr. Dies ist der Grund, weshalb Facebook wahrscheinlich auch deine Telefonnummer hat. Es reicht, wenn einer deiner Kontakte die App installiert hat.

Die Nutzung der gesammelten Daten ist sehr unterschiedlich. Für Telefonnummern interessieren sich zum Beispiel Callcenter. Werden sie an genügend Callcenter verkauft, ergibt sich schon viel Gewinn. Auch Headhunter oder Marketingagenturen sind dankbare Abnehmer. Wichtig ist, wie die Daten verarbeitet sind, denn rohe Listen von Daten werden selten verkauft. Oft ist es so, dass sie in Gruppen wie geschätztes Einkommen, Heimatort oder Arbeitsweg unterteilt werden. Listen mit E-Mail-Adressen und benutzten Geräten sind nicht zuletzt auch für Hacker nützlich, da diese Informationen sogenannte Brute-Force-Angriffe erleichtern. Mit der zunehmenden Verbreitung von künstlicher Intelligenz verbessern sich die Methoden des Data Mining, wodurch sich noch genauere Nutzerprofile erstellen lassen. Ein Beispiel dafür sind die Preise von Flugtickets. Weiss eine Fluggesellschaft, dass du jedes Jahr eine bestimmte Veranstaltung besuchst, erhöht sie kontinuierlich den Preis deines Tickets – allerdings nur um wenige Franken, damit dir möglichst nichts auffällt.
Zwei Buchungen eines Kollegen zur «DreamHack 2017»:

Links im Bild siehst du die Buchung, wie sie mit einem Browser im anonymen Modus getätigt wurde. Rechts im Bild ist dieselbe Buchung in einem Browser, mit welchem früher schon mehrmals über diese Seite gebucht wurde.

Offensichtlich haben Daten heute einen sehr hohen Wert. Da wir die freie Verfügbarkeit von Inhalten im Internet als selbstverständlich ansehen, erwarten Firmen, dass wir mit unseren Daten bezahlen. Schon mit der Nutzung einer Seite erklären wir uns mit dieser Annahme einverstanden. Leider existieren keine verbindlichen und genau definierten internationalen Richtlinien zum Datenhandel privater Informationen, denn die Gesetze in den einzelnen Ländern werden eher schlecht als recht umgesetzt.
Die wichtigste Frage: Wie schützt du dich vor dem Datenklau?
Eine erste Erkenntnis ist, dass du dich nie ganz schützen kannst, sofern du nicht auf die Nutzung des Internets verzichten möchtest. Allerdings stehen dir Hilfsmittel zur Verfügung, um die Menge der gesammelten Daten zu begrenzen. Das Browser-Plug-in «Privacy Badger» (https://www.eff.org/de/privacybadger) fängt viele sogenannte Tracker ab, die Informationen über die von dir aufgerufenen Seiten ermitteln. Statt die Facebook-App auf deinem Smartphone zu installieren ist es ratsam, via Browser auf die Seite zuzugreifen. Die App «Friendly» funktioniert als Mini-Browser für Facebook und Facebook-Messenger. Mit den integrierten Filtern blockierst du Tracker und blendest Werbung aus.
Gelegentlich solltest du überprüfen, welche externen Dienste auf dein Facebook-Profil Zugriff haben: https://www.facebook.com/settings?tab=applications.
Wenn du trotzdem lieber die normale Facebook-App benutzen möchtest, lohnt es sich, den Zugriff auf Daten wie deinen Standort, dein Kontaktbuch oder dein Mikrofon zu unterbinden. Auf dem iPhone findest du die Regeln in den Einstellungen unter «Privatsphäre». Android-Nutzer nehmen diese Einstellungen für jede App einzeln unter dem Menüpunkt «Anwendungsmanager» vor. Weiterhin empfiehlt es sich Flüge und Hotels immer in einem anonymen Tab zu buchen.
Falls dir absolute Kontrolle über alle ausgehenden Daten auf deinen Geräten wichtig ist, solltest du auf Zwischenprogramme (sogenannte «Fiddler») setzen.
Für Android existiert «GlassWire» (https://play.google.com/store/apps/details?id=com.glasswire.android), wohingegen es fürs iPhone noch nichts Vergleichbares gibt.
Linux User können «Opensnitch» verwenden (https://github.com/evilsocket/opensnitch) ,
Mac-Benutzer greifen auf «Little Snitch» (https://www.obdev.at/products/littlesnitch/index.html) zurück und für Windows empfiehlt sich das Programm «NetLimiter» (https://www.netlimiter.com).
Im Endeffekt ist Vorsicht jedoch der beste Ratgeber. Das nächste Mal, wenn du eine Seite im Internet aufrufst, fragst du dich am besten: Womit finanziert sich diese Seite und im Gegenzug für was lohnt es sich für den Betreiber, mir die Seite gebührenfrei zur Verfügung zu stellen?

Denn: «gratis» gibt es nichts.

Raphael Antonietti
Frontend Engineer

Digitale Transformation und digitale Geschäftsmodelle

Mit mehr als sieben Milliarden Menschen und mindestens 35 Milliarden Geräten (davon 7 Milliarden mobile Geräte), die miteinander kommunizieren, interagieren und sogar verhandeln, wurde eine neue Welt ins Leben gerufen: Die Welt der digitalen Ökonomie. Das digitale Geschäft verwischt die traditionellen Grenzen zwischen der physischen und der virtuellen Welt und ermöglicht tiefere, breitere und sinnvollere Verbindung zwischen Menschen, Unternehmen und Dingen. Es entstehen neue Businessmodelle und neue Möglichkeiten, die zu klaren Wettbewerbsvorteilen führen. Die IT hat dabei das Potential, fast jedes Geschäft zu verändern (digitale Transformation). Dies haben genügende Beispiele, z.B. aus der Personenbeförderung (Uber) oder Hotellerie (Airbnb), eindrücklich aufgezeigt.

Die jungen Generationen (u.a. die Digital Natives) sind sich gewohnt, sich in dieser digitalen Welt zurechtzufinden. Ab 2020 bilden die Digital Natives die Mehrheit der Schweizer Bevölkerung (siehe Abbildung). Damit führt das neue Kundenverhalten der neuen Generation X und Y erst recht zu neuen Businessmodellen mit einer völlig neuen Art und Weise, wie Kunden mit den Unternehmungen interagieren (User-zentrierte Modelle, Co-Creation, Crowdsourcing, Crowdfunding).

pwc_digital_natives

Ab 2020 sind die Digital Natives in der Mehrheit. Quelle: PWC 2014

Digitale Maturität

Im Gegensatz zu den Kunden der neuen Generationen haben die meisten Unternehmen wenig Erfahrung mit der digitalen Business Transformation. Sloan & CapGemini (2012) unterscheiden bzgl. der digitalen Maturität vier Gruppen von Unternehmen.

digital-maturity-s1

Vier Gruppen von Unternehmen bzgl. digitaler Maturität. Quelle: MIT Sloan & CapGemini 2012

Beginners (65%): Setzen traditionelle IT ein und verfügen über keine Digitalisierungsvorhaben.

Conservatives (14%): Sind bewusst zurückhaltend, obwohl eine Adaption relativ rasch möglich wäre.

Fashionistas (6%): Sind sehr aggresiv in der Adaption von digitalen Technologien, verfügen aber über keine gute Abstimmung zwischen den internen Bereichen oder haben keine Digitalstrategie.

Digirati (15%): Das Top-Management hat eine starke Vision und Verständnis, was die Digitalisierung bringen kann und profitieren am meisten von der digitalen Transformation. Der Kulturwandel ist vollzogen.

digital_maturity

Internationale Online-Umfrage, 450 grosse Firmen, 1559 Personen aus 106 Länder. Quelle: MIT Sloan & CapGemini

Was ist zu tun?

Das richtige Geschäftsmodell und demzufolge die richtige Digitalstrategie macht digitale Unternehmen erfolgreich und nicht alleine die IT oder das Wissen und die Kompetenz in der IT (War of Digital Business Models). Eine treffende Aussage dazu von Joe Gross (Head of Market Managment, Allianz Gruppe):

If you do not get a digital business model right, all the fancier stuff you do on apps, digital banners and social media will have a risk of being experiments that will fizzle away or will never result in a pure transformation of the company.

Wie soll eine Organisation also mit der disruptiven Innovation, welche die neuen digitalen Geschäftsmodelle oft beinhalten, nun umgehen?

  • Involvement des CEO mit einer hohen digitalen Maturität ist ein Schlüsselfaktor.
  • Je nach Disruptionsgefahr der Branche muss er die digitale Roadmap leiten.
  • Enthusiasten der disruptiven Innovation Verantwortung geben.
  • Eigene Organisationseinheit mit eigenen Ressourcen schaffen.
  • Mögliches Scheitern der disruptiven Innovation in Kauf nehmen.

Andreas Hebeisen
Software Engineer

Virtuelle Realität – ein Blick auf die Technologie und ihr Potential

Ich wurde zuerst vor ungefähr zweieinhalb Jahren auf Virtuelle Realität aufmerksam. Damals lief gerade der Verkauf des zweiten Development Kits der Oculus Rift, die eine Welle der Virtuellen Realität auslöste, die zu einer ganzen Industrie und mit mehreren Produkten und vielen Innovationen führte. Ich war fasziniert von den Möglichkeiten die VR zu bieten hatte, aber als Informatiker interessierten mich vor allem auch die Technologien, die hinter den ersten VR-Headsets steckten. Ich bestellte mir das Oculus DK2 (Development Kit 2), nicht um selber etwas zu entwickeln, sondern um diese neue Technologie einmal aus erster Hand zu erleben. Über ein Jahr später kamen dann die ersten beiden Headsets für den Endbenutzer, Oculus Rift und HTC Vive auf den Markt. Ich habe mir sofort eine HTC Vive vorbestellt und versucht, so vielen Leuten wie möglich VR ein wenig näher zu bringen, denn mit Erzählen kommt man schnell an die Grenzen. Wenn man jemandem jedoch das Headset aufsetzt kommen viele Leute ins Staunen und ich wurde nicht selten gefragt wie teuer es ungefähr wäre, ein VR Headset sowie den geeigneten Computer zu kaufen.

Die Entwicklung des Trackings

Einer der wichtigsten Aspekte von Virtueller Realität ist die Information, wo der Benutzer des Headsets gerade hinschaut. Mit dieser Information kann berechnet werden, was dieser sehen sollte.

Im ersten Development Kit der Oculus wurden nur Beschleunigungssensoren, Magnetometer und Gyroskope verwendet um die Bewegungen des Kopfes zu erfassen. Mit ihrer Hilfe wurde die Beschleunigung so wie die relative Ausrichtung des Headsets in Bezug auf das Magnetfeld der Erde ermittelt. Kombiniert sind diese Informationen gut genug um die simple Rotation des Kopfes zu erfassen, z.B. Kopf Schütteln oder Nicken. Sobald der Träger des Headsets jedoch seinen Oberkörper bewegt stimmt das Bild des Headsets nicht mehr mit dem Gleichgewichtssinn des Trägers überein, was Übelkeit zur Folge haben kann.

Im DK2 der Oculus Rift wurde zusätzlich zum Headset noch eine Infrarot Kamera mitgeliefert. Zusätzlich war das Headset mit Infrarot LED’s ausgestattet. Mit Hilfe dieser beiden Hardware-Erweiterungen konnte nun die genaue Position des Headsets im Raum ermittelt werden. Diese Tracking-Methode wird bis heute von Oculus verwendet, lediglich werden nun zwei bis drei Kameras für das Tracking eingesetzt.

Oculus Tracking

Mit einer Infrarot-Kamera sind die Leds auf der Oculus klar sichtbar. Quelle Bild: https://ifixit.org/blog/6625/oculus-rift-dk2/

Parallel zu Oculus entwickelte noch eine andere Firma ein VR-Headset mit alternativem Tracking. Valve arbeitete auch an einem Prototyp für ein VR-Headset, das eine Komplett andere Art von Tracking verfolge: Als «Prove of Concept» tapezierten die Entwickler bei Valve einen Raum mit QR-Tags. Diese Tags erlaubten es der Kamera am Headset seine eigene Position zu bestimmen.

Tagged Room

Der Raum bei Valve, der als POC für das Tracking ihres VR-Headsets diente. Quelle Bild: https://medium.com/@rtpvr/foveated-rendering-clearer-vr-with-less-fully-rendered-pixels-168352080ccb

Natürlich war es keine Option für zukünftige Benutzer eines VR-Headsets ihr Zimmer mit Markierungen zu Tapezieren. Die Lösung für dieses Problem war eine Laser-basierte Technologie, die heute in der HTC Vive zu finden ist: Lighthouse (en. für Leuchtturm). Die beiden Lighthouse-Stationen, die in gegenüberliegenden Ecken des Raumes platziert werden senden abwechslungsweise Laser-Impulse aus, welche von Fotodioden auf dem Headset registriert werden. Durch die gemessenen Zeitabstände der Laserimpulse und der Geometrie der Fotodioden auf dem Headset kann eine genaue Position im Raum ermittelt werden. Dieser Prozess findet ca. 120 Mal pro Sekunde statt, mit einer Genauigkeit von ungefähr einem Drittel Millimeter.

Abgesehen von der hohen Genauigkeit ist einer der grössten Vorteiler dieser Methode die Anzahl an Geräten, die in einem Raum verfolgt werden können. Da jedes Gerät für seine eigene Position verantwortlich ist können beliebig viele Geräte gleichzeitig in einem Raum verfolgt werden (natürlich wird es früher oder später ein Problem mit dem Platz geben und die Geräte werden sich gegenseitig Schatten werfen und so die Laserimpulse nicht mehr erhalten).

Meiner Meinung nach wird die Lighthouse Technologie in Zukunft für weit mehr gebraucht als nur für VR. Dank der hohen Genauigkeit des Systems und die relativ tiefen Kosten der Hardware ist es perfekt für andere Anwendungsbereiche. Lighthouse wurde zum Beispiel schon getestet als Motion Capture Methode. Da der PC sofort die Koordinaten des gefolgten Punktes erhält kann dieser Punkt direkt einem 3D Model «angelegt» werden. Sobald genügend dieser Punkte vorhanden sind können die Modelle ohne weiteren Aufwand animiert werden.

Möglichkeiten zur Qualität-Verbesserung der VR-Headsets

Wer ein Virtuelle Realität schon einmal ausprobiert hat, sei es mit Google Cardboard oder einem teuren Headset, weiss, dass die Auflösung sowie das Sichtfeld noch nicht optimal sind. Die Vive sowie die Oculus Rift haben zwei 1080×1200 Displays eingebaut. Jedoch reicht es nicht einfach ein besseres Display mit höherer Auflösung und einer grösseren Pixeldichte zu entwickeln. Die Rechenleistung reicht mit der Hardware von heute einfach noch nicht aus, eine solche Auflösung mit 90 Bildern pro Sekunde darzustellen.

Foveated Rendering

Ein Beispiel für Foveated Rendering. Nur der innerste Kreis wird mit der höchstmöglichen Auflösung gerendert. Quelle Bild: https://www.vrfocus.com/2015/06/htc-vive-the-story-so-far/

Eine mögliche Lösung für dieses Problem wäre Foveated Rendering. Bei dieser Methode wird nur der Teil des Bildes, das der Benutzer gerade betrachtet mit der vollen Auflösung gerendert. Der Rest eines Bildes kann verschwommen sein, da auch das menschliche Auge Details am Rande seines Sichtfeldes ausblendet. Diese Optimierung passiert grösstenteils auf Softwareebene, das einzige was zusätzlich an Hardware benötig wird ist eine kleine Kamera die das Auge aufnimmt um festzustellen wo es hinschaut.

Interessante Möglichkeiten mit Virtual Reality

Es ist nicht schwer sich Anwendungsfälle vorzustellen wo VR eingesetzt werden könnte. Eine virtuelle Tour in einem Museum? Besser Vorstellung von der Farbe eines neuen Autos erhalten? Eine neues Kleid designen? Einen Vortrag vor einer grossen Menschenmenge üben? Alle diese Beispiele wurden bereits mit Virtual Reality ausprobiert.

Besonders in der Medizin wird VR in Zukunft wahrscheinlich öfters eingesetzt. Einerseits kann VR dazu verwendet werden zukünftige Ärzte auszubilden indem sie eine Operation virtuell durchführen könne oder sich selbst in die Strukturen eines Organs begeben können um deren Aufbau und Funktionsweise zu verstehen. Andererseits kann Virtual Reality dazu benutzt werden um  Menschen mit Posttraumatischer Belastungsstörung (PTSD) zu helfen.

Wieso jetzt?

Viele fragen sich jetzt vielleicht: Wieso ist VR gerade in den letzten paar Jahren so weit vorangeschritten? Wieso nicht schon vor 15 Jahren? Der wohl grösste Grund wieso gutes VR erst in den letzten paar Jahren verfügbar wurde ist die Mobiltelefon-Industrie. Dank dieser sind nicht nur die Preise für hochauflösende Displays stark gesunken, es wurde auch viel Geld in besser Auflösung und höhere Pixeldichte investiert.

Ein weiterer Grund ist auch das Grafikkarten leistungsstärker geworden sind und einen bestimmten Grenzwert überschritten haben.

Genau diese Fragen und die Antworten darauf finde ich einer der faszinierendsten Aspekte von VR. Nicht wegen Virtual Reality selbst, sondern weil Technologien sich fortlaufend verbessern und es nur eine Frage der Zeit ist bis der technologische Grenzwert für etwas Interessantes, vielleicht sogar Weltbewegendes überschritten wird.

Christian Rothen
Software Engineer

SharePoint Client Side Tasks

Wenn wir Client Side mit JavaScript und SharePoint arbeiten wollen gibt es generell zwei Ansätze: Entweder wir verwenden die SharePoint JS API’s oder wir verwenden die REST Schnittstellen.

In diesem Blog möchte ich kurz über die Vor- und Nachteile der jeweiligen Methode sprechen.

JavaScript API
Oder anders gesagt JSOM was sich auf die Bezeichnung CSOM (Client Side Object Model) bezieht. Mit JSOM sind eine Vielzahl von Aufgaben und Aktionen sehr einfach erreichbar geworden. Wenn wir z.B. alle Elemente einer Liste laden wollen, geht das mit ein paar einfachen Zeilen JavaScript.

Vorteile:
– JS (sp.js) Library ist umfangreicher als die REST Schnittstellen
– Die Aktionen werden mittels batching durch die Library in einer Abfrage erledigt

Nachteile:
– Die Dokumentation dieser API lässt zu wünschen übrig, oft muss man selber herausfinden wie gewisse Objekte zu verwenden sind
– Möchten wir Listen Elemente Filtern, müssen wir ein CAML Query schreiben, was nicht immer wirklich intuitiv ist

REST Schnittstelle
Auch mit der REST Schnittstelle ist es einfach Basis Operationen zu entwickeln. Wir haben hier zusätzlich die Möglichkeit diese Aktionen mit weit verbreiteten Tools umzusetzen (z.B. jQuery oder Angular), was die Client Side Entwicklung noch einfacher macht. Würden wir also via REST unsere Listen Elemente laden wollen würde das so aussehen:

Vorteile:
– REST ist eine weit verbreitete Technologie daher ist die Dokumentation sehr umfangreich
– Man kann Browser Tools wie Fiddler verwenden um Querys zu testen, was den Entwicklungsprozess beschleunigen kann.
Nachteile:
– Mit REST sind gewisse Aktionen nicht gebatcht, wenn wir also eine Liste mit Elementen erstellen wollen müssen wir eine Abfrage für das Erstellen der Liste verwenden und für jedes Element das wir erstellen möchten auch noch. Mit REST müssen wir also öfter mit dem Server kommunizieren um gewisse Aufgaben zu erledigen

Fazit
Im SharePoint Bereich kann man nicht sagen, dass die eine oder andere Variante zu verwenden ist. Entscheidend hier ist wohl eher die Situation in der man gerade entwickelt und was man persönlich bevorzugt.

Folgende Checkliste hat mir bei dieser Entscheidung oft geholfen:
– Umfang des Projektes, lohnt sich der Umfang der Aufgabe dafür jQuery oder Angular einzusetzen? Denn ohne, ist das Arbeiten mit REST nicht ganz so intuitiv.
– Kann ich die Aufgabe mit REST bewältigen? Dafür gibt es eine umfangreiche Liste mit deren Hilfe man einfach herausfinden kann ob die Aufgabe mit REST bewältigt werden kann: JS – REST API Index
– Mit welcher Technologie kann ich schneller entwickeln?

Smart Watch, Smart Phone, Tablet – und doch hat das A4 Blatt noch längst nicht ausgedient!

Vor zwei Wochen sass ich im Zug nach Zürich. Wie immer hatte ich mit meinem Mobile ein elektronisches Ticket gelöst und bin ohne einen weiteren Gedanken eingestiegen. Kurze Zeit später die Kontrolle. Ich öffne die SBB App, es folgt das gewohnte Schütteln und dann die Anzeige: „Keine gültigen Tickets vorhanden!“ Sie kennen es, das peinlich beschämende Gefühl. App neu gestartet – Mobile neu gestartet – noch immer kein Ticket. Der erlösende Moment war nicht etwa das auftauchende Ticket, sondern menschliche Toleranz. Ich konnte – ohne einen konkreten Plan und mit Fluchtgedanken – den Kontrolleur dazu bringen zuerst den Rest des Wagens zu kontrollieren und dann zu mir zurück zu kehren.

Plötzlich ein Gedankenblitz: Das Mobile Ticket gibt’s doch auch als PDF. In meinen Spam E-Mails gab es tatsächlich eine E-Mail von der SBB mit dem Link auf das gute alte PDF Ticket. Mein Kopf entfärbte sich, mein Atem beruhigte sich und die Blicke der Leute im vollen Intercity wandten sich wieder ihrem eigenen Smartphone zu als das „bü-büüp“ die Gültigkeit meines Tickets bestätigte.

Diese Situation zeigt einmal mehr, dass das gute alte A4 Blatt noch lange nicht ausgedient hat. Auch wenn wir es immer häufiger nicht mehr ausdrucken, ist und bleibt das Dokument als verlässlicher Informationsträger ein wichtiger Bestandteil der digitalisierten Prozesse. Sei es als Ticket, als Lohnausweis, als Versicherungspolice, als Baugesuchdokument, als Angebot, als Vertrag oder als Krankenakte. Visualisierungen von Informationen im Web oder auf Smart Phone Apps sind immer dynamisch aufbereitet. Dokumente beinhalten einen klaren, eindeutigen und persistenten Informationsstand. Und nicht zuletzt können Dokumente auf einfache Weise betrachtet, signiert, geschützt, verteilt und archiviert werden.

Eine simple und gleichzeitig geniale Möglichkeit Dokumente dynamisch aus Unternehmensdaten zu generieren bietet dox42. Die anschaulichen Beispiele auf der Internetseite können mit der kostenlosen Testversion direkt ausprobiert werden. Nutzen sie diese Gelegenheit oder lassen Sie sich von den Video-Erklärungen inspirieren.

Als Beispiel nutze ich folgend einen Projektstand-Bericht. Obwohl wir alle Kennzahlen in unterschiedlichen Systemen mit den tollsten dynamischen Dashboards führen, macht es Sinn, den Stand für die Besprechung mit Entscheidern als Dokument aufzubereiten. Das Dokument ist in Bezug auf Verteilung, Beurteilung, Feedback und Ablage immer noch eines der einfachsten und effizientesten Instrumente. Aber es ist immer ein Marathon und ein enormer Aufwand zeitnah alle Daten der unterschiedlichen Systeme aufzubereiten. Damit kann ab morgen Schluss sein!

Ziele und Nutzen

  • Visuelle Darstellung des Projektstandes aller relevanten Projekte.
  • Zusammenführung der aktuellen Daten aus unterschiedlichen Systemen in ein Dokument.
  • Kommentare können als Vorbereitung direkt auf dem PDF Bericht erfolgen.
  • Anmerkungen können auf dem PDF Bericht während der Besprechung hinzuzugefügt werden.
  • Digitale Signierung des PDF Berichtes bei wichtigen Entscheiden.
  • Archivierung des laufenden Datenstandes.
  • Bei Bedarf können vertrauliche Dateninhalte mittels Rights Management Services geschützt werden.

Datenquellen

  • ERP: Projekte, Mitarbeitende, Projektteam und Rollen.
  • Visual Studio Team Systems: Work Item Management, Agile Project Management.
  • SharePoint: Projekt Controlling Informationen.

Ergebnis

Der Bericht ist als Microsoft Word aufbereitet. Obwohl auch in PowerPoint Dateien mit dox42 automatisiert erstellt werden können, bietet Word in der Gestaltung und Positionierung der Elemente wesentlich mehr Flexibilität. Aus diesem Grund bevorzuge ich für das Zielformat PDF das Microsoft Word als Vorlageneditor.

Das Ergebnis als PDF steht zum Download bereit. Bei Interesse können Sie mich gerne kontaktieren und ich kann das Beispiel als Offline-Sample aufbereiten oder wir können in einer Skype Session Ihre persönlichen Szenarien besprechen.

Projektstandbericht Juni 2017 (mit Anmerkungen)

Tipp: Optimierung der Datenarchitektur

Es ist immer sehr einfach und flexibel, die unterschiedlichen Datenquellen direkt in den Bericht einzubinden. dox42 bietet dazu unterschiedliche Konnektoren. Dabei bestehen jedoch 2 Herausforderungen:

  • Der Benutzer greift direkt auf Rohdaten unterschiedlicher Systeme zu. Meist bedeutet dies den Umgang mit unterschiedlichen Technologien und komplexen Datenstrukturen.
  • Der Datenzugang kann in vielen Systemen nicht ausreichend geschützt werden, da in diesen keine modernen Schnittstellen zur Verfügung stehen. Der Ersteller des Berichts hat somit möglicherweise Zugang zu schützenswerten Daten welche nicht verwendet werden dürfen.

Die Lösung für dieses Szenario ist eine Datenarchitektur, in der zwischen den Datenquellen und dem Bericht ein Report Service bereitgestellt wird. Dieser übernimmt zentral folgende Aufgaben:

  • Vereinfachung der Datenstrukturen.
  • Vereinheitlichung des technischen Zugriffs (Produkte, Technologien, Authentifizierung).
  • Sicherstellung der Datensicherheit (Filter, entfernen oder verfremden schützenswerter Daten).
  • Sicherstellung der Nachvollziehbarkeit der Datenzugriffe (Audit Log).

Dynamischer Einsatz der PnP Remote Provisioning Engine

PnP Remote Provisioning Engine

Die PnP Remote Provisioning Engine, entwickelt im Rahmen der Office Dev Patterns and Practices (PnP) Initiative, ist eine Open-Source-Bereitstellungs-Engine für SharePoint. Die Engine kann verwendet werden, um Anpassungen und Assets von, respektive zu, SharePoint-Websites aus der Ferne zu extrahieren oder anzuwenden. Sie lässt sich mit verwaltetem Code oder als PowerShell-Cmdlets verwenden, um Anpassungen an Websites zu automatisieren. Installiert wird sie als Nuget-Paket (verwalteter Code), aus der PowerShell Gallery oder mit einer Installationsdatei (ebenfalls PowerShell). Neue Releases folgen in der Regel monatlich.

Die Engine ist kompatibel zu SharePoint Online und On-Premises (2013 und 2016), wobei der Fokus bei der Entwicklung durch die Community eher auf SharePoint Online liegt. Sämtliche Aktionen erfolgen über das Client Side Object Model (CSOM) und somit über die SharePoint-API. Dies bietet den entscheidenden Vorteil, dass der Code nicht auf dem SharePoint-Server, sondern auf einem normalen Client ausgeführt werden kann.

SharePoint_PnP

Provisioning-Template und -Schema

Ein zentraler Bestandteil, neben weiteren praktischen Funktionen und Cmdlets, ist die Möglichkeit Anpassungen und Assets aus Seiten in ein XML-Template zu exportieren und in (andere) Seiten zu importieren. Die Möglichkeiten dieser XML-Datei sind jeweils im aktuellen Provisioning-Schema von PnP beschrieben.

Folgendes kurze Beispiel zeigt dieses Vorgehen mit Hilfe der beiden PowerShell-Cmdlets Get-PnPProvisioningTemplate und Apply-PnPProvisioningTemplate auf.

Exportieren des XML-Templates aus einer bestehenden Website mittels PowerShell:

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/marketing
Get-PnPProvisioningTemplate -Out template.xml

Daraus resultiert folgendes Template (nur der Ausschnitt einer benutzerdefinierten Liste wird gezeigt):

<?xml version="1.0"?>
<pnp:Provisioning xmlns:pnp="http://schemas.dev.office.com/PnP/2016/05/ProvisioningSchema">
  <pnp:Preferences Generator="OfficeDevPnP.Core, Version=2.15.1705.0, Culture=neutral, PublicKeyToken=3751622786b357c2" />
  <pnp:Templates ID="CONTAINER-TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D">
    <pnp:ProvisioningTemplate ID="TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D" Version="1" BaseSiteTemplate="STS#0">
		<!-- ... -->
		<pnp:Lists>
		<!-- ... -->
			<pnp:ListInstance Title="Meine Liste" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/Meine Liste" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false">
			  <pnp:ContentTypeBindings>
				<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
				<pnp:ContentTypeBinding ContentTypeID="0x0120" />
			  </pnp:ContentTypeBindings>
			  <pnp:Views>
				<View Name="{A4F02C0C-9C2D-4243-B4B9-9EF42BCD7A3A}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="/sites/debug/Lists/Meine Liste/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=40">
				  <Query>
					<OrderBy>
					  <FieldRef Name="ID" />
					</OrderBy>
				  </Query>
				  <ViewFields>
					<FieldRef Name="LinkTitle" />
				  </ViewFields>
				  <RowLimit Paged="TRUE">30</RowLimit>
				  <JSLink>clienttemplates.js</JSLink>
				</View>
			  </pnp:Views>
			</pnp:ListInstance>
			<!-- ... -->
		</pnp:Lists>
		<!-- ... -->
    </pnp:ProvisioningTemplate>
  </pnp:Templates>
</pnp:Provisioning>

Importieren des Template in eine andere bestehende Website mittels PowerShell (die benutzerdefinierte Liste wird dabei erstellt):

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/sales
Apply-PnPProvisioningTemplate -Path template.xml

Hier gilt es anzumerken, dass das Provisioning-Schema derzeit noch nicht den gesamten Funktionsumfang von SharePoint abdeckt. So werden z.B. Inhalte von Seiten und Listen oder Einstellungen von Webparts nicht immer komplett exportiert. Fehlende Inhalte und Einstellungen können entweder im generierten XML-Template manuell ergänzt oder nachträglich per Script direkt in der Site angepasst werden.

Zudem ist es wichtig, dass das XML-Template dem Schema entspricht, also valid ist. Dies wird erschwert, da teilweise z.B. sogar die missachtete Gross-/Kleinschreibung von Attribut-Werten zu einem invaliden Template führen kann.

Tipp an dieser Stelle: Lade dir das aktuelle PnP-Provisioning-Schema herunter, schnapp dir ein XML-Validierungstool deiner Wahl (z.B. Notepad++ mit dem Plugin „XML Tools“) und validiere dein Provisioning-Template. Du sparst dir viel Zeit und Ärger beim Anwenden, falls sich ein Fehler eingeschlichen hat.

Templates dynamisch anwenden

Weiter können wir uns von PnP zu Nutze machen, dass sich Templates mit Hilfe des XMLSharePointTemplateProvider sehr einfach direkt aus einer SharePoint-Dokumentenbibliothek laden lassen. So können z.B. verschiedene Ausprägungen einer Site als XML-Template formuliert und in einer zentralen Dokumentenbibliothek abgelegt werden. Hier können diese auch jederzeit angepasst werden (inkl. Versionsverwaltung). Werden nun spezielle Assets zu einem bestimmten Zeitpunkt auf einer Site benötigt, können diese dynamisch durch Anwenden eines der Templates zur Site hinzugefügt werden.

Folgendes Beispiel zeigt auf, wie mit dieser Methode die obenstehende Beispiel-Liste dynamisch zu einer Site hinzugefügt werden kann. Im Template werden dazu noch Parameter eingefügt:

  • {parameter:ListTitle}: Titel der dynamisch erzeugten Liste
  • {parameter:ListUrl}: URL der Liste (auch in URL der View verwendet)
  • {guid}: Automatisch neuerstellte GUID für den Namen der View

Template für die Liste mit eingefügten Parametern:

<?xml version="1.0"?>
<pnp:Provisioning xmlns:pnp="http://schemas.dev.office.com/PnP/2016/05/ProvisioningSchema">
  <pnp:Preferences Generator="OfficeDevPnP.Core, Version=2.15.1705.0, Culture=neutral, PublicKeyToken=3751622786b357c2" />
  <pnp:Templates ID="CONTAINER-TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D">
    <pnp:ProvisioningTemplate ID="TEMPLATE-EE20A9E57E2C4B4185C4D497F9E6274D" Version="1" BaseSiteTemplate="STS#0">
		<!-- ... -->
		<pnp:Lists>
		<!-- ... -->
			<pnp:ListInstance Title="{parameter:ListTitle}" Description="" DocumentTemplate="" TemplateType="100" Url="{parameter:ListUrl}" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false">
			  <pnp:ContentTypeBindings>
				<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
				<pnp:ContentTypeBinding ContentTypeID="0x0120" />
			  </pnp:ContentTypeBindings>
			  <pnp:Views>
				<View Name="{guid}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="{parameter:ListUrl}/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=40">
				  <Query>
					<OrderBy>
					  <FieldRef Name="ID" />
					</OrderBy>
				  </Query>
				  <ViewFields>
					<FieldRef Name="LinkTitle" />
				  </ViewFields>
				  <RowLimit Paged="TRUE">30</RowLimit>
				  <JSLink>clienttemplates.js</JSLink>
				</View>
			  </pnp:Views>
			</pnp:ListInstance>
			<!-- ... -->
		</pnp:Lists>
		<!-- ... -->
    </pnp:ProvisioningTemplate>
  </pnp:Templates>
</pnp:Provisioning>

Zum Anwenden des Template wird dann dieser Code z.B. in einem Webservice ausgeführt:

using (var ctx = new ClientContext("https://contoso.sharepoint.com/sites/dev-team"))
{
    // Verbindung zu Template-Folder in der zentralen Bibliothek herstellen
    var absoluteSiteUrl = "https://contoso.sharepoint.com/sites/templates";
    var templateFolderPath = "ListTemplates/CustomLists"; // URL der Bibliothek & Verzeichnispfad
    var provider = new XMLSharePointTemplateProvider(ctx, absoluteSiteUrl, templateFolderPath);

    // Provisioning Template laden
    ProvisioningTemplate template = provider.GetTemplate("template.xml");

    // Parameter zu Template hinzufügen (Titel und URL)
    template.Parameters.Add("ListTitle", "Meine Liste");
    template.Parameters.Add("ListUrl", "Lists/MyList");

    // Template anwenden -> Liste erstellen
    ctx.Web.ApplyProvisioningTemplate(template);
    ctx.ExecuteQuery();
}

Ein ähnliches Vorgehen ist übrigens auch client-seitig aus JavaScript bzw. TypeScript-Code mit Hilfe der PnP-JS-Core-Bibliothek möglich. Dann allerdings unter Angabe eines JSON- statt eines XML-Templates. Dokumentation der Funktion hier.

Einfachere und schnellere SharePoint-Entwicklung dank PnP

Für uns bedeutet der Einsatz von PnP in der SharePoint-Entwicklung:

  • Höhere Produktivität: Einfache Cmdlets bzw. Methoden aufrufen statt etliche Zeilen Code zu schreiben.
  • Einfaches Provisioning: Ganze Portale können einfach und nachvollziehbar per Skript erstellt werden.
  • Flexibilität: Templates anpassen und neu anwenden. Keine umfangreichen Anpassungen und schon gar nicht Solutions neu installieren.
  • Bereit für die Zukunft: Inhaltstypen, Felder und Listen ganz ohne klassische Feature-Framework-Elemente einzusetzen. Einer zukünftigen Migration steht nichts mehr im Weg. Ebenso kann dieser Ansatz ohne weiteres für SharePoint Online eingesetzt werden.

Auch deshalb ist die SharePoint PnP Remote Provisioning Engine ein zentraler Bestandteil der ADVIS eSuite.

Andreas Hebeisen
Software Engineer

Links

SharePoint Patterns and Practices auf GitHub:
https://github.com/SharePoint/PnP

PnP PowerShell:
https://github.com/OfficeDev/PnP-PowerShell

PnP-JS-Core:
https://github.com/SharePoint/PnP-JS-Core

ADVIS eSuite:
https://www.advis.ch/loesungen/esuite

Kundenindividuelle Anpassungen in SharePoint-Portalen

Bei Kundenbesuchen wird mir häufig bewusst, dass ein Standard SharePoint Portal durch kleine aber effektive Anpassungen optimal an die Bedürfnisse des Kunden angenähert werden kann. Bereits ein, auf den Kunden optimiertes, Farblayout oder ein ausschlaggebender Titel im Ribbon steigert die Akzeptanz und erhöht den Wiedererkennungswert des SharePoint Portals. In diesem Blogeintrag zeige ich Ihnen drei solche Anpassungen für die SharePoint On Premise Version. Diese können mit nur wenig Programmierkenntnissen schnell eingeführt werden. Dies auch, wenn das Portal bereits produktiv in Betrieb genommen wurde oder schon vorher sonstige individuelle Anpassungen vorgenommen wurden.

Topbar

In der Standard SharePoint 2016 Topbar wird ein Titel «SharePoint» angezeigt.

SharePoint_Topbar

In den meisten Kundenportalen macht diese Beschreibung «SharePoint» wenig Sinn und wird besser durch den eigenen Portaltitel und Link besser ersetzt. So wird die Portalseite des Kundenintranets visuell hervorgehoben und hilft den Benutzern durch einen Klick auf den Link schnell wieder auf die Startseite ihres gewünschten Portals zu gelangen.

Statt diese Anpassung über JavaScript oder sogar durch eine Bearbeitung an der Masterpage vorzunehmen, kann man über nachfolgenden Powershell Befehl den Titel «SharePoint» innerhalb einer gesamten Webapplikation einfach ändern.

PowerShell_Topbar1

Nachdem diese Powershell-Befehle ausgeführt wurden, wird nun innerhalb der SharePoint Webapplikation «SharePoint» durch den «Portaltitel» ersetzt. Zusätzlich ist der Portaltitel nun auch ein Link, welcher auf die gewünschte Portalstartseite zeigt. Dieser Tipp gilt nur für die SharePoint OnPremise Version.

SharePoint_Topbar_after

Color-Dateien

Erfahrungsgemäss besitzen alle Kunden ihre eigenen Logos und Farbschemas (Corporate Identity und Corporate Design) und legen grossen Wert darauf, diese auch in ihrem SharePoint Portal abzubilden. Mit Color-Dateien können sehr einfach kundenspezifische Farbwelten erstellt und innerhalb von SharePoint appliziert werden. Eine Color-Datei ist im Grunde ein XML, welche die Farben für SharePoint Designelemente festlegt. Ohne dabei das Detail des XML zu kennen, verwenden wir meist das SharePoint Color Palette Tool (weitere Informationen und Download unter https://www.microsoft.com/en-us/download/details.aspx?id=38182).

Das Tool verfügt über eine direkte Live-Vorschau. Die Kundenspezifischen Farbwelten können so sehr einfach und schnell erzeugt werden.

Color_Tool.png

Raphael Antonietti, Frontend Engineer bei ADVIS AG, wird in seinem nächsten Blog-Eintrag noch detaillierter auf die Color-Dateien eingehen.

Eine Color-Datei lässt sich über folgenden Powershell-Befehl anschliessend innerhalb einer SharePoint Site Collection applizieren. Bedingung ist, dass die Color-Datei vorher in der entsprechenden Library („/_catalogs/theme/15/») abgespeichert wurde.

ApplyColorFile_2

Mit dem zweiten Parameter kann zusätzlich noch eine Font-Datei (definiert die Schriften innerhalb eines SharePoint-Portals) angegeben werden.

Werden noch zusätzliche Anpassungen an einer Color-Datei vorgenommen, welche bereits appliziert wurde, so kann diese Color-Datei über folgendes PowerShell-Script nochmals appliziert werden. Leider bringt es nämlich nichts, wenn man die Color-Datei in der entsprechenden Library („/_catalogs/theme/15/») anpasst.

ReApplyColorFile

Webpart-Ansicht: Link in neuem Tab öffnen

Häufig wünschen sich Kunden, dass bei einem Linklisten-Webpart die Links in einem neuen Browser-Tab geöffnet werden. Ich habe dies durch ein JSLink gelöst, welches anschliessend bei den Webpart-Einstellungen konfiguriert wird.

JSLink_NewTab

JSLink_WebPart1

Beim Klick auf die Links im Webpart wird nun eine neues Brower-Fenster geöffnet, statt die Links im gleichen Browserfenster zu öffnen.

NuetzlicheLinks.png

Fazit

Mit nur wenig Anpassungen an einem SharePoint-Standard Portal können die Bedürfnisse des Kunden meist besser abgedeckt werden. Wichtig scheint mir zudem zu erwähnen, dass die Anpassungen keine Auswirkungen auf weiterführende SharePoint Versionen haben werden. Gerne werde ich Euch auch in Zukunft weitere solche nützlichen «SharePoint-Hacks» vorstellen.

Übrigens werden diese Anpassungen bei unseren Produkten eSuite Site Manager und Meeting Manager beim initialen Setup berücksichtigt (weitere Informationen finden Sie unter: https://www.esuite.ch).

Corinne Burkhalter
Software Engineer