<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>General on Felix Seifert</title>
		<link>https://felix-seifert.com/blog/tags/general/</link>
		<description>Recent content in General on Felix Seifert</description>
		<generator>Hugo</generator>
		<language>en-gb</language>
		
		
		
			<copyright>Felix Seifert</copyright>
		
		
			<lastBuildDate>Sun, 11 Oct 2020 17:53:29 +0000</lastBuildDate>
		
			<atom:link href="https://felix-seifert.com/blog/tags/general/index.xml" rel="self" type="application/rss+xml" />
			<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>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>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>
	</channel>
</rss>
