No Display Manager in Debian Trixie

Lately I decided to try Podman Quadlets. It seemed to be really interesting way to achieve similar results as with Docker and Compose, but it have nicer integration with the system (i.e. ability to see container in Cockpit along with other systemd services, or triggering container by socket, so less frequently used containers won’t be running all the time).

Everything went fine except for unavailability of buildah package in Debian stable apt channel (or the version that were needed for podman at least). Quick search on the internet and I found the answer is to reference this specific package from the testing channel of apt.

At this time I knew that I am going into problems willingly.

I was able to install buildah package and install podman and in few minutes have running container. Put my laptop to hibernation and went to sleep.

Next day however I was unable to boot my laptop correctly. Or it was booting but only to text mode, without Gnome Display Manager.

Starting display manager manually systemctl start gdm3, or gdmflexiserver or gdm3 were not doing any good. Also systemctl status display-manager was not helpful. All Gnome related services were dead, closed soon after the system started without any meaningful errors. journalctl also did not show any critical errors like missing GPU drivers or similar issues, but startx was working just fine by showing terminal emulator by using desktop application – so driver were fine.

In attempt to fix that by updating entirely to testing Debian, or Trixie i followed this article. But it updated several packages more and beside that did not help.

I thought that maybe changing to alternative Display Manager should fix that. Another web search showed that doing dpkg-reconfigure gdm3 should show configuration for choosing/changing display manager. But instead resulted in similar error (I am typing from memory).

gdm3 package was not installed correctly or some dependencies are missing.

At this point fix seemed straightforward: reinstall Gnome.

apt reinstall gdm3

proved to be successful by installing few Gnome packages like i.e. gnone-shell, after that desktop automatically were started and Debian switched from text based terminal to Gnome login screen.

PS: strangely I was able to install podman on another machine running also Debian bookwork without a problem.

Monitoring vs Observability

What is the difference between monitoring and observability?

Monitoring is process of collecting live events from your application, traces, debug messages, warnings and exceptions. The same process may involve sending those events to some storage or application that analyze or visualize those messages. I.e. in asp.net core applications monitoring of application involves calling a ILogger and sending those logs or critical exceptions to AppInsights. Monitoring may also involve activity of development team members to active watch those logged messages for any potential errors or problems that may impact availability of production environment.

Observability is on the other hand is analyzing messages produced by monitoring process to understand behavior of application and reason about it internal state, if this state is expected (correct behavior, ‘application works ok’) or may be unexpected (erroneous state, database is down, endpoints returns 500 etc). Typically involves dashboard with several metrics from monitoring, exceptions, response times, number of not OK responses in time, long database queries, number of active users etc (i.e. App Insights dashboard in asp.net core). Monitoring process of an application (as human activity) is typically using such observability dashboard.

So what is the difference between Observability and Monitoring? Observability is possible because Monitorin of an application was implemented. If metrics and logs would not be collected and stored system is not observable.

Basically Monitoring is collecting logs and metrics, while Observability is feature of the system enabled by such process.

Solid

  • The single-responsibility principle – piece of software should have only one responsibility
  • The open–closed principle – things should be open for extension but closed for modification
  • The Liskov substitution principle – changing interface implementation should not brake software
  • The interface segregation principle – it is better to have more specialized interfaces than single big one
  • The dependency inversion principle – dependencies should be abstracted via interfaces

Further read:

https://en.wikipedia.org/wiki/SOLID

.NET/C# interview questions

Equals and GetHashCode

Custom implementation is usually only necessary if default, reference equality is not enough. In example:

  • entities value based equality
  • value equality of deserialized objects
  • custom comparisons based on other criterias
public class ImaginaryNumber : IEquatable<ImaginaryNumber>
{
    public double RealNumber { get; set; }
    public double ImaginaryUnit { get; set; }

    public override bool Equals(object obj)
    {
        return Equals(obj as ImaginaryNumber);
    }

    public bool Equals(ImaginaryNumber other)
    {
        return other != null &&
               RealNumber == other.RealNumber &&
               ImaginaryUnit == other.ImaginaryUnit;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(RealNumber, ImaginaryUnit);
    }
}