brainchild GmbH

Softwareentwickler (m/w/x) – C#/ .NET

Jobs 20. April 2021

Zur Verstärkung unseres Teams suchen wir ab sofort einen Softwareentwickler (m/w/x) im Bereich C#/ .NET.

Einsatzort: Eggenfelden

 

Ihre Aufgaben:

  • Realisierung von Kundenprojekten in verschiedensten Bereichen
  • Entwicklung, bzw. Weiterentwicklung unserer Produkte
  • Einsatz in vielfältigen und herausfordernden Themengebieten in den Bereichen Automotive, Luft- und Raumfahrt, Transportation, Medizintechnik, u.v.m.

 

Ihr Profil:

  • Abgeschlossenes Studium der Informatik oder vergleichbare Qualifikation
  • Mehrjährige Berufserfahrung, vorzugsweise im Bereich Technische Informatik
  • Sorgfältige und vorausschauende Arbeitsweise
  • Zielorientierte Denkweise
  • Programmierkenntnisse in C#/.NET
  • Erfahrung mit SCRUM-Projekten

 

Benefits:

Unser Motto ist “Fordern und Fördern”. Deshalb bieten wir neben spannenden Aufgaben auch jede Menge Annehmlichkeiten, um eine optimale Work-Life-Balance zu gewährleisten.

 

Arbeitszeitmodell

  • Flexible Arbeitszeiten (Gleitzeit)
  • Kurzfristige Urlaubsplanung
  • Möglichkeit zum Homeoffice

 

Umfeld

  • Flache Hierarchie
  • Agiles Team
  • Tee, Kaffee und Süßigkeiten für das Wohlbefinden
  • Reichlich Freiraum für Engagement und Eigeninitiative
  • Betriebliche Altersvorsorge
  • Zuschüsse zu gesundheitsfördernden Maßnahmen wie Schwimmbad, Fitnessstudio, etc.

 

Für High-Performer

  • Firmenfahrzeug
  • Firmen-Handy

 

Technische Ausstattung

  • Moderne Mehrbildschirm-Arbeitsplätze, Apple iMac
  • Private Internetnutzung

 

Verkehrsanbindung

  • Zentrale Lage
  • Gut erreichbar mittels öffentlicher Verkehrsmittel
  • Ausreichend Parkplätze
  • Einkaufsmöglichkeiten in unmittelbarer Nähe

 

Haben wir Ihr Interesse geweckt? Dann freuen wir uns auf Ihre aussagekräftigen, digitalen Bewerbungsunterlagen mit der Angabe des frühestmöglichen Eintrittstermins.

Senden Sie uns Ihre Bewerbung per Email an career@brain-child.de.

Softwareentwickler (m/w/x) – Java

Jobs 20. April 2021

Zur Verstärkung unseres Teams suchen wir ab sofort einen Softwareentwickler (m/w/x) im Bereich Java.

Einsatzort: Eggenfelden

 

Ihre Aufgaben:

  • Realisierung von Kundenprojekten in verschiedensten Bereichen
  • Entwicklung, bzw. Weiterentwicklung unserer Produkte
  • Einsatz in vielfältigen und herausfordernden Themengebieten in den Bereichen Automotive, Luft- und Raumfahrt, Transportation, Medizintechnik, u.v.m.
Ihr Profil:
  • Abgeschlossenes Studium der Informatik oder vergleichbare Qualifikation
  • Mehrjährige Berufserfahrung, vorzugsweise im Bereich Technische Informatik
  • Sorgfältige und vorausschauende Arbeitsweise
  • Zielorientierte Denkweise
  • Programmierkenntnisse in Java (bevorzugt Java EE), mit Kubernetes und Microservices
  • Erfahrung mit SCRUM-Projekten

 

Benefits:

Unser Motto ist “Fordern und Fördern”. Deshalb bieten wir neben spannenden Aufgaben auch jede Menge Annehmlichkeiten, um eine optimale Work-Life-Balance zu gewährleisten.

 

Arbeitszeitmodell

  • Flexible Arbeitszeiten (Gleitzeit)
  • Kurzfristige Urlaubsplanung
  • Möglichkeit zum Homeoffice

 

Umfeld

  • Flache Hierarchie
  • Agiles Team
  • Tee, Kaffee und Süßigkeiten für das Wohlbefinden
  • Reichlich Freiraum für Engagement und Eigeninitiative
  • Betriebliche Altersvorsorge
  • Zuschüsse zu gesundheitsfördernden Maßnahmen wie Schwimmbad, Fitnessstudio, etc.

 

Für High-Performer

  • Firmenfahrzeug
  • Firmen-Handy

 

Technische Ausstattung

  • Moderne Mehrbildschirm-Arbeitsplätze, Apple iMac
  • Private Internetnutzung

 

Verkehrsanbindung

  • Zentrale Lage
  • Gut erreichbar mittels öffentlicher Verkehrsmittel
  • Ausreichend Parkplätze
  • Einkaufsmöglichkeiten in unmittelbarer Nähe

 

Haben wir Ihr Interesse geweckt? Dann freuen wir uns auf Ihre aussagekräftigen, digitalen Bewerbungsunterlagen mit der Angabe des frühestmöglichen Eintrittstermins.

Senden Sie uns Ihre Bewerbung per Email an career@brain-child.de.

Users Guide – B1000 Avionic Desktop Trainer

Public 10. März 2021

Die erste Version unseres Handbuches für den B1000 Avionic Desktop Trainer (ADT) ist online! Wenn ihr genauer hinschaut, könnt ihr ein paar kleine Easter Eggs finden. In der nächsten Version könnt ihr euch auch auf verschiedene Videos zum Umgang mit dem Desktop Trainer freuen.
Zu finden ist es bei Apple Books.
Ihr wisst noch nicht was ein B1000 ADT ist? Dann schaut mal auf unserer Webseite https://b1000adt.brain-child.de/ vorbei!

Prepare for Landing

Public 23. Dezember 2020

“Der Schlitten vom Weihnachtsmann erhielt in diesem Jahr ein Upgrade: ein neues Garmin® G1000® Glascockpit! Allerdings ist der Weihnachtsmann sehr besorgt, da das absolutes Neuland für ihn ist. Wie soll er es nur schaffen, auf kürzeste Zeit die Funktionsweise des Glascockpits zu erlernen? Und würde er für jeden Flug die Rentiere beanspruchen, wären diese nicht zu Weihnachten viel zu ausgelaugt, um alle Geschenke rechtzeitig zu den Menschen zu bringen?” 

 

Für das Jahr 2020 hatten wir große Pläne und Ideen – leider wurden diese durch bekannte Umstände etwas durcheinander geworfen. Nichts desto trotz sind wir stolz, dass wir die Situation gemeistert haben und darauf, was wir geschafft haben!

Und so können wir dem Weihnachtsmann – und euch – seit diesem Jahr eine optimale Lösung bieten, den Umgang mit dem Garmin® G1000® zu erlernen: den B1000 Avionic Desktop Trainer (ADT). Dieser bietet eine optimale Möglichkeit, um stressfrei und effektiv den Umgang mit dem Garmin® G1000® zu erlernen. Mehr über den B1000 ADT erfahrt ihr auf unserer eigenen Aviation-Webseite. 

Wir bieten damit allen Flugschulen und Luftsportvereinen ein unverzichtbares Unterrichtsmittel, um Flugschüler auszubilden, Wissen von Piloten aufzufrischen oder erfahrene Piloten umzuschulen.

Zudem freuen wir uns, dass wir in diesem Jahr wieder einige kreative Köpfe mehr in unserer brainchild-Familie begrüßen konnten.

Wir starten nun aber erst mal in unseren verdienten Urlaub und kehren im kommenden Jahr mit neuer Energie und mindestens genauso viel Elan.

Außerdem sagen wir danke an alle, die uns in diesem turbulenten Jahr so tatkräftig unterstützt haben. Ihnen und Ihren Familien wünschen wir ruhige, besinnliche Weihnachten, einen guten Start ins neue Jahr und bleibt’s gsund!

Wenn „einfach so weitermachen“ nicht so verlockend wäre

Public 14. Juli 2020

Verantwortung zu übernehmen ist ein fundamentaler Wert bei brainchild. Dabei geht es nicht nur darum, auf unsere Kollegen und Mitmenschen zu achten oder gar der Gesellschaft etwas zurückzugeben, sondern auch das Wichtigste zu bewahren, unsere Umwelt. Die blaue Kugel stellt nicht nur die Heimat für fast 8 Milliarden Menschen bereit, sondern für unzählige Lebewesen. Ein gesundes Gleichgewicht zwischen allen Lebewesen und ein verantwortungsvoller Umgang mit den vorhandenen Ressourcen ist essentiell für das Fortbestehen der Erde wie wir sie kennen. Der Mensch ist das einzige Lebewesen, das die Erde zerstören aber auch bewahren kann. Wir sehen jeden einzelnen in der Pflicht.

