Die AdSense auf meinem Blog hatte ich mir letzten nochmal angesehen und muss sagen, dass Werbung mich nervt. Und das so sehr, dass ich Adsense entfernt habe. Den mit dem Popup Ähnlichen Werbung und Werbebanner zwischen den Blogpost empfinde ich als sehr penetrant und ist oft ein Grund, warum ich einige Blogs und Webseiten verlasse.
Wir haben nun das Zeitalter der KI erreicht, weshalb hier weniger Lösungen und mehr das Technik Tagebuch Posts kommen. Lösungen verlinke ich Kategorisch extra auf den weiteren Seiten des Blogs
Samstag, 24. Februar 2024
Werbung auf dem Blog abgestellt
Die AdSense auf meinem Blog hatte ich mir letzten nochmal angesehen und muss sagen, dass Werbung mich nervt. Und das so sehr, dass ich Adsense entfernt habe. Den mit dem Popup Ähnlichen Werbung und Werbebanner zwischen den Blogpost empfinde ich als sehr penetrant und ist oft ein Grund, warum ich einige Blogs und Webseiten verlasse.
Samstag, 10. Februar 2024
Tool Lagerverwaltung (Teil 7) Projekt stand
Im Januar hatte ich den Blog Post geschrieben, in dem ich das Problem mit der Resource aus andere Assembly gelöst hatte. Die Lösung war peinlich einfach gewesen, aber ich denke, das vielleicht die Information den einen oder anderen weiterhelfen kann.
Aber kommen wir zu dem Tool für Lagerverwaltung, das auf Grund erhöhten Aufwand bei meiner Arbeit, die ich bei meinem Kunden aktuell habe. Ein Thema, über das ich in meinem Zukünftigen Buch schreiben werde, wenn ich genug Erfahrungen aus den Projekten zusammengetragen und Humorvoll ausgearbeitet habe.
Aber kommen wir zu dem eigentlich Thema für heute. Wo stehe ich gerade mit dem Projekt?
Benötigt
- Github
- Visual Studio 2022
- .NET 7 (oder höher)
Zusammenfassen
Was sind meine nächsten Ziele, damit ich das Tool weiter entwickeln kann und welche Funktionen kommen in das Codexzier Application Framework.
Aktueller Stand
- Die Solution mit mehrere Projekten Inhalten ist da.
- Das UI Projekt selbst ist noch in WPF. Beim letzten mal wurde nur das Codexzier Application Framework für .NET MAUI angelegt.
- In den Issues habe ich nur die eine Aufgabe Konzept ausschreiben.
- Das Konzept selbst steht noch nicht im Wiki und muss noch als eigenes Kapitel abgelegt werden.
- Eine Wiki in Github anlegen für das Tool ist auch schon angelegt. Das andere Wiki war für das Codexzier Application Framework für WPF und eine neue Ausführung mit .NET MAUI ist offen.
Wo fange ich an?
Eigentlich worauf ich Lust habe, aber ich kann nicht alles auf einmal erledigen. Also Entwickle ich die Grundfunktionalitäten, die ich allgemein brauche und die ebenfalls für das Tool relevant sind, aber auch für meine anderen Pojekte, über die ich auch offen habe.
Ich brauche allgemein
- Die Projekte in der Solution aktualisieren nach .NET 8
- Eine Druckfunktion
- Style anlegen für Datagrid
Kleine Schritte
Zeitlich bin ich viel eingebunden. Wer ist das nicht, wenn man Beruflich mehr als 40 Stunden arbeitet und darüber noch eine Familie hat, mit der man gerne Zeit verbringt. Eigentlich kann ich die Privaten Projekte lassen und auch das schreiben eines Blogpost lassen. Dennoch müssen wir hin und wieder Dinge erlernen und ich lerne durch Probieren und darüber schreiben.
Montag, 5. Februar 2024
Problem bei der Entwicklung mit MS Office Interop
So ganz habe ich nicht verstanden warum das Hinzufügen des Nuget Paket Microsift.Office.Interop.Word (andere Office Interop Pakete) nicht ausreicht. Nach dem ich das Paket hinzugefügt habe und versucht habe nur die Application zu instanziieren, bekam ich einen Ausnahmefehler.
Verwendete Umgebung
- Windows 11
- Visual Studio 2022
- Office365 Installation
Nur zum laufen bringen
Die Consolen Anwendung soll eine Instanz von Word starten.
Die Variante, die nicht geht
Zur Vollständigkeit, wie ich zu dem Ausnahmefehler kam, bei der Verwendung des NuGet Pakets.
Und zum Testen ein kurzer Code Schnipsel, der eigentlich ausführbar sein sollte.
using Microsoft.Office.Interop.Word;
Console.WriteLine("Start office application! Solution 1");
var app = new Application
{
Visible = true
};
Console.WriteLine("Office application started!");
Console.WriteLine("Press any key to close the application!");
Console.ReadLine();
// close the application
app.Quit();
Die Assembly Datei konnte nicht gefunden werden, aber ich konnte nicht erkennen woran das lag. Die zu verwendete Assembly landet nach dem Kompilieren ebenfalls im selben Ordner.
System.IO.FileNotFoundException
HResult=0x80070002
Message=Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. Das System kann die angegebene Datei nicht finden.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
Alternative Lösung
Statt das NuGet Packet zu verwenden, wird bereits auf eine installierte Bibliothek zugegriffen.
Kompiliert und gestartet wird wieder mit dem selben Code Schnipsel.
using Microsoft.Office.Interop.Word;
Console.WriteLine("Start office application! Solution 2");
var app = new Application
{
Visible = true
};
Console.WriteLine("Office application started!");
Console.WriteLine("Press any key to close the application!");
Console.ReadLine();
// close the application
app.Quit();
Wird die Anwendung ausgeführt, sollte sich die Word Anwendung ohne Seite starten.
Drück mit der Consolen Anwendung eine Taste, wird der Schließen Befehl ausgeführt und die Word Anwendung sollte sich dann schließen.
Warum geht das (nicht)?
Das habe ich mich auch gefragt und wird zunächst ein offener Punkt bleiben.
Die Installierte Assembly zu verwenden ist klar, dass muss funktionieren. Hat bereits vor 10 Jahren so funktioniert und geht auch heute noch.
Aber wenn man die Office Assembly per NuGet Paket einbinden kann, sollte dies auch gehen. Die Beschreibung von Microsoft (Link) beschreibt bzw. gibt einen Hinweis, dass die Implementierung abweichen kann von der Beschreibung. Dennoch frage ich mich, wo meine Consolen Anwendung schaut, wenn versucht wird das NuGet Paket zu verwenden.
Es geht doch (noch)
Im letzten Absatz habe ich mir die Frage schon fast beantwortet. Wenn man nicht gerade auf der aktuellsten .NET unterwegs ist, funktioniert die Beschreibung von Microsoft genau so wie beschrieben. Wenn das Projekt mit .NET Framework 4.8 eingestellt ist, also bevor die .NET Welt aufgeräumt wurde, dann funktioniert dies auch. Code ist praktisch das selbe, nur halt ohne TOP Level Statement.
Samstag, 27. Januar 2024
.NET MAUI - Problem beim Einbinden einer Resource aus andere Assembly
Eigentlich war der Fehler sehr dämlich von mir, aber ich bin wegen der mir unbekannten Fehlermeldung nicht auf das gekommen, was eigentlich die Ursache war. Nachdem ich den Fehler Verstand, dachte ich, ich schreibe das mal auf als Blogeintrag. Aber andererseits habe ich auch zu dem Thema im Internet nichts gefunden.
Benötigt
- Visual Studio 2022
- Mindestens .NET 7
- .NET MAUI Application
- .NET MAUI Library
Was ist das Ziel?
Die Styles für die Steuerelemente, sollen über eine andere Assembly geliefert werden. Damit dies funktioniert, muss in der Application die Resource in der App.xaml eingetragen werden. Für das Beispiel ist in der Assembly eine Resource abgelegt mit einem Color Style, welches mit einem Key Wert gesetzt ist. In der Application soll dann der Style mit StaticResource einsetzbar sein.
Umfeld für Style aufbauen
In der Resource ist ein Style zu einem Color angelegt. Hier nehme ich eine Sache vorweg, hier fehlt die Klasse und komme im späteren Schritt wieder darauf zurück.
Damit meine Application darauf zugreifen kann, muss die Assembly in die Abhängigkeiten hinzugefügt werden.
Rechte Maustaste auf Dependencies und im Kontext Menü 'Add Project Reference'
Dann aus der Projektübersicht der Solution, die zu verwendende Bibliothek auswählen.
In der Anwendung muss in die Datei App.xaml die Reference händisch eingetragen werden. Automatische Vervollständigung funktioniert an der Stelle nur zum Teil.
Nun der Merge, um hier die Styles einzubinden. Das Unterstreichen zeigt uns an der Stelle ein Problem.
Am Anfang habe ich bereits erwähnt, dass in der Datei CodexzierTheme.xaml die Klasse fehlt.
Also bringen wie die Klasse noch ein.
Der Fehler in der Anwendung aus der Datei App.xaml ist nun weg.
Auf der MainPage.xaml, habe ich ein Rechteck, welches als Hintergrundfarbe den Style aus der Assembly bekommt. Leider lässt sich das nicht über die Autovervollständigung nicht eintragen.
Bis hier her, sieht die Sache in Ordnung aus, mit Ausnahme, dass die Ressource hier nicht gefunden wird über IntelliSense. Ich starte die Anwendung mit F5 und direkt nach dem Start erhalte ich bereits meinen Fehler, den ich bereits als Titelbild gewählt habe.
Was fehlt?
Eigentlich sollte klar sein, dass hier die Klasse selbst für die Resource fehlt. In WPF, Silverlight, UWP und XAML musste die Klasse nicht mit eingebunden werden. Bei Xamarin habe ich keine Erfahrungswerte.
Per Copy und Paste, habe ich meine ResourceDictionary Datei und nur Namentlich angepasst. Was ich zu diesen Punkt nicht wusste, dass im .NET MAUI zur ResourceDictionary ebenfalls eine Partial Klasse zugeordnet wird.
Nach dem ich zum testen eine ResourceDictionary aus dem .NET MAUI-Templates hinzugefügt habe, war schon gleich der unterschied zu sehen.
Nachdem ich dies so übernahm, ging auch der Aufruf über IntelliSense …
… und die Anwendung ließ sich dann starten mit der gewünschten Farbe aus dem Style.
Schlusswort
Wenn das auf der Microsoft Seite so steht, dann funktioniert das auch in der Regel. Das wäre mir auch neu gewesen, wenn eine Beschreibung nicht dem entspricht. Aber meine Erfahrung hat mich an der Stelle in die irre geführt. Die Suche über das Internet ergab ähnliche Ergebnisse, aber keines wies darauf, welche Abhängigkeiten im Umfeld notwendig sein sollten, damit das Einbinden von Resourcen aus einer anderen Assembly funktioniert.
Links
Dienstag, 12. Dezember 2023
Ostersonntag und Ostermontag berechnen
Eine Aufgabe auf der Arbeit brachte mich dazu, daran zu denken, dass Offizielle Feiertage ja berechnet werden könnte. Somit kam ich auf einen Blog, welches die Feiertage mit SQL Sripts löste. Leider schien dies nicht ganz klar zu sein, für welche Datenbank. Ist jedoch nichts, was mich aufhält und nahm die Wikipedia Beschreibung über Gausche Osterformel (Wiki).
Verwunderlich ist, dass meine Suche im Internet keine Ergebnisse erbrachte für MS SQL. Manchmal glaube ich, dass mir die Suche absichtlich keine oder kaum brauchbare Ergebnisse zeigt.
Benötigt
Rider oder Visual Studio für C#
Wann ist Ostern für das Jahr
Mit Eingabe des Jahr, soll mir der Ostersonntag und Ostermontag berechnet werden.
Gaußsche Osterformel
Seien wir doch ehrlich, wie ist man auf so eine Formel nur gekommen. Bis letzte Woche dachte ich, dass wird irgendwie entschieden und fertig. Aber weit gefehlt. Im Gegensatz zu anderen Feiertagen, ist dieser immer an einem Sonntag und Montag. Oder schon mal was vom Osterdienstag gehört. Die anderen Feiertage sind an ihrem festen Datum platziert.
Folgender Code ermöglicht die Eingabe und Ausgabe einer C# Consolen Anwendung. Für die Berechnung werden nur Ganzzahlen verwendet und die Funktion Modulo.
Console.WriteLine("Calculate Ostern");
Console.WriteLine("Enter year:");
var year = int.Parse(Console.ReadLine());
var a = year % 19; // Zyklus
var b = year % 4; // Schaltjahr
var c = year % 7;
var k = year / 100;
var p = (8 * k + 13) / 25;
var q = k / 4;
var m = (15 + k - p - q) % 30; // Korrektur Sonntag und Montag gleichung
var n = (4 + k - q) % 7; // Korrektur Sonnengleichung
var d = (19 * a + m) % 30; // Mondentfernung
var e = (2 * b + 4 * c + 6 * d + n) % 7;
var day = 22 + d + e;
var ostersonntag = (new DateTime(year, 3, 1)).AddDays(day - 1);
var ostermontag = ostersonntag.AddDays(1);
Console.WriteLine($"Ostersonntag: {ostersonntag:dd.MM.yyyy}");
Console.WriteLine($"Ostermontag: {ostermontag:dd.MM.yyyy}");
Console.WriteLine("Press any key to exit");
Ausnahmen
Wie in jeder Sache kommen auch Ausnahmen vor, die selbst der Algorithmus nicht hergibt. An der Stelle kann ich kann ich nur auf die Wiki Seite oder einer anderen Lektüre verweisen.
Montag, 4. Dezember 2023
Arduino Nano ESP32 Mini Beispiel - Onboard RGB LED Fade in und out
Im November habe ich den aktuellen Arduino Nano ESP32 gekauft und habe damit einiges vor. Aber bevor ich den Arduino Nano ESP32 fest verbaue, probiere ich ein paar kleine Aufgaben für den Dezember.
Benötigt
- Arduino Nano ESP32
- Aktueller Arduino IDE ab Version 2.0
Die Aufgabe ist sehr einfach und ist praktisch das Hello World unter den Mikrocontrollern. Ich lasse die LED-Blinken. Jedoch kann der Arduino Nano ESP32 mehr als nur eine Farbe leuchten und kann auch mit der Methode 'analogWrite' gesteuert werden. Der folgende Code lässt die Grüne LED ein und ausschalten mit Fade-Effekt.
const int LIGHTRANGE = 50;
int mLedValue = 0;
void setup() {
Serial.begin(115200);
// RGB - All LED off (HIGH set the LED off)
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_BLUE, HIGH);
}
void loop() {
Serial.println("RED Fade in");
LedFadeLed(LED_GREEN, false);
Serial.println("RED Fade out");
LedFadeLed(LED_GREEN, false);
delay(500);
}
// ========================================================================================
// can fade in or fade out the led light
// ----------------------------------------------------------------------------------------
// ledPin = Setup the LED PIN
// setOn = true for fade in and false for fade out
void LedFadeLed(uint8_t ledPin, bool setOn){
for(int i = 0; i < LIGHTRANGE; i++) {
if(setOn) {
mLedValue = 256 - i;
}
else {
mLedValue = (256 - LIGHTRANGE) + i;
}
analogWrite(ledPin, mLedValue);
delay(30);
}
}
Mittwoch, 4. Oktober 2023
Unity 3D Projekt mit Blender Dateien werden nicht geladen
Wenn im Unity Projekt der Fehler auftritt, dass Blender Dateien nicht geladen werden, dann liegt zunächst der Gedanke fern, dass die installierte Anwendung Blender ein Problem darstellt.
Wie ich zu dem Problem kam. Nun ich hatte zuerst mein Projekt wie immer in ein GitHub Repository untergebracht und wollte dann mein Projekt auf einem anderem System weiterbearbeiten. Zuerst dachte ich, irgendetwas im Projekt habe mit GitHub nicht Commitet, bis ich den richtigen Hinweis bekam, dass Blender (richtig) installiert sein muss.
Inhalt
- Unity 3D
- Blender Installation
- 3D Objekte im Blender Datei Format
Szenario
Zwei Systeme auf dem Entwickelt wird, haben die selbe Software für die Entwicklung. Das zweite System wird Verwendet, um zu prüfen, ob das Spiel auf einem Schwächerem System funktioniert. Zum Synchronisieren der Sourcen, wird GitHub verwendet und das Repository ist für Unity 3D Projekte eingerichtet.
Auf beiden System ist Blender "Installiert" aber auf dem zweit System werden die Blender Dateien in Unity 3D nicht geladen und im Öffnen Prozess erscheinen mehere Meldungen.
Unterschied der Installation
Man kann auf verschiedenen Wegen Blender installieren. Man kann über Steam oder über den Microsoft Store das Programm Blender installieren.
Vorteil, das Programm wird aktuell gehalten.
Da ich selbst nicht immer auf dem neuesten Stand bin, wie man Blender verwendet, habe ich auf meinem Hauptentwicklungssystem Blender von der Blender Seite die Installationsdatei heruntergeladen und installiert.
Auf dem zweiten System habe ich Blender über dem Microsoft Store installiert. Was mir bis dato nicht mehr bewusst war, dass installierte Apps aus dem Microsoft Store in einer eigenen Sandbox laufen, so dass die Apps nur eingeschränkten Zugriff auf das System haben. (Korrigiert mich, wenn ich falsch liege).
Lösung
Wenn man im Unity Projekt allgemein Blender Dateien verwendet, dann muss zwingend Blender auf dem System über den herkömmlichen Weg installiert sein. Also die Setup Datei von der Blender Seite herunterladen und die Installation Ausführen. Blender Download
Nach Installation von Blender und starten von Unity 3D, sollten die Blender 3D Dateien mit dem Blender Icon oder eine Vorschau des 3D Modells zu sehen sein.
Ameisen Simulation und andere Dinge
Wer lange sich schon mit C# beschäftig, hat sicherlich schon mal was von AntMe gelesen oder gehört. Diese Idee hatte ich aufgegriffen und mi...
-
Brushless am Arduino zum testen. Vielleicht für den einen oder anderen Interessant, wie eigentlich ein Brushless Motor angeschloss...
-
Arduino Nano 3.0 und Modul mit einem Beschleunigungssensor Zugegeben habe ich etwas lange gebraucht, um zu verstehen, wie ich diesen S...
-
Auf dem Markt gibt es viele verschiedene Module an Motortreibern. Diesmal verwende ich einen recht einfac...