/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $settings = &drupal_static(__FUNCTION__, array()); if (!isset($settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… if ( ( // If this URI has a host, and… isset($parts['host']) && // The host is different from the current host… $parts['host'] !== $base_url_parts['host'] ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; // Let's also normalize the server doc root. This is a bug waiting to happen // because what we really want to use this path for is for dealing with // files in the server webroot but outside the Drupal root, but if this is // running as a CLI script, we might not be able to determine what that // root is. In that case, we'll use the Drupal root. // @see http://drupal.org/node/1780398 $filter->settings['docroot'] = (drupal_is_cli() || !isset($_SERVER) || !isset($_SERVER['DOCUMENT_ROOT'])) ? DRUPAL_ROOT : $_SERVER['DOCUMENT_ROOT']; $settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $settings['current_settings'] = &$settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~(href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $settings later and not have the changes be "permanent." $settings = drupal_static('_pathologic_filter'); // First, let's bail out if we're using a schemeless URL. // @see http://drupal.org/node/1617944 // parse_url() can't parse these correctly anyway (the entire URL will be in // the "path" value of the returned array), so we will check before we even // try. if (strpos($matches[2], '//') === 0) { return $matches[0]; } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE // If there's a scheme part and it doesn't look useful, bail out. // "files" and "internal" are for Path Filter compatibility. || (isset($parts['scheme']) && !in_array($parts['scheme'], array('http', 'https', 'files', 'internal'))) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. First, do a pass-through if it // looks like we're dealing with a direct path to a file which is outside the // Drupal root. Use realpath() and the server's (?) docroot to iron out // wrinkles to the file's actual path. // @see http://drupal.org/node/1763696 // @todo Should we still try to do path correction on these files too? $filepath = realpath($settings['current_settings']['docroot'] . '/' . $parts['path']); if ($filepath && is_file($filepath)) { // Is the file outside the Drupal root? if (strpos($filepath, DRUPAL_ROOT) !== 0) { return $matches[0]; } else { // Linking to a file inside the Drupal root. Okay. $settings['is_file'] = TRUE; } } elseif (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $settings['is_file'] = TRUE; } else { $settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } } // Okay, if here, we either found something, or we hit the end of the loop. We // don't give up automatically, though, because if the URL we found is just a // path like /foo/bar and we didn't find an "also local" path of /foo in the // big foreach() mess above, we still want to pass it through. if (!$found && !(isset($parts['path']) && !isset($parts['host']))) { return $matches[0]; } // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // Let's see if we can split off a language prefix from the path. if (!$settings['is_file']) { if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } else { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. // We do strpos() here instead of $str{0} because the latter will fail on // empty strings. if (strpos($parts['path'], '/') === 0) { $parts['path'] = substr($parts['path'], 1); } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are enabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($settings['is_file'])) { $settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($settings['is_file'] && !$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return "{$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Siktar högt bland raketer och ballonger! | IHM

Siktar högt bland raketer och ballonger!

Dags för ännu ett spännande möte med en av våra alumner på IHM. Denna gången tar vi oss norrut, till den s.k. Robotbyn Vidsel, eller Norrbottens närmaste by, som de benämner sig själva. Här hittar vi Fredrik Schäder, 38 år från Örnsköldsvik, med fru Anette och barnen William och Filip.

Fredrik, som pendlar från hemmet i Luleå till arbetsplatsen i Vidsel, har idag titeln President Aerospace Test Services at SSC – Swedish Space Corporation, redan där, med mitt pojkaktiga intresse för rymden, går jag igång. Men det visar sig att det finns mer spännande tankar i bagaget.

– Hej Fredrik, ska bli väldigt spännande att höra om ditt yrke, men vi börjar lite tidigare för att få en bild av vem du är, så hur började du din yrkesbana?

– Hej, att bli intervjuad känns riktigt spännande. Angående min yrkesbana så måste jag nog säga att den började under min militärtjänstgöring som fältkock. Kockyrket i sig lockade en del, men det var framförallt en otroligt rolig och nyttig tid för mig som person. När det var dags för mig att göra lumpen så skulle jag säga att jag, som många i den åldern, saknade riktiga visioner, tankar om framtiden och självkänsla. Det här blev en nyttig tid för mig, och det är där och då mitt intresse för ledarskap startar. Jag gjorde bra ifrån mig och kände att jag fick uppskattning från flera håll, självkänslan ökade och mina tankar om en framtid där jag kunde utöva ett bra ledarskap tog fart, inom vilket område var jag mer osäker på.

Efter lumpen läste jag tekniskt basår, som sedan ledde mig till Umeå Universitet och Miljö & Hälsoskyddsprogrammet, 4 år. En spännande utbildning som i korthet handlar om hur vi kan påverka till en mer hållbar samhällsutveckling. Här träffade jag också min klippa i livet, min fru.

– Och vad blev du efter den utbildningen?

– Det började med praktik redan under utbildningen på Skövde kommun, där jag sedan blev Miljöinspektör och gjorde bullermätningar på allt från förskolor till konserter. Samtidigt läste jag ledarskap på Skövde Högskola på halvfart. Tog sedan ytterligare en examen i ekonomi, med ledarskap som bas, vid Karlstads universitet.

– Hur länge fortsatte du med bullermätningarna?

– Jag fick tyvärr tinnitus, och då kändes det inte som att bullermätningar var något som jag skulle hålla på med längre. Efter två år dök det upp ett jobb i tidningen, där Försvarsmakten sökte en Miljösamordnare för södra Sverige, befattningen tillhörde Boden men var placerad i Skövde. Jag förstod inte riktigt vad det betydde men perfekt, tänkte jag, Försvarsmakten är ju duktiga på ledarskap så jag sökte jobbet och fick det!

– Så ni blev kvar i Skövde?

– Nästan två år till blev det. Min chef frågade mig vad jag ville göra i framtiden, och jag svarade att jag gärna skulle vilja ha hans jobb. Efter en tid fick jag frågan om att bli Ställföreträdande Enhets- och Miljöchef, men då skulle vi behöva flytta norrut eftersom chefsjobbet var placerat i Boden. Sagt och gjort så flyttade vi till Luleå. Jag blev kvar i försvaret i nio år, varav åtta som civilanställdchef på olika befattningar. Min karriär vid försvaret slutade med att jag rationaliserade bort mig själv 2014. Sedan blev det en kort sejour som enhetschef på Försäkringskassan innan jag i november 2014 fick mitt nuvarande jobb.

Det bästa som har hänt min karriär är IHM 

– Under åren i Försvarsmakten så började du också på IHM, berätta!

– Det stämmer, det är skillnad på att vara civilanställd inom Försvarsmakten mot att vara officer, och för att fortsätta min kompetensutveckling fick jag tipset om att läsa på IHM, som samarbetar med försvarsmakten inom ledarskap. Så 2012 läste jag IHM Affärsinriktat Ledarskap och gick även med i Mentorprogrammet.

– Och hur upplevde du detta?

– Jag kunde inte riktigt tro att det var så bra, men jag fick ett annat mindset som hjälpte mig mycket. Både jag och min omgivning kände att jag förändrades till det bättre, jag öppnade mig mer och fick samtidigt mycket mer tillbaka både i yrkeslivet och privat. Under den här processen hade jag också ett utmärkt stöd i Jan Ulin i Mentorprogrammet. 

Jag kände att jag vågade mer i min yrkesroll, och min känsla inför nya utmaningar blev mer positiv. Ganska direkt efter detta hoppade jag på IHM Verksamhetsutvecklande ledarskap, och det blev en milstolpe i mitt liv. Vår handledare, Ulf Rosenberg Bertilsson, var verkligen superbra, och utbildningen gav mig massor av insikter om varför jag är som jag är. Bitarna föll på plats helt enkelt, och jag hittade mig själv, tidigare frustration försvann. Jag blev lugnare och lärde mig att göra saker av rätt anledning. Jag upplever att min omgivning, både i yrket och privat, uppskattade denna förändring väldigt mycket. 

– Om du tänker tillbaka lite, var det hit den där unga killen som var kock i lumpen siktade?

– Det måste jag svara ett stort JA på, även om jag då inte visste hur jag skulle ta mig hit. Jag drömde om att bli en god ledare, och jag har nog många gånger trott att jag var det, men det jag insåg tydligt nu, var att jag behövde jobba väldigt mycket mer med mig själv. Det gör jag hela tiden nu, och jag hoppas att mina medarbetare märker en positiv skillnad.

– Och 2014 läste du IHM Strategisk Ledning, vad gav den som du inte hade sedan tidigare?

– I korthet kan man säga att den kompletterade väldigt mycket av mina tidigare utbildningar, hur hänger ett utvecklande ledarskap ihop med ett strategiskt osv. Det handlar om många saker, som på pappret kan kännas självklara, men som i den dagliga verksamheten lätt glöms bort; tydlighet i mitt ansvar gentemot medarbetarna, ansvarsfördelning och i grunden kan det formuleras så enkelt som att jag, genom mitt arbete, ska skapa förutsättningar för mina chefer att kunna göra ett bra jobb. 

– Det känns onekligen som du har fått ut den nyttan du eftersträvat med IHM?

– Ja, verkligen! Jag har ganska många universitetspoäng genom åren, men det bästa som hänt mig och min karriär är IHM. Så bra att jag har skickat alla i min ledningsgrupp att gå Verksamhetsutvecklande ledarskap. Ett tips från mig är att ni startar upp IHM i Umeå också, med tanke på behovet som finns, och det stora upptagningsområdet ni skulle nå.   

– Det ska jag förmedla, nu måste vi över till lite mer om Swedish Space Corporation, vad är det?

Större än Globen

– SSC, Swedish Space Corporation, tidigare Svenska Rymdaktiebolaget, är ett statligt aktiebolag som hjälper rymdorganisationer, företag, andra kommersiella aktörer och forskningsinstitut att få tillgång till rymden till nytta för jorden. Idag står forskningen, via bl.a. universitet, för ca 50% och 50% är kommersiell verksamhet.

Satellite Management Services tillhandahåller tjänster inom satellitdrift och satellitkommunikation av egna och partnerägda markstationer. Vi är en del av världens största antenn-nätverk runt jorden.

Science Services utvecklar raket och ballongsystem inklusive experimentmoduler för forskning i tyngdlöshet. Vi sänder upp raketer och ballonger från Esrange Space Center i Kiruna.

Engineering Services tillhandahåller teknik- och driftstjänster för satellitprojekt och bemannade rymdprogram.

Aerospace Test Services bemannar och utvecklar de tekniska system som finns vid FMV Provplats i Vidsel som är den största provplatsen över land i norra Europa. Vi tillhandahåller avancerade tjänster för test och utvärdering av flygande farkoster. 

– Du pratar här om ballonger, är det typ väderballonger?

– Det kan det naturligtvis vara, det beror på vad forskarna eller någon annan part är ute efter. Men vi har som exempel skickat upp ballonger som är dubbelt så stora som Globen när behovet har funnits. 

– Oj, då talar vi om riktiga ballonger, Globen är ju världens största sfäriska byggnad om jag minns rätt.

– Ja, men det handlar även om mindre storlek på ballongerna. Nyligen var JAXA hos oss på Esrange (Japan Aerospace Exploration Agency) och genomförde dropptester av en prototyp i mindre skala av ett framtida överljuds passagerar plan. Ett dropptest kan vara att man transporterar upp föremål till olika höjder och släpper ner dem för att se hur föremålen reagerar. I JAXAs fall var det ett antal ballonger med ljudmätare som mätte reaktionen som blev när planet passerade ljudvallen. I ett sådant projekt finns det mycket som kan gå fel men allt fungerade perfekt! Jag är väldigt imponerad av alla som var involverade, sen gäller det att man har vädrets makter på sin sida också vilket vi hade då.

– Då kommer jag att tänka på Google-loon, ett ballongnätverk över hela jordklotet som ska förse alla med bra uppkoppling, är ni inblandade i det?

– Nej det är vi inte i dagsläget men området ”New Space” är väldigt spännande, här jobbar många olika aktörer på att skapa förutsättningar för bl.a. kommunikation, som bara för några år sedan sågs som omöjliga, riktigt spännande. Facebook Drones är ett liknande projekt, där drönare ligger runt jorden och ger tillgång till information via internet. Inom ”New Space” kommer vi se många revolutionerande lösningar i framtiden, det handlar inte bara om kommunikation, energiproblematiken kan man nog också tänka sig att det kommer att göras försök.

– Och rymdturismen, hur långt bort är det?

– Ja du, Richard Bransons projekt Virgin Galactic säljer väl redan biljetter för 200 000 dollar per resenär, och vad jag har läst så finns det personer som skrivit upp sig på den listan, vilket säger en hel del.

– Till sist, hur är det när en raket skjuts upp från Esrange, är det som vi sett på TV?

– Ja, det är verkligen som det vi upplevt i TV! Nedräkningen, förväntan i luften och glädjen när allt går som det ska och raketen skjuter i höjden, helhäftigt!

– Då tackar jag dig, Fredrik, och hoppas att du får en fortsatt spännande karriär som skjuter i höjden, jag kan räkna ner :-)

– Tack själv, då åker vi! 

Aludd

PS Efter intervjun så pratar jag och Fredrik om lite allt möjligt och i den diskussionen berättar Fredrik hur mycket hans fru betytt i hans liv och karriär, som stöd och samtalspartner i med- och motgång. De har blivit ett team på riktigt, och det är insikter som, enligt Fredrik, förtydligades mycket när han läste Verksamhetsutvecklande Ledarskap.

Jag tycker att det är fantastiskt att utbildningen gör att han vågar öppna sig så inför mig som okänd. Jag har sett det några gånger innan, och jag tror verkligen att morgondagens ledare kommer vara något helt annat än jag är van vid i min generation. Jag ser ett spännande Sverige som styrs och utvecklas utifrån emotionella värden, känns bra!

 

2 maj 2016