feat(badge): Streamlined badging
Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
This commit is contained in:
@@ -242,3 +242,41 @@ pub fn Urling(prop: UrlingProp) -> Element {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn BadgeList(list: Vec<String>) -> Element {
|
||||
rsx!(
|
||||
ul {
|
||||
class: "flex flex-wrap gap-2",
|
||||
for (index, value) in list.iter().enumerate() {
|
||||
li { key: "{index}", RandomBadge { text: "{value}"} }
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn RandomBadge(text: String) -> Element {
|
||||
let badge_color = random_badge_color(text.len());
|
||||
rsx! {
|
||||
span {
|
||||
class:"text-xs font-medium me-2 px-2.5 py-0.5 rounded {badge_color}",
|
||||
"{text}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn random_badge_color(seed: usize) -> String {
|
||||
let colors = [
|
||||
"bg-blue-900 text-blue-300",
|
||||
"bg-gray-700 text-gray-300",
|
||||
"bg-red-900 text-red-300",
|
||||
"bg-green-900 text-green-300",
|
||||
"bg-yellow-900 text-yellow-300",
|
||||
"bg-indigo-900 text-indigo-300",
|
||||
"bg-purple-900 text-purple-300",
|
||||
"bg-pink-900 text-pink-300",
|
||||
];
|
||||
|
||||
colors[seed % colors.len()].to_string()
|
||||
}
|
||||
|
||||
37
src/cv.rs
37
src/cv.rs
@@ -1,7 +1,7 @@
|
||||
use dioxus::prelude::*;
|
||||
use dioxus_i18n::t;
|
||||
|
||||
use crate::components::{H4, HR};
|
||||
use crate::components::*;
|
||||
|
||||
#[component]
|
||||
pub fn CV() -> Element {
|
||||
@@ -47,7 +47,7 @@ fn WorkExperience() -> Element {
|
||||
ol {
|
||||
class:"relative border-s border-gray-700",
|
||||
CVEntry {time: t!("cv_workexperience_dd_devops_time"), title: t!("cv_workexperience_dd_devops_title"),
|
||||
technologies: vec!["Kubenertes".to_string(), "ArgoCD".to_string(), "Ansible".to_string(), "Azure".to_string(), "Docker".to_string(), "ELK".to_string()],
|
||||
technologies: vec!["Kubernetes".to_string(), "ArgoCD".to_string(), "Ansible".to_string(), "Azure".to_string(), "ELK".to_string(), "Helm".to_string()],
|
||||
description: t!("cv_workexperience_dd_devops_description")
|
||||
},
|
||||
CVEntry {time: t!("cv_workexperience_ra_ude_time"), title: t!("cv_workexperience_ra_ude_title"),
|
||||
@@ -186,44 +186,13 @@ fn CVEntry(props: CVEntryProps) -> Element {
|
||||
div { class:"absolute w-3 h-3 rounded-full mt-1.5 -start-1.5 border border-gray-900 bg-gray-700"},
|
||||
time { class:"mb-1 text-sm font-normal leading-none text-gray-500", "{props.time}"},
|
||||
h6 { class: "text-lg font-semibold text-white", "{props.title}"}
|
||||
ul {
|
||||
class: "flex flex-wrap gap-2",
|
||||
for (index, value) in props.technologies.iter().enumerate() {
|
||||
li { key: "{index}", RandomBadge { text: "{value}"} }
|
||||
}
|
||||
}
|
||||
BadgeList{ list: props.technologies }
|
||||
p { class:"text-base font-normal text-gray-400", "{props.description}"},
|
||||
{props.children}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn RandomBadge(text: String) -> Element {
|
||||
let badge_color = random_badge_color(text.len());
|
||||
rsx! {
|
||||
span {
|
||||
class:"text-xs font-medium me-2 px-2.5 py-0.5 rounded {badge_color}",
|
||||
"{text}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn random_badge_color(seed: usize) -> String {
|
||||
let colors = [
|
||||
"bg-blue-900 text-blue-300",
|
||||
"bg-gray-700 text-gray-300",
|
||||
"bg-red-900 text-red-300",
|
||||
"bg-green-900 text-green-300",
|
||||
"bg-yellow-900 text-yellow-300",
|
||||
"bg-indigo-900 text-indigo-300",
|
||||
"bg-purple-900 text-purple-300",
|
||||
"bg-pink-900 text-pink-300",
|
||||
];
|
||||
|
||||
colors[seed % colors.len()].to_string()
|
||||
}
|
||||
|
||||
fn Socials() -> Element {
|
||||
rsx! {
|
||||
div {
|
||||
|
||||
@@ -1,159 +0,0 @@
|
||||
headers_home = Home
|
||||
headers_cv = Lebenslauf
|
||||
headers_publications_projects = Artikel/Projekte
|
||||
headers_consulting = Consulting
|
||||
headers_about = Impressum
|
||||
headers_language_buttons_english = 🇬🇧 Englisch
|
||||
headers_language_buttons_german = 🇩🇪 Deutsch
|
||||
home_card_name = Tuan-Dat Tran
|
||||
home_card_gender = {""}
|
||||
home_card_text =
|
||||
Hallihallo! 👋🏻👋🏼👋🏽👋🏾👋🏿
|
||||
Willkommen auf meiner kleinen Webseite im World Wide Web.
|
||||
Mein Name ist Tuan und ich bin Linux-Bastler, IT-Security Enthusiast und IT-Automatisierer aus Leidenschaft.
|
||||
home_card_contact_button = Get in touch.
|
||||
cv_introduction_0 =
|
||||
DevOps-Engineer und Softwareentwickler mit starkem akademischen Hintergrund
|
||||
in Netzwerktechnologien und Softwareentwicklung. Spezialisiert auf Kubernetes,
|
||||
Ansible, Azure und moderne Cloud-Technologien. Praxisnahe
|
||||
Forschungserfahrung in Software-Defined Networking, 5G und Maschinellem Lernen.
|
||||
Leidenschaft für effiziente IT-Infrastrukturen, Automatisierung und
|
||||
innovative Softwarelösungen.
|
||||
cv_workexperience_title = Berufserfahrung
|
||||
cv_workexperience_se1_gefeba_title = Software Entwickler @ gefeba Engineering GmbH
|
||||
cv_workexperience_se1_gefeba_time = 2013 - 2015
|
||||
cv_workexperience_se1_gefeba_description = Nach einem Schulpraktikum wurde mir
|
||||
eine Stelle als Software Entwickler angeboten. Ich arbeitete hauptsächlich
|
||||
an internen ERP-Projekten, entwickelte ein Tool, das bei der Verwaltung des
|
||||
projektbezogenen E-Mail-Verkehrs half, und arbeitete an dem internen
|
||||
Stammdatenmanagement-Tool.
|
||||
cv_workexperience_student_fse_title = Fachschaftsratsmitglied @ UDE (Ehrenamt)
|
||||
cv_workexperience_student_fse_time = 2016 - 2019
|
||||
cv_workexperience_student_fse_description = Als Fachschaftsratsmitglied wirkte
|
||||
ich in Fakultätsausschüssen mit und organisierte soziale Veranstaltungen.
|
||||
Meine Hauptaufgaben als Mitglied waren die Verwaltung der IT-Infrastruktur
|
||||
und die Unterstützung der Studierenden bei organisatorischen und
|
||||
fachspezifischen Themen.
|
||||
cv_workexperience_se2_gefeba_title = Software Entwickler @ gefeba Engineering GmbH
|
||||
cv_workexperience_se2_gefeba_time = 2018 - 2020
|
||||
cv_workexperience_se2_gefeba_description = Als Software Entwickler bei gefeba
|
||||
Engineering arbeitete ich an dem Hauptprodukt des Unternehmens, einem
|
||||
Frame-basierten Datenaustauschsystem zur Überwachung von Industriemaschinen
|
||||
mit C# und Entity Framework. Ein weiteres Projekt, an dem ich gearbeitet habe,
|
||||
war eine Echtzeit-Anwendung zur Visualisierung von Protokollen für dieselben
|
||||
Maschinen.
|
||||
cv_workexperience_mentoring_ude_title = Mentoring @ UDE
|
||||
cv_workexperience_mentoring_ude_time = 2021 - 2022
|
||||
cv_workexperience_mentoring_ude_description = Als Mentor für Studienanfänger
|
||||
im Studiengang Informatik der Universität Duisburg-Essen habe ich zu Beginn
|
||||
jedes Semesters Gruppen von ~20 Studienanfängern in ihr neues akademisches
|
||||
Umfeld eingeführt. Ich bot zusätzliche organisatorische und technische
|
||||
Unterstützung für das erste Jahr an der Universität an.
|
||||
cv_workexperience_ra_ude_title = Studentische Hilfskraft @ UDE
|
||||
cv_workexperience_ra_ude_time = 2021 - 2024
|
||||
cv_workexperience_ra_ude_description = Während meiner Tätigkeit bei der
|
||||
Network Communication System Research
|
||||
Group an der Universität Duisburg-Essen habe ich an der Forschung rund um
|
||||
Software Defined Networking, 5G, Staukontrollalgorithmen und föderiertes
|
||||
maschinelles Lernen mitgearbeitet. Ich habe die On-Premise- und Cloud-
|
||||
Infrastruktur, das Inventarsystem und die Online-Präsenz der Forschungsgruppe
|
||||
aufgebaut und verwaltet.
|
||||
cv_workexperience_dd_devops_title = DevOps Engineer @ DextraData
|
||||
cv_workexperience_dd_devops_time = 2025 - Jetzt
|
||||
cv_workexperience_dd_devops_description = Als DevOps Engineer bei DextraData
|
||||
bin ich Teil eines horizontal strukturierten DevOps-Teams und verantwortlich
|
||||
für die Verwaltung und Optimierung sowohl cloudbasierter als auch On-Premise-
|
||||
Infrastrukturen, die unsere Single-Tenant-SaaS-Lösungen hosten. Meine Aufgabe
|
||||
besteht nicht nur darin, diese Umgebungen zu warten und zu verbessern, sondern
|
||||
auch Automatisierung und Effizienz durch moderne DevOps-Praktiken
|
||||
voranzutreiben. Ich war maßgeblich an der Umstellung unserer Kubernetes-
|
||||
basierten Deployments von manuellen Prozessen auf einen stärker
|
||||
automatisierten und skalierbaren Ansatz beteiligt, indem ich Infrastructure as
|
||||
Code mit Azure Resource Manager und Ansible eingesetzt habe.
|
||||
cv_socials_title = Profile
|
||||
cv_education_title = Bildungsweg
|
||||
cv_education_bachelor_title = BSc Angewandte Informatik - Systems Engineering
|
||||
cv_education_bachelor_time = 2015 - jetzt
|
||||
cv_education_bachelor_description = ""
|
||||
cv_skills_title = Fähigkeiten
|
||||
cv_skills_devops_title = DevOps
|
||||
cv_skills_devops_ansible = Ansible
|
||||
cv_skills_devops_kubernetes = Kubernetes
|
||||
cv_skills_devops_gitops = GitOps
|
||||
cv_skills_software_engineering_title = Programmiersprachen
|
||||
cv_skills_software_engineering_rust = Rust
|
||||
cv_skills_software_engineering_python = Python
|
||||
cv_skills_software_engineering_csharp = C#
|
||||
cv_languages_title = Sprachkenntnisse
|
||||
cv_languages_german = Deutsch (Muttersprache)
|
||||
cv_languages_english = Englisch (C2)
|
||||
cv_languages_vietnamese = Vietnamesisch (B1)
|
||||
cv_languages_japanese = Japanisch (A1)
|
||||
cv_interests_title = Interessen
|
||||
cv_interests_coffee = Kaffee
|
||||
cv_interests_tech_it = Tech/IT
|
||||
cv_interests_guitar = Gitarre
|
||||
cv_interests_mechanical_keyboards = Mechanische Tastaturen
|
||||
publications_projects_publications_title = Veröffentlichungen
|
||||
publications_projects_publications_rpm_title = RPM: Reverse Path Congestion Marking on P4 Programmable Switches
|
||||
publications_projects_publications_rpm_authors = N. Baganal-Krishna, T.-D. Tran, R. Kundel and A. Rizk
|
||||
publications_projects_publications_rpm_conference = IEEE LCN 2023
|
||||
publications_projects_publications_rpm_url = https://doi.org/10.48550/arXiv.2307.09639
|
||||
publications_projects_publications_rpm_description = In diesem Artikel stellen
|
||||
wir Reverse Path Congestion Marking (RPM) vor, um die Reaktion auf
|
||||
Netzwerküberlastungen zu beschleunigen, ohne den End-Host-Stack zu verändern.
|
||||
RPM entkoppelt das Stausignal vom nachgelagerten Pfad nach dem Engpass,
|
||||
während die Stabilität der Staukontrollschleife erhalten bleibt. Wir zeigen,
|
||||
dass RPM die Durchsatzfairness für RTT bei heterogenen TCP-Flüssen sowie die
|
||||
Flussabwicklungszeit verbessert, insbesondere für kleine Data Center TCP
|
||||
(DCTCP)-Flows um P4 programmierbare ASIC-Switches.
|
||||
publications_projects_publications_iot_fuzzers_title = Overview of IoT Fuzzing Techniques
|
||||
publications_projects_publications_iot_fuzzers_authors = Tuan-Dat Tran
|
||||
publications_projects_publications_iot_fuzzers_conference = Seminar
|
||||
publications_projects_publications_iot_fuzzers_url = https://git.tudattr.dev/AISE/seminar/src/branch/main/paper.pdf
|
||||
publications_projects_publications_iot_fuzzers_description = In dieser Arbeit
|
||||
vergleichen wir Methoden, die speziell von IoT Fuzzern genutzt werden um die
|
||||
von IoT Geräten stammenden Herausforderungen und Einschränkungen zu umgehen.
|
||||
publications_projects_projects_title = Projekte
|
||||
publications_projects_projects_bpba_title = Unbenannter Ethereum Smart Contract Fuzzer
|
||||
publications_projects_projects_bpba_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_bpba_kind = Bachelorprojekt/Bachelorarbeit
|
||||
publications_projects_projects_bpba_url = https://git.ude-syssec.de/uni-due-syssec/students/2022_tuan-dat_tran_libAFLEVMFuzzer/ethfuzz/
|
||||
publications_projects_projects_bpba_description = In diesem aktuell laufendem
|
||||
Projekt entwickle ich einen Ethereum Smart Contract Fuzzer. Mehr Infos folgen...
|
||||
publications_projects_projects_dotfiles_title = .dotfiles
|
||||
publications_projects_projects_dotfiles_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_dotfiles_kind = Personal
|
||||
publications_projects_projects_dotfiles_url = https://git.tudattr.dev/tudattr/dotfiles
|
||||
publications_projects_projects_dotfiles_description = dotfiles ist ein
|
||||
umgangssprachlicher Begriff, der normalerweise für Konfigurationsdateien in
|
||||
Linux-basierten Systemen verwendet wird. Meine Dotfiles enthalten
|
||||
Konfigurationen für Tools, die ich häufig verwende, sowie eine Dokumentation
|
||||
zur Einrichtung meines täglich genutzten Notebooks. Sie bieten eine Grundlage
|
||||
für jedes persönliche Linux-System, das ich einrichte, und ermöglichen
|
||||
Wiederholbarkeit, was den Prozess der Einrichtung eines Linux-basierten
|
||||
Systems vereinfacht.
|
||||
publications_projects_projects_homelab_title = Homelab
|
||||
publications_projects_projects_homelab_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_homelab_kind = Personal
|
||||
publications_projects_projects_homelab_url = https://git.tudattr.dev/tudattr/ansible
|
||||
publications_projects_projects_homelab_description = Ansible ist ein
|
||||
Automatisierungs-Werkzeug, die eine automatische Maschinenbereitstellung,
|
||||
Konfigurationsverwaltung und Anwendungsbereitstellung ermöglicht. Ich
|
||||
verwende Ansible, um mein Homelab einzurichten, das mir als Plattform zum
|
||||
Ausprobieren und Lernen neuer Technologien dient.
|
||||
publications_projects_projects_athome_title = Diese Website
|
||||
publications_projects_projects_athome_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_athome_kind = Personal
|
||||
publications_projects_projects_athome_url = /#
|
||||
publications_projects_projects_athome_description = Diese Website ist eine mit
|
||||
dem auf Rust basiertem Dioxus Framwork und TailwindCSS gebaute Full Stack
|
||||
WASM Website, die sowohl zum Auffrischen von Web Themen, sowie als Rust
|
||||
Hobbyprojekt dient.
|
||||
impressum_off = Impressum anzeigen
|
||||
impressum_on = Impressum
|
||||
component_under_construction = Diese Seite befindet sich gerade im Aufbau
|
||||
footer_year = © 2025
|
||||
footer_name = Tuan-Dat Tran
|
||||
footer_rights = . All Rights Reserved.
|
||||
footer_contact = Kontakt
|
||||
@@ -1,151 +0,0 @@
|
||||
headers_home = Home
|
||||
headers_cv = Résumé
|
||||
headers_publications_projects = Publications/Projects
|
||||
headers_consulting = Consulting
|
||||
headers_about = About
|
||||
headers_language_buttons_english = 🇬🇧 English
|
||||
headers_language_buttons_german = 🇩🇪 German
|
||||
home_card_name = Tuan-Dat Tran
|
||||
home_card_gender = (He/Him)
|
||||
home_card_text =
|
||||
Hey there! 👋🏻👋🏼👋🏽👋🏾👋🏿
|
||||
Welcome to my little place on the internet
|
||||
My name is Tuan and I'm passionate about Linux, system security, automation, performance tweaking and all things tech.
|
||||
home_card_contact_button = Get in touch.
|
||||
cv_introduction_0 =
|
||||
DevOps Engineer and Software Developer with a strong academic background in
|
||||
networking technologies and software development. Specialized in Kubernetes,
|
||||
Ansible, Azure, and modern cloud technologies. Hands-on research experience
|
||||
in Software-Defined Networking, 5G, and Machine Learning. Passionate about
|
||||
efficient IT infrastructures, automation, and innovative software
|
||||
solutions.
|
||||
cv_workexperience_title = Work Experience
|
||||
cv_workexperience_se1_gefeba_title = Software Engineer @ gefeba Engineering GmbH
|
||||
cv_workexperience_se1_gefeba_time = 2013 - 2015
|
||||
cv_workexperience_se1_gefeba_description = After a school internship I got
|
||||
offered a job as a Software Engineer. I mostly worked on internal ERP
|
||||
projects, designed a tool which aided in managing project related mail
|
||||
traffic and worked on the internal master data management tool.
|
||||
cv_workexperience_student_fse_title = Student Council Member @ UDE (Volunteer)
|
||||
cv_workexperience_student_fse_time = 2016 - 2019
|
||||
cv_workexperience_student_fse_description = As a student council member I
|
||||
participated in faculty committees and organized social events. My main
|
||||
responsibilities as a member were the management of the IT infrastructure and
|
||||
supporting students, be it organizationally or subject-specific.
|
||||
cv_workexperience_se2_gefeba_title = Software Engineer @ gefeba Engineering GmbH
|
||||
cv_workexperience_se2_gefeba_time = 2018 - 2020
|
||||
cv_workexperience_se2_gefeba_description = As a software engineer at gefeba
|
||||
Engineering I worked on the companies main software product, which was a
|
||||
frame-based data exchange system to monitor industry machinery using C# and
|
||||
Entity Framework. Another project I worked on was a real time log
|
||||
visualization application for the same machinery.
|
||||
cv_workexperience_mentoring_ude_title = Mentoring @ UDE
|
||||
cv_workexperience_mentoring_ude_time = 2021 - 2022
|
||||
cv_workexperience_mentoring_ude_description = As a mentor for students
|
||||
enrolling into the computer science program of the University Duisburg-Essen I
|
||||
regularly introduced groups of ~20 freshmen to their new academic environment at the
|
||||
beginning of each semester. Offering additional organizational and technical
|
||||
guidance for their first year in university.
|
||||
cv_workexperience_ra_ude_title = Research Assistant @ UDE
|
||||
cv_workexperience_ra_ude_time = 2021 - 2024
|
||||
cv_workexperience_ra_ude_description = While working at the Network
|
||||
Communication System Research Group at the University Duisburg-Essen as a
|
||||
research assistant I've assisted in research around software defined
|
||||
networking, 5G, congestion control algorithms and federated machine learning.
|
||||
I've established and managed the research groups on-premise and cloud
|
||||
infractructure, inventory system and online presence.
|
||||
cv_workexperience_dd_devops_title = DevOps Engineer @ DextraData
|
||||
cv_workexperience_dd_devops_time = 2025 - now
|
||||
cv_workexperience_dd_devops_description = As a DevOps Engineer at DextraData,
|
||||
I am part of a horizontally structured DevOps team, responsible for managing
|
||||
and optimizing both cloud and on-premise infrastructure that hosts our
|
||||
single-tenant SaaS solutions. My role involves not only maintaining and
|
||||
improving these environments but also driving automation and efficiency
|
||||
through modern DevOps practices. I have been actively involved in
|
||||
transitioning our Kubernetes-based deployments from manual processes to a
|
||||
more automated and scalable approach by leveraging Infrastructure as Code
|
||||
with Azure Resource Manager and Ansible.
|
||||
cv_socials_title = Socials
|
||||
cv_education_title = Education
|
||||
cv_education_bachelor_title = BSc Systems Engineering
|
||||
cv_education_bachelor_time = 2015 - now
|
||||
cv_education_bachelor_description = ""
|
||||
cv_skills_title = Skills
|
||||
cv_skills_devops_title = DevOps
|
||||
cv_skills_devops_ansible = Ansible
|
||||
cv_skills_devops_kubernetes = Kubernetes
|
||||
cv_skills_devops_gitops = GitOps
|
||||
cv_skills_software_engineering_title = Software Engineering
|
||||
cv_skills_software_engineering_rust = Rust
|
||||
cv_skills_software_engineering_python = Python
|
||||
cv_skills_software_engineering_csharp = C#
|
||||
cv_languages_title = Languages
|
||||
cv_languages_german = German (Native)
|
||||
cv_languages_english = English (C2)
|
||||
cv_languages_vietnamese = Vietnamese (B1)
|
||||
cv_languages_japanese = Japanese (A1)
|
||||
cv_interests_title = Interests
|
||||
cv_interests_coffee = Coffee
|
||||
cv_interests_tech_it = Tech/IT
|
||||
cv_interests_guitar = Guitar
|
||||
cv_interests_mechanical_keyboards = Mechanical Keyboards
|
||||
publications_projects_publications_title = Publications
|
||||
publications_projects_publications_rpm_title = RPM: Reverse Path Congestion Marking on P4 Programmable Switches
|
||||
publications_projects_publications_rpm_authors = N. Baganal-Krishna, T.-D. Tran, R. Kundel and A. Rizk
|
||||
publications_projects_publications_rpm_conference = IEEE LCN 2023
|
||||
publications_projects_publications_rpm_url = https://doi.org/10.48550/arXiv.2307.09639
|
||||
publications_projects_publications_rpm_description = In this paper, we present
|
||||
Reverse Path Congestion Marking (RPM) to accelerate the reaction to network
|
||||
congestion events without changing the end-host stack. RPM decouples the
|
||||
congestion signal from the downstream path after the bottleneck while
|
||||
maintaining the stability of the congestion control loop. We show that RPM
|
||||
improves throughput fairness for RTT on heterogeneous TCP flows as well as
|
||||
the flow completion time, especially for small Data Center TCP (DCTCP) flows
|
||||
around P4 programmable ASIC switches.
|
||||
publications_projects_publications_iot_fuzzers_title = Overview of IoT Fuzzing Techniques
|
||||
publications_projects_publications_iot_fuzzers_authors = Tuan-Dat Tran
|
||||
publications_projects_publications_iot_fuzzers_conference = Seminar
|
||||
publications_projects_publications_iot_fuzzers_url = https://git.tudattr.dev/AISE/seminar/src/branch/main/paper.pdf
|
||||
publications_projects_publications_iot_fuzzers_description = In this paper, we
|
||||
are comparing techniques used by IoT fuzzers to circumvent the challenges
|
||||
presented by IoT devices and the constraints of the solutions proposed by the
|
||||
IoT fuzzers.
|
||||
publications_projects_projects_title = Projects
|
||||
publications_projects_projects_bpba_title = Undisclosed Ethereum Smart Contract Fuzzer
|
||||
publications_projects_projects_bpba_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_bpba_kind = Bachelor Project/Bachelor Thesis
|
||||
publications_projects_projects_bpba_url = https://git.ude-syssec.de/uni-due-syssec/students/2022_tuan-dat_tran_libAFLEVMFuzzer/ethfuzz/
|
||||
publications_projects_projects_bpba_description = In this ongoing project I am building an Ethereum Smart Contract Fuzzer. More info will follow.
|
||||
publications_projects_projects_dotfiles_title = .dotfiles
|
||||
publications_projects_projects_dotfiles_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_dotfiles_kind = Personal
|
||||
publications_projects_projects_dotfiles_url = https://git.tudattr.dev/tudattr/dotfiles
|
||||
publications_projects_projects_dotfiles_description = dotfiles is a slang term
|
||||
usually used for configuration files in Linux based systems. My dotfiles
|
||||
contain configurations for tools I frequently use as well as a documentation
|
||||
on how to set up my daily-use notebook. It provides a baseline for any
|
||||
personal Linux system I set up and allows for repeatability simplifies the
|
||||
process of setting up an ArchLinux based system.
|
||||
publications_projects_projects_homelab_title = Homelab
|
||||
publications_projects_projects_homelab_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_homelab_kind = Personal
|
||||
publications_projects_projects_homelab_url = https://git.tudattr.dev/tudattr/ansible
|
||||
publications_projects_projects_homelab_description = Ansible is a automation
|
||||
tool which allows for automatic provisioning, configuration management and
|
||||
application deployment. I use ansible to set up my homelab, which serves as a
|
||||
platform for me to try out and learn new technologies.
|
||||
publications_projects_projects_athome_title = This Website
|
||||
publications_projects_projects_athome_authors = Tuan-Dat Tran
|
||||
publications_projects_projects_athome_kind = Personal
|
||||
publications_projects_projects_athome_url = /#
|
||||
publications_projects_projects_athome_description = This website is a
|
||||
full-stack WASM site built using the Rust-based Dioxus framework and
|
||||
TailwindCSS. It serves both as a way to refresh web development topics and as
|
||||
a Rust hobby project.
|
||||
impressum_off = Show Impressum
|
||||
impressum_on = Impressum
|
||||
component_under_construction = This page is currently under construction
|
||||
footer_year = © 2025
|
||||
footer_name = Tuan-Dat Tran
|
||||
footer_rights = . All Rights Reserved.
|
||||
footer_contact = Contact
|
||||
@@ -50,11 +50,11 @@ fn App() -> Element {
|
||||
I18nConfig::new(langid!("en-GB"))
|
||||
.with_locale(Locale::new_static(
|
||||
langid!("en-GB"),
|
||||
include_str!("./languages/en-GB.ftl"),
|
||||
include_str!("../languages/en-GB.ftl"),
|
||||
))
|
||||
.with_locale(Locale::new_static(
|
||||
langid!("de-DE"),
|
||||
include_str!("./languages/de-DE.ftl"),
|
||||
include_str!("../languages/de-DE.ftl"),
|
||||
))
|
||||
});
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use dioxus::prelude::*;
|
||||
use dioxus_i18n::t;
|
||||
|
||||
use crate::components::{Bolding, H1, HR};
|
||||
use crate::components::{BadgeList, Bolding, H1, HR};
|
||||
|
||||
#[component]
|
||||
pub fn PublicationsProjects() -> Element {
|
||||
@@ -21,108 +21,13 @@ pub fn PublicationsProjects() -> Element {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Props)]
|
||||
struct PublicationProp {
|
||||
#[props(default = "".to_string())]
|
||||
doi: String,
|
||||
authors: String,
|
||||
title: String,
|
||||
conference: String,
|
||||
#[props(default = "".to_string())]
|
||||
description: String,
|
||||
}
|
||||
|
||||
fn Publications() -> Element {
|
||||
rsx! {
|
||||
div {
|
||||
class: "flex gap-4 items-center flex-wrap",
|
||||
Publication {
|
||||
title: t!("publications_projects_publications_rpm_title"),
|
||||
authors: t!("publications_projects_publications_rpm_authors"),
|
||||
conference: t!("publications_projects_publications_rpm_conference"),
|
||||
doi: t!("publications_projects_publications_rpm_url"),
|
||||
description: t!("publications_projects_publications_rpm_description")
|
||||
},
|
||||
|
||||
Publication {
|
||||
title: t!("publications_projects_publications_iot_fuzzers_title"),
|
||||
authors: t!("publications_projects_publications_iot_fuzzers_authors"),
|
||||
conference: t!("publications_projects_publications_iot_fuzzers_conference"),
|
||||
doi: "/#",
|
||||
description: t!("publications_projects_publications_iot_fuzzers_description")
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
fn Publication(prop: PublicationProp) -> Element {
|
||||
let pattern = vec!["T.-D. Tran".to_string(), "Tuan-Dat Tran".to_string()];
|
||||
rsx! {
|
||||
Link {
|
||||
class:"block max-w-sm p-6 border rounded-lg shadow bg-gray-800 border-gray-700 hover:bg-gray-700",
|
||||
to:"{prop.doi}",
|
||||
new_tab: true,
|
||||
h5 {
|
||||
class:"mb-2 text-2xl font-bold tracking-tight text-white",
|
||||
"{prop.title}",
|
||||
},
|
||||
span { class: "text-lg text-white", "{prop.conference}" },
|
||||
p {
|
||||
class:"font-normal text-gray-400 italic",
|
||||
Bolding {
|
||||
authors: "{prop.authors}",
|
||||
patterns: pattern,
|
||||
},
|
||||
}
|
||||
p {
|
||||
class:"font-normal text-gray-400",
|
||||
"{prop.description}",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn Projects() -> Element {
|
||||
rsx! {
|
||||
div {
|
||||
class: "flex gap-4 items-center flex-wrap",
|
||||
Project {
|
||||
title: t!("publications_projects_projects_bpba_title"),
|
||||
authors: t!("publications_projects_projects_bpba_authors"),
|
||||
kind: t!("publications_projects_projects_bpba_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_bpba_description")
|
||||
},
|
||||
Project {
|
||||
title: t!("publications_projects_projects_dotfiles_title"),
|
||||
authors: t!("publications_projects_projects_dotfiles_authors"),
|
||||
kind: t!("publications_projects_projects_dotfiles_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_dotfiles_description")
|
||||
},
|
||||
Project {
|
||||
title: t!("publications_projects_projects_homelab_title"),
|
||||
authors: t!("publications_projects_projects_homelab_authors"),
|
||||
kind: t!("publications_projects_projects_homelab_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_homelab_description")
|
||||
}
|
||||
Project {
|
||||
title: t!("publications_projects_projects_athome_title"),
|
||||
authors: t!("publications_projects_projects_athome_authors"),
|
||||
kind: t!("publications_projects_projects_athome_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_athome_description")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Props)]
|
||||
struct ProjectProp {
|
||||
#[props(default = "".to_string())]
|
||||
url: String,
|
||||
authors: String,
|
||||
title: String,
|
||||
technologies: Vec<String>,
|
||||
kind: String,
|
||||
#[props(default = "".to_string())]
|
||||
description: String,
|
||||
@@ -140,6 +45,7 @@ fn Project(prop: ProjectProp) -> Element {
|
||||
class:"mb-2 text-2xl font-bold tracking-tight text-white",
|
||||
"{prop.title}",
|
||||
},
|
||||
p {}
|
||||
p { class: "text-lg text-white", "{prop.kind}" },
|
||||
p {
|
||||
class:"font-normal text-gray-400",
|
||||
@@ -147,7 +53,8 @@ fn Project(prop: ProjectProp) -> Element {
|
||||
authors: "{prop.authors}",
|
||||
patterns: pattern,
|
||||
},
|
||||
}
|
||||
},
|
||||
BadgeList{list: prop.technologies},
|
||||
p {
|
||||
class:"font-normal text-gray-400",
|
||||
"{prop.description}",
|
||||
@@ -155,3 +62,68 @@ fn Project(prop: ProjectProp) -> Element {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn Publications() -> Element {
|
||||
rsx! {
|
||||
div {
|
||||
class: "flex gap-4 items-center flex-wrap",
|
||||
Project {
|
||||
title: t!("publications_projects_publications_rpm_title"),
|
||||
authors: t!("publications_projects_publications_rpm_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_publications_rpm_conference"),
|
||||
url: t!("publications_projects_publications_rpm_url"),
|
||||
description: t!("publications_projects_publications_rpm_description")
|
||||
},
|
||||
|
||||
Project {
|
||||
title: t!("publications_projects_publications_iot_fuzzers_title"),
|
||||
authors: t!("publications_projects_publications_iot_fuzzers_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_publications_iot_fuzzers_conference"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_publications_iot_fuzzers_description")
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn Projects() -> Element {
|
||||
rsx! {
|
||||
div {
|
||||
class: "flex gap-4 items-center flex-wrap",
|
||||
Project {
|
||||
title: t!("publications_projects_projects_bpba_title"),
|
||||
authors: t!("publications_projects_projects_bpba_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_projects_bpba_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_bpba_description")
|
||||
},
|
||||
Project {
|
||||
title: t!("publications_projects_projects_dotfiles_title"),
|
||||
authors: t!("publications_projects_projects_dotfiles_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_projects_dotfiles_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_dotfiles_description")
|
||||
},
|
||||
Project {
|
||||
title: t!("publications_projects_projects_homelab_title"),
|
||||
authors: t!("publications_projects_projects_homelab_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_projects_homelab_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_homelab_description")
|
||||
}
|
||||
Project {
|
||||
title: t!("publications_projects_projects_athome_title"),
|
||||
authors: t!("publications_projects_projects_athome_authors"),
|
||||
technologies: vec![],
|
||||
kind: t!("publications_projects_projects_athome_kind"),
|
||||
url: "/#",
|
||||
description: t!("publications_projects_projects_athome_description")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user