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

Att ”big data” är i ropet är det få som missat. Allt som är digitalt går att mäta och går det att mäta går det även att optimera. Men vad ska vi göra av alla data och vem som ska göra det undrar desto fler. Marknaden har ett stort behov av digitala specialister, analytiker och kommunikatörer och YH-utbildningen Digital Marketing & Sales Analytics är ett sätt att tillgodo se dessa.   För att få en bättre inblick i digital marknadsföring och analys träffar vi Jonas Nordhammer på TV4 gruppen som har arbetat med digital marknadsföring, media och försäljning sedan år 2000. Det finns inte mycket digitalt som Jonas inte arbetat med och han är även en av referenspersonerna bakom Digital Marketing & Sales Analytics. Vad är det viktigaste med digital marknadsföring och analys? Vad behöver man som marknadsförare eller analytiker ha koll på? Allt handlar om flöden – digital framgång är att kunna optimera och konvertera. Du måste veta hur du attraherar trafik, var dina besökare kommer if...

Hej igen. Som ni säkert sett tidigare så försöker vi på IHM att delge er lite av alla de historier som våra elever och deltagare bär med sig i bagaget. Detta för att inspirera er till att ta nästa steg i karriären, gärna på IHM, för det är då vi kan nå målet som stiftelsen IHM har för ögonen, att stärka svenskt näringsliv. Idag får ni möta Adam Vilhelmsson, 25 år från Vara men nu bosatt i Stockholm. – Hej Adam, då ska vi titta lite på din historia, så vi kan väl börja från gymnasiet, vad gick du då? – Hej, mitt val inför gymnasiet var väldigt lätt; Vara hade en kombinerad fotbolls- och tekniklinje. För mig var fotbollen oerhört viktig, att det dessutom blev teknik såg jag nog mer som en bra förberedelse inför eventuella universitetsstudier. – Och blev det någon spännande fotbollskarriär? – Haha, nej, dessvärre blev jag aldrig proffs som nog var drömmen i unga år, men jag tog mig till A-laget i Vara SK, och nu spelar jag i Mariebergs SK här i Stockholm. Jag älskar att spela på grund...

Vi fick ett mail från Fabian Spennare, student på IHM Säljare B2B, i helgen, vi tyckte att det verkade riktigt spännande så här nedan ser du mailet i något förkortad version, så nu är det bara att göra som Fabian säger, lycka till! Hej IHM! Fabian heter jag och studerar på IHM Business School och utbildningen Säljare B2B. Jag kom för några veckor sedan i kontakt med en onlinemässa för studenter och unga yrkesverksamma som heter Global Talent Week. Ett väldigt spännande och innovativt sätt för studenter att enkelt och kostnadsfritt komma i kontakt med några av världens mest attraktiva arbetsgivare som t.ex. IBM, Tesla, Tieto, PwC m.m. Jag skulle gärna sprida det i IHMs nätverk för jag tror det kan göra stor nytta. Så... ...skulle ni vara intresserade av att arbeta för några av de bästa arbetsgivare som t.ex. Tesla, PwC, IBM, STATOIL eller TIETO? Eller skulle ni vilja träffa Skandinaviens främsta innovationshubbar? Vad sägs om att utöka ert nätverk genom att ansluta er till en stor t...

Inom de flesta yrkesgrupper är en formell utbildning både ett krav och en kvalitetssäkring för arbetsgivare och kund. Arbetsgivare vill ha kompetenta medarbetare, kunden vill arbeta med professionella aktörer. Att man har de formella grundkunskaperna för att utföra ett yrke är självklart. Med tanke på hur komplext och ansvarsfullt ett säljarbete är, blir det märkligt att de flesta som jobbar med försäljning är "självlärda" eller har personliga egenskaper som man av någon anledning anser är rätt för att vara en duktigt och framgångsrik säljare. Detta är kanske det viktigaste arbetet man kan utföra på vilket företag som helst, ändå har de flesta ingen utbildning! Vad är då orsaken till detta? Tidigare har det inte funnits någon formell utbildning att tillgå. Det har varit krav på att arbetsgivarna själva kompetensutvecklar sin personal. Flertalet kan inte detta då man inte har kompetens, tid eller förståelse. Jag själv utbildar på IHMs utbildning Säljare IT Solutions B2B och de som lä...

