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

Ja, vart är dom? Kvinnorna som ska sitta i styrelser och ledningar? Kvinnorna som ska ta över när vi börjar rekrytera utifrån kompetens istället för utifrån kön. Ja, svaret är att dom finns överallt runtomkring oss. Det är bara att se sig omkring och utvidga nätverket. Jag har tidigare skrivit om engagemanget och entusiasmen som jag mött på KTH i Stockholm (finns även på Chalmers i Göteborg) där unga kvinnor är positiva och snart redo för större uppgifter. Kanon för framtiden!  Men vart är dagens svenska kvinnor, förebilder, som likt Anne-Marie Slaughter eller Julia Gillard (googla grabbar) kliver fram och säger ifrån ordentligt? Det händer nämligen ingenting, vad gäller styrelser och löner, enligt SCBs (Statistiska Central Byrån) rapport som presenterades 2012-11-06. I Sverige finns ett antal databaser med kvinnor på olika nivåer som kan anlitas och anställas nu. Regeringens initiativ Styrelsekraft är ett exempel och det finns många andra privata aktörer. Själv har jag numera ett s...

I stort alla stora organisationer jag varit inne i, i mitt 30-åriga arbetsliv, så vill alla ha en bättre feedback kultur. Eller enklare uttryckt, alla vill få mer beröm. Detta delar oftast också chefer med två åsikter. 1. Vi är här för att jobba och inte att gulla. 2. Ja vi borde ha en bättre feedback kultur, men jag som chef får heller aldrig feedback. Därefter stannar detta trots att medarbetarundersökning efter medarbetarundersökning visar detsamma: Vi vill få mer feedback! Det är en av våra mest grundläggande behov dessutom att vara sedda, vi vill alla ha beröm, vi tycker om att utvecklas och få hjälp till detta etc. Varför fungerar det då inte? Jag tror att ser vi till personen så kan vi ha en chef som aldrig fått beröm hemma, som kanske bara har blivit bekräftad genom prestation och på så sätt inte känner kraften i att få beröm. Har vi en sådan ledare som tycker det är "lull-lull" att ge beröm eller skapa en stämning där vi berömmer varandra och ger varandra feedback så tror j...

I vår vardag på jobbet gör vi saker som går fort och saker som tar lång tid. En del uppgifter kan vi bestämma oss för att göra nu, varpå vi gör dem. Andra behöver vi komma tillbaka till litet då och då och göra delar av för att till slut gå i mål några veckor senare och få glädjas åt att sätta den där "klart!"-bocken. Håll isär Det gäller att hålla isär de här, för de är två helt olika saker. När vi skriver upp de korta uppgifterna, skriver vi precis vad vi ska göra. Men, när vi skriver upp de långa uppgifterna, formulerar vi oss mer i termer av vad som ska åstadkommas, genom många korta uppgifter efter varandra (som i bästa fall finns på vår att göra-lista). Långa uppgifter kan till exempel heta saker som "Norge-etableringen", "Nytt intranät", "Utvecklingssamtalen", "Byggprojektet X", "Höstkickoffen", "Förbättrad reklamationsrutin" och "Leveransen till kund Y", medan de korta formuleras med verb som "skriv", "ring", "skicka", "sammankalla", "fråga", "maila" och "boka". Ibland när j...

En organisation är summan av alla dess relationer. På insidan och i kontakt med kunder, samarbetspartners och samhället i stort. Påverkas en relation, påverkas helheten, precis som i vilket ecosystem som hest. Verksamhetens relationskapital talar man om idag, kanske den viktigaste och met värdefulla tillgång en verksamhet har. Det fysisika mötet är inte en av många kanaler för kommunikation. Den är den överlägset viktigaste och den mest betydelsefulla. Det var det igår, det är det idag och det kommer att vara det imorgon. Om hälften av allt som idag investeras i alla andra kanaler skulle investeras i att skapa bättre möten & bättre relationer i en organisation så skulle verksamhetsnyttan öka mer av detta. Så hur bygger vi och säkertäller vi detta? Steg 1: Det måste först finnas en insikt om allt detta. Ledningen i verksamheten måste förstå betydelsen av hur mycket tid, energi och möjligheter alla relationer och möten innebär. Här behövs såväl hårda fakta som egen reflektion. Ste...

300 personer tar livet av sig varje år, på grund av mobbing på arbetsplatsen, enligt Jobbhälsan (www.jobbhalsan.se) och 8 av 10 av de mobbade på våra arbetsplatser är kvinnor, enligt Arbetsmiljöverket (www.av.se). Siffrorna förskräcker, är det möjligt? Men låt oss inte fastna i siffror. Det här är en fråga vi sällan pratar om, och varför skulle vi? Det är både obehagligt och jobbigt och som kollega och inte minst som chef, har jag ju ett ansvar. Jag måste agera. Jag måste vara tydlig och säga ifrån, utreda. Det är roligare att prata om mig och min utveckling. Gå på seminarier med någon het innecoach som berättar om hur jag kan utvecklas och bli vad jag vill bara jag tänker positivt. (Oss emellan, det kan jag inte, coachernas budskap är inte sant.) Vem blir mobbad och utfrusen på din arbetsplats?Ja, inte är det du och jag, det är någon annan. Någon som inte är exakt så som vi förväntar oss att ”man ska vara” någon som ”inte tycker som oss andra”, någon som tillhör ”dom andra”. Känner...

Sammanlagt lyssnade över 300 personer till KAM-gurun Peter Cheverton på IHM i Malmö och Göteborg. Han bjöd på två inspirerande, underhållande och lärorika halvdagar med många goda exempel på lönsamma KAM-projekt. Seminariet med rubriken “Showing you how to take charge of your businesses largest and most important investments” belyste många av de delar som Peter berör i sin bestsellerbok med namnet Key Account Management. Bland annat det faktum att många företag uttalar att de sätter kunden i centrum, men därmed är inte sagt att de levererar kundvärde. För att nå status som nyckelleverantör, förväntas du kunna erbjuda mervärde och utveckla produkter/tjänster i nära samarbete med dina nyckelkunder. Nyckelleverantören frågar efter kundens behov, vilket kan leda till en produkt/tjänst som upplevs som helt anpassad till kunden och behovet hos kundens kunder. Detta är ett sätt att skapa en win-win-win situation. Boken ingår i Studentlitteraturs IHM-serie och används som kurslitteratur på ...

Det är kul att bli chef. Fint med nytt visitkort, högre lön och kanske, kanske, eget rum?! Sedan är det bara att sätta igång och leda. I bästa fall har du till och med ledaregenskaper! Det är få förunnat, att ha ledaregenskaper alltså, men till chefsarbeten är det många som känner sig kallade. Då undrar jag, påverkar chefen sin omgivning? Ja absolut och inte bara den närmaste omgivningen utan hela företaget. Och inte bara det egna företaget utan även relationer till partners, media och inte att förglömma, kunderna och nästa generations chefer/ledare. Framförallt den högste chefen, men inte bara hon/han. Alla nivåer i en pyramid påverkar varandra.  Skandalerna i arbetslivet avlöser varandra. Det har de i och för sig alltid gjort. De senaste åren har vi sett, inom såväl privat som offentlig sektor, hur det myglas med pengar och i affärer. Det kan vara underliga fakturor för vägbyggen, eller starka män inom den kommunala sektorn som halkar omkring i träskmarkerna och anlitar brorsan, e...

Är vi på väg att alldeles tappa kontrollen över våra liv? Och våra barn? Köpa prylar och laga mat, göra småflickor till modeller och uppträda som sminkade ”låtsasvuxna” artister. TV tablån fylls av allsköns meningslösa tävlingar som sägs ska ”ge folk vad folk vill ha”. Fördumningen tilltar och apatin breder ut sig. Jag konsumerar, alltså finns jag. De multinationella bolagen tränar oss i att tänka rätt, köpa rätt och bli goda konsumenter. Hamiltonfilmen är det senaste exemplet på aggressiv produktplacering. TV bolagen står i kö för att köpa nästa till intet förpliktigande såpa uppbackat av något företag som under underhållningens täckmantel vill kränga ännu något som vi inte behöver. Och det ska böjas i tid, det som krokigt ska bli. Alltså måste barnen drillas in så tidigt som möjligt i ett köpbeteende och avskärmas så effektivt som möjligt från sina föräldrar. I USA inom marknadsföringsbranschen kallas föräldrarna för ”gatekeepers” dvs. de som står i vägen för barnens krav på köp a...

Då och då, särskilt när det är riktigt intensivt och du har mycket att göra, är det värdefullt att reflektera.  När vi reflekterar och skriver eller skissar fritt det vi reflekterar över, får vi ur oss allt det som snurrar omkring i huvudet. Allt det som vi mer eller mindre medvetet går och tänker på tar form och vi kan betrakta det utifrån. Vi får perspektiv på hur stort eller litet utrymme olika saker tar. Vi tömmer huvudet och åtminstone för mig är det otroligt skönt. Reflektion skänker mig ro. Ett verktyg värdigt verktygslådan Men, vi som vill få gjort det vi behöver ha gjort med så liten ansträngning som möjligt, ser reflektion som något mer än en terapeutisk, avstressande övning.  Reflektionen kan vara ett sätt att ta kvantsprång ditåt vi strävar, med vår verksamhet, vår karriär eller vårt projekt. För det behöver reflektionen knorr. Det är nämligen i knorren reflektionen tar skruv. Ta tanken vidare För att vara konkret: när du reflekterar fritt, närhelst du kommer på något at...

Mina största strukturförbättringar har jag gjort i samband med att jag bytt kontor och till och med jobb. När allt ändå är nytt, känns en ny vana mer eller mindre inte som så stor förändring. När jag har kursdeltagare som alldeles nyss börjat ett nytt jobb, brukar jag gratulera dem. Få har ettså gyllene utgångsläge för rutinförfining som de. Men, det finns en vardag mellan jobbytena. Då vill vi också bli mer strukturerade. Ibland förändrar vi med lätthet, ibland är det svårare. När du testat att strukturera dig men misslyckats gång på gång, är det dags att ta till radikala grepp. Det sitter något i väggarna Kognitionsforskare menar att vi minns saker lättare i den miljö där vi först lärde oss dem. Studenter får till exempel högre provresultat när provet hålls i samma lokal som de undervisats i. Det visar sig nämligen att detaljer i miljön och rummet tjänar som "minnes-triggers", även om vi är omedvetna om det. Forskaren David Neal vid institutionen för psykologi och neurovetenskap v...

Efter att ha föreläst och haft möten med olika företag i USA, ett antal gånger, (nu senast i New York och Boston) slås jag främst av hur lika vi är när det gäller diskussioner kring ledarskap, organisationsutveckling och jämställdhetsfrågor. Det är delvis naturligt eftersom vi i Sverige (skandinavien) är uppfödda på amerikansk managementlitteratur och vi lyssnar gärna på diverse amerikanska gurus inom området.  Vi kan naturligtvis ta till oss den otroligt positiva attityden, ”allt går”, som USA står för även i svåra ekonomiska tider. Och vi behöver det, inte minst nu när mörkret börjar falla och vintern är på gång. Däremot är det tveksamt om deras enorma tro på individen utifrån, ”ensam är stark”-begreppet, fungerar. Det är ju och har alltid varit en lögn. Det finns några exempel på den ”ensamma starke mannen” som har lyckats, där som här, men inte är de i majoritet. Faktum kvarstår, det är i teamet, gruppen, i samspelet, som vi kan nå fram och skapa nya företag. Kreativitet sitter ...

När människor fick frågan för 20 år sedan vad de skulle vilja ha mer av blev svaret "tid". Det var långt innan de sociala mediernas tillkomst, vi hade knappt en dator på skrivbordet. Idag tillbringar vi i snitt 75 min på facebook visar undersökningar. (jag har aldrig träffat någon visserligen, de flesta verkar bara titta in en kort tid någon gång i veckan.....). Facebook är då bara en av alla digitala mötesplatser. De flesta verkar idag lida av tidsbrist, precis som för 20 år sedan, och de stressrelaterade sjukdomarna ökar och vi sover allt sämre. Det får mig att tänka på Bodil Jönssons bok "Tio tankar om tid" som kom för 14 år sedan. Då blev vi störda 13 ggr i timmen. Idag blir vi avbrutna 37ggr i snitt i timmen. Vi har alla 24h om dygnet, 168h i veckan och 8760h om året. Det och att vi alla skall dö är det enda som är rättvist här i världen. Då kan vi ju inbilla oss hela livet att vi har tidsbrist eller så kan vi inbilla oss att vi har gott om tid. Eller hur? Den kultur vi nu håll...

