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

Blogginlägg av Lars Einar Engström

Lars Einar Engström

Författare, krönikör och föreläsare. Under många år har jag arbetat med ledarskap, organisations- och ledarutveckling kring framtidens kompetens i flera länder i Europa.

Delarna gör helheten. Pusslets olika bitar ger tillsammans hela bilden. Tänker jag när jag hör Stefan Löfven prata om hur regeringen styr landet. Statsministern pratar på presskonferens (ang Transportstyrelsen) om hur landet och regeringen styrs. Han pratar "stuprör" - en modell där varje departement sköter "sina egna" frågor och inte lägger sig i, bryr sig om, andra departements och avdelningars utmaningar och problem. Statsministern säger att så "fungerar det och så har det alltid varit". Lite nervös blir jag.  Men, statsministern är inte ensam. Även i näringslivet stöter jag alltför ofta på samma tankesätt. Jovisst pratades det om samordning och öppenhet, och jag får se powerpoints med horisontella linjer i organisationsscheman som visar hur det skall fungera. Men gör det verkligen det? Ibland kanske, men lika ofta inte.  Två exempel: 1. Jag föreläser om mångfald och oftast, mer fokuserat, på jämställdhet. Samtidigt arbetar jag med rekrytering sedan snart 35 år. Det senare innebä...

Nu är det nio år sedan som jag skrev för en antologi, där tolv män under ledning av författaren Mats Söderlund skrev om mäns våld gentemot kvinnor. Boken heter "Våld till vardags" (Ordfront, 2008). Jag hade inte haft en tanke på att jag hade något med den frågan att göra. Jag blev nervös när Mats ringde, han trodde väl inte att jag?   För att försöka förstå något mer så läste jag Mona Eliassons bok "Mäns våld mot kvinnor" (Natur och Kultur, 1997), där Eliasson skriver: "Hot om våld är en företeelse som kvinnor måste ägna uppmärksamhet åt i sitt dagliga liv, oberoende av om de lever tillsammans med våldsamma män eller ej. Våldet är en mycket viktig del av kvinnors verklighet som ingen längre kan blunda för." (sid 80) Det är ju 20 år sedan hon kom med den boken, och problemet var inte precis nytt då heller. Fast nu är det väl "dom andra" som är värst. De nyanlända. Riktiga svenska män sköter sig.   Har läst Eliassons bok igen och jag inser att det finns något inuti mig. En inre känsla...

Det slår mig, efter ett antal timmar vid TV apparaten, här i Chicago, att amerikanska män är ena riktigt krassliga krakar. Dåliga magar, dåliga ryggar, potensproblem, allergier, problem med synen, huvudvärk, svårt att sova, snarkningar, högt blodtryck, restless legs, förkylningar, rethosta, hjärtklappning och ledbesvär, för att bara nämna några åkommor. Dessa sjuklingar ser, för det mesta ut som tagna ur en Dressmankatalog, rätt snygga faktiskt, och om jag inte hörde speakerrösten så skulle jag trott att dom var friska. Samtliga är också gifta, verkar det som. Fruarna (inget gaypar så lång ögat siktat), är cirka 27 år, långa, slanka och blonda. Dom har 2, oftast 3 barn, att ta hand om och göra äppelpaj åt. (Jag noterar att framförallt pojkarna verkar vara ena riktigt busiga små gulliga rackare! Såna där ungar som är roliga att se på film. Kanske.) Barnen är i sju till fjorton års ålder, så dom blev mammor tidigt, dessa fotomodell liknande pumor. Och, som ni redan gissat. Kvinnorna ä...

Jag är mentor åt Sophie Olsson Barnekow, 16 år, och Sophie har som ett skol- och bokprojekt intervjuat fem framgångsrika kvinnor i olika världsdelar. Sophies berättelse är intressant ur flera aspekter, inte minst vad gäller en ung kvinnas tankar kring karriär och jämställdhet. Såhär skriver hon: Som en stark och modig kvinna, har min mamma alltid varit en förebild åt mig. Hon har ofta pratat om kvinnors rättigheter och jag har haft glädjen att få följa med på evenemang där både män och kvinnor talat om lika möjligheter för båda könen. Därigenom har en passion för att skapa en jämlik och jämställd miljö växt inom mig. Då bestämde jag mig för att mitt personliga projekt i skolan skulle bli att ta upp det här viktiga ämnet, genom att visa perspektivet från några kvinnor och lyssna på deras berättelser. Jag visste att jag inte bara ville skriva 40 sidor av fakta och statistik - inte att det inte är viktigt, för det är det definitivt. Jag bestämde mig för att kontakta fem starka kvinnlig...

