Let’s do Cloud Programming!
Teil 4: ScalaIDE

Die ScalaIDE ist ein abgeschlossenes studentisches Projekt der HTWG Konstanz am Bodensee und wurde als Teamprojekt im Studiengang “Software-Engineering” realisiert. Ich nehme die Plattform mit in diese Reihe auf, da hier auch die Idee des Cloud Programming aufgegriffen wurde und ich Teil des Entwicklerteams war. Um was es sich dabei handelt, wie und was die IDE kann, wird in diesem Artikel vorgestellt.

ScalaIDE: Editor

Die ScalaIDE verfolgt ebenfalls die Idee einer Web-IDE allerdings ausschließlich für die moderne Programmiersprache Scala. Die Plattform ist mit der Programmiersprache Scala, dem Webframework Play 2.0 und Akka entwickelt worden und stellt soweit einen Prototypen dar. Scala baut auf Java auf und ist keine reine objektorientierte Programmiersprache sondern unterstützt auch funktionale Programmierung. Mit Play kann für Scala Webapplikationen entwickelt werden und Akka ist ein Framework um nebenläufige, fehlertolerante Anwendungen zu realisieren und bietet mit einem Aktoren Modell eine Möglichkeit Multithreading einfacher zu implementieren.

Das Projekt ScalaIDE unterstützt ebenfalls mehrere User. Das Registrieren von neuen Benutzer muss aber manuell durch einen Administrator gemacht werden. Loggt sich der Entwickler das erste Mal ein, findet er ein leeres Projekt vor sich. Der Entwickler kann nur ein Projekt auf einmal verwalten, mehrere Projekte werden also nicht unterstützt. Im linken Bereich ist der Projektbaum dargestellt, der mit JsTree umgesetzt ist und über das Kontextmenü einige Basisfunktionen wie Datei respektive Ordner löschen, erstellen und umbenennen bereitstellt. Im rechten Bereich ist der Editor zu sehen, der auch auf Ace (Ajax.org Cloud9 Editor) basiert. Im unteren Bereich findet man eine Konsole und ein weiteres Register für die Fehlermeldungen die im Code auftreten.

ScalaIDE: Code-Completion

Die Kommunikation zwischen Frontend und Server funktioniert über WebSockets. Bei der Eingabe von gewissen Zeichen wie z.B. der Eingabetaste, wird ein JSON mit dem Dateiinhalt an den Server geschickt. Die Datei wird automatisch gespeichert. Der Server arbeitet das JSON ab und liefert per JSON wieder ein Ergebnis an die IDE zurück. Das Herzstück der Anwendung ist ein sogenannter Scala-Presentation-Compiler der mit dem eigentlichen Scala Compiler “scalac” kommuniziert. Der Compiler berücksichtigt jede Änderung im Code und kompiliert dann das Projekt neu. Falls ein Kompilierungsfehler auftritt, wird dieser an das Frontend geschickt und die entsprechende Codezeile mit einem Icon gekennzeichnet. Damit ist das Error-Reporting ein Bestandteil der Plattform. Ein weiteres Feature ist die Code-Completion über das ganze Projekt hinweg, das nach dem gleichen Schema durch den Scala-Presentation-Compiler funktioniert. Mithilfe der Konsole (der User ist auf seinen Workspace eingeschränkt) kann der Entwickler auch Git benützen.

Das studentische Projekt ist noch stark ausbaufähig. Vor allem wäre ein gleichzeitiges Bearbeiten eines Projekts durch mehrere Benutzer ein weiteres Ziel, allerdings würde dies einen Aufwand einer weiteren Projektarbeit bedeuten. Da die Kommunikation über WebSockets stattfindet, ist das Arbeiten mit der IDE performant solange in einer Datei nicht mehrere 1000 Zeilen vorhanden sind. So am Rande: Der Gedanke das eigene Projekt im gleichen Projekt zu entwickeln ist doch irgendwie witzig, quasi rekursives Entwickeln! Im nächsten und letzten Teil zu “Let’s do Cloud Programming!” fasse ich nochmals die vorgestellten IDEs zusammen und gebe ein abschließendes Fazit.

Let’s do Cloud Programming!
Teil 5: Fazit

Wie wir nun in den letzten Artikeln gelesen haben, gibt es bereits gute Ansätze wie Cloud Programming sinnvoll funktioniert. Damit produktiver Code nicht einfach auf einem fremden Server gespeichert wird, gibt es bei Cloud9 die Möglichkeit die Plattform mit einem eigenen Server zu verknüpfen. Kollaboratives Entwickeln ist bei Cloud9 ein fester Bestandteil. Sucht man im Internet nach Online IDE Plattformen gibt es weitere Ansätze. Koding verknüpft Programmieren mit einer sozialen Komponente und bezieht gleich alle Mitglieder mit ein. Damit kann direkt in der IDE nach Hilfe gesucht, Code-Snippets diskutiert und Interessen nachgegangen werden. Um IDE typische Funktionen zu verwenden, muss im Hintergrund allerdings einen Compiler oder Interpreter agieren. Die ScalaIDE verfolgt diesen Ansatz. Die Kommunikation vom Frontend zum Backend und zurück muss relativ zeitnah und sicher funktionieren, damit das Arbeiten mit der IDE nicht träge wirkt. Das Internet als Kommunikationsmittel könnte aber bei großen Projekten zu einem Flaschenhals werden.

Die Idee einer komplett webbasierten IDE bleibt aber trotzdem interessant. Die Ansprüche an eine IDE sind hoch und jeder hat eigene Präferenzen und Vorlieben wie er seine IDE einrichten will. Für mich ist flüssiges und produktives Arbeiten wichtig und würde mir wünschen nebst den gängigsten Features auch Projektmanagement und Bugtracking in einer IDE als Plugin oder Ähnlichem vereint zu haben. Praktisch finde ich es z.B. auch wenn bei einem Commit gleich die Zeitbuchung mitgetrackt werden kann. Ob es so was auch webbasiert geben wird und ob damit auch wirklich produktiv gearbeitet werden kann, wird sich zukünftig zeigen. Was sind denn deine Ansprüche oder Wünsche an eine IDE? Und wie sinnvoll ist überhaupt eine webbasierte IDE?

(This blog post is also available in English)

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *