<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joshua Hegedus</title>
    <description>The latest articles on Forem by Joshua Hegedus (@joshika39).</description>
    <link>https://forem.com/joshika39</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209720%2F936fca4f-0450-46e5-aa86-c113068654da.png</url>
      <title>Forem: Joshua Hegedus</title>
      <link>https://forem.com/joshika39</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joshika39"/>
    <language>en</language>
    <item>
      <title>Printable Flashcard Generator</title>
      <dc:creator>Joshua Hegedus</dc:creator>
      <pubDate>Fri, 12 Dec 2025 22:34:28 +0000</pubDate>
      <link>https://forem.com/kougen/printable-flashcard-generator-3df2</link>
      <guid>https://forem.com/kougen/printable-flashcard-generator-3df2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Are you a visual learner? Have you ever used image-based flashcards to memorize words or concepts more effectively? If so, you might find this project interesting.&lt;/p&gt;

&lt;p&gt;I’m currently building an open-source, self-hosted flashcard PDF generator that allows you to create printable flashcards from images and text—fully under your own control.&lt;/p&gt;

&lt;p&gt;Here’s a short demo showcasing the current state of the project:&lt;br&gt;


  &lt;iframe src="https://www.youtube.com/embed/783OK2VMuhE"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Development &amp;amp; Future Plans
&lt;/h2&gt;

&lt;p&gt;The project is still evolving, and I have plenty of ideas for improvements. One of the planned features is an account-less mode, which would make the tool especially convenient for self-hosted setups where simplicity and privacy are key.&lt;br&gt;
This is very much a community-driven project, and contributions are more than welcome, whether that’s code, feature ideas, bug reports, or general feedback.&lt;/p&gt;

&lt;p&gt;If the project sounds useful to you, feel free to check out the repository, give it a ⭐️, or get involved:&lt;br&gt;
&lt;a href="https://github.com/kougen/printable-flashcard-generator" rel="noopener noreferrer"&gt;https://github.com/kougen/printable-flashcard-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every bit of feedback and support helps shape the direction of the project.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>prisma</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>In pursuit of privacy: What is privacy?</title>
      <dc:creator>Joshua Hegedus</dc:creator>
      <pubDate>Tue, 21 May 2024 15:44:31 +0000</pubDate>
      <link>https://forem.com/ablaze-mirai/in-pursuit-of-privacy-what-is-privacy-5012</link>
      <guid>https://forem.com/ablaze-mirai/in-pursuit-of-privacy-what-is-privacy-5012</guid>
      <description>&lt;h2&gt;
  
  
  What is Privacy?
&lt;/h2&gt;

&lt;p&gt;In today's interconnected world, where our lives are increasingly lived online, the concept of privacy has taken on new significance. While the internet offers unparalleled convenience and access to information, it also raises profound concerns about the security and sanctity of our personal data.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore the burgeoning field of privacy-centered open-source browsers, which offer users a sanctuary from the prying eyes of data-hungry corporations and governments. By empowering individuals to take back control of their online privacy, these browsers represent a crucial bulwark against the encroachment of surveillance capitalism and the erosion of digital rights.&lt;/p&gt;

&lt;p&gt;Join us as we delve into the world of privacy-centered browsing and discover the tools and techniques that can help safeguard our most precious asset in the digital age: &lt;strong&gt;our privacy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExajd5M3FkZHBlYjhmaWQ5MngxcHl3enIzbzJudzlrNW40OXBubTltdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/umbIrcUJbmuIUZ1e7M/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExajd5M3FkZHBlYjhmaWQ5MngxcHl3enIzbzJudzlrNW40OXBubTltdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/umbIrcUJbmuIUZ1e7M/giphy.gif" alt="ownyourdata"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Security vs Privacy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Security is centered around &lt;strong&gt;safeguarding systems&lt;/strong&gt; and data from &lt;strong&gt;unauthorized access&lt;/strong&gt; and &lt;strong&gt;attacks&lt;/strong&gt;. &lt;br&gt;
Its main goals include ensuring &lt;strong&gt;confidentiality&lt;/strong&gt;, &lt;strong&gt;integrity&lt;/strong&gt;, and &lt;strong&gt;availability&lt;/strong&gt;.&lt;br&gt;
This is often achieved through the implementation of encryption, authentication mechanisms, and access controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy
&lt;/h3&gt;

