<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tutorials for nyssr.net on sillysky.net</title>
    <link>https://sillysky.net/docs/tutorials-for-nyssr-net/</link>
    <description>Recent content in Tutorials for nyssr.net on sillysky.net</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 09 Dec 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sillysky.net/docs/tutorials-for-nyssr-net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to build a message</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-build-a-message/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-build-a-message/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToBuildAMessage.webp&#34; alt=&#34;Tutorial: How to build a&#xA;message&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cmessage/&#34;&gt;message&lt;/a&gt; consists of an &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cenvelope/&#34;&gt;envelope&lt;/a&gt; and a&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/crecord/&#34;&gt;record&lt;/a&gt;. The envelope contains data that controls the transport of&#xA;the message to its recipient, similar to a letter. The record is the payload&#xA;of the message. It consists of a map of keys and values. A key-value pair is&#xA;called a slot. In addition, the record has an &lt;a href=&#34;https://sillysky.net/docs/nyssr/ids-and-addresses/id/&#34;&gt;ID&lt;/a&gt;, also known as a&#xA;message ID.&lt;/p&gt;&#xA;&lt;p&gt;A cumbersome but working way of creating messages is to assemble them&#xA;manually. The problem remains that the recipient must know exactly how the&#xA;message is structured in order to access the content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to register a nano service</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-register-a-nano-service/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-register-a-nano-service/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToRegisterANanoService.webp&#34; alt=&#34;Tutorial: How to register a nano&#xA;service&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;registration-of-the-nano-service&#34;&gt;Registration of the nano service&lt;/h2&gt;&#xA;&lt;p&gt;Before you can use &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/&#34;&gt;nano services&lt;/a&gt;, they should be registered. This&#xA;can be done manually by the operator of the service, or automatically in a&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/services/iservicestarter/&#34;&gt;ServiceStarter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You should have read these tutorials beforehand:&lt;br&gt;&#xA;&lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/&#34;&gt;Package initialization&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-simple-target/&#34;&gt;How to start a simple target&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;registration-manually&#34;&gt;Registration manually&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/&#34;&gt;Nano services&lt;/a&gt; are always bound to a &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespace/&#34;&gt;namespace&lt;/a&gt;. In most&#xA;cases, this is the &lt;code&gt;SYSTEM&lt;/code&gt; namespace. So we need the &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/inanoserviceregistry/&#34;&gt;nano service registry&lt;/a&gt; of the namespace. Preferably we register the nano service in&#xA;the &lt;a href=&#34;https://sillysky.net/docs/nyssr/records/targetregistry/crecordstarttarget/&#34;&gt;StartTarget&lt;/a&gt; handler (see &lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-simple-target/&#34;&gt;How to start a simple target&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use the job engine for bulk tasks</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-use-the-job-engine/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-use-the-job-engine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToUseTheJobEngineForBulkTasks.webp&#34; alt=&#34;Tutorial: How to use the job engine for bulk&#xA;tasks&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The job machine is designed to run many jobs in parallel as fast as possible.&#xA;In this tutorial we want to calculate the MD hash values for each file in a&#xA;directory with many files.&lt;/p&gt;&#xA;&lt;p&gt;The example is a bit longer because many tasks are presented here:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The definition of dependencies&lt;/li&gt;&#xA;&lt;li&gt;The service starter&lt;/li&gt;&#xA;&lt;li&gt;The operation of a nano service&lt;/li&gt;&#xA;&lt;li&gt;The outsourcing of the request to a working target, in order that parallel requests can be processed&lt;/li&gt;&#xA;&lt;li&gt;The initialization of the job machine&lt;/li&gt;&#xA;&lt;li&gt;The job itself&lt;/li&gt;&#xA;&lt;li&gt;The orderly termination of the machine in case of success and in case of termination&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-service-target&#34;&gt;The service target&lt;/h2&gt;&#xA;&lt;p&gt;To make the exercise more understandable, we register a nanoservice. Creating&#xA;hashes of the files in a directory is thus possible by sending a&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/&#34;&gt;message&lt;/a&gt; to this &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/&#34;&gt;nanoservice&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to send a message</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-send-a-message/</link>
      <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-send-a-message/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToSendAMessage.webp&#34; alt=&#34;Tutorial: How to send a&#xA;message&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cmessage/&#34;&gt;message&lt;/a&gt; consists of an &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cenvelope/&#34;&gt;envelope&lt;/a&gt; and a&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/crecord/&#34;&gt;record&lt;/a&gt;. The envelope contains data that controls the transport of&#xA;the message to its recipient, similar to a letter. The record is the payload&#xA;of the message. It consists of a map of keys and values. A key-value pair is&#xA;called a slot. In addition, the record has an &lt;a href=&#34;https://sillysky.net/docs/nyssr/ids-and-addresses/id/&#34;&gt;ID&lt;/a&gt;, also known as a&#xA;message ID.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sending-a-message-to-a-known-receiver&#34;&gt;Sending a message to a known receiver&lt;/h2&gt;&#xA;&lt;p&gt;A message can be sent directly to a receiver if its &lt;a href=&#34;https://sillysky.net/docs/nyssr/ids-and-addresses/ctargetaddress/&#34;&gt;target address&lt;/a&gt;&#xA;is known. It is stored in the envelope, as is the sender&#39;s address.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How do I edit the settings in the Java Preferences?</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-do-i-edit-the-settings-in-the-java-preferences/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-do-i-edit-the-settings-in-the-java-preferences/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToEditJavaPreferences.webp&#34; alt=&#34;Tutorial: How to edit Java&#xA;Preferences&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The use of Java Preferences does not seem to be very common anymore. Thereby&#xA;this is a very useful library, which is also included in the runtime with&#xA;Java. Unfortunately, the tools around this good framework are correspondingly&#xA;old.&lt;/p&gt;&#xA;&lt;p&gt;An editor intended for non-commercial use only (GPL) is the javaprefs editor&#xA;(prefs-0.8.jar) by Boris Gontar. I have linked the file for download here,&#xA;since I can no longer find it on the Internet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How new software is installed on a node remotely</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-new-software-is-installed-on-a-node-remotely/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-new-software-is-installed-on-a-node-remotely/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToInstallSoftware.webp&#34; alt=&#34;Tutorial: How to install software&#xA;remotely&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The software of a node can be updated semi-automatically.&lt;/p&gt;&#xA;&lt;p&gt;A node consists of a kernel and the plugins that this kernel loads.&#xA;Additionally, there is third-party software in the form of libraries. All&#xA;components are located in two directories. The &lt;code&gt;lib&lt;/code&gt; directory contains the&#xA;kernel, the API JARs of the plugins, and the third-party software. The&#xA;classpath contains only one entry, namely the &lt;code&gt;lib&lt;/code&gt; directory. The &lt;code&gt;plugins&lt;/code&gt;&#xA;directory contains the plugin JAR files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How nodes are connected to each other</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-nodes-are-connected-to-each-other/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-nodes-are-connected-to-each-other/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowNodesAreConnectedToEachOther.webp&#34; alt=&#34;Tutorial: How Nodes Are Connected To Each&#xA;Other&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Nodes are connected to each other through TCP channels. Through the channels,&#xA;the nodes communicate with each other. These connections are open all the&#xA;time.&lt;/p&gt;&#xA;&lt;p&gt;To create the TCP channels, nodes must act as TCP servers or TCP clients. Many&#xA;nodes have both functions as well. For a node to start the server or client,&#xA;an entry in the &lt;a href=&#34;https://sillysky.net/docs/nyssr/configuration/configuration-nodes-and-keys/#anchor_tcp_server&#34;&gt;configuration&lt;/a&gt; is sufficient.&lt;/p&gt;&#xA;&lt;p&gt;Here is a sample configuration file for a TCP server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to add an observer to a nano service</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-add-an-observer-to-a-nano-service/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-add-an-observer-to-a-nano-service/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToAddAnObserverToANanoService.webp&#34; alt=&#34;Tutorial: How to add an observer to a nano&#xA;service&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Registering observers to &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/&#34;&gt;nano services&lt;/a&gt; is quite common.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisite-for-the-tutorial&#34;&gt;Prerequisite for the tutorial&lt;/h2&gt;&#xA;&lt;p&gt;You should have read these tutorials beforehand:&lt;br&gt;&#xA;&lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/&#34;&gt;Package initialization&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-simple-target/&#34;&gt;How to start a simple target&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-short-way&#34;&gt;The short way&lt;/h2&gt;&#xA;&lt;p&gt;To make registration as easy as possible, another service has been created:&#xA;the &lt;a href=&#34;https://sillysky.net/docs/nyssr/other-interfaces/irecordhelper/&#34;&gt;RecordHelper&lt;/a&gt;. Enter the dependency in the&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/services/iservicestarter/&#34;&gt;ServiceStarter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;public void getDependencies(@NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/services/iservicedependencylist/&#34;&gt;IServiceDependencyList&lt;/a&gt; aDependencyList)&#xA;{&#xA;    aDependencyList.add(&lt;a href=&#34;https://sillysky.net/docs/nyssr/other-interfaces/irecordhelper/&#34;&gt;IRecordHelper&lt;/a&gt;.class);&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In the &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/targets/itarget/&#34;&gt;target&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;private boolean asyncStartTarget(@NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cenvelope/&#34;&gt;CEnvelope&lt;/a&gt; aEnvelope,&#xA;                                 @NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/crecord/&#34;&gt;CRecord&lt;/a&gt; aRecord) throws &lt;a href=&#34;https://sillysky.net/docs/nyssr/other-interfaces/cexception/&#34;&gt;CException&lt;/a&gt;&#xA;{&#xA;    mDependencies.getRecordHelper()&#xA;                 .addObserver(&lt;a href=&#34;https://sillysky.net/docs/nyssr/records/records-belonging-to-the-network/crecordnotifyremotenodeadded/&#34;&gt;CRecordNotifyRemoteNodeAdded&lt;/a&gt;.class,&#xA;                              this,&#xA;                              true);&#xA;    aEnvelope.setResultSuccess();&#xA;    return true;&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;the-long-way&#34;&gt;The long way&lt;/h2&gt;&#xA;&lt;p&gt;Add the nano service registry as a dependency to the &lt;a href=&#34;https://sillysky.net/docs/nyssr/services/iservicestarter/&#34;&gt;service starter&lt;/a&gt;. As a filter, we need to enter the namespace where the desired&#xA;nano service is registered.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to catch a message</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-catch-a-message/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-catch-a-message/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToCatchAMessage.webp&#34; alt=&#34;Tutorial: How to catch a&#xA;message&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cmessage/&#34;&gt;message&lt;/a&gt; sent to a target can be handled by the &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/targets/ctarget/&#34;&gt;target&lt;/a&gt;&#xA;in a &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/targets/ctarget/imessagehandler/&#34;&gt;message handler&lt;/a&gt;. The message handler must be registered for&#xA;this—preferably in the constructor of the target.&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;CMyTarget()&#xA;{&#xA;    addMessageHandler(CRecordMyMessage.ID,&#xA;                      this::asyncMyMessage);&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Here the message &lt;code&gt;CRecordMyMessage&lt;/code&gt; is handled by the handler&#xA;&lt;code&gt;asyncMyMessage&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;private boolean asyncMyMessage(@NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cenvelope/&#34;&gt;CEnvelope&lt;/a&gt; aEnvelope,&#xA;                               @NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/crecord/&#34;&gt;CRecord&lt;/a&gt; aRecord)&#xA;{&#xA;    if (aEnvelope.isAnswer())&#xA;    {&#xA;        // do something...&#xA;&#xA;        return false;&#xA;    }&#xA;    else&#xA;    {&#xA;        // do something...&#xA;&#xA;        aEnvelope.setResultSuccess();&#xA;        return true;&#xA;    }&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Requests are processed as well as responses in a single handler. It is safer&#xA;to always check the message for the response flag, even if a request or&#xA;response is not expected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create a microservice</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-create-a-microservice/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-create-a-microservice/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToCreateAMicroService.webp&#34; alt=&#34;Tutorial: How to create a micro&#xA;service&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Microservices in nyssr.net are usually smaller than the variants in the&#xA;restful ecosystem. The reason for this is that very many microservices can be&#xA;run by a single node.&lt;/p&gt;&#xA;&lt;p&gt;Microservices can also communicate in all directions, a consequence of the way&#xA;in which messaging is used. They can also be factories to create instances of&#xA;services that communicate exclusively with an owner.&lt;/p&gt;&#xA;&lt;p&gt;Therefore, a microservice always consists of at least one target so that it&#xA;can communicate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create an application</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-create-an-application/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-create-an-application/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToCreateAnApplication.webp&#34; alt=&#34;Tutorial: How to create an&#xA;application&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the nyssr.net context, there are usually many more applications than in the&#xA;normal server environment. This is because the applications and microservices&#xA;are much smaller than in the Restful environment, due to the fact that a&#xA;single server (called node in our context) can run hundreds or thousands of&#xA;modules. To us, applications are always factory microservices that create and&#xA;launch the application instances.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to import files into nyssr.net</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-import-files-into-nyssr.net/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-import-files-into-nyssr.net/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToImportFiles.webp&#34; alt=&#34;Tutorial: How to import Files&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;To work with files in nyssr.net, two plugins are required.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://sillysky.net/docs/nyssr/plugins/supplied-plugins/plugin-jars/ny_localfilestoreplugin/&#34;&gt;NY_FileRegistryPlugIn&lt;/a&gt; plugin runs as a singleton on a central node,&#xA;meaning it is loaded on only one node. It creates the &lt;a href=&#34;https://sillysky.net/docs/nyssr/plugins/supplied-plugins/plugin-jars/ny_localfilestoreplugin/message-api-of-the-fileregistry/&#34;&gt;The File Registry API&lt;/a&gt;&#xA;microservice, which is used internally to locate files within nyssr.net.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://sillysky.net/docs/nyssr/plugins/supplied-plugins/plugin-jars/ny_filestoreplugin/&#34;&gt;NY_FileStorePlugIn&lt;/a&gt; plugin is loaded on every node that provides or&#xA;requires files. It manages files in its working directory, which is usually&#xA;located in the storage directory (&lt;code&gt;storage/FileStore/indexed/&lt;/code&gt;). The files are&#xA;stored in a decentralized manner, so different or identical files may be&#xA;available in the various FileStores.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to offer a nano service</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-offer-a-nanoservice/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-offer-a-nanoservice/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToOfferANanoService.webp&#34; alt=&#34;Tutorial: How to offer a nano&#xA;service&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/nanoservices/&#34;&gt;Nano services&lt;/a&gt; are needed for three purposes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;h3 id=&#34;offering-notifications&#34;&gt;Offering notifications.&lt;/h3&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For a nano service, interested targets can register an observer. The&#xA;notification trigger sends messages to the nano service, of which each&#xA;observer receives a copy.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;h3 id=&#34;operation-of-a-tiny-services&#34;&gt;Operation of a tiny services&lt;/h3&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The owner registers a nano service and registers himself as an observer.&#xA;Clients of the service send a message to the nano service, which is forwarded&#xA;to the owner. Advantage: The client does not need the address of the providing&#xA;service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to start a node</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-node/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-node/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToStartANode.webp&#34; alt=&#34;Tutorial: How to start a&#xA;Node&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A node requires some information without which it cannot be executed. Besides&#xA;the classpath for the kernel JAR file and the libraries this includes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;node.id&lt;/code&gt; (the node ID)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;config.dir&lt;/code&gt; (directory for configuration files)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;plugin.dir&lt;/code&gt; (directory for plugins)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;storage.dir&lt;/code&gt; (directory for storage)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;segment.id&lt;/code&gt; (the segment ID)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;type.of.node&lt;/code&gt; (the type of the node)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;license&lt;/code&gt; (the license code)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All data except the node ID can be taken from the Java preferences, provided&#xA;that the node has already been executed correctly. However, for a very first&#xA;launch, we need to provide this data to the Node in a different way. One way&#xA;is to use configuration files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to start a simple target</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-simple-target/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/how-to-start-a-simple-target/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialHowToStartATarget.webp&#34; alt=&#34;Tutorial: How to start a simple&#xA;target&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;short-variant&#34;&gt;Short variant&lt;/h2&gt;&#xA;&lt;p&gt;A simple target is a class derived from &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/targets/ctarget/&#34;&gt;CTarget&lt;/a&gt;. This target must&#xA;be registered to the &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/targets/itargetregistry/&#34;&gt;target registry&lt;/a&gt; of a &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespace/&#34;&gt;namespace&lt;/a&gt;.&#xA;There it receives its &lt;a href=&#34;https://sillysky.net/docs/nyssr/ids-and-addresses/ctargetaddress/&#34;&gt;target address&lt;/a&gt; and can receive&#xA;&lt;a href=&#34;https://sillysky.net/docs/nyssr/messages/cmessage/&#34;&gt;messages&lt;/a&gt; from now on.&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;final &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespace/&#34;&gt;INamespace&lt;/a&gt; namespace = mDependencies.getNamespaceRegistry()&#xA;                                          .getNamespace(&lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/cwellknownnid/&#34;&gt;CWellKnownNID&lt;/a&gt;.SYSTEM);&#xA;if (namespace != null)&#xA;{&#xA;    namespace.getTargetRegistry()&#xA;             .registerTarget(this);&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;In order to use the &lt;code&gt;mDependencies&lt;/code&gt; interface, as always, a few preparations&#xA;must be made. For this we refer to the &lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/&#34;&gt;Tutorial on initializing a Java package&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Package initialization</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialJavaPackageInitialization.webp&#34; alt=&#34;Tutorial: Java package&#xA;initialization&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Packages are used in Java to group all classes belonging to a module in one&#xA;place. Only the interface to the module should be public, all other classes&#xA;and methods remain private.&lt;/p&gt;&#xA;&lt;p&gt;In many cases, a module has dependencies on other modules or services. Now you&#xA;could check before each use if all dependencies are fulfilled, i.e. the&#xA;corresponding modules are available. However, this is a laborious approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The use of plugins</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/usage-plugins/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/usage-plugins/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialTheUseOfPlugins.webp&#34; alt=&#34;Tutorial: The use of&#xA;PlugIns&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;We decided to outsource services to plugins. We can of course load normal JARS&#xA;at startup, but plugins have some advantages. So the application of the node&#xA;is always the same - we load all node-specific functions via plugins. This&#xA;comes into play in containers at the latest when plugins are loaded via a&#xA;shared volume. One image, many nodes, and the behavior of the nodes is&#xA;controlled by a list in the configuration. It couldn&#39;t be simpler. Well, we&#xA;still have a few ideas, wait and see!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The use of timer messages</title>
      <link>https://sillysky.net/docs/tutorials-for-nyssr-net/the-use-of-timers/</link>
      <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sillysky.net/docs/tutorials-for-nyssr-net/the-use-of-timers/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sillysky.net/images/LigneClaire/doc/TutorialTheUseOfTimerMessages.webp&#34; alt=&#34;Tutorial: The use of timer&#xA;messages&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Timers&lt;/strong&gt; in nyssr.net are messages that are sent to their target after a&#xA;certain time. They can be sent repeatedly, and they can transport user data.&lt;/p&gt;&#xA;&lt;p&gt;As always, we assume that &lt;a href=&#34;https://sillysky.net/docs/tutorials-for-nyssr-net/package-initialization/&#34;&gt;the package has been initialized&lt;/a&gt;. Here&#xA;are the dependencies we have:&lt;/p&gt;&#xA;&lt;pre class=&#34;ss-javacode&#34;&gt;&lt;code class=&#34;language-java&#34;&gt;@Override&#xA;public void getDependencies(@NotNull final &lt;a href=&#34;https://sillysky.net/docs/nyssr/services/iservicedependencylist/&#34;&gt;IServiceDependencyList&lt;/a&gt; aDependencyList)&#xA;{&#xA;    aDependencyList.add(&lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespaceregistry/&#34;&gt;INamespaceRegistry&lt;/a&gt;.class);&#xA;    aDependencyList.add(&lt;a href=&#34;https://sillysky.net/docs/nyssr/timer/itimermanager/&#34;&gt;ITimerManager&lt;/a&gt;.class);&#xA;}&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;We need the &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespaceregistry/&#34;&gt;namespace registry&lt;/a&gt; to fetch a &lt;a href=&#34;https://sillysky.net/docs/nyssr/namespaces/inamespace/&#34;&gt;namespace&lt;/a&gt; in&#xA;which we can register the target. For the timer we need the &lt;a href=&#34;https://sillysky.net/docs/nyssr/timer/itimermanager/&#34;&gt;Timer Manager&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
