Moin moin!
Ich hatte heute dann auch etwas Zeit mich in SignalR einzulesen, und das sieht aus, als wäre es genau das, was ich brauche. Und es läuft - danke für den Hinweis - auch noch in beliebigen Anwendungen (Konsole, Service, GUI, IIS...).
Danke für eure Hilfe!
Merlin
Windows Forms bzw. eine Desktop-Applikation geht hier ja nicht.
Huch? Das musst du mir erklären. 😃
Ich konkretisiere mal mein Anwendungsszenario:
Das ganze wird eine Art Dispositionssoftware für eine spezielle Art von Einsätzen im Umfeld einer Hilfsorganisation. Diese Einsätze werden vorab in der Software geplant und dann an mehreren Arbeitsplätzen durchgeführt.
Dafür werden 1 bis (in der Praxis maximal) 6 Computerarbeitsplätze aufgebaut, welche dann mit der Software bestückt werden. Auf einem der Rechner ODER auf einem Extra-Rechner läuft dann ein Server, zu dem sich alle anderen verbinden. Dieser Server kümmert sich darum, dass alle Arbeitsplätze den gleichen Datenstand beim Login erhalten und verteilt Updates zu allen Clients. Wir sind hier immer in einer kontrollierten, kabelgebundenen Netzwerkumgebung.
Nun soll es aber möglich sein, ohne große Kenntnisse den Server aufzusetzen. Hier stelle ich mir ein Programm vor, in welchem man ein Projekt wählt, "Start" drückt, und der Server läuft. In der Regel sind die Nutzer Laien, denen bei dem Begriff "Webserver" schon der Rauch aus den Ohren pfeift.
Es spricht ja Grundsätzlich wenig gegen HTTP als Transportprotokoll, lediglich müsste man dann die Bidirektionalität sicherstellen (WebSocket?).
Interessant ist bei der ganzen Geschichte vor allem die möglichst universelle Erweiterbarkeit durch Plugins. Hier sehe ich offenbar keinen Ernsthaften Weg an Reflection vorbei.
Liebe Grüße,
Merlin
Naja, ich möchte ja eigentlich gerade kein P2P-Netzwerk haben, sondern die Daten schon an Zentraler Stelle verwalten lassen.
Merlin
Moin,
Da hast du natürlich Recht. Ich bin bloß (beruflich wie privat) noch nie mit ASP.NET in Kontakt bekommen und habe es daher bislang gar nicht in Betracht gezogen. Meines (gefährlichen halb-)Wissens nach benötigt ein ASP.NET-Projekt einen Webserver (IIS?), um zu laufen. Auf den würde ich in der Tat gern verzichten, um den Server ohne größere Umwege auf beliebigen PC ausführen zu können. Es handelt sich um ein Projekt, das nicht stationär auf einem Rechner läuft sondern den Einsatzort vermutlich relativ häufig wechselt.
Wenn sich heraus stellt, dass es doch keinen Webserver ala IIS braucht (Auch um das zu Googlen habe ich erst heute Abend Zeit 😃 ), könnte es u.U. ein nettes Lernprojekt für ASP.NET werden.
Merlin
Hallo ihr beiden,
Vielen Dank für den Tipp, SignalR schaue ich mir heute Abend auf jeden Fall ein mal an.
Ich hätte aber vielleicht dazu erwähnen sollen, dass es sich nicht um eine ASP.NET-Anwendung handelt, sondern (bislang noch) um eine Windows Forms Applikation, in der nächsten Iteration soll daraus eine WPF-App werden.
Vielen Dank,
Merlin
Hallo ihr lieben,
Ich stehe vor einem Problem bzw. einer Problemstellung, von der ich glaube, dass ich nicht der erste sein kann, der davor steht. Und ich möchte euch freundlich darum bitten, mir beim Googlen zu helfen oder mir hilfreiche Stichworte zu nennen. Ich bin da seit einigen Tagen relativ erfolglos.
Die Problemstellung lautet folgendermaßen:
Es gibt vereinfacht Gesprochen einen Datensatz, an welchem einige Clients innerhalb eines Netzwerk parallel arbeiten sollen. Der Datensatz besteht aus ca. 10 verschiedenen Klassen, die in Listen zu je ca. 100 zusammengefasst sind. Jedes Objekt hat ca. 10 Eigenschaften. Es soll einfach sein, das System um weitere Entitätstypen zu ergänzen, sehr Wünschenswert wäre es, wenn alles möglichst generisch gehalten wird, so dass man über MEF o.ä. Plugin-Systeme und wenig Code-Aufwand neue Entitäten hinzufügen könnte, welche dann auf gleiche Weise gehandhabt werden, ohne den eignetlichen Management-Kern anzufassen.
Dazu soll es einen Server geben, zu dem alle Clients eine dauerhafte Verbindung halten. Zum Login soll ein Client einen "Dump" des ganzen Datensatzes erhalten. Ab dann schickt er veränderte Objekte zum Server, welche diese Information in seiner eigenen Kopie einpflegt und gleichermaßen an alle anderen verbundenen Clients weiterreicht. Der Server vergibt auch allein die IDs für die einzelnen Entitäten.
Zwischen Entitäten gibt es auch die üblichen Beziehungen (1:n, m:n), welche ebenfalls Verwaltet werden sollen.
Der Server soll weiterhin eine irgendwie geartete Persistenz bereitstellen. Das ist aber ein anderes Thema.
Überlegungen bislang:*EntityFramework + Datenbank: Das Interface von EF gefällt mir sehr gut, ich stelle mir für meine Lösung etwas ähnliches vor. Leider habe ich bis auf beim SQL-Server keine schöne Möglichkeit gefunden, umgehend über Änderungen an Einträgen benachrichtigt zu werden. SQL-Server scheidet für mich leider aus. Mir ist für andere DBS (MySQL bspw.) keine Möglichkeit bekannt, Clients über durchgeführte Änderungen in der Datenbank zu benachrichten. Weiterhin soll der Server auch andere Aufgaben übernehmen, so dass man eine Verbindung zur Datenbank bräuchte und dennoch die Server-SW.
Es stellen sich mir also folgende Fragen:*Gibt es etwas für meinen Anwendungsbereich schon? Wenn ja: Wonach muss ich suchen? *Wenn nein: Gibt es vielleicht DOCH eine Möglichkeit, über EF (oder einen anderen ORM) über Änderungen in Datenbanken benachrichtigt zu werden? Meiner Erinnerung nach ist das eigentlich in den meisten DBS nicht von Haus aus vorgesehen.
Da es sich um ein privates Lern-Projekt handelt wäre irgendetwas Open-Source schön. 😃
Ich bedanke mich bereits im Voraus für eure Hilfe.
Merlin
Ja, stimmt. Ich werde morgen den Quellcode nach github schieben.
Grundsätzlich ist es so, dass das System (in dem Umfeld, in dem ich es einsetze) lediglich eine Sekundär-Alarmierung durchführt. Durchaus auch wichtig, aber durch keine Regularien reguliert.
Audits darf jeder gern machen 😛 Tests sind aber noch keine implementiert.
Zugegeben ist einer der Gründe der bisherigen nicht-Veröffentlichung, dass ich im Lizenzen-Dschungel noch nicht "meine" Lizenz gefunden habe.
Das ist Käse (sorry, nichts anderes). Linux hat gerade mal nen Market Share von knapp unter 30% bei Servern (Webserver höher).
Bei Firmen ist die Verbreitung von Windows höher als Linux (wobei es natürlich nicht für jede Firma oder Branche gilt)
Gut, 1:0 für dich. Ich habe allerdings sowohl in der Arbeit als auch daheim nur Linux-Maschinen mit diversen VMs. Aber ja, im Firmenbereich ist Windows viel üblicher.
Hallo zusammen, Ich habe nach langer Zeit mal wieder ein größeres Projekt gebaut.
Vorgeschichte.
Ich bin Mitglied in einer größeren deutschen Hilfsorganisation mit 8-spitzigem Kreuz im Logo. Wir sind in unserer Gliederung unter anderem im Katastrophenschutz und im erweiterten Rettungsdienst organisiert. Die Alarmierung erfolgt im Regelfall über digitale Meldeempfänger (DME). Jedoch haben nicht alle Helfer solche DME, entsprechend wird eine möglichkeit benötigt, Alarmierungen per DME auf einen anderen Alarmierungsweg wie zum Beispiel SMS umzusetzen (Rechtlicher Rahmen ist durchaus geklärt und gegeben).
Eine weitere Aufgabe ist, Rückmeldungen von Helfern entgegen zu nehmen und in ein Format aufzuwerten, welches es der Führungskraft im Büro erlaubt Fahrzeuge einzuteilen und ggf. Entscheidungen zu treffen (bspw. dass ein Fahrzeug noch wartet, weil in X Minuten noch jemand kommt).
Bisher gibt es ein Gerät vom Typ "EcoTel" im Büro, welches jedoch unseren Anforderungen nicht mehr genügt (Zu viele Alarmierungskreise geworden, da EcoTels nur GPIO-Input kennen, müsste man pro Schleife einen Melder kaufen).
Die andere Hälfte übernimmt ein python-Programm, welches SMS entgegennimmt und auf einem Bon-Drucker von Epson ausgibt.
Das musste neu. Heraus kam:
AlarmSystem
Was ist AlarmSystem?
AlarmSystem ist ein Multifunktioneller, leicht erweiterbarer Alarmierungsumsetzer, welcher grundsätzlich nur eine Datenbankverbindung herstellt und eine Konfigurationsdatei einliest. Alles weitere passiert über PlugIns.
Was kann AlarmSystem?
Bislang gibt es folgende Plugins:*SmsPlugin - Empfangen und versenden von SMS
*TelegramPlugin - Ein Telegram Bot, welcher empfangene SMS in eine Gruppe bei Telegram postet
*HTTP-Server - Nimmt Alarm-Auslösungen per HTTP interface entgegen
*PrinterPlugin - Druckt Nachrichten, die ankommen aus
*TriggerHandlerPlugin - Nimmt Trigger entgegen und bereitet diese auf, heißt: Erzeugt Nachrichten an alle, die dieser Auslöser betrifft und gibt diese weiter
Grundsätzlich ist diese Architektur beliebig erweiterbar. Es gibt folgende "Materialien":*Message - Eine Nachricht an das System, welche weiterverarbeitet werden soll *TriggerMessage - Eine NAchricht vom System an eine Person, welche versendet werden soll *TriggerRequest - Ein Request, einen Trigger auszulösen und abzuarbeiten *FreeText - Freitext, welcher erzeugt und verarbeitet werden kann
Jedes Plugin kann für jeden dieser Typen sowohl Source als auch Sink sein (auch gleichzeitig). Die "Verbindungen" (genannt "Wires") zwischen den einzelnen Plugins werden in einer Konfigurationsdatei per XML festgelegt.
Außerdem hat jedes Plugin in dieser Konfigurationsdatei einen eigenen Bereich, aus dem es Daten auslesen kann.
Weiterhin gibt es ein Web-Interface auf Laravel-Basis, welches per Bootstrap für Desktop- und Mobile-Ansicht geeignet ist.
Wo läuft AlarmSystem?
Bisher läuft es alles unter Linux auf mono. Müsste auch unter Windows laufen - ist aber bislang nicht getestet. Üblicherweise laufen Server ja auf Linux.
Was kostet AlarmSystem?
Nix. Wenn ich es veröffentliche (s.u.), dann Open-Source.
Warum erzähle ich euch das eigentlich?
Nach einiger Zeit, die da nun drin steckt, könnte ich mir vorstellen, dass es Leute gibt, die sich für dieses Projekt interessieren. Sei es, weil ich da eine Menge für mich neuer Techniken probiert habe (z.B. das Managed Extensibility Framework - klasse Ding!), weil sie es in der Feuerwehr benutzen wollen, in der Firma beim Betreten des Geländes die Kaffeemaschine einschalten wollen oder oder oder...
Gern nehme ich auch Vorschläge für Plugins (oder fertige Plugins? 😉 ) entgegen! Darauf ist dieses System ausgelegt - einfache Erweiterbarkeit. Wer also Lust hat, mitzumachen, ist herzlich willkommen!
Sollte sich also jemand finden, der sich dafür interessiert, würde ich daraus ein Projekt mit Source-Code, Webseite, Wiki und Dokumentation machen. Letztere habe ich schon etwas begonnen, würde aber noch deutlich mehr Doku schreiben, bevor ich es wirklich veröffentliche.
Also! Sagt bescheid, fragt fragen, oder sagt: laaaangweilig 🙂 Dann nutze ich es eben nur bei mir. Gelernt habe ich trotzdem viel.
liebe Grüße,
Merlin
Hallo schnelleHelga,
Die Punkte werden mit einem GPS-Gerät (smartphone) gemessen und mit einem Programm grafisch auf der Karte platziert?
Merlin
Hallo herbivore,
Hallo schnelleHelge,
Vielen Dank für eure beiden Einschätzungen! Ihr habt recht, die Abweichung, die durch das GPS entstehen sind wohl um 1-2 Größenordnungen größer als die Ungenauigkeiten bei der Annahme, die Erde sei eine Scheibe. Bin überzeugt! 😃
Zur Drehung: Dessen bin ich mir bewusst, aber man müsste doch, wenn man 2 oder mehr Punkte gegeben hat relativ gut herausfinden können, in welche Richtung auf dem Bild der Nord-Vektor zeigt. Nämlich die Richtung, in die sich die Breitengerade ändern während der Längengrad (wenn man nun einen Punkt betrachtet) konstant bleibt. Wenn man dann das Skalarprodukt zwischen diesem und dem "echten" Nord-Vektor anwendet bekommt man (so mein Gedanke) den Winkel heraus, in dem sich die beiden Nord-Vektoren unterscheiden. Flugs das Bild um diesen Winkel zurück gedreht, und man hat es nach Norden ausgerichtet. Oder denke ich da falsch?
Das funktioniert natürlich (s.o.) nur, wenn man die Koordinaten der Längen- und Breitengrade als kartesisch betrachtet, was aber, so verstehe ich diesen Thread, aufgrund der geringen Abweichungen kein Problem sein sollte.
Teilt ihr diese Einschätzung?
liebe Grüße,
Merlin