/** * 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); } ”Kan ni se till att det finns kyld Risifrutti i New York på fredag?” | IHM

”Kan ni se till att det finns kyld Risifrutti i New York på fredag?”

Ja, det är en av alla frågor som Ryska Posten besvarar med; Ja, visst, absolut, inga problem! 

Sedan en tid tillbaka är receptionen på IHM i Stockholm bemannad av Ryska Posten så vi bestämde oss för att ta reda på lite mer, för visst blir man nyfiken på ett företagsnamn som ger associationer till de första trevande försöken in i vuxenvärlden, och inställningen att allt går om man vill?!

Vi stämmer träff, i deras lokaler vid Gärdet, med Rakel Lilja, VD för bemanningsdelen, för att stilla vår nyfikenhet. Något för tidigt på plats så möts jag av en entusiastisk receptionist, vid ett skrivbord som mer liknar ett pingisbord i storlek, som visar mig till rätta och hämtar Rakel.

Rakel dyker upp och startar med att visa runt lite i lokalerna, det är stora lokaler med mycket folk och en härlig puls. Det är lunchtid och många håller på att förbereda sin lunch, några spelar pingis men det är också full aktivitet på de olika kontoren. Cykelbud som springer in, telefoner som ringer, saker som hämtas och lämnas, skön härlig energi och enligt min egen uppskattning så finns det ingen över 30 år i bolaget. Vi slår oss ner i ett av konferensrummet där receptionisten dukat upp en liten lunch och intervjun med Rakel kan börja.

– Hej Rakel, kul att vara här! Vad är Ryska Posten?

– Hej, kul att du ville komma! Ryska Posten är ett kontorsservice företag som startade som en bud- och fix-firma 1998 av Daniel Pilotti och Kristoffer Jeansson. Deras affärsidé redan från början var att Ryska Posten skulle bli bäst på att fixa allt vad innerstadens kontor kan tänkas behöva, dygnet runt. Den inställningen präglar oss fortfarande och idag har vi breddat oss för att bli ett fullserviceföretag.

– Inom vilka områden verkar ni? 

– Idag har vi fyra områden som är etablerade och ett rätt nystartat område. Bud, Bemanning, Event, Skafferi och Alltiallo som slog upp portarna för några månader sedan. Uppdragen har vuxit och utvidgats succesivt sedan starten, då vi höll oss i Stockholms innerstad, till att idag kunna leverera service över hela världen.

– Alltiallo låter spännande!

– Ja, det är ett område som vi tror mycket på. Vi ser dagligen bevis på att kontor behöver en alltiallo då och då, det är hyllor som ska sättas upp, möbler som ska monteras med mera. När våra bud eller receptionister är ute hos kunderna så får de ofta frågan om vi har någon kontakt som kan fixa den här typen av saker, så det känns som en naturlig del för ett modernt kontorsservice företag att erbjuda.

– Ja, jag skulle behöva en Alltiallo själv! 

– Ja, det är det många som behöver men just nu inriktar vi oss på företag :-) 

– Hur många är det som jobbar på Ryska Posten?

– Idag är vi någonstans mellan 400 och 450 personer, där bemanning står för drygt 200. Vi har vuxit rejält på bemanningssidan sedan starten 2012, det känns riktigt bra!

– Ja, ingen dålig tillväxt. Hur ser strategin ut, prisar ni in er på marknaden?

– Nej, vi ser ingen anledning att försöka vara billigast, vi försöker istället att vara bäst, för nöjda kunder ger fler nöjda kunder. På bemanningssidan så erbjuder vi, som de enda på marknaden, expressbemanning, det innebär att företag innanför tullarna har en duktig person på plats inom 60 minuter från att de har ringt. Den tjänsten kostar naturligtvis lite mer, för vi är noga med att betala alla som har jour även om de inte får uppdrag, vi är, och vill fortsätta att vara, ett humant bolag på en marknad som kanske inte alla gånger är det.

Dessutom har vi en pool av duktiga medarbetare som löser tillfällig och lite längre bemanning på olika företag.

– Är det där vi på IHM i Stockholm kommer in?

– Nej, det är vår outsourcing-del, vi sköter och bemannar er reception helt och hållet. En tjänst som ökar hela tiden, mycket på grund av att vi har ett bra rykte.

– Du poängterar flera gånger att ni har väldigt duktig personal som brinner för den här typen av jobb, hur blir de så duktiga?

– Det här handlar om flera faktorer. Naturligtvis är urvalsprocessen väldigt viktig, och vi är ständigt på jakt efter fler hungriga medarbetare, men vi ser också till att ha bra internutbildning så att man känner att man utvecklas hela tiden. Vår företagskultur är också en väldigt viktig del, man känner väldigt tydligt att vi jobbar med en gemensam agenda, att bli bäst. Och frågar du mig, så är vi bäst. Vi är tillgängliga 24-7 för våra kunder och vi säger alltid ja till att fixa det som behövs i vardagen men också att fixa det som kan kännas lite omöjligt. Företagen ska känna att vi är ett riktigt bra fullserviceföretag för allt som händer på ett kontor. 

– Men om ni har så duktig personal som du säger, riskerar ni inte att tappa många till fasta tjänster ute på bolagen?

– Så är det naturligtvis, men istället för att se det som ett problem, som branschen ofta gör, så ser vi det som en möjlighet. Vi erbjuder företagen rekryteringshjälp och vi vill att våra medarbetare ska ha möjlighet att fortsätta sina karriärer. Vi vill inte låsa in våra kunder, eller våra anställda, i en massa avtal, vi vill ha en bra dialog och se till att det blir en bra lösning för alla parter.

– Så hur ser processen ut om ett företag kontaktar er och vill diskutera hur ni kan hjälpa dem?

– Vår grundinställning är att skapa förtroende genom att de provar oss. Vi kommer ut till kunden och diskuterar igenom deras behov, gör upp en plan och lämnar ett pris på den service de efterfrågar. Tackar de ja till oss så kör vi igång och har en bra dialog under resan så att vi kan skapa det kunden vill uppnå, gärna lite bättre. Vi har inte så mycket standardmallar och avtal som lätt blir hinder i processen utan vi tittar till varje företags behov. Som jag sa innan; Nöjda kunder ger fler nöjda kunder.

– Så, vem är Rakel Lilja  och hur kom du in i företaget?

– Ja, vem är jag :-) Jag är idag 28 år och efter gymnasiet så jobbade jag ett år som uthyrd receptionist, på olika företag i Stockholm, för att få ihop pengar till att göra en långresa. Då bar det iväg till Australien där jag jobbade extra som servitris. När jag kom hem 2007 så sökte jag jobb inom restaurang men såg också att Ryska Posten sökte fler bud, jag sökte jobbet men fick istället jobb i kundtjänst. Jag var lite tveksam för det roliga restauranglivet lockade, men samtidigt så var det en skön känsla på Ryska Posten, så jag tackade ja.

Sex månader senare fick jag möjlighet att utveckla vår globala budservice, vi satt i ett garage med två skrivbord, men det gick bra. Efter ca 1,5 år så kände jag att jag ville utvecklas, och parallellt med jobbet så läste jag först en introduktionskurs i kommunikation för att sedan läsa ekonomi på Stockholms universitet. 

Under den här tiden så startade vi upp event-delen på Ryska Posten, så det var fullt upp. I mitt examensarbete så gjorde jag ett affärsutvecklingsprojekt kring bemanning som vi sedan startade upp 2012 på Ryska Posten, och där jag idag är VD.

– Vad är din styrka som VD?

– Jättesvårt att säga själv, men jag är stolt över att ha kunnat förmedla företagets vi-känsla. Vi är en platt organisation där alla känner ansvar och gör vad som krävs när det är toppar, inklusive VD:n.

– Och vad gör man då när det är toppar?

– Då kavlar vi upp ärmarna och ger allt, vi ringer alla vi känner, och jag menar alla, för att se om de kan hjälpa till med att till exempel packa eller flytta saker. Det är fler än en, bland nära och kära, som svarar med lite skräckblandad förtjusning när vi ringer :-)

– Och jag förstår att det är många kul och lite konstiga uppdrag som dykt upp genom åren, kan du nämna något som du själv fixat?

– Oj, hur lång tid har vi på oss :-) På budsidan kan vad som helst hända, och i början av min tid på Ryska Posten Bud, så fick jag en kväll ett samtal från en företagsledare som glömt sin mobiltelefon i Sverige och behövde ha över den till Washington. Jag svarade att det fixar vi, gav tre olika alternativ tidsmässigt till tre olika prisnivåer. Han svarade att han ville ha det snabbaste alternativet. Så…

…jag åkte och hämtade telefonen och begav mig till Arlanda samtidigt som jag bokade plats på nästa flyg till New York och vidare till Washington, in i en taxi och mindre än 12 timmar senare så ringer jag på hans dörr, och ingen öppnar.

– Va?

– Ja , jag ringer naturligtvis på igen och kollar in genom fönstret. Till slut så hör jag någon som rör sig där inne och en liten pojk tittar ut genom rutan. Jag förstår att han inte får öppna dörren för främlingar, så jag förklarar varför jag är där, lägger mobilen på trappan och backar tillbaka en bra bit. Han öppnar och säger att pappa är i duschen men att han ska ge honom mobilen. Jag tackar och ber att pappa ska ringa och bekräfta att han fått den. Så var det dags att åka hem, dock inte lika bråttom :-) 

Kanske inte så konstigt uppdrag, men ett uppdrag som visar vår ambitionsnivå.

– Ja, verkligen, och din ambition! Var är Rakel om fem år?

– Jag är här! Vi är ett företag i ständig förändring och uppdatering så det kommer att dyka upp många spännande utmaningar under kommande år.

– Och var är Ryska Posten om fem år?

– Då är vi några gånger större, minst. För ett tag sedan började vi etablera vår bemanning i Göteborg, sedan blir det Oslo och resan fortsätter. Vi kommer att ha många nya affärsområden och vi kommer att uppfattas som det ledande företaget inom kontorsservice.

 – Det låter som ni har en spännande framtid och det var jättekul att få träffa dig, tack!

– Tack, ska bli spännande att läsa vad det blir av den här intervjun.

På vägen ut så noterar jag en stor noshörning i plast mitt i lunchrummet, jag frågar Rakel om det är något som ska budas iväg. Hennes svar sammanfattar mycket av min känsla kring Ryska Posten.

– Nej, den har vi redan budat hit. Det var en galakväll med auktion på Clarion Post Hotel i Göteborg till förmån för utrotningshotade djur, "Save the Rhino 2014”. Det var fem olika konstnärer som fått i uppdrag att smycka var sin noshörning i gjuten plast i naturlig storlek, vi ropade in tre av dessa. Denna heter ”Karma is a bitch” och gjordes av Christin Björk, visst är den fin!

Ja, den är riktigt fin, och det känns som en bra symbol för ett fint ungt företag, med inställningen; Ja, visst, absolut, inga problem!

Aludd 

28 oktober 2015