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

”Vilka är det som minglar i Almedalen? Svaret är: alla. Och ju fler som väljer att tränga sig in, desto fler följer efter. I alla år har näringslivets höjdare hållit sig för goda för Almedalen, men nu kryper de till korset. För första gången har en Wallenberg vandrat i gränderna som en vanlig människa. ” Timingen kunde inte vara bättre för Sveriges ledande affärsskola att göra entré. ”Alla pratar vinster i välfärden. Och alla pratar om skolan. Dessutom pratar alla om läsning och bildning; också många som inte har sett en bok på vykort en gång. Men alla gillar en rejäl moralpanik – som forskarlarmen att en fjärdedel av alla skolpojkar inte längre kan läsa en sammanhållande text, eller att dagens universitetsstudenter inte kan skriva svenska. Det är rön som livar upp.” Almedalen handlar om att synas och tjäna pengar, om rosévin och mingel, om informella samtal och om politisk folkbildning. Ulrika Knutson, författare och kulturskribent vimlade bland kafferep och politikertal och citate...

För ett par veckor sen var jag och pratade för en härligt målmedveten samling Företagssäljare från IHM Stockholm som var pepp på att åka till Dublin och nu har det börjat ramla in frågor på mailen från andra IHM-elever som är sugna på att göra en Bachelor eller Master på Dublin Business School. Himla kul tycker jag! Frågorna rör sig mycket om boende, kostnader, språket och CSN, tänkte därför samla svaren i ett par rader här: Boende – vart ska man bo? Hur ska man bo? Vad kostar det?Till skillnad från Sverige är det väldigt vanligt bland studenter och ’young professionals’ att bo i kollektiv; man har alltså egna sovrum men delar allmänna utrymmen. City och förorterna är fulla av boenden; antingen hyr du in dig i ett rum, eller så går du ihop med ett gäng och hyr en lägenhet tillsammans. Observera att det senare alternativet kräver att någon går in som förstahandshyresgäst och står som ansvarig för el och internet. Många har frågat om vilket områden man ska bo i. För det första, även o...

Efter att uteslutande del av forskningen om effektiva ledningsgrupper varit fokuserad på de demografiska faktorerna, har forskarna de senaste åren börjat argumentera för att det behövs ett psykologiskt perspektiv inom ledningsgruppsforskningen. Man har med andra ord, efter dryga 50 år av gedigen forskning, kommit fram till den briljanta idén att man nog behöver ta hänsyn till hur de gruppdynamiska processer som omgärdar ledningsgrupper fungerar – eller inte fungerar. Ett stort steg framåt kan tyckas, men först behöver vi klarlägga vad som skiljer ledningsgrupper från andra grupper i organisationen. Och lite försiktigt nosa på frågeställningen ”Behövs ledningsgrupper?”.  Hur definieras då den unika karaktären hos denna strategiskt viktiga grupp, och hur skiljer den sig från andra grupper i den organisatoriska hierarkin?  För det första menar forskarna att ledningsgrupper utför uppgifter som är mer komplexa och ostrukturerade än vad som gäller för andra grupper. Ledningsgrupper behöve...

