/** * 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 av IHM Business School | IHM

Blogginlägg av IHM Business School

IHM Business School

Här kan du följa mycket av det som händer på IHM, stort som smått. Vi kommer också ta upp saker som händer i vår omvärld och ser gärna att du som läsare tipsar och kommenterar. Kul att ha dig här!

... jag har haft under mina 10 år på IHM! Det är fantastiskt roligt och utvecklande att få träffa så många människor som själva valt att vilja utvecklas och växa som ledare och medarbetare.  Ledarskap handlar mycket om självinsikt kombinerat med kännedom om mellanmänskliga relationer. Om jag vet hur jag själv fungerar och hur mitt beteende påverkar mina medarbetare, så ökar sannolikheten att jag skall kunna hantera mitt ledarskap på ett bra sätt. Har jag sedan förståelse för varför andra agerar eller reagerar som de gör, ökar förutsättningarna ytterligare.  FÄRRE SKA GÖRA MER TILL MINDRE KOSTNADI en värld där färre människor ska göra mer till mindre kostnad på mindre tid och jobba smartare, gäller det att alla utnyttjar sin fulla potential. Att frigöra den dolda resursen. Synen på Ledarskap håller på att förändras. Nu handlar det mycket mer om att våga ge medarbetarna förtroende att ta ansvar för sitt jobb, utan att för den delen abdikera som ledare. En utvecklande ledare leder geno...

IHM och Marknadscheferna i nytt spännande samarbete! MarknadschefsAkademin är en unik satsning på kompetensuppdatering för dig som arbetar som marknadschef eller marknadsansvarig – ett årsabonnemang med kunskap och kontinuerligt lärande.  Under ett års tid får du uppdateringar, den senaste kunskapen och trenderna inom marknadsföring – inte minst det digitala. Du möter andra i din egen situation och duktiga föreläsare inom utvalda områden. Ni träffas fyra heldagar under ett år för föreläsningar och workshops. Dessutom ingår MCPLAY-konceptet, där du varje vecka får en film med 9 utvalda minuter direkt till din egen dator.  

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

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

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

I vår serie ”Vad tycker våra deltagare?” är turen nu kommen till Petra Groth, Business Support & Project Manager på Bambino Mam AB. – Hej Petra, du har precis läst Digital Marketing på IHM. Vi är lite nyfikna på hur det gick, men först skulle vi gärna veta lite mer om din bakgrund. – Hej, jag är 25 år och läste en säljutbildning på Nackademin i Solna innan jag fick erbjudande om att vara management trainee på Bambino Mam i 1,5 år. Där fick jag möjlighet att vara både på sälj, marknad och ekonomi. Sedan blev det en fast tjänst som Business Support & Project manager och jag trivs väldigt bra. Vi är ca 15 personer på det svenska kontoret, vilket gör att man får vara med i många delar av det som händer. – Vad sysslar Bambino Mam med? – Vi är ett kundnära marknads- och säljbolag för babyprodukter av märket Bambino och Mam och säljer högkvalitativa produkter via dagligvaru-, apotek- och babyfackhandeln. – Och nu har du läst IHM Digital Marketing, hur kommer det sig? – Jag har seda...

Stiftelsen IHM har som enda mål att stärka svenska företags konkurrenskraft. Med det som utgångspunkt, startade vi i våras Digital Marketing, en intensivutbildning på 5 dagar. Våra utbildningar justeras och värderas ständigt utifrån deltagarnas och företagens kommentarer, för att alltid leverera maximal nytta. Under sommaren och hösten kommer vi att publicera några korta intervjuer med våra deltagare så att ni får en tydligare bild av de olika programmen. Först ut är Magnus Jonsson, 49 år, Digital Channel Manager på NCC, som precis läst IHM Digital Marketing. – Hej Magnus, det ska bli spännande att höra hur du upplevde utbildningen, men först vill vi gärna höra lite om vem du är och din bakgrund. – Hej, jag är 49 år, är gift och har 2 barn, 23 respektive 13 år gamla, bor i Stockholm. Jag har en bakgrund som journalist och blev webbredaktör på den digitala tidningen ”Sverige Nytt” redan 1996. Det var en tryckt tidning som gick ut till många utlandssvenskar runt om i världen. Efter d...

Möt några av deltagarna på IHMs program Strategic Brand Management.

Varje år så genomförs runt 1.000 företagsfusioner och uppköp i Sverige, uppemot 1.500 i högkonjunktur, men visste du att ungefär hälften av alla dessa samgåenden mellan företag misslyckas, inga roliga siffror! Vi träffar professor Rikard Larsson, Decision Dynamics, som forskat i ämnet, och konsulterat i fusionsfrågor i ca 30 år. Det är ingen duvunge vi träffar, professor Rikard Larsson har bl a 2 doktorsavhandlingar vid University of Southern California och Lunds universitet i ämnet, mer än 30 artiklar publicerade i ämnet och mycket mycket mer. Så… …låt höra vad han har att säga. – Hej Rikard, hur kommer det säg att du blev intresserad av det här med företagsfusioner? – Hej, den första kontakten jag hade med den världen var när det företag min far jobbade på blev uppköpta av en konkurrent, oerhörda krafter sattes i rörelse och de anställda hissade flaggan på halv stång när de fick beskedet. De likställde situationen med företagets död. – Men vad är fusioner+?  – Fusion (merger) är ...

Alla pratar om SEO, Search Engine Optimisation, eller sökmotoroptimering som det heter på svenska. Vi beslöt oss för att ta reda på lite mer och bestämde tid med Carl-Gustav Öberg som är VD, SEO-nörd och grundare av vår samarbetspartner Be Better Online. – Hej Carl-Gustav, vi är lite nyfikna på hur det här med SEO fungerar, men först vill vi gärna veta lite om din bakgrund. – Hej, om man tittar på min bakgrund i den digitala världen och mitt intresse av SEO så började det redan i högstadiet då jag byggde min första E-handel. Jag hade byggt några hemsidor tidigare men nu var det lite större och proffsigare, jag och min pappa ville sälja DVD-skivor på nätet. Jag är 28 år nu så det var ca 14 år sedan, verktygen och möjligheterna såg helt annorlunda ut, men det var då jag kom in ordentligt i det här med sökmotoroptimering och insåg hur roligt det var att driva trafik till en sida. Jag höll på med det som hobby till 2007 och jag fick mitt första SEO-jobb på en byrå när jag var 21. Där b...

En av alla nyanställda på IHM är Mervi Wouters som är affärsutvecklingsansvarig för Blended Learning. Men vad är det? Hur och varför, frågorna är många så vi bestämmer oss för att få till en pratstund med Mervi för att reda ut begreppen. – Hej Mervi, nu ska vi ta reda på allt om blended learning men först får du gärna berätta lite kort om din bakgrund. – Hej, det känns riktigt roligt att bli intervjuad för jag är mycket glad och stolt över min nya tjänst. Lite kort om min bakgrund blir svårt men jag gör ett försök.Jag är född och uppvuxen i Finland som du säkert hör, och mitt efternamn, som inte skvallrar om min bakgrund, har jag tack vare att jag sedan länge är gift med min man som kommer från Holland. Jag läste Ekonomlinjen vid Stockholms Universitet på 80-talet och parallellt med det startade jag tillsammans med ett par kurskamrater en redovisningsbyrå. Vi började tidigt med persondatorer och upptäckte att datorn i många stycken blev ett hinder för våra kunder. De förstod så kl...

Att våra utbildningar är bra har vi länge fått bekräftat genom att våra studenter får bra jobb ute hos företagen. Men nu ser vi också tydligt att många fler där ute har upptäckt IHMs Yrkehögskole-utbildningar. Vi får fler ansökningar än tidigare, vi får fler företag som vill ha praktikanter från IHM och vi har fler och fler representanter från näringslivet som vill engagera sig i våra Advisory Boards. Det är i dessa forum vi utvecklar program som matchar marknadens behov.   Nu börjar det intensiva arbetet med att genomföra muntliga tester och bedöma de blivande studenterna inför starten, riktigt skoj. Men många ansökningar på ett begränsat antal platser innebär också att inte alla kommer in, och vi hoppas självklart att ni som får det tråkiga beskedet söker igen, för nästa år kanske vi har fått ännu fler platser (och din arbetslivserfarenhet har ökat under tiden). Tack för alla ansökningar och väl mött i klass efter sommaren! Hälsningar gänget på IHM YH och lärare på Redovisningsek...

Vi träffar Niklas Dahl, Regionchef på Caperio och Mattias Bergkvist, COO och partner på CGit - båda sitter i ledningsgruppen för YH-utbildningen Säljare IT Solutions B2B. Niklas och Mattias är med och ställer krav på och påverkar så att utbildningen skall matcha IT-branschens behov av kompetenta medarbetare. Säljare IT Solutions B2B, som i höst startar för 4:e gången, ingår i IHM Yrkeshögskola och innebär 2 års heltidsstudier varav en tredjedel är praktik (LiA).    Varför har ni valt att samarbeta med IHM? -    I grunden finns det ett stort engagemang för att dela med sig av sin erfarenhet och hjälpa unga begåvade människor i arbetslivet, säger Mattias Bergkvist på CGit. Vår bransch har alldeles för länge ryckt medarbetare mellan varandra och det utvecklar inte branschen något alls. Vi behöver ha in mer nytt blod och det är otroligt härligt att jobba med yngre som inte är begränsade eller formade i sitt tankesätt. Det är innovativt för branschen!   -    För mig personligen började ...

IT-branschen skriker efter kvalificerade säljare med kompetens att ta helhetsansvar för affären och förmåga att skapa långsiktiga och lönsamma kundrelationer. En av de som har insett fördelarna med att satsa på en utbildning med spetskompetens inom IT är Aleksandra Jokovic som läser första året på IHMs YH-utbildning Säljare IT Solutions B2B. Här ger hon sin bild av utbildningen och framtiden.  Varför valde du en YH-utbildning på just IHM?Jag hade hört väldigt bra om skolan och tyckte kurserna verkade intressanta. Det kändes som att IHM kunde ge mig både bra grundkunskap och spetskompetens. Jag gillade även tanken med att ha lärare direkt från näringslivet som delar med sig av sina erfarenheter.  Varför valde du utbildningen Säljare IT Solutions B2B?Den var en vän som tyckte att jag skulle söka utbildningen. Jag hade inte tidigare varit i kontakt med IT-branschen så jag visste inte riktigt vad det innebar. Men efter att ha läst en del tyckte jag att inriktningen kändes rätt och det ...

Sidor