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

Bilprovningen jobbar strategisk med kompetensutveckling för medarbetarna och syftet är att bli branschens mest attraktiva arbetsgivare och fordons-besiktningsföretag. Vi på IHM är stolta över att få bidra till utvecklingen inom ekonomi och affärsmannaskap. Detta skriver Bilprovningen i sin pressrelease: "Bilprovningen satsar också på utbildning inom ekonomi och affärsmannaskap. Under 2013 studerade Bilprovningens besiktningsingenjörer vid IHM Business School och under 2014 kommer ett 20-tal teamledare att få samma möjlighet." I höstas genomförde vi en intervju med Stefan Hesselgren, HR-chef på Bilprovningen och då svarade ha så här på frågan "Vad är er största utmaning framöver?": - Vår största utmaning är att följa marknadens utveckling och bli mer aktiv och snabbfotad i våra aktiviteter. Vi måste få till ett lokalt entreprenörskap och agera snabbare mot kunden. Vi behöver bli mer lyhörda och möta kunderna på ett bättre sätt än tidigare. Det gäller också att behålla den marknadsle...

Nu har jag gjort det igen. Det där som jag inte skulle göra mot mig själv. För nästan två veckor sedan fick jag frågan om att blogga för IHM. Klart jag sa ja! Vilken ära! Jag hade mängder av ideer om vad jag skulle börja med. Seriöst, fast ändå inte- Typiskt mig. Ideerna blev större och större. Tillslut var alla så stora så det blev för stora. Jag skulle förändra världen! I samma takt som ideerna växte, blev jag mindre. "Äh ingen vill väl läsa om det? Varför skulle min vardag vara intressant för någon annan? Varför jag, jag har ju inga speciella ideer eller tankar?" Jag ältade detta, började skriva flera gånger, för att sedan bara stänga ner allt. Tanken om att jag skulle tacka för erbjudandet, men säga att jag ångrat mig kom. Jag skulle säga att jag inte hade tid. Eller nått annat dumt, som inte stämde. Sedan slog det mig. Jag hade som så många gånger förr hoppat på tåget, och väl där, börjat tvivla på mig själv. Fega ur. För det jag gör är att höja kraven på mig själv så till den ...

Efter flera år i Singapore är Johan Staël von Holstein nu tillbaka i Sverige, närmare bestämt i sin födelseort Halmstad. För de flesta av oss är Johan känd för att ha startat Icon Medialab, men han är även grundare av bl. a. Speed Ventures , letsbuyit, och Iqube. Under våren kommer Johan till IHM Stockholm, Göteborg och Malmö för att föreläsa under rubriken ”Lyckas som entreprenör - i Sverige och världen”. Vi ringer upp Johan för ett litet snack. – Hej Johan, hur känns det att vara tillbaka i Sverige? – Hej, jag måste säga att det känns underbart, min födelseort Halmstad har utvecklats enormt på många sätt och idag uppskattar jag närheten till naturen lika mycket som närheten ut i Europa. Men planer för framtidens Halmstad går fortfarande för långsamt och här får jag ge mig in och rota lite. – Så det är det du ska syssla med nu? – Inte enbart, jag mår bäst av att ha många bollar i luften! Jag tittar på lite nya företagsidéer, samtidigt som jag ger mig ut och föreläser runt om i Sve...

Svenska golfklubbar var i stort behov av en modern klubbchefsutbildning. Svenska Golfförbundet (SGF) i samarbete med golfens tre intresseorganisationer GAF, PGA och SGA gav därför IHM uppdraget att genomföra utbildningen med fokus på följande områden: ledning, lönsamhet, kommunikation och utveckling. Förra veckan var det dags för de första 24 klubbcheferna att examineras. Stort grattis till alla er som gått "Golfens klubbchefsutbildning" 2012-2014 och lycka till med era framtida utmaningar! Vill du veta mer om utbildningen, kontakta annica [dot] rasmusson [at] ihm [dot] se (Annica Rasmusson).

E-commerce Manager och Konceptutvecklare Event & Besöksnäring är två helt nya YH-utbildningar som startar på IHM i höst. Antagningarna är i full gång och vi söker upp Tommy Persson, Affärsområdeschef IHM Yrkeshögskola, för att höra hur det går. – Hej Tommy, hur går det med antagningarna?– Fantastiskt bra, intresset är stort vilket är jätteroligt och vi jobbar för fullt med att ta emot ansökningar, svara på frågor och intervjua potentiella elever.– Vilka utbildningar är det som startar i höst?– Dels två helt nya utbildningar vilket känns väldigt spännande; E-commerce Manager och Konceptutvecklare Event & Besöksnäring. Men också Ekonomi & Redovisningskonsult, Säljare B2B, Internationell Säljare B2B och Säljare IT Solutions B2B som totalt ger drygt 350 nya YH-studenter på IHM i höst!– Berätta mer om E-commerce Manager!– Gärna, när vi suttit ner med företagsrepresentanter i våra olika advisory board och diskuterat kring framtidens behov av nya kompetenser så kom det ganska s...

