Intro in DE as posted:
10. Februar 2020
The Big Bang is still on
Intro in DE as posted:
17. Januar 2020
Galactic Developments Messestand
Beim Berlin Sci-Fi Filmfest hatte ich einen schönen Galactic Developments Stand. Das Berlin Sci-Fi Filmfest ist pure SciFi ohne kein Fantasy. Deshalb viele viele SF interessierte und immer was los. 2 Tage je 12 h von 12 h bis 24 h. Ein neues customisables Rollup und 2 schöne Lego-Raumschiffmodell. Das sind echt Publikumsmagneten.

_happy_dreaming()
13. März 2019
A Coders Take on BREXIT: The Lupus Solution
In short: EU article 50 is a timer. It can be cancelled and restarted any time. Just like the programming timers we know. So, the solution is exactly what we do in programming: cancel and restart.
On 4 December 2018, the responsible Advocate General to the ECJ published his preliminary opinion that "a country could unilaterally cancel its withdrawal from the EU should it wish to do so, by simple notice, prior to actual departure".
Meaning, that the UK can cancel Brexit any time. But the UK can also restart Brexit at any time again. There are no time limits, no grace periods, no rate limiting on article 50 cancelling and triggering.
That makes the solution obvious: send two letters to the EU back to back.
- the first with the cancellation of the article 50 process,
- the second with a new trigger of article 50.
The result would be (almost) the same as the already planned 2 year transition period. The March 2019 date is only the legal departure date. for all practical purposes, the UK leaves 2 years later after the transition period (December 2020). Let's get rid of the transition period and call it a second article 50 process, another two years. Practical separation would then be March 2021, only 3 months later than already planned.
Just make a law in parliament to cancel article 50 AND trigger it immediately again.
Gives you time for a referendum or a general election or just a good transition period. Anything you want. Gives you time and changes nothing. The move just gets rid of the threatening no-deal timer.
Bonus: an extension of article 50 requires the agreement of all EU members. But the cancel/restart-move can be done by the UK alone.
Bonus Bonus: 2 years transition is what the Brits wanted, but the EU wanted a clean end of year date. So they settled for 21 months. A simple timer reset makes that 24 months again. Owned!
The ECJ handed this solution to the UK. They know what they do. This was not an accident. They mean it. That's the way out. Just do what every programmer does with timers: reset.
_happy_resetting()
PS: it's clearly an exploit and a bit shady. But it's legal. The contract is not meant to be used this way. But many contracts are "stretched". What happened to "no bailout" in the Euro zone? Giving Greece money to be (maybe) payed back in 50 years, is a stretch. What happened to the "prohibition of monetary financing"? Ah, yes, The ECB buy government bonds not directly from he governments, but from the "secondary markets". The ECB so much that the "intermediate" banks are actually straw men, being paid to circumvent Article 123. Another stretch. So, contracts are stretched, if deemed necessary. All we have, unfortunately, is the written word. The written words allow it AND it's necessary.
PPS: If people ever wanted to make exploit proof contracts and laws, then they could ask the gaming industry for advice. They have thousands of specialists who make a living by preventing the exploitation of coded rules. If computer games as an example are too low for you, then ask IT security experts or turn to academics in the field of game theory, the study of mathematical models of strategic interaction between rational decision-makers.
PPPS: In the long run: if you can do it twice, then think n+1. We can do this every other year. Maybe the UK and EU get used to it. Gives the UK a feeling of independence. And that's what it's all about, anyway. Every two years, UK activates article 50 and cancels it two years later. In practice: every other year, Brussels receives a briefcase with 2 letters from London.
28. Februar 2019
Agile mit Super Powers
![]() |
| Superboys: Edict-Abhilekh on Pixabay |
In der realen Welt brauchen wir mehr Rollen, als die bekannten Rollen im Scrum: Scrum Master, Product Owner und Entwicklerin.
Außerdem gibt's da noch:
- Tester, die Test-Ingenieure sein sollten, nicht Durchklicker, sondern Integration-Test-Entwickler und Test-System Managerinnen,
- Admins, früher Operator, jetzt Devops, also Devs mit Leidenschaft für Betrieb,
- Systemarchitektinnen, die sich oft aus den Entwicklern rekrutieren und auf jeden Fall aktiv in den Entwicklungsteam sein sollten, vielleicht organisiert in Communities of Practice, aka Chapters,
- UX-Designer, ständig ein bisschen gebraucht, denn bei jedem Feature mit Business-Value für Benutzerinnen ist UX wichtig,
- Visual-Designer, soll ja auch gut aussehen, oft zwischen mehreren Teams geteilt oder sogar extern bei einer Agentur oder beim Auftraggeber. Burst-artige Arbeitslast und deshalb immer in der Gefahr, die Entwicklung aufzuhalten.
- Produkt Managerin, die auch gewillt ist mit dem Agile-Team ins Eingemachte zu gehen und zusammen was umzusetzen. Phantastisch, wenn sie nicht aufhört bei Marktpotential/Marktbeobachtung und Anforderungen, sondern selbst die User Stories scheibt.
- Marketing, Vertrieb, Controlling, Management… sind auch nötig, damit was geht, schon klar.
- Frontend und Backend, jeweils mit ihren aktuellen (und schnell wechselnden) Frameworks,
- Unit Tests ohne Zeit-Overhead während des Codings "einfließen" zu lassen,
- Integration-Tests und GUI-Tests aufzusetzen und up-to date zu halten während sich UX Workflows ändern,
- Beherrschung von Continuous Integration/Deployment Systemen,
- Container und Orchestrierung,
- Virtuose Bedienung von Code Repositories für Quellcode, Pakete, Container (Stichworte: GitFlow, nuget/PEAR, Dockerhub). Nicht nur benutzen, sondern auch bereitstellen, intern und extern.
- Code Reviews und Refactoring
- Code-Metriken
- Kenntnis und Benutzung von Monitoring-Systemen für Alarm, Dashboard und KPIs,
- Clean Code, Design Patterns, Entwicklungsumgebungen und deren Extensions,
- Security (in Code, Libraries aus Repos?, Operating),
- Reliability-Engineering,
- Skalierung (Up and Out)
- Konfiguration der APIs und GUIs diverser Cloud-Anbieter und Meta-Cloud-Services,
Deshalb:
Superpower #1: Agile-Coach mit agiler Technologie
Superpower #2: Product Owner mit UX-Design
...und weil wir schon dabei sind. Das wäre auch toll:
Superpower #3: Visual-Designer mit Frontend-Programmierung
Superpower #4: Entwicklungsleiter mit Technik-Coach für Product Owner
#SuperPoweredAgile
Labels: Agile Development, Code, Scrum
16. Dezember 2018
Kennzeichnungspflicht für Social Bots
Breaking News: Die Bundesregierung erwägt Kennzeichnungspflicht für Social Bots
Social Media Bots sollen sich zu erkennen geben und mitteilen, dass sie keine echten Menschen sind, sondern Automaten, die nur Meinungen multiplizieren. Sie sollen gekennzeichnet werden, damit Leser unterscheiden können, ob das eine Diskussion zwischen Menschen ist oder nur - meistens gegen Geld - Meinungen beeinflusst werden sollen. Das kennt man schon von Werbung, die gekennzeichnet werden muss, damit man sie von redaktionellem Inhalt unterscheiden kann.
Das ist sehr sinnvoll und richtig.
Und weil das so sinnvoll und richtig ist, wurde das schon mal vorgeschlagen. Vor ziemlich genau 10 Jahren: Bot Tagging.
Da hat sich schon mal jemand Gedanken darüber gemacht dass man Menschen (Chatter) in Chatsystemen nicht hinters Licht führen sollte indem man Bots programmiert, die sich als Benutzer ausgeben.
Es gibt Bots, die Werbung machen, Bots die unterhalten und heutzutage sogar Bots, die lügen und Fake-News verbreiten. Letztlich ist politische Beeinflussung durch Bots auch nur politische Werbung in einer besonders ansprechenden vertrauenswürdigen und damit hinterhältigen Form.
Da es so viele verschiedene Bot-Arten gibt, sollte es ein Kennzeichnungssystem geben, das mehr aussagt, als Bot JA/NEIN. Man will wissen
- ob der Bot kommerzielle Werbung macht oder politische,
- ob er der Unterhaltung dient oder eine Servicefunktion erfüllt,
- ob er jugendfrei ist oder - allgemeiner ausgedrückt: die Kennzeichnung braucht auch eine Altersfreigabe.
Schön wäre auch die Angabe eines Themas. Dafür bräuchte man eine Ontologie. Die müsste man sich nicht selbst ausdenken. Der Verweis auf ein bestehendes Verzeichnissystem würde reichen, z.B. Wikikedia-Begriffe als Vokabular oder etwas hierarchisches, wie das (leider eingestellte Open Directory Project oder hier).
Das alles steht in der "Virtual Presence Technical Note 5: Bot Tagging", weil wir bei Weblin das schon damals gesehen haben.
_happy_tagging()
23. November 2017
CSV im US Format im Excel öffnen (Komma statt Semikolon) - Systemsprache kurzfristig umstellen
tl;dr: Systemsprache kurzfristig umstellen. Powershell: "Set-Culture en-US" und zurück: "Set-Culture de-DE"
Was tun?
Man kann:
- das CSV als Textdatei öffnen und "," durch ";" ersetzen (viel Spaß mit "," in den Daten)
- das CSV in .txt umbenennen und im Excel importieren und dabei as Komma als Trennzeichen angeben
So geht's:
- Powershell öffnen
- PS C:\> Get-Culture (liefert: de-DE)
- PS C:\> Set-Culture en-US
- CSV öffnen durch Doppelklick
- PS C:\> Set-Culture de-DE
- Powershell schließen (oder offen lassen, braucht man immer mal)
(Wenn man es jetzt als CVS speichert, hat man ein englisches CSV in ein deutsches konvertiert).
Kleine Verbesserung (vorherige Einstellung transparent wiederherstellen):
- PS C:\> $c=Get-Culture; Set-Culture en-US
- CSV öffnen/bearbeiten
- PS C:\> Set-Culture $c
- Dateiname: EN.bat
Inhalt: powershell.exe -Command "Set-Culture en-US" - Dateiname: DE.bat
Inhalt: powershell.exe -Command "Set-Culture de-DE"
Labels: Tools
19. Mai 2017
CSS Customize Visual Studio Online Task Board - Remove Columns And Make it Denser
I use Visual Studio Online task board a lot for Scrum projects. But I do not like how much screen space it takes primarily because of lots of empty space.
So, I remove the empty space:
- I do not need the "To be tested" and "Testing" columns.
- The cards could be smaller with less margins and paddings
I use Tampermonkey to inject CSS into the page.
Just install the Tampermonkey Chrome/Firefox extension and use this script:
Before/After:


_happy_tampering()
PS: Once you have Tampermonkey you will see lots of opportunities to change the layout of web sites. You don't have to live with it. You can change it.
For example: a script which make visual studio build colors more pronounced to counter my red-green-color weakness:
Labels: Code, Javascript, Scrum, Tools
5. Dezember 2016
JsonPath
I want to access these parameters quickly without dissecting the JSON by looping and if-ing through the layers. In other words: I want single line expressions to dive into JSON and extract values.
You can call it XPath for JSON, but a language integrated compiled way, which his much faster, than XPath and supported by Intellisense (autocomplete).
GitHub project: https://github.com/wolfspelz/JsonPath
NuGet package: https://www.nuget.org/packages/JsonPath
Example: extract the 42 from:
var data = "[ '1st', '2nd', { 'aString': 'Hello World', 'aNumber': 42 } ]"
... parse it:
var json = new Node(data);
... extract it:
int fourtytwo = json[2]["aNumber"];
Invalid keys do not throw exceptions. They return 0 (zero), "" (empty string), or empty list:
int zero = json[1000]["noNumber"];
Of course, you can foreach a dictionary (aka JS object):
foreach (var pair in json[2]) {}
And iterate over a list (aka JS array):
for (int i = 0; i < json.Count; i++) {
string value = json[i];
}
You can even LINQ it:
json[2].Where(pair => pair.Key == "aNumber").First().Value
and:
(from x in json[2] where x.Key == "aNumber" select x.Value).First()
Now get me the 50 from this JSON:
var data = "[ {
aInt: 41,
bLong: 42000000000,
cBool: true,
dString: '43',
eFloat: 3.14159265358979323
}, {
fInt: 44,
gLong: 45000000000,
hString: "46"
}, {
iList: [
{ jInt: 47, kString: '48' },
{ lInt: 49, mString: '50' }
],
}
]";
I can do it in a single line, no foreach no if:
var fifty = json[2]["iList"][1]["mString"];
Other people had the same idea years ago: http://goessner.net/articles/JsonPath/. But there does not seem to be a C#/.NET implementation yet. So here it is: GitHub, nuget.
_happy_jsoning()
Labels: C#, Code, Javascript
26. September 2016
Scrum Gantt als Google Docs Sheet
Im letzten Post zum "Scrum Gantt-Chart" habe ich beschrieben was, warum und wie man aus Scrum-Daten ein Scrum-Gantt als Reporting-Tool erzeugt. Die Scrum-Planung ist weiterhin im Scrum-Backlog, aber das Management (allgemein: die Stakeholder) freut sich sicher über eine Roadmap im Gantt-Stil.
=> Implementierung das Gantt-Charts als Google Docs Sheet <=
Empfehlung:
- Sheet kopieren: GoogleDocs => Datei => Kopie erstellen...
- Das eigene Backlog im Eingabebereich auf der linken Seite einfügen
- Datum "BaseDate" und "Today" anpassen
- Zeilen und Spalten im Formelbereich an das eigene Backlog anpassen
- Jede Woche eine neue Version machen und den Stakeholdern veröffentlichen
==> Google Sheet
_happy_sheeting(:-)
Labels: Project Management, Scrum
8. September 2016
First GIF Movie Ever Was a Star Trek clip
This is the first GIF-Movie ever shown on the World Wide Web in a web browser.
In 1995, I convinced the browser company Netscape to support GIF animations. It appeared in Netscape Navigator 2.0 as a hidden feature. The big marketing features where Javascript, Frames and Server-Push. But it also had animated GIF.
To test it, I needed a long GIF-stream. 1 MB was considered big and long at the time. And I thought it needs some style and not just a boring test image with test data. So, I extracted frames from a short QuickTime Star Trek movie and created the first GIF movie for the Web.
Then we used the feature to create the first Web Live Video Stream ever. It showed a model railway setup at University of Ulm, Germany.
First Live Video at a time where "live cam" meant "please reload the page to fetch a new image".
That's many firsts. Going where no one has gone before is my hobby. That movie fit.
_happy_going_where_noone_has_gone_before()
Labels: first, GIF, Video on Demand, Web
5. September 2016
Scrum Gantt-Chart
tl;dr
Ein Gantt-Chart aus Scrum-Daten verschafft mehr Überblick als ein Release-Burndown. Dazu erweitert man das Backlog um Kalenderspalten, in denen jeweils der Sprint markiert ist, in dem eine Story bearbeitet wird. Nebeneffekt: Management bekommt eine Roadmap und weiß was das Team macht. Steigert die Akzeptanz bei Gantt-verwöhnten Stakeholdern.Was
Das Gantt-Chart stammt aus der klassischen Projektplanung bei der sehr detailliert Aufgaben, Abhängigkeiten, Termine und Ressourcen verwaltet werden. Droht ein Termin zu platzen, dann bekommt die gefährdete Aufgabe mehr Ressourcen.Das ist nicht die Sichtweise von agiler Entwicklung. Bei Scrum wird nicht von vorne herein das gesamte Projekt im Detail durchgeplant ist. Es wird nur geplant wird, was auch umgesetzt wird. Teams und nicht Ressourcen übernehmen Aufgaben. Eher wird der Scope reduziert oder ein Termin verschoben, als Ressourcen (die ja Menschen sind) umher zuschieben.
Mit der klassischen Detailplanung kann man ganz genau sagen, wie ein Projekt laufen wird, zumindest wie es laufen soll. Die Wahrheit stellt sich hinterher heraus. Und sie ist immer anders als geplant. Mit anderen Worten: die genaue Projektplanung führt nur dazu, dass man sich genau irrt. Ein Grund warum die klassische Projektplanung im Agile-Umfeld verpönt ist. Damit ist auch das Gantt-Chat, als Übersicht des klassischen Projektplans, in Misskredit geraten.
Warum
Dabei hat es das nicht verdient. Auch bei Scrum wollen Stakeholder wissen, wann was fertig wird. Scrum will die genaue Aussage darüber vermeiden. Aber trotzdem bleibt der Wunsch nach konkreten Aussagen. Das Interesse von Management und Kunden am Projektfortschritt ist berechtigt und kann mit einer Roadmap im Gantt Stil befriedigt werden. Nicht zuletzt hilft eine Roadmap-artige Übersicht auch dem überzeugten Scrum-Befürworter, rechtzeitig Scope und Termine zu steuern.Überraschenderweise hält der Scrum-Standard alles bereit, um ein Gantt-Chart zu erstellen. Ein Gantt-Chart, das alle Anforderungen von Gantt-Chart-verwöhnten Stakeholdern erfüllt. Die Erzeugung des Gantt-Charts kann automatisiert werden. Sie kostet im Scrum Prozess nichts. Das Ergebnis ist auch nicht genauer als die bekannten Gantt-Charts klassischer Projektplanung. Aber es dient der Transparenz. Damit erfüllt es eine wichtige Funktion im Scrum. Gleichzeitig fördert das Gantt-Chart die Akzeptanz von Scrum durch wichtige Stakeholder (Management).
Hier geht es also um ein Gantt-Chart als Reporting-Tool, nicht als Planungstool. Die Planung ist komplett Scrum.
Wie
Ein Gantt-Chart aus Scrum-Daten zu erstellen ist sehr einfach. Jede geschätzte Scrum User Story hat Story Points. Die Story Points entstehen ganz normal wie bisher im Scrum Prozess. Aus vorangegangenen Sprints ist die Velocity (Story Points pro Sprint) bekannt. Die bisherige Velocity wird auch für die Zukunft angenommen.Dann berechnet man für jede Story in welchem Sprint sie fertig wird und markiert den Sprint im Kalender. Done.
Daraus ergibt sich ein Backlog mit zusätzlichen Kalenderspalten in denen jeweils die Felder markiert sind in denen eine Story in Arbeit ist und/oder fertig wird. Das sieht dann so aus:

Bonus
Zusätzliche Ideen aus der Praxis:- Abgeschlossene, "in Arbeit" und zukünftige Stories farblich unterscheiden.
- Zukünftige Velocity = letzte Velocity modifiziert durch Sondereffekte wie Urlaub.
- Ein zusätzliches Datumsfeld je Story, das angibt für wann ein Feature dem Kunden/Management "versprochen" wurde (Soll-Datum). Das Datum wird im Kalender markiert. Soll/Plan/Ist-Angaben helfen der Transparenz.
- Epic Stories weiter unten im Backlog können auch mal über mehrere Sprints gehen.
- Zusätzlich zur Scrum-Beschreibung der Story (Wer, Was, Warum) kann man einen kurzer Titel/Namen der Story vergeben. Das hilft der Übersichtlichkeit im Gantt-Chart.
- Bewährt hat sich eine eigene Hintergrundfarbe für Releases. Das sind oft Gruppen von Stories, die aus einem Epic hervorgegangen sind. Damit kann man Stories zu "Releases" oder "Milestones" gruppieren.
Labels: Project Management, Scrum
24. August 2016
Kosmologisches Glaubensbekenntnis
![]() |
| Das Bild zeigt den größten Teil des Kosmos, der jemals fotografiert wurde: Hubble Ultra-Deep Field |
Hier also mein physikalisch kosmologisches Glaubensbekenntnis:
- glaube an den Urknall. Ich weiß aber nicht wie es dazu kam. Es gibt die Idee, dass das Universum Null Gesamtenergie hat. Dann kann es im Multiversum zufällig aus einer Quantenfluktuation entstanden sein. (bb+)
- bin indifferent was die kosmische Inflation betrifft. Mit "Überlichtgeschwindigkeit" von Planck-Länge zu Atom-Größe. Das ist schon eine wilde These. Es könnte andere Erklärungen geben für die Struktur des Mikrowellenhintergrunds. Ich denke, das finden wir noch heraus. (ci+)
- glaube an eine Multiversum-Theorie, weiß aber nicht welche, vielleicht mit unendlich vielen Universen mit zufälligen Parametern. (mv/rp)
- glaube deshalb auch, dass wir in einem Universum leben und zu einer Zeit in der die Parameter genau so sind, dass unsere Art Leben möglich ist. In sehr vielen Universen und Zeiten ist das nicht so. Das Universum ist nicht für uns gemacht. Wir stellen uns die Frage, ob wir einzigartig sind und ob das Universum für uns gemacht ist (eventuell von jemand), weil wir zufällig hier sind. Wären die Parameter nicht so lebensfreundlich, dann könnten wir die Frage nicht stellen. Also eher Zufall als kreiert. (id--)
- bevorzuge eine einfache Ballon Hypothese als Modell für das 3-dimensionale Universum Mein einziger Grund ist Ockham's Razor, denn alle anderen Theorien sind komplexer aber nicht besser (besser im Sinne von beweisbarer).
- bin noch skeptisch bei dunkler Materie. Ich sag mal 50:50, dass es was in unserem Universum ist, z.B. bisher unbekannte Elementarteilchen. Kann aber auch ein anderer Effekt sein, z.B. die Gravitationswirkung von Materieballungen anderer Universen, die über höhere Dimensionen des Multiversums in unseres hinein wirkt. Das kann Gravitation vermutlich. Update: nach neuesten Erkenntnissen eher keine "Einstreuung", sondern doch was bei uns. (dm+)
- bin kritisch gegenüber der populärwissenschaftlichen Interpretation von dunkler Energie, insbesondere der Teil mit 70 % des Universums usw. Ich glaube das ist was anderes. (de-)
- glaube nicht an Supersymmetrie. Erstens ist das viel Theorie und nötige Teilchen im Vergleich zum Mehrwert. Zweitens hat man noch keinen der supersymmetrischen Partner gefunden. Bis dahin: nein. (ss-)
- bin kritisch bei der Stringtheorie, weil sie schwer zu beweisen ist. Ein Puzzlestück fehlt mir tatsächlich noch. Warum ballt sich Energie zu verschiedenen Typen von Elementarteilchen zusammen. Was macht ein Klümpchen Energie zum Gluon? Da muss eine Theorie her. Da würde die Stringtheorie passen, aber es könnte auch was ganz anderes sein. (st-)
- finde Schleifenquantengravitation nett. Eigentlich gilt das gleiche, wie für die Stringtheorie: schwer zu prüfen. Aber ich könnte mir vorstellen, dass alles quantisiert ist, auch der Raum. Quantisierung macht das Leben immer interessant. Alles was wir kennen entsteht aus Quantisierung. Ein gutes Prinzip. Allerdings ist die Skala so klein, dass es praktisch nicht relevant ist. Das ist schade. Abgesehen von der Skala könnte man eine Ähnlichkeit sehen zwischen quantisierter Raumzeit und Gitter-QCD. Das könnte darauf hindeuten, dass wir in einer Simulation leben, Glaube ich aber nicht. (lqg+)
- Nebenthema Fermi-Paradox: Ich glaube (leider) an Thesen wie Great-Filter, Rare-Earth, Rare-Intelligence. Mit anderenWorten, keine Aliens, zumindest nicht in Reichweite. Pech. Milliarden erdähnliche Planeten pro Milchstraße hin oder her. Great Filter quetschen die Wahrscheinlichkeit gaaanz schnell zusammen. (fp/gf)
- Nebenthema Simulationshypothese: Wenn unsere Art intelligentes Leben im Prinzip einzigartig ist (wie gesagt, nicht anthropozentrisch, sondern zufällig und "rare"), dann spricht die Statistik nicht für eine Simulation. Andererseits, die Fernwirkung der Quantenverschränkung und das Doppelspaltexperiment mit verzögerter Erkenntnis lassen mich etwas schaudern. Genau so würde man eine Simulation effizient machen: solange keiner hinschaut als Welle und erst dann als Teilchen, wenn eines der simulierten Wesen genau nachmisst. (sh-)
Zurück zur Physik:
- habe nicht an das einfache Higgs geglaubt und bin immer noch skeptisch. Ich finde es gut, wie CERN offiziell formuliert: Man hat ein "Boson mit Higgs-artigen Eigenschaften" gefunden. Aber ob es das einig wahre Higgs ist und ob es das wirklich gibt, bin ich nicht sicher. Der Higgs-Mechanismus ist fast zu einfach und konstruiert, um wahr zu sein. LHC hat eben gefunden, was gesucht wurde. Hätte man eine anderen mathematischen Mechanismus erfunden und was anderes gesucht...naja. Update: OK, das ging daneben. Es scheint wirklich das schlichte Higgs zu sein, wie langweilig.
- glaube die Allgemeine Relativitätstheorie trifft es schon ziemlich gut ("nails it"). Ich könnte mir noch Quantenkorrekturen vorstellen, die auch die ART wieder als Näherung erscheinen lassen. (gr+++)
- fürchte, dass die spezielle Relativitätstheorie stimmt, also erstmal keine Überlichtgeschwinigkeit, keine Zeitreisen. Aber ich habe noch Hoffnung, dass man das "umgehen" kann ohne die SRT zu verletzen. Das würde natürlich bedeuten, dass es Beobachter gibt, bei denen die Kausalität verletzt ist. Aber diese Beobachter könnten selbst keinen Einfluss nehmen. Also hoffe ich, dass die geradezu dogmatische Kausalitätsforderung der modernen Physik ("kausal für alle Weltlinien") etwas aufgeweicht wird. (sr++)
- kann mir vorstellen, dass es nicht zwingend eine große vereinheitlichte Theorie geben muss. Vielleicht wirken Standardmodell und ART unabhängig voneinander und lassen sich nicht vereinheitlichen, vielleicht nicht einmal bei sehr hohen Energien. Warum soll es nicht zwei fundamentale Strukturen und unabhängige Wirkungen geben? Mal davon abgesehen, Standardmodell beschreibt Teilchenfelder in einer ART Raumzeit. Gravitation ist keine vermittelte Kraft, sondern ein Effekt der Krümmung, eine Scheinkraft, wie die Kraft durch Beschleunigung. Also gibt es auch nichts zu vereinheitlichen und kein Skalenproblem. Wenn Gravitation keine Kraft ist, wie die anderen, dann stellt sich nicht die Frage warum sie sooo viel schwächer ist. Invers relativ gesehen: Stark (1), E/M (100), Schwach (1.000.000), alle gefühlt in einem "vernünftigen" Bereich, dann lange nichts, dann Gravitation (10^38), echt jetzt. (gut-)
Mein Kosmo-Code:
bb+ ci+ mv/rp id-- dm+ de- ss- st- lqg+ fp/gf sh- sm+++ gr+++ sr++ gut-
_happy_believing()
2. August 2016
Galactic Developments Science Fiction Timeline jetzt als eBook
Meine Science Fiction Timeline "Galactic Developments" gibt es jetzt bei Amazon als Kindle eBook.
Link zu Amazon: https://www.amazon.de/Galactic-Developments/dp/B01JD6COY6/
Im letzten Jahr habe ich viele neue Artikel geschrieben. Zeitweise sogar jeden Tag einen. Nicht wundern. Das ist kein Roman. Das Ding ist aufgebaut wie ein Geschichtsbuch. Jahreszahl + Ereignis. Aber mit vielen coolen Ideen.
Diese Woche zum Einführungspreis von 0,00 €. Läuft unter dem Pseudonym Norden Esstisch.
Meine Bitte an alle, die bisher schon Artikel gut fanden: runterladen, bewerten, weitersagen, denn mehr Leser = mehr Spaß beim Schreiben= mehr Material = mehr Spaß beim Lesen.
Beschreibung:
Erst besiedelt die Menschheit das eigene Sonnensystem. Dann wagt sie sich hinaus zu den Sternen. Die Menschen treffen auf fremde Völker. Die interessieren sich aber nicht immer so brennend für die Neulinge. Die Menschen mischen jetzt mit, holen sich ein paarmal eine blutige Nase, kommen aber insgesamt ganz gut zurecht. Nach einigen hundert Jahren gibt es Menschen auf fremden Planeten, die dort seit Generationen mit anderen Völkern leben und noch nie etwas von der Erde gehört haben. Das alles spielt sich ab in den Randbereichen eines alten Imperiums, das seine Grenzen nicht mehr so fest im Griff hat.Es gibt große Imperien, aber auch Freiraum auf unbewohnten Planeten. Es gibt gigantische Organisationen, die tausend Lichtjahre und eine Billion denkende Wesen umfassen und es gibt unabhängige Individuen, die zwischen verschiedenen Völkern Handel treiben. Die einen erleben Abenteuer in der Wildnis, die anderen leben in einer perfekt organisierten futuristischen Zivilisation.
Bevor die Menschen zu den Sternen fliegen, verbringen sie erst einmal 500 Jahre im eigenen Sonnensystem. Das ist so viel Zeit, wie von Columbus bis zu uns heute. Da kann sehr viel passieren. Und es passiert viel.
Es wird entdeckt, erfunden, gebaut, eingeführt, erschlossen, eröffnet, gefunden, sich eingemischt, gekämpft, verhandelt, befriedet, befreit, geschaffen, gegründet, zerstört, gewonnen, gewagt, wiederaufgebaut, betrogen, geholfen, gelitten, geliebt, geopfert, niedergeschlagen, aufgestanden, infiltriert, verteidigt, anerkannt, verweigert, ausgeschlossen, vereinigt, aufgenommen und gelebt.
Es gibt Erfindungen, Entdeckungen, Kultur, Kunst, Wirtschaft, Industrie, Kreativität, Unterhaltung, Verschwörungen, Geheimnisse, Macht, Krieg, Frieden, Befreiung, Unabhängigkeit, Mut, Wagnis, Opfer, Wissenschaft, Technologie, Künstliche Intelligenz, Nanotechnologie, Uploads, Neuroimplantate, Raumschiffe, Habitate, Asteroiden, Planeten, Sterne, Aliens, Imperien, Königreiche, Piraten, Reisen und Wunder.
Eine realistische Zukunftsperspektive ohne Apokalypse, mit Hoffnung, aber auch mit Krisen. Eine Zeitleiste mit allen bedeutenden Ereignissen. Das Geschichtsbuch der Zukunft.
Meinungen bisher:
Du hast echt Talent fürs schreiben... Deine Story fesseln einen immer wieder, freue mich jedes Mal wenn was Neues von dir kommt... Deine Sci-Fi Story haben das Potenzial z.B. als Comics veröffentlicht zu werden... Wie gesagt, danke dafür, dass du mich immer wieder fesselst mit deinen Geschichten...
Labels: Galactic Developments, Geschichte, SciFi
25. Januar 2016
Compile on Save for Typescript in Visual Studio with Gulp
The standard way to develop with Typescript in Visual Studio 2015 (ASP.NET 5, MVC6) is to create a so called "virtual project" in a folder. That's a Typescript project inside a Web-C# project. This embedded Typescript project automatically compiles Typescript files on build.
Javascript files can be changed and reloaded while a project is running (debugging). But new Typescript code will not be available until the project is restarted.
The better way is to let gulp do the compilation. But let's start with the standard way (the few steps you do here are required later anyway).
Setup the virtual Typescript project:
- Add a folder for Typescript scripts to the Web project, e.g. "./Scripts"
- Put a tsconfig.json file into the folder (it contains "outFile": "../wwwroot/js/ts/scripts.js") which bundles all generated Javascript in a single file scripts.js in the "wwwroot/js/ts" folder.
- Add a folder "ts" in "wwwroot/js". This is the Typescript compiler destination folder. Compiling into a sub folder of "wwwroot/js" has the advantage that generated Javascript will be minimized like all other Javascript inside "wwwroot/js" by the the Visual Studio build step. This is nice for Release builds. For our debug session we use the non-minimized "wwwroot/js/ts/scripts.js" in the HTML.
- Add your *.ts files to the "./Scripts" folder
- A Visual Studio build will generate "scripts.js" and "scripts.js.map" (.map for debugging Typescript source code in IE or at least watching Typescript in Chrome).
- Add a reference to "scripts.js" in your HTML like this: <script src="/js/ts/scripts.js"></script>.
The *.ts files are only compiled and bundled when the project is built. No edit/save/reload-browser cycle. The debug session must be stopped to make new Typescript code available for browser reload.
- Add a file "_tsconfig.json" to the Scripts folder (can be any name, but the name appears in "gulpfile.js"). I just renamed my existing "tsconfig.json" to "_tsconfig.json" to hide it from Visual Studio and re-use it with gulp-typescript.
- Add gulp modules by editing "package.json". Visual Studio should download lots of node packages.
- Add gulp tasks by editing "gulpfile.js" in three places:
- You might check if the "watch"/"compile-ts" workflow works by starting "watch" and editing/saving a Typescript file in the Scripts folder.
- Check if the "scripts.js" is generated along with it's "scripts.js.map".
- Start a debug session.
- Change Typescript code. Reload browser.
- Voilà
PS: There could be a clean-ts task
Thanks to
- Aydin from bluehands for the tsconfig.json file
- The community for gulp, many node modules,
- Microsoft for Visual Studio Community Edition, Typescript, gulp integration
Labels: C#, Code, Javascript
11. Dezember 2015
Wordpress Rant
...so I thought.
That was wrong...
- disappointingly,
- irritatingly,
- gaspingly,
- outrageously
I was setting up a new web site. OK, let's use Wordpress. Everyone is using Wordpress, There are so many cool Wordpress driven sites. And countless plugins. You can do everything with Wordpress.
Yes, you can, but only if you are a Wordpress expert and if you want to pay real money. Wordpress is not for you if you want to host a cheap (cost free) open source content management system on your own (virtual) server.
What's wrong?
- It says it is a content management system, but the basic installation is just a blog system. There is no way to arrange/layout your content.
- I can use plugins to create various numbers of columns in a page, but what they do is add meta tags to the content which formats columns. You always see the meta tags while editing the content. They are part of your article text. That's ugly. There is no way you call that a CMS and a WYSIWYG editor.
- Worse, column plugins create columns in the content area. Nothing more. No separator, no second content part. There is just one content area on a page.
- I could pay about € 50 for a good layout plugin, but I don't want to. I moved to Wordpress, because it is "the dominant open source CMS". But it turns out. It is a blog engine, which can be upgraded to a CMS with real money and real effort.
- The Wordpress team/community claims, that absolute URLs in the HTML are better than relative. I am not convinced, but it can be argued. But, even if you put absolute URLs into the HTML, then you definitely do not store references to uploaded images and internal links as absolute URLs. That's plainly a wrong design.
- It is not possible to change the site's base URL easily, because references to uploaded images and internal links are stored as absolute URLs. All internal links and images must be fixed when the domain name (base URL) changes. There is no good reason to store absolute URLs. You'd store them relative and insert the base URL while generating the HTML.
- Short loop about the official docker image: It does not support email. Any real web site needs email. You can not omit it and call it the official docker image. Its worthless for non-experts. Nice try. Don't tell my why this is so. I know why. I know how to fix it. I can start another container with a mail server. But the "official" image is not prepared to interface with, say a postfix image.
- With help of another plugin I can use the built in SMTP client. But this is not for beginners, not for everyone. It needs an expert.
- I can add custom fields to template pages. This way I can probably other additional content elements. But, after trying one hour I still don't see them. It's not for beginners. It needs a Wordpress expert.
- Very popular templates have major deficiencies. I chose a template with a full with image slider at the top of the start page. But, the thing is fixed to 3 (three) images. Not 1-3, not 3 or 4 or 5, not a variable number. Just: 3, WTF. I would not dare to publish this as a public template. Maybe hack this up for my personal use, but not as a template for everyone without a bit of flexibility.
- This can be fixed though. I just have to upgrade to the professional version of the template for additional money.
- Speaking of money: most templates want money for responsiveness. A responsive design should really be in the base version of the template. In which decade are they living? Mobile is mainstream, not optional, enterprise level, only for paying customers.
- Everything can be fixed with plugins. But there are many plugins. Many plugins for similar features. Some do not work with your chosen template. You will find out after paying for the professional version. A steep learning curve. I try many plugins. I read many blog posts. I have to become an expert. Otherwise this blog software won't be a content management system. There is a plugin for everything. But only experts know which ones you need.
- While we are at it: many plugins claim to be so great. But plugins often have hidden deficiencies, which you discover after having invested significant time. That adds to the cost. It's not just trying different plugins. The time sink is in using a plugin until you discover a not so obvious flaw, then choosing a different one and start all over.
- Small but symptomatic: Enter the web site contact email address and it will appear as http://-link instead of a mailto:-link. This is the base installation with default template. Does not work. Of all these developers and users, did nobody ever click on the email in the header of the default template?
- I won't start about how often Wordpress appears on the security lists, because a plugin was unsafe. But you need plugins for everything. At least with visualization and/or containerization you do not compromise your server anymore. Still, a mess.
- I am not halfway through...
Please do not tell me that nothing is for free, that people have to live, that hard work must be payed, that it would be unfair to not pay them. That's not the point. They say: "WordPress is web software you can use to create a beautiful website, blog, or app. We like to say that WordPress is both free and priceless at the same time."
It is not. It is either free or beautiful. Wordpress costs very much time or significant money to make something beautiful and useful.
And yes, I know it is my fault. I could just pay someone 800 € per day to set it up and in the meantime earn 800 € per day with what I am already good at.
All I am saying is:
- The base system is crap.
- It is expensive too use.
- The official docker image is a showcase, but otherwise useless.
It put up a good show. It got me.
7. Dezember 2015
Avira and VirtualBox Broken
tldr: Avira face punches VirtualBox. Need other virus scanner.
I was using Avira, because it is the best free virus scanner. And I am using VirtualBox for sandboxed Windows, local Linuxes, as docker container host, etc...
...but recently they stopped working together.
Over 2 weeks VirtualBox VMs were increasingly less likely to start. I needed some time and googling to find out that Avira prevents the VM from starting. Disable Avira: still nogo. Uninstall Avira: VirtualBox works. Reinstall Avira: VirtualBox broken again.
See: https://forums.virtualbox.org/viewtopic.php?f=6&t=68869
Time to move on to a different virus scanner.
_happy_googling()
6. Dezember 2015
Life is Strange
Habe in den letzten Tagen Life is Strange als Letsplay geschaut. Gefällt mir super. Ist wie Fernsehen. So soll es sein. Zurücklehnen vorspielen lassen.
Es spielt sich fast von selbst. Ab und zu mal was suchen, kleine Aufgaben lösen. Nichts wo ich nicht weiterkomme. Genau mein Schwierigkeitsgrad.
Nie wieder Open World. Spielen auf Schienen. Keine schwierigen Aufgaben zu lösen, Keine Leute umzubringen, keine NPCs, die warten bis sie gemetzelt werden. Ich kann die meisten Entscheidungen revidieren. Manche aber nicht. Das Spiel führt mich in der Story weiter. Interaktives Kino mit starken Emotion und Chillfaktor.
Gibt's für PS3. PS3 habe ich seit Assassin's Creed III. Das war das einzige Spiel was ich auf der PS3 gespielt habe (und das nur halb). Also kann ich mit Life is Strange meine Investition von 400 € pro Game auf 200 € pro Game verringern. Reichgespart.
_happy_chilling()
PS: Das Game auf die PS3 zu bringen war auch schon eine Quest-Reihe. Ich sach nur Controller aktivieren, System Update, zu alter Account, problematische Payment-Optionen, mehr Updates, Downloads, mehr Downloads, Updates, Shop verlassen, wieder rein, Reboot, Update, immer wieder Auflösung Umschalten und dann viele Screens (Engine, Publisher, Developer, alle toll) bis das Game endlich startet. Unchillig das.
23. Oktober 2015
Galactic Developments ist umgezogen auf einen neuen Server als KVM
Bisher war die Galactic Developments Website ein Apache Virtual Server auf meinem alten Hetzner Rootserver. Den hatte ich vor 6 Jahren bei einer keine-Setupgebühr-Aktion gebucht (und dann 3 Monate lang nicht installiert, was die keine-Setupgebühr-Aktion für mich ad-absurdum geführt hat, für Hetzner nicht). Inzwischen ist das Betriebssystem (Debian Sarge) aber schon aus den Security-Fixes raus gelaufen.
Die Rechner der Rabatt-Aktion waren damals etwas schwach auf der Brust. Das stört nicht, wenn man nicht viel Traffic hat, aber heutzutage will man virtualisieren und mehrere Server gleichzeitig laufen lassen. Dafür ist ein ganzes GB RAM nicht genug. Der neue Server ist wieder bei Hetzner, hat aber 2 TB Platte, 32 GB RAM, 8 CPUs incl. Hyperthreading. Das sollte reichen für ein paar virtuelle.
Ich kann Debian, also weiter Debian-stable, d.h. Jessie 8.2.
Zum Virtualisieren kvm und libvirt drauf. Ein 2 GB Image für das Guest-Template erstellen mit einer Debian-minimal Installation ohne alles außer sshd. Die VMs sind nur über das interne "default" Netzwerk zu erreichen. Alle VMs bekommen statische IP Adressen vom internen DHCP.
Ein VM als Reverse-Proxy, der HTTP-Requests an verschiedene virtuelle Maschinen weiterleitet. Dafür eine iptables-Konfiguration per qemu-Hook, die immer dann die 2 iptables-Regeln setzt/löscht, wenn die VM startet/stoppt. Auf dem Proxy ein nginx, der alle Anfragen für www.galactic-developments.de an die Galactic Developments VM weiterleitet.
Der Galactic Developments Server bekommt eine eigene VM. Hier mit Apache, weil ich Apache schon kann und nicht zu viele Konfiguration ändern muss, dachte ich. Tatsächlich haben sich die Apache Entwickler ein neues Sicherheitskonzept einfallen lassen und erst mal geht gar nichts, bis ich herausfinde, dass man einen neuen Befehl (Require) braucht. Zusätzlich zum Galactic Developments Apache virtual Server gibt es noch einen CatchAll virtual Server, der Adressen wie galactic-developments.de (ohne www.) und *.galactic-developments.com auf den Hauptserver umleitet (401/permanent).
Dateien und Daten der Galactic Developments Website sind in Subversion. Das bleibt erstmal so bis sich die Community mehr beteiligt. Dann will ich git nicht im Wege stehen. Also: Repository auschecken und Apache-config darauf zeigen lassen. Bisher waren SVN Server und Website auf dem gleichen Rechner. Ein Subversion post-commit Hook hat automatisch die Website svn update'd. Poor man's Continuous Delivery. Das geht jetzt nicht mehr, weil es verschiedene Rechner sind und später - wenn der SVN Server auch umgezogen ist - gleicher Rechner, aber getrente VMs. Deshalb muss der post-commit Hook jetzt das Deployment anders triggern. Ich mag Trigger per HTTP-Request. In diesem Fall: ein Einzeiler-PHP in der Galactic Developments Website (Name lang und geheim, quasi das Passwort im Namen, Security by Obscurity), das ein lokales Shellscript startet, das wiederum "svn update" macht. Drei Einzeiler hintereinander. Man muss noch die Benutzer-Grenze überwinden vom wwwdata-User des Apache zum Eigentümer des Repositories. Deshalb wird das Shellscript mit sudo ausgeführt. Dafür eine Zeile in /etc/sudoers. Bei jedem svn commit ruft der post-commit Hook das update PHP-Script in der Zielwebsite per wget ("-O -" nicht vergessen) auf.
Dann noch DNS für www.galactic-developments.de umbiegen von rama.wolfspelz.de auf fred.wolfspelz.de und Galactic Developments ist umgezogen.
Das hört sich alles locker flockig an, hat mich aber mehrere Tage gekostet. Es gibt fast keine Anleitungen für libvirt/kvm OHNE lokales Display und ohne VNC. Auch virt-manager usw. alles nett gemeint, aber ich will kein Desktop auf meinem Server nur zum Installieren. (Wer bis hier gelesen bekommt von mir ein nagelneues Notebook). Genauso das Netzwerk: entweder es wird nicht erwähnt, was blöd ist, wenn man die VM vom Netzwerk installieren will oder es wird bridge-Networking vorgeschlagen, was bei mir einfach nicht wollte. Dabei geht das "default" Netzwerk super. Man muss es nur anschalten. Das könnte mal irgendwo stehen. Ein qemu-Hook statt bridge-Netz sehe ich nicht als Hack an, im Gegenteil.
PS: rama.wolfspelz.de war keine Frühstücksmargerine, sondern ein 50 km langes Alien-Raumschiff.
_happy_migrating()
Labels: devops, HTTP, Linux, SciFi, Web Server