Min dörr är alltid öppen, bla, bla, bla.  För 2 år sedan skrev jag på bloggen om arbetsmiljö och mobbing. Nu kommer nya regler för arbetsgivare, från 31 mars 2016.  Märkligt ändå, det blir alltså inte roligare och roligare på våra arbetsplatser trots gratis latte och gymkort. I en debattartikel i DN idag slår Arbetsmiljöverkets generaldirektör Erna Zelmin-Ekenhem fast att: "Mellan år 2010 och 2014 har antalet anmälda arbetssjukdomar på grund av den organisatoriska arbetsmiljön ökat med 70%. För hög arbetsbelastning och problem i relationerna på arbetsplatsen är exempel på vad som ligger bakom siffrorna. I en ny intervjuundersökning som Arbetsmiljöverket låtit göra, svarade över hälften av de tillfrågade arbetsgivarna och arbetstagarna att de känner någon som har blivit sjuk på grund av stress på jobbet (68% respektive 80%). En majoritet av de cirka 1 000 arbetsgivare och 2 000 arbetstagare som intervjuats känner också någon som är i riskzonen för att bli sjuk på grund av stress på j...

Swedish Match, ett bolag som slåss för att få snuset legaliserat inom EU. Men det ser mörkt ut, eller ljust, beroende på vilken sida av frågan du står. Men som gammal snusare är jag nog böjd att hålla på ”rör inte min prilla” kampanjen även om jag inte skulle sätta en sådan skylt i bakrutan på bilen. Förresten, kan ni historien? Minns ni statliga AB Svenska Tobaksmonopolet? Det som sedan blev Svenska Tobaks AB och så småningom Procordia AB, börsnoterat 1989 och sedan namnbyte 1992 till Swedish Match. Cigaretter var en stor stridsfråga och striden var hård ibland. Skulle staten verkligen sälja cigaretter och samtidigt prata om folkhälsa? Svaret var naturligtvis nej. Det där är historia nu, och Swedish Match säljer sedan 17 år inte cigaretter utan arbetar istället för en värld utan cigaretter”. Snuset är den stora kassakon. Låt vara att man fortfarande säljer cigarrer. Och visst minns jag i min ungdom en del snusande gubbar, där det rann svart saliv i skägget. Historia det med. Men se...

Poeten skrev: Jag var aldrig nån särskilt bra make, aldrig nån särskilt bra far.  Det där känner jag ju igen. Egna tillkortakommande. Egen olycka. Egna missar. Unt zu weiter. Någon måste ju få sona för att jag inte är tillräckligt tillräcklig. Som pappa, som man, som människa. Och varför inte barnen? Barn repar sig ju alltid. Sägs det. Varför skulle vi annars behandla dom som vi gör. Ja just ja, tidsbristen. Vi har inte tid. Tidspusslet, du vet. Skolan och dagis får väl uppfostra?  Inte lätt att vara förälder. Vad, hur, är en bra far? En bra Mor? Det är som om varje generation måste testa från noll. Finns det ingenting vi lär oss av våra egna föräldrar? En sak kanske. Du vet den där klassikern: "Jag ska inte göra som dom gjorde i alla fall." Känns inte som en bra och solid grund att stå på.  Inte göra som dom gjorde? Är det alltså det bästa vi kan komma upp med?  Men nu finns det coacher, kurser för föräldrar. Hurra! Jag skrev en uppsats på psykologiska institutionen i Uppsala för s...

