Freitag, 9. Dezember 2016

Taskjuggler unter Windows

Hi,

warum hat Taskjuggler keine GUI?
Gut, es ist als Consolen-Anwendung geschrieben. Das ist toll. Doch gibt es leider keine grafische Oberfläche zum bedienen.
Wer will schon Kommandos an einen Server schicken, um einen kurzen einfachen Plan zu erstellen.
Nichts desto trotz, ist die Idee gut. Ein Server für große Projekte. Einzelne Tools lassen sich so gut in Taskjuggler integrieren. Z.B. kann das Ticketsystem dem Taskjuggler mitteilen, dass etwas länger dauert.

Falls jemand eine GUI schreibt, oder eine GUI finden sollte, dann bitte hier in den Kommentaren eintragen!

Das Taskjuggler nicht geeignet für schnelles Design von Aufgaben und einem Milestoneplan ist, sieht auch, die Person hinter diesem Link so.
http://www.pegasoft.ca/coder/coder_july_2008.html


Solange keine GUI zur Verfügung steht empfehle ich doch Visio, Word, Excel oder anything.

Grüße, Sebastian


Dienstag, 27. September 2016

Das "Stau aus dem Nichts" Problem

Sehr geehrte Damen und Herren,

Sie kennen es bestimmt. Sie stehen in einem Autostau und fragen sich am Ende des Staus, warum Sie eigentlich im Stau standen. Das Problem ist seit einigen Jahrzehnten bekannt. Viele Wissenschaftler haben sich schon damit auseinander gesetzt. So kenne ich persönlich eine Person, die an einem Leitsystem für medizinische Proben arbeitete, und versucht hat das Problem zu lösen. Alle bisherigen Lösungsmöglichkeiten sind aktuell gescheitert. Dabei würde es reichen, zu wissen, wann keine weiteres Auto mehr auf die Strecke darf, bevor die Strecke voll ist.
Die hier präsentierte Lösungsmöglichkeit gibt einen einmaligen Ansatz, der das Problem effektiv löst. Der Lösungsvorschlag ist auf Ihre individuelle Situation anpassbar und basiert auf schon bekannten Theorien aus der Mathematik.

Einführung

Bei der Beobachtung vieler Menschen bei Stau hat sich der Begriff "Stau aus dem Nichts" eingebürgert. Es gibt dazu einen Beitrag in Wikipedia, siehe [1].
Das Problem besteht darin, dass viele Einheiten, beispielsweise Autos, auf eine räumlich beschränkte Strecke fahren, und von dieser wieder abfahren müssen. Bei mehr als einer Spur gehen wir ohne Beschränkung der Allgemeinheit davon aus, dass auf beiden Spuren jeweils ein Auto gleichzeitig auffährt. 
Wenn nun viele Autos auf diese eine Strecke fahren, kommt es gelegentlich zu Stau. Das wird verursacht, aus dem Grund, das vorherige Autos mit niedrigerer Frequenz abfahren, als sie aufgefahren sind.
D.h., zu einem Zeitpunkt, ist die Frequenz in der die Autos auffahren höher, als die Frequenz, in der sie wieder abfahren. Dadurch entsteht eine Überfüllung der Strecke und damit Stau.


Naive Variante

Im weiteren sprechen wir von Einheiten, anstelle von beispielsweise Autos. Dies können auch Container oder Güter sein. Ja, selbst Menschenströme lassen sich damit berechnen.

Jeder würde sagen: Wenn das Problem in der Eingangsfrequenz bezüglich der Ausgangsfrequenz liegt, dann lässt es sich doch lösen, indem man einfach die Eingangsfrequenz niedriger als die Ausgangsfrequenz hält.

D.h. man misst am Anfang, z.B. pro Sekunde, wie viele Einheiten die Strecke betreten und misst am Ende, wie viele Einheiten die Strecke pro Sekunde verlassen. Dabei hält man die Frequenz der zusteigenden Einheiten niedriger als die Frequenz der verlassenden Einheiten.

Das würde dazu führen, dass keine Einheiten rein gelassen würden, da die Ausgangsfrequenz beim Start gleich 0 ist.
Also wird eine anfängliche Ausnahme gemacht. Es wird z.B. für 5 Sekunden immer rein gelassen, um danach dann wieder nur rein zu lassen, wenn die Ausgangsfrequenz höher ist.

Da es unbekannt ist, wie schnell die Einheiten rein kommen, kann es nun passieren, dass die Strecke schon voll ist, bevor überhaupt eine Einheit den Ausgang erreicht.

Wie viele Einheiten demnach auf die Strecke passen, kann vorher ermittelt werden und dann am Eingang eingestellt werden.
Z.B. wird festgestellt, dass 5 Sekunden zu lange ist für die übliche Zugangsmenge. Deshalb sind die 5 Sekunden auf 3 Sekunden reduziert.

Jetzt bildet sich kein Stau mehr, denn die Strecke ist nicht voll, wenn 3 Sekunden zugelassen werden.

Jedoch entstehen Lücken, in denen die Stecke nicht ausgelastet ist.
Zusätzlich können die Einheiten auch schneller eintreffen als gewöhnlich, so das 3 Sekunden vielleicht doch zu lange sind. So besteht die Gefahr, dass es wieder Stau gibt.
Wenn jetzt mehrmals hintereinander eine höhere als die durchschnittliche Frequenz kommt, dann bildet sich wieder Stau auf der Strecke.

Mit einer Frequenz und Zeitmessung kann das Problem leider nicht gelöst werden.

