/** * 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); } Blogginlägg av Ruth Westberg | IHM

Blogginlägg av Ruth Westberg

Ruth Westberg

Ruth är vice VD på SevabConcept, ett automationsbolag som konstruerar, tillverkar, monterar och driftsätter produktionsutrustningar. Har en DHIM examen ifrån IHM och utsågs 2014 till ”Årets unga VD”.

Idag är det en och en halv månad sen vi kom hem ifrån tre veckors semester. Tre veckor i Thailand och Vietnam. Hur fantastiskt härligt vi än har haft det så finns det ingenting som går upp mot att få sova i sin egna säng. Om jag är hemma kär? Ja, galet hemmakär. Men jag tycker samtidigt det är så kul att få uppleva andra länder, med dess kultur och vardag. Jag kommer alltid hem ifrån resor och känner tacksamhet för att jag är född i Sverige. Sverige är ett förbannat bra land. Visst kan en del bli bättre, men i stort så har vi det löjligt bra här. Jag har det löjligt bra här. Med mitt jobb, vårt hus, våra djur, familjen… Man får perspektiv när man reser. Thailand är oerhört olikt Sverige, men om man jämför mot Vietnam, ja då är det plötsligt betydligt mer likt. I Vietnam är det galet. Vi var några dagar i Hanoi. Bodde på ett halv sjabbigt hotell i den gamla delen av stan. Man kan säga att gatorna inte riktigt var anpassade till den mängd trafik som fanns. I Hanoi bor det drygt 6,5mil...

Finns det någon som är det? Nej, eller jo, kanske om man är nykär och hoppar på rosa moln. Då kan personen i fråga man är kär i verka perfekt. Men då är man kanske inte riktigt vid sina sinnes fulla bruk, och jag tror inte man kan hållas ansvarig för sina handlingar då. För ett tag sedan så myntade jag ”Kärleken är inte blind, den är efterbliven”. Jag är rätt nöjd med det uttrycket själv, om man nu får vara nöjd med sig själv. Vissa tycker inte det. Jag är inte en person som någonsin utger mig för att vara perfekt. Snarare tvärt om. Jag vet att jag är rätt bra på en del saker, och att jag är totalt värdelös på andra. Precis som de allra flesta av oss. Ibland blir det fel, ibland blir det rätt. Målet är väl att sakta men säkert bli den bästa versionen av sig själv. Inte ens det kommer vara perfekt.  Jag märker den senaste tiden att fler människor tycker sig kunna ha åsikter om mig som person. Det kanske inte är så konstigt egentligen, jag har ju fått träffa så otroligt många fantasti...

Jag har ju fått möjligheten att berätta om min resa och mina tankar via föreläsningar. Just nu sitter jag på tåget hem ifrån Stockholm och föreläsningen på IHM. Så himla kul. Och skrämmande, men jag gjorde det. En sak jag märker är, att ju mer jag pratar och tänker på mina upplevelser, desto mer lär jag mig om mig själv, och vad jag vill och varför. När man ska fundera på vad som gjort att jag gör det jag gör, blir det helt plötsligt en ny verklighet. Alltså, ja verkligheten har ju funnits innan, men den blir tydligare. Varför gör jag det jag gör? Har jag alltid vetat vad jag vill göra? För några månader sedan hade jag inte vetat riktigt vad jag skulle svarat. Kanske för att det är kul. Inte ett särskilt utvecklande svar. Typ samma som att svara ja på frågan om gräset är grönt på sommaren. Idag efter mängder av timmars tänkande så kan jag utveckla det hela lite mer. Lite. Mer. Jag gör det jag gör, för att jag gillar att driva, förändra och utveckla. Jag gör det jag gör för att jag ä...

Ja, igår var det premiär. Premiär för mig att föreläsa (det låter så fancy, föööreläääsa, men att säga "jag ska tjöta lite änna", känns inte riktigt rätt det heller). Jag skulle prata inför ett gäng ekonomielever på Hulebäcksgymnasiet i Mölnlycke. När jag frågade vad de ville att jag skulle prata om fick jag svaret, typ dig själv, dina framgångar, misslyckanden, tips på hur man gör karriär… Ja jo men visst, för jag är ju facit, lixom. Jag har inte problem att prata inför folk. Så länge som det inte handlar om mig. Då blir det plötsligt personligt.  Och lite jobbigt. Eller rätt så mycket jobbigt. Jag blir den där självkritiska elaka personen som inte längre är min bästa vän, utan min värsta fiende. Jag har jättesvårt att se vad jag har att berätta som skulle vara intressant för någon annan. Kvällen innan när jag försökte göra klart en liten presentation så tänkte jag ”Jooo men visst har jag nog en liten, liten förkylning pågång, jag får vara hemma sjuk imorgon. Synd. Typiskt.” Fast s...

Ja här sitter jag, vid mitt köksbord. Väntar på att larmkillen ska bli klar med att sätta in vårt nya larm. Imorgon åker vi till Thailand. En jul utan mamma och pappa. Hur ska det gå? Jag som är så familjekär och jultokig? Det kommer att gå bra, jag får ju vara med min favoritperson, sola, bada, äta och dricka gott. Här ska njutas. Och vet ni vad, jag tycker verkligen jag är värd det. För fy fasen vilket år 2014 varit. Ett fantastiskt skitår. Jag kommer faktiskt inte på något annat att kalla det. Under året har vi haft med och motgångar, som det liksom alltid är. Just i år tycker jag motgångarna varit lite extra motiga. Vi gick in i 2014 med en ny insikt, och det var att vi var tvungna att välja väg. Vad är vår affärsidé? Varför? Vad ska vi inte göra? Vi har därför gjort stora förändringar på Concept. Förändringar som inneburit att några av gänget fått hitta andra jobb. Hela processen med att komma fram till sådana beslut är väldigt krävande. Man vill, men ändå inte. Är beslutet rät...

Igår träffade jag Arash Gilan, han som jag trodde skulle vinna Årets Unga VD. Jag var faktiskt helt säker. För alltså vilken kille. Men ibland kan även en blind höna hitta ett korn, och jag hade fel. Hur som helst vilken resa han har gjort. Och vilket driv han har. Våra vardagar skiljer sig en hel del, men ändå så är det mycket som är likt. Jag jobbar mycket mer operativt än Arash. Inte så konstig kanske eftersom de är nästan 10ggr så många. Men samtidigt är det likt när det kommer till ledning, visions och strategiarbeten, personal frågor, kundfokus… Man märker att han är en ”media-kille” ut i fingerspetsarna för ”Ni hade behövt fräscha upp er hemsida” var nästan det första han sa. Och javisst har han rätt. Ni kommer kunna se en hel del förändringar på den ganska snart. Jag är på gång, saker går inte alltid så snabbt som jag vill bara… Efter den näsbrännan pratade mycket om de olika utmaningarna man stått och står inför. Hur man hanterat dem och hur man tänker framåt. Vi var rörand...

Jag blir inspirerad och motiverad av att träffa drivna och positiva människor. Jag älskar att få diskutera kring företagandet, tankar och erfarenheter. Varför man gör det man gör, och vad som driver oss. Jag har skrivit det innan, men oavsett hur fantastiska mina Conceptare är, så är jag ytterst deras chef. Hur mycket vi än kan skratta och kämpa tillsammans så kan vi inte ändra på det. (Jo visst om styrelsen tröttnar på mig och ger mig kicken, men än så länge tror jag inte att jag misskött mig så…) För mig är det därför viktigt att också träffa andra, så som min styrelse, mentorer, revisor, andra som driver företag mm som är mer mina arbetskamrater. Efter den fantastiska utmärkelsen har jag i ännu större utsträckning fått möjlighet att träffa inspirerande personer. Jag är så tacksam för det här. För, som sagt det inspirerar mig att bli ännu bättre, vilja ännu mer, sätta högre mål. För några veckor sedan blev jag kontaktat av Pingis Hadenius som ville träffa mig. Hon hade blivit tips...

Ja, alltså världen är full av dem. De ekonomiska genierna. De som har ”så mycket pengar” precis vid löning, men sen är fattigast i stan dagen därpå. Inte sådär någon gång ibland, utan VARJE månad. Hallå? Vad är fel? Någonstans kan jag förstå att vissa månader kostar mer än andra (som typ jul och semestermånaderna), och ibland kan man absolut göra val som inte visade sig vara det smartaste efter ett tag. Men, när man blir äldre så borde man ju sprungit på de där missarna. Och blivit lite mer försiktig? Eller? Hur kul är det att vara pank den 5e? Jag läste någonstans att 20% av alla svenskar blir skuldsatta i samband med jul. Va? En av fem?! En högtid som liksom kommer varje år? Det borde ju inte vara en nyhet för någon? Om man sparar en femhundring i månaden under hela året, så har man en rätt rejäl ”kassa” till julgröt och julklappar. Jag kan också tänka på vad som är meningen med jul, och för mig är det kärlek och gemenskap med familjen. Man kan inte köpa kärlek. (Jo säger säkert n...

Det här med nätverkande, alltså jo men visst, det är ju jättebra. För att skapa kontakter, byta erfarenheter och inspirera varandra. Efter det är jag nöjd. Men det är inte alla som är det. Då börjar deras ”bearbetnings process” där de ska sälja in sitt erbjudande. Missförstå mig inte nu, det klart att det är bra att informera om vem man är och vad man gör, för att eventuellt i framtiden kunna sammanstråla i affärer, jag fattar det. Men, om jag behöver en viss tjänst eller vara så köper jag det när jag behöver det. Vet jag att någon i mitt nätverk har just detta, så är valet ofta att handla av eller genom denne. Fram till dess: SLUTA KRÄNGA GREJJER! Jag kan inte ha femtioelva reklamare, trettiofem coacher, åttiofyra telefonlösningsleverantörer… Alltså på riktigt? Jag vet att jag inte är den ende som är förbaskat trött på det här. När jag är med i nätverk är det för att lära känna intressanta människor. Människor som kan inspirera mig. Som jag förhoppningsvis kan inspirera. Varför är ...

De som känner mig vet att jag är den ständiga tidsoptimisten. Obotliga tidsoptimisten. I vissa fall är det positivt, i andra motsatsen. Jag avskyr att vara ute i sista stund med underlag, rapporter etc och är oftast väl förberedd. Jag tjatar på mina Conceptare att det är bättre att köra på i början, för att säkert hinna klart, än att ta det lugnt i början och få jobba halvt ihjäl sig i slutet. Jag skulle aldrig vara sen med en inlämning, en offert eller en rapport. Jag älskar att planera i stort. Men sen finns det annat där jag alltid sladdar in i sista sekund. Som tex till träningen, eller några minuter sent till middagar, kalas, fikor… ja ni förstår. Jag är inte alls lika dålig på tider när det kommer till mitt jobb och möten som jag är privat. Vilket är tur. Jag tror alltid att jag ska hinna lite mer än vad jag kanske gör, och att det går att köra in några minuter på vägen. Jag tror också ofta att saker går fortare än vad det gör. Optimistiskt, javisst. Även om jag kanske inte of...

Ja eller inte. Jag har aldrig varit en person som ska gulle-gulla med alla barn jag ser, men det är ju stor skillnad. Tydligen är det de som folk tror. Att jag hatar barn. Eller i alla fall, väljer bort barn för att göra ”karriär”. Hallå eller, vilket århundrade lever vi i? Jag blev intervjuad av en kvinna för några dagar sedan. Hon undrade hur jag såg på det här med att arbeta i en mansdominerad bransch, hur ofta jag blev utsatt för sextrakasserier och om jag inte skulle ha barn. På den sista frågan frågade jag förvånat vad hon menade med det? Varför skulle jag inte ha barn? Det klart jag ska ha barn! Förklaringen var att ”Du satsar ju på karriären”. Jaha du, tänkte jag. Undrar vem det är i vårt samhälle som målar upp bilden- familj eller karriär, välj för du kan inte ha båda. Snacka om fördomar. Självklart kan jag inte bortse från de faktum att det är kvinnan som ska kånka runt på ungen i nio månader, och som ska föda. Jag tror inte heller att det är en dans på rosor med allt jobb...

Ruth Westberg är VD på Concept AB som ritar, tillverkar, monterar och driftsätter specialmaskiner/produktionsutrustningar. IHM-are som utsetts till "Årets unga VD 2014". Bloggar om stort och smått, tankar och funderingar om vardagen som chef, tjej, rädslor och drömmar. Jag har många drömmar och planer. En del saker gäller för livet utanför jobbet, vänner och familj. Andra gäller såklart för Concept, jobb och karriär. Vissa grejer är för mig som person. Jag vill öppna ett öl-hak, en livstilsbutik butik, en hälso & skönhetssalong, resa, läsa psykologi, bli personlig tränare, skriva en bok, jobba med inredning, lära mig mer om grafisk design, köra folkrace, gå på kulturgrejjer (typ opera) gå på vin och champagneprovning, matlagningskurs, akvarellkurs, rida dressyr (nej inte på en islandshäst utan en dressyrhäst som är avlad till det som man ska använda den till, ska man hoppa ska man ha en hopphäst typ, lära mig yoga, åka på kryssning, ta steg två i dykcert... För mig är det viktig...

Allt var lugnt fram tills att prisutdelningen skulle starta. Jag var ju redan så stolt och glad över att bara blivit nominerad och sedan blivit en av de sex som gick till final, att det liksom inte var så viktigt att gå längre. Självklart önskade jag ju det, men resan jag redan gjort var inte dålig den heller. Jag fick komma till Berns och dricka bubbel, det var gott nog. Men när det väl var dags, alltså. Hjärtat klappade och pulsen dånade i skallen. Jag började svettas. Tankarna snurrade. ”Tänk om. Tänk om jag vinner. Vad säger man då? Äh, klart du inte vinner, de andra är så fantastiskt duktiga, glöm det! Du kom hit, var glad över det” Sex finalister skulle bli tre. Jag vågade nästan inte titta. När moderatorn presenterade mitt namn som en av de sista tre, visste jag inte vart jag skulle ta vägen. Jag, en av tre? Oh shit! När hon sedan började läsa nomineringen tittade jag, pappa och Christian (två av mina största stöd var ju såklart med) på varandra. Jag fick fram. Det är ju jag!...

Jag tror att vi alla behöver inspireras. Inspiration för mig är när jag upplever någonting som ger mig glädje, energi och lite jävlar anamma. Jag kan hitta inspiration i så många olika saker. En skogspromenad med hundarna, eller en ridtur. Att gräva i trädgården och ”flytta” saker. (C säger att jag flyttar saker och ser det som att jag gör något, men i själva verket flyttas det bara runt för att sen hamna på samma plats igen. Jag tycker han har fel, jag FIXAR ju!) Liksom ett leende i kassan på mataffären. Eller att träffa människor som är duktiga på det de gör. Jag upplever att inspirationen har många olika ansikten. En del rör sådant som man gör på fritiden, annat på jobbet. I vissa perioder när det är stressigt kan jag komma på mig själv med att inte vara mottaglig för inspiration. Jag har lixom så fullt upp med det jag håller på med, att jag glömmer av att hålla den sidan öppen hos mig. Jag tror det är viktigt att man ger sig själv tid till att inspireras. Att reflektera och fram...

Jag tror inte så många missat det. Inte av dem i min närhet i alla fall. För er andra, så är ni förlåtna och ni får reda på det här. För ett tag sedan fick jag veta att jag blivit nominerad till Årets unga VD. I stunden tänkte jag inte så mycket på det. Mer en kul grej. Som jag brukar reagera, jag hoppar på, resan går av bara fan, och först efteråt insåg jag vad som hände. Typiskt mig. Några dagar efter att jag fått reda på det här började jag tänka. Vad var det egentligen jag skulle vara med i? En tävling? Årets VD hade jag hört om innan, men Årets unga VD? Det visade sig att det är första gången de har denna utmärkelse, där kriterierna är: - Pristagaren har kunnat visa på särskilt goda resultat i form av påtaglig tillväxt och nyanställningar i den verksamhet som han/hon är vd för. - Pristagaren har förmåga att leda människor och har genom sitt ledarskap fått människor att växa. - Pristagaren tar aktivt ansvar för hur företaget påverkar samhället, ur såväl ekonomiskt, miljömässigt ...

Sidor