Import Library || use Brain

Import Library || use Brain

 

Infos zum Devtreff #5 Talk 2

Video über den Devtreff auf M4TV: https://www.m4tv.at/videos-devtreff_5?v=6341

 

Etwas Provokativ der Titel.

Oder eher etwas Philosophisch.

Vorsicht! Ich weiß dass Libraries was anderes als Frameworks sind, aber ich nehme den Titel Library stellvertretend für beides.

Warum kommt der da vorne dazu so etwas zu behaupten?

Über mich!

Ich bin der Roland von der Firma IT-Open. Ich bin Programmierer mit Leib und Seele und arbeite von der Elektronik bis hin zu Server Systemen.
Und da genau ist auch mein Problem. Zuerst ein Desktopprogramm, dann eine Webseite, automatisierte Bildmanipulation und dazwischen etwas Elektronik mit dem ESP32.

One Size fits all (most)

Genau das gibt es nicht. Es gibt kein System das alles anbietet. Deshalb muss ich mich für jedes Projekt wieder neu orientieren. Ich hab nicht die Zeit mich wochenlang in ein System einzulernen, dass ich wahrscheinlich kein zweites mal brauchen werde.

Zahlen:

Sprache

Library

 

Sprache

Framework

 

Sprache

Microservice

Javascript

78,058

 

Javascript

55,338

 

Java

17,187

Java

66,794

 

Java

48,643

 

Javascript

13,646

C++

53,237

 

PHP

46,291

 

Python

3,063

Python

49,450

 

Python

31,533

 

Go

3,034

C#

32,874

 

C#

23,413

 

HTML

2,946

C

31,969

 

HTML

21,229

 

C#

2,130

PHP

31,190

 

C++

13,759

 

Shell

1,945

Go

15,198

 

CSS

13,327

 

PHP

1,711

Ruby

13,811

 

Typescript

7,258

 

TypeScript

1,075

HTML

12,255

 

Ruby

6,934

 

Ruby

1,012

Gesamt

534K

 

 

370k

 

 

65k



Gut! Zurück zum Thema

Ich hatte da ein Projekt:

Ein Websystem mit REST API. User sollen sich authentifizieren und dort Geräte konfigurieren.

Ich als hauptsächlicher Java Programmierer – Spring!

Spring ist das Ding überhaupt um Microservices zu programmieren. Ich, null Idee + Google und Stackoverflow bekommen das sicher hin.

Gleich noch Hibernate dazu, denn wir müssen ja die Daten speichern auch.

Eigentlich wollte ich eine MongoDB, musste aber bald feststellen, dass das in Spring für Anfänger etwas Hardcore ist.

So, Objekte anlegen, authentifizieren?

Nach Stunden einen spitzen Spring 4 Code gefunden, der aber nichts mit meinem Spring 5 System zu tun hatte und deshalb auch nicht passt. Aber richtige Richtung und irgendwie gings. Warum, weiß ich bis heute nicht.

Geräte sollten sich auch authentifizieren, aber nicht die gleiche API wie User bearbeiten dürfen und der Administrator darf sowieso mehr als ein User.

?????? Ab da gings bergab und ich konnte nicht einmal mehr das Programm erfolgreich kompilieren.

2 Wochen!

Bei meinem Betriebscouncelor auf der Couch (Meiner Frau) wurde das Problem besprochen. Und ich sagte die verhängnisvollen Worte: „In 2 Wochen hätt i des gonze a söba gschriebm.“ und sie „Und warum host das net dau?“

2 Wochen später war ich auch fertig.

  • REST Api mit JSON

  • Authentifizierung mit Json Web Token

  • Automatischer API Dokumentation (weil ich weiß, dass ich faul bin)

  • CRUD Helper

  • Einfach zu bedienen

Später brauchte ich für andere Projekte noch ein paar Erweiterungen:

Es sollte doch ein Microservice werden. Aber ich will keinen zentralen Master. Also auch wenn alle bis auf einen PC ausfallen, soll das ganze noch funktionieren.

Autodiscovery: Das schreit nach Peer2Peer.

Es gibt viele P2P Libraries, die alle immer gleich Dateien austauschen. Aber nie die Basis selbst.