Min resa började för nästan två år sedan då min tankar riktades åt att flytta utomlands. Under denna tid studerade jag till Företagssäljare på IHM Business school samtidigt som jag hade en marknads- och kommunikationskoordinator utbildning från IHM i ryggen. Mina drömmar riktades mot ett land med mycket utmaning och där marknaden för marknadsförare är rena smörgåsbordet. Allt är möjligt och som många säger, drömmarnas land.  USA blev min utmaning och jag visste att jag skulle ta mig dit, vilket jag gjorde. Efter snart 1,5 år och med endast ett halvår kvar av min utbildning på Johnson & Wales University i Miami, Florida har jag samlat på mig mer erfarenheter än vad jag någonsin kunnat drömma om.  Att försöka göra sig förstådd med allt vad en marknadskommunikatör och företagssäljare från IHM har lärt sig på engelska var inte direkt en lätt match till en början. Att växla från den Svenska kulturen till den Amerikanska var som att möta en kamel på Stockholms gator, väldigt främmand...

Nu är det bara tre dagar kvar! Baharin International Circuit är inte längre under vår kontroll, allt styrs från FIA. Säkerheten är på topp och jag var även tvungen att ansöka om att få tillgång till mitt kontor. Den värsta hysterin har lagt sig, men man vet aldrig hur läget kan förändras så tätt inpå eventet.     

Hur ser din kalender ut idag? Är du chef eller ledare och följer snittet har du 4-6 timmar inbokade möten. Det betyder att du kommer sitta 25 år av ditt liv i möten. Det är en god anledning till att fundera en gång till kring hur era möten fungerar. Vill du ha fler anledningar? Kolla här! 30 % av all arbetstid är mötestid. 52 % av alla möten är dåligt förberedda. 25 % av mötesdeltagarna på det genomsnittliga mötet är där i onödan. 44 % av mötesdeltagarna kommer gå ifrån mötet och vara osäkra på vad egentligen som beslutades.   Mycket tid i möten som alltför ofta är dåliga, alltså. Allt som allt innebär det att svenska tjänstehen spenderar tid i dåliga möten för 170 miljarder kronor varje år. Det motsvarar runt 5 % av Sveriges BNP. Aj. Så vad göra? På organisationsnivå är det dags att sluta acceptera att oförberedda möten hålls. Inget mer skjuta från höften. Sluta kompensera låg kvalitet med hög kvantitet.Och även om din organisation inte har tagit tag i sin möteskultur än, kan du so...

Hej Emad! Du har läst en hel DIHM examen på IHM och er grupp fick utmärkelsen bästa examensarbete. Jättekul. Men för att inte gå händelserna i förväg så börjar vi från början, hur kommer det sig att du valde att utbilda dig på IHM? - Jag pluggade ekonomi på universitetet för ca 20 år sedan. Jag har jobbat med ekonomi sen dess. När jag tittade på jobbannonser såg jag att många företag har som krav att man har universitetsstudier eller IHM. Blev nyfiken och kollade upp IHM och såg att ni har ”real life studies”, det var det och en rekommendation från en kompis som avgjorde valet. I början var priset lite avskräckande men efter att ha läst Business Management var jag såld. Det kändes helt rätt – jag vill utgå från affären. Efter Business Management läste jag Verksamhetsstyrning, Business Finance och avslutade med Business Case.  Vilka är dina starkaste intryck från tiden på IHM?-Jag har fått ett helt nytt tänk och ett annat helhetsgrepp. Har också fått större perspektiv på vad varje d...

Just nu pratar många i huset om examen. Det är alltid lite extra spännande när deltagare man följt under en längre tid ska visa för kunder, arbetsgivare och inte minst själva få klart för sig vad tiden på IHM har gett. Men alla har ju inte varit på en IHM-examination, så vi tänkte berätta vad det är som sker. Vad är det för känslor och hur mycket blod, svett och tårar ligger bakom? Nyfikna smög vi in på en examination i förra veckan. Lokalen är det lite pampiga ”Bankrummet”, ett av styrelserummen på IHM. Vi är lite tidiga och börjar med att skriva på ett sekretessavtal och hälsar på Carl-Axel Ambring, eximinator och Göran Celander som är medbedömare. Man känner den lite högtidliga stämningen i luften. Nu kommer deltagarna, i det här fallet är det Fredrik Josefsson, Ina Pettersson, Mikael Merighetti och Niclas Olvmark. Vi hälsar och presenterar oss och inväntar nu bara Sportlife som är uppdragsgivaren de gjort sitt examensarbete för. Man känner nu nervositeten, eleverna går igenom de...

Åter på svensk mark efter att ha deltagit på BRITE ’14, en konferens som anordnats av Columbia Business School i New York. Temat för konferensen var "Branding, Innovation and Technology". Efter att i två dagar lyssnat på talare från IBM, Disney, McKinsey, HP, Facebook, BuzzFeed, Warby Parker med flera, är insikten tydlig - i dessa företag har den digitala utvecklingen gjort att ansvaret för att utveckla företagets varumärke nu flyttats över till vd och ledningsgruppen på allvar. Jag vågar till och med påstå att varumärkesstrategin lyfts upp och blivit en av de mest centrala strategierna för att vd och företagsledning framgångsrikt ska kunna transformera företaget in i den digitala eran. Ett bra exempel är IBM:s varumärkesvision ”Building a Smarter Planet”, som inledningstalaren, IBM:s John L. Kennedy, inlevelsefullt berättade driver utvecklingen av såväl affärsutveckling, kultur, marknadskommunikation, partnersamarbeten och varumärke. IBM har över 425.000 anställda i 170 länder.   D...

