Visio VSTO

Für einen Kunden entwickelte ich ein kleines Tool, das dynamisch Visio Shapes erzeugt. Wer es nicht kennt, Visio ist Microsofts Antwort auf.. AutoCAD? keine Ahnung, was die Leute eigentlich damit machen. Man kann damit vektor-basiert zeichnen und es gehört in den größeren Kreis der Office Produkte. Also hat auch so ein hübsches Icon.

Die Doku dazu ist allerdings.. nun ja, man wird im Jahr 2023 immer noch begrüßt mit

Note
At this time, there is no reference documentation for the Visio primary interop assembly.

Ist das nicht entzückend. Das ist fast wie früher, mit ohne Google! :-)

Entrümpelung

Schon mal überlegt was passiert, wenn ihr hinüber seid? So.. tot und nicht mehr lebendig? Ich meine jetzt nicht das Himmelreich, sondern das Weltenreich. Da bleibt für die meisten von uns einiges zurück. Und was passiert damit?
Schräg gegenüber hat jemand einen Entrümpeldienst bestellt, ich kann vom Schreibtisch direkt hinsehen. Die haben einen großen Container in die Fußgängerzone gestellt und da fliegt jetzt schon seit 2 Stunden alles rein, was einmal in der Wohnung war. Alles. Stühle, Bücher, Geschirr, Bilder, Klamotten in Säcken, you name it. Gut, manches fliegt auch daneben, Seitenwind dritter Stock, wissenschon. Wenig los in der Fußgängerzone heute. Und alles Restmüll, das Zeug will keiner mehr. Gerade eine Serie schöner alter Stühle.Nach dieser Person wird auf der Deponie ein eigener Hügel benannt, wenn das so weitergeht.

Beim letzten Todesfall in der Familie habe ich mir die Mühe gemacht, tatsächlich das ganze Gerappel zu trennen. Ernsthaft. Was will die Verwandtschaft. Was könnte noch praktisch sein. Was muss erhalten werden. Zum Verkauf. Zu verschenken. Altpapier. Altglas. Altmetall. Und erst ganz am Schluss Sperrmüll. Das hat natürlich Monate gedauert, aber bei den Bergen an Zeug hätte ich es nicht anders ausgehalten.

Solche Entrümpelungsunternehmen sind übrigens teuer. Liegt daran, dass sie nur einen Bruchteil der "Ware" weiterverkauft bekommen. Der Rest ist dann Deponie, und gewerbliche Anlieferung in größerem Rahmen kostet da richtig Geld.

Wie so oft sollte man sich vielleicht die Frage stellen, es erst gar nicht so weit kommen zu lassen. Kann man nicht den alten Massivholz-Schrank von Oma Frieda weiterverwenden oder rennt man zum skandinavischen Billigheimer und lässt sich ein pressspan-furniertes Pendant raus? Leute, bei der "Nachhaltigkeit" kann wirklich jeder mitmachen! Gar kein Problem! Ich bin wahrscheinlich ein Optimist an ein Umdenken zu glauben, bevor die Rohstoff-Preise komplett in den Himmel geschossen und Echtholz-Möbel überhaupt nicht mehr verfügbar sind. Oder man kauft einfach nicht ständig neues Zeugs.

Die immer älter werdende Gesellschaft ist der andere Faktor. Bis eine Generation abtritt, gibt es entweder schon gar keine Folge-Generation mehr oder diese ist schon Ü50 und hat längst alles selbst gekauft und eingerichtet. In der Folge bleibt beim Weggang eines alten Menschen einfach alles übrig.

Ordner. Küchengeräte. Papierstapel. Fotoalben. Freier Fall. Jetzt machen sie Pause. Ich brauche auch eine.

Invertiert

Irgendwo habe ich einmal gelesen, Xing sei wie Tinder, nur umgekehrt: Attraktive junge Frauen schreiben nerdigen Typen und werden von denen ignoriert. :-)