Aus diesem Grund haben wir uns von Beginn an zum Umweltschutz verpflichtet und setzen nicht nur auf einen nahezu digitalen Büroalltag, achten darauf Müll so weit es geht zu vermeiden und diesen dem Wertstoffkreislauf zuzuführen. Damit nicht genug. Bei der Entwicklung von Produkten achten wir darauf, keine gefährlichen Stoffe einzusetzen und das Recycling der Produkte am Ende ihrer Nutzung zu unterstützen.

Im letzten Jahr haben wir begonnen, Lösungen zu entwickeln und zu vertreiben, die die endliche Ressource Öl schonen, um den Öl-Verbrauch durch Maschinen und Anlagen drastisch zu reduzieren (Siehe W-wie-Umwelt).

In diesem Jahr stellen wir unsere gesamte Fahrzeugflotte nach und nach auf Elektro-Fahrzeuge um. Dies ist für uns der konsequente nächste Schritt, unnötige Verbrennungsmotoren aus unserem Alltag zu verbannen, damit Öl zu sparen und unsere Umwelt zu entlasten. Allerdings ist auch klar, dass Elektrofahrzeuge nicht die aktuellen Umweltprobleme lösen werden. Dennoch sind diese ein erster wichtiger Schritt, Technologien in den Alltag zu bringen, die es schon seit Jahrzehnten geben könnte, wenn denn „einfach so weitermachen“ nicht so verlockend wäre.

Die Physik lehrt uns allerdings, dass man nur etwas in Bewegung versetzen kann, wenn man Energie aufwendet.

Fliegen wie die Großen…

System Engineering 3. Juli 2020

Nach Monaten harter Arbeit freuen wir uns, euch unser neuestes Produkt aus dem Bereich „Simulation & Training” vorstellen zu können, den B1000 Avionic Desktop Trainer (ADT).Die G1000® All-Glass Avionics Suite aus dem Hause Garmin® erfreut sich nicht nur im Bereich Business Aviation großer Beliebtheit, sondern auch zunehmend in der privaten Fliegerei. Der Grund dafür liegt zweifelsfrei an dem  großen Funktionsumfang, der nicht nur ungeahnten Komfort, sondern auch Sicherheit in das Cockpit bringt. Dies kommt allerdings zum Preis eines komplexen Systems, das einer eingehenden Schulung bedarf. 

Der brainchild B1000 Avionic Desktop Trainer (ADT) stellt die optimale Umgebung bereit, um effektiv und vor allem stressfrei den Umgang mit dem Garmin® G1000® zu erlernen. Bei der Entwicklung wurde besonderes Augenmerk darauf gelegt, dass der B1000 ADT nicht nur wie das Original aussieht und sich so anfühlt, sondern sich auch so verhält. Der B1000 ADT unterstützt sämtliche Trainingsszenarien, sei es am Boden, in der Luft, Sichtflug (VFR) oder Instrumentenflug (IFR) und stellt damit ein unverzichtbares Unterrichtsmittel für Flugschulen und Luftsportvereine dar, um Flugschüler auszubilden, Wissen von Piloten aufzufrischen oder erfahrene Piloten umzuschulen.

Wie gewohnt haben wir uns intensiv damit beschäftigt, wie ein Rundum-Sorglos-Paket aussehen könnte. Ob Inbetriebnahme, Bedienung, Transport, Diebstahlschutz und Service, nichts blieb dabei unberücksichtigt. 

Mehr zum B1000 Avionic Desktop Trainer könnt Ihr auf unserer Produktseite nachlesen.

Wir freuen uns auf euer Feedback. ?

Die Ruhe vor dem Sturm

Public 20. Dezember 2019

So sind wir also nach einem erfolgreichen und arbeitsreichen 2018 ins neue Jahr gestartet.

Nach einem Jahr voll rauchender Köpfe, literweise Kaffee, Süßkram und gesundem Obst ?sind wir sehr stolz auf das, was wir geschafft haben.

Der stetige Ausbau bestehender Tätigkeitsbereiche, z.B. im Automobil-Sektor und in der Luftfahrt, hat es uns ermöglicht, viel in eigene Produkte zu investieren. Die ersten beiden werden wir euch Anfang des kommenden Jahres detailliert vorstellen. An dieser Stelle sei nur soviel gesagt, dass diese den Weg für unsere langfristige Strategie bereiten, einzigartige und vor allem erschwingliche Produkte für Training, Simulation und Entertainment zu entwickeln. Im kommenden Jahr werden wir unsere bestehenden Bereiche also nicht nur weiter ausbauen, sondern neue Wege mit eigenen Produkten beschreiten. So können wir hoffentlich planmäßig Mitte des Jahres ein Produkt aus dem Bereich Racing-Simulation veröffentlichen und dann im Herbst den ersten Prototypen eines Flug-Training-Systems vorstellen.

Neben dem Ausbau bestehender Geschäftsbereiche war es uns eine Herzensangelegenheit, in diesem Jahr einen komplett neuen zum Thema Umweltschutz zu erschaffen. Dabei ist es unser Ziel, die endliche Ressource Öl durch Filtrierung wiederverwendbar zu machen und dadurch zu schonen. Da dieses aufgrund von Verschleiß der Maschinen verschmutzt wird, werden täglich Unmengen an Öl entsorgt, anstatt diese zu recyceln.

Wir wollen mit unseren Systemen diesen Teufelskreis durchbrechen. Seit September diesen Jahres bieten wir Lösungen an, die zur Reinigung des Öls von Maschinen eingesetzt werden, ohne jemals wieder Öl wechseln zu müssen. Wer mehr zu dem Thema wissen möchte, ist recht herzlich eingeladen, hier weiterzulesen oder Kontakt mit uns aufzunehmen.

Bei all unseren Projekten ist eines gewiss, der Spaßfaktor kommt nie zu kurz, weder bei uns, während der Entwicklung, noch bei Euch, den Nutzern. Wir versprechen euch damit ebenso viel Freude und kurzweilige Stunden, wie wir bei der Entwicklung haben. Seid gespannt! ?

Neben den vielen Herausforderungen im Büro konnten wir uns durch verschiedene Events aber auch einen verdienten Ausgleich schaffen. So schweißen wir unsere brainchild-Familie Tag für Tag ein Stück weiter zusammen. Besonders freut uns,  dass wir auch in diesem Jahr wieder um ein paar weitere kreative Köpfe wachsen durften.

Nun starten wir aber erst mal in unseren wohlverdienten Urlaub, um auch 2020 wieder erholt und voller Tatendrang durchstarten zu können.

Vielen Dank an alle, die uns in diesem Jahr tatkräftig unterstützt haben und die wir unterstützen durften. Wir wünschen Ihnen sowie all unseren Kollegen mit ihren Familien frohe und besinnliche Weihnachten und einen guten Start ins neue Jahr!

Geschafft! Ausbildung bestanden :)

Public 13. August 2019

Mit seinen 19 Jahren war Leon 2016 unser jüngster Auszubildender. Über die dreijährige Ausbildung hinweg, hat er sich kontinuierlich zu einem kompetenten Ansprechpartner in vielen Technologiefeldern entwickelt. Er ist Entwickler durch und durch. Ob Handy-App, Desktop Software oder gar eine Industriesteuerung, Leon ist für jede Herausforderung offen und meistert diese stets mit Bravur.

Am 18.07.2019 hat Leon die mündliche Prüfung und damit den letzten Teil seiner Ausbildung gemeistert. Er ist nun frisch gebackener Fachinformatiker für Anwendungsentwicklung. Neben seinen ausgezeichneten schulischen Erfolgen freut uns besonders, dass für ihn außer Frage stand, dass er weiterhin ein vollwertiges brainchild Team-Mitglied bleiben möchte.

Die brainchild GmbH bildet seit mehr als 10 Jahren erfolgreich in den Bereichen Büromanagement, Mediengestaltung, Anwendungsentwicklung und Systemintegration aus. Diejenigen Azubis, die sich durch Engagement, Fleiß und Kompetenz auszeichnen sind bei uns stets willkommen.

Bist Du auch ein brainchild, oder möchtest Du eines werden? Dann bewerbe Dich jetzt.

Bahn frei für die neuen Medien-Tutoren

Public 6. Juni 2019

Im Rahmen der Digitalisierung werden alle Schulen in Bayern mit der entsprechenden Ausstattung versorgt. Das digitale Klassenzimmer mit Beamer, Dokumentenkamera und Notebook ist heute schon eine Selbstverständlichkeit. Die Geräte erfolgreich in den Unterricht einzubauen, scheitert aber nicht selten an technischen Problemen.

