PageSourceSearch

https://alien-project.org/about-me.html

html alien-project.org collected 2026-09-25 20:22:04 UTC 20,341 bytes, 310 lines download raw bytes

1<!DOCTYPE HTML> <html prefix="og: https://ogp.me/ns#" class="no-js responsivelayout supportsbreakout" lang="de" data-zpdebug="false" data-ptr="" data-pagename="About me"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="keywords" content=""> <meta name="generator" content="Zeta Producer 16.7.0.0, ZP16X, 26.07.2023 06:52:54"> <meta name="robots" content="index, follow"> <title>About me</title> <meta property="og:type" content="website"> <meta property="og:title" content="About me"> <meta property="og:description" content=""> <meta property="og:url" content="http://www.alien-project.org/about-me.html"> <meta property="twitter:card" content="summary_large_image"> <meta property="twitter:title" content="About me"> <meta property="twitter:description" content=""> 
1<script>
2		document.documentElement.className = document.documentElement.className.replace(/no-js/g, 'js');
3	</script>
3 <link rel="stylesheet" href="assets/bundle.css?v=638575226682516621"> <link rel="stylesheet" href="assets/bundle-print.css?v=638304795789395093" media="print"> 
3<script src="assets/bundle.js?v=638575226682516621"></script>
3 <link rel="canonical" href="http://www.alien-project.org/about-me.html"> <link rel="preload" href="assets/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin=""> <style>
4.myButton {
5	box-shadow: 0px 10px 14px -7px #276873;
6	background:linear-gradient(to bottom, #599bb3 5%, #408c99 100%);
7	background-color:#599bb3;
8	border-radius:8px;
9	display:inline-block;
10	cursor:pointer;
11	color:#ffffff;
12	font-family:Arial;
13	font-size:20px;
14	font-weight:bold;
15	padding:13px 13px;
16	text-decoration:none;
17	text-shadow:0px 1px 0px #3d768a;
18}
19.myButton:hover {
20	background:linear-gradient(to bottom, #408c99 5%, #599bb3 100%);
21	background-color:#408c99;
22}
23.myButton:active {
24	position:relative;
25	top:1px;
26}
27
28/* CSS Button Style 2 by indzign.blogspot.com */
29.button2{float:left;list-style:none;text-align:center;width:95%;margin:10px;padding:2px;font-size:14px;clear:both}
30.button2 ul{margin:0;padding:0}
31.button2 li{display:inline;margin:5px;padding:0;list-style:none}
32.button2 li a.demo,.button2 li a.download{position:relative;padding:14px 48px 14px 16px;background:#f39c12;display:block;color:#fff!important;font-weight:700;font-size:14px;text-align:left;text-transform:uppercase;letter-spacing:.2px;border-radius:3px;box-shadow:0 1px rgba(0,0,0,0.1);line-height:normal;transition:all .3s;max-width:170px;margin:auto;overflow:hidden}
33.button2 li a.download{background:#3498db}
34.button2 li a.demo:hover,.button2 li a.download:hover{background:#666}
35.button2 li a.demo:active,.button2 li a.download:active{cursor:pointer}
36.button2 li a.demo:after,.button2 li a.download:after{content:'\F054';background:rgba(0,0,0,0.1);position:absolute;right:0;top:0;font-weight:normal;display:inline-block;margin:0 0 0 10px;color:#fff;padding:16px 24px;font-family:fontawesome;transition:all .3s}
37.button2 li:hover a.demo:after,.button2 li:hover a.download:after{background:transparent;-webkit-animation:bounceright .3s alternate ease infinite;animation:bounceright .3s alternate ease infinite}
38@-webkit-keyframes bounceright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(3px)}}
39@keyframes bounceright{from{transform:translateX(0)}to{transform:translateX(3px)}}
40
41</style> 
41<script>
42		// if after 1000ms we haven't got webfonts, show the user something, a FOUT is better than nothing
43		// http://kevindew.me/post/47052453532/a-fallback-for-when-google-web-font-loader-fails
44		setTimeout(function() {
45			// you can have the webfont.js cached but still have no classes fire and you will have a window.WebFontConfig object
46			if ( ! ("WebFont" in window)) {
47				// non wfl loader class name because their events could still fire
48				document.getElementsByTagName("html")[0].className += " wf-fail";
49			}
50		}, 1000);
51	
52		WebFontConfig = {
53			custom: { 
54				families: [ 'Roboto:300,400,700' ], 
55				urls: ['media/fonts/zp-webfonts.css?v=346658018']
56			}
57		};
58	</script>
58 
58<script src="assets/js/webfont/1.6.28/webfont-local.js"></script>
58 <link class="zpfaviconmeta" rel="shortcut icon" type="image/x-icon" href="assets/favicon.ico?v=2021070601"> <style>
59.zpLinkBox1922 {min-height: 0px;padding: 25px;border-radius: 9px;background-color: rgba(255, 255, 255, 0.1);border-color: rgba(0, 0, 0, 0.1);box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);}.zpLinkBox1922:hover {cursor: default;background-color: rgba(255, 255, 255, 0.1);border-color: rgba(0, 0, 0, 0.2);box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);}.zpLinkBox1922 img {border-radius: 9px;height: auto;}.zpLinkBox1922 .zpLinkBoxText.afterHeading {padding-bottom: 25px;}
60</style> </head> <body id="flat-responsive" class="notouch haswebdescription hasfixednav hasheader"> <a id="top"></a> <div id="header"> <div id="webdescription"> <div id="webtext"> <div id="webname"><a href="index.html">artificial life environment</a></div> </div> </div> <div id="nav"> <ul class="zpmarkactive default submenu touchhovermenu clickhovermenu out" data-trianglemode="true"><li class="logo hidden"><a href="index.html"></a></li><li class="zpnodefaults haschilds"><a href="index.html" data-isredirected="false">Home</a><ul><li class="zpnodefaults"><a href="objectives.html" data-isredirected="false">Objectives and visions</a></li><li class="zpnodefaults"><a href="getting-started.html" data-isredirected="false">Getting started</a></li><li class="zpnodefaults"><a href="participation.html" data-isredirected="false">Contributing to the project</a></li><li class="zpnodefaults"><a href="archive.html" data-isredirected="false">Archive</a></li></ul></li><li class="zpnodefaults"><a href="artworks.html" data-isredirected="false">Artworks</a></li><li class="zpnodefaults"><a href="downloads.html" data-isredirected="false">Downloads</a></li><li class="zpnodefaults"><a href="https://alien-project.gitbook.io/docs/" data-isredirected="true" target="_blank" rel="noopener">Documentation</a></li><li class="zpnodefaults"><a href="networks.html" data-isredirected="false">Networks</a></li><li class="zpnodefaults haschilds"><a href="contact.html" data-isredirected="false">Contact</a><ul><li class="zpnodefaults"><a class="active" href="about-me.html" data-isredirected="false">About me</a></li><li class="zpnodefaults"><a href="legal-notice.html" data-isredirected="false">Legal Notice</a></li><li class="zpnodefaults"><a href="privacy-protection.html" data-isredirected="false">Privacy Protection</a></li></ul></li><li class="overflownonly"><a href="#" id="mobilenavtoggle" class="tabletonly toggle" aria-label="Menu on/off">Menu</a></li></ul> 
60<script>
61$z(document).ready(function(){
62	// we find the active page's a-tag and then walk upwards the dom marking the respective parent li as active/open
63	$z('ul.zpmarkactive.default li a.active').parents('li').each(function(index){
64		var that = this;
65		// do not add open class to immediate parent li
66		if ( index > 0 ){
67			$z(that).addClass('open');
68		}
69		$z(that).addClass('active');
70		//$z(that).find('> a').addClass('active');
71	});
72	$z("ul.zpmarkactive.default").removeClass("zpmarkactive");
73	
74	/*
75	$z("ul.zpmarkactive.default li:has(a.active)").addClass("active");
76	$z("ul.zpmarkactive.default li.haschilds > a").addClass("haschilds");
77	$z("ul.zpmarkactive.default li.haschilds:has(a.active)").addClass("active");
78	$z("ul.zpmarkactive.default li.active > a").addClass("active");
79	
80	$z("ul.zpmarkactive.default").removeClass("zpmarkactive")
81	*/
82});
83</script>
83 </div> </div> <div id="slider" class="noprint"> <a id="a1911"></a> <div id="headerslider" class="flexslider"> <div class="flex-container"> <ul class="slides"> <li class="first"> <img loading="lazy" src="media/images/version4-5-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/space-insects-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-3-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-1b-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-4-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> </ul> </div> </div> 
83<script>
84		$z(document).ready(function() {
85			var useCssAnimation = false;
86			
87			var autoplay = true;
88			if ( $z("body").hasClass("zpreducemotion") && 'slide' !== 'fade' ){  // don't allow moving animations
89				autoplay = false;
90			}
91			
92			function initSlider(){
93				console.log("Num Headers: 6");
94				$z('#headerslider .flex-container').flexslider({
95					useCSS: useCssAnimation,
96					keyboard: true,
97					itemMargin: 0,
98					animation: 'slide',
99					controlsContainer: '#headerslider.flexslider',
100					slideshow: autoplay,
101					slideshowSpeed: 7000,
102					directionNav: true,touch: true,
103					controlNav: false,
104					randomize: false,
105					
106					pauseOnHover: true,
107					smoothHeight: false,
108					start: function(el){
109						focalImages();
110					},
111					prevText: "zur&#252;ck",
112					nextText: "weiter"
113				});
114				$z('#headerslider.flexslider').addClass("inited");
115			}
116			
117			if ( $z('#headerslider .flex-container ul.slides li img').length > 0 ){
118				// init flexslider after 1st image has loaded, so have dimensions as quickly as possible without having to wait too long on window loaded or such and can start right with doc ready
119				$z('#headerslider .flex-container ul.slides li img').first().one("load", initSlider).each(function() {
120					if(this.complete) $z(this).trigger('load');
121				}); // .each() is to work around a browser bugs which don't fire load() for cached images http://stackoverflow.com/a/3877079
122			}
123			else{
124				// also init flexslider if it doesn't contain images and is text only
125				initSlider();
126			}
127			
128			// make sure the slider is properly resized when the window is resized (400ms after window.resize ended)
129			$z('#headerslider .flex-container').on('resize',function(event){
130				// prevents slider.resize() from causing a windows.resize event again which looped
131				event.stopPropagation();
132			});
133			var sliderTimeout1911 = null;
134			$z(window).resize(function(event) {
135				clearTimeout(sliderTimeout1911);
136				sliderTimeout1911 = setTimeout(function() {
137					var slider = $z('#headerslider .flex-container').data('flexslider');   
138					debug.log("Resizing Slider: ", slider);
139					if ( slider ){  // if slider contains only one image, slider will be undefined
140						$z(slider).css('height', '');
141						slider.resize();
142					}
143					clearTimeout(sliderTimeout1911); 
144				}, 400);
145			});
146			
147			// activate links for individual slideshow
148			$z('#headerslider .flex-container ul.slides li[data-clickurl]').css("cursor","pointer");
149			$z('#headerslider .flex-container ul.slides li[data-clickurl]').click(function (event){
150				// Because this script captures clicks for a container, it will also fire when a regular link inside the container 
151				// is clicked. Therefore, we check below, if a regular link i.e. <a href="#"> was the target of the click.
152				// Depending on the browser used, event.target might not be available, but event.srcElement would…
153				var targ;
154				if (event.target){
155					targ = event.target;
156				}
157				else if (event.srcElement) {
158					targ = event.srcElement;
159				}
160				if (targ.nodeName == "A") {
161					// a regular link i.e. in a Caption was clicked. Return early, so the link's href doesn't get overridden
162					return;
163				}
164				
165				if ( $z(this).data("clicktarget") ){
166					window.open($z(this).data("clickurl"), $z(this).data("clicktarget"));
167				}
168				else{
169					window.location = $z(this).data("clickurl");
170				}
171				event.preventDefault;
172				return false;
173			});
174		});
175  	</script>
175 </div> <div id="content" class="main"> <div class="zparea zpgrid" data-numcolumns="" data-areaname="Standard" data-pageid="622"> <div id="container_68" class="zpContainer first zpBreakout " data-zpeleel="container" data-zpleid="68"> <div class="zpRow standard " data-row-id="447"> <div class="zpColumn odd zpColumnWidth1 c12 first last" style="" data-column-id="510"> <div class="zpColumnItem"> <div id="a1910" data-article-id="1910" data-zpleid="1910" class="articlearea zpwText"> <h2 data-zpfieldname="headline">About me</h2> <p><br></p> </div> </div> <div class="zpColumnItem"> <div id="a1922" data-article-id="1922" data-zpleid="1922" class="articlearea zpwLinkbox"> <div class="zpLinkBox1922 zpLinkBox"> <div class="zpLinkBoxText"> <p><span style="color: #a3c5e3">I am an applied&nbsp;mathematician by training and have worked on analysis and optimization of partial differential equations in material sciences. For more information please visit my profiles on</span> <a href="https://scholar.google.com/citations?user=iaMMMA0AAAAJ"><span style="color: #ffcc00">google scholar</span></a> <span style="color: #a3c5e3">or </span><a href="https://www.researchgate.net/profile/Christian_Heinemann"><span style="color: #ffcc00">researchgate</span></a><span style="color: #a3c5e3">. </span></p> <p><span style="color: #a3c5e3">
175At present I work as a software engineer in the field of public transport</span>.</p> </div> </div> </div> </div> </div> </div> </div> <div id="container_103" class="zpContainer last zpBreakout " data-zpeleel="container" data-zpleid="103"> <div class="zpRow standard " data-row-id="594"> <div class="zpColumn odd zpColumnWidth1 c12 first last" style="" data-column-id="718"> <div class="clearx"></div> <div class="zpColumnItem"> <div id="a2138" data-article-id="2138" data-zpleid="2138" class="articlearea zpwTrennlinie zpSO-separator"> <hr class="zpSO-separator" style="display:block;border:none;height:1px;line-height:1px;color:#C4DAED;background-color:#C4DAED;margin-top:30px;margin-bottom:30px;"> </div> </div> </div> </div> </div> </div> </div> <div id="footer" class="container"> <div id="xmenu" class=""> <a class="xmenulink" href="index.html">Home</a> <a class="xmenulink" href="downloads.html">Downloads</a> <a class="xmenulink" href="contact.html">Contact</a> </div> <div id="copyright"> © 2026 artificial life environment </div> </div> <div id="totop" class="container noprint"> <a href="#top" class="zpSO-Uplink-Flat zpnolayoutlinkstyles" title="Nach oben"><span class="zp-sronly">Nach oben</span></a> </div> 
175<script>	
176		function setoverflown(s){
177			var retcode = false;
178			if ( $z("#nav").is(":hover") || ! $z("#nav > ul > li").length ){
179				// mouse is over nav, which opens submenues and might cause the overflow
180				// OR empty nav - needed because for IE an empty #nav == overflown()
181				return false;
182			}
183			
184			$z("#nav > ul").removeClass("overflown");
185			if ( $z("#nav:not(.on) > ul").overflown() ){
186				// nav is already overflown by 1st-Level Menu entries (too many entries)
187				$z("#nav > ul").addClass("overflown");
188				retcode = true;
189			}
190			else{
191				// on non touch devices, check if nav would be overflown horizontally if all submenues are visible (i.e. too many submenues expanding to the right)
192				$z("#nav > ul ul:not(.nocalcoverflow)").css("display", "block");
193				if ( $z("#nav:not(.on) > ul").overflown("x") ){
194					$z("#nav > ul").addClass("overflown");
195					retcode = true;
196				}
197				$z("#nav > ul ul:not(.nocalcoverflow)").css("display", "");
198				
199				// if the previous check didn't already match, check if one of the submenus is higher than the available space in the window because the nav is fixed and wouldn't scroll
200				if ( !retcode && $z("#nav.fixed").length ){
201					$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "block");
202					$z("#nav.fixed > ul ul:not(.nocalcoverflow)").each(function(){
203						var eltop = $z(this).offset().top - $(window).scrollTop(); // gets the effective top position relative to the window
204						if ( (eltop + $(this).innerHeight()) > $z(window).innerHeight() ){
205							// submenu doesn't fit on screen and would be cut off
206							$z("#nav.fixed > ul").addClass("overflown");
207							retcode = true;
208							$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "");
209							// exit the each loop early
210							return false;
211						}
212					});
213					$z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "");
214				}
215			}
216			
217			// see if we need to scale to the logo to fit besides the mobile menu-button
218			var availspace = $z("#nav > ul").width() - $z("#nav > ul > li.overflownonly").width();
219			$z("#nav > ul > li.logo").css("max-width", availspace + "px");
220			
221			return retcode;
222		}
223		
224		function stickyNav(topoffset){
225			// make navigations menu sticky when scrolling the menu past the top of the window
226			var scrolltop = $z("body").scrollTop() || (document.documentElement && document.documentElement.scrollTop) || 0;
227			
228			if ( !$z("#nav ul ul:visible").length && scrolltop - topoffset >= 0){
229				$z("body").addClass("padded");
230				$z("#nav").addClass("fixed");
231			}
232			else{
233				$z("body").removeClass("padded");
234				$z("#nav").removeClass("fixed");
235			}
236			// with a little delay, check if the menu gets overflown (i.e. because we're also displaying the logo in the nav now
237			setTimeout(function(){setoverflown();}, 100);
238		}
239		// globals
240		var navOffset;
241		
242		$z(document).ready(function(){
243			// smooth scroll the layout specific go to top link
244			$z("a.zpSO-Uplink-Flat").click(function(e){
245				e.preventDefault();
246				if ( $z(this.hash).length ){
247					$z('html,body').animate({
248							scrollTop: $z(this.hash).offset().top - parseInt($z("body").css("padding-top"))
249					}, 500);
250					window.location.hash = this.hash;
251				}
252			});
253		
254			// switches the Mobile Navigation-Menu on/off, when "Menu" link is clicked.
255			$z("a#mobilenavtoggle").on("click", function(e){
256				e.preventDefault();
257				$z("#nav").toggleClass("on");
258				setoverflown();
259			});	
260			
261			setoverflown();
262			var resizeTimeout = null;
263			$z(window).resize(zpthrottle(100, function(event) {
264				var event = event || window.event;
265				if ( event && $z(event.target.nodeType).length == 0 ){// enable window.resize only for the window object (resizing elements might also trigger window.resize) which doesn't have a nodeType
266					setoverflown();
267				}
268			}));	
269			
270			if ( "false" == "false" && ("true" == "true" || "false" == "true") ){
271				navOffset = $z("#nav:not(.fixed)").offset().top;
272				setTimeout(function(){stickyNav(navOffset);}, 100);
273			}
274		});
275		
276		$z(window).on('load', function(){
277			setTimeout(function(){setoverflown();}, 500);
278			var navheight = 0;
279			if ( "false" == "false" ){
280				navheight = $z("#nav").outerHeight();
281			}
282			// pull anchors below fixed header into visible area
283			if ( location.hash != "" && $z(':target').length ) {
284				$z('html,body').animate({scrollTop: $z(':target').offset().top - navheight - 10 }, 600);
285			}
286			$z("a[href*='#']:not([href='#'])").not(".zpNoScroll").click(function () {
287				var target = $z(this).attr("href");
288				target = target.substring(target.indexOf("#"));
289				if ( $z(target).length ){
290					$z('html,body').animate({scrollTop: $z(target).offset().top - navheight - 10 }, 600);
291				}
292			});
293			
294			if ( "false" == "false" && ("true" == "true" || "false" == "true") ){
295				if ( $z("#nav:not(.fixed)").length ){
296					navOffset = $z("#nav:not(.fixed)").offset().top;
297				}
298				setTimeout(function(){stickyNav(navOffset);}, 500);
299				$z(window).scroll(zpthrottle(100, function(event) {
300					stickyNav(navOffset);
301				}));
302			}
303
304		});
305	</script>
305 
306<!--
307* Layout: Flat Responsive by StS
308* $Id: default.html 2023-03-02 17:23:19 +0100 Stefan S  ec42e40d01882b7ce32f3332ab0d932ac2717c1b $
309-->
310 </body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.