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ü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 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.