PageSourceSearch

https://fnovy.com/teaching/

html fnovy.com collected 2026-10-05 06:50:08 UTC 8,137 bytes, 24 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="preload" as="image" href="/assets/img/logo.svg"/><link rel="preload" as="image" href="/assets/img/francesco-square.jpg"/><link rel="icon" type="image/svg+xml" href="/assets/img/logo.svg"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/><title>Teaching &amp; Speaking - Francesco Novy</title><link rel="modulepreload" href="/assets/manifest-a1fe2b35.js"/><link rel="modulepreload" href="/assets/entry.client-DtZiiIyQ.js"/><link rel="modulepreload" href="/assets/chunk-LFPYN7LY-DtxYQFjX.js"/><link rel="modulepreload" href="/assets/root-DwlQ69Pn.js"/><link rel="modulepreload" href="/assets/teaching-iUQ2NELI.js"/><link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;700&amp;display=swap" rel="stylesheet"/><link rel="stylesheet" href="/assets/root-R9rfJTeB.css"/></head><body><div class="site-wrapper"><nav class="nav-container"><div class="nav-cluster"><a class="logo-icon" href="/" data-discover="true"><img src="/assets/img/logo.svg" alt="Francesco Novy"/></a><div class="nav-links"><a class="main-nav-item mobile-display-none" href="/" data-discover="true">Home</a><a class="main-nav-item" href="/about-me" data-discover="true">About Me</a><a aria-current="page" class="main-nav-item active" href="/teaching" data-discover="true">Teaching</a><a class="main-nav-item" href="/contact" data-discover="true">Contact</a></div></div></nav><main class="main"><section class="wrapper wrapper-small"><p class="centered"><img src="/assets/img/francesco-square.jpg" class="img-medium-rounded" alt="Francesco Novy" width="300" height="300"/></p><h1>Teaching &amp; Speaking</h1><p>I love to talk about the things I&#x27;m passionate about. I am holding talks in English and German. Topics currently include: Collaboration between designers &amp; developers, Ember.js, D3.js, User Experience, and much more. I also hold workshops and courses about these topics.</p><p>If you&#x27;re interested in having me speak at your event, please contact me at<!-- --> <a href="mailto:[email protected]" class="mail">[email protected]</a>.</p><h1>History excerpt</h1><div class="strong">Bringing coffee tasting to rural areas with Ember &amp; Cordova</div><p>EmberFest 2018, Talk, Amsterdam (Netherlands),<!-- --> <a href="https://www.youtube.com/watch?v=8PG_MYasTpI" target="_blank" rel="noopener noreferrer">Video (Youtube)</a></p><div class="strong">Full-Stack JavaScript Developer Course (Author)</div><p>For CareerFoundry</p><div class="strong">Web Development for Designers Course (Author)</div><p>For CareerFoundry</p><div class="strong">Ember Between Design and Development</div><p>EmberConf 2016, Talk, Portland (USA),<!-- --> <a href="https://www.youtube.com/watch?v=mIpwlxdqLcU" target="_blank" rel="noopener noreferrer">Video (Youtube)</a></p><div class="strong">Datavisualization with Ember.js and D3.js</div><p>Data2day, Full-day workshop, Karlsruhe (Germany)</p><div class="strong">Web Frameworks Course</div><p>University of Applied Science, Bachelor program, St. Pölten (Austria)</p></section></main><footer class="footer"><div class="footer-cluster"><div class="social-links"><a href="http://twitter.com/_fnovy" target="_blank" rel="noopener noreferrer" class="social-nav-item social-nav-item--1" title="Twitter"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 512 512" class="icon"><path d="M512 97q-29 13-60 17 34-21 46-58-31 18-67 25-31-33-77-33-43 0-74 31t-31 74q0 12 3 24-64-3-120.5-32T36 67q-15 24-15 53 0 56 47 87-25 0-47-13v2q0 37 23.5 66t60.5 37q-14 3-28 3-10 0-20-2 11 32 37.5 52.5T155 373q-57 45-130 45-12 0-25-1 74 47 161 47 70 0 128-27t94.5-70.5 56.5-96T460 165v-13q31-23 52-55z"></path></svg></a><a href="https://www.linkedin.com/in/francesco-novy/" target="_blank" rel="noopener noreferrer" class="social-nav-item social-nav-item--2" title="LinkedIn"><svg preserveAspectRatio="xMinYMin meet" viewBox="0 0 512 512" class="icon"><path d="M45 467h60q6 0 10.5-4.5T120 452V189q0-6-4.5-10.5T105 174H45q-6 0-10.5 4.5T30 189v263q0 6 4.5 10.5T45 467zm0-339h60q6 0 10.5-4.5T120 113V60q0-6-4.5-10.5T105 45H45q-6 0-10.5 4.5T30 60v53q0 6 4.5 10.5T45 128zm424.5 77q-12.5-17-37-27.5T378 167q-61 0-103 46-4 5-6.5 4t-2.5-8v-20q0-6-4.5-10.5T250 174h-53q-6 0-10.5 4.5T182 189v263q0 6 4.5 10.5T197 467h60q6 0 10.5-4.5T272 452v-91q0-57 7-78.5t25.5-34T346 236q19 0 32 9t18.5 25 5.5 71v111q0 6 4.5 10.5T417 467h60q7 0 11-4.5t4-10.5V303q0-39-5-60t-17.5-38z"></path></svg></a><a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer" class="social-nav-item social-nav-item--3" title="Email me">@</a></div><div class="footer-text-wrapper"><div class="footer-text">Francesco Novy |<!-- --> <a href="/legal-notice" data-discover="true">Legal Notice</a></div></div></div></footer></div>
1<script>((storageKey2, restoreKey) => {
2    if (!window.history.state || !window.history.state.key) {
3      let key = Math.random().toString(32).slice(2);
4      window.history.replaceState({ key }, "");
5    }
6    try {
7      let positions = JSON.parse(sessionStorage.getItem(storageKey2) || "{}");
8      let storedY = positions[restoreKey || window.history.state.key];
9      if (typeof storedY === "number") {
10        window.scrollTo(0, storedY);
11      }
12    } catch (error) {
13      console.error(error);
14      sessionStorage.removeItem(storageKey2);
15    }
16  })("react-router-scroll-positions", null)</script>
16<script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"unstable_previewServerPrerendering":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());</script>
16<script type="module" async="">import "/assets/manifest-a1fe2b35.js";
17import * as route0 from "/assets/root-DwlQ69Pn.js";
18import * as route1 from "/assets/teaching-iUQ2NELI.js";
19  
20  window.__reactRouterRouteModules = {"root":route0,"routes/teaching":route1};
21
22import("/assets/entry.client-DtZiiIyQ.js");</script>
22<!--$?--><template id="B:0"></template><!--/$-->
22<script id="_R_">requestAnimationFrame(function(){$RT=performance.now()});</script>
22<div hidden id="S:0">
22<script>window.__reactRouterContext.streamController.enqueue("[{\"_1\":2,\"_3\":-5,\"_4\":-5},\"loaderData\",{},\"actionData\",\"errors\"]\n");</script>
22<!--$?--><template id="B:1"></template><!--/$--></div>
22<script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
23$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script>
23<div hidden id="S:1">
23<script>window.__reactRouterContext.streamController.close();</script>
23</div>
23<script>$RC("B:1","S:1")</script>
23<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"2e64ba8021364ceb8d8b8c45e6294665","r":1,"spa":2}' crossorigin="anonymous"></script>
23
24</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.