MCPLAY är en ny och unik satsning på kontinuerligt lärande för marknadsförare och ledningsgrupper. Här kan du enkelt ta del av andras kunskap, erfarenhet och företagsresor. Filmerna är specialproducerade inom områden som marknadsföring, varumärke, försäljning, kommunikation, ledarskap och entreprenörskap. Inspirera dig och din arbetsgrupp i ert arbete. Du har fri användning internt med bl a fördjupningsmaterial. Och vi ordnar påfyllning varje vecka. 40 utvalda kunskapsfilmer per år (varje arbetsvecka - året runt). Fördjupningsmaterial (ex rapport, modell, bilder, artikel). Filmen är oftast på svenska, men ibland har vi internationella gäster. I ditt arkiv når du alla gamla lektioner. Använd filmerna internt som kompetensutveckling för din avdelning. Eller för att förstärka en presentation eller ett budskap i din ledningsgrupp. Erbjudande för IHMareÄr du IHM-alumn, undervisar på IHM eller prenumererar på vårt nyhetsbrev IHM Update? Då betalar du endast 1 995 kr + moms/person för en ...

När jag var liten visste jag precis vad jag skulle bli när jag blev stor. Jag skulle bli läkare. Allt jag läste, fokuserade på och drömde om handlade om det. När jag skulle välja gymnasium fick jag rådet av syokonsulenten att först läsa till sjuksköterska. Ett intressant råd sett ur ett värderingsperspektiv, men det var inget jag tänkte på då. Jag blev sjuksköterska, ett fantastiskt jobb som lade grunden för en fin tid i mitt liv. När jag tillslut sökte in på läkarlinjen tog mitt liv en helt annan vändning. Det var olika händelser som gjorde att jag istället bestämde mig för att arbeta med människor på ett annat sätt, en tanke hade väckts i mig om att vilja söka och fånga den skillnad som gör varje person till den bästa version av sig själv. 1991 startade jag mitt eget företag och fick fritt spelrum att arbeta med människor, värderingar och förändring. Det har jag gjort sedan dess, inom näringslivet och offentliga sektorn såväl som inom idrotten. En av många höjdpunkter har varit at...

Alla talar om den. Vissa har kommit långt, medan andra kör på i gamla hjulspår. Digitaliseringen - att utveckla verksamheten med modern IT-teknik - påverkar ett företag i grunden och börjar i toppen. Vi ringer upp författarna till "Att leda digital transformation", Marie Andervin och Joakim Jansson, som har arbetat med boken i tre år tillsammans med ett 40-tal co-creators från forskning och näringsliv.  - Hej Marie & Joakim! Den digitala transformationen är ett hett ämne i allt fler lednings- och styrelserum. Varför då?- Hej Monica! Det är flera saker som påverkar. Det kommer fler och fler studier som tydligt visar på att digitalt mogna bolag har bättre lönsamhet. En annan del är att konkurrensen ökar från nya aktörer, som är helt digitaliserade eller har ett digitalt anslag. Styrelser och ledningar ser också att bransch efter bransch utmanas, och det traditionella sättet att tjäna pengar på omkullkastas. Det viktigaste är dock att ägare, styrelse och ledning har insett att det ...