Die Idee eine Art Belastungsfrequenz für die Stecke zu spezifizieren, anstelle die Eingangszeit als Grenzwert zu verwenden, hilft leider nicht. Dadurch ändert sich das Problem nicht, da Zeitgrenzwert = Anzahl * Belastungsfrequenz ist.
(Belastungsfrequenz = Anzahl/Zeit)

Warum funktioniert das "Naive Verfahren" nicht?

Das Naive Verfahren funktioniert nicht, da es erst-mal nur mit Mittelwerten rechnet, und es zum Anderen auch nicht prognostiziert. D.h. es ist erst bekannt, wann es zu Stau kommen kann, wenn es schon zu spät ist. Das liegt daran, dass nur der Vergleich zwischen Eingang und Ausgang möglich ist.
Natürlich ist es möglich nun mehrere Messpunkte zu installieren, jedoch reduziert sich das Problem dann nur auf eine kleinere Strecke.


Kenntnis aus der Mathematik

Prof. Dr. Günther Dueck von IBM hat ein bekanntes mathematisches Phänomen in seinem Vortrag an der Hochschule Aalen am 18.05.2015[4] beschrieben:

Es lässt sich anhand des Auslastungsgrades ermitteln, wie viele Einheiten in der Warteschlange stehen. Er nennt dies die "Warteschlangenformel"[2].


Das verwendete Beispiel war die Kassiererin im Supermarkt. Sie hat z.B. eine Auslastung von 80%, dann stehen im Schnitt

Auslastung / (1 – Auslastung) = erwartete Anzahl der Kunden an der Kasse = a

0,80 / (1 – 0,80) = 4,0 Kunden an der Kasse

Im Vortrag wurde nochmal die erwartete Anzahl a mit der Auslastung multipliziert, um auf die durchschnittliche Länge der Schlange, in dem Moment, indem der Nächste dazu stoßt, zu bestimmen. Doch dies ist für den Anwendungsfall hier uninteressant, da wir nur die "Belastung der Strecke" wissen möchten.



Neue einmalige Lösung

Nun gibt es hier eine Lösung des "Stau aus dem Nichts" Problems, indem die Belastung der Strecke über die Warteschlangenformel bestimmt wird.
Dies ist eine einmalige und einzige Verknüpfung der Formeln und Probleme für Sie, welche individuell angepasst werden kann.

Es gibt die Eingangsfrequenz fe und die maximale Anzahl von Einheiten auf der Strecke a_max.

Es wird die Warteschlangenformel angewandt. Dies ergibt die erwartete Anzahl a von Einheiten auf der Strecke:

       a = fe/(1-fe)


Lösung

Es darf nun keine weitere Einheit auf die Strecke kommen, wenn a > a_max.



Resümee

Die "Warteschlangenformel" hilft zur Regulierung des Eingangs auf die Stecke. Mit dieser Formel und der Anwendung der oben beschriebenen Methode, gibt es eine Prognose, die es ermöglicht den Stau rechtzeitig zu verhindern. Und es gibt eine Differenzenbildung, welche besser ist als die Mittelwertberechnung im Naiven Verfahren. (Siehe dazu, hier weiter oben: "Warum das Naive Verfahren scheitert?")
Generell sind Differenzenbildung gegenüber reinen Mittelwerten bei Problemen mit Bewegung, immer zu bevorzugen. Reine Mittelwerte bedeutet hier nur den Mittelwert berechnen über die Eingangsgröße. Wird der Mittelwert über die Differenz gebildet, ist hier nicht der "reine" Mittelwert gemeint.


Ausschau


Ein weitere Zusammenhang, zum "Stau aus dem Nichts", ist die "logarithmic transformation concentration"[5] oder auch "Hill equation"[3].
Dabei wird versucht die restliche Konzentration in einer Lösung aufgrund von gebundenen und ungebunden Elementen zu ermitteln.
Es ergibt sich die restliche Anzahl der freien Elemente entlang der Zeit, nach dem Verlauf der Funktion:

      a_free = log( phi/ (1 - phi)),

wobei phi, die Formel wie in[3] beschrieben ist und das Verhältnis zwischen freien Elementen und gesamten Elementen beschreibt.

Bei dem "Stau aus dem Nichts" Problem wird nur der Logarithmus weg gelassen, der hier der Staugeschwindigkeit, also der Neigung der Einheiten zu einem Stau - a la. gute Fahrer neigen weniger zu Stau - entspricht.
Auch wird das Verhältnis freie Einheiten zu gesamte Einheiten und nicht belegte Einheiten zu gesamte Einheiten betrachtet.
So ist klar, dass die Hill Equation eine Anlehnung an die Warteschlangenformel ist und umgekehrt.

Bleibt noch zu klären, wie sich der Logarithmus in der "Stau aus dem Nichts" Problematik erklären lässt.
Der Logarithmus in der Hill Equation wird in der "Stau aus dem Nichts"-Lösung hier, durch die wiederholte Bestimmung der Eingangsfrequenz ersetzt.

Beginnen Sie Ihr System individuell anzupassen, so erhalten Sie hiermit eine bessere und zufriedenstellende Lösung. (ca. 20% Steigerung)


Mit freundlichen Grüßen,
Sebastian Böhmer

Referenzen


