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

När vi är inne i en intensiv arbetsperiod och våra verktyg är e-posten, att-göra-listan och kalendern, är det lätt att tappa översikt. Visst, i kalendern kan du kika både framåt och bakåt hela månader i stöten, men hur informativa är egentligen dessa månadsvyer? Om vi vill undvika att plötsligt upptäcka att "Va? Var det redan nästa vecka?!", behöver vi då och då lätt kunna se var vi är, vad vi gjort det senaste och vad som vankas framöver. Kanhända vill du snabbt stämma av hur ni lagt era avstämningsmöten i relation till andra kritiska aktiviteter i projektet du driver. Har du en avgörande deadline om några veckor, vill du ofta få en känsla för hur långt det är kvar, hur många dagar av arbete du har till förfogande och vad som ska hända på vägen. Om du är som jag, har du ibland mulna dagar då du inte tycker att du gör några framsteg alls, utan att det bara tuggar på utan att du åstadkommer något särskilt. Då skulle du må bra av att på ett smidigt sätt bli påmind om vilka steg du fak...

Efter att ha knaprat Ipren i en vecka har jag kommit över febern och fått klart de första bitarna av min konkurrensanalys. Avslutade fredagen med ett möte hos Exportrådet i Peking där vi diskuterade en framtida affärside för den kinesiska marknaden. Hade planerat att spendera lördagen med att turista Pekings sevärdheter, som jag i och för sig har besökt en gång tidigare, men dimman (läs smoggen) låg så tätt att man bara kunde se högst 200 meter. Kan inte skylla allt på smoggen, det var faktiskt dimma också, men när det inte blåser i Peking kan man känna smaken av all kol de eldar runt om på stadens kolkraftverk. Nyrika kineser med smak för konjak När jag åkte hem från middagen med en gammal kompis på fredagsnatten så var sikten högst 2-3 m på motorvägen och taxichauffören som jag gissar skulle behöva ett par nya glasögon satt och svor över sikten hela vägen till min lägenhet. Som sagt så hade jag funderat på att turista under lördagen men det slutade med att jag hamnade inne på ett ...

Vi går in i 2012 med öppna och nyfikna ögon. Allt kan hända. Allt kan falla. Men det kan också vare en möjlighet att göra både skillnad, att sticka ut och synas, och att göra affärer. Många jag träffat tror att nu tar man bort ”mjuka” områden, som miljöfrågan, personalutveckling, mångfald, jämlikhet, för nu ska det sparas pengar. Och så kommer det säkert att bli på många företag. Men vilka företag är intressanta inför framtiden? Vilka företag/organisationer lockar den unga starka mobila kompetensen som finns hos kommande generationer. Jo, de som vårdar sitt varumärke och fyller det med någonting mer än att man bara tillverkar bilar eller fasaner i porslin. Nästa generation Det sägs och skrivs ibland att bara nästa generation tar över så blir allt annorlunda inom näringslivet. Så är naturligtvis inte fallet. Det har aldrig hänt att en generation tagit över från en dag till en annan. Människor från alla åldrar är tillsammans hela tiden och överlappar varandras liv. De goda idéerna och...

Hur kommer en svensk tjej ens kommer på tanken att söka praktikplats på the New York Rangers kan man ju undra. Mitt hockeyintresse började med min fantastiska pappa. Han gillar hockey och speciellt the Rangers. Vi har suttit uppe många nätter och kollat New York hockey tillsammans. När tiden kom för att börja söka praktikplats fanns ett starkt sug efter att åka utomlands och reklamens och marknadsföringens mecka New York har alltid lockat mig. Därför började jag surfa runt på olika hemsidor och mitt hockeyintresse tog mig till New York Rangers hemsida där jag hittade en praktikanttjänst. Min första tanke var, ”det är omöjligt”. Sedan tog jag mitt förnuft till fånga och konstaterade att ingenting är omöjligt. Jag kontaktade Henke Jag tog kontakt med Henrik Lundqvist, målvakt i the Rangers, som var otroligt hjälpsam och skickade in mitt CV till human resources på the Madison Square Garden Company. Efter det tog det en månad innan jag fick ett mail där jag blev kallad till en första in...

