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

I föregående inlägg beskrev jag om hur försäljningen sålt in sig till mig och hur jag uppfattar det, idag går jag in på varför jag valde just utbildningen säljare IT-solutions. Mitt intresse för teknik har jag fått ifrån min far. Det intresserade mig redan i tidig ålder då jag och min familj bodde utanför Borås på en stor gård som var uppdelat på tre hus. Under åren vi bodde där så hade min far olika typer av IT projekt där missionen var att effektivisera den gamla gården till i mina ögon sett, ett privat Silicon valley. Vi hade interna IP-telefoner som var anslutna till varje hus, ett NAS nätverk där samtliga familjemedlemmar kunde dela filmer / bilder med varandra utan att gå till den specifika datorn och överföra manuellt. Man kan säga att min far lade grunden till mitt intresse för IT och gav mig inblick i hur man kan effektivisera sitt vardagliga IT-liv, precis så som företag idag strävar efter att automatisera och effektivisera sina organisationer. Jag förstod i tidig ålder hu...

Digitalisering, ett ord på allas läppar och ”trendordet” nummer ett under 2017. Plötsligt är alla konsulter digitaliseringsexperter. Låt mig vara tydlig: digitalisering är ingen bubbla, ingen fluga och ingen vind som man bara kan ducka för. Nej, det är ny dimension som ledare och organisationer måste förhålla sig till, något som undertecknad också beskriver i boken Get Digital. De som inte gör det kommer inte att överleva. Så enkelt är det. Det är en ny era som vi i boken sammanfattar med följande tre sanningar: Allt som kan digitaliseras kommer att digitaliseras. Allt som digitaliseras kan kopieras. Allt som kopieras, sjunker i värde. Fler och fler branscher upplever detta, från tidningshusen till detaljhandeln, banker och konsulter. Ingen bransch kommer undan, och det gäller att tackla frågan. Men om detta är sant, så är det lika sant att det som inte kan digitaliseras ökar i värde. Det är kärnan i vad vi vill få fram i boken. För just häri ligger paradoxen som ger enorma möjlighe...

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

När Jeff Daniels får ett utbrott i tv-serien ”The Newsroom” levererar han inte bara ett politiskt tal med massor av känslor. Vi som gör podden ”Retoriskt!”, som IHM sponsrar, tänkte tipsa om att han samtidigt använder en klassisk grundmodell.  Den är dessutom utmärkt för idéförsäljning, strukturbeskrivning och marknadsföring – även i svensk jobbvardag. Se här:   Vi är ju vana vid 4P från marknadsföringens grundkurs (ni minns Kotler va?) – men de 4 p:na i den här retoriska modellen beskriver i stället enkelt vad ett bra, övertygande framförande kan innehålla. Position, Problem, Possibilities, Proposal. Och om vi tar exemplet med Jeff Daniels i klippet: Position, nuläget:  ”Vi tror att USA är bäst i världen, men det är det inte.” Problem, alltså vad nuläget som måste förändras: ”Andra länder har bättre hälsovård, läskunnighet, matematikundervisning, spädbarnsöverlevnad, förväntad livslängd och så vidare.”  Possibilities, möjligheten att lösa problemet:  ”Vi var ju jättebra förr, slog...

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

Det här med hållbarhet…  Att hamna i ett samtal om hållbarhet är ganska vanligt nu för tiden. Du har säkert själv hamnat i någon diskussion som tangerar hållbarhet på sistone. Kanske i samband med en föreläsning, vid ett affärsmöte eller på en middag med vänner? Vi möts dagligen av hållbara budskap, produkter och frågeställningar var vi än är.  Har du någon gång tänkt eller mötts av tanken: ”Det här med hållbarhet… Det är viktigt, men kanske inte just nu. Eller, det är inget för mig. För oss”? Flera har tänkt den tanken - Det är inget för oss. Inte just nu. Det kanske inte gällde hållbarhet den gången, men situationen var densamma. Man var upptagen i det som var just då och missade det som förändrades runt omkring en. Framförallt missade man att anpassa sig och hänga med.  I värsta fall kunde det innebära att man gick från att vara världsledande till att helt ”plötsligt” behöva kämpa för överlevnad. Eller ännu värre. Det går inte att värja sig från att fundera på hållbarhet eller hu...

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

I förra veckan hade jag en mycket inspirerande dag på D-Congress – Nordens mötesplats för digital handel, som anordnas årligen av Svensk Digital Handel och Svenska Mässan i Göteborg. Här är det flera scener med många talare som tar upp för dagen aktuella ämnen, dessutom massor av utställare som presenterar sina lösningar på hur de kan hjälpa dig med din digitala affär. Jonas Ogvall, VD för Svensk Digital Handel, presenterar även i år uppåtgående siffror för den digitala detaljhandeln med ca 15%. Han pratar också om hot och möjligheter i branschen, där den digitala handeln allt mer suddar ut nationsgränser. Det är naturligtvis inte bara vi i Sverige som kan sälja till utlandet, allt fler globala aktörer ser också Sverige som en viktig marknad. Det här är frågor som är spännande ur många perspektiv och som jag kommer att återkomma till med lite olika infallsvinklar. Men dagens bloggfunderingar tar sin utgångspunkt i ordet på allas läppar, hållbarhet. På stora scenen står Maria Wetter...