Um hier effektiver zu arbeiten, suchte die Grund- und Mittelschule Tann Unterstützung bei uns. Unter der Leitung unseres CEO/CTO M.Sc. Dipl.-Inf. Mike Werner wurde daraufhin ein Medien-Tutoren-Workshop für ausgewählte Schülerinnen und Schüler der Jahrgangsstufen fünf bis neun durchgeführt. Unser Ziel war es, technisches Verständnis bei den Teilnehmerinnen und Teilnehmern aufzubauen, sowie die Fähigkeit, auftretende Probleme bei verschiedenen Geräten zu erkennen und selbstständig zu lösen. Dadurch wird die Zusammenarbeit nicht nur jahrgangsübergreifend zwischen den Schülern, sondern vor allen Dingen auch zwischen Schülern und Lehrern gefördert. Hierbei brachten die Kinder ihre ganz eigenen Ideen mit ein, wie diese Zusammenarbeit aussehen soll und wie Lehrerinnen und Lehrer künftig entlastet werden können.

Nach dem Motto „Learning by doing“ wurden die einzelnen Geräte schließlich von ihrem angestammten Platz entfernt und mussten im Anschluss von den Schülern selbständig wieder zusammengeführt werden. Dadurch erlernten die Schüler eine selbstständige Arbeitsweise beim Lösen von Problemen sowie wichtiges, technisches Verständnis. Einfache Probleme, sowohl im Klassenzimmer beim Umgang mit Beamer, Notebook und Dokumentenkamera, als auch im Computerraum, oder auch der Umgang mit dem Whiteboard, können nun von den ausgebildeten Medien-Tutoren gelöst werden.

Am Ende des Workshops konnte jedem der Schülerinnen und Schüler ein wohlverdientes Zertifikat mit der Auszeichnung zum Medien-Tutor überreicht werden. Dieses belegt Verantwortung und technische Kenntnisse und unterstützt die Schülerinnen und Schüler somit bei der späteren Bewerbung bei einem Arbeitgeber.

 

Hier das dazu entstandenen Youtube Video: https://youtu.be/JjsSKkDyK2U

Weil Geld eben nicht alles ist

Public 7. Februar 2019

Die Ludwig-Maximilians-Universität München (LMU) und der Kurort Bad Birnbach führen gemeinsam ein Forschungsprojekt durch, mit dem Ziel, eine Maßnahme zur Betrieblichen Gesundheitsförderung (BGF) für kleine und mittelständische Unternehmen der Region zu entwickeln. Der Zeitrahmen erstreckt sich von Juli 2017 bis Juni 2020. Am Ende der Gesundheitsstudie soll ein Angebot für regionale Betriebe zur betrieblichen Gesundheitsförderung bereitstehen, das zu diesem Zeitpunkt bereits seine Wirkung zeigen wird. Zudem sollen Möglichkeiten zur Förderung durch Krankenkassen erarbeitet werden.

 

Im ersten Schritt wurde von der LMU dazu im Herbst 2017 über eine Online-Befragung ermittelt, welchen Bedarf regionale Betriebe und ihre Beschäftigten an gesundheitsfördernden Maßnahmen haben. Anschließend wurden im Frühjahr 2018 Unternehmen in der Region eingeladen, ihre Mitarbeiter an der neu entwickelten Maßnahme zur Betrieblichen Gesundheitsförderung in Bad Birnbach teilnehmen zu lassen. Der offizielle Start der BGF-Maßnahme fand dann bei einem einwöchigen Aufenthalt im September 2018 in Bad Birnbach statt.

 

Da wir gern sinnvolle Projekte unterstützen, stellte sich garnicht erst die Frage, ob wir teilnehmen.

 

Am vergangenen Donnerstag lud die LMU regionale Arbeitgeber ein, um den aktuellen Stand der Studie zu präsentieren. Neben der Erörterung der Fakten, die die Wirksamkeit der Maßnahme belegten, kamen auch Teilnehmer zu Wort, um über ihre Erfahrungen zu berichten. Unser CEO/CTO M.Sc. Dipl.-Inf. Mike Werner wurde an diesem Abend gebeten, im Rahmen eines Vortrages, eine Zwischenbilanz aus Arbeitgebersicht zuziehen. Dabei ging es darum, die laufende Studie einzuschätzen und diese auf Umsetzbarkeit und Erfolg zu bewerten.

 

Nach einer kurzen Vorstellung der brainchild GmbH erläuterte er zunächst das Angebot der betrieblichen Gesundheitsförderung im Unternehmen, wie z.B. Zuschüsse zu einer Mitgliedschaft im Fitnessstudio oder dem Eintrittspreis in das städtische Schwimmbad. Der überwiegenden Teil seines Vortrages nahm sein Erfahrungsbericht als Teilnehmer der Studie, sowie die positiven Auswirkungen der teilnehmenden brainchild Mitarbeiter ein. Er erörterte zudem den Nutzen des gut strukturierten Maßnahmenpakets von aktiven Einheiten wie Golf, Bogenschießen und Aquafit, über Entspannungseinheiten bis hin zu den Logotherapie-Seminaren. Da jeder etwa ein Drittel seiner Zeit in der Arbeit verbringt, sollte Arbeit über die reine Absicherung des Lebensunterhalts hinausgehen und auch Freude bereiten.

 

“Nur sinnstiftende Arbeit macht dauerhaft glücklich!”

Mike Werner

Bei brainchild achten wir auf die Bedürfnisse jedes Einzelnen. Dazu gehört auch, diese gezielt zu fördern und vor allem dauerhaft gesund zu halten. Dies ist Teil unseres Werteverständnisses und soll die Wertschätzung gegenüber unseren Kollegen zum Ausdruck bringen. Denn „Geld allein macht nicht glücklich“!

Puh, geschafft!

Public 21. Dezember 2018

Für das Jahr 2018 war schnell klar, dass uns alles andere als langweilig werden würde. Rückblickend sind wir stolz auf das, was wir alles erreichen konnten!

In diesem Jahr waren wir wieder fleißig in der Automobilbranche tätig. Wir freuen uns daher sehr, dass unser langjähriger Kunde AVL DiTEST bei der diesjährigen Automechanika gleich in mehreren Kategorien nominiert wurde und in zweien sogar als Sieger hervortrat: Sowohl mit der „akustischen Kamera“ ACAM in der Kategorie „Repair & Diagnostics“ als auch mit dem Multifunktionssensor Multisense 1000 in der Kategorie „Classic Cars Products & Services“ hatte AVL die Nase vorn.

Besonders stolz sind wir jedoch auf die Auszeichnung als „Finalist“ im Bereich Truck Products & Services für den SCR-Manipulations-Detektor,  da wir mit unserer Arbeit an der entsprechenden Diagnosesoftware XDS 1000 einen erheblichen Beitrag zu diesem Erfolg geleistet haben. Daher ist diese Auszeichnung auch für uns ein großes Lob!

Zur Jahresmitte war der Tag gekommen, von dem wir glaubten, wir würden ihn nie erleben: Unter dem Motto „Schöner, schneller, besser“ konnten wir endlich unsere neue Homepage präsentieren! Das Besuchserlebnis sollte vor allem auch für mobile Geräte einwandfrei möglich sein. Euer Feedback hat uns bewiesen, dass die Anstrengungen nicht vergebens waren. Vielen Dank dafür!

Nachdem wir heuer auch in der Finanzbranche und Halbleiterindustrie Fuß gefasst haben, werden wir 2019 unser Engagement in diesen und vor allem im Bereich Flugsimulation weiter ausbauen. Verstärkt werden wir hier in den Bereichen Simulation und Virtual Reality forschen.

Ein Zulieferer der Automobilbranche aus dem benachbarten Österreich errichtet in Mexiko ein neues Werk. Wir wurden Mitte des Jahres damit beauftragt, nicht nur die Software FlowControl entsprechend der Bedürfnisse in Mexiko zu erweitern, sondern zudem neue Produkte im Bereich SCADA zu entwickeln, die die Anbindung der FlowControl ermöglichen und die Bedienung der gesamten Anlage intuitiv und fehlerfrei gestalten. Das sogenannte „Barrel Management System“ erlaubt es z.B. die Füllstände der Fässer von Lackiermaschinen zu überwachen und den Wechsel dieser zu vereinfachen. Aktuell gibt es kein vergleichbares Produkt im Markt. Wir können die Inbetriebnahme im kommenden Jahr kaum noch erwarten.

Trotz des sog. Fachkräftemangels können wir uns freuen, dass unser Team in diesem Jahr wachsen konnte, sodass wir uns nun auf noch mehr kreative Köpfe verlassen können.