[1] https://de.wikipedia.org/wiki/Stau_aus_dem_Nichts
[2] http://blog.kvd.de/2015/07/09/was-eine-schlange-an-der-supermarktkasse-mit-ihrem-persoenlichen-arbeitspensum-zu-tun-hat-2/
[3] https://en.wikipedia.org/wiki/Hill_equation_%28biochemistry%29
[4] https://www.hs-aalen.de/en/news/263
[5] https://www.comsol.com/support/knowledgebase/952/

Freitag, 23. September 2016

Latex ModernCV Template für Lebenslauf und Anschreiben

Hallo,

jeder stand mal vor dem Problem. Gelegentlich ist es soweit, dass man sich neu bewerben muss. Dann kommen wieder tausend Tips und Tricks, wie man sich bewirbt und wie der Lebenslauf aussehen muss.
Ganz gerne wird gesehen, dass man ein Deckblatt hat auf dem am besten der Titel der Stelle mit abgebildet ist.
Dann möchte man gerne erstmal den Lebenslauf sehen und daraufhin dann das Anschreiben.

Alles in Allem, ist es günstig ein TeX-Vorlage zu verwenden. Sehr beliebt ist dabei ModernCV auf www.latextemplates.com .

Für das Deckblatt und die Signatur, sowie die Überschriften und Sans Serif, habe ich eine TeX-Vorlage eines Lebenslauf, welcher ModernCV verwendet.

Um den Lebenslauf zu erstellen und zu pflegen, ist es oft mühsam eine eigene TeX-Umgebung zu installieren und zu warten.
Zum Glück gibt es da schon eine Web 3.0 Platform, welche einem diesen Service ermöglicht.
Verwenden sie dazu www.overleaf.com um Ihren Lebenslauf zu erstellen.
Einfach den Code von unten in Ihre Tex-Datei im Overleaf-Projekt einfügen.

Erstmal viel Spaß, Sebastian

---

PS: Bei Interesse, stelle ich den Code in ein Repository.
PPS: Ein paar Dateinamen und Dateien, wie Bewerbungsbild und Anschreibentext, müssen zur Zeit leider noch angelegt werden.


Der TeX-Code

Freitag, 12. August 2016

Geschäftsidee - Neue Ideen Schmiede - IdeaHub

Hallo,

DISCLAIMER
Der Name "Ideen Schmiede" stammt von einem Kommiliton Namens Sebastian, und nicht mir. Der Name wird hier nur als Synonym verwendet. Der Ideenname ist IdeaHub.


lange ist es her. Doch, könnt Ihr Euch noch an die Zeiten der MetaCrawler erinnern?
Hey, wir haben nicht nur in Google gesucht und die typischen Seiten wie Sxxx und "Wer bekommt welche Likes" angeklickt.
Ne, wir waren damals viiiiiiieeeeel fortgeschrittener, wir haben so etwas benutzt, was uns auf alle Suchmaschinen gleichzeitig suchen lässt.
Klar hat nichts gebracht, da ja kein Inhalt drin war.

:-)

Jetzt hier, in dem technologisch fortgeschrittenen Deutschland, ist mir eingefallen, dass es Sinn macht, einen Internet-Service anzubieten, der Facebook, Twitter, Youtube, Google+, Flickr, Instagram und SoundCloud kombiniert.
Ihr fragt Euch jetzt, ob das ein Misch aus allen Web 2.0/3.0 Diensten werden soll?
Nein. Es bietet eigentlich nur einen Publication-Service an. D.h. der Meta-Publisher bemüht sich darum Euren Inhalt/Content in den Platformen mit einem extra generierten Account zu publizieren.
Jeder User des Meta-Publishers "IdeaHub", bekommt eigene erzeugte Accounts auf Youtube, Twitter, Google+, Flickr, Instagram, DropBox und SoundCloud.

PRO:
- Das Gut ist, dass dabei eine Versicherung abgeschlossen wird, die garantiert, dass zu weniger als 80% keine Copy-Right/Urheberrechte verletzt werden.
- Ihr könnt weiterhin Geld mit YouTube Videos, Flickr Fotos oder Facebook Werbung verdienen.
- Es können weiterhin alle Inhalte geteilt werden.
- Die Inhalte sind auf den Platformen normal erreichbar.
- So bald Du einen Account erstellt hast, kannst Du kostenlos publizieren.
- Auch Ideen können im IdeaHub geteilt werden.
- Vielleicht findet sich eine Sponsormöglichkeit für Deine Idee.
- Und, IdeaHub publiziert als Kommentar, Link, Video oder Sound auf den supporteten Platformen mit nur einem Klick.

CONTRA:
- Naja, hunder Prozent Copy-Right Schutz kann ich mir nicht vorstellen.
- Vielleicht kommt Jemand auf die Idee, den Content von anderen IdeaHub Benutzern zu kopieren und unter seinem Namen zu publizieren. Wie blöd kann man schon sein, wenn es einen gemeinsamen Versicherungspool für genau diese Fälle gibt.
- Vielleicht ist kein jugendfreier Inhalt auf IdeaHub. Tja, wenn wir auf Copy-Right Vergleichen, dann können wir wunderbar automatisch auf jugendfrei Vergleichen.
- Wenn mir nichts einfällt, vielleicht Euch ... :-)

Auch diese Idee muss finanziert werden. Daher bitte den Blog als RSS-Feed abonieren, hier und unter Twitter @seboeh, wird demnächst die Seite für das CrowedFounding geposted.

Für Anmerkungen und Kommentare bin ich offen,

Euer Sebastian

Samstag, 11. Juni 2016

.NET CLR C2872: 'IServiceProvider': ambiguous symbol

Recommendet blog for Solving 'IServiceProvider' ambiguousity.

https://qualapps.blogspot.de/2008/07/using-atlstrh-in-managed-project.html

That was a good starting point, but does not help me completely.
I started than to reduce one interface to eliminate the error by binary search.
Therefore I decide to eliminate a interface close to the last changes, which probably cause the compiler error.

The Strategy to solve this problem of finding the correct 'using namespace System' is to take a simple interface, which is probably close to the new changes you made, and comment out all members and implement all methods with no content.
The second step is to comment out some includes in this  interface hearder file. One of that include could be the reason of error.
The third step is, to compile the program, to see if the error disapear.

If the error disappear, you found the position of 'usin namespace System' before or inside include of omitted header. The omitted header in the interface you simplify.

If the error does not disappear, you have to reduce /simplify another interface with suspect includes.

Good Luck

 Find a tree, ideally, that's my strategy.

Sonntag, 5. Juni 2016

Frequenzen und Zufall

Hallo, 

Viele Fragen stellen sich die Informatiker und Mathematiker.
Eine davon ist die Frage nach dem Zufall.
Zwei Theorien werden hier präsentiert. Leider ist der Ursprung nicht bekannt.
Es sei auch gesagt, dass die Theorien etwas komisch klingen können. Soll heißen, auf eine gewisse Weise unverständlich sind.
Abschließend wird hier beschrieben, welchen möglichen mathematischen Zusammenhang es zwischen den Theorien und Beobachtungen gibt. Dies liefert eine Perspektive, um den Zufall zu betrachten.
Meine Inspiration habe ich aus dem grandiosen Beitrag von Prof. Taschner bekommen. Dieser Vortrag wurde am 27.9.2013 in Wien vorgetragen. Er hat den Titel "Irrtum des Pythagoras" und ist auf einer bekannten Videoplattform zu finden.
Als erstes fangen wir an die These aus der Regressionsanalyse zu betrachten. Diese führt uns zu einem Aspekt des Zufalls.
Die Theorie, welche ursprünglich aus der Physik kommt und etwas kurios ist, besagt, dass es kein Zufall gibt.
Wenn man die Atome und deren Bewegung voraus berechnen kann, dann würde man die Zukunft bestimmen können.
Das soll damit begründet sein, dass, nach der Theorie, Atome nur logische Zusammenhänge bilden können, welche dann berechenbar wären.
Das heißt unser Leben ist eine reine vorbestimmte Art.
 
Die andere These aus der Volkswirtschaftslehre bedient sich einer Rechenmethode, die quasi die Informatiker erfunden haben. Regressionsanalyse. Dabei werden beispielsweise zwei Variablen betrachtet: A und B.
Jetzt wird noch deren Zusammenspiel betrachtet AxB (gesprochen: A korrelierend mit B, oder A Kreuz B).
Letztlich bleibt in diesem stark vereinfachen Modell nur noch ein, sogenannter, Regressionsfehler übrig.
Dieser Regressionsfehler, der immer bei jedem Regressionsmodell vorhanden ist, zeigt uns die Eigenschaften vom Zufall. Meine Vermutung ist: Der Fehler ist ein Bestandteil vom Zufall. 

Wir holen nun etwas aus, um den Zusammenhang zwischen dem Regressionsfehler und dem Physikmodell zu sehen.
Angenommen das Universum sei in einem Urknall entstanden, was sicherlich nicht nur ein, sondern mehrere, Urknall waren, dann sagen die Physiker: Da alles miteinander verbunden ist und von Atomen, Energie und Kräften bestimmt wird, handelt es sich bei dem Regressionsfehler um das "Rauschen" vom Universum.
Informatiker glauben für gewöhnlich nicht daran, da sie die Regressionsrechnung quasi erfunden haben. Informatiker wissen auch, dass A und B nur mit einer gewissen Präzision berechnet / gemessen werden können. Und sich der Regressionsfehler wahrscheinlicher daraus ergibt.

Schauen wir auf unser Hilfskonstrukt, welches den Zufall unterstützt, welches in Prof. Taschners Vortrag vorgestellt wurde. Es ist in der Harmonielehre so, dass sich die Oktaven bilden, indem man die Strecke einer gesponnenen Saite jeweils halbiert. Soll heißen: Man spanne eine Seite auf und zupfe an ihr, so bekommt man eine gleichförmige Schwingung, welche einen Ton bildet. Die Pythagoreer haben nun einen Holzkeil in genau die Mitte der Saite gespannt. So, dass auf jeder Seite die halbe Strecke der Saite ist. Zupft man nun o.b.d.A an der rechten Seite, so entsteht der gleiche Ton, nur eine Oktav höher.
Teilt man diese rechte Seite wieder in der Hälfte, so schwingt die Saite noch eine Oktav höher.
Jetzt wollen wir nicht durch zwei rechnen, sondern mit 2/3. Wir setzen unseren Keil demnach bei zwei Drittel der Saite. Mit der größeren Seite verfahren wir genauso. So entsteht immer eine höhere Quint.
Der Fehler in der Harmonielehre ist nun der Wunsch: bei 12 mal Unterteilen wieder den Anfangston zu kommen.
Der Wunsch kommt daher, dass sich auf diese Art und Weise, so die Tasten auf dem Klavier gut anordnen lassen, um sowohl Oktaven wie auch Quinten zu spielen. Wie Prof. Taschner erwähnte, gibt es das Problem bei Saiteninstrumenten nicht. Die Interpreten der Saiteninstrumenten machen es automatisch "richtig".
Es ist in diesem zweiten Beispiel, der Harmonielehre, nun so, dass der Wunsch nach ganzzahliger Aufteilung, und kombinierbar mit der Oktave, den Fehler, dass der Quintenzirkel nicht genau den Oktavzirkel trifft, für Instrumente wie das Klavier, in Kauf genommen wird.