Precis hemkommen ifrån ännu en dag på jobbet, har idag verkligen fått känna på vädrets makter här i underbara Kuala Lumpur. För idag fick vi genom lida en av säsongens sista riktiga monsuner.  När man kommer ifrån Borås som jag gör så trodde jag att man hade blivit härdad att tåla regn och rusk för som ni garranterat känner till så är vi ju nästan bara kända för en sak, och det är ju just att det ALLTID och då menar jag alltid regnar i Borås. Men icke, gälarna har antagligen växt ihop efter att jag har kommit ner hit för känslan av att drukna låg nära til hands när jag skulle färdas de 100 metrarna hem till lägenheten.  Tänkte dock idag inte prata om vädret, (även om det alltid funkar som en isbrytare) utan faktiskt inviga er i vad jag faktiskt har gjort under min första en och en halv vecka här nere.  Mitt önskemål när jag åkte ner var att få se både marknads sidan och försäljningssidan och min önskan blev beviljad. Så under min första tid här så har jag fått jobba på Skydd.coms ma...

Det händer roliga saker på kontoret och jag hoppas att jag hinner få ta del av några av de spännande projekt som kommer framöver, inshallah. Ja, här lämnar vi allt i Guds händer. Det är nämligen så man gör här, förlitar sig på högre makter. Inte bara när det kommer till önskningar eller förhoppningar, utan även när det kommer till praktiska saker som att åka taxi. Jag är själv en flitig användare av inshallah när det kommer till åtaganden, förhoppningar men mest undanflykter om jag ska vara ärlig... Förra veckan jobbade jag mycket med en sourcing studie, vilket har varit väldigt intressant och lärorikt. Har fått en bättre känsla för hur den egyptiska transaktionsperioden verkligen ser ut från alla perspektiv. Ekonomin har drabbats hårt och det är väldigt intressant att se vilka reformer man har gjort för att lyfta landet igen. Känner att jag kan en hel del om landet och är sugen på att lära mig ännu mer då jag tycker sådant är spännande!  För övrigt så har jag verkligen kommit in i ...

Första veckan har nu passerat. Det har gått så fort att jag inte riktigt vet vad som hänt. Landade i måndags och fick en rundtur på kontoret och i fabriken. Imponerande, stora schabrak till maskiner som spottar ut böcker, lådor och annat tryckmaterial i mängder. Spenderade de första dagarna med att översätta ett par prislistor till kinesiska och göra en konkurrensanalys över den kinesiska marknaden. Visst har jag försökt förbereda mig och komma igång med min kinesiska inför praktiken, men det är snart 2 år sen jag lämnade Kina, känner att jag borde förstå en del ord men att hjärnan lagt dem på lager. Att sitta och översätta kinesiska hemsidor kräver sitt fokus men märker hur de kinesiska tecknen kommer tillbaka med stormsteg. Elanders är ett himla intressant företag, med intressanta globala trycktjänster. Känner att jag kommer lära mig hur mycket som helst här! Får nya pusselbitar dagligen gällande hur de bedriver sin verksamheten och det är imponerande att se hur de löser globala p...

Jaha, då sitter man här. Första veckan avklarad i ett land där termometern inte visar alldeles för lågt och där man inte behöver oroa sig för att vakna upp och svärandes titta ut för att inse att vintern ännu inte har släppt greppet. Jag sitter nämligen i detta nu i Kuala Lumpur, Malaysia och ska försöka knåpa ihop något som skall liknas en blogg. Detta för att det är här jag skall utföra min första praktik ifrån utbildningen Internationell säljare. Praktiken kommer jag utföra för ett företag som heter Skydd.com och som här i malaysia har sitt huvudkontor. Detta är inte svårt att förstå när man steg av planet och klev ut i 35 grader och strålande sol.  Den här bloggen kommer inte bara att handla om hur det går för mig på min praktik plats utan även en hel del om de andra äventyren som jag kommer att mötas utav på vägens gång. Jag ska försöka göra mitt bästa i att ta med er ut så ni kommer så nära upplevelsen som möjligt gällande galen trafik, god mat och en välldigt intressant kultu...

