Mittwoch, 29. März 2017

März 2017 - Multimedia (Fotografie)

Das Modul 152 - "Multimedia-Inhalte in Webauftritt integrieren" ist eines der letzten Module, das ich in der Schule absolvieren muss. Wie der Name schon sagt, geht es in einem Teil darum, eine ansprechende Website zu erstellen, in der Multimedia-Inhalte wie Fotos, Videos etc. eingebunden werden.
Die Website an sich ist grundsätzlich keine so grosse Herausforderung, da kaum etwas Neues dazukommt. Jedoch müssen die Inhalte selber erstellt werden. Das bedeutet, wir müssen in Teams eigene Fotos und Videos aufnehmen sowie diese dann bearbeiten. Da dies für mich eher neu ist, schreibe ich in diesem Blogeintrag ein wenig über die Fotografie.


Allgemeines

Die Fotografie ist ein Medium, dass in sehr verschiedene Zusammenhänge gebracht wird. Sie kann unter anderem nach künstlerischen, technischen, ökonomischen, gesellschaftlichen oder sozialen Aspekte betrachtet werden. Grundsätzlich geht es in der Fotografie darum, etwas - z.B. ein Objekt oder eine Landschaft - fotografisch abzubilden.
Die analoge Fotografie wurde zu Beginn des 21. Jahrhunderts durch technologische Weiterentwicklungen von der Digitalfotografie allmählich abgelöst. Das war ein Auslöser, dass die Fotografie immer mehr aus kulturwissenschaftlicher sowie kulturhistorischer Sicht erforscht wurde, da die Industrie für analoge Fotografie zusammenbrach.

Fototechnik

Eine Fotografie ensteht im Prinzip dadurch, dass mit Hilfe eines optischen Systems, etwa einem Objektiv, das Licht eingefangen wird. Dieses Licht wird dann auf die lichtempfindliche Schicht der Kamera weitergeleitet, zum Beispiel auf eine Fotoplatte, einen Film oder einen fotoelektrischen Wandler (Bildsensor). Zur Aufnahme von Fotos wird natürlich eine Kamera eingesetzt. Je nach Kamera kann der Fotograf das optische System so manipulieren, dass ihm unterschiedliche Gestaltungsmöglichkeiten zur Verfügung stehen. Das ist unter anderem die Einstellung der Blende, Belichtungszeit etc., später mehr dazu. Die am weitest verbreitete Kamera ist die Spiegelreflexkamera (analog sowie digital).
Die Entwicklung erfolgt bei der analogen Fotografie auf chemischem Wege. Bei der digitalen Fotografie ist eine Entwicklung grundsätzlich nicht nötig, da die Daten elektronisch gespeichert werden. Eine Ausnahme sind hierbei jedoch Fotos im Rohdatenformat (.raw-Dateien). Diese müssen zuerst mit einer Entwicklungssoftware (z.B. Adobe Lightroom) oder RAW-Konvertern in nutzbare Formate gebracht werden, JPG, PNG etc. Diese Umwandlung wird als digitale Entwicklung bezeichnet.
Ein weiterer Begriff, der vor allem in der analogen Fotografie Verwendung findet, ist der Abzug. Der Abzug ist das Ergebnis einer Kontaktkopie, Vergrösserung oder einer Ausbelichtung. Abzüge sind also aus der Vorlage bearbeitete Kopien. Sie können aus einem Film (Negativ oder Dia) oder von digitalen Dateien erstellt werden.


Belichtungsdreieck

Das Belichtungsdreieck beschreibt den Zusammenhang zwischen Blende, Verschlusszeit und Empfindlichkeitseinstellung. Folgende Begriffe sind wichtig, damit man die Zusammenhänge besser erkennen kann:

ISO-Wert:
Der ISO-Wert gibt die Empfindlichkeit an. Das bedeutet, er definiert, wie Lichtempfindlich ein Medium, Filmmaterial oder Sensor ist. Je höher der ISO-Wert, desto weniger Licht benötigt der Bildsensor. Häufig vorkommende Werte sind etwa 25, 50, 100, 200, 400, ... 12'800 usw.

Verschlusszeit:
Mit der Verschlusszeit kann definiert werden, wie lange ein Medium dem Licht ausgesetzt wird. Es wird hier auch von der Belichtungszeit gesprochen. Gängige Verschlusszeiten (in Sekunden) sind 30, 15, 8, 4, 2, 1/2, 1/4, ... 1/2000 usw.


Blende:
Die Blende befindet sich im Objektiv. Mit dem Blendenwert wird eingestellt, wie weit die Blende geöffnet ist. Je weiter sie geöffnet ist, desto mehr Licht fällt auf das Medium. Ist die Blende nur wenig geöffnet, fällt in der gleichen Zeit auch weniger Licht auf das Medium. Die Blendenwerte sind folgendermassen definiert: f/1, f/1.4, f/2, f/2.8, f/4,... f/32 usw. Wobei ein tiefer Wert (f/1) bedeutet, dass die Blende weit geöffnet ist und ein grosser Wert (f/32), dass die Blende nur ganz klein ist.



Blendenöffnung


Macht man ein einfaches Foto, reicht es aus, bei der Kamera den Automatikmodus zu wählen. Will man hingegen qualitativ hochwertige Fotos erzielen, ist es einen Versuch wert, an den eben genannten Einstellungen zu schrauben, um das bestmögliche Resultat erzielen zu können.

Ist der ISO-Wert, also die Empfindlichkeit, tief, erhält man eine bessere Bildqualität. 
Der ISO-Wert muss aber unter Umständen erhöht werden, falls die Belichtungszeit für ein Foto zu hoch sein sollte, man aber lieber eine kurze Belichtungszeit haben möchte. Die Belichtungszeit kann sich unter Umständen verlängern, wenn z.B. das Objekt schlecht beleuchtet sein sollte.
Hat man einen tiefen ISO-Wert eingestellt, so sind die Farben grundsätzlich kräftiger und das Bild wird schärfer.

Die Verschlusszeit bestimmt die Zeit, in welcher Licht auf das Medium einfällt. Eine kurze Verschlusszeit lässt den Verschluss nur kurz offen, was bedeutet, das weniger Licht einfallen kann, als wenn der Verschluss länger offen und somit die Verschlusszeit höher ist. Eine kurze Verschlusszeit sorgt dafür, dass sich Objekte in Bewegung einfacher scharf stellen lassen. Beispielsweise bei einem vorbeifahrenden Auto wird etwa eine Verschlusszeit von 1/2000s verwendet. Möchte man das Fliessen eines Bachs festhalten, bietet sich eine längere Verschlusszeit an (z.B. 1/15s). Wendet man eine kurze Verschlusszeit an, wird das Wasser auf dem Foto sehr starr aussehen.