&lt;p&gt;Privacy revolves around individuals' rights to control their personal information. It addresses how data is collected, used, and shared by entities.&lt;br&gt;
Privacy measures typically include &lt;strong&gt;data minimization&lt;/strong&gt;, &lt;strong&gt;consent management&lt;/strong&gt;, and the use of &lt;strong&gt;privacy-enhancing technologies&lt;/strong&gt;. &lt;br&gt;
It often intersects with data protection laws to ensure trust and compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparison
&lt;/h3&gt;

&lt;p&gt;While security focuses on &lt;strong&gt;protecting systems&lt;/strong&gt; and &lt;strong&gt;data&lt;/strong&gt; from external threats and ensuring the integrity and availability of information, privacy concerns individuals' rights to &lt;strong&gt;control&lt;/strong&gt; their personal information and how it is &lt;strong&gt;collected&lt;/strong&gt;, &lt;strong&gt;used&lt;/strong&gt;, and &lt;strong&gt;shared&lt;/strong&gt;. &lt;br&gt;
While security measures aim to prevent unauthorized access and attacks, privacy measures aim to respect and preserve individuals' autonomy, dignity, and personal space.&lt;br&gt;
Both security and privacy are essential for maintaining trust, compliance, and ethical standards in today's digital world, and they often intersect in the context of data protection laws and regulations.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdataprivacymanager.net%2Fwp-content%2Fuploads%2F2020%2F08%2Fvisual-representation-of-data-privacy-and-data-security-areas-1024x536.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdataprivacymanager.net%2Fwp-content%2Fuploads%2F2020%2F08%2Fvisual-representation-of-data-privacy-and-data-security-areas-1024x536.png" alt="sec-vs-priv"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Intersection of Security and Privacy
&lt;/h2&gt;

&lt;p&gt;In our exploration of online privacy, it's crucial to understand the intricate relationship between security and privacy. While they serve distinct purposes, they often intersect and complement each other in the quest for a safer and more private online experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Security is the first line of defense against external threats to our digital assets. It encompasses measures aimed at safeguarding systems and data from unauthorized access, breaches, and attacks. Encryption, authentication mechanisms, and access controls are among the arsenal of tools used to fortify digital fortresses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy
&lt;/h3&gt;

&lt;p&gt;Privacy, on the other hand, is the guardian of our personal information. It empowers individuals to control how their data is collected, used, and shared by entities. Measures such as data minimization, consent management, and privacy-enhancing technologies provide the framework for preserving individuals' autonomy and dignity in the digital realm.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Synergy
&lt;/h3&gt;

&lt;p&gt;While security focuses on protecting the fortress, privacy concerns the inhabitants within. Together, they form a symbiotic relationship that strengthens our defenses and preserves our freedoms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In the pursuit of online privacy, it's essential to recognize the vital roles played by both security and privacy. &lt;br&gt;
By embracing a holistic approach that combines robust security measures with respect for privacy rights, we can navigate the digital landscape with confidence and safeguard our most precious asset: &lt;strong&gt;our privacy&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further readings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dataprivacymanager.net/security-vs-privacy/" rel="noopener noreferrer"&gt;Security vs Privacy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  About Ablaze
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ablaze&lt;/strong&gt; is a pioneering &lt;strong&gt;open-source&lt;/strong&gt; organization deeply committed to privacy and data protection.&lt;br&gt;
Established in Japan, it is driven by a team of dedicated Japanese students passionate about advancing technological solutions while safeguarding user privacy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Social media
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Ablaze_MIRAI" rel="noopener noreferrer"&gt;X: @Ablaze_MIRAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/Floorp_browser" rel="noopener noreferrer"&gt;X: @Floorp_browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aka.ablaze.one/discord" rel="noopener noreferrer"&gt;Discord: Ablaze Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ablaze.one" rel="noopener noreferrer"&gt;Website: ablaze.one&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>privacy</category>
      <category>internet</category>
      <category>browser</category>
    </item>
    <item>
      <title>Yozora: Linux Configurator</title>
      <dc:creator>Joshua Hegedus</dc:creator>
      <pubDate>Thu, 14 Mar 2024 16:24:08 +0000</pubDate>
      <link>https://forem.com/joshika39/yozora-arch-linux-config-1nje</link>
      <guid>https://forem.com/joshika39/yozora-arch-linux-config-1nje</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;At some point all of us wanted to have a fully customized and flexible Linux configuration, not having a pre-configured system like &lt;a href="https://manjaro.org/"&gt;Manjaro&lt;/a&gt; for example. There must be people out there, who are not a big fans of &lt;strong&gt;DE &lt;em&gt;(&lt;a href="https://wiki.archlinux.org/title/desktop_environment"&gt;Desktop Environments&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt;. Sure I also got into the arch world with &lt;a href="https://wiki.archlinux.org/title/KDE"&gt;Plasma's KDE&lt;/a&gt;, but after a while, it become dull, so that's when I started getting into configuring my setup, but when I had to do it every time I was reinstalling my operating system it became tiring, that's when I began to create a very customizable script stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Golden mean
