<?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>DEV Community: Leo</title>
    <description>The latest articles on DEV Community by Leo (@leo_station).</description>
    <link>https://dev.to/leo_station</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3991034%2F3ada9740-639e-4297-a304-0d76d69d5a71.png</url>
      <title>DEV Community: Leo</title>
      <link>https://dev.to/leo_station</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leo_station"/>
    <language>en</language>
    <item>
      <title>Understanding the Singleton Pattern: From Core Concept to Thread-Safe Java</title>
      <dc:creator>Leo</dc:creator>
      <pubDate>Mon, 26 Oct 2026 01:52:16 +0000</pubDate>
      <link>https://dev.to/leo_station/understanding-the-singleton-pattern-from-core-concept-to-thread-safe-java-1c7</link>
      <guid>https://dev.to/leo_station/understanding-the-singleton-pattern-from-core-concept-to-thread-safe-java-1c7</guid>
      <description>&lt;p&gt;Imagine you are building an application with a settings screen. A user switches the app theme to &lt;code&gt;"dark"&lt;/code&gt;, and ten different screens across the app need to apply that choice.&lt;/p&gt;

&lt;p&gt;If each screen instantiated its own settings object with &lt;code&gt;new&lt;/code&gt;, one screen might read &lt;code&gt;"dark"&lt;/code&gt; while another still holds &lt;code&gt;"light"&lt;/code&gt;. What you actually need is &lt;strong&gt;one single settings object&lt;/strong&gt; that is initialized once, exists as a single unique instance, and is shared across your entire application.&lt;/p&gt;

&lt;p&gt;That is the exact problem the &lt;strong&gt;Singleton design pattern&lt;/strong&gt; was created to solve.&lt;/p&gt;

&lt;p&gt;Defined by the &lt;strong&gt;Gang of Four (GoF)&lt;/strong&gt; in &lt;em&gt;Design Patterns&lt;/em&gt;, its intent comes down to two guarantees:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ensure a class has only one instance.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide a global point of access to it.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A plain global variable gives you the second guarantee, but it never stops someone from calling &lt;code&gt;new&lt;/code&gt; and creating another instance of that class. A Singleton gives you both—and it does so using three core pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;code&gt;private&lt;/code&gt; constructor:&lt;/strong&gt; locks the front door so ordinary external code cannot instantiate the class with &lt;code&gt;new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;code&gt;static&lt;/code&gt; access method (&lt;code&gt;getInstance()&lt;/code&gt;):&lt;/strong&gt; acts as the single reception desk that everyone must go through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One cached instance:&lt;/strong&gt; stored in a &lt;code&gt;private static&lt;/code&gt; field and returned on every subsequent call.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Textbook Java Implementation (and Why It Breaks)
&lt;/h2&gt;

&lt;p&gt;If you write the classic &lt;strong&gt;lazy initialization&lt;/strong&gt; version in Java—where the instance is created only when someone asks for it the first time—it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// the one and only instance&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;AppConfig&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;                   &lt;span class="c1"&gt;// nobody else can call new&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt; &lt;span class="nf"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;   &lt;span class="c1"&gt;// the global access point&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;       &lt;span class="c1"&gt;// created on first request&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getTheme&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you test this in a simple single-threaded &lt;code&gt;main&lt;/code&gt; method, it works as expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;AppConfig&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;AppConfig&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AppConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// true: both variables point to the same object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Hidden Trap: Concurrency
&lt;/h3&gt;

&lt;p&gt;This simple implementation has a critical flaw: &lt;strong&gt;it is only safe when one task runs at a time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a multithreaded application, picture what happens when &lt;strong&gt;Thread A&lt;/strong&gt; and &lt;strong&gt;Thread B&lt;/strong&gt; call &lt;code&gt;getInstance()&lt;/code&gt; at the exact same moment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Thread A&lt;/strong&gt; checks &lt;code&gt;if (instance == null)&lt;/code&gt;, sees that &lt;code&gt;instance&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;, and starts instantiating &lt;code&gt;AppConfig&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Before Thread A finishes creating and assigning the object, &lt;strong&gt;Thread B&lt;/strong&gt; also calls &lt;code&gt;getInstance()&lt;/code&gt;, sees that &lt;code&gt;instance&lt;/code&gt; is still &lt;code&gt;null&lt;/code&gt;, and enters the &lt;code&gt;if&lt;/code&gt; block too.&lt;/li&gt;
&lt;li&gt;Both threads call &lt;code&gt;new AppConfig()&lt;/code&gt;, leaving each thread holding a different instance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is just like two employees checking a cabinet, seeing there is no key yet, and each going off to have a new one made: individually, each person acted sensibly, but together they broke the &lt;em&gt;"only one unique key"&lt;/em&gt; rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fixing It in Java (Without Slowing Everything Down)
&lt;/h2&gt;