Aber es stimmt: Meine Kontaktliste besteht sicherlich zu einem Viertel aus diesen jungen Damen. Seit ich Freiberufler bin, hat es sogar noch zugenommen. Ich kann dann aber auch nicht den Kontakt ignorieren oder blockieren. Schließlich weiß man nie, wie es im Leben weitergeht. Vielleicht bin ich irgendwann einmal froh über eine vermittelte Festanstellung.

Für erwähnenswert zu halten ist das Format dieser Zuschriften: Das Gros schickt unverlangte Stellenbeschreibungen, die "hervorragend zu mir passen würden". Offensichtlich haben sich diese Menschen nicht die Mühe gemacht, mein Profil zu lesen, sonst wäre klar, das ich als süddeutscher Software-Entwickler eher nicht für eine IT-Admin Stelle an der Nordsee in Frage komme.

Wie ich von mir bekannten Menschen, die auf Partnerbörsen unterwegs sind weiß, ist es dort genau dasselbe: Da halten auch einige Herren mit dieser Schrotflinten Taktik in die Menge der Mädels rein und hoffen, eine wird sich schon melden, die passt. Klappt aber nicht. Niemals wird das klappen, es sei denn, wir hätten irgendwann wieder die Situation dass 10 Bewerber auf eine offene Stelle kommen.e.

Wie kann man sich nur so dämlich anstellen. Als Recruiter muss ich fachlich wissen, welche gesuchten Fähigkeiten beschrieben sein können. Das ist nämlich nicht unbedingt der genau gleichlautende Begriff im Profil!! Und dann lese ich dieses Profil genau durch und schreibe der Person eine auf sie zugeschnittene Mail. Ja, das kostet Zeit. Aber ich kann euch garantieren, dann werden die Nerds auch antworten. Natürlich nicht alle. Aber manche. Außerdem würde es helfen, die "Ich suche" Rubriken auf Job-Suchende abzugleichen. Klar, auch manche Verheiratete möchten raus aus ihren Beziehungen. Aber Singles auf der Suche sind sicher diejenigen, die einen neuen Partner wollen.

Bis dahin werde ich weiter freundlich abschlägig antworten. Ja klar, das mache ich jedes Mal. Außer natürlich die geschroteten Nordsee-Zuschriften, da swipe ich weiterhin direkt nach links.

The horrors of PHP

Wenn herauskommt, dass ich tatsächlich noch PHP bei manchen Kunden einsetze, bin ich vermutlich bald arbeitslos. Aber ich kann alles erklären!!! Das hat.. historische Gründe. Und für manche Zwecke ist das Framework tatsächlich ziemlich brauchbar, vor allem aus dem Preis-Leistungswinkel heraus betrachtet.

Heute ein kleines Schmankerl, das mich einen halben Tag gekostet hat und mit einem Schlag gegen die Stirn endete, den ich heute noch spüre. Ausgangssituation ist die Befüllung eines Array mit weiteren Strukturen (auch assoziative Arrays). Dabei werden manchmal neue Einträge erzeugt, während in anderen Fällen ein bereits bestehender Eintrag ergänzt wird.

Consider this code:

$main = array();

$first = array(); // erster Eintrag
$first["bla"] = "blup";

$main[] = $first;

// wenn man diesen Eintrag noch ändern will
$change_it = end($main);
$change_it["bla"] = "blip";

// schaun wir mal
print_r($main);

Huch, immer noch "blup"! Ist klar, end() liefert nur eine Kopie. Man muss sich also eine Referenz holen. Dies gelingt mit dieser ziemlich "eingängigen" (höhö) Syntax:

end($main);
$change_it = &$main[key($main)];
$change_it["bla"] = "blip";

Jetzt ist es fein, in "$main" ist des nun korrekt mit "blip" überschrieben. Doch damit nicht genug. Jetzt kommen wir zum eigentlichen Spezialisteneinsatz.