Wir verabschieden uns nach einem ereignisreichen Jahr in den verdienten Urlaub, um auch 2019 wieder ausgeruht und voller Tatendrang ans Werk gehen zu können!

Danke an alle, die uns in diesem Jahr unterstützt haben und die wir unterstützen durften. Ihnen, sowie all unseren Kollegen mit ihren Familien wünschen wir frohe und besinnliche Weihnachten sowie einen guten Rutsch ins neue Jahr!

Das Wintersemester hat begonnen!

Public 29. Oktober 2018

Am 1. Oktober hat das Wintersemester 2018 an den deutschen Hochschulen begonnen. Fast 5.000 Studenten darf die Landshuter University of Applied Sciences (UAS) in diesem Semester begrüßen, davon fast 1.300 Studienanfänger sowie 119 Studenten, die mit dem Master Studium beginnen.

Uns ist es wichtig, Fachkräfte aus dem eigenen Nachwuchs heranzuziehen. Darum engagieren wir uns schon seit Jahren auf allen Ebenen der Bildung. Besonderen Fokus legen wir dabei auf die Bereiche, die nicht nur für die Industrie sondern vor allem auch bei uns am meisten benötigt werden, wie zum Beispiel im Bereich Usability Engineering. Um die Studenten optimal auf die Anforderungen ihres zukünftigen Berufslebens vorzubereiten, setzen wir auf ein praxisorientiertes Ausbildungskonzept.

Aus diesem Grund freut sich unser CEO/CTO M.Sc. Dipl.-Inf. Mike Werner sehr, auch in diesem Jahr wieder die Master Studenten der UAS Landshut im Bereich „Mensch-Computer-Interaktion“ unterrichten zu dürfen. Bereits die erste Vorlesung am 24.10.2018 erzeugte eine durchweg positive Resonanz bei den Studenten und war damit auch für uns ein vielversprechender Start in das Semester.

Der Erfolg unserer Partner ist unser größtes Lob

Public 27. September 2018

Wenn gemeinsame Arbeit Früchte trägt, ist das immer ein schönes Gefühl. Noch schöner ist es aber, wenn das Ergebnis der Zusammenarbeit sogar preisgekrönt wird.
Darum freut es uns sehr, dass unser langjähriger Kunde AVL DiTEST bei der Automechanika 2018 gleich in mehreren Kategorien für den begehrten Innovation Award nominiert wurde und diesen in zwei Kategorien sogar gewinnen konnte. Sowohl die innovative „akustische Kamera“ ACAM in der Kategorie Repair & Diagnostics als auch der Mulitfunktionssensor Multisense 1000 in der Kategorie Classic Cars Products & Services konnten die Fachjury überzeugen und gingen so als „Winner“ hervor.
Aber auch in anderen Kategorien waren die innovativen Produkte der AVL DiTEST mit im Rennen: Der PN Detector, ein zukunftsweisendes Modul zur Partikelzählung, war als „Nominee“ im Bereich Repair & Maintenance vertreten und der HV Safety MixedRealtiyGuide, ein interaktives Trainingssystem für E-Mobility Anwendungen, war sogar „Finalist“ in der Kategorie Alternative Drive Systems & Digital Solutions.
Besonders freut uns aber die Auszeichnung als „Finalist“ im Bereich Truck Products & Services für den SCR-Manipulations-Detektor. Dieser ermöglicht eine elektronische Prüfung des Fahrzeugs auf Manipulationen, die eine mechanische Prüfung nicht nur überflüssig macht, sondern auch weitaus sicherer, schneller und genauer arbeitet. Da auch wir mit unserer Arbeit an der zugehörigen Diagnosesoftware XDS 1000 einen erheblichen Beitrag zu diesem Erfolg geleistet haben, ist diese Auszeichnung auch für uns ein großes Lob.
Gleichzeitig sehen wir das aber auch als Ansporn, weiterhin in unserer Zusammenarbeit mit der AVL DiTEST so erfolgreiche Ergebnisse zu erzielen und so gemeinsam die Zukunft der Automobiltechnologie mit zu gestalten.

Schöner, besser, schneller: Unsere neue Website

Public 20. Juli 2018

Endlich ist es soweit! Unsere Website erstrahlt im neuen Design! Öfter fragten wir uns, ob wir diesen Tag wohl je erleben werden. Doch endlich, nach langer und intensiver Arbeit können wir behaupten: „Wir haben es geschafft!“ Es gab viele kleinere und auch größere Probleme, die es zu bewältigen galt. Wir sind sehr stolz, dass wir diese als Team lösen konnten und euch heute unsere neue Homepage präsentieren dürfen!

Von Anfang an war es uns sehr wichtig, eine einfach zu bedienende, übersichtliche Homepage mit ansprechendem Design für jedermann zu schaffen. Vor allem auch für alle mobilen Plattformen wollten wir dasselbe Besuchserlebnis gewährleisten, was sich als größere Herausforderung erwies. Denn jeder soll sich über uns bequem informieren können. Deshalb freuen wir uns, dass ihr euch heute endlich selbst davon überzeugen könnt. Also schaut am besten selbst auf unserer neuen Homepage vorbei und hinterlasst uns euer Feedback oder eure Anregungen.

Und nun wünschen wir viel Spaß beim Durchstöbern unserer neuen Webpräsenz!

2017, was für ein Jahr!?

Public 25. Juni 2018

Mit dem Start von einem neuen Standort aus, begann das Jahr 2017. Mehr als die Hälfte des Jahres waren wir geplagt von technischen Störungen seitens unseres Telekommunikationsanbieters. Zum Glück standen uns unsere Kunden treu zur Seite und haben die teils massiven Ausfälle nicht übel genommen. Trotz alledem erwarteten uns viele spannende Projekte in den unterschiedlichsten Bereichen.

Gemeinsam mit deutschen und einem amerikanischen Partner haben wir mehrere H145 Full Flight Simulatoren (FFS) ausgeliefert und erfolgreich in Betrieb genommen. Deutlich hervorzuheben ist hier die Level D Zulassung des H145 FFS des ADAC, sowie den der finnischen Babcock Scandinavian AirAmbulance (https://www.civilaviation.training/helicopter/coptersafety-h145-ffs/).

Weiterhin konnten wir für verschiedene internationale End-Kunden spezifische Erweiterungen der FlowControl Software ausliefern und in Betrieb nehmen. Den Auftrag für die Entwicklung der Steuerungssoftware FlowControl hatten wir bereits 2013 erhalten. Seither erweitern wir das System kontinuierlich. Der nächste Erweiterungsauftrag steht bereits in den Startlöchern.

In diesem Jahr haben wir unser Engagement in der Automobilbranche weiter ausgebaut. So haben wir mehrere innovative Projekte für einen namhaften deutschen Automobilhersteller und im Bereich der Fahrzeugdiagnose (PKW, LKW, Motorrad) realisiert. Dies werden wir im kommenden Jahr verstärkt weiter verfolgen, um dem steigenden Bedarf Rechnung zu tragen.

2018 werden wir nicht nur unser Engagement im Automobilbereich, sondern insbesondere auch im Bereich Flugsimulatoren weiter ausbauen. Im Bereich der Flugsimulatorentwicklung werden wir uns noch stärker in Richtung ziviler Luftfahrt bewegen.

Da wir jede Menge kreativer Köpfe haben und auch eigene Projekte verfolgen, hoffen wir  im Laufe des nächsten Jahres eine weitere Innovation aus dem Hause brainchild präsentieren zu dürfen, die Groß und Klein, Jung und Alt, viel Freude und kurzweilige Stunden bescheren wird.

Für uns geht nun ein ereignisreiches Jahr zu Ende. Wir gehen in den verdienten Urlaub und starten im neuen Jahr „frisch, fromm, fröhlich, frei“ ;).

Unseren Kollegen und deren Familien, sowie all denen, die uns und die wir tatkräftig unterstützt haben, wünschen wir frohe und besinnliche Weihnachten. Rutscht gesund ins neue Jahr!

FlowControl 1.3 ausgeliefert

System Engineering 23. Juni 2018

