<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>CodeProject Latest postings for Design and Architecture</title>
    <link>https://www.codeproject.com</link>
    <description>Latest postings for Design and Architecture from CodeProject</description>
    <language>en-us</language>
    <image>
      <title>CodeProject Latest postings for Design and Architecture</title>
      <url>https://www.codeproject.com/App_Themes/Std/Img/logo100x30.gif</url>
      <link>https://www.codeproject.com</link>
      <width>100</width>
      <height>30</height>
      <description>CodeProject</description>
    </image>
    <copyright>Copyright  CodeProject, 1999-2024</copyright>
    <webMaster>Webmaster@codeproject.com (Webmaster)</webMaster>
    <lastBuildDate>Sun, 23 Jun 2024 20:31:00 GMT</lastBuildDate>
    <ttl>20</ttl>
    <generator>C# Hand-coded goodness</generator>
    <item>
      <title>Exception or Return Value?</title>
      <description>What is the rule of thumb for deciding whether to throw an exception or return an error code when something goes wrong?&lt;br /&gt;
&lt;div class="signature"&gt;The difficult we do right away...&lt;br /&gt;
...the impossible takes slightly longer.&lt;/div&gt;</description>
      <author>Richard Andrew x64</author>
      <link>https://www.codeproject.com/Messages/6006943/Exception-or-Return-Value</link>
      <pubDate>Sun, 23 Jun 2024 20:31:00 GMT</pubDate>
      <guid>3_6006943</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>how should I plan my learning trajectory?</title>
      <description>Hello,&lt;br /&gt;
&lt;br /&gt;
I study computer science and know a moderate amount about java and c and a bit about python and c++ when I say a bit I mean I solved leetcode problems with the language and followed along a tutorial on how to automate a process like webscraping with python and I (tried) to implement a neural network in c++.&lt;br /&gt;
&lt;br /&gt;
I enjoy algorithmic/datastructures problems but probably software architecture as well and dont know how to continue picking up knowledge. &lt;br /&gt;
&lt;br /&gt;
I am about to follow a tutorial on writing an interpreter in java and after that I want to learn Rust. &lt;br /&gt;
&lt;br /&gt;
Should I revise my Software Engineering lecture because I forgot almost everything or read something related before doing more projects?&lt;br /&gt;
&lt;br /&gt;
Thanks!</description>
      <author>Prudence Clearwater</author>
      <link>https://www.codeproject.com/Messages/6006835/how-should-I-plan-my-learning-trajectory</link>
      <pubDate>Sat, 22 Jun 2024 19:34:00 GMT</pubDate>
      <guid>3_6006835</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Best way to send files to a central location</title>
      <description>I'm considering developing an app (iOS) my customers can use to send me files (typically PDF but could be other types, couple of MB at most). Sending the file has to be simple, just select and click Send. There are may ways to send/submit the file, e.g. (in no particular order):&lt;br /&gt;