TeliaSonera, ett bolag som vi de senaste åren kopplat ihop med konstiga affärer och misstankar om mutbrott, har de senaste åren bytt ledning och nyckelpersoner på en rad positioner. Koncernen arbetar hårt med att sälja av de verksamheter som gett upphov till de affärer vi kunnat läsa om i medierna. Men det finns flera ljus i mörkret som omgav bolaget för några år sedan, 5G samarbetet med Ericsson är ett sådant och ett annat är nya Sverigechefen, Hélène Barnekow. Företaget har, i Sverige, ca. 8 000 anställda, 59 % män och 41 % kvinnor. På chefsnivå, 63 % män och 37 % kvinnor. Förresten, minns ni Televerket? Statens stora verk där människor kunde tillbringa ett helt liv och generaldirektören var allsmäktig. Verksamheten startades 1850. Då var inte jag med, men jag minns Televerkets bilar och den svarta fasta telefonen i hallen hemma hos mor och far och gubben i "uniform" som monterade in anläggningen. Magiskt! Och det var det ju. Inte för att vi använde telefonen speciellt mycket, på ...

Häromdagen deltog jag, via facebook, i en tråd som startades av Ida Östensson, grundaren av Crossing Boarder som numera heter Make Equal (www.makeequal.se). Ida uppmanade sina vänner, däribland mig, att berätta om de svar man brukar få på företag och organisationer, myndigheter och övriga, som inte förstår mångfaldsfrågan eller som inte alls arbetar med mångfald eller jämställdhet, men som tror att dom gör det. Typ. Nämligen när denna fråga ställs: Hur arbetar ni med mångfald och/eller jämställdhet? Alla är lika mycket värda hos oss! Hos oss är alla välkomna! Vi eftersträvar mångfald. Hos oss ser vi alla som individer, inte som representanter för en grupp. Hos oss är alla människor. Vi gör inte skillnad på kön, vi ser inte kön. Människan är vår viktigaste resurs. Vi välkomnar en mångfald av sökande. Klart vi ska ha kvinnor i styrelserna (men inte i vårt bolag.) Här har vi högt i tak! Vi ser till kompetens, aldrig till kön. Jag ser inte färg! Vi har en kvinna i styrelsen redan och tv...

Män, ensamma eller i grupp, är naturligtvis det farligaste djur som världen skådat. Eller om vi nu inte vill vara djur, världens farligaste varelser då, känns det bättre? Detta faktum är väl dokumenterat från krig och vardag, från brottsstatistik till kafferummet. Från hemmet till arbetslivet. Från Paris till Istanbul. Och på festivaler och i det allmänna rummet. Män har alltid och i alla sammanhang ett övertag, och det vet båda parter. Jag kan undra varför vi män har så lite eget tänkande och agerande, fritt ifrån gruppens mekanismer och tryck? Vi som är så starka och modiga? Och vi har ju internet. Så bra. Så små är vissa av oss att vi anonymt hotar och hatar. Så små är vissa av oss att vi kan förnedra genom att hänga ut lögner på internet. Och vi vet ju att kvinnor, av många män, anses stå "lägre i rang" än män och så länge vi inte kan förstå att det i grunden är fel, så deltar vi, alla män, i förtrycket som leder till våld i olika former. Hatar vi kvinnor? Nix, inte "vi" men "do...

Det verkar inte längre finnas någon hejd. Det tar aldrig slut. Och det är människor, barn och kvinnor, och män, som far illa, våldtas, slaktas och mördas och det är pedofiler, överallt, tycks det och det är IS (eller ISIS eller ISIL eller Daesh), som fått oss att fundera om inte talibaner egentligen är snälla gubbar. Kanske inte snälla. Men några av oss vill se ut som dom, långskäggen. Fast då kallas vi hipsters och bor helst i någon hip stadskärna där luften är som sämst. Där har vi våra barn. Jag brukar fundera på det där när jag är i Stockholm. I Vasastan där jag ibland tillbringar dygnsvilan kommer larm då och då om den dåliga luften. Barnen far illa. Kan få allergier. Så jag tänkte att nu kommer dom att flytta ut på landet, barnfamiljerna, för vi värnar ju om våra små. Nu blir det fler lediga lägenheter och priserna går ner. Men icke. Tvärtom faktiskt. Fler barnfamiljer än någonsin flyttar in till city. Dom som har råd alltså. Annars får dom väl som moderaten Joakim Larsson sa,...

