<?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 -- gohugo.io</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>A message consists of an envelope and a record. The envelope contains data that controls the transport of the message to its recipient, similar to a letter. The record is the payload of the message. It consists of a map of keys and values. A key-value pair is called a slot. In addition, the record has an ID, also known as a message ID.&#xA;A cumbersome but working way of creating messages is to assemble them manually.</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>Registration of the nano service Before you can use nano services, they should be registered. This can be done manually by the operator of the service, or automatically in a ServiceStarter.&#xA;You should have read these tutorials beforehand:&#xA;Package initialization&#xA;How to start a simple target&#xA;Registration manually Nano services are always bound to a namespace. In most cases, this is the SYSTEM namespace. So we need the nano service registry of the namespace.</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>The job machine is designed to run many jobs in parallel as fast as possible. In this tutorial we want to calculate the MD hash values for each file in a directory with many files.&#xA;The example is a bit longer because many tasks are presented here:&#xA;The definition of dependencies The service starter The operation of a nano service The outsourcing of the request to a working target, in order that parallel requests can be processed The initialization of the job machine The job itself The orderly termination of the machine in case of success and in case of termination The service target To make the exercise more understandable, we register a nanoservice.</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>A message consists of an envelope and a record. The envelope contains data that controls the transport of the message to its recipient, similar to a letter. The record is the payload of the message. It consists of a map of keys and values. A key-value pair is called a slot. In addition, the record has an ID, also known as a message ID.&#xA;Sending a message to a known receiver A message can be sent directly to a receiver if its target address is known.</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>The use of Java Preferences does not seem to be very common anymore. Thereby this is a very useful library, which is also included in the runtime with Java. Unfortunately, the tools around this good framework are correspondingly old.&#xA;An editor intended for non-commercial use only (GPL) is the javaprefs editor (prefs-0.8.jar) by Boris Gontar. I have linked the file for download here, since I can no longer find it on the Internet.</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>The software of a node can be updated semi-automatically.&#xA;A node consists of a kernel and the plugins that this kernel loads. Additionally, there is third-party software in the form of libraries. All components are located in two directories. The lib directory contains the kernel, the API JARs of the plugins, and the third-party software. The classpath contains only one entry, namely the lib directory. The plugins directory contains the plugin JAR files.</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>Nodes are connected to each other through TCP channels. Through the channels, the nodes communicate with each other. These connections are open all the time.&#xA;To create the TCP channels, nodes must act as TCP servers or TCP clients. Many nodes have both functions as well. For a node to start the server or client, an entry in the configuration is sufficient.&#xA;Here is a sample configuration file for a TCP server.</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>Registering observers to nano services is quite common.&#xA;Prerequisite for the tutorial You should have read these tutorials beforehand:&#xA;Package initialization&#xA;How to start a simple target&#xA;The short way To make registration as easy as possible, another service has been created: the RecordHelper. Enter the dependency in the ServiceStarter.&#xA;public void getDependencies(@NotNull final IServiceDependencyList aDependencyList) { aDependencyList.add(IRecordHelper.class); } In the target:&#xA;private boolean asyncStartTarget(@NotNull final CEnvelope aEnvelope, @NotNull final CRecord aRecord) throws CException { mDependencies.</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>A message sent to a target can be handled by the target in a message handler. The message handler must be registered for this—preferably in the constructor of the target.&#xA;CMyTarget() { addMessageHandler(CRecordMyMessage.ID, this::asyncMyMessage); } Here the message CRecordMyMessage is handled by the handler asyncMyMessage.&#xA;private boolean asyncMyMessage(@NotNull final CEnvelope aEnvelope, @NotNull final CRecord aRecord) { if (aEnvelope.isAnswer()) { // do something... return false; } else { // do something.</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>Microservices in nyssr.net are usually smaller than the variants in the restful ecosystem. The reason for this is that very many microservices can be run by a single node.&#xA;Microservices can also communicate in all directions, a consequence of the way in which messaging is used. They can also be factories to create instances of services that communicate exclusively with an owner.&#xA;Therefore, a microservice always consists of at least one target so that it can communicate.</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>In the nyssr.net context, there are usually many more applications than in the normal server environment. This is because the applications and microservices are much smaller than in the Restful environment, due to the fact that a single server (called node in our context) can run hundreds or thousands of modules. To us, applications are always factory microservices that create and launch the application instances.&#xA;An application can consist of a single dialog, or very many.</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>Nano services are needed for three purposes:&#xA;Offering notifications. For a nano service, interested targets can register an observer. The notification trigger sends messages to the nano service, of which each observer receives a copy.&#xA;Operation of a tiny services The owner registers a nano service and registers himself as an observer. Clients of the service send a message to the nano service, which is forwarded to the owner. Advantage: The client does not need the address of the providing service.</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>A node requires some information without which it cannot be executed. Besides the classpath for the kernel JAR file and the libraries this includes:&#xA;node.id (the node ID) config.dir (directory for configuration files) plugin.dir (directory for plugins) storage.dir (directory for storage) segment.id (the segment ID) type.of.node (the type of the node) license (the license code) All data except the node ID can be taken from the Java preferences, provided that the node has already been executed correctly.</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>Short variant A simple target is a class derived from CTarget. This target must be registered to the target registry of a namespace. There it receives its target address and can receive messages from now on.&#xA;final INamespace namespace = mDependencies.getNamespaceRegistry() .getNamespace(CWellKnownNID.SYSTEM); if (namespace != null) { namespace.getTargetRegistry() .registerTarget(this); } In order to use the mDependencies interface, as always, a few preparations must be made. For this we refer to the Tutorial on initializing a Java package.</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>Packages are used in Java to group all classes belonging to a module in one place. Only the interface to the module should be public, all other classes and methods remain private.&#xA;In many cases, a module has dependencies on other modules or services. Now you could check before each use if all dependencies are fulfilled, i.e. the corresponding modules are available. However, this is a laborious approach.&#xA;Automatic dependency injection, such as in Spring Boot, would be a good start.</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>We decided to outsource services to plugins. We can of course load normal JARS at startup, but plugins have some advantages. So the application of the node is always the same - we load all node-specific functions via plugins. This comes into play in containers at the latest when plugins are loaded via a shared volume. One image, many nodes, and the behavior of the nodes is controlled by a list in the configuration.</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>Timers in nyssr.net are messages that are sent to their target after a certain time. They can be sent repeatedly, and they can transport user data.&#xA;As always, we assume that the package has been initialized. Here are the dependencies we have:&#xA;@Override public void getDependencies(@NotNull final IServiceDependencyList aDependencyList) { aDependencyList.add(INamespaceRegistry.class); aDependencyList.add(ITimerManager.class); } We need the namespace registry to fetch a namespace in which we can register the target. For the timer we need the Timer Manager.</description>
    </item>
  </channel>
</rss>