- E-mail&lt;br /&gt;
- Dropbox (or similar)&lt;br /&gt;
- FTP&lt;br /&gt;
- Web service&lt;br /&gt;
- Some horrible custom client/server contraption&lt;br /&gt;
&lt;br /&gt;
The files aren't top secret stuff and it's not the end of the world if the sending fails but but reliability is more important than security and simplicity (on both ends) is a must. I need to be able to group the files I receive by sender.&lt;br /&gt;
&lt;br /&gt;
Any thoughts on what's the best approach?</description>
      <author>gthp_cp</author>
      <link>https://www.codeproject.com/Messages/6004674/Best-way-to-send-files-to-a-central-location</link>
      <pubDate>Fri, 07 Jun 2024 12:15:00 GMT</pubDate>
      <guid>3_6004674</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Is a separate view model relevant for Blazor server side given that we can test the whole component with bUnit?</title>
      <description>When writing software, whether desktop or web-based, I have always separated the view from the view model. For example, in WPF (Microsoft desktop technology), I used MVVM, kept the XAML view as light as possible and put the logic and data access into a separate view model (regular C# class).&lt;br /&gt;
&lt;br /&gt;
One of the main advantages of this is that it makes the view model easy to unit test, as I can set up mock dependencies, set the public properties that would normally be set by dependency injection or property binding and then call methods no the view model to test the code.&lt;br /&gt;
&lt;br /&gt;
Nowadays I do pretty much everything in Blazor server-side, and used the same approach. My .razor file is pure markup, the .razor.cs file usually only contains overloads for the component life-cycle events, and generally passes the request through to the view model (as above).&lt;br /&gt;
&lt;br /&gt;
However, one of my co-workers is encouraging the team to put all code into the .razor.cs file, and use bUnit to unit test the components. Given that we can mock dependencies, set public parameters and call methods, it does look as if this gives all the benefits of a separate view model, without needing the extra file.&lt;br /&gt;
&lt;br /&gt;
Anyone any thoughts as to the advantages or disadvantages of either approach? Thanks</description>
      <author>Mr Yossu</author>
      <link>https://www.codeproject.com/Messages/5989605/Is-a-separate-view-model-relevant-for-Blazor-serve</link>
      <pubDate>Sun, 25 Feb 2024 16:38:00 GMT</pubDate>
      <guid>3_5989605</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>C# How to populate datagridview from a separate combobox selection</title>
      <description>I am familiar with Excel VBA but new to C# and Visual Basicvisula Studio. I have an Excel file (.xlsm) with several sheets. Using ExcelDataReader, I managed to build a solution to show all sheet names in a combobox control.&lt;br /&gt;
&lt;br /&gt;
I need help in how can I import the selected sheet content in combobox (cboSheet) to the datagridview1&lt;div class='pre-lang' id='premain682423'&gt;&lt;div&gt;C#&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode682423' class='copy-code' data-index='682423' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre682423' style='margin-top:0;' class='lang-csharp' data-language='C#' data-allowShrink='True' data-collapse='False'&gt;
&lt;span class="code-keyword"&gt;using&lt;/span&gt; ExcelDataReader;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Collections.Generic;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.ComponentModel;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Data;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Drawing;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Linq;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Text;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Threading.Tasks;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Windows.Forms;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.IO;
    &lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Data.SqlClient;
    
    &lt;span class="code-keyword"&gt;namespace&lt;/span&gt; ReadandImportsheet1
    {
    &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;partial&lt;/span&gt; &lt;span class="code-keyword"&gt;class&lt;/span&gt; Form1 : Form
    {
        
        
        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;readonly&lt;/span&gt; &lt;span class="code-keyword"&gt;object&lt;/span&gt; con;
        

        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;object&lt;/span&gt; Break { &lt;span class="code-keyword"&gt;get&lt;/span&gt;; &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;set&lt;/span&gt;; }

        &lt;span class="code-keyword"&gt;public&lt;/span&gt; Form1()
        {
            InitializeComponent();
        }

        &lt;span class="code-keyword"&gt;public&lt;/span&gt; Form1(&lt;span class="code-keyword"&gt;object&lt;/span&gt; con)
        {
            &lt;span class="code-keyword"&gt;this&lt;/span&gt;.con = con;
        }

        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; button1_Click(&lt;span class="code-keyword"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            OpenFileDialog fil = &lt;span class="code-keyword"&gt;new&lt;/span&gt; OpenFileDialog();
            fil.ShowDialog();
            &lt;span class="code-keyword"&gt;string&lt;/span&gt; path = fil.FileName.ToString();
            ExcelFileReader(path);
        }
        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; ExcelFileReader(&lt;span class="code-keyword"&gt;string&lt;/span&gt; path)
        {
            &lt;span class="code-keyword"&gt;var&lt;/span&gt; stream = File.Open(path, FileMode.Open, FileAccess.Read);
            &lt;span class="code-keyword"&gt;var&lt;/span&gt; reader = ExcelReaderFactory.CreateReader(stream);
            &lt;span class="code-keyword"&gt;var&lt;/span&gt; result = reader.AsDataSet();
            &lt;span class="code-keyword"&gt;var&lt;/span&gt; tables = result.Tables;
            &lt;span class="code-keyword"&gt;foreach&lt;/span&gt; (DataTable table &lt;span class="code-keyword"&gt;in&lt;/span&gt; tables)
            {
                cboSheet.Items.Add(table.TableName);
            }
            &lt;span class="code-comment"&gt;//&lt;/span&gt;&lt;span class="code-comment"&gt;var shname = cboSheet.SelectedValue;&lt;/span&gt;
            &lt;span class="code-comment"&gt;//&lt;/span&gt;&lt;span class="code-comment"&gt;string table_name = cboSheet.Text;&lt;/span&gt;
        }

        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; cboSheet_SelectedIndexChanged(&lt;span class="code-keyword"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            &lt;span class="code-keyword"&gt;string&lt;/span&gt; table_name = cboSheet.Text;
            SqlConnection Con = &lt;span class="code-keyword"&gt;new&lt;/span&gt; SqlConnection(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Provider = Microsoft.ACE.OLEDB.12.0; Data Source = path; Extended Properties = "&lt;/span&gt;Excel &lt;span class="code-digit"&gt;8&lt;/span&gt;.&lt;span class="code-digit"&gt;0&lt;/span&gt;; HDR = YES&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;;"&lt;/span&gt;);
            con.Open();
            SqlDataAdapter da = &lt;span class="code-keyword"&gt;new&lt;/span&gt; SqlDataAdapter(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;select * from "&lt;/span&gt; + table_name + &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt; "&lt;/span&gt;, con);
            DataSet ds = &lt;span class="code-keyword"&gt;new&lt;/span&gt; DataSet();
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.DataBind();

            con.Close();
        }
    }
}&lt;/pre&gt;I am using Win 11 and Visual Studio 2019 with ExcelDataReader and Exceldatareader.Dataset&lt;br /&gt;
&lt;br /&gt;
Any help in coding will be extremely appreciated as I am new to C# coding and can not get sheet contents into the datagridview control.</description>
      <author>mourad barsoum</author>
      <link>https://www.codeproject.com/Messages/5989322/Csharp-How-to-populate-datagridview-from-a-separat</link>
      <pubDate>Thu, 22 Feb 2024 23:57:00 GMT</pubDate>
      <guid>3_5989322</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Top 100 algorithm</title>
      <description>Let's say you need to find the top 100 best-selling books out of a list of a million books.&lt;br /&gt;
&lt;br /&gt;
What is the appropriate algorithm?&lt;br /&gt;
&lt;br /&gt;
I thought it would be QuickSelect, but that only chooses one item.&lt;br /&gt;
&lt;br /&gt;
Thank you.</description>
      <author>mike7411</author>
      <link>https://www.codeproject.com/Messages/5983544/Top-100-algorithm</link>
      <pubDate>Sat, 20 Jan 2024 21:39:00 GMT</pubDate>
      <guid>3_5983544</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>user data system for a web-based e-mail service</title>
      <description>Let's say you don't want to use a SQL database, but you want to create a user data system for a web-based e-mail service.&lt;br /&gt;
&lt;br /&gt;
You want to store the following data about each user:&lt;br /&gt;
&lt;br /&gt;
username&lt;br /&gt;
password&lt;br /&gt;
address&lt;br /&gt;
alternate email address&lt;br /&gt;
phone number&lt;br /&gt;
&lt;br /&gt;
What kind of data structure should you use?&lt;br /&gt;
&lt;br /&gt;
Thank you.</description>
      <author>mike7411</author>
      <link>https://www.codeproject.com/Messages/5982492/user-data-system-for-a-web-based-e-mail-service</link>
      <pubDate>Mon, 15 Jan 2024 13:04:00 GMT</pubDate>
      <guid>3_5982492</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Silly Logging Question</title>
      <description>I'm using Serilog. It seems way over-engineered to me, but I'm stuck with it. And, the docs arn't very helpful IMO.&lt;br /&gt;
&lt;br /&gt;
My question is about log levels. For Serilog, there's documentation &lt;a href="https://github.com/serilog/serilog/wiki/Configuration-Basics"&gt;like this&lt;/a&gt;[&lt;a href="https://github.com/serilog/serilog/wiki/Configuration-Basics" target="_blank"&gt;^&lt;/a&gt;] and examples like this:
&lt;div class='pre-lang' id='premain857187'&gt;&lt;div&gt;&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode857187' class='copy-code' data-index='857187' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre857187' style='margin-top:0;' data-allowShrink='True' data-collapse='False'&gt;
Log.Verbose(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s a Verbose message."&lt;/span&gt;);
Log.Debug(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s a Debug message. Only Public Properties (not fields) are shown on structured data. Structured data: {@sampleData}. Simple data: {simpleData}."&lt;/span&gt;, structuredData, simpleData);
Log.Information(&lt;span class="code-keyword"&gt;new&lt;/span&gt; Exception(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Exceptions can be put on all log levels"&lt;/span&gt;), &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s an Info message."&lt;/span&gt;);
Log.Warning(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s a Warning message."&lt;/span&gt;);
Log.Error(&lt;span class="code-keyword"&gt;new&lt;/span&gt; Exception(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;This is an exception."&lt;/span&gt;), &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s an Error message."&lt;/span&gt;);
Log.Fatal(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Here&amp;#39;s a Fatal message."&lt;/span&gt;);&lt;/pre&gt;
&lt;br /&gt;
Neither the docs nor the examples explain very well where/how you would actually use each of these levels.&lt;br /&gt;
&lt;br /&gt;
For example, let's says I have this method:
&lt;div class='pre-lang' id='premain372412'&gt;&lt;div&gt;&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode372412' class='copy-code' data-index='372412' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre372412' style='margin-top:0;' data-allowShrink='True' data-collapse='False'&gt;
&lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; DoSomeProcessing(&lt;span class="code-keyword"&gt;string&lt;/span&gt; inputFile, &lt;span class="code-keyword"&gt;bool&lt;/span&gt; someParam)
{
    Log.Information(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Inside DoSomeProcessing"&lt;/span&gt;);

    &lt;span class="code-keyword"&gt;if&lt;/span&gt; (someParam)
    {
        Log.Warning(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Just letting you know that &amp;#39;someParam&amp;#39; = true"&lt;/span&gt;);
    }

    &lt;span class="code-keyword"&gt;if&lt;/span&gt; (&lt;span class="code-keyword"&gt;string&lt;/span&gt;.IsNullOrEmpty(inputFile))
    {
        Log.Error(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;inputFile is null"&lt;/span&gt;);
        &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span class="code-keyword"&gt;nameof&lt;/span&gt;(inputFile));
    }

    &lt;span class="code-keyword"&gt;try&lt;/span&gt;
    {
        Log.Information(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Doing the processing"&lt;/span&gt;);
        &lt;span class="code-keyword"&gt;var&lt;/span&gt; a = &lt;span class="code-digit"&gt;10&lt;/span&gt; + &lt;span class="code-digit"&gt;20&lt;/span&gt;;

        Log.Information(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Doing some more"&lt;/span&gt;);
        &lt;span class="code-keyword"&gt;var&lt;/span&gt; b = &lt;span class="code-digit"&gt;10&lt;/span&gt; + a;

        Log.Information(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;And even more"&lt;/span&gt;);
        &lt;span class="code-keyword"&gt;var&lt;/span&gt; v = a + b;
    }
    &lt;span class="code-keyword"&gt;catch&lt;/span&gt; (Exception e)
    {
        Log.Fatal(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Something terrible happened here!"&lt;/span&gt;);
        &lt;span class="code-keyword"&gt;throw&lt;/span&gt; e;
    }
}&lt;/pre&gt;
Exception logging I get, but is this how you would Info and Debug? Writing out lines all over the place?&lt;br /&gt;
&lt;br /&gt;
Also, I have &lt;b&gt;"MinimumLevel": "Debug"&lt;/b&gt; in my appsettings.json, yet all of these line get written out.&lt;br /&gt;
&lt;br /&gt;
I'm guuessing I'm not understanding how to use it right. Can someone shed some light? Thanks&lt;br /&gt;

&lt;div class="signature"&gt;In theory, theory and practice are the same. But in practice, they never are.”&lt;br /&gt;
If it's not broken, fix it until it is.&lt;br /&gt;
Everything makes sense in someone's mind.
&lt;/div&gt;</description>
      <author>Kevin Marois</author>
      <link>https://www.codeproject.com/Messages/5979756/Silly-Logging-Question</link>
      <pubDate>Thu, 28 Dec 2023 04:05:00 GMT</pubDate>
      <guid>3_5979756</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Implementing domain driven design</title>
      <description>Alright, I thought I'd take up a new hobby project, and use it to try and implement some ideas on domain-driven design. In essense, the project is to develop a "Rigging Designer", that allows civil engineers to define rigging needed to lift heavy objects. I'm struggling a bit with how to implement the ideas of DDD, hence this question.&lt;br /&gt;
&lt;br /&gt;
The hierarchy of domain objects is: &lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;Lift - a lift operation
&lt;ul&gt;
&lt;li&gt;LiftObject - the thing to lift 
&lt;ul&gt;
&lt;li&gt;Weight - weight of the object, double &lt;/li&gt;&lt;li&gt;Cog - centre of gravity, position in X, Y, Z&lt;/li&gt;&lt;li&gt;Liftpoint - point where you can attach rigging, can have up to four 
&lt;ul&gt;
&lt;li&gt;Id: Id, local to Lift &lt;/li&gt;&lt;li&gt;Position: position in X, Y, Z&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Hook - a hook, can have up to two 
&lt;ul&gt;
&lt;li&gt;Position - X, Y, Z position of the hook &lt;/li&gt;&lt;li&gt;Type: 1, 2, 3, 4 leg hook&lt;/li&gt;&lt;li&gt;Leg - a leg between a hook, and a piece of rigging, can have up to 4 legs per hook
&lt;ul&gt;
&lt;li&gt;Id - Id local to hook &lt;/li&gt;&lt;li&gt;LiftPointId&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
The library / app will have two major components: designing consistent lifts (i.e. you can't connect two hooks to the same lift points), and solving them (i.e. calculating the load on legs and hooks). &lt;br /&gt;
&lt;br /&gt;
Alright, that's it for domain knowledge. Now my question: what do I treat as aggregates, entities and value objects? The way I see it now: &lt;br /&gt;

&lt;ol&gt;
&lt;li&gt;Lift is aggregate, since you can't modify any of the sub objects without needed to see if it is still consistent with the other ones (i.e. changing the cog changes the validity of the lift points). It's also an entity, since we want to be able to model multiple lifts. &lt;/li&gt;&lt;li&gt;LiftObject is an entity, although I expect that it can never be referenced by more than one lift (since modifying this entity would have implications to all connected lifts) &lt;/li&gt;&lt;li&gt;Weight and Cog are clear value objects &lt;/li&gt;&lt;li&gt;Hook is a (local) entity &lt;/li&gt;&lt;li&gt;Leg is a (local) entity &lt;/li&gt;&lt;/ol&gt;
First question: am I implementing the ideas of DDD correctly. &lt;br /&gt;
&lt;br /&gt;
Now, for my second question. I'll work on this project with a colleague, who will be implementing the solver. I intend to implement the following modules: &lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;Common - contains interfaces describing the models &lt;/li&gt;&lt;li&gt;Designer - contains concrete implementations of the models in Common, used for creating and changing the models &lt;/li&gt;&lt;li&gt;Solver - uses the interfaces in common to calculate the loads on the hooks and legs &lt;/li&gt;&lt;/ul&gt;
Second question: I like the idea of defining interfaces (which are very short and readible) in the Common namespace, which allows me and him to work very independently. However, this means he can't depend on concrete implementations for his unittest, so he has to create mock implementations of the classes. Is this good practice, or just a lot of overhead?</description>
      <author>Jan Hein de Jong</author>
      <link>https://www.codeproject.com/Messages/5979246/Implementing-domain-driven-design</link>
      <pubDate>Sat, 23 Dec 2023 21:41:00 GMT</pubDate>
      <guid>3_5979246</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Why I don't do MVVM.</title>
      <description>But MS says it better.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="quote"&gt;&lt;div class="op"&gt;Quote:&lt;/div&gt;
... The issue with the MVVM pattern is that it can inadvertently lead to apps that have too many layers and too many allocations.&lt;br /&gt;
&lt;br /&gt;
... But strict adherence to any variation of the pattern can lead to apps with a lot more overhead than can be justified.&lt;br /&gt;
&lt;br /&gt;
... consider putting event handlers in your &lt;b&gt;code-behind&lt;/b&gt;  ....&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://learn.microsoft.com/en-us/windows/uwp/debug-test-perf/mvvm-performance-tips"&gt;MVVM and language performance tips - UWP applications | Microsoft Learn&lt;/a&gt;&lt;br /&gt;

&lt;div class="signature"&gt;&lt;br&gt;&lt;br /&gt;
"Before entering on an understanding, I have meditated for a long time, and have foreseen what might happen. It is not genius which reveals to me suddenly, secretly, what I have to say or to do in a circumstance unexpected by other people; it is reflection, it is meditation." - Napoleon I&lt;/div&gt;</description>
      <author>Gerry Schmitz</author>
      <link>https://www.codeproject.com/Messages/5979127/Why-I-dont-do-MVVM</link>
      <pubDate>Fri, 22 Dec 2023 20:46:00 GMT</pubDate>
      <guid>3_5979127</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Literature on designing and implementing an access control system</title>
      <description>I'm searching for good, general literature* on how to design and implement access control management. I'd like to build up the knowledge to design a system myself and/or make informed decisions about the architecture of one.&lt;br /&gt;
&lt;br /&gt;
My focus is authorization, not authentication.&lt;br /&gt;
&lt;br /&gt;
*literature = online,offline,free,paid; anything goes.&lt;br /&gt;
&lt;br /&gt;
Some concrete questions could be &lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;"in which roughness should I store permissions?"&lt;/li&gt;&lt;li&gt;"in which format should I store my permissions?"&lt;/li&gt;&lt;li&gt;"should I use RBAC, UBAC, ACL,... and how would I concretely implement them, cleanly?"&lt;/li&gt;&lt;li&gt;"How do I combine all that with a system that contains several individual organizations with their own set of permissions?" &lt;/li&gt;&lt;/ul&gt;
Does anyone have recommendations? Even a "look in this corner of the internet would help". &lt;br /&gt;
(I really cannot find anything useful about this topic. All search results contain the same hipster stuff)&lt;br /&gt;
&lt;br /&gt;
Just to make sure ... what I'm &lt;em&gt;not&lt;/em&gt; looking for:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;A cook book. &lt;/li&gt;&lt;li&gt;Answers that just say "use this or that, because it's the standard"&lt;/li&gt;&lt;li&gt;Some "hip" book after which you nod, say "yes, aha, I see", but didn't really make you smarter.&lt;/li&gt;&lt;/ul&gt;</description>
      <author>D4rkTrick</author>
      <link>https://www.codeproject.com/Messages/5976852/Literature-on-designing-and-implementing-an-access</link>
      <pubDate>Fri, 08 Dec 2023 13:17:00 GMT</pubDate>
      <guid>3_5976852</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>IODA - Architecture Ralf Westphal - Anyone use it also?</title>
      <description>I use IODA architecture since the very beginning, nearly 10 years now. I develop SW more than 30 years as a profi.&lt;br /&gt;
&lt;br /&gt;
It is the first approach/technique, that offers the option to produce reusable, small classes like "lego building blocks".&lt;br /&gt;
&lt;br /&gt;
It is ortogonal to other best practices like CleanCode, DRY and other.&lt;br /&gt;
&lt;br /&gt;
It has a strong impact on unit testing: Unit testing will be easy.&lt;br /&gt;
&lt;br /&gt;
The reason is simple: &lt;br /&gt;
&lt;br /&gt;
IODA was designed to reduce dependencies between classes to a minimum.&lt;br /&gt;
&lt;br /&gt;
I - Integration - calls all other, but does not contain logic or data&lt;br /&gt;
O - Operation - contains logic, just work with data, do not know other operations or integrations&lt;br /&gt;
D - Data - holds the data and knows/deals only about itself and its childs. No operations here.&lt;br /&gt;
A - API - Application Interfaces - To deal with the environment or to provide general functions like data validation and other stuff&lt;br /&gt;
&lt;br /&gt;
All of these classes are devolped by the project. Standard-Libraries can be found below this code.&lt;br /&gt;
&lt;br /&gt;
If you then divide the Operations in "IO operations" and "other operations" you get the following:&lt;br /&gt;
&lt;br /&gt;
IO_operation "reader" reads "data_ger", &lt;br /&gt;
operation "translator" translates "data_ger" to english data "data_eng"&lt;br /&gt;
and then the IO operation "View_data" presents it to the user.&lt;br /&gt;
&lt;br /&gt;
And the integrator "TextManager" has a method like&lt;br /&gt;
&lt;br /&gt;
&lt;div class='pre-lang' id='premain602510'&gt;&lt;div&gt;C#&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode602510' class='copy-code' data-index='602510' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre602510' style='margin-top:0;' class='lang-csharp' data-language='C#' data-allowShrink='True' data-collapse='False'&gt;
&lt;span class="code-keyword"&gt;void&lt;/span&gt; viewAsEnglish(&lt;span class="code-keyword"&gt;int&lt;/span&gt; textIdGer, &lt;span class="code-keyword"&gt;string&lt;/span&gt; readLang = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;ger"&lt;/span&gt;)
{
  &lt;span class="code-keyword"&gt;var&lt;/span&gt; data_ger = reader.Read(textIdGer, readLang);
  &lt;span class="code-keyword"&gt;var&lt;/span&gt; data_eng = translator.Translate(data_ger, &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;eng"&lt;/span&gt;);
  
  dataViewer.View(data_eng);
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
After longer practice you will automatically think in these four types, when creating a new class.&lt;br /&gt;
&lt;br /&gt;
And yes, it will work fine in real projects.&lt;br /&gt;
&lt;br /&gt;
Now lets start discussion about it, if you want.&lt;br /&gt;
&lt;br /&gt;
**Links**&lt;br /&gt;
&lt;br /&gt;
Detailed description:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://www.infoq.com/news/2015/05/ioda-architecture/"&gt;https://www.infoq.com/news/2015/05/ioda-architecture/&lt;/a&gt;[&lt;a href="https://www.infoq.com/news/2015/05/ioda-architecture/" target="_blank" title="New Window"&gt;^&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
Bigger sample project (documentation only in german, sorry)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/jpr65/VersandEtiketten"&gt;GitHub - jpr65/VersandEtiketten: This is a reference projekt for IODA and also a developer test ticket. Only in german, possible later also in english.&lt;/a&gt;[&lt;a href="https://github.com/jpr65/VersandEtiketten" target="_blank" title="New Window"&gt;^&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
** Images **&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/jpr65/VersandEtiketten/blob/master/html/IODA.png"&gt;IODA - Principle Diagram&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/jpr65/VersandEtiketten/blob/master/html/IODA-Libs.png"&gt;IODA - Libraries&lt;/a&gt;</description>
      <author>Ralf Peine 2023</author>
      <link>https://www.codeproject.com/Messages/5975376/IODA-Architecture-Ralf-Westphal-Anyone-use-it-also</link>
      <pubDate>Wed, 29 Nov 2023 15:14:00 GMT</pubDate>
      <guid>3_5975376</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Validate Data Format</title>
      <description>I'm working on a WPF app for a client that gets invoice remittance data from their customers as CSV files. My app extracts the Invoice Date, Reference Number, and Amount using metadata defined by my client for the input files. This metadata defines the columns in the file, and the index position of the Invoice Date, Reference Number, and Amount.&lt;br /&gt;
&lt;br /&gt;
The key is the reference number. It is used to look up the invoice row in their accounting system. Once in a while their customer formats the reference number wrong. For example, one of the reference number formats is eight numbers, as in '20158011'. But from time to time, they send invalid data, as in 'RECOUP19718470_002ZT'.&lt;br /&gt;
&lt;br /&gt;
Another customer's format is 'RDHC608965'. This column's reference number always starts with 'RDHC'. The remainder is the six-digit reference number. &lt;br /&gt;
&lt;br /&gt;
What I would like to do is provide a place in the UI to define the required format of the reference number. If it was internal I would specify a regex, but this is something that my client has to define.&lt;br /&gt;
&lt;br /&gt;
What's the right way to go about this?&lt;br /&gt;

&lt;div class="signature"&gt;In theory, theory and practice are the same. But in practice, they never are.”&lt;br /&gt;
If it's not broken, fix it until it is.&lt;br /&gt;
Everything makes sense in someone's mind.
&lt;/div&gt;</description>
      <author>Kevin Marois</author>
      <link>https://www.codeproject.com/Messages/5973143/Validate-Data-Format</link>
      <pubDate>Thu, 16 Nov 2023 00:05:00 GMT</pubDate>
      <guid>3_5973143</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>How to address security in white label software</title>
      <description>I just started working with a business that made a web application that has a nodejs-expressjs backend api and a react front end. The business wants to sell its software as a white label solution to some enterprise sized businesses. My manager says that the customers will be expecting a detailed report to convince them that our solution is "secure". I need to determine steps to producing such a security report.&lt;br /&gt;
My first thoughts are to follow these steps:&lt;br /&gt;
&lt;br /&gt;
1. Run the npm audit command on our backend and front end projects to identify all known vulnerabilities. And then fixed them according to recommended approaches I read about on the internet. This step has been done. The npm audit command shows no vulnerabilities or issues of any kind.&lt;br /&gt;
&lt;br /&gt;
2. We upload our code as docker images to dockerhub.com. Dockerhub shows a list of vulnerabilities for us to address. I am currently in this step, and I have some issues which I will elaborate further down in this post.&lt;br /&gt;
&lt;br /&gt;
3. Hire a 3rd party cyber security firm to test our solution. This firm will give us a report of issues to address.&lt;br /&gt;
&lt;br /&gt;
That's my overall plan. However, I am currently stuck on step 2. Dockerhub is showing me MANY Critical and High priority vulnerabilities such as the following:&lt;br /&gt;
&lt;br /&gt;
cve-2021-44906 - An Uncontrolled Resource Consumption flaw was found in minimist&lt;br /&gt;
https://access.redhat.com/security/cve/cve-2021-44906&lt;br /&gt;
&lt;br /&gt;
CVE-2022-37434 - zlib through 1.2.12 has a heap-based buffer over-read or buffer overflow in inflate in inflate.c via a large gzip header extra field.&lt;br /&gt;
https://nvd.nist.gov/vuln/detail/CVE-2022-37434&lt;br /&gt;
&lt;br /&gt;
...etc...&lt;br /&gt;
&lt;br /&gt;
According to dockerhub, there are about 100 of these types of vulnerabilities, where maybe 10% are critical, 15% are high, rest are medium or low. These issues look very difficult to address, because they are used by modules of modules that I don't directly access in my own software. Trying to replace these modules of modules basically means a complete rewrite of our software to not depend on ANY open source solutions at all! And I'm sure if I were to scan packages with another type of scanner, different sets of vulnerabilities would be exposed. And I haven't even gotten to step 3 yet.&lt;br /&gt;
&lt;br /&gt;
So this got me wondering...how do other organizations selling white labelled solutions go about disclosing vulnerabilities to their end clients and how do they protect themselves?&lt;br /&gt;
&lt;br /&gt;
I started thinking that maybe I don't have to deal with every single security vulnerability that exists. Instead, I should only address security issues that I am confident hackers will exploit or things that are easy to address. Then I hire a security party firm to find other vulnerabilities. Anything that's not caught by the security firm we deem as "not important". And we develop some contract and service agreement that protects our business from the legal actions if our clients experiences a security vulnerability not covered in our report?&lt;br /&gt;
But then, a customer will say, "But dockerhub.com clearly shows vulnerability X, and you as the seller were aware of vulnerability X, please justify to us why you did not address it." And how do we respond then?&lt;br /&gt;
&lt;br /&gt;
That's what's in my head right now.&lt;br /&gt;
&lt;br /&gt;
So back to my original question - what steps should a team take to address security concerns of a software that will be white labelled and sold to customers?</description>
      <author>mozilly</author>
      <link>https://www.codeproject.com/Messages/5970871/How-to-address-security-in-white-label-software</link>
      <pubDate>Fri, 03 Nov 2023 07:54:00 GMT</pubDate>
      <guid>3_5970871</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>How to address security for white-label web app</title>
      <description>I just started working with a business that made a web application that has a nodejs-expressjs backend api and a react front end.  The business wants to sell its software as a white label solution to some enterprise sized businesses. My manager says that the customers will be expecting a detailed report to convince them that our solution is "secure".  I need to determine steps to producing such a security report.&lt;br /&gt;
&lt;br /&gt;
My first thoughts are to follow these steps:&lt;br /&gt;

&lt;ol&gt;
&lt;li&gt;Run the &lt;code&gt;npm audit&lt;/code&gt; command on our backend and front end projects to identify all known vulnerabilities.  And then fixed them according to recommended approaches I read about on the internet.  This step has been done.  The &lt;code&gt;npm audit&lt;/code&gt; command shows no vulnerabilities or issues of any kind.&lt;/li&gt;&lt;li&gt;We upload our code as docker images to dockerhub.com.  Dockerhub shows a list of vulnerabilities for us to address.  I am currently in this step, and I have some issues which I will elaborate further down in this post.&lt;/li&gt;&lt;li&gt;Hire a 3rd party cyber security firm to test our solution. This firm will give us a report of issues to address.&lt;/li&gt;&lt;/ol&gt;
That's my overall plan.  However, I am currently stuck on step 2.   Dockerhub is showing me &lt;strong&gt;MANY&lt;/strong&gt; Critical and High priority vulnerabilities such as the following:&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;cve-2021-44906 - An Uncontrolled Resource Consumption flaw was found in minimist&lt;br /&gt;
&lt;a href="https://access.redhat.com/security/cve/cve-2021-44906"&gt;&lt;/a&gt;&lt;a href="https://access.redhat.com/security/cve/cve-2021-44906"&gt;https://access.redhat.com/security/cve/cve-2021-44906&lt;/a&gt;&lt;/li&gt;&lt;li&gt;CVE-2022-37434 - zlib through 1.2.12 has a heap-based buffer over-read or buffer overflow in inflate in inflate.c via a large gzip header extra field.&lt;br /&gt;
&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2022-37434"&gt;&lt;/a&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2022-37434"&gt;https://nvd.nist.gov/vuln/detail/CVE-2022-37434&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
...etc...&lt;br /&gt;
&lt;br /&gt;
According to dockerhub, there are about 100 of these types of vulnerabilities, where maybe 10% are critical, 15% are high, rest are medium or low.   These issues look very difficult to address, because they are used by modules of modules that I don't directly access in my own software.  Trying to replace these modules of modules basically means a complete rewrite of our software to not depend on ANY open source solutions at all! And I'm sure if I were to scan packages with another type of scanner, different sets of vulnerabilities would be exposed.  And I haven't even gotten to step 3 yet.&lt;br /&gt;
&lt;br /&gt;
So this got me wondering...how do other organizations selling white labelled solutions go about disclosing vulnerabilities to their end clients and how do they protect themselves?&lt;br /&gt;
&lt;br /&gt;
I started thinking that maybe I don't have to deal with every single security vulnerability that exists.  Instead, I should only address security issues that I am confident hackers will exploit or things that are easy to address.  Then I hire a security party firm to find other vulnerabilities.  Anything that's not caught by the security firm we deem as "not important". And we develop some contract and service agreement that protects our business from the legal actions if our clients experiences a security vulnerability not covered in our report?&lt;br /&gt;
&lt;br /&gt;
But then, a customer will say, "But dockerhub.com clearly shows vulnerability X, and you as the seller were aware of vulnerability X, please justify to us why you did not address it."  And how do we respond then?&lt;br /&gt;
&lt;br /&gt;
That's what's in my head right now.&lt;br /&gt;
&lt;br /&gt;
So back to my original question - what steps should a team take to address security concerns of a software that will be white labelled and sold to customers?</description>
      <author>mozilly</author>
      <link>https://www.codeproject.com/Messages/5970683/How-to-address-security-for-white-label-web-app</link>
      <pubDate>Thu, 02 Nov 2023 10:56:00 GMT</pubDate>
      <guid>3_5970683</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Thoughts on Internationalization</title>
      <description>We're getting pressure from one of our customers to internationalize our software product. All of our currency and dates are handled correctly or get fixed quickly. We have about 70% of the words translated via resx files. There are also some database translations where we allow customization. All of this works.&lt;br /&gt;
&lt;br /&gt;
However, since it isn't 100% complete it came up in a discussion from management. One of the devs wants to remove the resx files and put all translations in a database table (actually 3). Curious if anybody out there has any strong opinions on why database only vs resx translations are better or not. There are articles out there and stack overflow questions, but most of it is older. &lt;br /&gt;
&lt;br /&gt;
Is resx still in favor? Is it a good choice. My feel is re-working all of the resx for some new custom format isn't a good use of our time.&lt;br /&gt;
&lt;br /&gt;
Thanks for your thoughts.&lt;br /&gt;

&lt;div class="signature"&gt;Hogan&lt;/div&gt;</description>
      <author>snorkie</author>
      <link>https://www.codeproject.com/Messages/5968811/Thoughts-on-Internationalization</link>
      <pubDate>Mon, 23 Oct 2023 17:44:00 GMT</pubDate>
      <guid>3_5968811</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>VLC Media Player Replacement Requirement</title>
      <description>I'm looking for a replacement for the VLC Media Player, because it does not support IPv6. Here are some of my requirments:
&lt;ul&gt;
&lt;li&gt;Supporting both IPv4 and IPv6
&lt;/li&gt;&lt;li&gt;Integration to WPF
&lt;/li&gt;&lt;li&gt;Sixteen Cameras
&lt;/li&gt;&lt;li&gt;Taking Snapshots
&lt;/li&gt;&lt;li&gt;Support audio and video codecs ( H.264 / H.265 and AAC / MP3 )
&lt;/li&gt;&lt;li&gt;RTSP and HLS Stream
&lt;/li&gt;&lt;li&gt;Playing DVR Data
&lt;/li&gt;&lt;li&gt;Start/Stop
&lt;/li&gt;&lt;li&gt;Debug Logs
&lt;/li&gt;&lt;li&gt;Custom Parameters
&lt;/li&gt;&lt;li&gt;Custom Menu for player
&lt;/li&gt;&lt;li&gt;Set volume
&lt;/li&gt;&lt;li&gt;Disable Keyboard/Mouse input
&lt;/li&gt;&lt;li&gt;Custom Menu for player
&lt;/li&gt;&lt;li&gt;Player Events
&lt;/li&gt;&lt;li&gt;Mediaplayer Events
&lt;/li&gt;&lt;li&gt;Track/Stream Info
&lt;/li&gt;&lt;li&gt;Set Crop Rectangle
&lt;/li&gt;&lt;li&gt;Select channel to play the audio(e.g., Left vs Right)
&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
I've looked at LeadTools, which his pretty good and there documentation and support are nice, but it's expensive. I've also been looking at 'ffply'.&lt;br /&gt;
&lt;br /&gt;
Anyone have an suggestions?&lt;br /&gt;

&lt;div class="signature"&gt;In theory, theory and practice are the same. But in practice, they never are.”&lt;br /&gt;
If it's not broken, fix it until it is.&lt;br /&gt;
Everything makes sense in someone's mind.
&lt;/div&gt;</description>
      <author>Kevin Marois</author>
      <link>https://www.codeproject.com/Messages/5968342/VLC-Media-Player-Replacement-Requirement</link>
      <pubDate>Fri, 20 Oct 2023 18:44:00 GMT</pubDate>
      <guid>3_5968342</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Thoughts On Handling Exceptions in This App</title>
      <description>I'm working on a WPF app that connects to SharePoint. &lt;br /&gt;
&lt;br /&gt;
From time to time, upon connecting, I get a 'Server not availale' exception. Sometimes I get the error while downloading data. It's intermittent and I can't seem to reproduce it. I restart the app and it works fine.&lt;br /&gt;
&lt;br /&gt;
I could just catch it and retry, but I'd like to get your thoughts on the best way to deal with this.&lt;br /&gt;

&lt;div class="signature"&gt;In theory, theory and practice are the same. But in practice, they never are.”&lt;br /&gt;
If it's not broken, fix it until it is.&lt;br /&gt;
Everything makes sense in someone's mind.
&lt;/div&gt;</description>
      <author>Kevin Marois</author>
      <link>https://www.codeproject.com/Messages/5965554/Thoughts-On-Handling-Exceptions-in-This-App</link>
      <pubDate>Wed, 04 Oct 2023 01:16:00 GMT</pubDate>
      <guid>3_5965554</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Container orchestration with primary and secondary failover</title>
      <description>Posting an architecture/design question without a picture might be a challenge in itself but I'll have a go anyway  &lt;img src="https://codeproject.global.ssl.fastly.net/script/Forums/Images/smiley_smile.gif" align="top" alt="Smile | :)" /&gt;  &lt;br /&gt;
While a primary/secondary (previously master/slave) can be implemented by oneself I was wondering whether this doesn’t come out of the box in a container orchestration management system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Requirements:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;High availability (redundancy) but doesn’t need scaling (capacity).&lt;/li&gt;&lt;li&gt;Orchestration decides which one is Primary/Secondary (or Alternates (multiples)).&lt;/li&gt;&lt;li&gt;Container and application (MyApp) knows whether its Primary/Secondary (or Alternates (multiples)).&lt;/li&gt;&lt;li&gt;Only the primary application (MyApp) is communicating with the service x and the physical device(s).&lt;/li&gt;&lt;li&gt;Only the primary application (MyApp) forwards the responses to the secondary (with a safe mechanism in &lt;/li&gt;place) so that the secondary has all the data/states up to date at all times.&lt;br /&gt;
&lt;li&gt;Failover should happen within less than a second (e.g. 500ms).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Design:&lt;/b&gt;&lt;br /&gt;
&lt;div class='pre-lang' id='premain142294'&gt;&lt;div&gt;&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode142294' class='copy-code' data-index='142294' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre142294' style='margin-top:0;' data-allowShrink='True' data-collapse='False'&gt;
|...Container Primary...|          
|.......................| ------ Send Message -----------&amp;gt; |.....Service X.....|
|........[ MyApp ]......|
|.......................| &amp;lt; ----- Request/Response ------&amp;gt; |..Physical Device..|

 ....^...............|...
 ....|...............|...
 ..Check......Forward response &lt;span class="code-sdkkeyword"&gt;from&lt;/span&gt; device
 ....|........so that secondary &lt;span class="code-keyword"&gt;is&lt;/span&gt; always up to date
 ....|...............|...
 ....v...............v...

|..Container Secondary..| 
|.......................|
|.......[ MyApp ].......|
|.......................|&lt;/pre&gt;&lt;br /&gt;
Though I have left out the details I hope the overall requirements/concept is clear.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Questions:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Is there a container orchestration management that handles primary/secondary concept? &lt;/li&gt;&lt;li&gt;Most importantly will my application (MyApp) hosted in the container know when it's in what state (Startup, Sync, Primary, Secondary, PrimaryOnly)?&lt;/li&gt;&lt;li&gt;How is it best implemented if there is an existing concept?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;div class="signature"&gt;PKaelin&lt;/div&gt;</description>
      <author>pkaelin</author>
      <link>https://www.codeproject.com/Messages/5962945/Container-orchestration-with-primary-and-secondary</link>
      <pubDate>Mon, 18 Sep 2023 19:47:00 GMT</pubDate>
      <guid>3_5962945</guid>
      <subject>Design and Architecture</subject>
    </item>
    <item>
      <title>Not Sure How To Make This Change</title>
      <description>Working on a WPF app. Currently, I have a table in SQL called Lookups that contains all kinds of lookup data.&lt;br /&gt;
&lt;br /&gt;
Here is a set of that data called Employee Types.
&lt;div class='pre-lang' id='premain733542'&gt;&lt;div&gt;&lt;/div&gt;&lt;div class='pre-action-link'&gt;&lt;span id='copycode733542' class='copy-code' data-index='733542' style='visibility:hidden'&gt;&lt;svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 460 460' style='width: 16px;height:16px;' xml:space='preserve'&gt;&lt;g&gt;&lt;path d='M425.934,0H171.662c-18.122,0-32.864,14.743-32.864,32.864v77.134h30V32.864c0-1.579,1.285-2.864,2.864-2.864h254.272     c1.579,0,2.864,1.285,2.864,2.864v254.272c0,1.58-1.285,2.865-2.864,2.865h-74.729v30h74.729 c18.121,0,32.864-14.743,32.864-32.865V32.864C458.797,14.743,444.055,0,425.934,0z'&gt;&lt;/path&gt;&lt;path d='M288.339,139.998H34.068c-18.122,0-32.865,14.743-32.865,32.865v254.272C1.204,445.257,15.946,460,34.068,460h254.272 c18.122,0,32.865-14.743,32.865-32.864V172.863C321.206,154.741,306.461,139.998,288.339,139.998z M288.341,430H34.068    c-1.58,0-2.865-1.285-2.865-2.864V172.863c0-1.58,1.285-2.865,2.865-2.865h254.272c1.58,0,2.865,1.285,2.865,2.865v254.273h0.001 C291.206,428.715,289.92,430,288.341,430z'&gt;&lt;/path&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;pre id='pre733542' style='margin-top:0;' data-allowShrink='True' data-collapse='False'&gt;
&amp;lt;h2&amp;gt;Caption                       Category                      AppCode&lt;span class="code-keyword"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="code-leadattribute"&gt;h2&lt;/span&gt;&lt;span class="code-keyword"&gt;&amp;gt;&lt;/span&gt;

Director of field Operations  employee_types                director_of_field_operations
Drafting                      employee_types                drafting
Driver                        employee_types                driver
Estimator                     employee_types                estimator
Foreman                       employee_types                foreman
General Forman                employee_types                general_forman
Office                        employee_types                office
President                     employee_types                president
Project Coordinator           employee_types                project_coordinator
Project Manager               employee_types                project_manager
System Administrator          employee_types                system_admin
Vice President        &lt;/pre&gt;
Each employee is assigned an Employee Type. I can the query for specific types of employees. For example, there is a Foreman report that gets all employees who's EmployeeTypeId is in the Lookups of AppCode 'foreman' or 'general_forman'. The AppCode is defined by me when I create new Lookup entries so I can reference them in code.&lt;br /&gt;
&lt;br /&gt;
The problem is, now my client wants to be able to add and remove employee types via the UI.&lt;br /&gt;
&lt;br /&gt;
I don't see how I can allow them to manage this list without the AppCode. I would have nothing to key off of when running reports or sending automated notifications to people in specific roles.&lt;br /&gt;
&lt;br /&gt;
I can provide more detail if needed.&lt;br /&gt;
&lt;br /&gt;
Any ideas on this?&lt;br /&gt;

&lt;div class="signature"&gt;In theory, theory and practice are the same. But in practice, they never are.”&lt;br /&gt;
If it's not broken, fix it until it is.&lt;br /&gt;
Everything makes sense in someone's mind.
&lt;/div&gt;</description>
      <author>Kevin Marois</author>
      <link>https://www.codeproject.com/Messages/5961682/Not-Sure-How-To-Make-This-Change</link>
      <pubDate>Mon, 11 Sep 2023 21:04:00 GMT</pubDate>
      <guid>3_5961682</guid>
      <subject>Design and Architecture</subject>
    </item>
  </channel>
</rss>