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

Under det senaste året har vi haft möten med 114 chefer och IT-administratörer om IT-användning och tillhörande kostnader i sin egen verksamhet. Vi noterade att många av dessa företag fortfarande håller fast vid gammalmodiga och kostsamma IT-lösningar trots att det finns både billigare och bättre alternativ. Vi ville bl.a. veta varför inte fler har valt att gå över till en molnlösning som i många fall skulle kunna halvera den totala IT-kostnader.  Här är en sammanfattning av de vanligaste svaren (procentandel av det totala antalet anges inom parentes): Cloud lösningar passar inte oss. Vi är för speciella/har speciella krav på IT-lösning (13 %) Huvudargumentet här var, enligt dem vi talade med deras eget företag eller bransch de arbetade i, inte lämpar sig för cloud användning. Det är intressant att notera att många stora företag, ofta med stora och krävande IT-lösningar inte verkar dela denna uppfattning. I själva verket finns det flera stora företag som redan har flyttat hela elle...

Känns inte alls konstigt att ha ett Pippi Långstrump citat som rubrik när jag skriver ner intervjun med Åsa Sånemyr, VD på klädföretaget Hope. För Åsa har verkligen testat och tänjt på sina egna gränser. På hennes väg mot idag hittar jag oavslutade gymnasiestudier, den legendariska Hammarbyspelaren Kenta Ohlsson, en rebellisk själ som gillar struktur, Rättviseförmedlingen och mycket mer, häng med! – Hej Åsa, kul att vara här. Vem är Åsa idag? – Hej, ja, vem är jag? En lite kort beskrivning skulle kunna vara; Ett Bajen-fan, 46 år, älskar affärer, är positiv och ser hellre möjligheter än problem, gillar att jobba och bor i Bromma med min man och våra tre barn. – Och om vi börjar från början vem var Åsa då? – Uppvuxen på Söder med kreativa musikerföräldrar, en rebellisk tjej som älskade att se på Hammarby med min pappa. Hade Mr Bajen, Kenta Ohlsson som dagisfröken och tog senare en självklar plats i klacken. Upplevde att skolan var för inrutad och inte uppskattade att jag ställde fråg...

Ja, det är en av alla frågor som Ryska Posten besvarar med; Ja, visst, absolut, inga problem!  Sedan en tid tillbaka är receptionen på IHM i Stockholm bemannad av Ryska Posten så vi bestämde oss för att ta reda på lite mer, för visst blir man nyfiken på ett företagsnamn som ger associationer till de första trevande försöken in i vuxenvärlden, och inställningen att allt går om man vill?! Vi stämmer träff, i deras lokaler vid Gärdet, med Rakel Lilja, VD för bemanningsdelen, för att stilla vår nyfikenhet. Något för tidigt på plats så möts jag av en entusiastisk receptionist, vid ett skrivbord som mer liknar ett pingisbord i storlek, som visar mig till rätta och hämtar Rakel. Rakel dyker upp och startar med att visa runt lite i lokalerna, det är stora lokaler med mycket folk och en härlig puls. Det är lunchtid och många håller på att förbereda sin lunch, några spelar pingis men det är också full aktivitet på de olika kontoren. Cykelbud som springer in, telefoner som ringer, saker som h...

Efter intervjun med Fredrik Granting, VD på Göranssonn Arena i Sandviken, och hans egna funderingar kring sin roll som ledare, och hur han själv uppfattar att han har förändrats efter de ledarskapsutbildningar som han har gått på IHM, så träffar jag några av hans närmsta medarbetare, Ekonomichefen Eva-Lena Bichsel, Projekt- & Eventansvarige Vencke Yaman och Försäljningschef Anna-Karin Sågström, för att få en bild av hur de upplever att han förändrats i sin roll som VD, från det att han tillträdde i augusti 2010 till idag. Diskussionen blev lång, rolig och intensiv och jag ska försöka ge er en rättvis bild av vad som sades under mötet men jag namnger inte vem som sa vad. Inte för att jag inte vill, utan snarare för att det blev omöjligt för mig att hålla reda på vem som sa vad, och dessutom så var de ganska överens om det mesta! – Hej och välkomna till den här lilla pratstunden om hur er VD eventuellt utvecklats i sin roll som ledare sedan starten här på Göransson Arena, men vi ...