&lt;/h2&gt;

&lt;p&gt;There is a fine line between having a complete self installing setup, or having a self configured installation. My goal was to have some scripts that helps me, but still kept the control in the user's hand.&lt;/p&gt;

&lt;p&gt;This is done by using multiple smaller scripts which can install or configure different parts of the OS stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure of a Linux GUI
&lt;/h2&gt;

&lt;p&gt;It's important to understand, how a Linux is working before we start putting one together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building blocks to have a GUI:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Display server (or window server)
&lt;/h4&gt;

&lt;p&gt;This is the component which communicates directly with the kernel. It is the bridge between the OS kernel and its clients. The display servers have multiple &lt;strong&gt;protocols&lt;/strong&gt; &lt;em&gt;(you can call them blueprints)&lt;/em&gt; to choose from. The most notable protocols:&lt;/p&gt;

&lt;h5&gt;
  
  
  X11
&lt;/h5&gt;

&lt;h6&gt;
  
  
  Server
&lt;/h6&gt;

&lt;p&gt;The most known implementation of X11 is the &lt;a href="https://en.wikipedia.org/wiki/X.Org_Server"&gt;X.Org Server&lt;/a&gt; or simply &lt;strong&gt;X Server&lt;/strong&gt; or more simply &lt;strong&gt;X&lt;/strong&gt;&lt;br&gt;
The X server requires multiple parts to operate like a &lt;a href="https://en.wikipedia.org/wiki/Compositing_window_manager"&gt;Compositor&lt;/a&gt; which makes the apps work off screen, in the background or over each other. The one that I am using here is the &lt;a href="https://wiki.archlinux.org/title/Picom"&gt;Picom&lt;/a&gt; compositor.&lt;/p&gt;
&lt;h6&gt;
  
  
  Window manager
&lt;/h6&gt;

&lt;p&gt;You'll also need a &lt;a href="https://wiki.archlinux.org/title/Window_manager"&gt;window manager&lt;/a&gt; to have usable window system. It has two major types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://wiki.archlinux.org/title/Window_manager#Stacking_window_managers"&gt;Stacking&lt;/a&gt; window managers, like the one in Windows&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wiki.archlinux.org/title/Window_manager#Tiling_window_managers"&gt;Tiling&lt;/a&gt; window managers, the most notable tiling window manager for X11 is &lt;a href="https://wiki.archlinux.org/title/I3"&gt;i3&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;
  
  
  Wayland
&lt;/h5&gt;

&lt;p&gt;Wayland is also a protocol, Wayland's protocol combines the compositor into the display server, hence they are called &lt;a href="https://wiki.archlinux.org/title/Wayland#Compositors"&gt;Wayland compositors&lt;/a&gt;. &lt;br&gt;
My favorite so far is &lt;a href="https://wiki.archlinux.org/title/Hyprland"&gt;Hyprland&lt;/a&gt; which is a tiling window manager.&lt;/p&gt;
&lt;h5&gt;
  
  
  X11 vs Wayland
&lt;/h5&gt;

&lt;p&gt;Since the X11 protocol is older then the Wayland protocol, hence the X server has bigger community behind it, then the Wayland compositors. &lt;/p&gt;
&lt;h4&gt;
  
  
  Display managers
&lt;/h4&gt;

&lt;p&gt;These are optional packages you can install to have visual login screen, but you can live perfectly fine without one. I personally don't like using one, because I like to switch between configuration, which is easier to start from the terminal.&lt;br&gt;
Display manager is basically the login screen. Some of the favorites: &lt;a href="https://wiki.archlinux.org/title/SDDM"&gt;SDDM (X11 and Wayland)&lt;/a&gt;, &lt;a href="https://wiki.archlinux.org/title/GDM"&gt;GDM (X11 and Wayland)&lt;/a&gt;, &lt;a href="https://wiki.archlinux.org/title/LightDM"&gt;LightDM (X11)&lt;/a&gt; &lt;/p&gt;
&lt;h1&gt;
  
  
  Yozora