Allt fler artiklar och bloggar handlar om männens hat gentemot kvinnor. Det där låter lite väl generaliserande. Det skrivs mycket om jämställdhet inför och efter Internationella Kvinnodagen den 8 mars varje år, men det är svårt att se hur någonting ska förändras ju mer vi skriver i olika media. Är artiklar, information och diverse broschyrer beteendeförändrande? Knappast. Attityd och beteendeförändring kan bara komma genom möten, diskussioner, uppfostran och åtgärdsprogram. Finns det inget positivt där ute? Själv är jag ute, nästan varje vecka, på företag och organisationer som föreläsare. Intresset för frågor kring feminism och jämställdhet är stort. BÅDE kvinnor och män är med och diskuterar, vi tycker inte lika, men vi diskuterar och tittar på hur den egna organisationen ska arbeta vidare med dessa frågor. Det är väl positivt? Vi pratar inte om huruvida någon ”hatar” någon annan. ”Hat” kanske inte är på agendan i Örebro, Borås, Sundsvall och Västerås? För det händer ju saker däru...

Ibland när jag berättar att jag är struktör, får jag frågan: "OK. Du som arbetar med sånt, vad ska jag göra? Jag har ett himla kaos och en massa högar, men jag skulle verkligen vilja få bättre struktur. Hur börjar jag?" Det här är vad jag brukar svara. Gör så här 1) Först behöver du bestämma dig för var du ska ha dina att-göra-uppgifter. Det ska bara vara på ett enda ställe. Har du ett CRM-system där kundrelaterade uppgifter, men inget annat, ska ligga, behöver du två ställen. Du kommer att kunna leva med det, men sträva efter ett ställe. Det spelar ingen roll om det är digitalt eller på papper. Du behöver ett att-göra-uppgift-ställe (eller -lista), eftersom det döljer sig en massa saker du har att göra i högarna. De här uppgifterna kommer fram när du börjar röja och de behöver en hemvist. 2) Töm sedan huvudet på allt du kan komma på att du har att göra och skriv upp alla uppgifterna utförligt i att-göra-listan. Definiera uppgifterna så smått att var och en skulle ta mindre än en da...

Kvinnor som är chefer är mer stressade än sina manliga kollegor slår Previa fast i en ny undersökning gjord av Per Larsson (SvD, GP, 2012-03-01). Det tycks vara mer komplicerat för kvinnliga chefer att hitta en hälsosam balans i tillvaron. ”Arbetsgivare bör anpassa arbetsvillkoren efter att många chefer, både män och kvinnor, också är småbarnsföräldrar”, säger Per Larsson, i en kommentar. Jo både män och kvinnor är föräldrar, men där upphör jämställdheten. Så vad kan stressen bero på? Ja anledningen är naturligtvis kvinnors dubbelarbete. Fortfarande står kvinnorna för huvudansvaret för hem och eventuella barn. Det kan ingen städhjälp i världen avhjälpa. Som chef på arbetet och som chef i hemmet kan det bli tungt. Och stressigt. Vad är det som gör att vi män fortfarande, 2012, ser det som en självklarhet att vi inte ska ta del av hemarbetet och barnen? Vad är det som gör att vi män tycker det är en självklarhet att ”någon annan” ska curla för oss så vi kan göra våra karriärer i lugn ...

En månad har gått sedan jag började praktisera och man skulle kunna tro att jag börjat komma in i någon slags vardag, men det blir aldrig riktigt vardag här. Ingen dag är den andra lik på New York Rangers marknadsavdelning. Uppgifterna och projekten är olika och man träffar ständigt nya människor. Skrivbordet Arbetsuppgifterna är blandade: det är undersökningar, research, möten, telefonsamtal, matchtröjor, autografsigneringar och Rangers-prylar högt och lågt. Vi jobbar med olika projekt hela tiden, såsom framställning av exempelvis playoffs-böcker, planering av olika event och jag har även designat web-banners i photoshop. Den roligaste skrivbordsuppgiften hittills var dock den då min handledare kom fram och sa; ”kom med förslag på en ny utomhuskampanj. Det ska vara fräckt, galet och innovation. Tänk inte på budget”. Matcher Jag jobbar alla hemmamatcher. Vilket innebär mediaanteckningar, matchsummeringar, post game photos på isen och ismaskinsåkning. Som jag skrivit om tidigare så ä...