Jag är ofta ute och talar på seminarier om sexismen och dess följdverkningar i arbetslivet. Kommentarer ute bland åhörare kan vara: Tja lite sexistiska är vi väl alla. Lite så där till vardags. På ett seminarium som jag deltog i definierade jag ordet ”sexist” som en man som tycker sig vara mer värd som människa, vara bättre och ha mer rätt till makt och högre lön än kvinnor. Många män, men även kvinnor, log igenkännande. Det är tur, sa jag att jag inte är rasist också, vände mig om och tryckte fram nästa powerpointbild. En kvinna i församlingen räckte upp handen och ställde mig frågan:Vad ser du för skillnad på en sexist och en rasist? Ja, du! En sexist är ju någon, en man i det här fallet, jag, som tycker att jag är bättre än kvinnor eftersom jag är man och en rasist det är ju någon som tycker att han eller hon är bättre än en annan människa på grund av hudfärg eller liknande, det är ju en enorm skillnad… tror jag, liksom, typ, i princip… Och där tog luften slut. Vad var det för sk...

Har du suttit på ett möte och precis när du lägger ut texten om varför vi verkligen behöver lösa det där problemet, surrar en telefon igång. Den är inställd på ljudlöst och ägaren låter den ligga kvar på bordet utan att svara, men vad händer? Alla tittar (och lyssnar) på telefonen och inte på dig. Helgarderar du? Visst gör vi så här på flera områden? För att klara att navigera fokuserat i en allt intensivare vardag på jobbet, väljer vi ut, planerar in, styr upp och stänger ned. Men, vi helgarderar. Vi gör något annat samtidigt, när vi ändå sitter där. Vi slänger ett getöga på nästa innan vi är klara med den här. Vi har apparaten avstängd, men inte helt. Fokusera både sinne och handling I dessa dagar tänker jag mycket på att prioritera helhjärtat. Jag menar, det jag bestämmer mig för att göra vill jag enkom göra, just i det ögonblicket. Kalla det mindfulness, distraktionsminimering eller vad du vill. Jag har nämligen upplevt så tydligt att syftet med prioriteringen blir förfelat om j...

Nu när semestern är över och deckarböckerna är utlästa kan det kanske passa med något matnyttigt? Lotta Snickare (som tillsammans med Liza Marklund skrev boken ”Det finns en plats i helvetet för kvinnor som inte hjälper varandra”, 2005) är forskare på KTH i Stockholm och blev klar med sin avhandling i maj. Den heter ”Makt utan magi”, och är en synnerligen intressant läsning. Faktiskt lika spännande som mord i Fjällbacka eller på Sandhamn. Snickare har valt att betrakta chefskap som ett yrke och hon har tittat på chefers yrkeskunnande, utifrån den aspekten. Hon gör även en genomgång av tidigare forskning som bl.a. visar att det inom, ledarskapsforskningen, inte finns någon gemensam uppfattning om vad begreppet ledarskap innebär. Hon frågar sig bl.a.; Vad gör chefen? Vad bör hon/han utvecklas i? Och går igenom begrepp som ”tyst kunskap” dvs. kunnande som är undermedvetet och inte går att kommunicera. Intressant är, när Snickare tittar på forskning de senaste 50 åren och konstaterar at...

I min verksamhet har jag just nu särskilt fokus på att skala av och göra mig av med material, uppgifter, till och med verksamhetsgrenar som inte längre tillför lika mycket som tidigare, utan mer tar plats och tid. Ju mer vi skalar av, desto mer tid, utrymme och kraft får vi till det som verkligen är viktigt, för oss och för den verksamhet vi arbetar i. När det är som mest intensivt, är det lätt hänt att vi prioriterar bort allt vad rensning heter (kanske är det helt rätt prioritering precis då). Men, man behöver inte ta sig mycket tid för att bli av med en hel del som annars distraherar och irriterar. Allt annat än olycksbådande 13 Här kommer 13 idéer på vad du kan rensa om du blott har tio minuter över. 1) Öppna den mapp där ditt senast använda dokument ligger. Ta bort alla filer du inte längre behöver. Har du minuter över, rensa också mappen där ditt näst senast använda dokument ligger. 2) Om du har många lästa och hanterade mail kvar i din mailinkorg, skapa en undermapp kallad "T...

Sidor