2013 wurden wir mit der Entwicklung einer Steuerung für Lackiermaschinen (FlowControl) samt Touch-Bedienung beauftragt. Die Steuerung ist im Wesentlichen für das Mischen flüssiger Komponenten (Lack, Härter, etc.) in Echtzeit verantwortlich. Seither erweitern wir kontinuierlich das System und passen es an die Wünsche der Endkunden an. Bereits 2016 begannen die Vorarbeiten für Version 1.3. Ziel war es, für einen internationalen Automobil-Zulieferer, FlowControl um eine Arbeitsauftragsverwaltung zu erweitern. Die Auftragsverwaltung ist eine separate Software, die auf Windows 10 Tablets eingesetzt wird. Sie kommuniziert mit der FlowControl Maschine, um die aktuell verfügbaren Rezepte abzufragen. Der Benutzer wählt ein Rezept, ergänzt dieses mit den benötigten Auftragsdaten und druckt den Arbeitsauftrag in Form eines Etikettes mit aufgedrucktem DataMatrix Code (Wikipedia DataMatrix-Code). Das Etikett wird anschließend auf Behälter geklebt, die mit der entsprechenden Farbmischung zu befüllen sind. Der Maschinenführer liest den DataMatrix Code mittels eines 2D Barcode-Lesegerätes ein und startet diesen per Knopfdruck. Der Kunde ist mit FlowControl 1.3 nun in der Lage, die Abarbeitung seiner Fertigungsaufträge zu optimieren und Ressourcen effizient zu nutzen. Da der Maschinenführer an der Lackiermaschine nur noch den Arbeitsauftrag einscannen und auf „Start“ drücken muss, werden zudem Fehler durch Fehleingaben vermieden.

Betriebsbesichtigung der Wirtschaftsjunioren

Public 22. Juni 2018

Am vergangenen Mittwoch, den 29. März 2017, durften wir die Wirtschaftsjunioren Rottal-Inn bei uns im Haus begrüßen. Diese sind Unternehmer und Führungskräfte aus dem Landkreis Rottal-Inn (www.wj-rottal-inn.de).

Sie konnten sich in einer kurzweiligen Präsentation über unsere Firma und unsere zahlreiche spannenden Projekte informieren. Im Anschluss konnten sich die 16 Teilnehmer in lockerer Runde, bei erfrischenden Getränken und kleinen Snacks, austauschen und verschiedene Themen weiter vertiefen.

 

Docker Image brainchild/ltj in Version 17.8.8 veröffentlicht

System Engineering, Public 21. Juni 2018

Wir stellen das Docker Image Linux Tomcat Java kostenfrei unter https://hub.docker.com zur Verfügung. brainchild/ltj basiert auf Ubuntu 17.04 und stellt eine Laufzeit Umgebung für Tomcat 8.0.38-2 mit Oracle Java 1.8.0_121-b13 zur Verfügung.

Für diejenigen, die selbst noch Modifikationen vornehmen möchten, sind die Quellen für das Image wie gewohnt auf GitHub zu finden. Wir freuen uns auf euer Feedback und wünschen euch viel Spaß.

Euer brainchild Team

Docker Image brainchild/packagedrone in Version 17.0140.8 veröffentlicht

System Engineering, Public 20. Juni 2018

Wir stellen das Docker Image Eclipse Package Drone kostenfrei unter https://hub.docker.com zur Verfügung. brainchild/pkgdrone basiert auf Ubuntu 17.04 und stellt eine Laufzeit Umgebung für Eclipse Package Drone 0.14.0 mit Oracle Java 1.8.0_121-b13 zur Verfügung.

Für diejenigen, die selbst noch Modifikationen vornehmen möchten, sind die Quellen für das Image wie gewohnt auf GitHub zu finden. Wir freuen uns auf euer Feedback und wünschen euch viel Spaß.

Euer brainchild Team

Letzter Feinschliff am H145FFS

System Engineering 19. Juni 2018

Wir entwickeln gemeinsam mit zwei weiteren renommierten Firmen den sogenannten H145FFS für die ADAC HEMS Academy (www.hems-academy.de) in Bonn Hangelar (näheres dazu siehe “brainchild als Simulationsentwickler für die fliegenden Gelben Engel”).

Nach rund einem Jahr neigt sich das Projekt langsam dem Ende zu. Diese Woche sind wir vor Ort in Bonn Hangelar, um den letzten Feinschliff durchzuführen, bevor die Abnahme (On-Site-Acceptance) durch den Kunden ADAC startet.

Docker Images Odoo (11.0), WJS (10.10.0) und LTJ (18.8.9) veröffentlicht

System Engineering, Public 18. Juni 2018

Seit vielen Jahren engagieren wir uns im Bereich OpenSource. Denn wir sind der Meinung, dass unser Erfolg nur mit Hilfe von Open Source möglich ist. Deshalb wollen wir der Gemeinschaft auch wieder etwas zurückgeben. Darüber berichteten wir bereits hier am 14.02.2017.

Heute freuen wir uns, sowohl Aktualisierungen als auch neue Inhalte präsentieren zu können. Zum einen haben wir Linux Tomcat Java (LTJ) auf die Version 18.8.9 aktualisiert. Zum anderen stellen wir ab sofort auch Docker Images für Odoo und den Windows Jenkins Slave (WJS) kostenfreien zur Verfügung.

Odoo ist ein OpenSource ERP-System, das die Geschäftsprozesse von kleinen und große Unternehmen abdeckt. Das brainchild Odoo Docker Image ist nicht nur zur einfacheren Handhabung während der Entwicklung von Odoo-Anwendung entwickelt worden (es unterstützt z.B. auch Remote-Debugging), sondern auch für den Produktiveinsatz, um den Rollout neuer Odoo-Versionen zu vereinfachen.

Jenkins ist ein sog. Continuous Integration Server. Dieser wird in vielen Hightech Firmen im Rahmen der Entwicklung von Software-Produkten eingesetzt, um diese vollautomatisiert zu bauen und auszuliefern. Das Docker Image Windows Jenkins Slave (WJS) stellt einen auf Microsoft Windows basierten Jenkins Build Slave zur Verfügung. Es wird dazu genutzt den Aufwand für Installation und Betrieb von Windows basierten Jenkins Build Slaves auf ein Minimum zu reduzieren.

All unsere Änderungen und Aktualisierungen findet ihr unter https://github.com/brainchild-gmbh/docker-images.

Für diejenigen, die selbst noch Modifikationen vornehmen möchten, sind die Quellen für das Image wie gewohnt auf GitHub zu finden. Wir freuen uns auf euer Feedback und wünschen euch viel Spaß.

Euer brainchild Team

„go-digital“ – Vom Bund gefördert von brainchild unterstützt

IT-Management 17. Juni 2018

IT-Sicherheit und Datenschutz gehören in die Hände von Spezialisten

In Deutschland gibt es ca. 2,4 Millionen kleine und mittlere Unternehmen (KMU). Rund 2 Millionen gelten als Kleinstunternehmen. Mit 99,3% stellen KMU das Rückgrat der deutschen Wirtschaft dar. Deshalb  ist es umso bedenklicher, dass die IT eines Großteils dieser Unternehmen den Anforderungen der heutigen Zeit  nicht genügt und schlichtweg veraltet ist. Daraus ergibt sich nicht nur für das jeweilige Unternehmen ein enormes Risiko bezogen auf IT-Angriffe, sondern für die gesamte deutsche Wirtschaft.

Aus genau diesem Grund hat das Bundeswirtschaftsministerium (BMWi) das Förderprogramm „go-digital“ aufgelegt. In diesem Rahmen werden bis zu 75% der Kosten für Beratung, Analyse und Implementierung von IT-Projekten übernommen.

Von den rund 90.000 IT-Dienstleistungsunternehmen in Deutschland sind allerdings nur verhältnismäßig wenige in der Lage, veraltete IT so zu modernisieren, dass diese den Anforderungen der Cyber-Sicherheit genügt. Dies liegt in der Regel darin begründet, dass sich diese Unternehmen als Vertragspartner meist darauf spezialisiert haben, Software und Hardware, wie z.B. Virenlösungen und Firewalls, zu verkaufen. Die Analyse der kundenspezifischen Bedürfnisse und  der Ausarbeitung und Umsetzung von IT- und Sicherheitskonzepten gehört meist nicht zu deren Kernkompetenzen.

Wir legen im Bereich IT-Management schon seit jeher den Schwerpunkt auf ausgefeilte und vor allem auf den jeweiligen Kunden zugeschnittene IT- und Sicherheitskonzepte. Da brainchild kein Vertragspartner eines Software-oder Hardware -Herstellers ist, bekommen unsere Kunden nicht die Produkte, mit denen sich das meiste Geld verdienen lässt, sondern die jeweils beste und für den Einzelfall maßgeschneiderte Lösung.

Um Unternehmen bei der Modernisierung ihrer IT zu unterstützen, bieten wir nicht nur kostenfreie Beratungsgespräche an, sondern helfen auch bei der Beantragung von  Fördermitteln und der Analyse und Implementierung von  IT-Projekten.

Gitflow – Der Blödmann braucht Regeln

System Engineering 16. Juni 2018

Einführung