Precis som vid varje nytt år är det många av oss som vill börja om eller förändra både vårt privatliv, arbetsliv och vårt ledarskap. Januari månad är den månad när flest nya medlemskap köps på olika Gymanläggningar, och i januari brukar det också vara ganska trångt bland vikter och maskiner men vart efter månaderna går är det inte längre riktigt lika trångt. Vad har gymkorten med ledarskap att göra? Jo precis som när vi efter nyår vill ta tag i vår hälsa och träning är det många som vill förbättra sitt ledarskap. Och precis som med träningen är intentionen att nu ska det till en förändring. Nu är vi redan inne i mars månad och ”nystartseffekten” har kanske redan börjat avta eller dala. Denna effekt är i allra högsta grad verklig och för många innebär ankomsten av t.ex. ett nytt år, ny roll på arbetet eller nytt företag en ny chans att göra om och göra rätt, eller åtminstone göra det bättre. Denna nystartseffekt skapar ofta en starkare motivation och drivkraft att starta om, förbättr...

 En av mina vänner är full av idéer. På gott och ont. Den här gången ledde hans infall, och min oförmåga att lyssna, till att jag för tretton år sedan blev misstänkt för att vara en bombman.   – Snart 40, då är du körd vad det gäller att få fast jobb Så sa en vd till mig. Tuffa besked, tänkte jag som precis hade planerat att söka anställning. Jag frågade min kreative vän om råd och han sa:  – Buda ansökan i en bankbox av plåt så kommer du att synas. Du kan få en av mig, jag har trehundra stycken.  Nu undrar du kanske varför någon förutom en bank har den volymen bankboxar, och kanske om min vän även har ett lager med skidmasker. Svaret är enklare än så. Han bara är sån. En idéspruta. I början av nittiotalet lånade han exempelvis pengar för att köpa betydligt fler regnkappor än antalet bankboxar vi har talat om här. Tanken var att han skulle göra storkovan i Roskilde när det sedvanliga regnet drog in över konsertbesökarna. Då skulle han stå där, som en räddande ängel med regnskydd til...

Förra veckan fick jag förmånen att medverka som jury på UF mässan som hölls på Svenska Mässan i Göteborg. Så himla kul! När jag gick på gymnasiet var UF väldigt stort på vår skola. Mycket av detta berodde nog på de två fantastiska lärare som hade detta ämne som sitt för de egna valen man kunde göra. Jag hade väl tänkt som alla andra att ha ett UF bolag, men fick istället frågan om att vara med i den grupp som skulle driva elevkaféet vilket jag hoppade på. Det kändes på nått sätt mer riktigt. Vi hade samma projektlärare som UFarna. Att skolans ledning plötsligt beslöt sig för att lägga ner vårt kafé och lägga ut hela kafé verksamheten på extern part kan man ju se som lite halvkasst för vårt projekt. Den rektorn som var ansvarig över detta beslut kom vi att kalla ”kortbyxan” eftersom hans brallor alltid var 10cm för korta… Han var inte min favorit kan man säga, och om jag ska vara ärlig var jag säkert inte hans heller… Men, vi fick driva det en stund, göra en del roliga förändringar, ...

Att utbildningen Ekonomi- och Redovisningskonsult är superbra och att vi har massor med sökande visste ni säkert redan. Den glada nyheten är att utbildningen nu även berättigar till auktorisation via SRF.  Vi ringer upp en av våra uppskattade lärare på utbildningen, Mikael Nodlycke, för att ställa några frågor om auktorisationen, arbetsmarknaden och framtidsutsikterna. - Hej Mikael! Har du hört den glada nyheten?- Ja, det är en väldigt trevlig nyhet! Tidigare var studenterna tvungna att komplettera sina kunskaper inom några områden trots att det teoretiska och praktiska kunskapsinnehållet i utbildningen håller mycket hög nivå. Det som är nytt är att de nu slipper komplettera – när de examineras från IHM har de all den teoretiska kunskap som behövs för auktorisation. - Vem är du, och hur tycker du att det är att vara lärare på utbildningen?- Jag är civilekonom från Handelshögskolan i Göteborg med inriktning redovisning, beskattning och finansiering. Jag har vidare studier inom bland ...

Min dörr är alltid öppen, bla, bla, bla.  För 2 år sedan skrev jag på bloggen om arbetsmiljö och mobbing. Nu kommer nya regler för arbetsgivare, från 31 mars 2016.  Märkligt ändå, det blir alltså inte roligare och roligare på våra arbetsplatser trots gratis latte och gymkort. I en debattartikel i DN idag slår Arbetsmiljöverkets generaldirektör Erna Zelmin-Ekenhem fast att: "Mellan år 2010 och 2014 har antalet anmälda arbetssjukdomar på grund av den organisatoriska arbetsmiljön ökat med 70%. För hög arbetsbelastning och problem i relationerna på arbetsplatsen är exempel på vad som ligger bakom siffrorna. I en ny intervjuundersökning som Arbetsmiljöverket låtit göra, svarade över hälften av de tillfrågade arbetsgivarna och arbetstagarna att de känner någon som har blivit sjuk på grund av stress på jobbet (68% respektive 80%). En majoritet av de cirka 1 000 arbetsgivare och 2 000 arbetstagare som intervjuats känner också någon som är i riskzonen för att bli sjuk på grund av stress på j...

