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

Förhoppningsvis är du ledig och njuter för fullt av sommarens alla möjligheter. Om du har tid över kommer här några lästips från oss på IHM, som kan inspirera, glädja och skapa funderingar. Trevlig läsning!   Konflikträdsla banar väg för psykopater på jobbet AI kommer förändra allt. Var drar vi gränsen? Bör vi dra en gräns? 8 steg att rusta din organisation att möta ständig förändring Från en dröm till en annan en resa i sig Toppbetyg till kursen som lär dig dra nytt av digitaliseringen När utmaningar blir möjligheter Undervisningen är direkt kopplad till verkligheten 5 områden som inte kan digitaliseras Att försöka förstå framtidens jobb Gör tvärtom i sommar Det känns så rätt, det är detta som jag vill göra Ni har väl kommit ihåg att framtidssäkra verksamheten? Fantomen var är du? Du behövs i digitaliseringen! Ny forskning sätter ljuset på destruktiva ledarbeteenden Att komma ut på en arbetsplats och kunna knyta kontakter var avgörande för mig   Trevlig sommar, önskar vi på IHM!  

Under måndagen, den 29 maj, beslutade eniga stämmor om att Sveriges Auktoriserade Utbildningsföretag (SAUF) går samman med Almega Utbildningsföretagen och bildar Sveriges största branschorganisation för privata aktörer inom vuxenutbildning. I och med sammanslagningen kommer Almega Utbildningsföretagen organisera 175 utbildningsföretag.  SAUF är en branschorganisation för utbildningsföretag som arbetar med kompetensutveckling av vuxna för arbetslivet. Grundbulten i verksamheten är kvalitetsauktorisationen. Almega Utbildningsföretagen är bransch- och arbetsgivarorganisationen för företag som arbetar med vuxnas lärande och kompetensutveckling. Nu går dessa organisationer samman.  Almega Utbildningsföretagen och SAUF blir därmed Sveriges ledande branschorganisation för stärkt kvalitet inom vuxenutbildningen. Genom medlemsföretagens bredd och mångfald kommer vi nu i ännu större utsträckning än tidigare bidra till att stärka Sveriges konkurrenskraft och öka innanförskapet på arbetsmarknad...

Digitala ekosystem, IoT, molnresor och hybrid-it. Akronymerna haglar inom it,  en bransch där förändringshastigheten går snabbare för varje dag som går. Digitaliseringen hittar varje sekund nya tillämpningar där it och infrastruktur påverkas när nya aktörer och tekniker tar plats på arenan.  UtmaningenAtt utbilda sig för att möta de utmaningar som komplex it kräver av en säljare är som att lära sig att manövrera ett tåg som under resan förändras till ett flygplan och där resan avslutas som en raket på väg till en okänd planet - allt medan förutsättningarna ändras och besättningen byts ut. Låter det skrämmande? Jovisst, men samtidigt sjukt spännande och givande - att få verka i en bransch som aldrig står still. Atea och IHM Business SchoolAteas region Syd har under 5 år samarbetat med IHM Business School genom medverkan i ledningsgrupper och arrangerande av LIA-platser för utbildningen Säljare IT-Solutions B2B. Under perioden har 9 studenter hunnit genomföra sin LIA hos oss, 5 av dem...

Mitt namn är Johanna Carlsson och jag läser utbildningen Säljare IT Solutions B2B på IHM Business School i Malmö. Jag började min utbildning på IHM hösten 2016 och innan dess var jag bosatt i Schweiz och jobbade inom hotell- och restaurang. Jag hamnade just i Schweiz för att jag har ett brinnande intresse för skidåkning och vandring i vackra alperna, men också för att jag älskar att träffa nya människor och drivs av utveckling och nyfikenhet. Jag har alltid gillat att jobba i kontakt med människor och har sedan barnsben drivits av försäljning i olika former, service och mötet mellan människor. Att läsa på IHMEfter att ha jobbat några år efter studenten och provat på diverse olika jobb, läst distanskurser och upplevt Europa blev suget efter en utbildning stor. Jag blev rekommenderad att läsa på IHM av några bekanta och när jag tittade närmre på kursplanen för utbildningen väcktes mitt intresse ännu mer. Att fördjupa mina kunskaper inom försäljning har alltid stått högt på listan och ...

Du får femton års lärdomar från Göran Adlén om hur man ska kunna förutse framtiden och du får lyssna till hans senaste rykande färska fjorton trender och hur de kommer att påverka alla företag och organisationer på olika sätt. Den riktar sig till alla som vill ha insikter om vilken framtid och vilka utmaningar vi kommer att möta.  Du kommer att få höra om det senaste inom marknadsföring, ledarskap, kommunikation, hållbara samhället, hälsa, personlig utveckling och en massa tankar och studier om generation z, både som framtidens konsument och medarbetare. Och vi kan lova dig att det är mycket där vi måste tänka om kring.  Denna föreläsning är en ”upphottad”, uppfräschad och förkortad lightversion från Göran Adléns femtonde och sista stora trendrapport 2017 som han släppte tidigare i år. Och så släpper Göran Adlén samtidigt en bok ”Liten snabb och fylld av kärlek”. 240 sidor i läcker design med sammetsomslag i ett format som du kan ta med dig och läsa överallt. Här hittar du Görans lä...