Bach wusste auch, wie man den Fehler verringert. Man verschiebt jeden Ton geringfügig, so dass dann der artengleiche Ton in einer anderern Tonlage nach 12 Quinten auftritt. Das nennt sich das wohltemperierte Klavier. (mehr dazu in Prof. Taschners Vortrag vom 27.9.2013) 

Nun zu den Zusammenhängen der beiden Fehler, oder besser Korrekturen.
Manche Physiker gehen davon aus, dass sich die Zukunft und damit auch der Zufall berechnen lässt. Wenn wir alle Atome kennen, d.h. wissen, wo sie im Verhältnis zu uns liegen, sowie, die Energien und die Kräfte kennen. Dann lässt sich die Zukunft voraus berechnen und es gibt keinen Zufall, so die Theorie. D.h. selbst, wenn wir die Zukunft nicht vorher bestimmt werden kann, da uns die Rechenpower fehlt, so wissen dennoch, dass es keinen Zufall gibt.
 
Das Modell geht jedoch davon aus, dass es Symmetrien gibt. Damit wird gemeint, dass es kein Chaos gibt, da ja alles vorherbestimmt ist. Das Modell meint zu wissen, wann, wo und wie sich die Atome, die kleinsten Teilchen, befinden und verhalten. Das Modell geht demnach davon aus, dass es sich berechenbar oder zumindest symmetrisch verhält.
Natürlich können irrationale Zahlen, wie sie die Harmonielehre zeigt, im Modell verwendet werden, jedoch sind die irrationalen Zahlen auch unendlich lang. 

Wenn man also mit einer irrationalen Zahl arbeitet, dann nur bis zu einer gewissen Präzision. Der Rest ist wieder Zufall. Denn, die irrationale Zahl ist unendlich lang. Und mit unendlich langen Zahlen kann man bei beschränkten Rechnern nicht rechnen. Wenn die Natur nun keine Rechenschwierigkeiten hat, so ist es immer noch Zufall, da auch wieder die unendlich lange irrationale Zahlen unendlich lang ist.
Soll heißen, die irrationale Gegebenheiten lässt sich nicht steuern/berechnen, und ist somit Zufall. Sowohl im Regressionsmodell als auch in der Harmonielehre.
Genauer, zeigt die Harmonielehre, dass es in der Natur kein symmetrisches Verhalten gibt. Die Aufteilung für den sauberen Klang ist eben die Logarithmierung der Saite. Und nicht das absichtlich schief justierte Klavier. Das wohltemperierte Klavier.
Die Natur richtet sich nicht nach der Harmonielehre. D.h. der Vogel trillert nicht wohltemperiert. D.h. Die Funk und Licht Wellen sind nicht wohltemperiert. Man sagt sie sind logarithmiert. Und dabei sind die Quint und die Oktav nicht überschneidend. Sie sind es sogar nie. Siehe dazu Taschners Vortrag - 27.9.2013. Zum Beispiel, bilden die Wellen Überlagerungen und diese kommen in irrationalen Frequenzen vor. Es wird vermutet, dass dadurch riesengroße Kavenzmänner entstehen können. 
Dies haben wir aus der Harmonielehre. Weiter können wir sagen:
Kombination unterschiedlicher Frequenzen bedeutet immer auch irrationale Frequenzen. Die Summe der Frequenzen sind nicht exakt aufeinander abstimmbar, sondern mit irrationalen Anteilen.

Was bedeutet dies nun? Was ist die Schlussfolgerung?

Aufgrund der Asymmetrie in der Natur, was uns die Harmonielehre gezeigt hat und den daraus folgenden irrationalen Zahlen, was wiederum Irrationalen in der Natur sind, folgt, dass der Fehler in der Regressionsanalyse Irrationalen sind. Und somit das Physikmodell, welches besagt, alles wäre vorbestimmt und nicht zufällig, widerlegt ist.
Denn, sei der Fehler in der Regressionsanalyse nicht zufällig, so wäre er auch nicht schwankend irrational. Das ist er jedoch aufgrund der Erkenntnis aus der Harmonielehre.
Dies bedeutet: Es gibt echten Zufall in der Natur.
Beispielsweise radioaktiver Zerfall, Maximale Peaks in Funkfrequenzen, Kavenzmänner und Neurotransmittersignale.

Mit freundlichen Grüßen,
Sebastian Böhmer, 6.6.2016

Mittwoch, 6. April 2016

Why do we use quotation includes instead of library includes

Hi,

there is sometimes the discussion about the question: why is it useful to use quotation includes? This means includes with quotations,

  #include "anyFileName.h"

instead of includes of libraries,

  #include

Those question is mainly relevant for programmers in C++. Most other programmers can be happy and develop further on.

It's the baken of include question. And the best solution is, to use both, of-course.

The cream of the crop is, to use library include only for libraries. Though, if you include your own local files, which are not seperated by library-borders, it is necessary to include by quotation mark.

Let's have a look deeper.

The idea behind library includes is: that, you will shift the responsibility of include-paths to the configuration of your development-environment. This is especially usefull, if you see the computer as touring-machine, and in that way as a system which executes programms, but needs a configuration also.