Tänk hur många timmar jag har kastat bort på att matcha olika personer med lämpliga mentorer.  Likt en äktenskapsmäklerska har jag noggrant kartlagt vem som passar ihop med vem. Detta ända tills jag fick frågan från en journalist om vad som är viktigast i en mentorprocess. Jag sa att det var att man hittade och fokuserade på de verkliga utmaningarna. Alltså inte att man matchas med rätt person.  Då insåg jag att ingen av oss som gör matchningar egentligen vet vad som är människors verkliga utmaningar i sina roller och verksamheter. Eftersom människor själva oftast inte vet det, är en av mentorn huvuduppgifter att hjälpa till i sökarbetet. En bra mentor är lite av en spårhund, kanske en Bosanski ostrodlaki gonic-barak, som nosar runt och till slut kanske hittar ett spår som den andra tappat bort och plötsligt … Ja plötsligt händer det.  Jag skulle vilja säga att det allra viktigaste i en mentorprocess är att mentorn är bra på att nysta, fråga, klura, utmana, använda sina personliga l...

Att förstå hur förändringen från analogt till digitalt påverkar din affär är en ren överlevnadsfråga. Och det du tror omöjligt är snart verklighet, givet takten och effekterna av den digitala transformationen. På många sätt.  Vi bad Johan Belin, som har jobbat med varumärken och reklam sedan 1989 och inte minst med IHMs kommunikation på senare år, att tänka till om möjligt och omöjligt framöver.  Som anställd och som ägare/ledare på ett antal reklambyråer under rätt många år nu, har jag fått uppleva hur nya förutsättningar påverkat inte bara min egen bransch, utan alla typer av verksamheter jag haft förmånen att få inblick i. För reklambyråer, såväl som för alla branscher, förändras verkligheten mer än någonsin just nu, när det mesta kan göras om till ettor och nollar. Så vad är beständigt? Vad är utgångspunkten, säker mark, när vi skall försöka ta oss till uppsidan av förändringen? Kundnytta borde vara svaret. Oavsett teknologiutveckling eller beteendeförändringar så måste en aff...

Har ditt företag en tydligt identifierad målgrupp för er content marketing? Och har ni även lagt ned tid på att lära känna målgruppen - vilka behov de har, hur deras utmaningar ser ut och var ni kan nå dem? Om inte så är det en prioriterad aktivitet för er att ta tag i. Det här är min tredje post för IHM i en serie där jag listar fyra utmaningar och fem möjligheter med content marketing. I den första posten gav jag min definition på vad content marketing är (länk). Den andra handlade om utmaningen med att ta reda på vad vi egentligen åstadkomma med content marketing. Minst lika viktigt som att veta varför man gör något är det att veta vem man gör det för eller till. Framför allt inom content marketing där ett fundament är att innehållet ska vara relevant och värdeskapande för en definierad målgrupp. Definiera din målgrupp Ändå är det många företag som har svårt att identifiera och definiera en målgrupp. Och ännu fler som gärna definierar dem alltför brett - “alla kvinnor mellan 20-4...

Hej igen! Jag får ofta höra från personer som söker mentorer att det är så svårt att hitta rätt mentor. Det finns ingen som kan min bransch tillräckligt bra. Ingen har erfarenhet av att jobba i just min roll. Den som pluggat på KTH vill ofta ha en civilingenjör som mentor. ”Då fattar mentorn vad jag pratar om”. En affärsområdeschef inom ett logistikföretag söker en mentor som är specialist inom logistik. Lika barn leka bäst. Jag har hört detta tusen gånger och blir lika förvånad varje gång. Måste en mentor verkligen vara ett läskpapper av dig och din yrkessituation? Börjar det klia nu, så här kan det väl ändå inte vara? Tänk om och tänk nytt är mitt enkla svar. Mångfald berikar. Ofta finns det betydligt fler perspektiv på en utmaning än vad man själv vid en första anblick ser. Ett exempel, du är ledare för ett IT-företag och har en utmaning att öka tillväxten i din affär. Tänk tanken kring en mentor som är formel-1 förare, störtloppsåkare, cirkusartist, musikproducent eller kanske t...

Sidor