I början av augusti deltog jag i ett seminarium på kongressen ”International Ergonomics Association” (www.iea2015.org) i Melbourne, Australien, och jag lärde mig en hel del nya saker som jag aldrig någonsin hade tänkt på. En lär så länge en lever. Svenska Arbetsmiljöverket (www.av.se) var på plats och presenterade en mycket intressant och uppskattad rapport. Arbetsmiljöverket har många bra rapporter och hjälpmedel till chefer, för vad är ledarskap om inte arbetsmiljö ingår? När vi i Sverige pratar om jämställdhet, skriver, debatterar genus och jämställdhet så handlar det oftast om kvinnor (och män) som är medelålders eller yngre, vit medelklass, och med någon form av högre utbildning. Ofta bor såväl målgrupp som debattörer i Stockholm. Men vet ni vad? Det finns fler grupper där ute.  Sverige har en av världens mest könssegregerade arbetsmarknader och kvinnor har mycket högre frånvaro än män på grund av sjukdom och ohälsa. Varför? Och har det något att göra med könsrelaterade frågor?...

I en artikel i SvD (papperstidningen, 2015-05-31) presenteras forskaren Simon Elvnäs slutsatser angående chefer och ledarskap. Rapporten är värdefull eftersom Elvnäs och medarbetare använt s.k interaktiv forskning dvs man har observerat, suttit med i rummet, och filmat chefer ute på arbetsplatser. Under fem år, 3.500 timmar och 400 chefer i olika branscher. Hyggligt stort material!Intressant är bl.a att vi chefer tror att vi agerar på ett helt annat sätt än vad vi faktiskt gör. Och vi tror att medarbetare vill ha något som de inte vill ha. Exempel: Chefer tror att medarbetare vill ha instruktioner, information, diskussion och att man reflekterar tillsammans. Medarbetarna vill ha återkoppling och feedback. Cheferna tror att de ägnar 40% av sin tid till just återkoppling, men i själva verket så är det endast 2% av tiden som används till detta. Detta om Elvnäs. Såväl chefer, som forskning i allmänhet, har vetat, så länge jag kan minnas, (och de är länge) att människor vill bli sedda oc...

Hur ser det ut egentligen med moralen i näringslivet och statliga bolag? (och kommuner, Göteborg och byggbranschen icke att förglömma.) Jo, jag vet, skandaler och ekonomisk brottslighet har funnits i alla tider, men jag har en känsla av att det blivit mer accepterat. Att göra "smarta affärer". Kanske. Känns i alla fall som det är dålig med konsekvenser när någon begått kriminella handlingar. Åtminstone så är det väldigt sällan någon fälls. Jag minns när en skolkamrats far förskingrade pengar på sin arbetsplats. Skandal hemma i byn. Länge sedan nu. Jag tror han tog minst en hundring (100 sek) från dagskassan. Skandale grande! Men det där var länge sedan. Nya tider nu. Vem tar en hundring? Om det inte är minst sex nollor i summan. Vilket det ska vara i avgångsvederlag för det får du vare sig du säger upp dig själv eller får sparken. Om du sitter nära makten alltså, inte annars. Jag känner folk som blivit mångmiljonärer på just avgångsvederlag. Men nu. Senaste veckan går pressarna varm...

Småföretagarna ska bli landets räddning. Det säger dom alla. Politiker, från höger till vänster. Dvs kan du inget annat lille vän så starta en egen firma! Och bidrag kan du få. Hen kan få en massa pengar, coachning, kurser, seminarier, handböcker och staten ser till att du är försörjd den första tiden. Så du har penningar till filmjölken. Vissa krav dock: Du ska ha fyllt 25 och vara i behov av fördjupat stöd. Du kan ha en funktionsnedsättning. Vara 18 och stå låååångt ifrån arbetsmarknaden. Delta i jobb- och utvecklingsgarantin. Du kan… VÄNTA lite här nu, säger jag. Starta eget om du inte får jobb? Är det ett seriöst alternativ? Är det inte i själva verket en förolämpning mot oss som har startat eget utifrån en idé, en produkt, en entreprenörsläggning (vad nu det är) en drivkraft, en vilja att: Ta fram förslag, sälja in, genomföra, följa upp, fakturera, betala räkningar, skaffa fler kunder, sälja, sälja sälja. Passar alla till att starta eget? Har ni pratat med någon arbetsförmedlar...

Sidor