På ett företag som jag föreläste hos för en tid sedan, föreslog en man - chef - att jag skulle bli mentor åt en ung kvinna som ansågs vara ett framtidslöfte. Vi träffade henne på hans rum efter föredraget. Självklart ville jag ställa upp om det var så att hon trodde och kände att jag var rätt person för jobbet. Den unga kvinnan såg på mig, log och sa: Jag har läst flera av dina böcker så det är snarare jag som ska vara mentor till dig! Först tänkte jag att det där är typiskt för nästa generation. Ingen respekt för en äldre erfaren man som vet allt, kan allt och har alla svaren… Jag kände mig förolämpad, närmast kränkt av denna ungdomliga fräckhet. Men, när jag sansat mig, förstod jag att hon naturligtvis hade rätt.  Vi silverryggar borde lära oss av unga kvinnor Det är mer på sin plats att vi silverryggar lär oss något om unga kvinnor och hur de ser på livet än att vi ska gå omkring med en förlegad mansbild som mall och norm och tro att kvinnor är dåliga kopior av män, fast annorlun...

Om du har en tendens att tacka ja till för mycket och sedan ångrar dig, eftersom du får för mycket att göra, då är du inte ensam. Du är heller inte utan hjälp. Tillhör du dem för vilka det ständigt kör ihop sig och som får jobba över fler kvällar i veckan än vad som är önskvärt, då är du i gott sällskap av många jag möter dagligen. Synliggör det nu osynliga Såvida du inte bara arbetar när du sitter i möte, är din veckas arbetskvot fylld långt innan kalendervyn är så full av möten att den ser ut som en välkaklad badrumsvägg. Tittar vi i vår kalender, blir tiden vi behöver för att göra uppgifter på egen hand tämligen osynlig, vilket lätt leder till att vi tackar ja till möten och aktiviteter så länge det finns en lucka. Men, gör du också "på egen hand"-tiden tydlig för dig själv, skapar du ett sanningsenligt underlag för beslut när du får erbjudande om att göra något innan ett visst datum och när dufår en mötesinbjudan. Tydlighet gör det enklare att ta rätt beslut Gör därför en plan ö...

Denna veckan har varit fylld av jobb, sport och mat. Det har varit hockey, superbowl, hamburgare, bagels och mycket mer. New York Giants superbowl-vinst kommer naturligtvis att vara måndagens största samtalsämne. Hjälp, håller jag på att mutera till amerikan!?! Nej skämt åsido, det är fantastiskt roligt att anamma den amerikanska livsstilen lite. I måndags blev jag inslängd i allt vad praktiken på Rangers innebär. Sedan dess har jag jobbat stenhårt med olika undersökningar, research, sociala medier, grafisk design och event. Det är en stor avdelning med mycket människor, men jag får ändå ta del av väldigt mycket olika arbetsuppgifter vilket är både roligt och lärorikt. Jag kommer även att jobba under alla hemmamatcher i Madison Square Garden och det ser jag som en fantastisk möjlighet att få vara med "hela vägen". Det är så man lär sig att det faktiskt inte bara handlar om att sitta där vid skrivbordet framför datorn. Det handlar om helheten och det handlar framför allt om kunden. U...

I Norge valde man att lagstifta om kvotering till styrelser och antal kvinnor ökade, föga förvånande, i just styrelser. Men gör styrelsens sammansättning automatiskt näringslivet mer jämställt? Knappast. Påverkar det ledningsgruppens sätt att agera? Kanske, men inte alltid. För det är väl i ledningsgruppen som alla operativa beslut tas och det är väl där som kvinnorna ska in? I New York finns organisationen Catalyst som startades 1962 och arbetar över hela världen med forskning, information och råd angående kvinnor ute i arbetslivet. 400 företag och organisationer är medlemmar i Catalyst och de har kontor i USA, Canada och Europa. Catalyst hävdar i flera undersökningar att könsmixade grupper på alla nivåer är bra för alla företag och organisationer. Men kvotering är inte det första de tänker på, även om de inte är motståndare. Hur engagera män i frågan och hur få män att inse att mixen gör bolaget starkare, frågar sig Catalyst, och efter intervjuer och forskning påstår man att: För ...

Sidor