&lt;p&gt;Developers have come up with several ways to make a Singleton thread-safe in Java, and each one trades something for something else:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Eager initialization:&lt;/strong&gt; create the instance right when the JVM loads the class—simple, but wasteful if the object is never used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;synchronized&lt;/code&gt; method:&lt;/strong&gt; put &lt;code&gt;synchronized&lt;/code&gt; on &lt;code&gt;getInstance()&lt;/code&gt;—thread-safe, but slow because threads must wait in line on every call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Double-checked locking:&lt;/strong&gt; synchronize only on the first creation, using the &lt;code&gt;volatile&lt;/code&gt; keyword so writes to &lt;code&gt;instance&lt;/code&gt; are visible across threads and the JVM doesn't reorder the initialization steps inside &lt;code&gt;new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Bill Pugh Holder idiom:&lt;/strong&gt; place the instance inside a nested &lt;code&gt;static&lt;/code&gt; &lt;code&gt;Holder&lt;/code&gt; class that isn't initialized until &lt;code&gt;getInstance()&lt;/code&gt; is called:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;Logger&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Holder&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt; &lt;span class="no"&gt;INSTANCE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt; &lt;span class="nf"&gt;getInstance&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Holder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;INSTANCE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"LOG: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the Java Language Specification (JLS) guarantees that the class initialization phase is sequential, the Holder idiom gives you lazy initialization and thread safety with &lt;strong&gt;no &lt;code&gt;if&lt;/code&gt;, no &lt;code&gt;synchronized&lt;/code&gt;, and no &lt;code&gt;volatile&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;enum&lt;/code&gt; Singleton:&lt;/strong&gt; recommended as the preferred approach in a summary of Joshua Bloch's &lt;em&gt;Effective Java&lt;/em&gt;, because it also guards against two sneaky ways a &lt;code&gt;private&lt;/code&gt; constructor can be bypassed (&lt;code&gt;Reflection&lt;/code&gt; and &lt;code&gt;Serialization&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Part We Need to Talk About: The Architectural Price
&lt;/h2&gt;

&lt;p&gt;Even when you write a rock-solid, thread-safe Singleton, convenience comes with a real cost.&lt;/p&gt;

&lt;p&gt;The very feature that makes Singleton so tempting—&lt;strong&gt;shared global access&lt;/strong&gt;—is the same reason it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Violates the &lt;strong&gt;Single Responsibility Principle&lt;/strong&gt; (the class manages both its business logic and its own lifecycle/uniqueness)&lt;/li&gt;
&lt;li&gt;Creates &lt;strong&gt;tight coupling&lt;/strong&gt; across your codebase&lt;/li&gt;
&lt;li&gt;Can &lt;strong&gt;mask bad design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Makes &lt;strong&gt;unit testing difficult&lt;/strong&gt; due to shared global state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So before reaching for a Singleton, the most important question isn't just &lt;em&gt;"how do I make it thread-safe?"&lt;/em&gt;—it's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Does this component truly have to exist as a single unique instance, or am I using it just because it's handy?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Read the Full Deep Dive
&lt;/h2&gt;

