Die Programmiersprache C++ gehört immer noch zu den wichtigsten Programmiersprachen überhaupt. Gerade im Embedded Bereich vollzieht sich langsam die Abkehr von C zu C++ und ist dort alternativlos. Es hatte jedoch jahrelang den Anschein, als würde diese Sprache seit Jahren nicht weiterentwickelt und von den Features und Ausdrucksmöglichkeiten hinter neueren Sprachen zurückzufallen. In diesem Vortrag zeige ich an Codebeispielen, welche Revolution tatsächlich seit C++11 stattgefunden hat und dass die Sprache keinesfalls mehr mit der zu vergleichen ist, die man vielleicht vor Jahren kennen (und vielleicht hassen) gelernt hat. Die Umgestaltung der Sprache ist dabei keineswegs abgeschlossen sondern zeigt weitere, vielversprechende Konzepte am Horizont.
Die Programmiersprache C++ gehört immer noch zu den wichtigsten Programmiersprachen überhaupt. Gerade im Embedded Bereich vollzieht sich langsam die Abkehr von C zu C++ und ist dort alternativlos. Es hatte jedoch jahrelang den Anschein, als würde diese Sprache seit Jahren nicht weiterentwickelt und von den Features und Ausdrucksmöglichkeiten hinter neueren Sprachen zurückzufallen. In diesem Vortrag zeige ich an Codebeispielen, welche Revolution tatsächlich seit C++11 stattgefunden hat und dass die Sprache keinesfalls mehr mit der zu vergleichen ist, die man vielleicht vor Jahren kennen (und vielleicht hassen) gelernt hat. Die Umgestaltung der Sprache ist dabei keineswegs abgeschlossen sondern zeigt weitere, vielversprechende Konzepte am Horizont.
Der erste Workshop-Teil unserer JavaScript Task Force bei mindmatters in Hamburg.
Es wird zunächst ein etwas weiter gefasster Ausblick geworfen auf die aktuelle Bedeutung von JavaScript in der Webentwicklung.
Die zweite Hälfte der Präsentation steigt in den technischen Aspekt des Workshops ein, indem sie typische Stolpersteine in JavaScript sowie das Code-Quality-Tool JSLint vorstellt.
Das lustige Überlebenshandbuch für JavaScriptBenjamin Schmid
Mit Web 2.0 hält auch JavaScript Einzug in den Alltag des Java-Entwicklers. Einerseits glänzt JavaScript mit erlesenen ‚Good Parts’, andererseits warten befremdlichen Spracheigenheiten und puristische Entwicklungsmittel. Mit einem zwinkernden und einem ernsten Auge berichten wir Kurioses und Tückisches aus der Praxis und geben Schützenhilfe für die erfolgreiche Besiedelung dieser neuen Welt.
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Übersetzen alter Arcade-Spiele in JavaScriptnorbert_kehrer
Folien zum Vortrag auf dem VCFE 2015. Es wird gezeigt, wie klassische 6502-basierende Videospiele automatisch in JavaScript übersetzt werden können. Der Übersetzungsprozess und die Optimierungsmöglichkeiten sind überraschend herausfordernd. Nach dem Hinzufügen der spezifischen Grafikausgabe erhält man in modernen Browsern ausführbare originalgetreue Videospiele.
Mit Java 8 haben endlich Lambdas in den Sprachumfang von Java Einzug gehalten. Mittels Lambdas lassen sich viele Probleme kurz und prägnant ausdrücken. Vorliegende Auskopplung aus Handouts zur Vorlesung Programmieren I führt Lambdas und Streams ein und erläutert den Einsatz an vielen kleineren Beispielen.
Este documento parece ser sobre una universidad estatal a distancia. Menciona el nombre de Jeison José Corrales García y el año 2010. También incluye los títulos "Esta es la Metáfora del Multimedio" y "Contenido I" y "Contenido II", lo que sugiere que puede ser sobre el uso de medios múltiples o multimedia en la educación.
Pepe perdió su cabello con el tiempo a pesar de probar numerosas pomadas y remedios caseros. Esto le hizo perder su buen humor. Sin embargo, su esposa Ana tuvo la idea de ponerle abono en la cabeza, lo que hizo que le creciera una mata de hierba. Pronto, otros vecinos empezaron a cultivar hierba y flores en sus cabezas también. El único problema era que los animales querían comérselas cuando iban al campo.
Este documento define el culturismo como un deporte basado en ejercicio intenso y anaeróbico que generalmente involucra el levantamiento de pesas con el objetivo de desarrollar un cuerpo muscularmente definido y voluminoso. Explica que existen dos enfoques principales: definir los músculos o aumentar su volumen. Además, señala que alcanzar el agotamiento muscular, conocido como "fallo muscular", es la forma más efectiva de trabajar los músculos, ya que provoca microdesgarros fibrilares que luego se re
Der erste Workshop-Teil unserer JavaScript Task Force bei mindmatters in Hamburg.
Es wird zunächst ein etwas weiter gefasster Ausblick geworfen auf die aktuelle Bedeutung von JavaScript in der Webentwicklung.
Die zweite Hälfte der Präsentation steigt in den technischen Aspekt des Workshops ein, indem sie typische Stolpersteine in JavaScript sowie das Code-Quality-Tool JSLint vorstellt.
Das lustige Überlebenshandbuch für JavaScriptBenjamin Schmid
Mit Web 2.0 hält auch JavaScript Einzug in den Alltag des Java-Entwicklers. Einerseits glänzt JavaScript mit erlesenen ‚Good Parts’, andererseits warten befremdlichen Spracheigenheiten und puristische Entwicklungsmittel. Mit einem zwinkernden und einem ernsten Auge berichten wir Kurioses und Tückisches aus der Praxis und geben Schützenhilfe für die erfolgreiche Besiedelung dieser neuen Welt.
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Übersetzen alter Arcade-Spiele in JavaScriptnorbert_kehrer
Folien zum Vortrag auf dem VCFE 2015. Es wird gezeigt, wie klassische 6502-basierende Videospiele automatisch in JavaScript übersetzt werden können. Der Übersetzungsprozess und die Optimierungsmöglichkeiten sind überraschend herausfordernd. Nach dem Hinzufügen der spezifischen Grafikausgabe erhält man in modernen Browsern ausführbare originalgetreue Videospiele.
Mit Java 8 haben endlich Lambdas in den Sprachumfang von Java Einzug gehalten. Mittels Lambdas lassen sich viele Probleme kurz und prägnant ausdrücken. Vorliegende Auskopplung aus Handouts zur Vorlesung Programmieren I führt Lambdas und Streams ein und erläutert den Einsatz an vielen kleineren Beispielen.
Este documento parece ser sobre una universidad estatal a distancia. Menciona el nombre de Jeison José Corrales García y el año 2010. También incluye los títulos "Esta es la Metáfora del Multimedio" y "Contenido I" y "Contenido II", lo que sugiere que puede ser sobre el uso de medios múltiples o multimedia en la educación.
Pepe perdió su cabello con el tiempo a pesar de probar numerosas pomadas y remedios caseros. Esto le hizo perder su buen humor. Sin embargo, su esposa Ana tuvo la idea de ponerle abono en la cabeza, lo que hizo que le creciera una mata de hierba. Pronto, otros vecinos empezaron a cultivar hierba y flores en sus cabezas también. El único problema era que los animales querían comérselas cuando iban al campo.
Este documento define el culturismo como un deporte basado en ejercicio intenso y anaeróbico que generalmente involucra el levantamiento de pesas con el objetivo de desarrollar un cuerpo muscularmente definido y voluminoso. Explica que existen dos enfoques principales: definir los músculos o aumentar su volumen. Además, señala que alcanzar el agotamiento muscular, conocido como "fallo muscular", es la forma más efectiva de trabajar los músculos, ya que provoca microdesgarros fibrilares que luego se re
Este documento discute el uso de imágenes como recurso pedagógico para la producción oral y escrita. Argumenta que las imágenes deben ser un espacio para la imaginación, reflexión y goce estético, donde los estudiantes pueden descubrir y dar sentido a los símbolos. El blog presentará reflexiones sobre las múltiples posibilidades didácticas de las imágenes para los procesos de lectura y escritura, como cómo una imagen puede evocar emociones, sentimientos e ideas.
El documento resume brevemente varios deportes populares como el atletismo, fútbol, baloncesto, esgrima, ciclismo, natación y proporciona detalles sobre algunos atletas destacados en cada deporte como Carl Lewis, Hugo Sánchez, Michael Jordan, Óscar Freire y Martín López-Zubero.
Deer in the headlights – Informationsüberflutung und wie man damit umgehen könnte: 3 Thesen
Eine der interessantesten Debatten rund um Informationstechnologien im allgemeinen und das Web im besonderen ist die zur "Informationsüberflutung". Frank Schirrmacher führt sie zur Zeit ausufernd mit seinem Buch Payback und durch eine Reihe von Texten in der FAZ. Den Hintergrund liefert das Portal edge.org (http://www.edge.org/3rd_culture/schirrmacher09/schirrmacher09_index.html). Ich glaube, dass auch die Buchbranche von dieser Debatte lernen kann, denn was sind Bücher anderes als Informationsvermittler? Vor- und zugleich auch Nachteil jeden Buches ist aber die Hermetik, die mit dem Format einhergeht. Ein klassisches Buch kann man nicht "updaten", man kann ihm keine Informationen hinzufügen und die Menge an Text ist allein durch die Seitenzahl stark begrenzt. Ein Buch verlangt also nur eine überschaubare Aufmerksamkeitsmenge, wohingegen das Netz potentiell unendlich viel Aufmerksamkeit verlangt. Schirrmacher hat also zumindest in diesem Punkt recht: Potentiell tendiert das Web als Medium hin zu einer nur durch Algorithmen und (auch sprachlichen) Codes reglementierten Un-fassbarkeit. Es gibt zwei Wege, damit umzugehen. Der eine ist das Prinzip Deer-in-the-headlights: Die Informationslawine rollt unkontrolliert auf uns zu und wir lassen uns schreckstarr unter diesen Informationen begraben. Das ist der eine Weg, die Kapitulation vor der schieren Menge an Information.
Ich schlage einen anderen Weg vor. Das Web bietet nicht nur unendlich viel Information, es bietet auch Tools und Strategien, diese Information in klar abgesteckten, für einen selbst relevanten Arealen zu bewältigen. Dazu ist es aber nötig, klare Ziele vor Augen zu haben und zu wissen, wie Information sich strukturell im Internet fortpflanzt, sich dezentral vermehrt.
The document lists various awards for "Best" retailers, distributors, solution providers, and system integrators in different categories and regions across North East India. It recognizes top performers in areas like accessories, office automation, supplies, peripherals, notebooks, desktops, anti-virus software, networking, security solutions, and more. Individual awards are given for promising entrepreneurs and lifetime achievement as well.
Propuesta a los estudiantes medio ambiente (1)Aleja Torres
Los estudiantes realizaron un recorrido por la quebrada de la Carbnera para analizar el grado de contaminación del agua. En el laboratorio, analizaron muestras y descubrieron altos niveles de contaminación. Luego, se dividieron en grupos para proponer estrategias para crear conciencia sobre la protección del medio ambiente y detener más contaminación, buscando la colaboración de la comunidad. Cada grupo tendría una semana para elaborar su propuesta.
El resumen describe una conversación entre dos personas en la Universidad de Lima a través de una serie de planos y tomas que muestran sus acciones y diálogos. Uno le dice a Dos que pare de negar lo obvio, a lo que Dos responde confundido. Luego se muestran tomas de apoyo de objetos tirados en el piso y pastillas para la esquizofrenia, implicando que Uno sufre de esta condición. El diálogo concluye con Dos pidiéndole ayuda a Uno.
Este documento describe diferentes tipos de redes y sus características. Detalla redes LAN, MAN, WAN e inalámbricas, explicando que las LAN son de tamaño pequeño y cableadas, las WAN se extienden a largas distancias entre hosts, las MAN conectan LAN en una ciudad, e las redes inalámbricas usan el aire como medio de transmisión. También señala que Internet es importante porque permite la comunicación segura dentro de una organización utilizando su arquitectura.
Este documento explica el funcionamiento de las capas en GIMP. Las capas permiten modificar imágenes de forma independiente, como si fueran hojas de acetato transparente superpuestas. Se pueden crear, mover, cambiar el orden y la opacidad de las capas. Esto permite realizar ediciones que solo afecten a parte de la imagen o que se puedan deshacer fácilmente.
La productividad tiene una relación importante con el proyecto de vida de las personas porque cuanto más productivos sean, mejores resultados obtendrán en sus vidas a nivel de conocimientos, estatus social y renta económica. Ser productivo significa lograr resultados de calidad en periodos de tiempo cortos y obtener satisfacción personal y rentabilidad. Se puede contribuir a la productividad mejorando las tecnologías existentes y anticipando las necesidades futuras de las empresas para que sigan siendo competitivas.
Este blog pertenece al Centro de Capacitación, Información e Investigación Educativa de Bragado. El blog ofrece información sobre cursos y capacitaciones para docentes, así como recursos de su biblioteca pedagógica. En 2010, se dictaron varios cursos sobre diseño curricular y uso de tecnología en la enseñanza a nivel primario y secundario. La biblioteca cuenta con casi 5,000 volúmenes para apoyar la labor educativa.
Este documento describe las características, ventajas y desventajas de las pequeñas empresas. Explica que las pequeñas empresas son entidades independientes creadas para ser rentables con ventas anuales menores a un cierto umbral. Enumera características como su ritmo de crecimiento, división de trabajo, competencia en mercados locales y uso de mano de obra directa. También señala que ofrecen beneficios a la economía pero enfrentan mayores riesgos de cambios drásticos y menores accesos a financiamiento. Finalmente,
Vortrag der OOP 2014
Überblick über die Vorteile der Programmiersprache Go für skalierbare Anwendungen sowie ein Einblick in hierbei zu beachtende Probleme und ihre Lösung.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
nagiosplugin - eine Python-Bibliothek für Monitoring-Plugins Christian Kauhaus
Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.
Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.
Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor
Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/
Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki
Mein Vortrag auf der EnterJS 2015 über Sicherheit in Node.js Applikationen. Es werden verschiedene Angriffsvektoren vorgestellt und wie man ihnen begegnen kann.
Am 27. April 2011 referiert Informatik-Student Marcus Riemer zu seiner Evaluierung der C++-Algorithmenbibliothek LEDA. Der Vortrag startet um 17 Uhr in Hörsaal 5.
Die Algorithmenbibliothek LEDA (Library of Efficient Data types and Algorithms) entstand am Max-Planck-Institut für Informatik in Saarbrücken unter der Leitung von Prof. Kurt Mehlhorn. Sie wird seit Jahren kommerziell vertrieben. Der Referent studiert an der FH Wedel Informatik und hat mehrjährige C++-Erfahrung. Er führte eine ausführliche Evaluierung durch und vergleicht die Ergebnisse mit der C++-Standardbibliothek und der Open-Source-Bibliothek Boost.
1. C++11 und C++14
Was bringen die neuen Standards?
Holger Jakobsholger@jakobs.com – http://plausibolo.de
2. kurze Geschichte von C++
●Erfinder von C++ ist BjarneStroustrup
●1979: C with Classes
●1984: Umbenennung in C++
●1985: C++ 1.0
●1989: C++ 2.0
●1998: ISO C++
●2011: ISO C++11
●2014: ISO C++14
3. Haupt-Eigenschaften
●Code läuft als nativer Code direkt auf Hardware – keine virtuelle Maschine.
●Code ist typsicher (weitestgehend, Ausnahmen beruhen auf C-Kompatibilität).
●Destruktoren räumen den Speicher auf, keine Garbage Collection – denn Speicher ist nicht alles!
●Objekte werden auf dem Stack erzeugt, nicht ständig mit new auf dem Heap!
4. Haupt-Eigenschaften
●C++ gehört niemandem.
●Es gibt eine umfangreiche Standardbibliothek, aber ihr fehlen noch wesentliche Dinge:
–GUI-Programmierung (große Auswahl vorhanden: Qt, Tk, Gtk+, wxWidgets, … – aber kein Standard)
–XML-Bibliothek
–Unterstützung für Web-Programmierung
5. C++ 1.0 - 1985
Hauptsächliche Neuigkeiten:
●Overloading von Funktionen/Methoden
●virtuelle Funktionen, virtual
●Referenzen als Ergänzung zu Zeigern
●echte Konstanten
●Kommentare mit //
7. ISO C++98
●STL wurde Teil der C++ Standard Library
●Deklaration von lokalen Laufvariablen in for
●Typecasts: a = double (y);
●Weglassen des .h beim #include: #include <iostream>
●Namespaces, Datentypen string bool
●stringstream statt strstream
●eine Reihe neuer Schlüsselwörter
8. ISO C++11
●Eigentlich war C++0x geplant …
●Ziele (Stroustrup)
–Make C++ a better language for systems programming and library building
–Make C++ easier to teach and learn
●Stroustrup: The range of abstractions that C++ can express elegantly, flexibly, and at zero costs compared to hand-crafted specialized code has greatly increased.
9. Neuerungen in ISO C++11
●Rvalues und Move Semantics
●echte enum-Typen
●long long (mind. 64 bit)
●generalisierte konstante Ausdrücke constexpr
●Nullpointer nullptr
●Kontrolle durch default delete
●Typherleitung durch auto
●Initialisierung durch { … }
10. Neuerungen in ISO C++11
●static_assert
●raw Strings
●Lambda-Ausdrücke
●reguläre Ausdrücke (bei g++ erst ab 4.9)
●Threads
●variabel lange Parameterlisten für Templates
●„smart“ pointers
●Zeitbibliothek chrono
12. Rvalue und Move-Semantics
●siehe matrix-move.cpp
●Was man nicht machen darf: mit new neuen Speicher in operator+ holen und dann eine Referenz darauf zurückgeben.
●Grund: Wer ist für die Dereferenzierung verantwortlich? Was passiert, wenn vor der Rückgabe eine Exception geworfen wird?
●Also: Nirgendwo new machen, wo das zugehörige delete nicht dabei ist.
13. Rvalue und Move-Semantics
●Compiler erzeugt automatisch:
–default-Konstruktor
–copy-Konstruktor und copy-Zuweisung
–move-Konstruktor und move-Zuweisung
–Destruktor
●Wenn man nur eines davon selbst definiert, fehlen die anderen!
●Lösung (hier am Beispiel des move-Konstruktors): X(X&&) = default;
14. Rvalue und Move-Semantics
●Woher weiß der Compiler, ob er move oder copy machen soll?
●Bei Werterückgaben weiß er das.
●sonst Hinweis geben mit std::move(x); template <typename T> void swap (T &a, T &b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp); }
15. Consider how to return a potentially large number of elements from a function. Here is a conventional C++98 function returning the indices of string matches:
vector<int>* find_all (vector<string>& vs, const string& s) { vector<int>* res = new vector<int>; for (int i = 0; i < vs->size(); ++i) if (vs[i] == s) res->push_back(i); return res; }
vector<int>* pvi = find_all(some_vec,"vindaloo"); for (vector<int>::iterator p = pvi->begin(); p!=pvi->end(); ++p) cout << *p << " is a matchn"; // … delete pvi;
Quelle: http://www.informit.com/articles/article.aspx?p=2080042
sonst: memory leak!
16. Move semantics allows a significant simplification:
vector<int> find_all(vector<string>& vs, const string& s) { vector<int> res; for (int i = 0; i<vs.size(); ++i) if (vs[i] == s) res.push_back(i); return res; }
for (int x: find_all(some_vec,"vindaloo")) cout << x << " is a matchn";
Auch die Wiedergabe ist viele einfacher!
Natürlich kann es auch kein Memory Leak geben, denn es muss nichts mit delete freigegeben werden.
move-Semantik
17. unique_ptr und shared_ptr
●unique_ptr kann nicht kopiert werden.
●Ihm gehört der Speicher, auf den er zeigt.
●Geht er out of scope, gibt er den Speicher frei.
●Eigentümerschaft kann übertragen werden.
●shared_ptr kann mehrere Eigentümer haben.
●Er hat einen Referenzzähler.
●Geht der Zähler auf 0, wird der Speicher freigegeben.
18. weak_ptr
●weak_ptr zeigt auf einen shared_ptr
●Referenzzähler wird für weak_ptr nicht hochgezählt.
●Daher kann das Objekt auch jederzeit gelöscht werden.
●Vor Zugriff muss er in einen shared_ptr umgewandelt werden mittels lock()
19. Was sollten C-Programmierer sofort vergessen?
Eigentlich alles, was Stress macht bzw. gefährlich ist (buffer overflow):
●Zeichenketten à la C, also char[] und char*, stattdessen string verwenden!
●Alle Arrays, stattdessen Standardcontainer verwenden: array vector list deque forward_list set map
●C-I/O wie printf() fprintf() fgets(), stattdessen iostream verwenden.
●Zeiger zur Parameterübergabe oder Wertrückgabe, stattdessen const& und Move-Semantik verwenden
20. Neu in C++14
C++14 ist nur ein Finetuning, nicht vergleichbar mit C++11
void sort(Container& c); vector<string> vs {"Hello", "new", "World"}; sort(vs);// fine: vs is a Container
template<Sortable Cont> void sort(Cont& container); vector<double> vec {1.2, 4.5, 0.5, -1.2}; list<int> lst {1, 3, 5, 4, 6, 8,2}; sort(vec);// OK: a vector is Sortablesort(lst); // Error at (this) point of use: // Sortable requires random access
21. Neu in C++14
template<class T> constexpr T pi = T(3.1415926535897932385);
//C++14, a variable template in usetemplate<typename T> T circular_area(T r) { return pi<T> * r * r; }
double darea = circular_area(5.5); //uses pi<double>
float farea = circular_area(5.5f); //uses pi<float>
Template-Variablen sind nicht auf eingebaute Typen beschränkt. matrix<T>, complex<T> usw. gehen auch.
22. Danke für eure Zeit und Aufmerk- samkeit!
Holger@Jakobs.com http://plausibolo.de