Mittels Blendenöffnung wird das Licht, das auf das Medium fällt, reguliert. Bei einem kleinen Blendenwert (z.B. f/1.4 -> Blende weit offen) können Motive isoliert werden. Dadurch werden Vorder - und Hintergrund unscharf und nur das Motiv scharf. Mit einem grossen Blendenwert (f/22 -> Blende wenig offen) wird eine grössere Schärfentiefe erreicht, was sich bei Landschaftsaufnahmen gut eignet, da so Vorder- und Hintergrund scharf abgebildet werden.

Je nachdem, wie die Lichtverhältnisse sind, können die eben genannten Einstellungen manipuliert werden, um bessere Ergebnisse zu erzielen. Wenn wenig Licht vorhanden ist, hat man die Möglichkeit, die Verschlusszeit zu verlängern, die Blende weiter zu öffnen oder den ISO-Wert zu erhöhen. Wie vorhin beschrieben, bringt jede dieser Einstellungen noch andere Vor- bzw. Nachteile mit sich. Es kommt daher immer darauf an, was und wie man etwas fotografieren will, um die richtige Einstellung vorzunehmen.

Nachfolgend wird mit dem Belichtungsdreieck grafisch festgehalten, wie sich die drei Werte zueinander verhalten.



Belichtungsdreieck



Ein letztes Beispiel soll nochmals zeigen, wie die drei Werte eingesetzt werden können. Angenommen man möchte bei eher schlechteren Lichtverhältnissen und einer windigen Umgebung eine Blume resp. deren Blüte fotografieren. Das Foto soll möglichst scharf werden, da nur die Blüte darauf zu sehen sein soll. Also wird man als erstes eine wenig geöffnete Blende wählen, das heisst einen hohen Blendenwert, etwa f/11. Weil der Wind die Blüte bewegt, muss die Belichtungszeit möglichst klein sein, z.B. 1/2000s. Da die Lichtverhältnisse nicht optimal sind und nur noch der ISO-Wert übrig bleibt, wird dieser hochgeschraubt auf z.B. 3200. Beim ISO-Wert gilt immer, so tief wie möglich und so hoch wie nötig einstellen. Mit diesen Einstellungen sollte es gelingen, eine gute Nahaufnahme mit hoher Bildqualität zu erreichen.

Diese Techniken setzten wir im Modul 152 ein, um möglichst gute Fotos zu machen. Danach werden die Fotos (im .raw-Dateiformat) noch mit Adobe Lightroom bearbeitet, um Eigenschaften wie Lichtverhältnisse, Sättigung, Kontrast, Körnung etc. anzupassen. Zum Schluss werden die fertigen Bilder dann auf einer eigens kreierten Website hochgeladen.

Mittwoch, 1. März 2017

Februar 2017 - Assembler

Wie in jedem neuen Semester haben wir in der Schule im achten und letzten Semester einige neue Module begonnen. Das Modul "121 Steuerungsaufgaben bearbeiten" behandelt vor allem das Thema Assembler, daher werde ich in diesem Blogeintrag darüber schreiben.

Assembler

Zunächst muss man unterscheiden zwischen Assembler und Assemblersprache. Beim Assembler spricht man von einem Computerprogramm, das die Assemblersprache in eine für Maschinen verständliche Maschinensprache übersetzt. Die Assemblersprache wird von Entwicklern verwendet, um die Programme für Maschinen zu schreiben. In der Praxis wird oft von Assembler gesprochen, wenn eigentlich die Assemblersprache gemeint ist.
Assembler bzw. die Assemblersprache wird dazu benötigt, um direkt auf Mikroprozessorebene zu programmieren. Das heisst, es wird kein Betriebssystem, Compiler, Interpreter etc. benötigt (was bei höheren Programmiersprachen der Fall ist), um Befehle ausführen zu können. Beispielsweise werden Ampeln mit Mikroprozessoren und folglich auch mit Assembler betrieben. 
Die Assemblersprache unterscheidet sich von der Maschinensprache insofern, als die Befehle hier immer noch in einer verständlichen Textform und nicht etwa in einer binären Schreibweise dargestellt werden. Die Assemblersprache gilt als Programmiersprache der zweiten Generation, da sie Nachfolger der direkten Programmierung mit Zahlencodes ist. Die Übersetzung mittels Assembler von Assemblersprache in Maschinensprache ist 1:1. Die Assemblersprache wird im Alltag häufig fälschlicherweise auch als Maschinensprache bezeichnet.

Programme, die mit einer Assemblersprache geschrieben sind, zeichnen sich dadurch aus, dass alle Verarbeitungsmöglichkeiten des Mikroprozessors genutzt werden. Weiterhin können solche Programme auch Hardwarekomponenten direkt ansteuern. Die Nutzung von Assemblersprachen ist heutzutage kaum mehr erforderlich, da auch die höheren Programmiersprachen sehr hardwarenah eingesetzt werden können. Je nach System macht es aber durchaus Sinn, Assembler zu verwenden. Beispielsweise bei zeitkritischen oder sehr hardwarenahen Programmen oder auch falls für die Programme nicht sehr viel Speicherplatz zur Verfügung steht. Ältere technische Anlagen werden noch häufig damit gesteuert.

Da jede Computerarchitektur unterschiedlich ist, hat auch jede Computerarchitektur ihre eigene Assemblersprache. Sie unterscheiden sich in Anzahl und Typ der Operationen.
Die grundlegenden Operationen sind bei allen alle Assemblersprachen gleich:
- Daten lesen & schreiben aus/in den Prozessor von/nach Hauptspeicher
- einfachste logische Operationen - AND/OR/NOT/SHIFT
- einfache Kontrolle des Programmflusses (durch Flags -> Sprünge, Overflow etc.)
- einfache arithmetische Operationen (Additionen, Vergleiche etc.)


Bei Steuerungsaufgaben wird nach dem EVA-Prinzip gearbeitet, Eingabe, Verarbeitung, Ausgabe.
Konkreter bedeutet dies, dass ein Sensor, für die Eingabe, ein Prozessor zur Verarbeitung, und ein Aktor für die Ausgabe verwendet werden. 

Ein einfaches Beispiel kann etwa der Taschenrechner sein. Als Eingabe wird der Tastendruck des Benutzers registriert. Der Prozessor verarbeitet diese Eingabe, indem er den entsprechenden Befehl ausführt. Zum Beispiel "Speichere die Zahl 2 und zeige sie an". Anschliessend wird der Prozessor dem Bildschirm eine 2 zurückgeben, die er anzeigen soll.






Programmierung mit Assembler