Ok, if you use library includes to shift the responsiblity to configuration, it does not make any sense to apply path in the filename. Because, if you change the path of that libraries, and perhaps also a deeper path, it is necessary to change that internal/deeper path in all your files, which use the library. This is, what we like to eliminate with library include.

So, it makes no sens to add directories to library includes.

e.g.     #include


This causes the second problem, that all library files have to have a unique filename. For all libraries you use, e.g. if you like to have an own point or list implementation, you want to call the filenames "point.h" and "list.h", but they are already occupied by the library you use in the project also.

Therefore, you need local quotation include's. In this case, you can add a subpath to the filename and use it as e.g. #include "internalPath/point.h".

In the end it means: if you differ between namespaces or if you have local internal files only used by your application, use quotation includes, please.

Regards, Sebastian Böhmer, 06.04.2016

Samstag, 5. März 2016

Sprachen in der Programmierung und ihre Anzahl

Dieses Dokument beschreibt die Thematik von Programmiersprachen. Es dient nicht einem Vergleich und nicht einer objektiven Einschätzung. Das Anliegen des Dokumentes ist es, den Sinn und Zweck von Sprachen in der Informatik zu beschreiben. Es werden grundlegende Gedanken erläutert, wie z.b. Was sind Sprachen? Wieviele Sprachen sind realistisch? Und wie realisieren wir eine mögliche Sprachlandschafe?
Zum Schluss wird eine aktuelle Tool-Chain genannt, mit der es möglich ist das Ziel der Sprachen zu erreichen.
Viel Spaß beim Lesen.

Sprachen in der Programmierung gibt es viele. Jede scheint ihre Berechtigung zu haben, doch wieviele Sprachen sind notwendig um korrekt zu modellieren?

Sprachen dienen dazu um im Computer zu modellieren bzw um ihn zu konfigurieren.
Am Ende wird auf eine Maschinencode-Ebene programmiert und konfiguriert. Letztlich steuert man den Elektronenfluss und wandelt einen elektrischen Input in einen Output um. Dabei wird der Input mit Sensoren aufgenommen und der Output durch Aktoren repräsentiert. Dazwischen gibt es viele unterschiedliche Features.
Features sind Merkmale, die die Translation des Inputs zum Output abstrahieren und so einen einfachen Umgang der Translation ermöglichen.
Generell kann man sagen, der Rechner besteht nur aus Bits, Transistoren und Kondensatoren. Die Bits kann man als Atome sehen, die Transistoren als Werkzeug und die Kondensatoren als Zeit. Raum ist derjenige, der benötigt wird um alle Transistoren, Kondensatoren und Leitungen zu platzieren. Demnach die Werkstatt.
Vielleicht werden Programmierer und Elektroingenieure daher als Bastler bezeichnet?

Was ist also eine Sprache? Wofür brauchen wir eine Sprache? Und warum brauchen wir eine Sprache?
Es ist so, dass der Rechner im Prinzip eine Touring-Maschine ist. Eine Touring-Maschine besteht aus einem Band, einem Alphabet und einem Schreiblesekopf. Die Daten stehen auf dem Band im Alphabet der Maschine geschrieben. Der Schreiblesekopf verarbeitet dann die Daten und schreibt sie wieder im Alphabet auf das Band. Oft an einer anderen Stelle des Bands. Das Band, d.h. der Speicher, bildet demnach auch einen Raum.
Doch was sind dann Sprachen?
Sie sind letztlich Features. Demnach dienen sie der Abstraktion und sind Werkzeuge der Logik. Logik ist wiederum eine Beschreibung um Gegebenheiten zu formulieren. D.h. auch eine Abstraktion. D.h. auch ein Feature. D.h. auch eine Sprache.
Es ergibt sich ein zyklischer Schluss. D.h. Sprachen formulieren Gegebenheiten.
"Du bist verheiratet" ist eine Gegebenheit. Sie ist aus anderen Gegebenheiten entstanden, wie z.B. Dass man sich kennenlernte.
Ist demnach alles eine Gegebenheit? Fast. Features, wie eine Sprache eröffnen eine neue Dimension. Eine Dimension, die nicht räumlich ist. Sondern kreativer, abstrakter und unendlicher Natur.
(Einstein: "Die Dummheit des Menschen und das Universum scheinen unendlich zu sein. Bei zweitem bin ich mir nicht ganz sicher.")
Sprachen dienen demnach der Kreativität, Abstraktion (als Feature) und Vielfältigkeit.

Somit ergibt sich die Frage des Blogs: Wieviele Sprachen sind notwendig?
Sprachwissenschaftler sagen: Jede Sprache, die aktuell von Menschen auf der Erde gesprochen werden, sind gleichwertig. D.h. es lässt sich in jeder Sprache den gleichen Gedanken in ähnlicher Effizienz, Effektivität, Robustheit und Transformität formulieren. Effizienz im Sinne von zeitlicher Geschwindigkeit, Effektivität im Sinne von vergleichbaren und gleichem Ergebnis, Robustheit im Sinne von Fehlerkorrektur und Transformität im Sinne von vielfältigen Variationen.
Sind alle Sprachen gleichwertig, so brauchen wir nur eine.
In der Informatik spricht man dabei von touring-vollständigen Sprachen.
Jetzt ist es jedoch so, dass wir weder wissen, ob uns ein Feature fehlt, in dem Touringmodell, noch wissen wir, ob wir alle erreicht haben.
In Prognosemodellen wissen wir, dass die Anzahl der unbekannten Variablen immer größer ist als die berücksichtigten.
Daher Sprechern wir mehr als eine Sprache.