&lt;p&gt;I just published the full, fully cited article over on &lt;strong&gt;Leo's Station&lt;/strong&gt;, where I walk through all of these pieces step by step, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A visual breakdown of how Singleton works vs. global variables&lt;/li&gt;
&lt;li&gt;Detailed walkthroughs and summary cheat-sheet of all &lt;strong&gt;5 Java approaches&lt;/strong&gt; (&lt;code&gt;Eager&lt;/code&gt;, &lt;code&gt;synchronized&lt;/code&gt;, &lt;code&gt;Double-checked locking&lt;/code&gt;, &lt;code&gt;Holder idiom&lt;/code&gt;, and &lt;code&gt;Enum&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;How &lt;strong&gt;Reflection&lt;/strong&gt; and &lt;strong&gt;Serialization (&lt;code&gt;readResolve()&lt;/code&gt;)&lt;/strong&gt; can break a Singleton's uniqueness&lt;/li&gt;
&lt;li&gt;Where the &lt;strong&gt;standard Java library&lt;/strong&gt; itself uses Singletons (&lt;code&gt;Runtime.getRuntime()&lt;/code&gt;, &lt;code&gt;Desktop.getDesktop()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A clear guide on &lt;strong&gt;when to use Singleton&lt;/strong&gt; (loggers, config, caches, thread/DB pools) and &lt;strong&gt;when to think twice&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Read the full article here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.leostation.space/observatory/understanding-the-singleton-pattern-from-core-concept-to-thread-safe-java" rel="noopener noreferrer"&gt;&lt;strong&gt;Understanding the Singleton Pattern: From Core Concept to Thread-Safe Java — Leo's Station&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Let's discuss!
&lt;/h3&gt;

&lt;p&gt;When you need a single shared component in Java today, do you still write a Singleton (like the Holder idiom or an &lt;code&gt;enum&lt;/code&gt;), or do you rely entirely on Dependency Injection / IoC containers? Share your thoughts below!&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>architecture</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How NASA's Roman telescope maps the universe: one instrument, three surveys</title>
      <dc:creator>Leo</dc:creator>
      <pubDate>Tue, 13 Oct 2026 09:41:49 +0000</pubDate>
      <link>https://dev.to/leo_station/how-nasas-roman-telescope-maps-the-universe-one-instrument-three-surveys-5b69</link>
      <guid>https://dev.to/leo_station/how-nasas-roman-telescope-maps-the-universe-one-instrument-three-surveys-5b69</guid>
      <description>&lt;p&gt;Most space telescopes work like a spotlight: point at one target and study it closely. NASA's Nancy Grace Roman Space Telescope is built more like a &lt;strong&gt;surveyor's camera&lt;/strong&gt;. It launched on August 30, 2026, and NASA expects its first science images by early 2027.&lt;/p&gt;

&lt;p&gt;If you like systems that sample the world at different resolutions and rates, Roman is a fun design to read about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same mirror as Hubble, a much bigger window
&lt;/h2&gt;

&lt;p&gt;Roman's main mirror is 2.4 m across, the same as Hubble's. Its Wide Field Instrument takes images as sharp as Hubble's over a field of view at least 100 times larger (0.28 square degrees).&lt;/p&gt;

&lt;p&gt;Hubble shows one street corner in fine detail. Roman shows the whole neighborhood at the same detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Survey 1: a map with three zoom levels
&lt;/h2&gt;

&lt;p&gt;The High-Latitude Wide-Area Survey has three tiers, like a road atlas, a city map and a street view:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;What it is for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wide&lt;/td&gt;
&lt;td&gt;2,700 sq. degrees, one filter&lt;/td&gt;
&lt;td&gt;the "road atlas"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;2,400 sq. degrees, three filters, images and spectra&lt;/td&gt;
&lt;td&gt;the "city map"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deep&lt;/td&gt;
&lt;td&gt;19.2 sq. degrees, about 1.2 magnitudes deeper&lt;/td&gt;
&lt;td&gt;the "street view"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The goal is to study cosmic acceleration with weak gravitational lensing and the way galaxies cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Survey 2: the same sky, again and again
&lt;/h2&gt;

&lt;p&gt;The High-Latitude Time-Domain Survey revisits the same fields to catch things that change, mainly Type Ia supernovae, which are used to measure how the universe expanded. The northern and southern fields are each visited about every 5 days, and some filters repeat every 10 days. It is a time series, observed at a fixed cadence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Survey 3: planets from bent space
&lt;/h2&gt;

&lt;p&gt;The Galactic Bulge Time-Domain Survey watches the crowded centre of the Milky Way. It uses &lt;strong&gt;microlensing&lt;/strong&gt;: when a star passes in front of a more distant one, its gravity bends the light like a natural magnifying glass. NASA expects it to find more than a thousand wide-orbit planets, plus free-floating planets that orbit no star. In its high-cadence seasons it samples every 12 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  A test for finding Earth-like worlds
&lt;/h2&gt;

&lt;p&gt;Roman also carries a Coronagraph, a technology demonstration that blocks a star's glare so fainter things next to it can be seen. Its deformable mirrors have more than 1,600 actuators, each commanded to better than 62 picometers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we do not know yet
&lt;/h2&gt;

&lt;p&gt;NASA's recent updates do not say when the surveys will begin or how many supernovae it wany number you read elsewhere. My full article lists the sources, with a link for everyclaim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.leostation.space/observatory/nasas-roman-space-telescope-the-mission-to-map-the-universe" rel="noopener noreferrer"&gt;Read the full article on Leo's Station&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image credit: NASA.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>space</category>
      <category>astronomy</category>
      <category>science</category>
      <category>learning</category>
    </item>
    <item>
      <title>Microsoft started Project Silica to make a next-generation storage solution.</title>
      <dc:creator>Leo</dc:creator>
      <pubDate>Thu, 18 Jun 2026 13:50:25 +0000</pubDate>
      <link>https://dev.to/leo_station/microsoft-started-project-silica-to-make-a-next-generation-storage-solution-3lfd</link>
      <guid>https://dev.to/leo_station/microsoft-started-project-silica-to-make-a-next-generation-storage-solution-3lfd</guid>
      <description>&lt;p&gt;I think this is an interesting project and the future of storage. We wouldn't have to worry about how to maintain our data anymore, and it can be preserved there for thousands of years.&lt;/p&gt;

&lt;p&gt;My thoughts: &lt;a href="https://www.leostation.space/observatory/project-silica-the-next-generation-information-storage" rel="noopener noreferrer"&gt;https://www.leostation.space/observatory/project-silica-the-next-generation-information-storage&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
