/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $settings = &drupal_static(__FUNCTION__, array()); if (!isset($settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… if ( ( // If this URI has a host, and… isset($parts['host']) && // The host is different from the current host… $parts['host'] !== $base_url_parts['host'] ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; // Let's also normalize the server doc root. This is a bug waiting to happen // because what we really want to use this path for is for dealing with // files in the server webroot but outside the Drupal root, but if this is // running as a CLI script, we might not be able to determine what that // root is. In that case, we'll use the Drupal root. // @see http://drupal.org/node/1780398 $filter->settings['docroot'] = (drupal_is_cli() || !isset($_SERVER) || !isset($_SERVER['DOCUMENT_ROOT'])) ? DRUPAL_ROOT : $_SERVER['DOCUMENT_ROOT']; $settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $settings['current_settings'] = &$settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~(href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $settings later and not have the changes be "permanent." $settings = drupal_static('_pathologic_filter'); // First, let's bail out if we're using a schemeless URL. // @see http://drupal.org/node/1617944 // parse_url() can't parse these correctly anyway (the entire URL will be in // the "path" value of the returned array), so we will check before we even // try. if (strpos($matches[2], '//') === 0) { return $matches[0]; } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE // If there's a scheme part and it doesn't look useful, bail out. // "files" and "internal" are for Path Filter compatibility. || (isset($parts['scheme']) && !in_array($parts['scheme'], array('http', 'https', 'files', 'internal'))) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. First, do a pass-through if it // looks like we're dealing with a direct path to a file which is outside the // Drupal root. Use realpath() and the server's (?) docroot to iron out // wrinkles to the file's actual path. // @see http://drupal.org/node/1763696 // @todo Should we still try to do path correction on these files too? $filepath = realpath($settings['current_settings']['docroot'] . '/' . $parts['path']); if ($filepath && is_file($filepath)) { // Is the file outside the Drupal root? if (strpos($filepath, DRUPAL_ROOT) !== 0) { return $matches[0]; } else { // Linking to a file inside the Drupal root. Okay. $settings['is_file'] = TRUE; } } elseif (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $settings['is_file'] = TRUE; } else { $settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } } // Okay, if here, we either found something, or we hit the end of the loop. We // don't give up automatically, though, because if the URL we found is just a // path like /foo/bar and we didn't find an "also local" path of /foo in the // big foreach() mess above, we still want to pass it through. if (!$found && !(isset($parts['path']) && !isset($parts['host']))) { return $matches[0]; } // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // Let's see if we can split off a language prefix from the path. if (!$settings['is_file']) { if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } else { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. // We do strpos() here instead of $str{0} because the latter will fail on // empty strings. if (strpos($parts['path'], '/') === 0) { $parts['path'] = substr($parts['path'], 1); } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are enabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($settings['is_file'])) { $settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($settings['is_file'] && !$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return "{$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Blogginlägg | IHM

Blogginlägg

Under veckan har rapporteringar från New York Times och The Observer visat hur en tredjehandsapplikation och politiska byrån Cambridge Analytica massivt missbrukat datan om över 50 miljoner invånare inför det amerikanska valet via Facebook. En händelse som fick Facebook aktien att backa upp mot 7% på en dag och skapa kris inom organisationen. Händelserna om hur Cambridge Analytica använt och missbrukat datan bör lära oss väljare samt politiker ett antal läxor inför årets svenska val. Men låt oss se det hela i en historisk kontext.  En ny verklighet är nu skapad. Valstugorna är borta, TV och tidning är inte längre de främsta källorna för information. För politiker gäller det nu att skapa digitala valstugor för att vinna val. En verklighet som är självklar för politiska partier, men förstår vi väljare egentligen vad som sker och hur det påverkar oss inför valet? Förstår vi att plattformar har så pass mycket data om oss att mjukvaran känner oss bättre än vad vi känner oss själva?  Dryg...

Sverige är ett varumärke i världsklass. Vi har topplaceringar i internationella mätningar för mjuka värden såsom frihet, jämställdhet, språkkunskaper, öppenhet, hälsa och demokratiska värderingar. Inte nog med det: Sverige har även topplaceringar när det gäller It-teknik, bioteknik, anti-korruption och trygghetssystem. Det gör Sverige attraktivt för investerare och företagare. Men så stor framgång för ett så litet land provocerar.  Kängor från Vita Huset Donald Trump var som bekant snabb med att skicka en känga om vad som egentligen försiggår i Sverige, under sitt tal i Florida förra året. Han var dock inte den förste i Vita Huset som ifrågasatt idealbilden av Sverige. Redan i början av 1960-talet fick Sverige en rejäl knäpp på näsan av den amerikanske presidenten Dwight D Eisenhower - en knäpp som är kännbar än idag.  Eisenhower ville misskreditera sina politiska motståndare genom att slå hål på den svenska modellen - ”The Middle Way” - där den kungliga familjen, en socialistisk re...

I en ny undersökning från Novus uppger ungefär var tredje svensk att de kommer att ändra sitt beteende på sociala medier, exempelvis sluta göra personlighetstester eller frågesporter på Facebook. Men bara några få kommer till kritan, de flesta vill inte lämna sina vänner trots att deras personliga information har läckt. – Jag vill att du föreställer dig att du går in i ett rum, ett kontrollrum där massor människor, hundratals människor hänger över skrivbord med små tangentbord - och att det kontrollrummet kommer forma tankar och känslor för en miljard människor. Det kan låta som science fiction men det existerar just nu idag. Jag vet för jag brukade vara i ett sådant kontrollrum. Så inleder IT-designern Tristan Harris, med bakgrund inom Google, ett tal på TED.com. Han har nu startat en motrörelse mot de globala IT-jättarnas samhällspåverkan, eftersom han ställde sig frågan hur det kan vara etiskt försvarbart att styra människors tankar. Det är detta tema som nu satt världen i gungni...

I had a very interesting discussion about American competitiveness the other day. With a non- american, I should say. We were talking about the necessity of competition in a workplace.  I came home one day, and marveled at the ineffectiveness of the workplace that I´d visited. They stay in the office until 8 p.m. shuffling papers, doing nothing! Why would they do that?! I exclaimed very self righteously. - Because of competition, he responded calmly. And it is encouraged, he continued, everyone is encouraged to compete with their colleagues by arriving the earliest and leaving the latest.  - But it’s so ineffective! ( Swede*) I went on, by now, everyone knows how the human brain works, and that it is impossible to work effectively for twelve hours a day! I’m not saying there are never situations that calls for 15 hour workdays, nor that I have never or wouldn’t do one when called for, I was just reacting to the fact that this is made the norm. - Do you consider yourself competitive?...

Samtidigt som förändringstakten blir mer och mer turbulent och omvärlden allt mer oförutsägbar är vår biologiska anpassningsförmåga alltför långsam sett ur ett evolutionistiskt perspektiv. Många av hjärnans viktigaste funktioner fungerar på samma sätt idag som för miljoner år sedan då vi levde under helt andra livsbetingelser, ständigt på vår vakt för att inte bli offer för hungriga rovdjur.  Hjärnans viktigaste uppgift är att säkerställa vår överlevnad. Det är en nedärvd och automatisk funktion som vi har att tacka för att människan som art har överlevt på jorden. Det intressanta med denna överlevnadsfunktion är att den är lika aktiv i dag som den var för miljoner år sedan, fastän vi (förhoppningsvis) inte behöver smyga runt i korridorerna på jobbet i rädsla för att bli uppätna.  Vårt överlevnadssystem styrs i huvudsak av amygdala, en fantastisk liten apparatur placerad djupt inne i hjärnan. Amygdala kan liknas vid ett brandlarm som ständigt skannar av omgivningen i jakt på något s...

Likt många andra idrotter står golfen inför ökade krav från en rad olika håll. En ökad kommersialisering, ökad individualisering, digitalisering, ändrade konsumtionsbeteenden och ökad konkurrens är några trender som påverkar idrotten. Det ställer nya krav på klubbchefen.  PGA (Professional Golfers’ Association of Sweden), GAF (Golf Administratörernas Förening), Svenska Golf Förbundet, Claesson Konsult AB tillsammans med IHM, utbildar framtidens klubbchefer inom Golfen. - Vi balanserar logiken och krafterna från idrotten med det kommersiella, och ut från utbildningen kommer en ny typ av klubbchefer. De har starka rötter i Golfen men kan ta affärsmässiga beslut och agera utifrån en gedigen kunskap. De kan  utveckla och driva sina respektive golfklubbar och anläggningar, skapa värde för sina intressegrupper, och hantera de ökade kraven som omvärden ställer på en Golfklubb, säger Johan Hampf, utbildningschef på PGA of Sweden.   Stort grattis till alla er som gått "Golfens klubbchefsutbi...

– Vi vill få tjejer att våga satsa på sin dröm, det spelar ingen roll om drömmen är att vill bli vd för ett mångmiljonföretag eller om drömmen är att driva en liten ideell rörelse eller studera utomlands. Herway ska vara ett litet universum, där man kan bli inspirerad att uppfylla de här drömmarna, berättar Nathalie Rajic som drog igång projektet i höstas tillsammans med klasskamraten Katja Fjellström.    Bild från lanseringsfrukost. Foto: Niki Zekaj Herway.se är ett nystartad onlineplattform vars mål att inspirera kvinnliga entreprenörer till att våga tro på sig själva och sina drömmar. Via storytelling och nätverkande vill Herways initiativtagare berätta den ärliga sidan om framgång - att framgång sällan är en spikrak väg och att framgång kan se ut på många olika sätt.   Hur kom Herway till?   – Jag och Katja fann en gemensam låga för kvinnliga entreprenörer och tjejer som vågar gå sin egen väg, vi ville berätta vidare deras historier. Sen byggde vi ett koncept, tog fram ett va...

Under de senaste veckorna har DN och Expressen rapporterat kring Google och i synnerhet YouTubes publicistiska ansvar. Kortfattat handlar det om kontroversiellt innehåll som är minst sagt antisemitiskt. Men kan man kräva samma publicistiska ansvar av YouTube som av en tidning? Jag är inte ute efter att berätta vad som är rätt eller fel, men jag skulle vilja lyfta debatten gällande hur vi ser på en fri och öppen webb till en annan nivå.   Gammelmedia passar på att gotta sig i kritik. För fakta är att Google och YouTube har varit de största annonstjuvarna online för både print och linjär TV. Det finns mycket undertryckt irritation från de traditionella medierna som kommer ut helt fel och huvuddebatten missas helt. Till exempel har Expressen gått alldeles för hårt ut mot Googles landschef Anna Wiklund med nedlåtande bilder och rubriker som gör mig direkt förargad. Krasst har en landschef inget att säga till om vad det gäller mjukvaror, restriktion och innehåll. Det är en fråga helt oc...

When I think of the motivators considered to be the driving forces and characteristics of the stereotypical Saleswoman/man, what first comes to mind is: Money. In other words, Provision: the ability to influence the numbers on your paycheck. Which promotes a competitive mindset as well as “Walking over bodies to get the deal” and  “every man for himself” mentality.  The driving forces for the stereotypical Nonprofit professional would then sound like the complete opposite: Mission. Really meaning: You don't get paid.  Teamspirit is vital, uniting and feeling committed to the mission is absolutely essential for a Nonprofit. Asking for people to give you things - often with “nothing” to offer in return, which means there is really no “deal”.  So how does Sales have anything to do with Nonprofit organizations? In “To sell is Human” by David Pink, Mr Pink is writing from the thesis that everybody is selling something, and that requiring skills in sales is beneficial for everyone, whethe...

När Beyoncé är på turné och har genomfört kvällens spelning, går hon igenom varenda liten detalj igen i huvudet. Hon skriver ner de saker hon vill förbättra till nästa spelning, och på morgonen skickar hon ut detta till bandet. De repar på dagen och redan kvällen efter är de bättre. I affärsvärlden talas ofta om prestation. Men många springer bara fort, utan att göra de där små förbättringarna. Saker och ting blir inte bättre och lärandet uteblir. Hur kommer det sig? Inte överraskande handlar det om tankens kraft och om vilket mindset vi har. Efter ett par år i samma yrke, planar prestationen vanligtvis ut. När vi tycker att vi har blivit tillräckligt bra, lägger vi all tid på att utföra jobbet – och med rutin kan vi springa lite fortare, hinna lite mer. Men ingenting blir egentligen bättre. Det du inte tänkt, kan du inte minnas För att lära oss något, behöver vi stanna upp och reflektera. Avsätt lite tid och träna medvetet på ett utvalt moment, fila på en enda sak, innan du springe...

Eftersom jag är helt inne på att förkovra mig i digitalt content, var jag ju tvungen att släppa loss lite bomber på något socialt forum. Jag läser allt jag kommer över och går IHMs fantastiska utbildning Content & Marketing Management – allt för att hitta naturliga kopplingar mellan Dynamic Sales och konsekvenserna av digitaliseringen hos våra kunder. Vad skulle hända om jag postade ett inlägg som kunde skapa disruptivitet och slå sönder folks verklighetsuppfattning när det gäller vissa sanningar inom säljvärlden? Valet föll på Linked In.  Jag kommer ihåg scenen i filmen ”Gladiator” när Russel Crowes karaktär med ett säkert, dramatiskt men ändå vemodigt uttryck i ansiktet utbrast ”Unleash hell”! Lite så kändes det när jag såg reaktionerna på det, helt uppenbart, kontroversiella inlägget!  Vad händer när vår världsbild blir ifrågasatt? När någon omkullkastar människors verklighetsbild, kan vad som helst hända. Vissa kan bli fullständigt desillusionerade, andra blir chockade och ...

YH-examen från IHM 2017, och sen rakt ut i näringslivet. Martin Ydergren är den kräsne studenten som via yrkeshögskoleutbildningen Säljare IT Solutions fann precis det han sökte: Högklassig praktiskt affärskunskap.     - Jag läste tidigare på Handelshögskolan i Göteborg men valde att byta till IHM eftersom jag ville ha mer praktiskt tillämpbara kunskaper i affärsmannaskap, ekonomi och försäljning - och det kunde IHM erbjuda. Jag gjorde mina LIA-perioder på IT-företaget Atea och fortsatte jobba där efter min examen, på det sättet kom jag in i IT-branschen. Min arbetstitel är erbjudandespecialist och jag ansvar för Ateas skolerbjudande i Sverige.   Vad gör en erbjudandespecialist?- Jag fokuserar på skolerbjudanden som ges till allt från förskolor upp till gymnasium. Det kan handla om försäljning av surfplattor, chromebooks och datorer, men också om IT-utbildningar och tjänster. Arbetet går sen ut på att förpacka våra erbjudanden, så att paketen vi säljer är vassast på marknaden. I d...

My Swenglish is worse than EVER. I mix Swedish and English in every sentence without any respect or regards to grammatical correctness whatsoever. I am, however, comforting myself with the fact that all of my fellow Swedish Expats do exactly the same.  But I have to say that the predominant feeling after one month in Atlanta is (to my own surprise) is patriotism. A sense of pride in being Swedish.  In being part of a country  where education and health care is available to an extent that most americans couldn't even dream of.  In being a woman of one of the most equal countries in the world. And making a mental note to remember this, not to take it for granted, and that it is not something that has been accomplished without effort. My first month in Atlanta is about to end and unlike what my a bit pomp intro would suggest, here are some of my more everyday impressions of Georgia: The beer is BRILLIANT. Period. The breweries here should get  rewards for especially human friendly/ Li...

Det händer mycket i Björn Grunners liv. Efter 17 års studiefrånvaro har han nu utbildat sig till marknadsekonom DIHM, och i samma veva tagit sin första fasta anställning någonsin. Från självlärd egenföretagare står han nu redo att lämna in sitt examensarbete på IHM. Så här säger Björn själv om sin karriär: - Jag gick ut gymnasiet någon gång runt 85, 86. Då var jag väldigt skoltrött och började jobba direkt. Jag startade längst ner i nöjesindustrin och var mer intresserad av praktikaliteter än teori. Jag var då 20 år och har drivit egen firma sen dess. Nu långt senare bestämde jag mig för att växla över och tog så mitt livs första anställning som Deputy CEO vid Woodlite Sverige AB. - Hur kom du i kontakt med IHM?- Jag hade tidigare tittat jättemycket på IHMs projektledarutbildning, men inte ansett mig ha tid att göra den. Sen hörde jag att en projektledare som jag jobbade med hade gått den, och jag visste att hon hade det precis lika stressigt som jag. Då gick jag hem och anmälde mig...

I år är det 50 år sedan stiftelsen Institutet för Högre Marknadsföring bildades. Sedan dess har fler än 50.000 personer gått på IHM. Det vill vi uppmärksamma!     ”Företagsdoktorn” Ulf av Trolle, professor i företagsekonomi vid Handelshögskolan i Göteborg var på 60-talet en tongivande visionär och inspiratör inom det då nya ämnesområdet marknadsföring. Trolle menade att kombinationen av teori och praktik inom marknadsföring, management, ledarskap och affärsekonomi var en nödvändig förutsättning för att utveckla ett professionellt affärsmannaskap.    Efterfrågan av “Högre kurser i Marknadsföring” visade sig vara stort och så bildades Institutet för Högre Marknadsföring IHM 1968. Kombinationen teori och praktisk tillämpning var central liksom erfarenhetsutbytet mellan lärare och deltagare - succén var given. 1971 lossade IHM på banden till högskolan och gick sin egen väg.    Den här veckan firar vi våra 50 år tillsammans med några av våra samarbetspartners. Kom in på en fika om du ha...

”Vi tycker att Läxhjälpen gör ett riktigt bra arbete med ungdomarna för att stimulera intresset för studier och erbjuda hjälp för dem som inte kan få det hemma. För IHM är det självklart att hjälpa till så fler får möjlighet att klara sin skolgång” säger Åse Henell, marknadschef på IHM. 18 600 av Sveriges elever nådde inte högskolebehörighet förra året, och det är nästan var femte elev (18%). Stiftelsen Läxhjälpen arbetar för att fler ska bli godkända genom att stötta på ett professionellt och genomtänkt sätt. Här får de hjälp att klara sig i kärnämnena, men det är långt ifrån allt. Läxhjälparna är också dörröppnare för alla möjligheter som finns, för elever som aldrig har varit i city förut, eller som tror att man måste vara rik för att plugga på högskolan. Nominerade på Faktum-galan Vi talar med verksamhetschef Henrik Szabo och passar på att gratulera till nomineringen i kategorin Årets utbildningsinsats på årets Faktum-gala. - Ni startade upp verksamheten 2007 och finns nu i 43 ...

Sidor