/** * 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 | IHM

Blogginlägg

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...

Förlåt, men det var så vi kallade er, och jag skäms! Det finns fortfarande en ”von oben attityd” när vi Göteborgare ser på Borås, den forna textilhuvudstaden och Sveriges 14:e största tätort, men det är dags att be om ursäkt och börja titta på vår grannstad med respekt! Jag har naturligtvis ingen vetskap om exakt hur allt har gått till, men Borås har genomgått en kraftig förvandling. De har fortfarande näst flest regndagar i Sverige med 192 regndagar per år, men de utstrålar också en värme och framåtanda som jag inte upplever i andra städer, inkluderat min egen stad Göteborg. Idag har den Tekniska Väfskolan från 1866 blivit en nationell textilhögskola av högsta klass; här utbildas det och forskas i textil och mode. Det i sin tur skapar många duktiga människor som får jobb på t ex. Gina Tricot, Eton, Nelly, Ellos, Haléns och Oscar Jacobson för att nämna några. Men Borås är långt mycket mer än textil, här har vi framgångsrika Brämhults Juice och ytterligare ca 11.440 företag. 11.445 ...

Under Almedalsveckan bjöd vi på IHM in spännande gäster till vår båt mitt i hamnen, tanken var att lyfta ett ämne varje kväll och under onsdagen var huvudrubriken "Vad är värderingsstyrt ledarskap?". Vi rotar naturligtvis vidare i ämnet och diskuterar även vem som har nytta av det? Hur värderar vi emotionell kompetens? Finns det manligt och kvinnligt ledarskap? Hur ser könsfördelningen ut bland ledare ut i våra svenska företag? Behöver det förändras och hur? och mycket, mycket mer.  Gästerna för kvällen var: Jan Eriksson, Director på RocheMartin Scandinavia Lotta Saidac, Partner/ Senior Advisor, RocheMartin Scandinavia Karin Nordin, verksamhetsansvarig Unionen Chef Åsa Sjölander, chef medlemssektionen Unionen och VD Unionen egenföretagare Meg Tivéus, styrelseproffs, bl a Swedish Match, Cloetta och Gotlandsbolaget Hans Lindholm, styrelseledamot och handledare IHM Julia Norinder, VD, Preera och Sverigestudien. Samtalet spelades in i kajutan och leddes av IHMs Content Creator Håkan Al...

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...

Hej igen alla! Jag sitter på tåget och funderar över hur jag ska lägga upp min intervju med retorikexperten Barbro Fällman. Det är första gången vi träffas, men jag har sett henne tidigare. Första gången var på Lorensbergsteatern i Göteborg för många år sedan; jag och en kompis gick dit för att se Fredrik Lindström och var smått undrande över valet av förband (om man kan säga så om en talare). Men hon tog oss med storm. (Ursäkta den dåliga bilden, vet inte vad som gick fel, men Barbro blev bra!) Barbro, som är ganska kort, kommer in på scenen och pratar med högt tonläge, ja nästan skrikande och uppträder lite stissigt och nervöst. Hon pratar om hur kvinnor bröst-andas och vad det får för konsekvenser. Jag är nästan på väg att gå, hon lugnar ner tempot och övergår till att andas med magen och frågar den kvinnliga delen av publiken om de känner igen sig? Hon får ett rungande ja och frågar oss män om vi känner igen den lite hysteriska kvinnan, och det gör vi ju. Hela publiken skrattar...

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...

There seems to be no need to argue whether digital transformation will, or will not, have great impact on the way we organize education and facilitate learning processes in the future. Undoubtedly, the transformation goes deep into human existence, and has an impact on almost every part of our life. Education and learning couldn't possibly be exceptions. At least not if we should believe in those who says that “We Haven't Seen Anything Yet”:   Furthermore, the fact that this blog post is an assignment of the “E-learning and Digital Cultures” Massive Open Online Course of The University of Edinburgh would be enough evidence that e-learning actually works. I can’t deny, I’m actually reflecting upon the themes of the course by writing this post. Instead, inquiries are raised on how e-learning and online education can use digital technology to improve teaching and learning performances compared to traditional classrooms – rather than if the technology in itself could be used for this ...

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...

Varje dag fylls IHM i Stockholm, Göteborg och Malmö av unga människor, de rör sig med snabba steg i korridorerna på väg mot nya kunskaper, de sprudlar av energi och förväntningar. Ibland står de i mindre grupper och diskuterar, försöker förstå, försöker förädla saker de nyss har lärt sig på lektionen. Jag pratar om våra YH-studenter, de är på IHM under två år, med avbrott för praktik, så man börjar känna igen en del av dem, en del hejar man på, en del diskuterar man med och ofta utstrålar de en kraft och vilja som jag blir mycket nyfiken på. Jag vill stilla min nyfikenhet och bestämmer mig för att intervjua några av alla elever. Först ut blir Frida Agneta som läser ”Internationell säljare B2B”, en av åtta YH-utbildningar på IHM. Efter några försök sitter vi till slut tillsammans uppe på kontoret. – Hej och välkommen Frida Larsson, eller Frida Agneta som det står i din mailadress. Min första fråga till dig bara måste bli, är det din mamma eller pappa som är tokiga i ABBA? – Haha, vi...

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 ...

Som hungriga vargar drar de fram, krediten är maxad, armbågarna är vassa nu är de här, hetsiga och köpsugna, så säljare gör er redo här kommer julen!Här kommer horder av köpsugna kunder rusande fram över butiksgolven, de kommer plundra hyllorna! Så var redo här kommer de! 68 miljarder kronor är på väg. De tre vise männen måste ha varit säljare, för deras gåvor skapade en tradition som är stark.  Den som ger mest den är bäst!Låt oss frossa i det emotionella behovet av status och prestige, låt oss frossa i kapital konsumtion. Låt oss köpa en riktigt god jul! Jag läste i bloggen av den gode Herr Aludd (som är en eminent bloggare men framför allt en fantastisk person) om årets julklapp, vilka de var och när de slog. Mina tankar drog iväg och jag landade så klart i försäljningen, det är där mina tankar brukar börja och sluta. I försäljning pratar jag ofta om vikten av att göra en bra behovsanalys - mycket som gör en säljare till en duktig säljare handlar just om behovsanalysen och förmåg...

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...

Turistindustrin fortsätter växa och ger goda chanser till jobb för människor med rätt kompetens, och därför finns IHMs YH-utbildning Konceptutvecklare Event & Besöksnäring. Vi beslöt oss för att ta reda på vad det handlar om genom att ställa några korta frågor till Johanna Mattsson, en av lärarna på utbildningen. Hon borde kunna ge oss en bra bild. – Hej Johanna, kul att du ställer upp på en intervju, men först lite bakgrund. Vad gör du när du inte undervisar på Konceptutvecklare event & besöksnäring? – Hej själv, känns kul att bli intervjuad för något jag brinner väldigt starkt för. Utöver mitt engagemang på IHM så är jag i Härjedalen där jag jobbar som VD för ett destinationsbolag och ett marknadsföringsbolag, eller så är jag ute i Europa och föreläser om internationell försäljning och Cross Cultural Management. Får jag tid över så håller jag på att färdigställa min första bok.  – Spännande, och vilket ämne kommer du att undervisa i på IHM? – Jag kommer till största delen ...

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...

I måndags var det final i ”Årets unga VD” på Berns i Stockholm. Tävlingen arrangerades av tidningen Entreprenör tillsammans med Motivation.se och Executive People. Vi har tidigare presenterat att Ruth Westberg, VD Concept och Marknadsekonom DIHM tog hem titeln "Årets unga VD". Men vi är minst lika glada och stolta över att en annan IHM alumn, Arash Gilan, COO Viva Media, också hamnade på pallen. Stort grattis Arash från alla oss på IHM. Jätteroligt att 2 av 3 på pallen är IHMare!  

Sidor