&lt;/h1&gt;

&lt;p&gt;The configuration got its name from the Japanese word 夜空(よぞら) meaning &lt;em&gt;night sky&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You can browse the repo here: &lt;a href="https://github.com/joshika39/yozora"&gt;https://github.com/joshika39/yozora&lt;/a&gt;. If you have any idea on some improvements, feel free to &lt;a href="https://github.com/joshika39/yozora/issues/new"&gt;Create an Issue&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Capabilities
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Package collection installation
&lt;/h3&gt;

&lt;p&gt;There is a script for easily installing packages from &lt;code&gt;&amp;lt;some-name&amp;gt;.conf&lt;/code&gt; config files. These files are have to be under the &lt;code&gt;YOZORA_PATH/pkgs/&lt;/code&gt; directory and must have the &lt;code&gt;.conf&lt;/code&gt; extension.&lt;/p&gt;

&lt;p&gt;With this you can use the &lt;code&gt;update&lt;/code&gt; alias to install specific collections for use the &lt;code&gt;--all&lt;/code&gt; flag to install all after each other.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;update &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="c"&gt;# Lists the available package collections&lt;/span&gt;
update &amp;lt;name&amp;gt; &lt;span class="c"&gt;# Installes the given collection&lt;/span&gt;
update &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="c"&gt;# Install all availabe collection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Extension packages
&lt;/h4&gt;

&lt;p&gt;There is more optional packages available in the other parts of the yozora stack, like: &lt;code&gt;yozora-i3&lt;/code&gt;, &lt;code&gt;yozora-polybar&lt;/code&gt;, &lt;code&gt;yozora-hyprland&lt;/code&gt;&lt;br&gt;
You can follow this article series to learn more about those.&lt;/p&gt;
&lt;h3&gt;
  
  
  Convenience aliases
&lt;/h3&gt;
&lt;h4&gt;
  
  
  bashrc
&lt;/h4&gt;