Åse Henell, som i mars 2017 avgick som Faktums vd efter fem år i verksamheten, är IHM Business Schools nya marknadschef. Hon kommer att jobba med att stärka varumärket och öka kännedomen om IHM:s utbildningar i Stockholm, Göteborg och Malmö.   Arbetet med att alltid vara ajour med samtiden är viktigt och vd Peter Hägglund, ser värvningen av Åse Henell som en viktig del i detta arbete.   - Åse har lång erfarenhet av marknadsfrågor och har varit aktiv inom en mängd olika branscher. Vi på IHM Business School ser fram emot att ta del av hennes kunskap och engagemang, säger han.   Åse Henell, som förutom vd-posten på Faktum, har ett förflutet som varumärkesansvarig på Göteborgs-Posten samt byråchef på den digitala kommunikationsbyrån Maverick by Sigma, är mycket glad och smickrad över erbjudandet från IHM Business School.   - Det var enkelt att tacka ja. Jag har alltid velat jobba i utbildningsvärlden och kände direkt när jag kom innanför dörrarna på IHM att det finns en energi och kraf...

Redan som barn lär vi oss skilja på begreppen bra och dåligt. Idag vet vi också att dåliga upplevelser ger starkare och mer varaktig effekt än bra. Det kan vara som så att orsaken till det här ligger långt tillbaka i människans utveckling och kan kopplas till våra överlevnadsinstinkter. Om vi ser till ledarskap så har den mesta forskningen och utvecklingen haft fokus på positiva faktorer och hur ledarskapet ex kan utvecklas för att nå högre effekt i organisationen. Men det börjar blåsa andra vindar då ny forskning nu visar att ”Bad is stronger than good”, dvs att dåliga ledarbeteenden medför starkare och mer varaktiga effekter. Ledarskapets mörka sidor kan således vara hot mot framgång, effektivitet och kultur i en organisation och värst av allt – negativa beteenden smittar. Ledarskapets mörka sidor – Destruktivt ledarskap Inom IHM använder vi oss av beprövad kunskap och forskningsbaserade modeller. En av dem är IL (Indirekt Ledarskap) som återfinns i IHM Strategisk Ledning. Här bel...

Välkommen till ”Vita huset & Jag”, podden där Andreas Utterström i varje avsnitt berättar en verklig historia hämtad från det politiska livet från Kennedy till Trump. En rolig eller spännande händelse, och vad det var som gjorde att det blev så, exempelvis när Rick Perry ville avskaffa tre myndigheter i USA och vid en utfrågning glömde av vilken den tredje myndigheten var, eller guvernören som försvann i sex dagar, eller när Sarah Palin trodde Afrika var ett land, hur blev det så?  Veckans avsnitt: "När Reagan blev skjuten"John Hinckley Jr ville imponera på Jodie Foster. Så han försökte mörda president Ronald Reagan. Och lyckades nästan. Ladda ner avsnittet i Itunes eller Acast. Mycket nöje! Podden ”Vita huset & Jag” hittar du på iTunes eller Acast, men för enkelhetens skull så kan du sätta upp dig på prenumerationslistan, så får du ett mejl med länk när vi publicerar nya avsnitt. Det här kommer garanterat att bli både intressant och roligt, så häng med! Andreas Utterström ...

Accelerera digitaliseringen av din affär! Utveckla en strategi, gör en innovationsplan och få energi att driva förändringsarbetet framåt.Hör vad några av deltagarna på IHM Digital Business Transformation har  att säga om kursen och möt David Ståhlberg, utvecklingspartner till IHM.  Vad är digital transformation?Digital teknik vävs in i alla väsentliga delar av samhället. Digitaliseringen möjliggör nya smarta lösningar som underlättar för oss som medborgare, privatpersoner och kunder. Den digitala transformationen öppnar också upp för nya innovationer och nya affärsmodeller, och etablerade företag står inför stora utmaningar för att klara den omställning som kunderna kräver.Disruptiv innovation är när en hel marknad förändras till följd av att människor förändrar sitt beteende. Vi ser hela branscher slås ut när nyetablerade företag med ny teknik lanserar nya, smarta, användarvänliga lösningar.Att gå från analogt till digitalt är ingen quick fix - ofta handlar...

Välkommen till ”Vita huset & Jag”, podden där Andreas Utterström i varje avsnitt berättar en verklig historia hämtad från det politiska livet från Kennedy till Trump. En rolig eller spännande händelse, och vad det var som gjorde att det blev så, exempelvis när Rick Perry ville avskaffa tre myndigheter i USA och vid en utfrågning glömde av vilken den tredje myndigheten var, eller guvernören som försvann i sex dagar, eller när Sarah Palin trodde Afrika var ett land, hur blev det så?  Veckans avsnitt: "När gud sa till Michele Bachmann att hon skulle bli president"Hon var bra i tv-debatterna, älskade att gå till attack och hatade Obamacare. Dessutom hade gud sagt till Michele Bachmann att hon skulle bli president. Men sedan sprack allt. Ladda ner avsnittet i Itunes eller Acast. Mycket nöje! Podden ”Vita huset & Jag” hittar du på iTunes eller Acast, men för enkelhetens skull så kan du sätta upp dig på prenumerationslistan, så får du ett mejl med länk när vi publicerar nya avsnitt...

  För 10:e året delas Stora Retorikpriset ut under festliga former på IHM i Stockholm 9 mars. Juryns motivering lyder: "Årets pristagare har som god folkbildare gett uppmärksamhet åt sunt förnuft, god ton vikten av hänsyn till våra medmänniskor. Med stil och erfarenhet skriver vår pristagare böcker och besvarar brev – delar generöst med sig av råd och kunskap; allt med personlig kryddning och retorisk sälta. Det är en vinnare som med sitt uttryck har gjort intryck." Vinnare 2017 är Magdalena Ribbing, författare, journalist och stil- & folkvettsbildare. IHM ber att få gratulera!    

Välkommen till ”Vita huset & Jag”, podden där Andreas Utterström i varje avsnitt berättar en verklig historia hämtad från det politiska livet från Kennedy till Trump. En rolig eller spännande händelse, och vad det var som gjorde att det blev så, exempelvis när Rick Perry ville avskaffa tre myndigheter i USA och vid en utfrågning glömde av vilken den tredje myndigheten var, eller guvernören som försvann i sex dagar, eller när Sarah Palin trodde Afrika var ett land, hur blev det så?  Veckans avsnitt: "När Trump skrev sin bibel""The art of the deal" kom ut 1987. Men hur gick det till när Trump skrev sin bestseller? Och varför hatar medförfattaren honom så intensivt? Ladda ner avsnittet i Itunes eller Acast. Mycket nöje! Podden ”Vita huset & Jag” hittar du på iTunes eller Acast, men för enkelhetens skull så kan du sätta upp dig på prenumerationslistan, så får du ett mejl med länk när vi publicerar nya avsnitt. Det här kommer garanterat att bli både intressant och roligt, så häng...

Exempel på etablerade företag som haft svårt att förändra och tänka nytt kan göras lång - Kodak och Nokia hör till två av de mest kända. Christian Sandström, docent vid avdelningen Science, Technology and Society vid Chalmers Universitet, har forskat kring vad som händer med etablerade företag och branscher när nya digitala tekniker introduceras. Men vad är det som gör att företagen faller i dessa gropar och tar de snedsteg som i vissa fall visat sig bli förödande? Hur växer den nya tekniken till sig? Vilka är utmaningarna? Och vad finns det för gemensamma nämnare bland företagen som omkullkastats? Lästips Industri 4.0 - smart, effektivt och lönsamt Ladda ner "Vad skapar affärsmässig framgång i ett teknikföretag?" IHM Digital Business Transformation - Ny affärslogik, nya arbetssätt!  

Välkommen till ”Vita huset & Jag”, podden där Andreas Utterström i varje avsnitt berättar en verklig historia hämtad från det politiska livet från Kennedy till Trump. En rolig eller spännande händelse, och vad det var som gjorde att det blev så, exempelvis när Rick Perry ville avskaffa tre myndigheter i USA och vid en utfrågning glömde av vilken den tredje myndigheten var, eller guvernören som försvann i sex dagar, eller när Sarah Palin trodde Afrika var ett land, hur blev det så?  Veckans avsnitt: "När världens lataste kandidat imploderade"Han var Hollywoodskådis. Han var ex-senator. Han hade folkets kärlek. Men Fred Thompson var för lat för att bli president. Ladda ner avsnittet i Itunes eller Acast. Mycket nöje! Podden ”Vita huset & Jag” hittar du på iTunes eller Acast, men för enkelhetens skull så kan du sätta upp dig på prenumerationslistan, så får du ett mejl med länk när vi publicerar nya avsnitt. Det här kommer garanterat att bli både intressant och roligt, så häng m...

Sanna Engzell, går sista året på YH-utbildningen Konceptutvecklare Event och Besöksnäring, och gör nu sin LIA (praktikperiod) i Sydafrika hos den svenska ideella organisationen  Project Playground.     Om vi börjar med din bakgrund, vem är du? – Jag heter Sanna Engzell, 28 år och bor i Sundbyberg. Innan jag började på IHM jobbade jag som privatrådgivare på Sparbanken i Enköping. IHM är den första utbildningen jag hoppat på sen gymnasiet. Har alltid velat studera vidare men har aldrig hittat en utbildning som passar.   Varför valde du att läsa Konceptutvecklare Event och Besöksnäring på IHM? – Jag har länge sökt efter en utbildning som riktar in sig på eventplanering och marknadsstrategier. Men i mitt sökande så kände jag att många andra utbildningar var för smala och nischade. Det är viktigt för mig att få bred kunskap som jag kan ha nytta av i det yrke jag väljer. Kursplanen för konceptutveckling ger mig den bredden.      Nu är du ute på din andra LIA-period som du har valt att g...

Sidor