Ja, så avslutar Fredrik Granting, VD på Göransson Arena i Sandviken, den första delen av vår intervju, har du inte läst den så hittar du den här. Så… …nu är det dags att ta reda på hur det gick för Fredrik i hans nya roll, på en ny ort och med nyvunna kunskaper som diplomerad marknadsekonom på IHM. – Så vad händer när du sitter första dagen på kontoret Fredrik? – Efter att ha hälsat på några av mina nya medarbetare, gått runt lite i anläggningen så sätter jag mig ner och funderar över vad jag gett mig in på. Även om det nya jobbet tangerade mycket av min tidigare erfarenhet från restaurang, sport och eventbranschen så var det något helt nytt och jag kände mig rätt liten just då. Det här var inte bara nytt för mig, det var nytt för delar av min organisation och det var nytt för Sandviken. Jag insåg att jag inom tre månader måste presentera en affärsplan för styrelsen och det var också det jag satte igång att jobba med.  – Lite ”Jag kan själv”-känsla? – Ja, så var det nog. Jag kände ...

…och om jag mot förmodan ändå skulle fått frågan så hade jag aldrig vågat tacka ja till jobbet utan IHM. Ja, det är riktigt fina ord vi får från Fredrik Granting, VD på Göransson Arena i Sandviken. Vi tackar ödmjukast men blir också nyfikna på att höra hela Fredriks historia så jag bestämmer möte med honom och tar tåget upp från Göteborg till Sandviken. På resan upp, med vacker natur genom rutan, funderar jag på vad jag känner till om Sandviken? Inte mycket mer än järnverket och bandyn, jag bestämmer mig för att googla efter lite mer. Järnverket, visar sig vara själva grunden till att Sandviken finns till – orten grundades i och med att verket, som ett av Sveriges tre största, anlades år 1862. Sandvik AB, den stora, idag globala, industrikoncernen, är kraftigt dominerande som arbetsgivare med ca 5.500 anställda på plats, ytterligare 4.500 i Sverige och ca 38.000 anställda ute i världen. Stort, med tanke på att hela kommunen består av ca 37.000 människor. Förutom Sandvik AB så är sp...

När man stöter på grupper med deltagare från många olika länder i IHM-huset, blir man alltid lite nyfiken. Vilka är dom, vilket företag kommer de ifrån och vad gör de på IHM? Den här gången visar det sig vara en världsberömd skjorttillverkare med huvudkontor i Borås som just nu utvecklar 36 av sina medarbetare från ett dussin olika länder inom personligt ledarskap. Jag ber ansvarig lärare att fråga om Etons vd, Hans Davidson, har lust att träffa mig och berätta mer. Glädjande nog städar Hans snabbt fram en ledig lucka i kalendern, och några dagar senare träffas vi över en thé och kaffe. Jag skulle ljuga om jag sa att jag inte förväntade mig att Hans skulle vara oklanderligt snyggt klädd, och det var han också (får man fuska med det i hans position? I så fall när? Det ska jag fråga nästa gång….). Vi inleder med att tala om Eton som varumärke. Jag berättar för Hans att jag som har varumärkesutveckling som profession är mycket imponerad över hur Eton över decennier, genom modeväxlinga...

Uppmuntrar ni varandras tankar och idéer på jobbet? Uppmuntrar ni dem trots att de är dåliga? Det kan finnas anledning att göra det.  För ett tag sedan hade jag förmånen att presentera Henrik Schyffert när han skulle förläsa om kreativitet på en mötesmässa. Schyffert är som bekant medlem av Killinggänget, humorkollektivet som skapat bakom bland annat NileCity, Percy Tårar och Fyra Nyanser av Brunt. Vem kan vara bättre att ta lärdom om kreativitet av än en person som står bakom så mycket nyskapande humor!  Schyffert berättade om en regel som de har i sitt team: När någon lägger fram en idé får de andra inte skjuta ner den. De får inte ens säga nej. De idéer som för tillfället inte passar in i projektet sätts ändå upp på väggen.  Varför? När vi sågar en idé riskerar vi inte bara att sänka den person som kommit med förslaget. Vi riskerar också att kasta bort en idé som kanske skulle passa utmärkt i ett annat sammanhang eller bara lite senare. Men då den redan skjutits ner, finns ett me...