Was heißt das in der Praxis?
Wie brauchen alle Sprachen, soweit sie sich deutlich unterscheiden. Deutlich unterscheiden bedeutet wiederum, sie müssen in ihren Wörtern, die Features präsentieren, so unterschiedlich sein, dass die Schnittmenge signifikant kleiner ist als die gesamte Anzahl der Wörter. D.h. die Schnittmenge sollte 80% nicht übersteigen. Konkret wäre das beste sie hätten keine Schnittmenge. Dann benötigen wir "beide" Sprachen.
Die Anzahl der notwendigen Sprachen ist somit abhängig davon, wie unterschiedlich sie sind. Wenige unterschiedliche Sprachen sind gleichwertig, zu vielen gleichen Sprachen. Zusätzlich zum Unterschied der Sprachen, ist die Anzahl der "notwendigen" Sprachen, abhängig von der Anzahl der Features (Worten unterschiedlicher Bedeutungen innerhalb der Sprache).

Im Chinesischem gibt es unterschiedliche Dialekte. Jedoch sind die Schriftzeichen gleich. So haben wir damit schriftlich die gleiche Bedeutung, jedoch sprachlich unterschiedliche Laute.
Dass bedeutet, dass im schriftlichen sich die Features zu 100% überschneiden, was tendenziell dazu führt, dass die Dialekte von der Bedeutung gleich sind, wir also keine weiteren Features gewinnen indem wir einen weiteren Dialekt lernen. Die gesprochene chinesische Sprache ist trotz ihrer Dialekte tendenziell gleich, da die Bevölkerung anhand der Zeichen weitere Bedeutungen lernt (insbesondere fachliche), so dass, trotz unterschiedlicher Laute, die gleiche Bedeutung entsteht. In anderen Sprachen ist es mit den Dialekten äquivalent. Auf die Theorie bezogen schließen wir, man erlangt keine weitere Dimension durch einen Dialekt.
(Ausnahme entsteht, wenn der Dialekt auch geschrieben wird, denn dann entsteht tendenziell auch eine andere Bedeutung. Bsp Servus vs. Tschüß und ciao. Servus soll herzlicher sein als Tschüß und ciao in Deutschland cooler.
Das zeigt auch, dass für gesprochene Sprachen die Bedeutung immer ortsspezifisch ist. Was bedeutet, dass alle gesprochenen Sprachen gleich wichtig sind zu lernen.)

Bei der Informatik kann man zum Glück reduzierter bleiben.
Geht man davon aus, man verwendet nur Sprachen, die sich in ihren Wörtern zu mindestens 20% unterscheiden. (da 20% der Breite der gaussschen Normalverteilung für nicht signifikante Abweichungen um den Erwartungswert entspricht), ergibt sich die Anzahl der "notwendigen" Sprachen anhand der existierenden Features.
Für Features gilt das gleiche wie für Sprachen, sie müssen sich in ihren Eigenschaften zu mindestens 20% unterscheiden.
Das praktisch zu betrachtene Feature ist atomar. Hat also nur eine Eigenschaft.
So ergibt sich die Anzahl der notwendigen Sprachen in der Informatik zum aktuellen Zeitpunkt hier Vorort und im Sinne der möglichen Verwaltung, anhand der atomaren Features der verwendeten Sprachen. (Ein Feature ist solange atomar, solange niemanden zwei Merkmale in diesem Feature einfallen, welche von der Mehrheit anerkannt werden.)

Atomare Features in der Informatik zum aktuellen Zeitpunkt, sind beispielsweise :
Kopieren, Zeiger, Vererbung, Polymorphismus, Verschiebung, Lokalisierung, Container, Schablonen, Timing, Responsbility und mehr. (Bitte in den Kommentaren erweitern.)

Das entspricht in der Programmierung :
Copyconstructor, Pointer, Inheritance, Adressen und Addressoperationen, class/structs, Templates/Generics, Multithreading/Concurrency und Handshakes, Visibility.

Das sind alles Features, die in c++ enthalten sind, jedoch nicht in c.
Wir erlangen durch diese Features in der höheren Programmiersprache somit mehrere zusätzliche Dimensionen.
Java kann dies auch, jedoch hat es bis auf den Gabagecollector nicht mehr zusätzliche Features. Es lohnt sich also nicht Java und C++ zu können, sondern nur den Unterschied zu wissen. (Pointer, Copy Paradigma, Gabagecollector.)
Es ist so, dass die Sprache C, z.B. das Feature Vererbung nicht kann. Dennoch ist die Sprache touringvollständig. D.h. es ist möglich das gleiche Programm in C, wie auch C++ zu schreiben. Jedoch in einer geringeren Dimension und somit nicht so kreativ und vielfältig. Modellierung, soweit dies bedeutet Eigenschaften der Gegebenheiten zu formulieren, ist in C schwerer, da wir weniger abstrahierende Dimensionen haben.

In der Informatik gibt es nun zusätzlich sogenannte Domain Specific Languages (DSL). Es werden dabei Sprachen verwendet, welche die Business Logik abdecken. Sie beziehen sich beispielsweise auf den Bereich des Bankings. Konkret: Ein Banker kann damit Zahlungen spezifizieren oder Gegebenheiten des broking modellieren. Z.B. kann er sagen: verkaufe Aktie, wenn der Wert niedriger ist als andere Aktie.