// Ein weiteres Element hinzufügen
$change_it = array();
$change_it["bla"] = "blop";
$main[] = $change_it;
// schaun wir jetzt mal
print_r($main);

Ach du Sch****! Was ist denn hier passiert?


Array
(
    [0] => Array
        (
            [bla] => blop
        )

    [1] => Array
        (
            [bla] => blop
        )
)

Meine Erwartungshaltung wäre gewesen, dass durch die Zuweisung der Neuanlage des Arrays der Referenz-Bezug aufgehoben ist. Aber das ist nicht der Fall! Füge ich folgendes ein:

unset($change_it);

funktioniert es wie erwartet:

Array
(
    [0] => Array
        (
            [bla] => blip
        )

    [1] => Array
        (
            [bla] => blop
        )
)

Man darf also nie vergessen, dass die Normalität nur ein dünner Schleier vor der Anarchie und dem Chaos ist.. ne quatsch, ich meine natürlich PHP nur ein Wrapper über eine C-Libary ist, deren haarige Knochen immer mal wieder hier und dort herausgucken. Musch halt wissa! Meine Güte.

2-Faktor Brainwash

Google und andere Dienstleister möchten dieser Tage neue Regelungen umsetzen. Dem Benutzer soll die 2-Faktor-Authentifizierung vorgeschrieben werden. An sich eine gute Sache, die die Zugriffssicherheit erheblich erhöht. Vor allem für Leute, die ihre Passworte an gut sichtbaren Stellen hin-bäppern oder noch besser dümmlich kurze Worte verwenden, die am besten ein einzelnes Wort ist, garniert vielleicht mit einem Großbuchstaben oder einer Zahl. Das geht möglicherweise flink verloren oder wird gekonnt mitgelesen. Hier kommt die neue Technik ins Spiel: Auf einem anderen Weg wird eine zweite Prüfung verlangt, die die erste qualifiziert. Uns begegnet das schon an vielen Stellen, z.B. in Banking-Apps, die eine Push-TAN oder einen Schlüssel von einem USB-Stick nach dem Einloggen verlangen.

Aus technischer Sicht ist es unerheblich, _woher_ der zweite Faktor kommt. Es sollte im Idealfall auf einem zweiten Übertragungsweg erfolgen, z.B. über eine SMS aufs Handy, einen zweiten E-Mail Account oder einen Service, der Einmal-Passwörter generieren kann. Ist der Anbieter fair, bietet er seinen Nutzern verschiedene Möglichkeiten an, den zweiten Faktor zu liefern. Das sind nur leider nicht alle.

In vielen Fällen ist es heutzutage nämlich nur möglich, den zweiten Faktor über eine Handy-Nummer bereitzustellen. Man hinterlegt seine Telefonnummer, installiert eine bestimmte App auf dem Telefon und wenn ein Request erfolgt, geht diese App auf und man bestätigt den zweiten Faktor. Warum ist das ein Problem? Das kommt daher, dass man damit dem Anbieter (z.B. Google) damit unfreiwillig mehr Informationen liefert, als man das vielleicht möchte:

  • Den Bezug zwischen Login/E-Mail und der Handynummer
  • Hat der Nutzer weitere Apps und Dienstleistungen des Anbieters auf dem Handy installiert, ist ebenfalls sofort der Bezug hergestellt
  • Werden über die Freigaben der 2-Faktor App möglicherweise viele Informationen des Handys im Hintergrund geteilt: Konten, Kontakte, Positionskoordinaten.. you name it

Das Gemeine daran ist, dass mit der Argumentation "zu ihrer eigenen Sicherheit", dem Mangel an Alternativen und dem fehlenden Bewußtsein der Konsequenzen der Nutzer sich nicht einmal genötigt fühlt, sondern wahrscheinlich einfach beruhigt zustimmt. Na dann: Gute Nacht, schlaft gut.

All in 100

Gerade habe ich gelesen, dass es in Österreich ein Jahresticket für 1095€ geben soll. Damit kann man in jeden Bus und jede Bahn einsteigen. Im ganzen Land. Im Fernverkehr oder im hintersten Dorf. Quasi die "ÖffiCard 100". Eine geniale Idee. Bei dem Preis muss man nicht mehr darüber nachdenken, man nimmt einfach den nächsten Bus. Kein kompliziertes "wie gehtn das mit dem Ticket hier.."

In Deutschland müsste das natürlich etwas teurer sein, aber es wäre der richtige Weg. Geltungsbereich in allen Verkehrsverbünden. Ja, es gibt die BahnCard 100 aber die ist viel zu teuer und gilt auch nur in begrenztem Umfang. Man kann damit auch nicht Bus fahren.

Dieser Schritt würde dann auch mal was zum Wackeln bringen und ein Umdenken auch in der breiteren Masse vorbereiten, die sich ein Leben ohne Pkw noch gar nicht vorstellen können. Mit Salami-Taktik wird es nicht gehen.

Thunderbird Kalender Termine

Ich habe endlich den Fix für ein jahrelanges Ärgernis gefunden. Ich verwende schon immer Mozilla Thunderbird und den darin eingebauten Kalender Lightning. Durch die vorhandenen Plugins kann man gleichzeitig lokales, Google- und Office365 Kalender hinzufügen, dann ist alles übersichtlich an einem Platz.

Eine Sache funktionierte allerdings bisher nicht vernünftig: Die Terminbestätigungen. Diese werden immer per Default von der *ersten* E-Mail Adresse in der Kontenliste versendet und nicht etwa von der E-Mail Adresse aus, an die die Einladung ging (wie man vermutet hätte). Lustigerweise merkt man das erst, wenn man vom Kunden auf einmal Termin-Updates und sonstige Mails an die private Mailadresse bekommt, obwohl man sie nie wissentlich bekannt gegeben hat.

Ich habe überall in Thunderbird nach einer Einstellungsmöglichkeit gesucht und endlich in den Kalendereinstellungen selbst gefunden: Dort gibt es einen E-Mail Eintrag:

wer hett au dees denkt

Dieser wird bei Anlage eines Kalenders ungefragt auf den ersten Listeneintrag gesetzt.

Unfug

Diese Zitate stammen aus einer vor einiger Zeit durchgeführten Umfrage auf Twitter (das ich nicht nutze), wie denn Vorgesetzte oder Kollegen in einer Besprechung spinnerte Ideen am besten in die Tonne hauen (können). Wenn man schon jemand beleidigt, sollte es doch möglichst elegant zugehen, oder nicht?

Aus Ihrer Perspektive ist das sicherlich eine mögliche Überlegung.

Mit dieser, doch sehr individuellen Auffassung habe ich mich im bisherigen Verlauf meiner beruflichen Laufbahn zuvor noch nicht befassen müssen.

Diesen Ansatz halte ich für so überarbeitungsbedütftig, dass es er aus Gründen der Effizienz nicht weiter verfolgt werden sollte.

Ein interessanter Ansatz, auch wenn er der Realität nur wenig zugewandt scheint.

„Sehr interessant“. Oder, schweizerisch: „Hm, spannend.“

Eine solch gedankliche Kühnheit ist mir bislang noch nicht begegnet.

Vielen Dank für deinen Beitrag, Christian.

Ihre Einlassung hat möglicherweise einen literarischen Wert. Ein Zusammenhang mit der hier erörterten Sachlage kann jedoch nicht hergestellt werden.

Unter Berücksichtigung der widerstreitenden Interessen, vermag die Gegenseite doch mehr zu überzeugen.

Ich möchte nicht sagen, dass dies sinnloser Mist ist – aber ich möchte Ihnen diese Betrachtung zumindest zur Reflektion angeboten haben.

Verteilungskampf