Gleiches Prinzip: Wie würde ich es machen. 1 Tag später. So hab ich es gemacht.

Also:

  • Autodiscovery

  • Client Based Loadbalancing

  • Messaging

  • und natürlich noch einen Rest Client, damit das ganze richtig läuft.

Und das ganze ohne Single Point of Failure

Libraries sind super:

Nicht falsch verstehen. Ich liebe Libraries.

Also Ehrlich ich liebe Libraries. Ich verwende Jetty, Jackson, Apache commons, …

Am liebsten sind mir Libraries die genau das tun, was sie sagen. Nicht mehr und nicht weniger.

Apache Commons sind das beste Beispiel dafür. Jede Bibliothek mach nur eine Sache und die macht sie gut.

Das Problem sehe ich bei den Großen Systemen und Frameworks.

Wenn man ein Projekt plant macht man einige Schritte durch.

  • Die richtige Architektur: Web, Desktop, Microcontroller?

  • Welche Basis?, Datenbanksystem?

  • Welches Framework?

Die schwierigsten Fehler in einem Programm sind Designfehler. Die kriegt man schlecht raus.

Die Architektur des Sourcecodes richtet sich oft stark nach dem verwendeten Framework. Unter Umständen würde ein Code anders aussehen, wenn ein anderes Framework benutzt würde.

Vor ein paar Jahren, bei einem Projekt für ein Startup kam ein Entwickler dazu. Wir machen alles Im Play Framework.

-This is the new shit-

PLAY Framework:

2007 Scala

Management über Typesafe Activator

Bis 2015 gibt es Infos und vergleiche, danach ist es eher still um das Projekt geworden.

Wenig Entwicklung in den letzten Jahren. Wer weiß ob es noch weiter geht. Und was dann? Steht dein Projekt ohne Framework da.

Und stell dir vor du müsstest bei deinem Projekt die Basis austauschen. Würde es überhaupt noch funktionieren?

Was sind die Vor und Nachteile von Libraries / Frameworks?

Vorteile:

  • Man muss nicht selber denken.

  • Jemand anders hat das Problem schon gelöst

  • Schnell einsatzbereit

  • genormte Schnitstellen

  • Getesteter Code

  • Schneller !?!

Nachteile:

  • Platz

  • Geschwindigkeit (Jede Schicht nimmt Geschwindigkeit weg)

  • Optimierungen nicht möglich

  • Risiken (Sicherheit)

  • Wer weiß ob es in der nächsten Version noch geht?

  • Updateprobleme

  • Einschränkung (Kernverhalten vorgegeben)

  • Kontinuierliche Anpassung

Platz und Geschwindigkeit:

Ein NodeJS Projekt:

Wir nehmen NPM und verwenden:

  • Express

  • pdf

  • Bootstrap

  • jquery

  • popper (da wird was compiliert)

  • chartjs

""Popper kann nicht installiert werden", da es ein Problem mit fsevent gibt. Es gibt gleich mal 2 Security vulnerabilities.

Platzverbrauch 135Mb

Warum ins Platz ein Problem?

Laravel und Wordpress brauchen 43MB. Kein Problem für die heutigen Computer. Aber der PHP Interpreter muss sich bei jedem Aufruf durch 43MB Code durcharbeiten.

Das ist nicht gut, wenn es nur um einen Onepager geht.

Häuftigste Frage bei Wordpress: "Wie macht man es schneller!"

Ich finde hier das Library/Code Verhältnis wichtig. Wordpress passt für eine Webseite mit 100 Seiten aber nicht für eine einzelne Seite.

Die Richtige Mischung Code/Library > 10%

Der eigene Code (Abzüglich der Bilder) sollte in einem Projekt schon um die 10% ausmachen. Sonst macht das Framework wenig Sinn.

Diese Regel ist aber nicht starr. Man sollte darüber nachdenken, ob man diese oder jene Library braucht. Eins meiner Projekte hat 0.6% und es ist gut so.

Man soll sich bewust entscheiden und nicht einfach stur etwas aus Faulheit nehmen ...

 

Posted on

Ing. Roland Schuller

Harland 44, 3372 Blindenmarkt
@: roland@it-open.at
T: +43 676 63 54 793
W: it-open.at
RSS: RSS Feed