&lt;p&gt;There are a lot of convenience aliases comes with the bashrc files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bcr &lt;span class="c"&gt;# the default for `brc --download` and pulls the latest versions of the bash files from the local yozora repo&lt;/span&gt;
bcr &lt;span class="nt"&gt;--upload&lt;/span&gt; &lt;span class="c"&gt;# upload the files to the local repo, so that you can also version control your modifications&lt;/span&gt;
refresh &lt;span class="c"&gt;# Sources the bash filse&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Git
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;gclone&lt;/code&gt; is a powerful alias to clone repositories from custom hosts (&lt;em&gt;github is the default with ssh, and the logged in user&lt;/em&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;usage: gclone &amp;lt;repo&amp;gt; [user] [host] [is_ssh]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;gl&lt;/code&gt; is a &lt;a href="https://github.com/jesseduffield/lazygit"&gt;lazygit&lt;/a&gt; extended command, fist refreshes the deleted remote branches and then opens lazygit.&lt;/p&gt;

&lt;h4&gt;
  
  
  Other tools
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;dotnet_install&lt;/code&gt; can easily install multiple dotner versions&lt;/p&gt;

&lt;h2&gt;
  
  
  Stars always welcomed
&lt;/h2&gt;

&lt;p&gt;If you liked my approach, and you have a few extra second you are very welcomed to star me on Github🌟: &lt;a href="https://github.com/joshika39/yozora"&gt;https://github.com/joshika39/yozora&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;These tools are currently only supports the Arch Linux package manager and Aur to install packages. The other non-package related scripts were written in bash, so those are distro independent&lt;/p&gt;

&lt;p&gt;From the time you finished installing your OS, you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/joshika39/yozora.git ~/.config/yozora &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/.config/yozora

./shell/bash/updater.sh &lt;span class="nt"&gt;--download&lt;/span&gt;

&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;If you found any mistake, that I wrote, please comment it so that I can fix it. Or you can find these articles in my &lt;a href="https://github.com/joshika39/literature/blob/main/dev.to/arch-setup-01.md"&gt;Github Repository&lt;/a&gt; and open an issue for improvement.kl&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>linux</category>
      <category>dotfiles</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Enhancing C#: Introducing cs-tools, a Project for Beginner and Intermediate Developers</title>
      <dc:creator>Joshua Hegedus</dc:creator>
      <pubDate>Mon, 27 Nov 2023 17:18:42 +0000</pubDate>
      <link>https://forem.com/joshika39/enhancing-c-introducing-cs-tools-a-project-for-beginner-and-intermediate-developers-5hfd</link>
      <guid>https://forem.com/joshika39/enhancing-c-introducing-cs-tools-a-project-for-beginner-and-intermediate-developers-5hfd</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;C# is nice and all, but as you might know it's missing some useful functionalities which could potentially help beginner or intermediate C# programmers in their way of programming.&lt;/p&gt;

&lt;h3&gt;
  
  
  Motivation
&lt;/h3&gt;

&lt;p&gt;When I was a first year student in my Computer Science bachelors degree, I came across a subject where &lt;code&gt;TextFileReader.dll&lt;/code&gt; was given to us which was built a Prof at the Uni. What should I say.. It was full of flaws, it broke a few &lt;a href="https://en.wikipedia.org/wiki/Object-oriented_programming"&gt;OOP&lt;/a&gt; principles. And then I realized, that C# is missing quite a few really useful services, which I then implemented in this project. My motive behind this project was to help the fellow C# developers to have an extensive but scalable toolset in their hand.&lt;/p&gt;

&lt;p&gt;The project is open-source and it is on GitHub: &lt;a href="https://github.com/joshika39/cs-tools"&gt;joshika39/cs-tools: Extended base C# functionalities (github.com)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Composition
&lt;/h3&gt;

&lt;p&gt;The project is published as a &lt;a href="https://www.nuget.org/packages/joshika39.Core"&gt;NuGet package&lt;/a&gt; and it is using Microsoft's &lt;a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines"&gt;&lt;code&gt;IServiceProvider&lt;/code&gt;&lt;/a&gt; and a provided &lt;a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines"&gt;&lt;code&gt;ServiceCollection&lt;/code&gt;&lt;/a&gt; to register all of its default and required components. You can read about it in more details here: &lt;a href="https://github.com/joshika39/cs-tools/wiki/Using-the-package"&gt;Using the package · Wiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the things can be configured in the &lt;code&gt;IApplicationSettings&lt;/code&gt; which stores the following properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IApplicationSettings&lt;/span&gt;  
&lt;span class="p"&gt;{&lt;/span&gt;  
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;ApplicationConfigurationFile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;ConfigurationFolder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  
    &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;RepositoryPath&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: The file is located under the /"&lt;em&gt;userhome&lt;/em&gt;"/joshika39/&lt;em&gt;modulename&lt;/em&gt;/&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Repository
&lt;/h4&gt;

&lt;p&gt;One of the useful tools are the &lt;code&gt;IRepository&lt;/code&gt; which is basically a &lt;a href=""&gt;repository pattern&lt;/a&gt; interface, which has a default &lt;code&gt;AJsonRepository&lt;/code&gt; implementation registered in the &lt;code&gt;IServiceProvider&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It can be used the following way for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A factory is required to create the repository.&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;repositoryFactory&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRequiredService&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IRepositoryFactory&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Create the user repository in hte file: `users.json` in the repository path.&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;repositoryFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateRepository&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  

&lt;span class="c1"&gt;// This line will make sure that the repository is instantiated.&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Timer
&lt;/h4&gt;

&lt;p&gt;The other quite useful par is the &lt;code&gt;IStopwatch&lt;/code&gt; which has a lot of functionalities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can:

&lt;ul&gt;
&lt;li&gt;Stop the current thread for &lt;code&gt;x&lt;/code&gt; seconds&lt;/li&gt;
&lt;li&gt;Wait asynchronously then notify it's listeners&lt;/li&gt;
&lt;li&gt;Start periodic notification for it's subscribed listeners&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;This package is still in development, so it's still missing some crucial documentation, but my goal will be to improve this package to help other people into the love of OOP programming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;Any contributions or ideas are welcome, you can open an &lt;a href="https://github.com/joshika39/cs-tools/issues/new?assignees=&amp;amp;labels=enhancement&amp;amp;projects=&amp;amp;template=enhancement.md&amp;amp;title=New+Enhancement+name"&gt;Enhancement Issue&lt;/a&gt; or make a contribute if you have any idea. If you drop a star, I would really appreciate it!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>oop</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
