<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>All articles on Felix Seifert</title>
		<link>https://felix-seifert.com/blog/</link>
		<description>Recent content in All articles on Felix Seifert</description>
		<generator>Hugo</generator>
		<language>en-gb</language>
		
		
		
			<copyright>Felix Seifert</copyright>
		
		
			<lastBuildDate>Sun, 18 Apr 2021 15:49:22 +0000</lastBuildDate>
		
			<atom:link href="https://felix-seifert.com/blog/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Serverless Function as a Service on Heroku</title>
				<link>https://felix-seifert.com/blog/serverless-function-as-a-service-on-heroku/</link>
				<pubDate>Sun, 18 Apr 2021 15:49:22 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/serverless-function-as-a-service-on-heroku/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/serverless-on-heroku_hu_a0212aab25b0f351.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/serverless-on-heroku_hu_a0212aab25b0f351.webp 512w, https://felix-seifert.com/images/posts/serverless-on-heroku_hu_a0212aab25b0f351.webp 512w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;512&#34; height=&#34;512&#34;&#xA;       alt=&#34;Serverless Function as a Service on Heroku&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Deploying applications as Function as a Service (FaaS) in a serverless fashion results in creating a service running on a pay-per-use basis: The server with your function is only started when requested, can be started several times simultaneously and does not run when nobody needs it. This means that you do not have to pay for a fixed amount of bandwidth and are billled only for your needed computation power. Furthermore, FaaS can be scaled easily to serve a varying number of requests.&#xA;&lt;a href=&#34;https://www.heroku.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Heroku&lt;/a&gt; offers the opportunity to run smaller web projects for free for a limited number of hours per month. Serveless FaaS would be an ideal approach to use this free time more effectively and to allow easy scaling but unfortunately, Heroku does not really offer any serverless functions. Heroku offers &lt;a href=&#34;https://devcenter.heroku.com/articles/one-off-dynos&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;one-off dynos&lt;/a&gt; which spin up a container for an application if it is needed. They can only be addressed from within Heroku and cannot receive any HTTP traffic.&#xA;In our &lt;a href=&#34;https://github.com/felix-seifert/serverless-on-heroku&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tutorial on GitHub&lt;/a&gt;, &lt;a href=&#34;https://github.com/Ackuq&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Axel Pettersson&lt;/a&gt; and I describe a way on how to use these one-off dynos to create a serverless FaaS: We provide environment variables as the function parameters and read return values from the dyno’s logs. You do not need any specific programming framework for such a function; you can just create a simple script. Consult our &lt;a href=&#34;https://github.com/felix-seifert/serverless-on-heroku&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tutorial on GitHub&lt;/a&gt; or &lt;a href=&#34;https://felix-seifert.github.io/serverless-on-heroku/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub pages&lt;/a&gt; to create FaaS for free on Heroku and interact with us directly via the &lt;a href=&#34;https://github.com/felix-seifert/serverless-on-heroku/issues&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;‘Issues’ section&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Success at AI Hackathon With Traap</title>
				<link>https://felix-seifert.com/blog/success-at-ai-hackathon-with-java-application-traap/</link>
				<pubDate>Sun, 11 Oct 2020 17:53:29 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/success-at-ai-hackathon-with-java-application-traap/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/kthais-logo_hu_7f29636cd4a20715.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/kthais-logo_hu_38fd8c09f24c51f0.webp 640w, https://felix-seifert.com/images/posts/kthais-logo_hu_7f29636cd4a20715.webp 1034w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1034&#34; height=&#34;322&#34;&#xA;       alt=&#34;Logo of the AI Society at KTH Royal Institute of Technology&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&lt;figcaption&gt;Logo of KTH AI Society&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Recently, I attended a hackathon of the &lt;a href=&#34;https://kthais.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AI Society at KTH Royal Institute of Technology&lt;/a&gt; in Stockholm, Sweden. The boundaries of the topic choice were quite loosely defined and the organisers encouraged us to use artificial intelligence (AI). My eventual development can be found on &lt;a href=&#34;https://devpost.com/software/traap&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DevPost&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hackathon-process&#34;&gt;Hackathon Process&lt;/h2&gt;&#xA;&lt;p&gt;My team consisted out of two other developers and me. All of us had never developed any AI technology before. After an intensive brainstorming, we decided on a use case of analysing travel data with some machine learning algorithms. After several setbacks, including a crashed operating system which took up a significant amount of the hackathon time to work around, I decided to tackle our use case from another perspective. I programmed the whole night and came up with &lt;a href=&#34;https://devpost.com/software/traap&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Traap - the TRAvel mAP&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The MECE Principle for Software Engineers</title>
				<link>https://felix-seifert.com/blog/structure-with-mece-principle/</link>
				<pubDate>Mon, 05 Oct 2020 21:18:22 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/structure-with-mece-principle/</guid>
				<description>&lt;p&gt;The MECE principle is a principle used to separate a set of items into different subsets. These subsets are both mutually exclusive and collectively exhaustive. In this article, I will explain what this means and how it can be useful for programming.&#xA;MECE stands for “mutually exclusive” (ME) and “collectively exhaustive” (CE). This principle originates from the huge management consultancy &lt;a href=&#34;https://www.mckinsey.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;McKinsey &amp;amp; Company&lt;/a&gt;. The MECE principle can be used not only in the management sector but also in nearly every other sector where a clear and accurate separation is needed. Firstly, we will have a look at what the two parts of the MECE principle mean and how we can achieve them. Then, we will explore an example that shows how a set of items is accurately separated. Eventually, I will give some ideas how the MECE principle can be used in programming.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Queue vs. Topic in Asynchronous Messaging</title>
				<link>https://felix-seifert.com/blog/asynchronous-communication-difference-between-queue-topic/</link>
				<pubDate>Mon, 13 Apr 2020 06:07:18 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/asynchronous-communication-difference-between-queue-topic/</guid>
				<description>&lt;p&gt;In his book &lt;a href=&#34;http://shop.oreilly.com/product/0636920023777.do&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cloud Architecture Patterns&lt;/a&gt; (O&amp;rsquo;Reilly Media, 2010), Bill Wilder described important characteristics for cloud-native app development. Amongst others, cloud-native apps feature an asynchronous communication. Asynchronous communication means that messages are either published on a topic or send to a queue. This enables reactive programming through famous message brokers like &lt;a href=&#34;https://www.rabbitmq.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RabbitMQ&lt;/a&gt; or &lt;a href=&#34;https://kafka.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Apache Kafka&lt;/a&gt;. But what are &amp;lsquo;queue&amp;rsquo; and &amp;rsquo;topic&amp;rsquo;? This article describes the differences between asynchronous messaging via a topic or a queue.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Internship as a DevOps Engineer in Tokyo</title>
				<link>https://felix-seifert.com/blog/internship-as-a-devops-engineer-in-tokyo/</link>
				<pubDate>Mon, 30 Sep 2019 14:40:21 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/internship-as-a-devops-engineer-in-tokyo/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/monitors-for-coding_hu_692e570557326ba1.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/monitors-for-coding_hu_14e86be5bffeca10.webp 640w, https://felix-seifert.com/images/posts/monitors-for-coding_hu_692e570557326ba1.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;333&#34;&#xA;       alt=&#34;Internship in Tokyo, Japan as a DevOps Engineer&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In mid-June 2019, I started an internship with Bosch in Tokyo, Japan. Till mid-November, I am going to work as a DevOps Engineer taking care of the whole software development cycle from planning, analysis and design through to implementation, deployment and maintenance.&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;Usually, internships in the field of software engineering are within a team consisting of at least one other developer. However, as I am interning in the Automotive Aftermarket department which mainly deals with sales, marketing and logistics, I am there as the only engineer. Fortunately, during my last internship for Bosch in Singapore, I picked up lots of skills needed not only for software development but also for organising your project within the Bosch group, so I had some ideas about the security restrictions and the proxy issues.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Limit and Offset in Spring Data JPA</title>
				<link>https://felix-seifert.com/blog/limit-and-offset-spring-data-jpa-repositories/</link>
				<pubDate>Sun, 14 Jul 2019 13:29:21 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/limit-and-offset-spring-data-jpa-repositories/</guid>
				<description>&lt;p&gt;Limit and offset are two properties often requested for requesting data out of a database. Implementing them with a SQL query is also not that difficult. In this article I will describe how to achieve this with the magic of Spring Data JPA repositories (without SQL).&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-entity&#34;&gt;The Entity&lt;/h2&gt;&#xA;&lt;p&gt;First, we need a class describing the entities which should be retrieved from the database. We annotate the class with &lt;code&gt;@Entity&lt;/code&gt; to mark it as a representative of a database table. The class describes how the table in the database should look like. Each object of this class would be stored as one row in this table (in a relational database).&lt;/p&gt;</description>
			</item>
			<item>
				<title>DX Award - Adapting the System to the User</title>
				<link>https://felix-seifert.com/blog/vernetzx-dx-award/</link>
				<pubDate>Wed, 27 Feb 2019 17:10:37 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/vernetzx-dx-award/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/veernetzx-won-dx-award_1_hu_60ea529b15d215e9.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/veernetzx-won-dx-award_1_hu_d1a3975deb7f4a77.webp 640w, https://felix-seifert.com/images/posts/veernetzx-won-dx-award_1_hu_60ea529b15d215e9.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;459&#34;&#xA;       alt=&#34;The team of VERnetzX won the DX Award with its voice-operated AAL system based on Amazon Alexa.&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://felix-seifert.com/blog/vernetzx-voice-operated-social-network/&#34;&gt;VERnetzX&lt;/a&gt; is an Ambient Assisted Living (AAL) System based on Amazon Alexa. On 8 November 2018, two important events for the project VERnetzX happened: On one hand, &lt;a href=&#34;https://www.linkedin.com/in/jonas-pfrang-05684012a/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jonas Pfrang&lt;/a&gt; and I &lt;a href=&#34;https://felix-seifert.com/blog/vernetzx-supports-un-sustainable-development-goal-3/&#34;&gt;presented the project&lt;/a&gt; at SAP&amp;rsquo;s event Next-Gen. On the other hand, the project team was awarded the DX Award by the &lt;a href=&#34;http://dx-network.de/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Digital Experience Network&lt;/a&gt; and the &lt;a href=&#34;https://www.iism.kit.edu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Institute of Information Systems and Marketing&lt;/a&gt;, Karlsruhe Institute of Technology.&#xA;The award honours prototypes and projects at the intersection of computer science, economy and design. Not only is the user interface (UI) relevant but the whole user experience (UX) is also considered. The award ceremony happened at the opening of the &lt;a href=&#34;https://www.wud-karlsruhe.de/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;World Usability Day&lt;/a&gt; in Karlsruhe.&lt;/p&gt;</description>
			</item>
			<item>
				<title>autobahn-spring: Autobahn|Java and Spring</title>
				<link>https://felix-seifert.com/blog/integrate-autobahnjava-and-spring/</link>
				<pubDate>Sun, 27 Jan 2019 16:24:36 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/integrate-autobahnjava-and-spring/</guid>
				<description>&lt;p&gt;Are you an enthusiastic user of Spring and do you also want to benefit from the &lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;Web Application Messaging Protocol&lt;/a&gt;? Even though &lt;a href=&#34;https://felix-seifert.com/blog/wamp2spring-router-topics-procedures/&#34;&gt;wamp2spring&lt;/a&gt; mainly serves as a router, Spring users often want to create several microservices communicating with each other. A comfortable solution is using the WAMP library &lt;a href=&#34;https://felix-seifert.com/blog/autobahnjava-wamp-library-crossbar/&#34;&gt;Autobahn|Java&lt;/a&gt;. This article will describe how to combine Spring and Autobahn|Java.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-a-controller-for-wamp&#34;&gt;Create a Controller for WAMP&lt;/h2&gt;&#xA;&lt;p&gt;Autobahn|Java could be implemented as a controller. Therefore, the bean of Spring should be created with the annotation &lt;code&gt;@Controller&lt;/code&gt;. &lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;Topics and procedures&lt;/a&gt; could be handled exactly as described in the article about &lt;a href=&#34;https://felix-seifert.com/blog/autobahnjava-wamp-library-crossbar/&#34;&gt;Autobahn|Java&lt;/a&gt;. The methods implementing this should be registered as listeners. This could be achieved in the constructor of the controller.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JUnit 5: Lists in Parameterized Tests</title>
				<link>https://felix-seifert.com/blog/junit-5-parameterized-tests-using-lists-as-argument/</link>
				<pubDate>Sat, 29 Dec 2018 11:37:09 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/junit-5-parameterized-tests-using-lists-as-argument/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://junit.org/junit5/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;JUnit 5&lt;/a&gt; is one of the most common Java frameworks for unit tests. Version 5 offers parameterized test and is the new major release that replaces the older version 4 which was already released 2006.&#xA;Parameterized tests could be enabled with the annotation &lt;code&gt;@ParameterizedTest&lt;/code&gt;. They could be provided with data and could also be run several times with different values. In addition to providing parameterized tests with primitive data via the annotation &lt;code&gt;@ValueSource&lt;/code&gt;, it is also possible to pass more complex data via the annotation &lt;code&gt;@MethodSource&lt;/code&gt;. This article will show how to provide several lists for a parameterized test in JUnit 5.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VERnetzX Supports UN SDG 3</title>
				<link>https://felix-seifert.com/blog/vernetzx-supports-un-sustainable-development-goal-3/</link>
				<pubDate>Sun, 02 Dec 2018 13:00:12 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/vernetzx-supports-un-sustainable-development-goal-3/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/sap-next-gen-meetup_hu_bbdf2958cd3123c3.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/sap-next-gen-meetup_hu_5dbdd0e555bb544f.webp 640w, https://felix-seifert.com/images/posts/sap-next-gen-meetup_hu_bbdf2958cd3123c3.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;333&#34;&#xA;       alt=&#34;Jonas Pfrang and Felix Seifert presented the prototype of VERnetzX at SAP&amp;#39;s Next-Gen meetup at Heidelberg.&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/felix-seifert-presented-vernetzx_hu_5a6e19609098330b.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/felix-seifert-presented-vernetzx_hu_2b31aadd5139f5dc.webp 640w, https://felix-seifert.com/images/posts/felix-seifert-presented-vernetzx_hu_5a6e19609098330b.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;561&#34;&#xA;       alt=&#34;Felix Seifert presenting VERnetzX at SAP&amp;#39;s Next-Gen meetup at Heidelberg.&#34;&#xA;       loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://felix-seifert.com/blog/vernetzx-voice-operated-social-network/&#34;&gt;VERnetzX&lt;/a&gt; is the concept for a voice-operated Ambient Assisted Living (AAL) system based on Amazon Alexa. This system for the older generation supports the &lt;a href=&#34;https://www.un.org/sustainabledevelopment/health/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UN Sustainable Development Goal 3: Good Health and Well-Being (UN SDG 3)&lt;/a&gt;.&#xA;In November 2018, &lt;a href=&#34;https://www.linkedin.com/in/jonas-pfrang-05684012a/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jonas Pfrang&lt;/a&gt; and I presented at &lt;a href=&#34;https://www.sap.com/corporate/en/company/innovation/next-gen-innovation-platform.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SAP&amp;rsquo;s Next-Gen event&lt;/a&gt; how VERnetzX supports the achievement of UN SDG 3. The event happened  in Heidelberg, Germany, and we presented our prototype amongst the presentations of other established  companies. At the same time, our team was awarded the &lt;a href=&#34;https://felix-seifert.com/blog/vernetzx-dx-award/&#34;&gt;DX Award&lt;/a&gt; by the &lt;a href=&#34;http://dx-network.de/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Digital Experience Network&lt;/a&gt; and the &lt;a href=&#34;https://www.iism.kit.edu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Institute of Information Systems and Marketing&lt;/a&gt;, Karlsruhe Institute of Technology.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dynamic Programming: Saving Results</title>
				<link>https://felix-seifert.com/blog/dynamic-programming-increase-efficiency/</link>
				<pubDate>Sun, 25 Nov 2018 16:40:28 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/dynamic-programming-increase-efficiency/</guid>
				<description>&lt;p&gt;Dynamic programming is the process of splitting a complex problem into simpler sub-problems, storing the values of each sub-problem and saving time by using these values to calculate the complex problem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dynamic-programming-explained-simple&#34;&gt;Dynamic Programming Explained Simple&lt;/h2&gt;&#xA;&lt;p&gt;Programming dynamically consists mainly out of saving results of simple tasks so that you do not have to calculate them again.&#xA;Assume a young kid who just learned addition in school. He/she writes down the task of calculating 1 + 1 + 1 + 1 + 1 + 1. After a short calculation, you know the solution is 6. Now, the kid adds a + 1 and asks you to calculate it. Of course, you could do the whole task of adding all the numbers again. But the idea of dynamic programming is using the previous result and adding the +1. Like this, you could get the solution quickly.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Docker vs. Virtual Machines</title>
				<link>https://felix-seifert.com/blog/docker-vs-virtual-machines/</link>
				<pubDate>Mon, 19 Nov 2018 15:07:38 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/docker-vs-virtual-machines/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/docker-logo_hu_e99e421301e0efc0.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/docker-logo_hu_34470256a2ca9d3a.webp 640w, https://felix-seifert.com/images/posts/docker-logo_hu_e99e421301e0efc0.webp 1280w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1280&#34; height=&#34;427&#34;&#xA;       alt=&#34;Docker is used for software development and deployment. This article describes structures of container and VM systems.&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Docker is very famous for both software development and deployment; it is used everywhere. The idea is to use the same environment on each machine in the whole cycle of software development and deployment. Previously, it was already possible to simulate the production environment with virtual machines (VMs). So what is this concept of VMs and how is Docker different from VMs?&lt;/p&gt;</description>
			</item>
			<item>
				<title>VERnetzX: Voice-operated Social Network</title>
				<link>https://felix-seifert.com/blog/vernetzx-voice-operated-social-network/</link>
				<pubDate>Thu, 08 Nov 2018 14:57:36 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/vernetzx-voice-operated-social-network/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/vernetzx_logo_hu_5667159c29221e08.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/vernetzx_logo_hu_36a727036512e362.webp 640w, https://felix-seifert.com/images/posts/vernetzx_logo_hu_5667159c29221e08.webp 1280w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1280&#34; height=&#34;220&#34;&#xA;       alt=&#34;VERnetzX is a voice-operated AAL system for the older generation based on Amazon Alexa.&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;VERnetzX is a voice-operated Ambient Assisted Living system for the older generation based on Amazon Alexa which should serve as a social network. It was developed by &lt;a href=&#34;https://www.linkedin.com/in/jonas-pfrang-05684012a/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jonas Pfrang&lt;/a&gt;, Karina Renten, Markus Förste and me in the Practical Seminar in Digital Experience as a collaboration between &lt;a href=&#34;https://www.kit.edu/english/index.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Karlsruhe Institute of Technology&lt;/a&gt; and &lt;a href=&#34;https://www.hfg-karlsruhe.de/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Karlsruhe University of Arts and Design&lt;/a&gt;.&#xA;The name is a combination of the German words for connection (Verbindung), network (Netwerk) and X as a symbol connecting different generations and points.&lt;/p&gt;</description>
			</item>
			<item>
				<title>wamp2spring: Topics and Procedures</title>
				<link>https://felix-seifert.com/blog/wamp2spring-router-topics-procedures/</link>
				<pubDate>Fri, 02 Nov 2018 17:36:02 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/wamp2spring-router-topics-procedures/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/wamp2spring2publicationsprocedures-1_hu_9ed4f8e5b618946e.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/wamp2spring2publicationsprocedures-1_hu_4cc26896e091d48a.webp 640w, https://felix-seifert.com/images/posts/wamp2spring2publicationsprocedures-1_hu_9ed4f8e5b618946e.webp 1280w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1280&#34; height=&#34;550&#34;&#xA;       alt=&#34;wamp2spring serves as a WAMP router and could register remote procedures and publish on topics.&#34;&#xA;       loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;wamp2spring offers the option to serve as Web Application Messaging Protocol (WAMP) router publishing on topics and registering remote procedures. The article &lt;a href=&#34;https://felix-seifert.com/blog/wamp2spring-wamp-router/&#34;&gt;wamp2spring - Router for WAMP&lt;/a&gt; has already described how to set up a router with wamp2spring. In this article, we would learn how the router could publish on topics and register remote procedures.&#xA;Understanding RPC and Pub/Sub might be quite helpful for creating microservices communicating via WAMP. The different ways of communicating via the protocol are described in the article &lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;Web Application Messaging Protocol&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>wamp2spring - Router for WAMP</title>
				<link>https://felix-seifert.com/blog/wamp2spring-wamp-router/</link>
				<pubDate>Sun, 21 Oct 2018 14:57:56 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/wamp2spring-wamp-router/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/wamp2spring2_hu_166425c4cd6e44f4.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/wamp2spring2_hu_b90b0b0c8c686307.webp 640w, https://felix-seifert.com/images/posts/wamp2spring2_hu_166425c4cd6e44f4.webp 1280w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1280&#34; height=&#34;427&#34;&#xA;       alt=&#34;wamp2spring is a library used for setting up a WAMP router.&#34;&#xA;       loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;As I am a strong advocate of Spring Boot, I would present you with another way to set up a router for the Web Application Messaging Protocol (WAMP). This is based on the Java library &lt;a href=&#34;https://github.com/ralscha/wamp2spring&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;wamp2spring&lt;/a&gt; and Spring Boot (you could also use the Spring framework).&#xA;Besides setting up one or multiple WAMP clients (for example with &lt;a href=&#34;https://felix-seifert.com/blog/autobahnjava-wamp-library-crossbar/&#34;&gt;Autobahn|Java&lt;/a&gt;), a router is needed so that the clients could communicate with each other via WAMP. I have already described the idea in the article &lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;Web Application Messaging Protocol&lt;/a&gt;.&#xA;Even though there are multiple options for settings, it is quite convenient to set up a router with the default settings.&#xA;A wamp2spring router itself could register remote procedures, as well as publish on topics, which could be addressed by the wamp clients. This article would present a solution of a router that does not register or publish.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Autobahn|Java - WAMP Library of Crossbar.io</title>
				<link>https://felix-seifert.com/blog/autobahnjava-wamp-library-crossbar/</link>
				<pubDate>Sat, 13 Oct 2018 19:35:04 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/autobahnjava-wamp-library-crossbar/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/autobahn-java_hu_ed506ddbfb5517c2.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/autobahn-java_hu_5210dabd870c812d.webp 640w, https://felix-seifert.com/images/posts/autobahn-java_hu_ed506ddbfb5517c2.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;333&#34;&#xA;       alt=&#34;This article describes how to implement a WAMP client using the library Autobahn|Java.&#34;&#xA;       loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;You have already learned &lt;a href=&#34;https://felix-seifert.com/blog/local-crossbar-router-wamp/&#34;&gt;how to set up a local Web Application Messaging Protocol (WAMP) router&lt;/a&gt;. This article would describe how to make the first step in programming a microservice in Java using the library Autobahn|Java and, thus, how to use a WAMP router.&lt;/p&gt;&#xA;&lt;h2 id=&#34;idea-of-autobahnjava&#34;&gt;Idea of Autobahn|Java&lt;/h2&gt;&#xA;&lt;p&gt;A WAMP network usually consists of a router and multiple clients. The clients are often microservices which are part of, at least, one bigger service. While being connected with the router, these microservices can communicate with each other. The &lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;article about WAMP&lt;/a&gt; describes the different ways of communicating via this protocol.&#xA;It is not relevant in which programming language the clients are being implemented, &lt;a href=&#34;https://github.com/crossbario/autobahn-java&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Autobahn|Java&lt;/a&gt; is the library of Crossbar.io to implement a client for a WAMP network specifically in Java. It is based on the framework &lt;a href=&#34;https://netty.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Netty&lt;/a&gt;, which is used for asynchronous programming.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Local Crossbar Router for WAMP</title>
				<link>https://felix-seifert.com/blog/local-crossbar-router-wamp/</link>
				<pubDate>Sun, 07 Oct 2018 12:55:32 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/local-crossbar-router-wamp/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/local-crossbar-router_hu_d31775b2aa25d83c.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/local-crossbar-router_hu_bb70c8e573f25c64.webp 640w, https://felix-seifert.com/images/posts/local-crossbar-router_hu_d31775b2aa25d83c.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;333&#34;&#xA;       alt=&#34;For connecting several microservices, they have to be connected to a WAMP router.&#34;&#xA;       loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;When writing your own programme(s) using WAMP, they have to be connected to a WAMP router to be able to communicate with each other. There is a &lt;a href=&#34;https://wamp-proto.org/implementations/index.html#routers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;whole bunch of implementations&lt;/a&gt; you could use for running a router. In this article I will describe how to set up a local Crossbar.io router.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-a-local-wamp-router&#34;&gt;Why a Local WAMP Router&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://felix-seifert.com/blog/web-application-messaging-protocol/&#34;&gt;Web Application Messaging Protocol (WAMP)&lt;/a&gt; is a protocol which could be used by many (micro-)services to communicate in a network. The programming languages used by the (micro-)services do not matter and they also do not have to know the address of each other. This means that they could be run anywhere as long as they are connected to the router, they only tell the router where they could be found. Therefore, the router is an integral part of a network using WAMP.&#xA;Crossbar.io runs a &lt;a href=&#34;https://crossbar.io/docs/Demo-Instance/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;demo instance&lt;/a&gt; of its router which could be accessed by anyone. This sounds easy but involves some setup of your internet connection. The easier way would be setting up your own local router.&#xA;In addition, you could use it for your own development when developing with others: When starting to code your own service from scratch while being connected to a remote router, others will probably not be able to access a stable version of your microservice. Therefore, you could run a simple mock-up for them remotely and develop the proper microservice locally.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Web Application Messaging Protocol</title>
				<link>https://felix-seifert.com/blog/web-application-messaging-protocol/</link>
				<pubDate>Fri, 05 Oct 2018 13:40:28 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/web-application-messaging-protocol/</guid>
				<description>&lt;p&gt;In the last Fiction2Science Hackathon, I learned to apply the &lt;a href=&#34;https://wamp-proto.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Web Application Messaging Protocol (WAMP)&lt;/a&gt; for communication of services in the cloud. In this article, I will describe the protocol a little bit more detailed and refer to the implementation of &lt;a href=&#34;https://crossbar.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Crossbar.io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-idea-of-the-web-application-messaging-protocol-wamp&#34;&gt;The idea of the Web Application Messaging Protocol (WAMP)&lt;/h2&gt;&#xA;&lt;p&gt;Lots of people might know Representational State Transfer (REST) APIs. This architectural style sets a group of constraints that allow services on the web to communicate. A caller calls a certain URL and passes some information to the callee. Afterwards, the caller of the URL would receive an answer from the callee. As long as multiple callers know the URL of the API, it could be called by multiple services. However, multiple callees are not possible. This is known as a Remote Procedure Call (RPC).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Fiction2Science: WAMP and Microservices</title>
				<link>https://felix-seifert.com/blog/fiction2science-wamp-microservices/</link>
				<pubDate>Fri, 05 Oct 2018 13:35:49 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/fiction2science-wamp-microservices/</guid>
				<description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://felix-seifert.com/images/posts/fiction2science-hack-area_hu_3e46d0d44211610d.webp&#34;&#xA;       &#xA;       srcset=&#34;https://felix-seifert.com/images/posts/fiction2science-hack-area_hu_df3862ceeee65093.webp 640w, https://felix-seifert.com/images/posts/fiction2science-hack-area_hu_3e46d0d44211610d.webp 1000w&#34;&#xA;       sizes=&#34;(min-width: 42rem) 40rem, 100vw&#34;&#xA;       width=&#34;1000&#34; height=&#34;364&#34;&#xA;       alt=&#34;Part of the hack area of the Fiction2Science Hackathon of Continental in Regensburg&#34;&#xA;       fetchpriority=&#34;high&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Last weekend, I attended the hackathon Fiction2Science of Continental. I was assigned to the Cloud Challenge where we dealt with the communication between microservices in the cloud.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-cloud-challenge&#34;&gt;The Cloud Challenge&lt;/h2&gt;&#xA;&lt;p&gt;After the official welcome, we gathered at our challenge areas with around 20 people participating in each challenge (total of 7 different challenges). Each participant indicated what his focus area is (frontend, backend or design). Based on this indication, we autonomously formed teams of four to five participants. Eventually, our team consisted of only three participants: one person focusing on design and frontend development, one developer who engaged in both frontend and backend development and me. In the beginning, I dealt mainly with backend development but eventually, I was also responsible for the presentation.&#xA;At first, we learned the technique how our developed microservices would communicate. To help with this, we had a simple tutorial with some tasks that we had to solve. Then, we tried to understand how to use our programming language to publish and subscribe to topics and how to register remote procedures and call them. We continued to solve tasks to understand these required techniques a little bit more. Having learnt these techniques, we then developed our own service by combining several microservices.&#xA;Finally, we had to present our own service in front of a panel consisting of professional Software Engineers and Innovation Managers.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Felix Seifert Starts Blogging</title>
				<link>https://felix-seifert.com/blog/felix-seifert-starts-blogging/</link>
				<pubDate>Fri, 05 Oct 2018 13:30:44 +0000</pubDate>
				<guid>https://felix-seifert.com/blog/felix-seifert-starts-blogging/</guid>
				<description>&lt;p&gt;Recently, I realised that it is not satisfying enough to just learn how to code with different techniques and to apply them. Therefore, I have decided to blog about some of the topics that I have learnt, with the aim of teaching them to others. Hopefully, this will provide you with a more detailed insight into my work.&#xA;Additionally, I will share some personal milestones with you. These could be programming-related events that I have attended or topics concerning my career progression.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
