Johanna Ärje jätti akateemisen tohtorimaailman ja perusti kansainvälistä kauppaa käyvän neuleohjeyrityksen

Johanna Ärje jätti akateemisen tohtorimaailman ja perusti kansainvälistä kauppaa käyvän neuleohjeyrityksen

[]
Johanna Ärje jätti akateemisen tohtorimaailman ja perusti kansainvälistä kauppaa käyvän neuleohjeyrityksen | Teemat | Hämeen Sanomat { if (!Hyphenopoly.hyphenators) { return } Hyphenopoly.hyphenators[”HTML”].then((hyphenator) => { for (const itemSelector in Hyphenopoly.setup.selectors) { const containerNode = document.querySelector(containerSelector) const itemNodeList = containerNode.querySelectorAll(itemSelector) itemNodeList.forEach((itemNode) => { hyphenator(itemNode, itemSelector) }) } }) } ]]> { if (!previewAdUnits.includes(key)) { delete gamAdUnits[key]; elementsToHide.push(key); } }); // hide deleted adslots window.addEventListener(’load’, (event) => { elementsToHide.forEach(key => { if (document.getElementById(adSlotPrefix+key) != null) { let elementParent = document.getElementById(adSlotPrefix+key).parentElement; if (elementParent != null) { elementParent.style.display = ”none”; } } }); }); } function getCookie(name) { name = name + ’=’; const decodedCookie = decodeURIComponent(document.cookie); const cookies = decodedCookie.split(’;’); for (let i = 0; i 0) { generateTargetingParameters(”CxSegments”, cXsegmentIds); } if (Array.isArray(topics)) { let topicsAndMarketingCategories = []; if (topics.length > 0) { topicsAndMarketingCategories = topicsAndMarketingCategories.concat(topics); } if (appendMarketingCategoriesToTopics && Array.isArray(marketingCategories) && marketingCategories.length > 0) { topicsAndMarketingCategories = topicsAndMarketingCategories.concat(marketingCategories); } if (topicsAndMarketingCategories.length > 0) { generateTargetingParameters(’aihe’, topicsAndMarketingCategories); } } if (Array.isArray(marketingCategories) && marketingCategories.length > 0) { generateTargetingParameters(’mainoskategoria’, marketingCategories); } if (Array.isArray(advertisers) && advertisers.length > 0) { generateTargetingParameters(’mainostaja’, advertisers); } if (brandSafety) { generateTargetingParameters(’brand_safety’, brandSafety); } if (brandSafetyScore) { generateTargetingParameters(’brand_safety_score’, brandSafetyScore); } if (articleid) { generateTargetingParameters(’articleid’, articleid); } if (isPreview) { generateTargetingParameters(’is_preview’, ”1”); generateTargetingParameters(”url_params”, ”test”); } // Set general ad settings if (enableLazyLoad == true) { googletag.pubads().enableLazyLoad({ fetchMarginPercent: fetchMarginPercent, renderMarginPercent: renderMarginPercent, mobileScaling: mobileScaling }); } if (collapseEmptyDivs == true) { googletag.pubads().collapseEmptyDivs(true); } if (disableInitialLoad == true) { googletag.pubads().disableInitialLoad(); } if (enableSRA == true) { googletag.pubads().enableSingleRequest(); }googletag.enableServices(); // Handle notification texts / hide empty ad slots googletag.pubads().addEventListener(’slotRenderEnded’, function(event) { if (event.slot && typeof event.slot.getSlotId === ’function’) { let slotId = event.slot.getSlotId(); if (slotId && typeof slotId.getDomId === ’function’) { let domId = slotId.getDomId(); if (domId && document.getElementById(domId)) { let element = document.getElementById(domId); let wrapper = element.parentElement; // Handle filled ad request if (!event.isEmpty) { let iframe = document.querySelector(”#”+domId+” > [id^=google_ads_iframe_] > iframe”); if (iframe) { // Accessibility: remove landmarks iframe.removeAttribute(”role”); } // Ad labels and skip links if (wrapper && !(event.slot && typeof event.slot.getOutOfPage === ’function’ && event.slot.getOutOfPage() === true)) { function handleLabelsAndSkipLinks() { let elementStyle = window.getComputedStyle(element); if (wrapper.offsetHeight – (parseInt(elementStyle.marginTop, 10) + parseInt(elementStyle.marginBottom, 10)) > 100) { let adSlotKey = domId.replace(adSlotPrefix, ”); let adUnit = gamAdUnits[adSlotKey]; let currentConf = null; let adLabels = false; if (adUnit) { if (pageType === ’article’) { currentConf = adUnit.article_config; } else if (pageType === ’section’) { currentConf = adUnit.section_config; } adLabels = currentConf.show_labels; // If paywall is shown to user, use paywall specific config if (pageType === ’article’ && !userHasPermission && typeof currentConf.paywall_config !== ’undefined’ && currentConf.paywall_config.show_labels !== ’undefined’ && !isPreview) { adLabels = currentConf.paywall_config.show_labels; } else if (isComicArticle == true && typeof currentConf.comic_config !== ’undefined’ && currentConf.comic_config.show_labels !== ’undefined’) { adLabels = currentConf.comic_config.show_labels; } } // Show labels if necessary if (adLabels && !wrapper.querySelector(”.diks-display-ad__notice”)) { var adNoticeTop = document.createElement(”div”); var adNoticeBottom = document.createElement(”div”); adNoticeTop.classList.add(”diks-display-ad__notice”, ”diks-display-ad__notice–before”); adNoticeBottom.classList.add(”diks-display-ad__notice”, ”diks-display-ad__notice–after”); let noticeTextTop = document.createTextNode(inContentAdTextTop); let noticeTextBottom = document.createTextNode(inContentAdTextBottom); adNoticeTop.appendChild(noticeTextTop); adNoticeBottom.appendChild(noticeTextBottom); // Render notification texts for a single ad wrapper.insertBefore(adNoticeTop, wrapper.childNodes[0]); wrapper.insertBefore(adNoticeBottom, null); } // Create a skip link if (adUnit && adUnit.type === ’normal’ && skipLinksEnabled && !wrapper.querySelector(”.diks-display-ad__skip-link”)) { // Render render skip for a single ad let skipLinkStartElement = document.createElement(’a’); let skipLinkText = document.createTextNode(’Ohita mainos’); let skipLinkEndElement = document.createElement(’div’); let skipLinkEndElementId = ’diks-skip-link-’ + domId; skipLinkStartElement.appendChild(skipLinkText); skipLinkStartElement.classList.add(’diks-display-ad__skip-link’, ’diks-button’, ’diks-button–primary’, ’diks-a11y__screen-reader’, ’diks-a11y__screen-reader–focusable’); skipLinkStartElement.href = ’#’ + skipLinkEndElementId; skipLinkEndElement.id = skipLinkEndElementId; wrapper.insertBefore(skipLinkStartElement, wrapper.childNodes[0]); wrapper.insertBefore(skipLinkEndElement, null); } if (!adLabels) { element.classList.add(”diks-display-ad__unit–with-margin”); } } else { element.classList.remove(”diks-display-ad__unit–with-margin”); } } handleLabelsAndSkipLinks(); let resizeObserver = new ResizeObserver(function(entries) { entries.forEach(function(entry) { handleLabelsAndSkipLinks(); }); }); resizeObserver.observe(wrapper); } } else if (wrapper) { // Hide wrapper when ad request is unfilled console.log(”hiding: ”+domId); wrapper.style.display = ”none”; } } } } }); window.adSetupReady = true; displayAdsIfPossible(); }; }); }(window.googletag = window.googletag || {})); ]]> Omat tiedot’); var logoutForm = stringToHTML(’

  • ’); linksElement.insertBefore(myAccountLink, linksElement.childNodes[0]); linksElement.appendChild(logoutForm); } var htmlElement = document.querySelector(’.diks-user–is-not-logged-in’); // Class is set to main html element if (htmlElement) { htmlElement.classList.replace(’diks-user–is-not-logged-in’, ’diks-user–is-logged-in’); } } var showMenuLinksForLoggedOutUser = function(data) { var linksElement = document.querySelector(’#diks-sso-links’); if (linksElement) { var loginLink = stringToHTML(’
  • Kirjaudu’); linksElement.insertBefore(loginLink, linksElement.childNodes[0]); } } var showCompanyUserRelatedItems = function(data) { var permissions = data.company_subscription.permissions; if (Array.isArray(permissions)) { if (permissions.includes(”paywall”) || permissions.includes(”replica”)) { var htmlElement = document.querySelector(’.diks-user–is-not-company-subscriber’); // Class is set to main html element if (htmlElement) { htmlElement.classList.replace(’diks-user–is-not-company-subscriber’, ’diks-user–is-company-subscriber’); } } } } document.addEventListener(”DOMContentLoaded”, function() { JankkoSSOClient.getSession().then(function(data) { if (data) { if (data.company_subscription) { showCompanyUserRelatedItems(data); } if (data.user) { showUserRelatedItems(data.user); } else { showMenuLinksForLoggedOutUser(); } } else { showMenuLinksForLoggedOutUser(); } }).catch(function(error) { showMenuLinksForLoggedOutUser(); }); }); } }()); ////////////////////////////////////////////////////////////////////////////////////////// // NAVIGATIONS ////////////////////////////////////////////////////////////////////////////////////////// // Toggle icon inside a toggler function toggleTogglerIcon(toggler) { togglerIcons = toggler.querySelectorAll(’.diks-icon’); if ( togglerIcons.length > 1 ) { for (var j= 0; j 767) { var waypointFrontpageLogo = new Waypoint({ element: frontpageLogo, handler: function() { if (mainLogo.classList.contains(”diks-header__main-logo-link–hidden”)) { mainLogo.classList.remove(”diks-header__main-logo-link–hidden”); } else { mainLogo.classList.add(”diks-header__main-logo-link–hidden”); } } }); } } ]]>
  • Johanna Ärje on tällä hetkellä äitiyslomalla, mutta julkaisee entiseen tapaan joka kuukausi uuden neulemallin. Ohjeet hän suunnitteli ennen vauvan syntymää. Timo Mustalampi

    Anna Johanna Designs Oy:n neulemalleista yli kaksi kolmasosaa menee ulkomaisille asiakkaille. Ostajakunta on lähinnä isoissa englanninkielisissä maissa.

    Pia Tervoja

    7.10.2024 19:25

    Pia Tervoja

    Neulesuunnittelija Johanna Ärje, 39, jätti viitisen vuotta sitten tilastotieteilijän tutkijauran.

    Haluatko lukea koko jutun?

    Tilaa digi ja pääset lukemaan kaikki Hämeen Sanomien sisällöt.

    Tilaa 6 kk 4,90 €/kk Tilaa 2 kk 15 €/kk

    • Hameensanomat.fi-verkkopalvelun rajaton käyttöoikeus vuoden jokaisena päivänä
    • Näköislehti
    • Mobiilisovelluksen käyttöoikeus (iOS ja Android)
    • Lukuoikeus sinulle ja kolmelle perheenjäsenellesi

    Mainos: Rusta

    Mainos: Rusta

    Tänään 0:00

    1) { document.querySelector(’html’).classList.add(’diks-user-agent–ios’); } ]]> this.handleMouseDown(e)); this.slider.addEventListener(’mouseleave’, () => this.handleMouseLeave()); this.slider.addEventListener(’mouseup’, () => this.handleMouseUp()); this.slider.addEventListener(’mousemove’, (e) => this.handleMouseMove(e)); this.slider.addEventListener(’click’, (e) => this.handleClick(e)); } handleMouseDown(e) { this.isDown = true; this.slider.classList.add(’diks-navigation–draggable-active’); this.startX = e.pageX – this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.preventClick = false; } handleMouseLeave() { this.isDown = false; this.slider.classList.remove(’diks-navigation–draggable-active’); } handleMouseUp() { this.isDown = false; this.slider.classList.remove(’diks-navigation–draggable-active’); } handleMouseMove(e) { if (!this.isDown) return; e.preventDefault(); const x = e.pageX – this.slider.offsetLeft; const walk = (x – this.startX) * 3; //scroll-fast this.slider.scrollLeft = this.scrollLeft – walk; this.preventClick = true; } handleClick(e) { if (this.preventClick) { e.preventDefault(); } } } // Set the draggable navs (multiple) to handle their scrollbars let scrollableNavs = document.querySelectorAll(’.diks-navigation–draggable’); // Make draggable navigation draggable if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { new HorizontalScrollDragger(element); }); } // Handle has-scrollbars class adding and removing function handleScrollableNavScrollbars(scrollableNavElement) { // Debugging: console.log(”Scroll width: ” + scrollableNavElement.scrollWidth + ” & client width: ” + scrollableNavElement.clientWidth); // If scrollable area is wider (scrollWidth) than what’s visible (clientWidth) the element has scrollbars if ( scrollableNavElement.scrollWidth > scrollableNavElement.clientWidth ) { scrollableNavElement.classList.add(’diks-navigation–draggable-has-scrollbars’); scrollableNavElement.parentElement.classList.add(’diks-navigation-wrapper–has-scrollbars’); } // Remove the has-scrollbars class if it exists but shouldn’t (element does not have scrollbars) else if ( scrollableNavElement.classList.contains(’diks-navigation–draggable-has-scrollbars’) ) { scrollableNavElement.classList.remove(’diks-navigation–draggable-has-scrollbars’); scrollableNavElement.parentElement.classList.remove(’diks-navigation-wrapper–has-scrollbars’); } } // If scrollable nav exists add (or remove) necessary classes // ”DOMContentLoaded” does not wait for styles to load and styles affect the size of the scrollable nav directly so we have to use ”load” instead window.addEventListener(’load’, (event) => { if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { handleScrollableNavScrollbars(element); }); } }); // Check if scrollable nav has scrollbar window.addEventListener(’resize’, function(event){ if ( scrollableNavs ) { scrollableNavs.forEach(function(element) { handleScrollableNavScrollbars(element); }); } }); ]]> 1 ? true : false); // Initialize lightGallery(gallery, { autoplay: galleryHasMultipleImages, counter: galleryHasMultipleImages, download: false, exThumbImage: thumbnailSource, hideControlOnEnd: true, licenseKey: ”96BAAD7E-3BF04397-BBB55AE3-6D5A2C0B”, loop: false, plugins: [lgAutoplay, lgFullscreen, lgThumbnail, lgZoom], selector: ’.diks-gallery__link’, mobileSettings: { controls: true, showCloseIcon: true }, strings: { closeGallery: ’Sulje galleria’, toggleMaximize: ’Maksimointi’, previousSlide: ’Edellinen’, nextSlide: ’Seuraava’, download: ’Lataa’, playVideo: ’Katso video’, mediaLoadingFailed: ’Sisällön lataus epäonnistui’, }, autoplayPluginStrings: { toggleAutoplay: ’Automaattinen toisto’ }, fullscreenPluginStrings: { toggleFullscreen: ’Kokoruututila’ }, thumbnailPluginStrings: { toggleThumbnails: ’Pikkukuvat’ }, zoomPluginStrings: { zoomIn: ’Suurenna’, zoomOut: ’Pienennä’, viewActualSize: ’Näytä täysikokoisena’ } }); // After closing LightGallery return focus to the image link that opened the gallery gallery.addEventListener(’lgAfterClose’, () => { galleryImageLinks[0].focus(); }); }); ]]> { // Stash the event so it can be triggered later deferredPrompt = e; const enablePrompt = 0; if(!enablePrompt) { e.preventDefault(); } // Update the UI to notify the user they can install PWA pwaShowInstallationOption(); // Handle installation document.querySelectorAll(’.js-diks-apps-pwa-installation-button’).forEach(function(button) { button.addEventListener(’click’, (e) => { // Show the prompt deferredPrompt.prompt(); // Wait for user to respond deferredPrompt.userChoice.then((choiceResult) => { if (choiceResult.outcome === ’accepted’) { console.log(’PWA: Installed (prompt)’); dataLayer.push({ ’event’: ’PWA.installation’, ’eventData’: ’success’ }); } else { console.log(’PWA: User dismissed installation prompt’); dataLayer.push({ ’event’: ’PWA.installation’, ’eventData’: ’canceled’ }); } deferredPrompt = null; }); }); }); }); // iOS installation process (show instructions modal) if (!navigator.standalone) { var userAgent = navigator.userAgent.toLowerCase(); var iPhoneUser = (/iphone/.test(userAgent)); var iPadUser = (/ipad/.test(userAgent) || (/macintosh/.test(userAgent) && navigator.maxTouchPoints > 1)); var safariUser = (/^(?!.*(brave|chrome|crios|duckduckgo|edgeios|firefox|fxios|opios|ucbrowser|yabrowser)).*safari.*$/.test(userAgent)); if (safariUser && (iPhoneUser || iPadUser)) { // Update the UI to notify the user they can install PWA pwaShowInstallationOption(); // Instructions var modals = document.querySelectorAll(’.js-diks-apps-pwa-ios-instructions’).forEach(function(element) { // Position on screen based on device if (iPhoneUser) { element.classList.add(’diks-apps__pwa-ios-modal–bottom’); } else if (iPadUser) { element.classList.add(’diks-apps__pwa-ios-modal–top’); } }); // Handle modal instructions from installation button document.querySelectorAll(’.js-diks-apps-pwa-installation-button’).forEach(function(button) { button.addEventListener(’click’, (e) => { // Show first modal document.querySelector(’.js-diks-apps-pwa-ios-instructions’).classList.toggle(’diks-apps__pwa-ios-modal–is-visible’); dataLayer.push({ ’event’: ’PWA.instructions.shown’, ’eventData’: ’iOS’ }); }); }); } } ]]>

    Lähde

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *