Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Okt 15, 2019 17:13

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 63 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5
Autor Nachricht
 Betreff des Beitrags: Re: Radon Framework
BeitragVerfasst: Fr Apr 06, 2018 17:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2562
Wohnort: Berlin
Programmiersprache: C/C++, C#
Code Feed
Die Codefeed.org URL hab ich registriert und erstmal ein github Website angelegt, die ich noch mit Inhalt füllen muss.
CodeFeed hab ich auch als Marke angemeldet und eine Firma registriert, Steuer und so weiter.

Radon CMake framework
Radon CMake framework liegt nun bei Codefeed und mit hilfe von sphinx, travis-ci und ein custom cmake parser kann ich nun CMake Datein parsen und Doku generieren.
Hier ist die Doku vom Framework und das witzige daran ist, das Framework erstellt die doku über sich selbst xD
Sämtliche fertige API ist mit rcf_ makiert und nur diese hab ich Dokumentiert.
Neben der Doku hab ich ein Paketsystem für CMake implementiert, anfangs war es nur auf das RCF Repo beschränkt aber ich hab es dann so umgebaut, dass man weitere Repos hinzufügen kann und damit interne oder vieleicht auch vom RCF Repo getrennt ein globales Repo für bestimmte Bereiche anbieten kann. Das ganze ist ziemlich einfach um zu setzen, man kann im einfachsten Fall ein github repo erzeugen und dort in einer bestimmten Strutur die Pakete pflegen und gibt im CMake Projekt nur noch das Repo an.
Hier mal ein Beispiel, wie ich das interne Paket Repo von meiner Firma in CMake nutze.
Code:
  1. project(CoolProject)
  2. include("Integrate.cmake")#short bootstrap file to integrate RCF
  3. rcf_register_package_repository("PTScientists" "git" "ssh://git@bitbucket.pts.intern/gs/package-repository.git")
  4.  
  5. rcf_addpackage(luajit)#part of RCF Repo
  6. rcf_addpackage(libccsds dev)#part of PTS Repo
  7.  
  8. rcf_generate(executable APP App "Tools")
  9.     rcf_add_recursive("app/" "Source")
  10.     rcf_add_dependencies(luaJIT_Static libCCSDS)
  11. rcf_endgenerate()

Mit der Vereinfachung verliert man Kontrolle aber man kann ja immernoch die CMake API verwenden, sollte man richtig tief im Projekt spezielle sachen machen wollen aber ich hab dies in meinen Projekten eher nicht.
Bei Embedded ist dies oft der Fall aber da konfiguriere ich lieber mit meiner High API und ändern nachträglich die low level Settings, wie Compiler/Linker flags für einzelne Targets und Datein.

Ich hab nun auch angefangen ein Buch zu CMake zu schreiben und wie man Projekte designen und vorallem nicht designen sollte, wenn man sie verständlich und wartbar halten will.
Das ist mehr eine Zusammenfassung meiner Erfahrung aus den letzten Jahren mit diversen verschiedenen Projekten und wo CMake schwächelt und wo es seine stärken hat.
Im Rahmen von Radon CMake framework hab ich auch schon einiges an Wissen angehäuft, wie man Util Code für CMake schreiben sollte und wo es bei der CMake API noch ganz schön hakt und man durch Konzepte, wie in meinem Framework sich viel Nerven und Probleme erspart.

Radon Framework
Ich hab eine clang formatter file hinzugefügt aber mache aktuell noch änderungen daran, das passende Code Formatter Tool von clang erkennt diese Datei und eine IDE/Editor mit support tut dann diese auf den aktuellen Code anwenden. Ich nutze z.B. ein Plugin in Visual Studio, welches beim Speichern die Datei erkennt und dann den Code passend formatiert.

Ich habe einen bisschen im Security Bereich gearbeitet und eine Keychain API hinzugefügt.
Der neue Bereich Security enthält aktuell folgende Funktionen.
  1. generierung sicherer zufälliger Zahlen, in gewünschter Länge
  2. sicheres 0 auffüllen, welches nicht weg optimiert werden kann
  3. lese user encrypted entry
  4. schreibe user encrypted entry
  5. lösche user encrypted entry
  6. größe von user encrypted entry
  7. existiert ein bestimmter entry
Im Hash Bereich hab ich PBKDF2 mit SHA-1 hinzugefügt, da dies die gängige Methode ist, Passwörter zu generieren und zu prüfen.
Man kann nun also im gesichertem Bereich vom Betriebsystem(aktuell nur Windows angebunden) Passwörter hinterlegen und somit ermöglichen, einen Authentifikationsserver zu schreiben oder auf Client Seite sicheres automatisches einloggen zu realisieren.
Die Keychain API kümmert sich darum, das Passwort einmal an zu nehmen, zu verarbeiten, sicher aus dem Speicher zu tilgen und eine verschlüsselte Form im zusätzlich verschlüsseltem Userspace zu hinterlegen.
Da die encryption der Userspaces auf den einzelnen OS und Desktopmanager unterschiedlich ausfällt, mach ich das übliche Verfahren bereits vorher und hinterlege diese.

Ich hab noch ein bisschen am Software rasterizer gearbeitet aber suche aktuell ein oder mehrere Bugs in der Lineare Algebra, die ich dafür nutze, da meine Testdreiecke ziemlich schräge Ausgaben erzeugen.
Zeit ist hier momentan eher der limitierende Faktor :\

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Radon Framework
BeitragVerfasst: Do Jan 03, 2019 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2562
Wohnort: Berlin
Programmiersprache: C/C++, C#
Ich bin im letzten Jahr nur wenig zum coden gekommen und hab die Ziele nicht erreichen können.
Die Firma hab ich gegründet aber nix für gemacht :roll:
Dieses Jahr möchte ich anknüpfen und hab den Kurs ein bisschen geändert.
Organesson, Krypton Build und Tellurium sind für mich der Fokus.

Ich modularisiere nun meine Codebase und verschiebe dabei den Code in neue git repos.
So kann ich etwas übersichtlicher arbeiten und auf lange sicht auch die API besser designen.
Über Weihnachten und Neujahr hab ich folgende Projekte angelegt und ausgearbeitet.

Radon framework Console
Das git repo enthält eine README.md, wo ich neben der Beschreibung die Featurelist und unterstützten Systeme definiere.

Radon framework Color space
Das git repo ist genauso aufgebaut und bietet die nötigen funktionalitäten, um zwischen Farbräumen hin und her zu transformieren und interpolationen zwischen Farben zu machen. Das Ziel für dieses Module ist auch eine Liste von Farben zu verarbeiten. Eine Image Klasse kann dann über dieses Modul dann Farbräume erkennen, umwandeln, manipulieren und analysieren. Das ganze ist sehr komplex, da es z.B. diverse Referenz Weiß Werte gibt und dann noch Gammakorrektur, sowie diverse RGB Workspaces, die es recht komplex machen.

Radon framework Enterprise
Das git repo wird auch so aufgebaut werden und sich darauf konzentrieren High level Netzwerk, Security und Buisness services zu enthalten. Dazu gehören HTTP2, TLS, DNS, DB, NTP, LDAP, mDNS, Keychain und einiges andere. Radon framework wurde durch HTTP ziemlich zugemüllt, HTTP, Services und einiges mehr wandert aktuell rüber in das Enterprise repo und hat dort dann neue Möglichkeiten.

Radon framework Testing
Das Repo gibt es noch nicht und mein BDD, Unit Test APIwird dort hin wandern und wachsen.

Radon framework Diagnostic
Das Repo gibt es noch nicht und mein Debugging, profiling und monitoring code wird dort hin wandern und ausgebaut werden.
Mir fehlt aktuell z.B. Stack tracing, crash dump generation und support für externe services wie z.B. Prometheus/Grafana.

Radon framework UI
Das Repo gibt es noch nicht und mein gesammter Fenster und render code soll dort hin.
Dort möchte ich dann den Software rasterizer weiter schreiben, das UI so umbauen, dass es wie bei React recht locker flockig zusammen gebaut und komponiert weden kann. Aktuell fahre ich eher den Ansatz von Delphi VCL aber ohne Editor ist es recht umständlich UI damit zu bauen und es verbraucht viel Speicher und CPU Zeit, da prinzipiell immer wieder alles neugebaut wird. Gerade für OpenGL rendering macht es aber mehr sinn auf States und Properties zu achten und eine Analyse der Änderungen zu machen. Damit nur änderungen passieren, wenn sie auch auswirkungen haben und dann auch nur partiell geändert werden. React macht das echt super gut und es nutzt eine intern domain specific language, um es kompakt zu halten.
Ich sehe da einige kleine refactorings und eine menge neuen Code aber der bisherige Code wird mir überwiegend erhalten bleiben können.

Radon framework
Es wird wesentlich kleiner und sauberer werden, wenn erstmal der ganze code rausgewandert ist.
Aktuell steht Allocator ganz oben auf der Liste, ich hatte die Infrastruktur angefangen und auch schon hier und da mit gearbeitet aber es fehlt noch einiges.
Container support, workarounds für range-for und initialization lists brauch ich auch noch. Aktuell nutzte ich STL aber davon will ich weg.
Mein Ziel ist hier ARM64 support aus zu bauen, damit ich auf den nun anrollenden Zug von ARM64 Laptop und Desktop Systeme aufsteigen kann. Ende letzten Jahres kamen die ersten Windows 10 Arm64 Tablets und Laptops raus und dieses Jahr dürfen wir die ersten ernsten Chips erwarten, die Intel den Mobile Bereich abgräbt. Im Serverbereich hat Azure und AWS ebenfalls letztes Jahr angefangen ARM64 für Windows und Linux aus zu rollen. Apple ihr aktuelles iPad ist fast so leistungsstark wie ihr Mac Mini und ist ein custom ARM64.

Ich hab seit Ende letzten Jahres zugriff auf AWS mit ein netten Budget zum experimentieren und entwickeln. Ich hab schon diverse learnings gemacht und sehe dort den Bedarf an sehr effizienten HTTP2 servern, die auf ARM64 mit wenig Arbeitsspeicher aber extrem viel Festplatten Platz auskommen. Die Instanzen haben in der Regel 1 Kern, 1GB Ram und 20GB high speed SSD und profitieren davon, wenn sie keine punktuelle Last haben. Dann kann man am kostengünstigsten hosten. Eine Centos 7 minimal instanz braucht ca 100MB vom Arbeitsspeicher, man hat also 800MB Arbeitsspeicher für den Server, ca 18GB SSD und 99% der CPU.

Ich fange nun an den Code raus zu räumen, dann will ich mit Organesson aufräumen und vermutlich muss ich noch ein Radon framework Mesh oder so ähnlich anlegen, wo Octrees, Triangulation und so weiter drin landet aber das werde ich dann sehen.
Sobald ich was in Organesson brauch werde ich es in den Modulen einbauen, wie z.B. Allocators, wenn es an die optimierung geht oder ARM64 portierung und BDD für Tests. Erst wenn Organesson fertig ist, will ich mich Tellurium widtmen und da werde ich recht viel Zeit brauchen, da HTTP2 und diverse andere Technologien gebraucht weden.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Radon Framework
BeitragVerfasst: So Feb 03, 2019 03:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2562
Wohnort: Berlin
Programmiersprache: C/C++, C#
Radon framework Testing
Das git repo ist angelegt und ich hab eine geplante Feature List dort geschrieben.
Ich denke, dass ich bald damit anfangen kann dort die Tests aus zu bauen, damit ich sie produktiv nutzen kann.
Aktuell hab ich einfach nur den ganzen Unit und BDD code rüber geschoben.

Radon framework Diagnostic
Das git repo hat noch keine Liebe erhalten, ich hab wirklich nur den Code ausgelagert und ich glaube auch nicht, dass ich da so schnell was machen werde. Einzig WMI Performance Counter wäre ein Thema, damit ich systen und Prozess spezifische CPU Load bekomme. Die Information hätte ich gerne später für mein aktuelles Projekt.

Radon framework UI
Das git repo existiert nun und ich will für mein Projekt dort die UI Komponenten umbauen, dass sie wie bei Radon framework Console erstellt und verwaltet werden.

Radon framework Console
Es gibt einige neuerungen wie mehr Kontrolle über den Cursor. Man kann ihn an/aus schalten, bewegen und die position speichern und laden.
Die meisten System-Funktionen sind in ein gemeinsammen Bereich gewandert, so kann ich viele Teile in der Linux Testumgebung wieder verwenden.

Woran ich aktuell arbeite ist die erstellung von UI per DSL und das ist mitlerweile schon echt toll :)
Bild
Code:
  1. int main(int argc, const char** argv)
  2. {
  3.   RF_IO::Console console;
  4.   console.SetCursorVisible(false);
  5.   VirtualConsole vc;
  6.   vc.SetTree(Div(P{With("text", "Organesson command line"_rfs),
  7.                    With("color", RF_Color::RGB{80, 150, 255})}),
  8.              Div(Hardware(), Features()), Div(BuildMonitor()));
  9.   for(;;)
  10.   {
  11.     if(vc.ShouldUpdate())
  12.     {
  13.       console.Clear();
  14.       console.Log(vc.ToStyle());
  15.     }
  16.     RF_Thread::Thread::Sleep(RF_Time::TimeSpan::Zero);
  17.   }
  18. }
  19.  
  20. struct Hardware : public Component
  21. {
  22.   Hardware()
  23.   : Component(
  24.         Div{P{With("text", "Hardware"_rfs)}},
  25.         Div{P{With("text", "Cores"_rfs)}, P{With("id", 4)},
  26.             P{With("text", "Worker"_rfs)}, P{With("id", 5)}},
  27.         Div{P{With("text", "Bytes read"_rfs)}, P{With("id", 6)},
  28.             P{With("text", "Read operations"_rfs)}, P{With("id", 7)}},
  29.         Div{P{With("text", "CPU usage"_rfs)}, Progress{With("id", 1)}},
  30.         Div{P{With("text", "Memory usage"_rfs)}, Progress{With("id", 2)}}),
  31.     MaximumMemory(RF_SysHardware::GetPhysicalMemorySize())
  32.   {
  33.     m_CPUUsageProgress = reinterpret_cast<Progress*>(GetElementByID(1));
  34.     m_MemoryUsageProgress = reinterpret_cast<Progress*>(GetElementByID(2));
  35.     m_ReadBytesText = reinterpret_cast<P*>(GetElementByID(6));
  36.     m_ReadOperationsText = reinterpret_cast<P*>(GetElementByID(7));
  37.   }
  38. //...
  39. };

Wie man sehen kann erzeuge ich Componenten als Hierachie und zusätzlich gibt es noch ein ComponentOperator namens With, welcher modifikationen temporär zwischen speichert und dann diese auf die Componenten ausführt. Ich bin bemüht das ganze mit Move Semantik zu lösen, so werden die Objekte nicht neu erzeugt und kopiert, sondern fallen bis zum Ende durch und werden dann auch entsprechend nicht zerstört.
Ich habe den ComponentOperator With als eigenes Objekt gebaut, weil man so den Code einfacher lesen kann.
With schaut in der Komponente nach der State Liste, welche eine HashList ist und der erste Parameter ist der Key, während der 2. der neue Wert ist.
Jede Komponente kann States registrieren wie z.B. die Komponente P text und color registriert oder Progress den State current hat.
Prinzipiell werden Komponenten horizontal gezeichnet, also die Verfügbare Breite wird durch die Anzahl der Kinder geteilt und jedes Kind bekommt dann ein Teil.
Die Div Komponente ist ein Layouting hilfe, welches in der nächsten Zeile anfängt und kann man tolle Layouts basteln.
Nach dem ich den Code in Radon framework Console gepackt hab, will ich mich wieder mit Spec Test beschäftigen und dann wieder weiter an mein Tool arbeiten aber dann Test driven.


Dateianhänge:
ConsoleUI.jpg [42.13 KiB]
Noch nie heruntergeladen

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 63 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.065s | 16 Queries | GZIP : On ]