Das Gesundheitsministerium hat entschieden, wer wann den China sorry Corona-Impfstoff erhält. Bei so einer fundamentalen Überlegung die 100% der Bevölkerung angeht, hätte man vielleicht erwartet, dass hier der Bundestag mitredet und eine öffentliche Debatte führt. Aber nicht doch. Wie ich gelernt habe, gibt es verschiedene Impfstrategien. Zwei wesentliche dabei sind a) die Reduzierung der Sterblichkeit und b) die Hemmung der Ausbreitung. Man hat sich nun ohne weitere Diskussionen für a) entschieden. Beide Verfahren haben Vor- und Nachteile. Andere Länder wie z.B. Israel (ursprünglich mit viel schlimmeren Infektionszahlen, heute wesentlich "besser" als wir) fahren Programm b). Hier werden nach dem med. Personal als erstes die Menschen mit maximalen Kontakten geimpft. Junge, also Abiturienten und Studenten, dann Busfahrerinnen und Verkäufer, you get the idea. Das führt meiner Meinung nach über einen Umweg auch zum Ergebnis a) allerdings nachhaltiger und mit kürzerer Lähmung des öffentlichen Lebens. Es geht darum die "Verteiler" aus dem Verkehr zu ziehen statt Symptombekämpfung am Ende der Kette zu machen. Ihr merkt schon, welche Strategie ich fahren würde. Dazu kommt noch eine gewisse Unfähigkeit Behäbigkeit der Behörden, die das Ganze umsetzen müssen. Alle Aufmerksamkeit richtet sich auf die Unterschiede der Wirksamkeit von Impfstoffen, statt schnell ein skalierendes System zur Massenimpfung auf die Beine zu stellen. Damit zerschlagen sich in meiner Wahrnehmung alle Hoffnungen auf ein baldiges Ende des Status quo, der die Indikation als Maß für Einschränkungen des öffentlichen Lebens nimmt.

Kennt ihr die Marzipankartoffel von Loriot?

Warum kann die Produktion und Verteilung des Impfstoffs nicht an die erste Stelle gesetzt werden? Ein Ende mit Schrecken statt Schrecken ohne Ende? Derweil entstehen immer neue Mutationen und wir werden mit diesen zaghaften Ansätzen noch lange damit zu tun haben. Dass das Ganze in eine Superwahljahr stattfindet ist darüberhinaus noch ein Problem - das Versprechen von Entscheidungskompetenz und Lockerungen der Wählerfischer-Trick '21.

SVN to Git (Part III)

Keine weiteren Details, nur ein kleines Addendum. Eine Info, die ich immer wieder vergesse und hier (auch für euch) aufbewahre. Hin und wieder kommt es vor, dass man ein neues Repository anlegen möchte. Ja, sogar bei mir gibt es gelegentlich neue Projekte ;-) Diese entstehen nun normalerweise nicht auf dem Server sondern auf der Arbeitsstation oder dem Laptop, den man unterwegs dabei hat. Um so ein Projekt remote zu tracken (und vor allem zu sichern) legt man ein remote repository auf dem Server an. Ich habe dazu ein Wurzelverzeichnis für alle serverseitigen Git-Repositories. Das ist praktisch, weil man diese so einer einfachen Datensicherung zuführen kann. Man kann dann folgendermaßen vorgehen:

cd /usr/local/git_root
mkdir git_newProject
git init git_newProject
cd git_newProject
git config --bool core.bare true

Nach "git init" muss man ggf noch (rekursiv) die Berechtigungen des Folders anpassen. Wenn man (wie ich) git mit ssh verwendet, sollten alle Anwender die auf das Verzeichnis zugreifen Schreibberechtigungen haben.

Jetzt kann man das lokale Repository in das eben angelegte leere Repository pushen:

git push --set-upstream origin master

Da noch keine Tracking-Informationen vorhanden sind müssen diese per upstream Option gesetzt werden. Jetzt sind beide Repositories in Sync und man kann mit dem bekannten push/pull Verfahren Änderungen übertragen.