Der wohl am häufigsten genutzte Befehl in der Assemblersprache ist der mov-Befehl. Er wird verwende um den Wert des einen Operanden in den anderen Operanden zu kopieren. Der mov-Befehl sieht folgendermassen aus:


mov op1, op2

"op1" und "op2" stellen die Operanden dar und haben je nach System einen anderen Namen. Bei diesem Befehl wird der erste Operand auch als Zieloperand bezeichnet und der zweite als Quelloperand. Da der Wert kopiert wird, müssen auch beide Operanden derselben Grösse entsprechen. Hat der Quelloperand 8 Bit, so muss auch der Zieloperand 8 Bit gross sein.

Ein weiterer oft benutzter Befehl ist der xchg-Befehl. Dieser wird gebraucht, um die Werte der angegebenen Operanden zu vertauschen. Die Syntax ist gleich dem vorherigen Befehlt und sieht folgendermassen aus:

xchg op1, op2


Um einen besseren Einblick darüber zu erhalten, was es alles für Register, Flags, Pointer etc. gibt, ist nachfolgend ein Teil des Debuggers vom Assembler abgebildet.



Hier sind alle Register etc., die ein Assemblersystem verwendet, aufgelistet. Die erste Zeile stellt das Daten- sowie Stackregister dar. Je nach Aufruf unterscheidet sich der Inhalt der Register. Ausnahme ist das BX-Register, welches immer auf null gestellt ist. Das CX-Register gibt die Grösse des Programmcodes an.
Die nächste Zeile zeigt die Segmentregister an. Diese beinhalten Daten wie Programmcode, konstante Daten etc. Das IP-Segment (Instruction Pointer) zeigt an, an welcher Stelle sich das Programm im Code befindet. Dahinter kommen verschiedene Flags, Overflow Flag, Sign Flag, Interrupt Flag, Zero Flag etc.
In der letzten Zeile sieht man links zuerst die Adresse des Befehls und danach, welcher Befehl als nächstes folgt.
In diesem Beispiel sieht man, dass als Befehl "mov AX, 5522" folgen wird. Das Ergebnis sieht dann folgendermassen aus:



Man kann nun sehen, dass das Register AX,  oben links, nun den Wert 5522 angenommen hat. Man kann mit der Assemblersprache natürlich viel umfangreichere Programme erstellen, z.B. auch ein klassisches "Hello World". Dazu werden natürlich entsprechende Ausgabegeräte gebraucht (z.B. Monitor).

Freitag, 27. Januar 2017

Januar 2017 - Android Studio

Da ich für meine IPA (individuelle praktische Arbeit) eine Android-App entwickeln werde, schreibe ich diesen Monat in meinem Blogeintrag über die Entwicklungsumgebung, welche ich verwenden werde, und die dazugehörigen Programmiersprachen.

Android Studio

Allgemeines:

Android Studio ist die kostenlose, offizielle Entwicklungsumgebung für Android-Apps. Sie wurde von Google entwickelt und ist im Jahr 2013 erschienen. Es ersetzt unter Anderem das Android Developement Tool (ADT), welches für Eclipse als Plugin verfügbar war.
Die Systemvoraussetzungen sind recht hoch, da vor allem der integrierte Android-Emulator sehr viele Ressourcen beansprucht.

Systemvoraussetzungen:

Arbeitsspeicher:                mind. 2GB, empfohlen 8GB
Speicherkapazität:            mind. 2GB, empfohlen 4GB
Bildschirmauflösung:         mind. 1280 * 800 Pixel

Empfohlen wird ein 64 Bit Betriebssystem


Entwicklung:

Startet man die Anwendung, sieht es folgendermassen aus:


(Klicken zum Vergrössern)

Hier ist bereits ein neues Projekt, ein klassisches "Hello World", angelegt.
Auf der linken Seite ist der Projektmappen-Explorer zu sehen. Hier sind alle notwendigen Dateien vom Projekt in einer vordefinierten Ordnerstruktur abgelegt. Rechts davon kann man den Inhalt der geöffneten Datei sehen.
Die geöffnete Datei ist eine sogenannte Activity. Activities sind Java-Dateien. Hier steckt die eigentliche Logik der App drin. Meist ist eine Activity genau eine Java-Klasse, die Methoden, den Konstruktor, Variablen etc. beinhaltet. Java-Dateien befinden sich in der Ordnerstruktur unter "app/java". Von einer Activity aus kann auf die Elemente auf dem Bildschirm wie Textfelder, Eingabefelder, Buttons usw. zugegriffen werden. Startet man die Applikation mit dem mitgelieferten Android-Emulator, wird folgende Seite präsentiert:

(Klicken zum Vergrössern)

Man kann sehen, dass sich bereits ein Textfeld mit dem Text "Hello World!" auf einer ersten Seite befindet. Diese Seiten, auf denen Steuerelemente platziert sind, werden "Layouts" genannt. Layouts befinden sich in der Ordnerstruktur unter "app/res/layout". Der "res"-Ordner (Resources) ist neben dem Java-Ordner einer der wichtigsten. Hier sind vordefinierte Inhalte von Variablen (Strings, Arrays, Int,...), Bilder, Farb- und Styledefinitionen sowie andere binäre Dateien abgelegt.
Zurück zum Layout. Das Layout, wie auch die meisten anderen Dateien im "res"-Ordner, ist eine XML-Datei und sieht wie folgt aus:



(Klicken zum Vergrössern)



Die Ansicht kann zwischen Texteditor und Designer mit den Schaltflächen unten links geändert werden. Es wird häufiger der Texteditor zum Bearbeiten verwendet, da man so genauer angeben kann, wie es aussehen soll. Zur besseren Ansicht ist hier nochmal der Ausschnitt aus dem Texteditor:

(Klicken zum Vergrössern)

Zuoberst wird die XML-Version definiert. Direkt darunter fängt das eigentliche Layout an. Hier wird ein RelativeLayout definiert. Es gibt diverse Layouts,, die verwendet werden können, wie LinearLayout, TableLayout, GridLayout etc. Die Layouts definieren, wie die Elemente, die darin enthalten sind, dargestellt werden. Also entweder vertikal, horizontal, in einer Tabelle oder sonst wie.
Im RelativeLayout-Element befindet sich ein View-Element. Das View-Element hier ist eine TextView. TextViews sind ähnlich wie Labels in anderen Entwicklungsumgebungen wie z.B. VisualStudio. Der TextView werden hier drei Eigenschaften mitgegeben: Die Breite, die Höhe und der Text. Die Breite und die Höhe sind als "wrap_content" definiert. Das bedeutet, dass die View genau so breit und hoch ist, wie der Text darin Platz benötigt. Die dritte Eigenschaft, "text", wird hier direkt zugewiesen, damit die View "Hello World!" anzeigen kann. Eigentlich werden solche Texte in einer eigenen Datei (strings.xml) im res-Ordner gespeichert und dann von der TextView ein Verweis darauf gemacht. Dieser könnte dann zum Beispiel so aussehen: "android:text="@string/hello_world_text"". Das @-Zeichen sagt aus, dass sich das Gesuchte in der strings.xml-Datei befindet.
Die String Datei würde folglich so aussehen:




Der erste String ist immer automatisch der Name der Anwendung, hier "Demo Application". Der zweite ist, nun neu definiert, der Text "Hello World!".
Man könnte natürlich die Texte direkt bei den jeweiligen Views definieren, jedoch erleichtert der Umweg über die strings.xml-Datei die Umsetzung einer Applikation, die mehrsprachig sein soll.

Alle Eigenschaften eines Elements haben folgende Konvention: "android:*****", die Sterne ersetzen die jeweilige Eigenschaft. Im Relative Layout kann man noch eine der wichtigeren Eigenschaften sehen, die Id. Die Id wird immer wie folgt definiert: "android:id="@+id/*****"", die Sterne stehen hier für einen beliebigen Text, der später dann die Id wird. Allen Elementen kann optional eine Id gegeben werden, diese wird benötigt, um dann später von der Activity darauf zuzugreifen. Da die Id aber so als Eigenschaft nicht wirklich existiert, wird nach dem @-Zeichen noch ein "+" geschrieben.


Zusammenfassend: Es ist eine feste Ordnerstruktur vorgegeben, die die verschiedenen Dateien an den richtigen Orten hält. Activities sind Java-Klassen, die die Logik beinhalten und auf Elemente des Layouts zugreifen können. Layouts sind XML-Dateien und definieren, wie die Bildschirmseiten am Ende aussehen sollen. In ihnen befinden sich verschiedene Elemente wie Textfelder, Labels und Buttons. Variablen sollten im "res"-Ordner in dafür vorbestimmten XML-Dateien definiert werden, um von Layouts oder Activities darauf zugreifen zu können. (Gilt vor allem für Konstanten und Variablen, die nicht direkt in der Programmlogik verwendet werden.)


Eine essentielle Datei, die die Applikation lauffähig macht, ist eine weitere XML-Datei, das AndroidManifest. Sie befindet sich in "app/manifest". Hier sind die Eigenschaften der ganzen Applikation hinterlegt. Diese Datei muss auch bearbeitet werden wenn neue Activities hinzukommen. Diese müssen dann in der AndroidManifest.xml-Datei erfasst werden. Weiterhin ist hier definiert, welches die Startactivity ist. Standardmässig sieht eine AndroidManifest-Datei so aus:



Man kann sehen, dass hier Dinge wie das Icon, das App-Theme, der Name usw. definiert sind.


Zugriff auf res-Dateien

Da im AndroidManifest festgelegt ist, welche Activity bei Anwendungsstart gestartet werden soll, muss folglich die Activity eine Verbindung zum Layout herstellen (und nicht etwa umgekehrt).
Dies geschieht in der überschriebenen "onCreate"-Methode der Klasse:




Die erste Zeile der onCreate-Methode ruft die gleichnamige Methode der abgeleiteten Klasse "Activity" auf und übergibt dieselben Parameter, wie diese Methode bekommen hat. Dieses Szenario findet bei fast jeder überschriebenen Methode statt.
Die zweite Zeile ist schon wesentlich interessanter. Hier wird mit der Methode "setContentView" das Layout übergeben. Man erkennt hier im Übergabe-Parameter, wie genau auf Daten im "res"-Ordner zugegriffen wird. Mit dem vorangehenden "R" wird angegeben, dass es sich um eine Ressource handelt. "layout" ist der betreffende Ordners in dem die Datei gespeichert ist. Zuletzt folgt noch der Name der Datei.

Montag, 5. Dezember 2016

November 2016 - Zwei-Faktor-Authentifizierung (SMS-Authentifizierung)



2FA - Allgemein

Die Zwei-Faktor-Authentifizierung, kurz 2FA, wird verwendet, um einen Nutzer mittels Kombination zweier unabhängiger und in ihrer Art unterschiedlicher Komponenten zu identifizieren. Die beiden Komponenten bestehen meist aus etwas, das der Benutzer weiss, etwas, das er besitzt oder etwas, das zu ihm gehört.
Bereits die Kombination aus Bankkarte und PIN ist als 2FA anzusehen, da der Kunde den PIN weiss und die Bankkarte besitzt. Bei einem Login auf einer Website o.ä. ist nicht von 2FA zu sprechen, weil Benutzername und Passwort beides Dinge sind, die der Benutzer wissen muss, beides sind Komponenten die einer Art angehören.
Die Zwei-Faktor-Authentifizierung ist nur dann erfolgreich, wenn beide Faktoren eingesetzt werden und korrekt sind. Fehlt eine Komponente oder ist eine falsch, lässt sich der Benutzer nicht "zweifelsfrei identifizieren" und bekommt folglich auch keinen Zugriff zum System.

Beispiele für Faktoren:

- etwas, das der Benutzer besitzt: Hardware-Token, Bankkarte, Schlüssel, Smartphone, etc.

- etwas, das der Benutzer weiss: Benutzername, Kennwort, Einmalkennwort, PIN, etc.

- etwas, das zum Benutzer untrennbar gehört: Fingerabdruck, Iris, Stimme etc.


Am häufigsten werden die beiden Faktoren durch etwas, das der Benutzer besitzt (Token) und etwas, das er weiss (Kennwort) zusammengesetzt. Bei diesen Komponenten ist es aber zwingend notwendig, dass der Benutzer den jeweiligen Token immer mitführt. Wird er verloren, gestohlen oder der Benutzer hat ihn nicht dabei, ist eine Authentifizierung nicht möglich. Hinzu kommen Erstanschaffungs- sowie Ersatzbeschaffungskosten. Das sind die Nachteile dieser Methode.

SMS-Authentifizierung

Eine Gegenmassnahme, um diesen Nachteilen ein Stück weit aus dem Weg zu gehen, ist die tokenlose Zwei-Faktor-Authentifizierung, die als Alternative geschaffen wurde. Die Rede ist hier von der SMS-Authentifizierung. Hier wird, wie aus dem Namen hervorgeht, zur Authentifizierung vom Server eine SMS an den Benutzer verschickt. Das bedeutet, das Smartphone oder Mobiltelefon des Benutzers dient als Hardware-Token, also etwas, das der Benutzer besitzt.
Wenn der Benutzer sich also an einem Server anmelden will, gibt er zunächst seine Zugangsdaten, die nur er kennt, meist bestehend aus Benutzername und Passwort, ein (erster Faktor). Der Server generiert dann einen Code und schickt diesen per SMS (zweiter Faktor) an den Benutzer. Durch korrekte Eingabe dieses Codes kann sich der Benutzer am Server zweifelsfrei identifizieren lassen.
Der Vorteil dieser Methode ist, dass kein zusätzlicher Hardware-Token mitgeführt werden muss, da die meisten Leute das Smartphone sowieso immer dabei haben. Zwar kann auch ein Smartphone gestohlen oder verloren gehen, jedoch ist die Wahrscheinlichkeit hier etwas geringer. Zudem kann das Smartphone bei vielen Diensten auch gebraucht werden, um sich z.B. über einen Browser anzumelden, folglich muss kein zusätzlicher PC verwendet werden. Weiterhin ist die Sicherheit auch dadurch erhöht, dass Smartphones meist mit PINs gesperrt sind und dass professionelle Systeme dafür sorgen, dass bereits verwendete Codes nicht beim Empfänger verbleiben, sondern gelöscht werden.

Praxis

Es existieren einige Unternehmen, die einem den allgemeinen SMS-Versand abnehmen möchten. Daneben werben sie natürlich auch für die Möglichkeit, den Kunden eine 2FA via SMS zu bieten.
In der Schweiz agierende Unternehmen sind zum Beispiel folgende:

- aspsms.ch
- websms.ch

Von letzerem Anbieter stammt auch die folgende Grafik, welche etwas besser veranschaulicht, wie die SMS-Authentifizierung praktisch abläuft.


(Klicken zum vergrössern)


Für das E-Banking setzen die Banken schon lange auf die 2FA per SMS Methode.
Vor allem bei sensiblen Daten werden solche 2FA-Methoden eingesetzt, daher kommt es immer häufiger vor, dass Unternehmen die 2FA einsetzten.


Umsetzung

Die meisten Anwendungen, die die 2FA benutzen, sind Web-Anwendungen. Für Web-Anwendungen wird immer öfter das ASP.NET Framework, welches von Microsoft entwickelt wurde, verwendet. Daher findet man im Internet am häufigsten Beispiele in ASP.NET-Anwendungen mit dem MVC-Modell (Model, View, Control).  
ASP.NET-Anwendungen können, da es von Microsoft entwickelt wurde, mit C# programmiert werden. 
Eine andere Möglichkeit neben Web-Anwendungen sind Desktop-Applikation z.B. mit dem .NET Framework entwickelt. Diese müssen aber zusätzlich auch eine spezielle API zum Versenden von SMS einbinden.
Bei beiden Möglichkeiten wird ein SMS-Gateway (wie oben in der Grafik ersichtlich) benötigt.
Dieses wird dann meist bei einem Anbieter (siehe Obengenannte) bezogen, der teilweise auch noch die benötigten APIs zur Verfügung stellt.


Freitag, 28. Oktober 2016

Oktober 2016 - Xamarin

In der  Schule mussten wir in Teams verschiedene Themen bearbeiten, um dann später darüber eine Präsentation halten zu können. Unser Team bekam das Thema "Xamarin" zugeteilt, was vergleichsweise ein recht schwieriges Thema ist.


Was ist Xamarin?

Xamarin ist allen voran eine Software Firma aus San Francisco. Gegründet wurde die Firma im Jahre 2011 von den Mono*-Entwicklern. Anfangs 2016 wurde die Firma allerdings von Microsoft übernommen.

Spricht man von Xamarin, meint man meistens die gleichnamige Software. Es gibt mehrere Produkte, die den Namen Xamarin beinhalten, später mehr dazu.
Grundsätzlich dient Xamarin dazu, mit der Programmiersprache C# oder anderen .NET-Sprachen iOS-, Android- und Windows-Apps zu entwickeln.
Der grosse Vorteil von Xamarin ist, dass für alle drei Plattformen nahezu derselbe Quellcode verwendet werden kann.

* Mono ist eine opensource Implementierung von Microsofts .NET Framework, mit der die Entwicklung von plattformunabhängiger Software ermöglicht wird.

Produkte

Xamarin ist in folgenden Produkten verfügbar:

Xamarin Platform

Bis zu der Version 3 war die Kernkomponente "Xamarin Platform" auch als "klassisches Xamarin" bezeichnet. In diesem Produkt sind unter anderem die beiden Komponenten "Xamarin.iOS" und "Xamarin.Android" enthalten. Mit diesen wird es möglich, native Apps für iOS und Android in C# zu entwickeln, für Windows selbstverständlich auch.
Mit "Xamarin Platform" ist es nur möglich, überall denselben Quellcode zu benutzen. Das heisst, die grafische Benutzeroberfläche muss nach wie vor für jede Plattform unabhängig designt werden, weil nicht jedes Betriebssystem gleich aussieht und es daher auch unterschiedliche Controls sowie Navigationsparadigmen gibt.
Hauptvorteil von "Xamarin Platform" ist also nur der Code in einheitlicher Programmiersprache.


Xamarin (klassisch)
Gemeinsamer Quellcode (C#)
Getrenntes GUI



Xamarin.Forms

Seit der dritten Xamarin Version ist "Xamarin.Forms" integriert. Mit dieser Komponente wurde nun auch eine Lösung für plattformunabhängige Benutzeroberflächen eingeführt.
Das UI wird zunächst plattformunabhängig in C# definiert und anschliessend je nach Plattform in die entsprechenden Controls übersetzt. 
Durch die Abstraktion steht natürlich nur der grösste gemeinsame Nenner aller Plattformen zur Verfügung. Steuerelemente, die plattformspezifisch sind, können daher nicht verwendet werden.
Neben den Standardcontrols wie Buttons, Textfelder etc. gibt es auch noch komplexere Elemente wie etwa DatePickers, ListViews usw. Die Deklaration der Oberfläche geschieht entweder im Code selber oder erfolgt in XAML (eine von Microsoft entwickelte allgemeine Beschreibungssprache für die Oberflächengestaltung von Anwendungen).
Die Namensgebung ist in Xamarin etwas verwirrend. Man spricht von vier verschiedenen Kategorien:

Pages: Die oberste Hierarchie in der Gestaltung. Die eigentlichen App-Seiten, hier befinden sich alle anderen Elemente.
Views: Standardcontrols - Buttons, Textfelder etc.
Layouts: Containerelemente - GridLayout, StackLayout usw. 
Cells: Spezielle Elemente zum Beschreiben, wie Elemente (z.B. in einer Tabelle) gezeichnet werden.



Xamarin.Forms:
Gemeinsamer Quellcode (C#)
Gemeinsames GUI (C#)


In der folgenden Grafik ist zu sehen, wie unterschiedlich die einzelnen Benutzeroberflächen auf den verschiedenen Plattformen schlussendlich aussehen:



von links: iOS, Android & Windows Phone




Xamarin für Visual Studio

Um Applikationen mit Xamarin entwickeln zu können, gibt es eine Erweiterung für Visual Studio.
Man kann so zwar in der gewohnten IDE entwickeln, jedoch gibt es bei Xamarin.Forms noch keinen richtigen Designer, das heisst man muss das GUI mit XAML beschreiben.
Für das klassische Xamarin gibt es bereits eine Art Designer, der aber nicht so umfangreich ist, wie der von Visual Studio gewohnte Designer.

Xamarin Studio

Xamarin Studio ist eine eigenständige IDE für die mobile-App-Entwicklung. Es enthält einen Debugger, einen C#-Compiler, und Werkzeuge für die Programmierung grafischer Benutzeroberflächen für iOS und Android.
Xamarin Studio war früher für beide, nun nur noch für Mac-Geräte verfügbar, da Windows-Benutzer die Visual Studio Version benutzen sollen.

Xamarin Test Cloud

Ein Problem, das bei der Entwicklung von mobilen Apps fast zwangsläufig vorkommt, ist das Testen auf den verschiedenen Endgeräten. Insbesondere bei plattformunabhängigen Apps ergibt sich in Kombination mit den verschiedenen Geräten und den verschiedenen Plattformen (inklusive der verschiedenen Versionen) eine ziemlich grosse Anzahl an Testfällen. Mit den integrierten Emulatoren in Xamarin werden zwar schon einige Geräte abgedeckt, aber es ist hier immer noch von einer sehr kleinen Menge die Rede. Und hier kommt die "Xamarin Test Cloud" ins Spiel.
Die Test Cloud ermöglicht, automatisierte UI-Tests zu schreiben, die sich dann auf physikalischen, von der Cloud zur Verfügung gestellten Testgeräten ausführen lassen. Die "Xamarin Test Cloud" bietet über 1'800 solcher Testgeräte an.



Fazit

Da wir in der Schule nur wenige Lektionen in unserem Team Zeit hatten, konnten wir leider nicht so viele praktische Erfahrung mit der Software sammeln. Dazu kommt, dass es vergleichsweise ein recht grosser Aufwand ist, bis Xamarin vollständig installiert ist und problemlos läuft.
Grundsätzlich finde ich die Idee von Xamarin sehr gut, da so praktisch jeder Windows-Entwickler für alle wichtigen Plattformen mit relativ wenig Aufwand entwickeln kann.





Dienstag, 27. September 2016

September 2016 - Projektmethode Scrum

Im 7. Semester bearbeiten wir in der Schule das Modul "223 - Applikationen objektorientiert realisieren". Wir lernen dort nicht nur, wie man eine Anwendung auf Basis von C# schreibt, sondern auch, wie man mit dem Vorgehensmodell Scrum arbeitet.


Scrum ist eine Projektmethode oder auch Vorgehensmodell genannt zur agilen Softwareentwicklung. Agile Softwareentwicklung bedeutet, dass die Software flexibel ist, dass die Funktionstüchtigkeit sowie die Zusammenarbeit mit dem Kunden im Vordergrund stehen, Dokumentationen und Befolgung des ursprünglichen Plans aber zugunsten funktionierender Software eher in den Hintergrund rücken. Aus diesem Grund besteht Scrum nur aus wenigen Regeln. Diese definieren die Begriffe Aktivitäten, Artefakte und Rollen, später mehr dazu.

Der Ansatz von Scrum beruht darauf, dass viele Entwicklungsprojekte viel zu komplex sind, um schon im Voraus in einem vollumfänglichen Plan definiert zu werden. Ein wesentlicher Teil der Anforderungen und der Lösungsansätze ist zu Beginn meist unklar. Solche Unklarheiten lassen sich beseitigen, indem Zwischenergebnisse erzeugt werden. Anhand dieser lassen sich die fehlenden Anforderungen einfacher und effizienter finden und umsetzen.
Ein langfristiger Plan existiert dennoch und nennt sich Product Backlog. Dieser wird permanent verfeinert und verbessert. Der Detailplan wird Sprint Backlog genannt. Für jeden Zyklus (Sprint) wird ein neuer erstellt, damit die Projektplanung auf das Wesentliche konzentriert wird.
Scrum ist eine empirische Methode, das heisst es sind folgende drei Grundsätze zu beachten: Transparenz, Überprüfung und Anpassung. Transparenz bedeutet, dass alle Fortschritte und Hindernisse regelmässig für alle sichtbar gemacht werden. Die Überprüfung definiert, dass in regelmässigen Abständen Produktfunktionalitäten geliefert und das Produkt wie auch das Vorgehen beurteilt werden. Die Anpassung hält offen, dass Anforderungen an das Produkt, Pläne und Vorgehen nicht ein für alle Mal festgelegt, sondern kontinuierlich detailliert und angepasst werden können. Durch ein solches Vorgehen wird die Komplexität der Aufgabe natürlich nicht reduziert, aber sie wird in kleinere und weniger komplexe Bestandteile zerlegt, in die Inkremente.
Das Hauptziel von Scrum besteht darin, eine schnelle und kostengünstige Entwicklung von hochwertigen Produkten zu ermöglichen. Dabei werden keine Lasten- oder Pflichtenhefter geführt. Anforderungen werden stattdessen in Form von Eigenschaften aus Anwendersicht formuliert. Die Liste der Anforderungen ergibt das Product Backlog. Diese Anforderungen werden Stück für Stück in zwei bis vier Wochen langen Intervallen (Sprints) umgesetzt.
Scrum ist für Teams einer geringen Grösse bis etwa maximal zehn Personen geeignet. Grössere Entwicklungsprojekte benötigen ein weitergehendes Vorgehen, das die Koordination mehrerer Teams organisieren kann.


Rollen

In Scrum sind drei verschiedene Rollen definiert: Der Product Owner, das Entwicklungsteam und der Scrum Master. Alle Beteiligten dieser Rollen ergeben zusammen das Scrum Team. Neben diesen Rollen, die für die Software zuständig sind, gibt es noch die Stakeholder. Diese sind Beteiligte wie z.B. der Auftraggeber und können den Fortschritt und die Zwischenergebnisse einsehen, da diese transparent sind. Stakeholder dürfen bei den meisten Aktivitäten zuhören.

Der Product Owner ist verantwortlich für die Eigenschaften und den wirtschaftlichen Erfolg des Produkts. Er legt fest, welche Eigenschaften das Produkt am Ende eines Sprints haben muss. Er allein entscheidet über das Produkt, seine Eigenschaften und die Reihenfolge der Implementierung und muss somit die Balance zwischen Eigenschaften, Kosten und Auslieferungszeitpunkt im Blick behalten.
Der Product Owner hält regelmässig Rücksprache mit den Stakeholdern, um auf deren Wünsche eingehen zu können.

Das Entwicklungsteam ist für die Lieferung der Produktfunktionalitäten (Eigenschaften) in der vom Product Owner gewünschten Reihenfolge zuständig. Es muss die vereinbarten Qualitätsstandards einhalten, ist aber frei in der Umsetzung der gewünschten Funktionalitäten. Das Entwicklungsteam sollte in der Lage sein, die Ziele der jeweiligen Sprints möglichst ohne äussere Abhängigkeiten zu erreichen. Deshalb ist es von grossem Vorteil, wenn das Team interdisziplinär besetzt ist. Das Entwicklungsteam besteht aus drei bis neun Mitglieder. Es muss gross genug sein, um alle benötigten Kompetenzen zu vereinigen. Je grösser das Team, desto grösser der Koordinierungsaufwand.

Der Scrum Master ist dafür verantwortlich, dass das Vorgehensmodell Scrum gelingt. Er führt die Regeln von Scrum ein und überprüft deren Einhaltung.  Er gehört zwar meist nicht dem Entwicklungsteam an, arbeitet aber mit diesem zusammen. Er leitet die Treffen und muss sich um die Behebung von Störungen und Hindernissen kümmern. Hindernisse können von mangelnder Infrastruktur über schlechte Kommunikation und Zusammenarbeit bis hin zu persönlichen Konflikten im Entwicklungsteam reichen. Der Scrum Master ist eine dienende Führungskraft, der keine Arbeitsanweisungen an einzelne Teammitglieder vergibt, sondern für den Prozess und die Beseitigung von Hindernissen verantwortlich ist.

Folgende Personen sind als Stakeholder definiert:

- Kunde/Auftraggeber
- Anwender
- Management


Artefakte

In Scrum existieren drei verschiedene Artefakte:

Product Backlog:
Das Product Backlog ist eine Auflistung der Anforderungen an das Produkt. Es ist dynamisch und wird permanent weiterentwickelt. Verantwortlich für das Product Backlog ist der Product Owner. Er muss das Product Backlog pflegen und sich die Priorisierung der Eigenschaften vornehmen.
Das Product Backlog ist nicht vollständig, da zu Beginn eines Projekts meist nicht alle Anforderungen bekannt sind. Die Priorisierung erfolgt unter Gesichtspunkten wie wirtschaftlicher Nutzen, Risiko und Notwendigkeit.
Anforderungen im Product Backlog werden fachlich und anwenderorientiert definiert. Die Formulierung der Produkteigenschaften wird meist in User Stories umgesetzt und diese werden dann Product Backlog Item (PBI) genannt.

Sprint Backlog:
Im Sprint Backlog sind die zu erledigenden Aufgaben eines Sprints aufgeführt. Es umfasst einige der PBI's aus dem Product Backlog und unterteilt diese in Tasks.
Um es für alle Teammitglieder sichtbar zu machen, wird meist ein Taskboard genutzt.

Product Increment
Das Produktinkrement ist das Ergebnis aller PBI's, die während des aktuellen und allen vorangegangenen Sprints fertiggestellt wurden. Am Ende jedes Sprints muss sich das neue Produktinkrement in einem nutzbaren Zustand befinden.


Sprint

Der Sprint ist ein Arbeitsabschnitt, bei dem ein Inkrement einer Produktanforderung implementiert wird. Die Dauer eines Sprints umfasst ein bis vier Wochen. Alle Sprints haben idealerweise die gleiche Länge, um so dem Projekt einen Takt zu geben. Der Sprint ist zu Ende, wenn die Zeit um ist und wird nie verlängert. Des Weiteren sind keine Änderungen während eines Sprints erlaubt, die das Sprintziel beeinflussen. Der Sprint kann jedoch jederzeit durch den Product-Owner abgebrochen werden.

Aktivitäten 

Ein Sprint setzt sich aus folgenden Aktivitäten zusammen: 

Sprint Planning:
Am Anfang des Sprints wird definiert, was entwickelt wird und wie die Arbeit erledigt wird. Die Sprint Planung dauert maximal zwei Stunden pro Sprint-Woche.

Daily Scrum:
Zu Beginn jedes Arbeitstages trifft sich bei einem maximal 15-minütigen Daily Scrum das Entwicklerteam. Zweck des Daily Scrums ist der Informationsaustausch, um einen Überblick des aktuellen Stands der Arbeiten zu bekommen und dient nicht zur Lösung von Problemen.
Der Scrum Master und der Product Owner nehmen häufig an der Sitzung teil, sind jedoch nicht aktiv beteiligt.

Sprint-Review:
Am Ende eines Sprints steht das Sprint-Review. Hier wird vom Scrum Team das Inkrement überprüft und das Product Backlog bei Bedarf angepasst. Das Ergebnis wird vom Entwicklungsteam präsentiert und es wird geprüft, ob das Ziel erreicht wurde. Das Scrum Team bespricht mit den Stakeholdern die Ergebnisse und was es als Nächstes zu tun gibt.

Sprint-Retroperspektive:
Auch ein Teil der nach Beendigung eines Sprints ausgeführt wird. Hierbei überprüft das Scrum Team seine bisherige Arbeitsweise, um sie in Zukunft effizienter machen zu können. Der Scrum Master unterstützt das Team dabei, gute Praktiken und Verbesserungen zu finden, die im nächsten Sprint umgesetzt werden sollen.

Product Backlog Refinement (Backlog Grooming):
Das Product Backlog Refinement ist ein fortlaufender Prozess, bei dem der Product Owner zusammen mit dem Entwicklungsteam das Product Backlog weiterentwickelt.
Oft gibt es auch solche Treffen mit ausgewählten Stakeholdern, um die Anforderungen im Product Backlog besser beschreiben zu können.

Donnerstag, 8. September 2016

August 2016 - Raspberry Pi

Allgemeines

Raspberry Pi -Logo
Raspberry Pi ist der Name einer Serie von Einplatinencomputern im Kreditkartenformat. Ein Einplatinencomputer (manchmal auch Entwicklerboard genannt) ist im Grundsatz ein meist sehr kleines Mainboard mit allen benötigten Hardwareteilen direkt daraufgelötet, um einen vollwertigen PC darzustellen.
Entwickelt wurde der Computer von der britischen "Raspberry Pi Foundation". Der im Vergleich zu normalen Personal Computern sehr einfach aufgebaute Rechner wurde mit dem Ziel entwickelt, jungen Menschen Programmier- und Hardwarekenntnisse auf eine einfachere Weise näher zu bringen. Daher wurde auch der Verkaufspreis niedrig gehalten, der je nach Modell um die 40 - 50 CHF beträgt.

Den Raspberry Pi gibt es mittlerweile in der 3. regulären Version, daneben gibt es noch andere Varianten, welche meist performantere oder aber nur abgespecktere Versionen sind.
Es existiert ein grosses Angebot an verschiedenem Zubehör sowie auch an verfügbarer Software. Das reicht von Kameramodulen über verschiedene Sensoren bis hin zu kapazitiven Multi-Touch-Touchscreens. Aufgrund dieses vielfältigen Angebots gibt es viele verschiedene Einsatzmöglichkeiten für den Einplatinencomputer. Häufig wird er als Mediacenter genutzt, da seit der ersten Version eine HDMI-Schnittstelle mit einer Videoausgabe von 1080p inbegriffen ist. Als Betriebssystem kommt meist eine Linux-Distribution teils mit und teils ohne grafische Oberfläche - je nach Verwendung - zum Einsatz.
Als internes Boot-Medium wird eine wechselbare (Micro)SD-Karte verwendet. Direkte Schnittstellen für Festplattenlaufwerke sind zwar keine vorhanden es zwar keine, jedoch gibt es auch seit der ersten Version mindestens einen USB-Anschluss, worüber problemlos Speichermedien angeschlossen werden können.




Hardware

Raspberry Pi 3

Den Raspberry Pi gibt es in verschiedenen Versionen, die hier aufgeführt sind:

-Compute Module
-Zero
-Modell A
-Modell A+
-Modell B
-Modell B+
- Raspberry Pi 2 Modell B
- Raspberry Pi 3 Modell B



Die Hardware des Raspberry Pi's wurde im Laufe der Zeit immer weiter verbessert. Angefangen mit dem Prozessor: In den frühen Versionen des Computers war der Prozessor mit 700 MHz getaktet und hatte nur einen einzigen Kern. In der zweiten Version arbeitete er mit 900 MHz und vier Kernen. Aktuell, mit dem Raspberry Pi 3, ist ein 4-Kern 1,2 GHz Prozessor verbaut. Allen Versionen gleich ist die Architektur des Prozessors, hier wurde ARM verwendet.
Ähnlich wie der Prozessor wurde der Arbeitsspeicher immer besser. Anfänglich hatte der Computer 256 MB DDR2-SDRAM verbaut. Bei der neusten Version ist es bereits 1 GB desselben Speichers.
Wie schon erwähnt, wird als nichtflüchtiger Speicher eine SD-Karte verwendet. Bei früheren Versionen wurde ein normaler SD-Kartenleser verbaut, heute sind aber oftmals (nur noch) MicroSD-Kartenleser verfügbar.
Um externe Hardware anzuschliessen, stellt der Raspberry Pi herkömmliche USB-2.0-Schnittstellen zur Verfügung. Seit der zweiten Version sind es zwei und ab der dritten Version vier nicht unabhängige USB-Schnittstellen.
In den früheren Versionen des Computers hatte er noch keine Netzwerkanschlüsse verbaut, erst seit dem "Modell B" der ersten Version ist ein LAN-Anschluss dazugekommen. Seit der dritten Version sind zudem eine 2,4GHz-WLAN und eine Bluetooth 4.1 Schnittstelle verbaut.
Bereits seit den Anfängen des Raspberrys ist eine GPIO-Schnittstelle verbaut. GPIO-Schnittstellen sind frei programmierbare Ein- und Ausgabeanschlüsse. Viele der Zubehörteile werden über diese Schnittstelle mit dem Computer verbunden.
Das Audiosignal wird grundsätzlich über den HDMI-Port ausgegeben. Die regulären Versionen besitzen aber auch einen 3,5mm-Klinkenanschluss.



Betriebssystem


Das Betriebssystem des Raspberry Pi befindet sich auf der (Micro)SD-Karte. Empfohlen wird das auf Debian-Linux basierende Raspbian. Diese Distribution wurde speziell für das Raspberry Pi entwickelt. Die Raspberry Pi Foundation erstellt immer auf Basis der neusten Version dieser Distribution ein eigenes Image mit passender Firmware für die Raspberry-Pi-Modelle.
Verschiedene weitere Linux Distributionen wie Ubuntu, Kali Linux, CentOS etc., die auf ARM-Prozessoren lauffähig sind, können auf den Rechner installiert werden. Auch befindet sich die Portierung von Android im Gange. Eine lauffähige Beta-Version ist bereits verfügbar. 

Windows ist grundsätzlich nicht für das Raspberry Pi verfügbar, da die einzige auf ARM-basierte Version (Windows 8 RT) mindestens 1 GB Arbeitsspeicher benötigt. Zwar hätte das neuste Raspberry nun genügend Arbeitsspeicher, da Microsoft aber schon vor dessen Entwicklung eine Windows 10 Variante für das Raspberry ankündigte, wäre eine Windows 8 RT Version nicht mehr sehr sinnvoll gewesen. Zu beachten gilt, dass die Windows Version für das Raspberry Pi, Windows 10 IoT (Internet of  Things) momentan noch nicht über einen klassischen Desktop verfügt und auch die gewohnten Desktop-Anwendungen nicht kompatibel sein werden.


Die Installation des Betriebssystems gestaltet sich je nachdem sehr einfach. Entscheidet man sich für z.B. Raspbian, kann man praktischerweise auf einen Bootloader namens NOOBS zurückgreifen. Mit NOOBS kann das gewünschte Betriebssystem (falls verfügbar) ausgewählt und mit nur einem Kick installiert werden. Alternativ kann natürlich auch manuell ein Betriebssystem installiert werden, was aber umständlicher ist.



Desktop - Aktuelle Version von Raspbian (Jessie)



Übertaktung

Da der Raspberry Pi im Vergleich zu herkömmlichen PCs nicht sehr viel Leistung aufbringt, ist es manchmal von Vorteil, ihn zu übertakten. Da die Raspberry Pi Foundation eine Verringerung der Lebensdauer bei Übertaktung fürchtete, wurde der Prozessor zunächst mit einem speziellen Bit ausgestattet, welches bei Übertaktung unwiderruflich gesetzt wird. Sobald der Prozessor übertaktet wurde, erlosch die Garantie.
Nachdem jedoch ausführliche Tests gezeigt hatten, dass sich ein Übertakten bis zu 1GHz kaum auf die Lebensdauer auswirkt, wurde mit einem Treiber-Update die Möglichkeit erschaffen, sowohl Prozessor sowie Speicher und GPU ohne Garantieverlust zu übertakten. Frequenz und Spannung wird nur dann erhöht, wenn die Leistung gebraucht wird und die Temperatur unter 85°Celsius liegt.
Das vorhin genannte Bit wird immer noch gesetzt, sobald stärker als empfohlen übertaktet wird.