Brauchen wir diese?
Ja, denn sie erhöhen die Dimensionen. Und wenn die Dimensionen endlich sind, dann kommt man dem Ziel näher.
Domain spezifische Sprachen sind notwendig. Jedoch, sollten sie nicht zu ähnlich sein. Zusätzlich sollten sie ausschließlich atomare und unterschiedliche Features implementieren.
Zum Beispiel wären da: Ableitung, Integral, Korrelation/Faltung und auch Bewertungssysteme, Fuzzi Logik, Kooperation (friend classes) und Kooperationsstrategien und ihre Bestandteile (John Nash Equilibrium).

Tools :
Aktuell gibt es ein interessantes Tool, welches sich Embededer nennt.
Dieses ist, mit MSP (ein DSL Tool), zusammen ein Werkzeug, welches sich sehr gut zur Definition eigener DSL dient. Und was mittlerweile auch auf C++ aufbaut.
Daneben sind weitere Tools wie Spufax und Eclipse Xtext zu empfehlen.
Vielleicht lässt sich das automatic completion Tool Xtext auch mittlerweile mit Embededer kombinieren.

Wieviele DSLs brauchen wir?
Nur noch wenige, denn die Maschinen sind endlich.
Ideen und Dimensionen womöglich unendlich.

Disclaimer :
Die verwendeten Begriffe entsprechen nicht zu 100% der üblichen Verwendung.
Genaue Angaben/Referenzen können leider nicht hinzugefügt werden.
Rassistische Eindrücke sind nur aufgrund der Informatik zu verschulden.
Änderungen der eigenen Meinung sind unbeabsichtigt. Stand 2016. Ort München. Kostenlose Vervielfältigung ist erlaubt, unter hinzufügen dieses Reclaimer. Das gut unterliegt der Creative Common License 3.0, zu finden unter creative-common.org.
Autor Sebastian Böhmer.

Montag, 18. Januar 2016

Three Threads Streaming


Three Threads Stream


About

Many applications are performing an editing of their input. Especially in image processing. They all need to buffer their input, if they want to handle the processing. Especially, if you want to process the reading, modify and writing of data not in one thread. So, you need buffers between the threads.
Here it describes the problem and gives a solution in form of an implementation.
Afterwards this document discuss the timing problematic with too slow or too fast threads.
Below, you can add some comments about your opinion. Don't hesitate to ask some questions.

Problem

As in "about" described, we want to process data for reading, modifying and writing. Of course, we can use one single data address to process the reading, modifying and writing in one single thread. But now we want to do this with three different threads. One for reading, one for modifying and one for writing.
So you can say: lets use one data address for all three threads. To avoid a race condition (simultaneous writing and reading), we use a mutex, which we can lock.

The issue is, that when we use a mutex, it could be, that only the input thread is accessing the data, while the modify thread is every time again waiting on the lock. This happens, because when the modify thread is checking, if the mutex is free again, the input thread has lock the mutex again. In that way, the input thread is much more faster than the modifying thread. And in this way, we omit a lot of data to modify and write.


The modifying thread is called working thread further on. And the writing thread is called output thread in the implementation.

So it is not suitable to use a mutex here. Because, we have too fast access on the mutex. More detailed, the threads run in different speed, so it can be, that one thread is running twice as fast as the other. Or one thread is running at whole, while the other thread do nothing.
So at least we need two conditions: not_full and not_empty to indicate the different states of the cyclic buffer, if only one thread is running. This buffer and conditions are invented by batptiste-wicht[1].

The implementation

The buffer "BoundedBuffer"[1] is slightly modified. It is now a template based class.
We need two buffers. One to transfer the input data to working thread, called inputToWorkingBuffer, and one to transfer modified data to output thread called workingToOutputBuffer. There are two operations on that buffers. One for fetching the last data and one for depositing new data.
There are streams handling the fetching and depositing of the buffers. See the operators << and >> therefore. The code is also improved by r-value references. The r-value references permit the data to be moved into the buffer and moved from the buffer. So the copy process is reduced as much as possible. In the end, there are only one copy from input stream to buffer and one copy to output stream.

The BoundedBuffer




The main




There are three threads in the main declared: inputThread, workingThread and outputThread. With get(), we wait of finishing the threads in reverse order of creation. std::ref(buffer) is needed on calling threads, because the buffer should be changed outside of the threads.

If all works correctly, we get the output of only even numbers from 0 to ttt::inputMax.

Timing Issues

There are 2^3 timing issues. This is because, every thread can be too slow or too fast. Those, timing issues are handled by some tricks. For example, if the outputThread is too fast, we can repeat the last frame.

All tricks are:
  • If working is too slow or input too fast, overwrite old data in inputToWorkingBuffer.
  • If input is too slow or working too fast, repeat return of last data in inputToWorkingBuffe.
  • If working is too slow or output too fast, repeat display of last data.
  • If output is too slow or working too fast, overwrite old data in workingToOutputBuffer.

fetch() must be changed to:


And we have to change deposit() slightly. All correct code will be in the gitHub[2].

The front size_t needs to be changed to atomic, because it is used in fetch() and deposit().


Have a lot of fun, Sebastian

References


[1] http://baptiste-wicht.com/posts/2012/04/c11-concurrency-tutorial-advanced-locking-and-condition-variables.html
[2] https://github.com/SebastianBoehmer/example/tree/master/threeThreadsStream