Då var denna tio veckor långa och otroligt händelserika resan slut för min del.  Jag har fått ta del av jättemycket olika saker under mina praktikveckor och jag är otroligt nöjd över att fått vara på Nellys marknadsavdelning eftersom det var ett utav mina mål redan innan jag visste om jag kommit in på utbildningen eller inte. För att specificera mer vad jag gjort under mina veckor så är det en grundlig kartläggning av nya marknader.  Jag har suttit och gjort grundarbetet för sammarbeten med olika partners i för oss nya länder. Eftersom man aldrig tidigare gjort något sånt här arbete så vet man för framtiden lite vad som gick bra respektive dåligt. Tillsammans med min handledare jobbade vi fram ett riktigt Case för hur man skall arbeta när man skall gå in på ny marknad. Min huvuduppgift här har vart att agera en förlängd arm ut på ny marknad och för framtiden finns nu en plan för hur man skall arbeta. Detta skall i sin tur underlätta och göra processen mer effektiv. Eftersom Nelly är...

Vårt möte är bokat till 17.00 men redan 2 minuter i välkomnar Johan Åberg mig in trots att KappAhls ledning fortfarande håller på att packa ihop efter ett möte kring utveckling av hela varumärkesplattformen. Att KappAhls ledningsmöte sker på IHM är fullt naturligt, här finns alumner, återkommande gäster på föreläsningar och Johan själv är nybliven styrelseordförande för IHM Business School. I december 2011 lämnade Johan Åberg rollen som framgångsrik VD i familjeägda JULA för att ta över rodret på börsnoterade KappAhl som då befann sig i ett mycket tufft läge. För Johan innebar det att fokus på tillväxt snabbt byttes mot omprioriteringar och att plöja vägar mot helt nya mål. Detta följdes av effektivisering, kostnadsnedskärningar och översyn av organisationen. Visste du fullt ut vad du gav dig inpå?  - Ja och nej, eller rättare sagt, jag var mentalt förberedd på att detta skulle bli en helt annan resa och en stor utmaning för mig som ledare. Det var också det som drev mig att tacka ...

Nu är hela racingbanan och området nedstängt för F1-förberedelserna. Omdekorationer och uppmonteringar pågår för fullt, och man kan känna stressen bland kollegorna. Men då F1 är nära så innebär det ju också att praktiken snart är över för denna gången och det är med blandade känslor jag snart lämnar Bahrain. Sommaren är  på väg och det är runt 30 grader dagligen. Det har även varit några sandstormar och man ser då knappt längre än några meter framför sig, allt annat är täckt av sand.  

Hmm, för några veckor sedan skrev jag blogginlägget den ofrivillige motionären, där jag raljerade över folks hälsostress och att motion för min egen del inte var intressant, jag gillar att fundera istället. Det här skapade många kommentarer kring att det inte finns något motsatsförhållande i att motionera och fundera, det skapade också en uppsjö av förslag på hur jag skulle motionera. Jag vet att det inte finns något motsatsförhållande i frågan, men jag vet också att media behandlar frågorna olika, ja, det gör nog de flesta av oss. Om ni tittar på hur motion och hälsa exponeras i media så ser ni varje dag exempel och förebilder som ska ge oss en energikick att ta på oss löparskorna. Vi har många kroppsliga förebilder i reklam och film. Vi har många idrottsidoler att se upp till och som kan leda oss mot målet, en hälsosammare livsstil med motion som gör att vi ska må bättre, och tävla lite med kompisarna om vi vill. Hur förhåller vi oss då till det här med att fundera och tänka? Säl...

Igår var hela marknadsavdelningen iväg på Konferensdag på Ellagården här i Borås! Morgonen började med en trevlig frukost för att sedan se tillbaka på företagets utveckling sedan starten 2004. Ser man på dom siffrorna är det en enorm utveckling Nelly gjort. Dagen fortsatte med strategisk planering för året. Hur företaget ska nå upp till vissa mål och svåraste biten, hur ska Nelly fortsätta ligga i framkant och före konkurrenterna? Sedan var det dags för en enormt stor lunchbuffe, och eftermiddagen gick åt till att Brainstorma idéer och möjligheter, sånt som det inte finns tid till att göra annars på kontoret. Otroligt bra! Nu återstår bara att ta tag i allt som kom upp under gårdagen. Annars har vi haft fullt upp med lanseringen av Leighton Meester-kampanjen. Det var en hektisk vecka precis innan den släpptes eftersom vi var tvungna att få ut allt material till alla samarbetspartners i alla länder vi nu är aktiva och jobbar med. Denna veckan och förra har det egentligen bara varit t...

Sidor