Efter att ha föreläst om vikten av könsmixade grupper, kompetens och kopplingen till ledarskap och företagskultur i Boston, New York, Amsterdam, Sankt Petersburg och Knohult, (Stockholm alltså) kan jag slå fast att i grunden kommer samma fråga upp överallt:  Hur engagera männen i frågor kring jämställdhet? Och hur få män att ens komma till seminarier i frågan? Ja, en sak är säker, använd inte ordet jämställdhet, då försvinner de flesta män. Så vad säga/skriva? Lönsamhet, kanske? Nja, det är klurigt. McKinsey och organisationen Catalyst hävdar visserligen att fler kvinnor i ledningen påverkar just lönsamheten. Men det där är ett farligt svärd att använda. De flesta män läser detta som att det är kvinnor i sig, den biologiska varelsen, som är lönsam. Och det har mig veterligen ingen sagt (jodå, det finns militanta feminister som hävdar detta, men de flesta av dessa har aldrig arbetat på ett företag, långt mindre suttit i någon företagsledning. De sitter i organisationer eller på våra ...

Jag var på en intressant föreläsning om cirkulär ekonomi häromdagen. Det handlade om vad vi företagare och marknadsförare behöver göra för att komma tillrätta med trycket på planeten. Vi måste anstränga oss hårdare och redan i affärsmodellen se till att det vi gör är långsiktigt hållbart. Det är sant och riktigt. Men det är inte lika mycket diskussion om konsumenternas uppoffring. Att först köpa toppar på HM för 49 kr styck och sedan förfasas över arbetsförhållandena i Bangladesh. Är det logiskt? Att fylla kundvagnen till bredden på Ullared och stolt visa sina överfulla garderober på bästa sändningstid kanske skvallrar om hur okritiska vi är i frågan. Jag vill inte att människor ska lida och vara fattiga. Därför måste vi förstås fortsätta att köpa grejor som är producerade i låglöneländer men vi måste se till att de tillverkas under värdiga förhållanden och att pengarna hamnar på rätt ställen. Men sen kanske vi kunde göra en sak till. Handla närproducerat?  För några år sedan försök...

Ibland räcker inte orden till för att beskriva hur fantastisk något varit. Precis så känner jag för mitt besök på västkusten. I Påskas fick jag och min irländska vän Fiona ett infall och åkte till havet. Med väskan packad tog vi tåget på lördagsmorgonen till Sligo och checkade in på på The TreeTops B&B. Vi tog oss ut till kuststaden Strandhill som bjöd på väldigt slumpartade möten med sköna personer; från surfarna vi lunchade med till folklivsforskaren som tog oss upp till Mount Knocknarea medan hon berättade en magisk sägen om drottningen Maeve, som sägs ligga begravd på toppen av berget. Maeve, en krigsgeneral som regerade över Irland 3000 f.Kr, skulle beskrivas som promiskuös och slug av somliga, andra som feminist, stark och målmedveten. Jag menar att hon var båda. Vi bar med oss varsin sten som vi la på drottningens grav för tur. Där, uppe på toppen såg vi sen ut över Fairy rings på de irländska gröna ängarna och Atlanten som sträckte sig oändlig. På nedvägen blev vi guidad...

Det är slutspurtsveckor för studenterna och tentaångesten är påtaglig. Jag själv har spenderat fyrtio dagar framför datorn eller hängandes över böcker. Jag har inte haft någon fritid och näst intill inget socialt liv och därtill, väldigt lite sömn. Men den sista föreläsningen är hållen, det sista arbetet inlämnat och tentan skriven. Jag har tagit mig ur ’The Finals’, Jag är fri! Kan inte påstå att de har varit de roligaste veckorna här, men sanningen är den att det finns positiva bitar även inne i denna bubbla. För det första, skapar tentaveckorna en grym gemenskap, vi är många som är i samma situation och jag har fått mycket energi, kraft och peppning när det behövs. För det andra, så läggs större delen av pluggandet åt att läsa aktuell forskning. Det leder till intressanta insikter och diskussioner med personer som sällan delar åsikt med en själv. Att hålla sig uppdaterad och att dra egna slutsatser är dessutom vad som skiljer ett högt betyg från ett lågt. Hursomhelst, vad som i h...

En tredjedel av terminen har nu gått för oss som gör examensarbete, DIHM, och hittills har allt gått enligt planerna. Mycket av det tror jag beror på att vi i god tid kom igång med sammansättningen av gruppen. Tack vare detta hade vi också möjlighet att i tidigt skede börja leta företag som var rätt för oss att sammarbeta med.  För just det här med att hitta rätt uppdragsgivare har vi lärt oss kan vara en svårighet. Många vi pratade med i början var positiva och kunde visst tänka sig att anlita IHM för ett examensarbete. Men när det sedan var dax var det som så ofta att man drog öronen åt sig, man hade inte tid, möjlighet eller råd att genomföra detta just nu. Så mitt råd till kommande studenter är att tänk ut företag ni vill arbeta med i god tid innan terminen startar (till och med innan er grupp är sammansatt) och prata tidigt med dem om vad det innebär med tid, engagemang, insyn i bolaget och kostnader för företaget. Inte bara IHMs avgift utan kanske behövs det en budget utöver d...

En av mina strukturadepter hade för mycket att göra. När hennes chef frågade hur hon har det, sade hon: "Alltså, det är verkligen för mycket nu. De närmaste månaderna hanterar jag tolv ärenden!". Hennes chef var inte så insatt i detaljerna i hennes arbete, utan för honom betydde "tolv ärenden" inte så mycket mer än vad det betyder för dig nu, du som inte alls vet vad hon arbetade med.  Han frågade: "På vilket sätt är det för mycket?" Min adept fick nästan tunghäfta. Hon kunde inte beskriva situationen på ett bättre sätt än att det helt enkelt "var för mycket" och att hon kände sig stressad. Vad som kom ut av samtalet var inte så mycket mer än en klapp på axeln och kvar satt hon, med för mycket att göra. Låt oss excelifiera När vi träffades kom vi snabbt fram till att vi behövde göra det tydligt för chefen hur mycket tolv ärenden är. I ett kalkylblad listade vi alla de att göra-uppgifter ett ärende bestod av och hur många minuter varje uppgift tar att slutföra. Vi fick fram en summa ...

Många talar om att skapa det optimala laget, men jag upplever att det genuina intresset saknas. Nästan alla företag pratar om att de anställda är deras viktigaste tillgång- men deras egentliga fokus ligger trots det på hur alla nyckeltal ska nås, samtidigt som man låser fast de anställda i processer och system. Till och med inom min egen bransch, mötesindustrin, ser jag samma utveckling - eller avveckling. Där möter jag allt fler människor som inte trivs på grund av att de inte får arbeta med det de en gång sökte jobbet för- nämligen människan. Det är nyckeltal, grafer, siffror och lite fler nyckeltal. Vem pratar om kunden (förutom i nyckeltal)? Vem pratar om medarbetarna (förutom i FTE)? Vem pratar om människorna? Det ser likadant ut i de flesta branscher. Det som är förvånande är, att mötesindustrins kärna handlar om att tjäna andra människor. Trots detta tycks det mig att människan får stå tillbaka för olika data och nyckeltal. Det finns säkert många olika orsaker att det har bli...

För några veckor sedan höll Maria Tornberg seminariet ”Ledningsgrupper i världsklass” på IHM i Göteborg. En ihållande förkylning spetsad med influensa symptom fick mig att kapitulera och stanna hemma.  Jag misstänker att ni som var med på föreläsningen var nöjda.  Det brukar man vara på skolans föreläsningar. När jag började på IHM gav min chef nästintill en order om att jag skulle gå på så många seminarier som jag bara kunde. Även om ämnet inte låg helt i linje med mina vardagliga uppgifter. Han menade på att det alltid finns saker att lära, få inspiration och utveckla till det egna användningsområdet. Han har en sund inställning till min studietid på IHM:”Ju mer du lär dig, desto bättre för oss!” brukar han säga. När jag pratat med flera av mina klasskamrater inser jag att långt ifrån alla chefer har detta synsättet och helhetssynen. När jag går på ett seminarium har jag för vana att alltid göra ett arbete av det jag just har hört och bevittnat. Även om materialet finns på IHMs si...

Jag ser här att det är 1 år och 29 veckor sedan jag bloggade sist. Och det har sin naturliga förklaring. Under den här tiden har jag förlorat tre nära anhöriga, varav den ena är min älskade mor. I ett år fick jag följa och stötta när hon förde en kamp mot tiden. Endast 66 år ung dog hon i ALS, en ohyggligt grym sjukdom som successivt bröt ner varenda muskel i hennes kropp, tills hon inte längre kunde äta, tala och till sist inte heller kunde andas. Helt klar i huvudet blev hon mer och mer instängd i sin kropp och utlämnad till alla runt omkring. Men trots sin utsatthet så kämpade hon in i det sista med att försöka kommunicera sin vilja. Hon var en intelligent kvinna med stor integritet men också stark och envis. Saknaden efter henne är enormt stor. Mitt i detta har jag ändå tagit mig fram till sista terminen på min DIHM. Det har varit oerhört tungt men ändå så givande, då studierna många gånger varit en slags ventil för mig när det känts som svårast. Och nu är det examensarbete för ...

Att gifta ihop forskning med krass verklighet är utmanande och bitvis både roligt och lärorikt, eftersom det tvingar oss att utmana gamla (förlegade) sanningar för att i stället se på frågor (och lösningar) med nya ögon.  Min tanke med att blogga på IHM är att dela med mig av aktuell forskning om högpresterande ledningsgrupper och effektivt ledarskap på olika hierarkiska nivåer. I första hand inte för att leverera sanningar, utan för att försöka bidra med nya perspektiv (och en och annan motsättning) som leder till att vi tvingas sätta invanda doktriner och befästa sanningar i nya sammanhang. Endast så kan vi växa och utvecklas.    Funderar på vad forskarna egentligen kommit fram till när det gäller högpresterande ledningsgrupper och blir aningen konfunderad. Nästan all forskning om effektiva ledningsgrupper handlar om de så kallade demografiska aspekterna, det vill säga ålder, utbildningsnivå, gruppens storlek, funktionell bakgrund och andra faktorer som är lätta att specificera (o...

Bor i Bryssel nu ett tag och sitter och funderar. En gång lekte barn i skog. Byggde kojor. Men bygga koja blev omodernt, skog likaså. Vi högg ner, städade upp och gjorde fina lekplatser. Men nu kommer rapporter som påstår att när barn får vara med i planering av nya bostadsområden då vill barnen ha… just det, skog. Dom vill bygga kojor. Trots allt vi uppfunnit och i vår stora generositet och omtanke, köpt och ordnat. Ty vi värnar om våra barn. Nu har vi leklanden, dataspelen, iPadsen, mobilerna, fredagsmyset framför fyrkanten, chipsen, ja ni vet. Allt i den omedelbara behovstillfredställelsens namn. Nu, nu, nu. Varför vänta? Och så vill dom ha skog, kidsen. Är det tacken? Samhället (vi alla alltså) utvecklas (?) och vill annat än skog. Det har pågått ett tag nu. Samhället vill ha konsumtion. Köpa, köpa, alltså finns jag. Egentligen startade det i smyg redan med makarna Myrdal (googla ni 80-90 talister, på Gunnar och Alva), dom var ju med och påbörjade färden mot framtiden, det var j...

Första gången som jag kom i kontakt med ledarskapsteorin GRID var för tio år sedan i Axfood akademins ledarutbildning. Robert Blake och Jane Moutons beteendemodell är en guide för chefer och ledare i att identifiera olika ledarstilar. Fokus på resultat finns i den ena axeln av ett rutmönster och relationer står i den andra. Kortfattat beskrivs en ledare med starkt fokus på resultat och produktion men ett litet engagemang för sina medarbetare som en 9.1. En ledare med litet fokus på resultat men starkt fokus på relationer benämns som en 1.9. Den optimala ledarstilen, den coachande ledaren som både får bäst produktiva resultat och medarbetare som trivs på arbetsplatsen benämns som en 9.9.   GRID utbildningen minns jag väl. Alla som går den får göra ett test för att ta reda på vilken ledarstil som ligger en närmast. En del kollegor kända sig mindre smickrande över sitt resultat. Ingen vill vara omodern eller ännu värre få en stämpel av att gå över lik för att nå framgång. När så George...

Happy St Patrick’s Day! I dagarna tre fullkomligt välde färgen grön över Dublin. Överallt fanns gröna vimplar och hattar, byggnaderna var upplysta (till och med Centralbanken!). Kaffet skummades med treklövrar och läsken färgades grön. Paraden lockade till sig människor från hela världen. Små som stora var utklädda, jag var inget undantag. Firandet höll på från morgon till kväll, mina irländska vänner drog mig runt på en traditionsenlig pubrunda och dagen var precis så där galen och rolig som jag hade trott. Om ni inte upplevt det, så rekommenderar jag er verkligen att komma hit!  Hursomhelst, St Patty’s kom som ett startskott för mig:- terminen har hittills varit rätt behaglig, men nu måste jag växla upp, för inom de kommande veckorna kommer hela terminen sättas på prov. Jag får ofta frågan om vad skillnaderna är mellan att plugga på Irland mot IHM. Och jag tror nog att just detta är den största skillnaden. I Sverige är vi vana vid att läsa en kurs och sen tenta av den, en i taget....

Sidor