Git ([ɡɪt], engl. Blödmann) ist ein quelloffenes und frei erhältliches Versionsverwaltungssystem. Wie Subversion (SVN) einst das Concurrent Version System (CVS) ablöste, gilt SVN nun schon einige Jahre als ausrangiert. Nicht weil git hipp ist, sondern essentielle Vorteile gegenüber SVN bietet. So sind etwa Änderungen am Repository (z.B. commit) solange lokal, bis diese explizit in das entfernte Repository übertragen werden (push). Somit muss ein Entwickler nicht erst eine stabile Version seiner Software schaffen, um Änderungen in das Repository zu übernehmen, sondern kann nun jede Änderung per commit festschreiben, ohne das entfernte Repository zu beeinflussen und dadurch evtl. andere Entwickler zu stören.

Freiheit bedingt aber immer auch feste Regeln, damit ein Miteinander reibungslos funktioniert. Dieser Beitrag stellt ein Vorgehensmodell vor, das den erfolgreichen Einsatz von git in Entwicklungsprojekten, sicherstellt.

Gitflow

Gitflow basiert auf einem zentralen Repository. Es dient als Kommunikationshub für alle Entwickler. Gitflow definiert ein striktes Branching-Modell, bei dem jedem Zweig eine feste Rolle obliegt.

Master-Branch

Der Master-Branch wird ausschließlich zur Verfolgung von Releases und Zwischenversionen verwendet. Dies ermöglicht jederzeit, ausgelieferte Software-Stände einfach zu rekonstruieren.

Develop-Branch

Dieser Zweig dient zur Integration der laufenden Entwicklung. Versionen einer Software, die nicht zu einem offiziellen Release gehören, werden im Develop-Branch festgeschrieben.

Feature-Branch

Jedes Feature sollte in einem eigenen Feature-Branch entwickelt werden. Es ermöglicht, Features unabhängig von einander zu realisieren. Ein Feature zweigt von dem Stand des Develop-Branches ab, auf dem das Feature basieren soll. Ist die Entwicklung abgeschlossen, wird der Zweig in den Develop-Zweig überführt.

Release-Branch

Damit eine Auslieferung die laufende Entwicklung nicht blockiert, wird der entsprechende Entwicklungsstand auf den Release-Zweig übernommen. Dort werden nur noch abschließende Arbeiten, wie Fehlerbehebung, Dokumentation und sonstige auslieferungsorientierte Aufgaben durchgeführt. Sind diese abgeschlossen, wird der Stand in den Master-Branch übernommen. Zusätzlich wird der Develop-Branch aktualisiert, damit die Änderungen in die aktuelle Entwicklung einfließen.

Hotfix-Branch

Müssen schnell Korrekturen an Auslieferungen vorgenommen werden, sind diese auf dem HotFix-Zweig durchzuführen. Dies begünstigt, dass der restliche Workflow nicht gestört wird. Auch ist es nicht nötig erst einen Release-Zyklus abzuwarten. Nach Fertigstellung der Änderungen, werden diese ebenfalls in den Develop-Zweig übernommen.

Parametrierbare Tests mit CppUnit

System Engineering 15. Juni 2018

Es gibt einige C++ Unit Testing Frameworks. Das wohl bekannteste und meistverwendete ist CppUnit. Leider bietet es bei weitem nicht den Funktionsumfang wie sein Vorbild JUnit, was zum Teil auch mangelnder Eigenschaften der Programmiersprache C++, wie z.B. Reflection, geschuldet ist. Ein solches Feature ist z.B. die Erstellung parametrierbarer Unit Tests. Mit JUnit lässt sich solch ein Test relativ einfach implementieren. Es genügt die Unit Test Klasse mit @RunWith(Parameterized.class) zu annotieren, sowie eine Methode, annotiert mit @Parameters, welche die Testdaten als Collection<Object[]> bereitstellt, zu implementieren.

Wie eingangs erwähnt unterstützt C++ einige nützliche Eigenschaften moderner Programmiersprachen nicht, darunter auch Annotations. Dies ist zwar kein Grund parametrierbare Tests nicht zu unterstützen, dennoch hat man es bislang versäumt CppUnit mit der Unterstützung für parametrierbare Tests zu versehen. Dieser Artikel stellt eine Lösung vor, wie parametrierbare Tests für das CppUnit Framework erstellt werden können, die annähernd den selben Komfort wie jene mit JUnit bieten.

Parametrieren bedeutet in diesem Kontext, dass ein und dieselbe Test­-Methode mit den einzelnen Elementen eines Parametersatzes aufgerufen wird. Dies bietet sich dann an, wenn die Implementierung einzelner Tests, bis auf bestimmte Parameter, gleich ausfällt.

Für diesen Zweck haben wir CppUnit um diverse Makros, die zur Definition von Test-Suiten verwendet werden, erweitert. Die Makros setzen voraus, dass zwei Methoden, samt Implementierung, bereitgestellt werden

[c]
static std::vector parameters();
void testWithParameter(ParameterType& parameter);
[/c]

CPPUNIT_PARAMETERIZED_TEST_SUITE

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE ( TestFixtureType, ParameterType )
[/c]

Das Makro erweitert CPPUNIT_TEST_SUITE um den Parameter ParameterType. Dieser legt den Typ der Parameter fest.

Beispiel:

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE ( MyTest, std::string )
[/c]

CPPUNIT_PARAMETERIZED_TEST_SUITE_END

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE_END
[/c]

Dieses Makro wurde lediglich der Konsistenz halber eingeführt. Es entspricht dem Makro CPPUNIT_TEST_SUITE_END.

CPPUNIT_PARAMETERIZED_TEST_SUITE_REGSITRATION

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE_REGISTRATION ( TestFixtureType, ParameterType )
[/c]

Dieses Makro erweitert CPPUNIT_TEST_SUITE_REGISTRATION um den Parameter ParameterType. Es stellt die Implementierung der Testablauflogik zur Verfügung.

Beispiel:

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE_REGISTRATION ( MyTest, std::string )
[/c]

Beispiel

ParameterizedTest.hpp

[c]
class ParameterizedTest: public CPPUNIT_NS::TestFixture {
public:
ParameterizedTest();
~ParameterizedTest();
void setUp();
void tearDown();
/**
* Retrieves the test parameters. Each entry is passed as a single parameter * to a test.
*
* @return the parameters list.
*/
static std::vector parameters();
/**
* This method is called with a single test parameter.
*
* @param parameter The parameter to be used for the test.
*/
void testWithParameter(std::string parameter);
void testOrdinaryTest();
private:
CPPUNIT_PARAMETERIZED_TEST_SUITE(ParameterizedTest, std::string);
CPPUNIT_TEST(testOrdinaryTest);
CPPUNIT_PARAMETERIZED_TEST_SUITE_END();
};
[/c]

ParameterizedTest.cpp

[c]
CPPUNIT_PARAMETERIZED_TEST_SUITE_REGISTRATION(ParameterizedTest, std::string);
ParameterizedTest::ParameterizedTest() {
// empty
}
ParameterizedTest::~ParameterizedTest() {
// empty
}
void ParameterizedTest::setUp(){
// empty
}
void ParameterizedTest::tearDown(){
// empty
}
static std::string buildParameter(size_t testNumber){ std::ostringstream result;
result &lt;&lt; “Parameter ” &lt;&lt; testNumber;
return result.str();
}
std::vector ParameterizedTest::parameters(){
std::vector result; for(size_t i = 0; i &lt; 3; i++){
result.push_back(buildParameter(i)); return result;
}
}
void ParameterizedTest::testWithParameter(std::string param){
CPPUNIT_ASSERT_EQUAL(buildParameter(m_currentTestNumber), param);
}
/**
* This test should be called after all parameterized tests.
*/
void ParameterizedTest::testOrdinaryTest(){
CPPUNIT_ASSERT_EQUAL(m_parameters.size(), m_currentTestNumber);
}
[/c]

Diese Unit Test Klasse definiert zwei Test-­Methoden: testWithParameter und testOrdinaryTest. testWithParameter wird mit einem Parameter vom Typ std::string aufgerufen. Diese werden über die Methoden parameters bereitgestellt. testOrdinaryTest soll verdeutlichen, dass neben parametrierten Tests auch “herkömmliche” Tests definiert und ausgeführt werden können. Dieser Test prüft ob der aktuelle Test­zähler der Anzahl der Parameter entspricht.

Hinweis:

Die o.g. Makros definieren interne Variablen und Methoden, u.A. auch m_currentTestNumber. Diese Variable beginnt bei 1 an zu zählen und wird nach jedem parametrierten Test inkrementiert. Sie gibt also die Nummer des aktuellen Tests an.

Es folgt der gesamte Inhalt der Datei Parameterized.hpp