Simon Elvnäs är forskaren som studerar det faktiska beteendet hos ledare och chefer. Sedan 2010 har han studerat ledares agerande i många olika typer av verksamheter med en unik och interaktiv forskningsmetodik. Resultatet? Sammanfattningsvis kan vi avslöja att de flesta chefer: inte gör det dom ska göra inte det dom tror att dom gör inte heller det som medarbetarna vill att dom ska göra. Nedan kan du läsa Simons reflektion om tid och effekt. EFFEKTIV vs. EFFEKTFULL Att vara effektiv är att hinna med många saker på kort tid. Att vara effektfull är att få ut största möjliga effekt av den arbetsinsats man gör.Sverige och säkert andra länder med oss är fyllt av chefer och ledare som arbetar för en ökad effektivitet. När jag frågar dem om vad effektivitet handlar om beskriver de hur de försöker hinna med många saker på kort tid. När något inte blir bra måste de hinna med ännu fler saker på ännu kortare tid. Till att börja med vill jag tydliggöra begreppet tid här. Tiden är konstant och...

Ja, det är väl ingen av er som missat diskussionerna om att allt ska mätas och analyseras i den digitala världen! När man kommit in i det arbetssättet så är det näst intill vanebildande, för det är mycket spännande att få reda på vad våra besökare på IHM.se tycker är bra och dåligt. Men mitt i all statistik och siffror kan det vara väldigt befriande att få in en bild från en annan källa, i det här fallet LinkedIn. Vi har idag över 20.000 personer som angett på LinkedIn att de har en eller flera utbildningar på IHM, alltså inget vi gjort själva, utan i respektive profil. Inte dåligt, men vi har ytterligare ca 20.000 alumner så det finns tillväxtpotential. Från vilka företag kommer de, vad jobbar de med, var bor de? Visst blir man nyfiken! Här får ni några bilder på hur IHMarna ute i världen ser ut, och finns du inte med på LinkedIn eller inte angett att du gått på IHM så är du välkommen!  Till sammanställningen på LinkedIn Ha en bra dag där ute!    

För varje YH-utbildning på IHM finns ett Advisory Board, som består av representanter från olika företag, i den aktuella branschen. De är med redan från början i utvecklingsarbetet för att ge så mycket tankar som möjligt kring vilken kompetens som matchar deras framtida behov. Det blir många intressanta och spännande diskussioner när företagens representanter jämför och inspireras av varandras branscher. Sedan kan de vara med och inspirera klasserna med olika föreläsningar eller case från verkligheten. Många får också kontakt med elever som sedan gör sin praktik på företaget. Vi träffar en av alla advisory-board medlemmar, och medlem i ledningsgruppen för Internationell Säljare B2B, Michel Laporte Godorn, för att få lite mer inblick i hur de tänker kring sitt engagemang. Michel har en bred bakgrund, trots att han bara är 32 år, som säljare, både i egna företag och som anställd på bl.a. Canon, Offitech, House of Ports och idag som VD, delägare och grundare till säljbolaget Vimentis. ...

För ett tag sedan ställde jag en fråga till en av våra IHM-lärare, Michael Engström: vem bör läsa IHM Business Management? Hans svar kom snabbt; – Alla :-)Business Management ger ett helhetsperspektiv av företagens värld, hur allt hänger ihop och fungerar, otroligt fascinerande. Vem skulle inte ha nytta av det? Jag har aldrig gillat definitionen ”alla” och frågade min chef vad han trodde. Intervjua våra deltagare som gått utbildningen, och se vad de haft för nytta av Business Management, så kanske du får ett bättre svar, sa han till mig. Så… …det var bara att börja. ”Alla” är ju väldigt många, men jag startade med en av våra färskaste deltagare, Håkan Mild - han tycker och tänker säkert en hel del i ämnet. Till slut får vi till ett möte och jag beger mig till glassfabriken Lejonet & Björnen, som han numera äger tillsammans med sin fru Katarina. På vägen dit funderar jag hur stor han är som idol i dag, och hur han upplevde  straffsparksdramatiken under VM i fotboll 1994? Ja, ege...

