Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; nodequeue_queue has a deprecated constructor in /home/ihmse/public_html/sites/all/modules/nodequeue/nodequeue.module on line 445
/** * 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); }
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ctools_context has a deprecated constructor in /home/ihmse/public_html/sites/all/modules/ctools/includes/context.inc on line 30

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ctools_context_required has a deprecated constructor in /home/ihmse/public_html/sites/all/modules/ctools/includes/context.inc on line 93

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ctools_context_optional has a deprecated constructor in /home/ihmse/public_html/sites/all/modules/ctools/includes/context.inc on line 205
Blogginlägg av Monica Birgerson | IHM

Blogginlägg av Monica Birgerson

Monica Birgerson

Medarbetare på IHMs marknadsavdelning. Planerar seminarier & events, skriver copy, nyhetsbrev, producerar trycksaker och annat som hör marknadsarbetet till.

Gång på gång får vi höra att deltagarna på vårt ledarprogram uppnår fantastiska affärsmässiga resultat. Det är i sig inget nytt - det är ju liksom meningen att en IHM-utbildning ska ge resultat. Men när jag får höra att programmet har påverkat deras sätt att möta och bemöta inte bara medarbetare utan även tonåringar, blir jag nyfiken på riktigt. Vad är det egentligen som är nyckeln till denna förändring? Jag beslutar mig för att intervjua Tina Gustavsson - en av de många chefer som gått programmet.  - Hej Tina Gustavsson, Unionen Chef. Du har gått IHM Verksamhetsutvecklande ledarskap. Vad tyckte du? - Hej Monica! Ja, det har jag! Jag har tidigare gått rätt många program på andra ställen och fått hur många teorier som helst, men det här var något annat. Det gav mer än alla de andra utbildningarna tillsammans. - Det är ju ett processinriktat program. Vilket är ditt starkaste intryck? - Det som direkt kommer upp i huvudet är ”den gröna bubblan” – en symbol för det utvecklande ledarskap...

Det är nästan hans första dag på jobbet när jag träffar honom för en intervju. Christian Castvall är ny chef för IHMs affärsområde öppna och företagsanpassade utbildningar för yrkesverksamma. Det känns direkt att det är en öppen och trygg person som slår sig ner i min besöksstol. - Hej Christian och välkommen till IHM! Varifrån kommer du närmast?- Jag kommer från FörsäkringsGirot, där jag var sälj-/marknads- och produktchef. Innan dess var jag managementkonsult i 15 år. - Berätta lite om din bakgrund, vem är du?- Jag är 51 år och bor i Trosa, söder om Stockholm, med min familj som består av hustrun och tre pojkar, 21 18 och 11 år, så vi har bara ett barn kvar hemma. Som person är jag aktivitetsdriven - jag gör allt som är kul. Älskar friluftsliv, t ex utförsåkning, gärna i extremare former. Men det är inte bara vintersporter utan också båt, vattenskoter, vattenskidor – allt som går fort är roligt! Men jag är ingen racingkille, jag gillar att vara utomhus helt enkelt, fjällvandra är...

Jan Carlzon sa det redan på 80-talet: Riv pyramiderna! Den gamla hierarkiska organisationsmodellen är förlegad och trög. I dag behöver vi jobba i snabbrörliga, agila team, där medarbetarna har mandat att själva bestämma hur de vill jobba för att nå de gemensamma målen. Och de behöver trygga, kommunikativa ledare som har tillit till sina medarbetare och som inser att deras roll är att stötta, inte att veta bäst och peka med hela handen. Plats och tid för arbete förändras, arbetsliv och privatliv flyter ihop. Trots att det stressar oss enormt att sitta i bilköer varje dag, vid samma tid, sitter det djupt rotat i oss att vi måste åka till jobbet varje dag,  Men det är inte där vi måste vara för att arbeta, och vi kommer inte att kunna attrahera nya talanger om vi kräver att de ska infinna sig på en fysisk arbetsplats. Men rädslan är stor, och många släpper inte medarbetarna fria. I veckan lyssnade jag till Karin Zingmark, strategisk rådgivare, talare och författare. Hon är klar med li...

Känslor präglar hela vårt liv. De styr hur vi lär oss, hur vi gör affärer och hur vi fattar beslut, små och stora. Vi är skapta för ett liv där vi interagerar med andra och umgås IRL, men i dag umgås vi mer och mer via sociala medier. Det är ett umgänge helt fritt från känslor, och det vill Rana el Kaliouby ändra på.    Hon är Computer Scientist och har en PhD från Cambridge och utvecklar tillsammans med sitt forskarlag en app som förstå hur du känner dig genom att läsa av ditt ansiktsuttryck. Genom att lagra känslouttryck från 2,9 miljoner videor med människor från 75 länder har de nu byggt upp världens största databas för känslor.   Hennes forskning förenar teknologi med det emotionella och kan komma att förändra inte bara hur vi interagerar med maskiner, utan också med varann via sociala medier. Och kanske känns det bra om roboten vi snart har därhemma förstår när vi känner oss lite deppiga? Kolla här!    

När Beyoncé är på turné och har genomfört kvällens spelning, går hon igenom varenda liten detalj igen i huvudet. Hon skriver ner de saker hon vill förbättra till nästa spelning, och på morgonen skickar hon ut detta till bandet. De repar på dagen och redan kvällen efter är de bättre. I affärsvärlden talas ofta om prestation. Men många springer bara fort, utan att göra de där små förbättringarna. Saker och ting blir inte bättre och lärandet uteblir. Hur kommer det sig? Inte överraskande handlar det om tankens kraft och om vilket mindset vi har. Efter ett par år i samma yrke, planar prestationen vanligtvis ut. När vi tycker att vi har blivit tillräckligt bra, lägger vi all tid på att utföra jobbet – och med rutin kan vi springa lite fortare, hinna lite mer. Men ingenting blir egentligen bättre. Det du inte tänkt, kan du inte minnas För att lära oss något, behöver vi stanna upp och reflektera. Avsätt lite tid och träna medvetet på ett utvalt moment, fila på en enda sak, innan du springe...

Han är strategi- och affärsutvecklingschef med det prekära uppdraget att säkerställa att OKQ8 fortsätter att vara relevanta i en framtid utan fossila drivmedel. Men vad driver honom? Jag träffar Philip Palmgren, ny styrelseledamot i stiftelsen IHM. Han är en fena på omvärldsbevakning och ger sina bästa tips inom området. Men först tar vi pulsen på honom. Du drivs av att utveckla, förnya och skapa värde. På din lyra finns två strängar som vanligtvis inte sitter på samma lyra -  beteendevetenskap och affärsutveckling. Vilken ljuv musik kan uppstå i denna förening? - Jag upplever att min utbildning och erfarenhet inom HR har givit mig en väldigt bra bas att stå på i min roll som ledare. I utbildningen ingår en stor del organisationsutveckling och ledarskap vilket har genererat god insikt om vilka organisatoriska och individknutna faktorer som behöver vara på plats för att driva igenom förändring och nå framgång i det. Exempel på kritiska faktorer är delaktighet, engagemang, förankring ...

Hon är digital inföding men långt ifrån duvunge. Till vardags är Louise Brudö affärscoach med ansvar för Acceleratorprogrammet på Chalmers Ventures. Hon har ägnat hela sitt yrkesverksamma liv åt entreprenörskap och har startat och drivit egna bolag men också som regionchef för Venture Cup. Nu tar hon plats i stiftelsen IHMs styrelse och tillför kompetens för nästa generations lärande. Vad hoppas du kunna bidra med i IHMs styrelse? - Jag vill gärna tillföra ny kunskap och erfarenhet inom ett område som inte tidigare varit representerat i styrelsen. Jag är entreprenör och kvinna och hoppas kunna vara en representant för hela min generation digitala infödingar. Jag vill vara IHMs öron i omvärlden med bäring på den digitala transformationen, särskilt inom Edtech (Education Technology). Just nu startas kluster med företag som jobbar för att förändra hur man lär sig, och där är jag uppdaterad. Jag har också effektiva metoder och processer för hur man jobbar framåt, och jag har verktyg som...

Chefsrollen har förändrats dramatiskt under senare år. En riktigt bra chef är inte den som vet mest - en riktigt bra chef kan leda affären, skapa engagemang och få andra att växa och synas. En riktigt bra chef agerar föredöme, inspirerar men har också modet att konfrontera. Och likt en idrottare som vill vara på topp, krävs ständig träning. Men vem ansvarar för att träningen blir av? - Att vara ledare och chef är ett tufft yrke och du bör veta vad du ger dig in på när du tackar jag till rollen. Det är du som bestämmer om du vill vara chef eller inte, säger Sara Rönnqvist, senior affärskonsult, på IHM i en artikel i Kollega. Många har potential att bli goda ledare, men för att lyckas och klara av att möta kraven finns det bara en väg att gå. Läs artikeln Uppgradera dig till ledare 3.0  

På 70-talet kom golfboomen till Sverige, och successivt har golf blivit en folksport. 2010 kom en tillfällig rekyl och bröt den uppåtgående trenden, vilket bland annat ledde till konkurs och rekonstruktion av flera klubbar, och vi såg nya affärsmodeller växa fram. - Sedan 2013 har det tagit fart på riktigt igen, och under 2016 såg vi fler nya golfare än på länge, säger Johan Thellmark, vvd för Golfstore – en ekonomisk förening för golfbutiker runtom på våra golfbanor.  Golfstore-kedjan bildades 1973 och finns nu i sex länder – Danmark, Norge, Tyskland, Österrike, Holland och i Sverige. Totalt 292 butiker, där de flesta drivs av PGA-utbildade Pros – vassa golfare, vars främsta uppgift är att lära folk att spela golf, inte att driva butik. Storsatsning för ökad konkurrenskraft - Ni kommer att satsa stort på utbildning för butiksägare och butikssäljare under det kommande året i ledarskap och butiksekonomi för att möta en hårdare konkurrens. Vilka är era största utmaningar?- Ja, det är ...

- Hej Helena! Vi träffade på IHM-konferensen, du och jag, och byggde lådbil ihop. Hur tyckte du att det gick?- Det gick sådär. Det värsta var att vi inte fick köra den. - Välkommen till IHM, Helena Öfverström! Du har varit lärare och forskare på Handelshögskolan och också kursansvarig på IT-universitetet, på programmet Master of Communication?- Ja, organisation och ledarskap är mitt huvudsakliga område. Jag har en bred företagsekonomisk bas att stå på och har också undervisat i marknadsföring. Men under senare år har det främst handlat om kommunikation inom organisationer och mellan människor. - Hur kom du in på det?- Jag halkade in på IT-universitetet via en kollega. Kursen handlade om hur olika professioner kommunicerar med varann, eller inte kommunicerar – de har alla sitt specifika språk. Marknadsmänniskor talar utifrån målgrupper, ekonomer utifrån siffror osv, och det handlar om att kunna mötas. Jag har alltid fascinerats av hur kunskap används som maktmedel för att hävda legit...

För fyra år sedan träffade jag Henrik Frohm för första gången. Han hade just tillträtt i rollen som IHMs försäljningschef, och jag minns att han sa: ”Min dröm är att bo i en lägenhet tapetserad med affärsmodeller”.  Sen dess har vi setts många gånger, och en sak är säker: i Henrik Frohm bor en tävlingsmänniska av sällan skådat slag, och han älskar både affärsmodeller och siffror. Hans stora passion är försäljning och han njuter i fulla drag av den emotionella storm som skakar honom i tävlingens slutskede. Hur mycket tid finns kvar, kommer vi att nå målen?? ”Zlatan, du ska vinna Champions League, jag ska slå budget med mitt lag”, skriver han i ett av sina blogginlägg, läs det här Nu siktar han mot nya mål, med ett nytt lag och går in i rollen som konsultchef på IHM. Hans nya lag är IHM Business Network – ett stort nätverk av specialister med imponerande CV:n som alla undervisar, handleder eller faciliterar på IHM Business School på deltid. - Hej Henrik! Du har en utpräglad tävlingsi...

Hon berättar att hon är mamma till två biologiska barn samt en flyktingpojke från Afghanistan som kom till familjen när han var 12 år. - Jag är starkt värderingsstyrd i allt jag gör, och att IHM är en stiftelse där vinsten återinvesteras i verksamheten var avgörande när jag tackade ja till jobbet som marknadschef, säger Åse Henell. Hon utstrålar energi och känns äkta. Jag träffar vår nya marknadschef Åse Henell över en lunch, och jag vill veta mer om henne, om vad som driver henne, hur hon är som person.  Hon brinner för samhällsutveckling och att göra allt lite bättre – allt ifrån en kampanj till att renovera ett hus. Familjen flyttade in i ett fallfärdigt hus i Ekebäck för några år sedan, och det blev många sena kvällar i målarkläder. - Du kommer närmast från Faktum, där du varit vd i fem år. Skulle du säga att det var det viktigaste du gjort hittills i din karriär?- Faktum betyder så mycket för så många människor, som alla kämpar för sin existens. Där finns 500 försäljare och ko...

Farsan skulle fylla 60 år. Han var en go’ göteborgare med glimten i ögat. Tummen mitt i handen men hjärtat på rätta stället. Alltid ett vänligt ord, en räv bakom varje öra och en Kålle & Ada historia i beredskap.  Presenten var given; av mig skulle ha få ett medlemskap i Fantomenklubben. Året var 1983, och i "medlemskitet" fick man affisch, Fantomens brevpapper, penna, diplom, Fantomenring och Fantomens goda och onda klistermärken; allt i en snygg, liten låda. Han blev jätteglad! Historien utspelar sig på den tiden, då Televerket (Telia) just hade datoriserat sina faktureringsrutiner. I samband med övergången, hände en del märkliga saker.  Varje månad fick mina föräldrar en räntefaktura på 9 öre. Varje månad utlöste denna restfaktura ett gräl mellan min upprörda moder, som var besatt av ordning och reda, och min far, som hade inställningen att saker och ting brukar ordna sig av sig själva. Mamma ringde och klagade, samma visa nästa månad. Till slut fick mamma nog, och då brukad...

För många inträffar förr eller senare en vändpunkt i livet, då man känner att det är dags att göra något nytt, något annat. Så var det för Camilla Palmertz efter framgången med Volvo YCC (Your Concept Car) – även kallad ”tjejbilen” – den första bilen i världshistorien som gjordes av ett designteam med bara kvinnor. 4 personer från projektet startade eget, och Camilla var en av dem. - Hej Camilla! Vad roligt att få en intervju med dig! Det var ett tag sen vi sågs, och du har ju just börjat på nytt jobb – berätta!  - Hej Monica! Ja, jag är tillbaka i bilbranschen, i ett verkligt spännande företag! CEVT, China Euro Vehicle Technology, som är ett utvecklingsbolag till Geely Auto. Bolaget ägs av Geely Holding som i sin tur också äger Volvo Personvagnar. CEVT är just nu mest känt för att utveckla den nya plattformen som det nya bilmärket Lynk & CO bygger sin första bil på. Den plattformen kommer delas även med Volvo.  - OK, vad gör ni, och vilken är din roll? - Vårt teams uppdrag är...

Anders Gustafsson är Senior Vice President EMEA för Volvo Car Group och en av hans utmaningar är att rusta en hel bransch för stora förändringar. Hans utmaning är självklart också IHMs utmaning, eftersom Volvo Cars outsourcat delar av sin utbildningsverksamhet till oss. Idag har Volvo Cars Business School vuxit till en internationell akademi med program för ledare, säljare, servicetekniker och personal inom eftermarknad. Jag söker upp Tommy Sigvardsson, som fick uppdraget från Anders Gustafsson att bygga den akademi som ska rusta Volvos europeiska säljbolag och återförsäljare för framtiden. Inte särskilt förvånande är han en man som älskar utmaningar. - Hej Tommy! I dag har vi spanjorer och schweizare i huset. Berätta!   - Ja, det har vi! Det är ledningsgrupper från två av Volvos europeiska säljbolag som är i Göteborg i fyra dagar på utbildning/workshop inom ramen för Volvo EMEA Value Chain. EMEA är ett kluster av Volvos säljbolag/importörer representerade i över 60 länder; EMEA st...

Sidor