[c]
#ifndef PARAMETERIZED_HPP_
#define PARAMETERIZED_HPP_
&nbsp;
#include &lt;cppunit/extensions/HelperMacros.h&gt;
&nbsp;
/**
* Extends the macro CPPUNIT_TEST_SUITE in order to easily specify a parameterized
* unit test.It expects the following methods to be specified by the implementing
* unit test:&lt;br&gt;
* &lt;ul&gt;
* &lt;li&gt;&lt;code&gt;static std::vector&lt;ParameterType&gt; parameters();&lt;/code&gt;&lt;/li&gt;
* &lt;li&gt;&lt;code&gt;void testWithParameter(ParameterType&lt;/code&gt;&lt;/li&gt;
* &lt;/ul&gt;
*
* @param ATestFixtureType Type of the test case class.
* @param ParameterType the type of a single parameter.
*
* see CPPUNIT_TEST_SUITE
*/
#define CPPUNIT_PARAMETERIZED_TEST_SUITE( TestFixtureType, ParameterType )
void __test();

static std::vector&lt;ParameterType&gt; m_parameters;
static size_t m_currentTestNumber;

CPPUNIT_TEST_SUITE(TestFixtureType);

m_parameters = parameters();
m_currentTestNumber = 0;

for (size_t i = 0; i &lt; m_parameters.size(); i++) {
std::ostringstream testName;
testName &lt;&lt; “testWithParameter: ” &lt;&lt; i;

CPPUNIT_TEST_SUITE_ADD_TEST(
( new CPPUNIT_NS::TestCaller&lt;TestFixtureType&gt;(
context.getTestNameFor( testName.str() ),
&amp;TestFixtureType::__test,
context.makeFixture() ) ));
}
&nbsp;
/**
* Used to declare the end of a parameterized test suite.
*/
#define CPPUNIT_PARAMETERIZED_TEST_SUITE_END CPPUNIT_TEST_SUITE_END
&nbsp;
/**
* Extends the macro CPPUNIT_TEST_SUITE_REGISTRATION in order to provide
* necessary framework code in implementation file. This code actually implements
* the parameterization behavior.
*/
#define CPPUNIT_PARAMETERIZED_TEST_SUITE_REGISTRATION( TestFixtureType, ParameterType )
CPPUNIT_TEST_SUITE_REGISTRATION(TestFixtureType);

std::vector&lt;ParameterType&gt; TestFixtureType::m_parameters;
size_t TestFixtureType::m_currentTestNumber;

void TestFixtureType::__test(){

testWithParameter(m_parameters.at(m_currentTestNumber++));
}
#endif /* PARAMETERIZED_HPP_ */
[/c]

Remote Method Call – Dialog der Objekte

System Engineering 13. Juni 2018

In komplexen Software-Systemen wird ziemlich schnell die Frage aufgeworfen, “Welche Technologie soll für die Kommunikation zwischen Server-Objekten und deren Repräsentanten auf dem Client eingesetzt werden?”. Dabei stehen zahlreiche Möglichkeiten zur Auswahl. Wenn es aber darum geht, eine vollständig transparente Abbildung des Objektbaumes auf dem Client zu realisieren, sodass sich dieser tatsächlich so verhält als würde er auf dem Client beheimatet sein, bleibt die Frage in der Regel unbeantwortet. Es werden dann Technologien eingesetzt, die annähernd die Anforderungen decken, der Rest wird durch entsprechende Intelligenz in der Anbindung realisiert. Allerdings sind diese Lösungen dann für den Anwendungsfall spezifisch. Seit kurzem schickt sich ein neues Framework an, genau diese Lücke zu schließen: Remote Method Call.

Hintergrund

Das EU-Forschungsprojekt OpenNode [2], beschäftigt sich im Themengebiet Smart Grid, mit der letzten Meile im Energienetz. Genauer gesagt mit neuen Konzepten zur Automatisierung der Transformatorenhäuschen, den so genannten Secondary Substations, welche die Haushalte direkt mit Strom beliefern. Sie dienen dazu, die Energie, die zur Übertragung über lange Strecken auf eine, für diesen Zweck effizientere Spannung hochtransformiert wurde, wieder auf 230 Volt herunter zu transformieren und den Verbrauchern ausfallsicher zur Verfügung zu stellen. Dazu dienen im Wesentlichen mehrere Transformatoren und Elektronik zur Überwachung und Lastverteilung. Künftig sollen diese Stationen an die Energieversorger angeschlossen werden, sodass diese direkt mit ihnen Daten austauschen und kontrollierend einwirken können. Weiterhin werden die Secondary Substations als Datensammler für Energiedaten der Haushalte ausgebaut, sodass wir langfristig unsere Stromrechnung monatlich, nach dem tatsächlichen Verbrauch bezahlen werden. Dazu kommuniziert das Trafohäuschen mit jedem einzelnen, intelligenten Stromzähler (Smart Meter) der Haushalte, basierend auf Powerline Communication, also Datenaustausch über das Energienetz selbst.

Die Mission

Im Rahmen des Projektes wird ein Prototyp eines Embedded Servers realisiert, der Secondary Substation Node (SSN). Dieser dient als Bindeglied zwischen den  Supervisory Control and Data Acquisition (SCADA) [3] Systemen der Energieversorger,  den Geräten und Anlagen innerhalb des Trafohäuschens, sowie den einzelnen Stromzählern der Haushalte. Dazu finden vielfältige Kommunikationstechnologien ihre Anwendung, wie IEC60870-104 [4] zur Anbindung der SCADA Systeme und der Automatisierungstechnik, DLMS/COSEM [5] als Datenträger der Energiedaten der Smart Meter, PRIME [6] als Powerline basiertes Kommunikationsprotokoll, uvam.

Man hat sich sehr früh im Projekt entschieden, weitestgehend offene Technologien, sowohl für das Betriebssystem (Ubuntu Server), als auch zur Entwicklung der Software (Java, OSGi, Web-Services), zu verwenden.

Der Server hält permanent eine Repräsentation der Prozessdaten als IEC61850 [7] basiertes Datenmodell für den Zugriff durch Applikationen auf dem SSN, die Mess-, Steuer- und Regelungsaufgaben wahrnehmen und für die entfernten SCADA Systeme, welche die Prozesshoheit besitzen, bereit.

Zur einfachen Visualisierung der aktuellen Prozessdaten und für Diagnosezwecke während der Entwicklung, sollte ein “kleines” Werkzeug realisiert werden, das den direkten Einblick in das IEC61850 basierte Java Objektmodell auf dem SSN, mit der Möglichkeit, Messwerte grafisch darzustellen, erlaubt. Die Software auf dem SSN besteht dabei aus einer Vielzahl OSGi-Bundels, die in einer Equinox [8] Laufzeitumgebung betrieben werden.

Ziel war es möglichst die gleiche Repräsentation des Objektmodells innerhalb des Werkzeuges zu verwenden, wie sie auf dem Server zu finden ist. Dadurch wird nicht zu letzt die Austauschbarkeit der Kommunikationsanbindung an das Datenmodell gewährleistet. Mal wird das Modell auf dem Client betrieben, mal soll via Netzwerk auf das Modell des SSN zugegriffen werden.

Abb. 1 – Benachrichtigung in der Objekthirarchie

Das Objektmodell ist in Abbildung 1 skizziert. Es besteht aus einzelnen Knoten, die in einer Eltern-Kind-Beziehung stehen. Andere Knoten erlaubt es, Listener zu registrieren, die über Veränderungen an dem Objekt oder einem seiner Kinder informieren. Das bedeutet: Wird ein Knoten modifiziert, meldet er dies seinem Eltern-Knoten und allen Listenern, die auf diesem Knoten registriert sind. Der Eltern-Knoten meldet das Ereignis wiederum seinem Eltern-Knoten und allen Listenern, die auf ihm registriert sind. Der Vorgang wird so lange fortgeführt, bis das Ereignis am obersten Eltern-Knoten angekommen ist. Damit haben Anwendungen die Möglichkeit, auf dedizierten Knoten – oder irgendwo in der Hierarchie darüber – zu horchen, um so über Änderungen an untergeordneten Knoten informiert zu werden.

Das Problem

Es galt nun, dieses Modell auf dem SSN via Netzwerk auf einem Client in dem Visualisierungswerkzeug zu nutzen und das möglichst so, dass es sich genauso wie auf dem Server verhält. Selbstverständlich denkt man bei einem objektbasierten Zugriff auf entfernte Objekte an Remote Method Invocation (RMI) [9].

Es hat sich aber schnell herausgestellt, dass RMI den Herausforderungen bei weitem nicht gewachsen war. Es ist zwar prinzipiell einfach zu verwenden, man kann relativ schnell entfernte Objekte anbinden, hat aber eine Reihe von Nachteilen, die es unmöglich machen, ein Objektmodell, wie es beschrieben wurde, wirklich völlig transparent anzubinden.

Es genügt nicht, einen Methodenaufruf an das entfernte Objekt zu delegieren und das Ergebnis wieder zum Client zurück zu senden. Ferner müssen Events, die durch Änderung bei einem der Teilnehmer hervorgerufen wurden ebenfalls bei allen anderen Teilnehmern propagiert werden. D.h. jeder der Teilnehmer benötigt potentiell Zugriff auf den anderen.

Konkreter gesagt: Registriert z.B. Der Client einen Listener auf einem Objekt, muss dieser letztendlich auf dem Server-Objekt registriert werden. Wird ein Event gefeuert, wird eben dieser Listener auf dem Server-Objekt benachrichtig. D.h. Diese Methode wird aufgerufen, was zur Folge hat, dass dieser Aufruf zurück zum Client delegiert wird, um den tatsächlichen Listener zu benachrichtigen. Das erfordert also eine bidirektionale Kommunikation zwischen Server-Objekten und deren Repräsentanten auf dem Client.

RMI kann das nicht leisten. Es wird EIN Objekt von der Server-Anwendung bereitgestellt, das mittels eines eindeutigen Namens adressiert wird. Ruft der Client eine Methode auf dem Objekt auf, wird dieser Aufruf via Netzwerk an das Server-Objekt geschickt, ausgeführt und das Ergebnis an den Aufrufer zurückgeleitet. Die eigentlichen Nutzdaten, also Übergabeparameter der Methode und der Return Value, bzw. die Exception, im Falle eines Fehlers, wird mittels Serialisierung [10] in einen Binärstrom codiert und vom Empfänger wieder decodiert. Damit werden diese Objekte kopiert. Es besteht keine Verbindung mehr zu dem ursprünglichen Objekt.

Ein zweiter wesentlicher Aspekt bei RMI ist, dass Methodenaufrufe ausschließlich an Server-Objekte gerichtet werden können. Damit der Server eine Method, z.B. bei den genannten Listenern, aufrufen kann, müssen die Listener via RMI zur Verfügung gestellt werden. der Server muss diese dann explizit Adressieren um eine Verbindung zu den Listenern herstellen zu können. Es muss zusätzliche Intelligenz in Client und Server implementiert werden, damit man annähernd das genannte Verhalten realisieren kann.

Der dritte essentielle Haken an RMI ist, dass mit einer Verbindung immer nur ein einziges Objekt für entfernte Zugriffe zur Verfügung steht. Will man also auf jedem Objekt in einen Objektbaum mit mehreren tausend Objekten entfernte Methoden aufrufen, benötigt man ebenso viele Verbindung zu den Server-Objekten und bei RMI nochmal genauso viele Namen, um diese Objekte überhaupt ansprechen zu können. Bei einer bidirektionalen Kommunikation müssen dann nochmal Verbindungen mit der gleichen Anzahl in der anderen Richtung verwaltet werden. Bei einem Objektmodell mit über 3000 Knoten, wie es aktuell bei dem SSN vorliegt, würden über 6000 Verbindungen auf Client und Server benötigt.

Die Lösung

Wir bei brainchild haben nicht lang Überlegt und ein OpenSource-Projekt daraus gemacht, das wir mit eigenen Mitteln realisieren, um diese Lücke zu schließen und eine frei zugängliche Lösung anzubieten: Remote Method Call [11].

Der Name Remote Method Call geht auf eine Entwicklung von Adam Bien von vor über einem Jahrzehnt zurück. Er hatte damals im Java Magazin über die damaligen Probleme von RMI – man musste damals z.B. noch den RMI Compiler bemühen, um den Kommunikations-Code zu generieren – berichtet und eine passende Lösung präsentiert. Allerdings war das damalige RMC funktional identisch zum Sun RMI.

Was ist nun an unserem RMC anders?

  1. Man kann mit nur zwei Zeilen Code auf Client und Server eine Verbindung zwischen zwei Objekten herstellen.
  2. Es erweitert die Konventionen von RMI
    • Objekte bzw. Interfaces, die für Remote-Zugriffe zur Verfügung stehen sollen, müssen entweder java.rmi.Remote implementieren oder mit der Annotation de.brainchild.rmc.Remote versehen sein.
    • Alle Objekte, die übertragen werden, also Parameter und Rückgabewerte, müssen serialisierbar sein, siehe [10].
    • Methoden können explizit vom Remote-Zugriff ausgenommen werden, entweder indem sie mit der Annotation de.brainchild.Local markiert werden, oder in dem man diese Methoden in einer Komma getrennten Liste der System-Property de.brainchild.rmc.executeLocal zuweist.
    • Im Gegensatz zu RMI ist RMC nicht ausschließlich auf die Kommunikation via Sockets beschränkt. Es ist vielmehr völlig unabhängig vom Übertragungsmedium. Es ist sehr einfach andere Kommunikationsmedien, wie z.B. Busse oder serielle Medien anzubinden. Dazu muss nur eine Klasse vom Typ de.brainchild.rmc.ConnectionFactory bereit gestellt werden.
    • In einem RMC Kommunikationsszenarium gibt es einen Server und beliebig viele Clients. Der Server exportiert das zentrale Objekt, z.B. Eine Factory, um an das Datenmodell zu gelangen, bzw. das Datenmodell selbst – was genau, ist anwendungsspezifisch. Der Client bindet das entsprechende Interface an das Server-Objekt.

Und wie funktioniert RMC?

Abb. 2 – Kommunikation zwischen lokalem- und Remote- Objektbaum via RMC

Abbildung 2 skizziert den Aufbau von RMC. Jedes entfernte Objekt wird vom RMC-Framework mit einer Hülle versehen, dem de.brainchild.rmc.RemoteObject. Diese Hülle ist verantwortlich für das Delegieren entfernter Aufrufe und bedient sich dabei einer de.brainchild.Connection, die mittels der de.brainchild.rmc.ConnectionFactory erzeugt wird. Außerdem nimmt diese Hülle auch die Methodenaufrufe entgegen, führt sie auf dem entsprechenden Zielobjekt aus und sendet das Ergebnis, Rückgabewerte oder Exception, zurück an den Aufrufer. Werden nun Parameter oder Rückgabewerte übertragen, die ebenfalls als java.rmi.Remote, bzw. de.brainchild.rmc.Remote, gekennzeichnet sind, registriert das empfangende RemoteObject sie als solche und dekoriert sie ebenfalls als RemoteObject. Damit stehen sie wiederum für entfernte Aufrufe zur Verfügung. Dem eigentlichen, empfangenden Zielobjekt, z.B. beim Registrieren eines Listeners, wird das stellvertretende RemoteObject übergeben. Ruft dieses nun eine Methode auf dem Objekt auf, wie z.B. die des Listeners, wird der Aufruf an das Zielobjekt übertragen, womit das “Spiel” von vorn beginnt. Die ganze Magie im Hintergrund der Hülle wird mittels Dynamic Proxies [12] realisiert.

Referenzen

[1] https://brain-child.de

[2] https://www.opennode.eu

[3] https://de.wikipedia.org/wiki/Supervisory_Control_and_Data_Acquisition

[4] https://de.wikipedia.org/wiki/IEC_60870

[5] https://www.dlms.com

[6] https://www.iberdrola.es/webibd/corporativa/iberdrola?IDPAG=ENWEBPROVEEBASDOCCONT

[7] https://de.wikipedia.org/wiki/IEC_61850

[8] https://www.eclipse.org/equinox

[9] https://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

[10] https://download.oracle.com/javase/7/docs/technotes/guides/serialization/index.html

[11] https://sourceforge.net/p/jrmc/home/Home/

[12] https://download.oracle.com/javase/7/docs/technotes/guides/reflection/proxy.html

Studienbeginn Mensch-Computer-Interaktion

Public 24. Oktober 2017

Das Wintersemester 2017 hat am 2. Oktober begonnen. An der Landshuter University of Applied Sciences studieren in diesem Semester mehr als 5.100 Studenten, davon 1.100 Studienanfänger, sowie 125 Studenten, die mit dem Master Studium beginnen.

Gerade bei der Ausbildung der Master-Studenten engagieren wir uns schon seit Jahren, insbesondere im Bereich Usability Engineering. Der Mangel an Fachkräften in diesem Bereich ist enorm. Dazu kommt meist ein theoriezentriertes Ausbildungskonzept. Daher haben wir uns zur Aufgabe gemacht, vor allem die Praxis in die Lehre einfließen zu lassen.

Zusammen mit unserem CEO/CTO M.Sc. Dipl.-Inf. Mike Werner, erwartet die Master Studenten mit dem Schwerpunkt HCI (Mensch-Computer-Interaktion) eine spannende und informative Vorlesungsreihe.