Hur ser framtiden ut? Dags att ta nästa steg? Det här är frågor som vi alla ställer oss då och då, frågor som naturligtvis är svåra att svara på, men också frågor som är väldigt viktiga för vår karriär. I ett försök att räta ut frågetecknen något så träffar vi Eva Sandberg som är Sverigechef på rekryteringsföretaget Harvey Nash. – Hej Eva, berätta lite kort om dig själv och vad Harvey Nash är för företag. – Hej, jag är affärsekonom i grunden och har jobbat många år bl a som marknadschef,  försäljningschef  och med rekrytering. 2014 så började jag på Harvey Nash som är en del av Harvey Nash Group med 7000 anställda i Europa, USA och Asien. I koncernen ingår även våra systerbolag Alumni och Impact Executives. Vi jobbar med att rekrytera chefer och specialister till företag inom privat och offentlig verksamhet med kunder inom olika branscher som  tex. försäkringsbolag, mediakoncerner, livsmedelsindustrin,  transport,  möbelindustrin för att nämna några. Men vi jobbar också med IT Outs...

Streamingtjänster har blivit det nya modeordet hos gemene man. På företagsmarknaden talar alla om molntjänster. I båda fallen avses prenumerationsbaserade leasingavtal för tjänster som levereras direkt över Internet. I takt med att det blir både billigare och smidigare att hyra än att köpa, kommer ingen längre att vilja äga.  De flesta av oss har använt Internetbaserade abonnemangstjänster sedan länge. Tänk bara på bank (e-banking), e-post (Google Gmail), bilder (lagring i molnet), filmer (Netflix), musik (Spotify, nu även Apple Music). Ja, i själva verket de flesta saker som har med "data" att göra på privatmarknaden kommer nu som en prenumeration direkt via internet. Vi har blivit hyresgäster som konsumerar efter vad vi gillar och behöver.  Men det var inte så länge sedan de flesta av oss ville köpa och äga. Under årens lopp har jag köpt och ägt min andel av musikkassetter, VHS, CD och DVD. Nu är allt detta ersatt av olika hyrtjänster över Internet. Tillgängligt närsomhelst och va...

Att vi pratar om hur bra vi på är IHM och hur vi har hjälpt företag och människor i karriären sedan mitten av 60-talet, har du säkert redan hört några gånger. Vi lovar inte att det inte kommer att hända igen, men vår ambition är snarare att låta nya och gamla IHMare komma till tals för att få ett mer spännande perspektiv. Nu har IHM över 15.000 Diplomerade marknadsekonomer (DIHM) sedan starten, och alla kanske vi inte hinner med att intervjua. Men här kommer en av alla våra spännande deltagare; Yvonne Ericsson f.d. Urbath, numera Community Manager på Nordic Innovation House i Silicon Valley, söder om San Francisco, USA. – Hej Yvonne! När jag ser din CV vet jag inte riktigt var jag ska börja, men vi börjar med lite lätt bakgrundsfakta. Härkomst, familj och intressen. – Hej Aludd, ja det har hänt en del genom åren :-) Naturligtvis är jag från Göteborg, och familj har jag, min man Jörgen och mina 2 barn, Philip och Olivia. Intressen utöver mitt spännande jobb är familj, natur och myck...

För att ge våra studenter de allra bästa förutsättningarna att bli framgångsrika i svenskt och internationellt näringsliv jobbar vi aktivt och målmedvetet med ledningsgrupper för varje enskild YH-utbildning. Där ingår företag och personer som har intresse av att utveckla och leda en specifik utbildning för att säkerställa att den matchar näringslivets behov av kompetens idag och i framtiden. En medveten strategi för allt fler företag i sökandet efter framtida talanger. Vi tänker försöka presentera några av dem under hösten så att man får lite inblick i deras engagemang på IHM. Först ut är Lina Höglund som är med i ledningsgruppen för IHM Ekonomi- & Redovisningskonsult YH. – Hej Lina, vilket företag kommer du ifrån? – Hej, jag driver den webbaserade redovisningsbyrån Credité Consulting AB tillsammans med min kollega Madeleine Lindblom. Vi har funnits sedan 2012 och är idag 8 anställda. Vi driver även renodlade lönebolaget Credité Salary Consulting AB tillsammans med Tove Andervas...

Sidor