Jacob Kellgren, en av de elever som gått ”Konceptutvecklare Event & Besöksnäring” på IHM Yrkeshögskola, är nu involverad i Petter Stordalens nya satsning kring Brunkebergstorg i Stockholm. Vi bestämmer tid för intervju för att höra mer om hans roll inför premiären i slutet av mars. – Hej Jacob, du är ju inblandad i det spännande hotellet At Six som har premiär i slutet av mars så det vill jag gärna höra mer om, men först lite bakgrundshistorik. – Hej, jag fyller 28 i år, kommer ursprungligen från Skåne men är nu bosatt i Stockholm sedan fyra år tillbaka. Efter studenten började jag som reseledare på Fritidsresor (numera TUI) och hade världen som arbetsplats under fem år. Under de fem åren så fick jag även jobba som sales & service manager och destinations manager. Jag tröttnade på att byta land/destination/bostad var sjätte månad så jag sökte mig till huvudkontoret i Sthlm där jag fick en tjänst som Crew & Duty Officer på TUIfly Nordic. – Och det är också då som du börj...

Sedan ett antal år tillbaka jobbar jag med content marketing och gör dagligen nya upptäckter i den digitala kommunikationsvärlden, men förstår jag allt? Nej, långt ifrån. Jag har ett hum om det mesta, men i min ålder så känns det ofta lönlöst att gå på djupet i jakten på förståelse av den nya världen när jag ständigt möter unga killar och tjejer som hanterar många delar av den digitala världen med bravur och självklarhet. Men jag vill ändå försöka förstå hur de yngre generationerna ser på framtidens jobb. Jag bestämmer möte med Alexander Bjernvinge, 27 år, ursprungligen från Varberg men nu bosatt i Stockholm där han läser första året på IHM Digital Marketing and Sales Analytics. Kanske blir jag något klokare?! – Hej Alex, kul att du tog dig tid. Hur tänkte du när du sökte den här utbildningen? – Hej, kul att bli intervjuad! Jag flyttade upp till Stockholm för ca 7 år sedan med drömmen om att bli rockstjärna. Jobb för mig, på den tiden, var bara något nödvändigt ont. Men i takt med ...

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!    

Kraven ökar på öppenhet och transparens. Gränsen mellan vad som är fantasi och verklighet, sant eller falskt i etern, blir dock alltmer oklar. Lika oklar börjar gränsen bli mellan seriösa och oseriösa aktörer på området - inte minst när det gäller nyhetsrapportering. I en enkel handvändning kan fakta manipuleras och spridas över hela jordklotet. Det kunde inte vara bättre förspänt för psykopater att sprida falska nyheter. Typiska psykopater avskyr rampljuset till skillnad från sina kusiner narcissisterna, som är besatta av att synas och höras. Psykopater arbetar hellre bakom kulisserna för att skaffa sig makt och erbjuder gärna sina tjänster till en narcissistisk frontfigur. De spelar slugt på dennes fåfänga behov av att ständigt skönmåla sin egen person och smutskasta kritiker och rivaler. Sprängkraften i falska nyheter gör psykopater till etermediernas nya härskare.  Psykopaters paranoida hållning skapar emellertid ett synfält som blir svart och onyanserat; de ser fiender och kon...

Ovanstående skriver Sebastian Seeman, Food and Beverage Manager på Pop House Stockholm, på sin Linkedin profil. Sebastian har läst YH-utbildningen som idag heter Konceptutvecklare Event & Besöksnäring på IHM och han sitter numera med i ledningsgruppen för densamma. Jag blev nyfiken och ville veta mer om Sebastian och åker därför ut till Pop House, i folkmun även kallat ABBA-museet, ute på Djurgården för en intervju. – Hej Sebastian, vad menar du med ovanstående citat? – Hej, jag gillar att pröva nya vägar och ser förändring som något som driver mig framåt. Jag kan bli lite trött på tanken att det bara skulle finnas en väg att gå, bara för att stigen är upptrampad är det inte säkert att det är närmsta eller bästa vägen. Jag är nyfiken helt enkelt. – Så hur ser din väg in i besöksnäringen ut? – Oj, den är både lång och krokig. Jag började med extrajobb som smörgåsnisse på Stallmästaregården när jag var 15 år, det blev några år där, en tid som jag värderar högt idag för där fick j...

Grant Cardone har gjort sig en dollarförmögenhet på säljträning. Det här klippet visar hur han försöker sälja sina webbutbildningar. Vi som gör podden ”Retoriskt!”, som IHM sponsrar, har analyserat Cardones knep som även du kan använda. Även om Grants stil är lååångt från hur en svensk telefonsäljare skulle prata är det superintressant att höra hur han jobbar:     Faktum är att Grant Cardone jobbar efter ett klassisk retoriskt upplägg, dispositio – även om han kör det på speed. Så här: Exordium, inledning​(Detta har Grant redan gjort när vi kommer in i klippet) Narratio, orientering, framställning av saken(Kunden på andra sidan luren är säljare. Om han måste försörja sin familj och sina små barn så behöver han Grants hjälp) Partitio, alltså indelning av omständigheter och förutsättningar(Argument och risker. Säljer du för lite? Då är du för dålig! Har du inga drömmar? Är du nöjd med att bara betala räkningar? ”Are you fine with letting your family down?”) Confirmatio, bevi...

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

Sidor