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

Du vet hur det är. Du ska precis göra klart det där som är så högaktuellt nu och just då blir du utslängd från it-systemet. Just då börjar operativsystemet uppdatera sig och har 26 uppdateringar kvar. Just då kraschar datorn. Just då tar batterierna slut i laptopen och på det här tåget finns det inga vägguttag.  Du känner den där gräsliga frustrationen som så lätt kommer när vi själva är motiverade att göra en sak och något hindrar oss i vår framfart. Stress, leda och ibland rent av ilska är resultatet.  Men, det är inte kört. Vill vi, finns det alltid något konstruktivt vi kan göra. Känner vi att vi ändå kommer ett steg vidare, om än på en annan front än den tänkta, slipper vi frustrationen och blir mer herre över vår egen situation. Det här kan du göra Här är elva exempel på vad du kan göra på papper om du inte har tillgång till din dator och ändå vill nyttja tiden.- Formulera mail du vet att du har att skriva.- Skissa utförligare på den där briljanta idén du fick häromdagen men s...

Debatten går het nu. Inom flera områden dyker det upp riskkapitalbolag med säte i skatteparadis. Jag får några funderingar när jag läser och ser på TV nyheterna. Riskkapital, vad är det? Är inte det när någon går in med kapital och riskerar att förlora detta, om tex marknaden - kunderna sviker. Men det kanske är en lek med ord. Orwellskt nyspråk. Vari består då risken i de aktuella fallen? Det känns inte alldeles livsfarligt att gå in i branscher som är statligt subventionerade och som inte kan läggas ned. Skolan, med hela friskolebranschen, där vinsterna från skolpengar fraktas ut ur landet. Vari består risken? Att kunderna, barnen, slutar gå i skolan? Eller går till den en icke fungerande kommunal skola? Vården, där våra gamla i många fall under flera år behandlats som kollin. Jag menar Carema är ju bara ännu ett exempel. Varför har vi Lex Sara? Och vad hände på ISS 1997, samma problem samma frågor. Kvantitet före kvalitet. Vinst före människovärde. Vad ska gamlingarna göra? Ta si...

När vi har mer att göra än vi hinner, behöver vi prioritera bland det vi har att göra. Allt kan inte göras samtidigt och inom dagens lopp, utan vi har att bestämma vad som ska göras först och vad som ska följa därefter. Som du säkert vet, finns det en handfull prioriteringsmetoder att ta till. Metoder i all ära, men för att de överhuvudtaget ska vara till hjälp, är det en sak vi behöver ha klart för oss. Uppgifter väger olika tungt Allt det vi gör i vardagen, alla uppgifter, är inget självändamål. De syftar alltid till att vi åstadkommer någonting, stort eller smått. De är ämnade att vara små byggstenar som tillsammans med våra kollegors uppgifter skapar verksamhetens väg framåt. Men, vissa uppgifter bidrar mycket till vägen framåt och andra mindre. Att prioritera rätt är att prioritera de uppgifter som i hög grad bidrar till att verksamheten utvecklas till det vi vill. Tydliggör därför vilka mål du har att uppfylla, just i din befattning. Vet vi inte vart vi ska, kan vi inte veta v...

För snart ett par år (2010) sedan kom Monica Renstig på Women´s Business Research Institute med en undersökning som visade att det finns en tydligt minskning av antalet kvinnor som är chefer. På svenska storföretag ser Renstig en minskning av antalet från 27 till 24%.  Jag vet inte vad det är för konstigt med det. Att de minskar alltså. Låt mig börja med några citat: "Hade jag inte fått stöd av min man hade det inte fungerat alls".Mia Irborg, Nordenchef 3Com "Enda sättet att nå lika i karriären är att ta lika ansvar hemma, allt annat är bullshit".Niclas Storåkers, vd Avanza "Det finns uppdragsgivare som inte tycker det är någon idé att ta in yngre kvinnor för de kommer förmodligen att föda barn".Kristina Ohlsson, Mercuri Urval "Jag har en mycket hjälpsam fru och så försöker jag hålla helgerna lediga".Hans-Holger Albrecht, vd MTG Intressanta uttalanden som talar för sig själva. Det finns många anledningar till att antalet kvinnor på chefspositioner minskar - några av dem är: 1. Kvinn...

Hjälp! hur har jag lyckats driva företag från 19 års ålder utan kunskaper från IHM? Det är bara en av många tankar som dyker upp när vi vänder och vrider på siffror. Siffror i form av nyckeltal, så som VM, Rt, TB1, TG2, KOH, soliditet och många fler. Inte har jag suttit med analyser av detta slag, annat än i mitt eget huvud. Men då enbart i form av sunt förnuft, plus och minus, procent och järnkoll på varje öre som går in och ut ur företaget. När jag nu sitter i lektionssalen i vår lilla arbetsgrupp kan jag inte låta bli att fundera på hur i allsindar jag har lyckats utan alla dessa formler.  Samtidigt som kunskapen växer fram känner jag en enorm lättnad av att kunna se sambanden, hur saker eller framförallt siffror hänger ihop. Känslan av befrielse infinner sig och jag njuter av att ta in all kunskap som IHM serverar. För att kunna utveckla mig själv och inte minst mitt företag. Det skall erkännas att det tar tid att lära sig alla formler, det är ett evigt bläddrande i läroboken oc...

Vi har en utbredd sexism i Sverige trots att vi alltid säger att vi är bäst på jämställdhet. Men sexismen syns inte så tydligt, den kommer fram vid rekryteringstillfällen och vid lönesättning, i språket och när vi män bedömer någon utifrån kön istället för kompetens. Så har det varit länge och så kommer det att förbli om vi inte agerar.  När min första bok om sexism kom ut 2005 undrade en journalist om det var speciellt mansgrisigt i näringslivet. Nej, inte särskilt, svarade jag, det ser ut som samhället i stort. Jag hade kunnat sitta som militär eller universitetslektor och beskrivit samma sak.  I den boken namngav jag flera företag, där problem med sexism kommit upp till ytan. Men förlaget tog bort dem, eftersom man inte vill ha debatten huruvida det faktiskt var sant eller inte. Det var för tidigt. Frågan är om jag hänger ut dem, om jag skriver att det handlade om Skandia eller SAS, för det är knappast något unikt med dessa två. Vi har andra exempel som mediaföretagen Expressen, ...

Alla uppgifter vi gör i vårt arbete är inte lika betydelsefulla. Vissa är sådant som bara ska göras och andra är uppgifterna som gör att verksamheten tar kvantsprång i rätt riktning. Vi som har mycket att göra och som lätt fyller våra dagar upp till brädden (vem gör inte det, förresten), vill ägna oss mest åt det som ger mest effekt. Det skulle här vara lätt för mig att dra till med klämmiga truismer som "Gör rätt saker!", men det är inte så jag arbetar. ”Men, hur?” I att vara struktör ligger att vara systematisk och konkret. Därför frågar jag "hur?" många gånger dagligen; kanske ibland över gränsen för vad mina kunder tycker är trevligt. Så, när jag första gången hörde talas om Vilfredo Paretos princip (populärt kallad 80/20-regeln) och att den kan tillämpas på personlig effektivitet, frågade jag mig mycket riktigt "men, hur?". Nu, några år av struktörarbete senare, har jag åtminstone ett svar på det. Men, först mer om Paretos princip. Få står ofta för mycket Den i slutet av 1800-t...

Min erfarenhet är att det inte skiljer något alls. Däremot kan det vara olika problem. En saknar delaktighet (som minskar motivation som i sin tur leder till försämrad prestation), en annan otydligt vad som beslutades, en tredje en dålig struktur, en fjärde en dålig fysisk miljö och en femte dåligt mötesledarskap (många har flera av dessa förstås!). Jag kan dock inte se att den offentliga sektorn avsätter mer tid i möten än näringslivet. Bara så du vet! Självkänslan är däremot sämre i offentliga sektorn är min upplevelse som också stöds av denna studie som gjorts på skillnaden mellan höga chefer inom näringslivet vs offentliga sektorn! Intressant läsning här innan du fortsätter läsa min blogg! Intressant eller hur? Kan det vara så att med ett mer kvinnligt ledarskap (mer kvinnliga ledare inom offentliga sektorn) så är förståelsen för de mjuka värdena mer i fokus? I offentliga sektorn är utbildningsinsatserna mer konstant och inte beroende av konjunkturen? Vad tror du? Stay gr8 Micke...

Lite pirrigt i magen är det allt, att börja blogga här på IHM. Mitt första blogginlägg någonsin. Givetvis kunde jag inte låta bli att tacka ja när jag blev tillfrågad om jag ville bidra med mina tankar och funderingar. Så nu sitter jag här och fingrar på tanjentbordet och hoppas att ni är några som vill följa med på min bloggresa.  Som nybliven IHM-student med siktet inställt på DIHM så vimlar huvudet av intryck och tankar. Vi har haft tre undervisningstillfällen och det är enormt mycket att ta in vid vaje tillfälle. Ja, alla ni andra som redan studerar eller har studerat här vet säkerligen vad jag syftar på...Det är marknadsplaner, omvärldsanalyser, PEST-modeller, segmentering och en himmelens massa siffror. För mig som har drivit eget företag i olika former under drygt tjugo år, först som kasinoägare (ett litet sådant, med Black-Jack och Roulette) under glada åttiotalet och de senaste tolv åren som fotograf och dessutom sedan drygt ett år tillbaka även som förläggare, så är detta ...

Sociala nätverk som Facebook och Twitter har i första hand anammats av privatpersoner medan många företag bara gjort några trevande försök att förstå hur den nya tekniken kan användas. Men nu ökar företagens intresse då fler och fler börjar inse det några mycket framgångsrika pionjärer tydligt visat. Socialt nätverkande är lönsamt och företag som använder den nya tekniken skapar stora produktivitets- och konkurrensfördelar. Google underskattade efterfrågan med Google+ När sökjätten Google nyligen lanserade betaversionen av sitt nya sociala nätverk Google+ var det inte speciellt förvånande. Google lever på att användare i första hand söker information i deras system men sociala nätverk som Facebook, med 750 miljoner aktiva användare, konkurrerar om uppmärksamheten. Det mest förvånande med Googles lansering var i stället reaktionerna från företagsanvändarna som var upprörda över att det inte fanns några företagskonton då Google+ initialt bara vände sig till privatpersoner. I en interv...

Att vara trafikant i rusningstid är frustrerande oavsett vad för trafikant du än är, gång, cykel, bil, alla hatar vi någon. Gångaren på cyklisten, cyklisten på bilisten, bilisten på gångaren osv osv. Varje dag, hela året, hela livet! Och vi kommer inte att göra något åt det för det är inte vi som gör fel, det är de andra, idioterna som borde ta tag i det! Jag är både gångare och bilist och kan lätt räkna upp 10 saker jag hatar, helst på morgonen. • När jag snällt stannar vid övergångställen och folk går demonstrativt sakta. • När jag ligger bakom en buss som ligger före i tidtabellen kör sakta istället för att vänta vid en hållplats. • När cyklister kör full fart där gångaren ska korsa cykelbanan. • När bilister kör full fart mot övergångställen och sedan tvärnitar. • När bilister kör förbi kön för att tränga sig in längst fram. • När bilister börjar saxa för tidigt så att filen blir helt tom, saxar gör man längst fram! • När spårvagnar plingar hysteriskt istället för att sakta ner....

Varför inte rädda ett liv idag? Idag är det internationell End Malaria Day. Malaria är en sjukdom som dödar fler människor än HIV. Många av de som dör är barn. Ett av de effektivaste sätten att hindra malaria att spridas är att använda moskitnät. Ett moskitnät kostar ungefär 10 dollar. Alldeles nyss köpte jag ett exemplar av boken End Malaria. Jag köpte eboksversionen. Vinsten från eboken går oavkortat till stiftelsen Malaria No More. Boken kostar 20 dollar. Två moskitnät. Om två personer får moskitnät och det räddar någon av dem från att få malaria, så har jag gjort betydligt mer nytta idag än jag brukar göra på en arbetsdag. Känns rätt bra.

Jag tycker fotboll är väldigt roligt och har varit motgångssupporter sedan 1971 då jag började heja på GAIS. I år går det väldigt bra för oss och det känns rättvist. Men det är mycket annat som inte känns bra. Ta det här med att köpa och sälja spelare under säsongen. Ja, det har vi kanske vant oss vid men det känns inte bra när de rikaste klubbarna köper upp toppspelare från sina konkurrenter mitt i säsongen och dessutom skriver in i kontraktet att spelaren inte får spela mot klubben han lämnat. "Javisst är han bra, du får honom för 25 mille men då får han inte spela mot oss utan bara vara med och ta poäng mot våra konkurrenter." SANDLÅDA! En annan sak som inte känns bra är supportrarnas ickeförståelse (eller totala blundande) för det ekonomiska spelet inom fotbollen. När GAIS senast mötte Mjällby (GAIS vann) så skanderade gaisklacken "Han har sålt sig som en hora" varje gång före detta gaisaren Pär Ericsson rörde bollen – en affär som för övrigt inbringade ca 8 millar till GAIS. De...

Läste en intressant artikel skriven av Monica Gunne på Aftonbladet. Hon hade läst en studie gjort av Ming Company som har kommit fram till att vi endast gör saker som för företaget framåt två timmar av dagen.  Ni som följer min blogg vet att jag ser möten med perspektivet; Vilken effekt skall mötet ha och sedan skapas det därefter. Thomas de Ming som är en lärdesigner som varit med och gjort denna studie säger: "- Vi möts för att tänka tillsammans och då lär vi skapa förutsättningar för att det skall vara enkelt att tänka."  Jag tycker det är genialt. Problemet är att så få skapar dessa förutsättningar. Hur skall vi kunna fokusera på det vi ska om mobiler ringer, sms, mail, etc. Om vi sedan saknar syfte och mål blir det heller inte enkelt att tänka.  Vi saknar dessutom bra mötesrum eller rum för möten eller som Thomas säger, rum för tankar.  Ju mer vågade rum, ju mer vågade tankar. Kan det vara så? Ingen jag har träffat tror iaf att ex styrelserummet med det stora styrelsebordet ska...

Efter 31 år i arbetslivet, jo jag gick ut som underskötare för 31 år sedan, så är jag fortfarande förvånand hur många jag träffat genom alla dessa år som just säger så som rubriken lyder. De jag träffat som sagt denna mening verkar leva hela livet i det beteendet. Helt omedvetna om det. De verkar helt uppriktiga när de säger; -Just nu är det mycket. Efter jul blir det bättre. Eller, efter sommaren blir det bättre. Eller, bara vi är klara med detta så blir det bättre. Eller, just nu är det sjukt mycket så vi får vänta lite. Medans andra alltid har tid att lyssna och är nyfikna på andra. Ledare verkar alltid ha tid, chefer sällan. Det finns alltid tid för att göra en bra sak som Martin Luther King sa. Jag har under dessa år träffat mängder med företag och organisationer. Att utifrån komma in och känna av stämningen i en organisation är alltid intressant. Som egen företagare har jag upplevts både som samarbetspartner och en leverantör som skall veta sin plats. När jag som tidigare arbe...

Trots att så mycket tid läggs ner på att skapa powerpoints och sedan presentera dem så får de oftast en kontraproduktiv effekt. Dvs de är inte bara dåliga det vore bättre om vi inte gjorde detta alls.  För hur många har fått en utbildning i powerpoint.. Vad skall vi använda den till? När skall vi använda oss av den? Hur skall vi använda den?  Här kommer ett tips på den vassaste föreläsaren och utbildaren i ämnet som jag stött på. Bara att se hans föreläsning från Möteskulturdagen för 2 år sedan kommer du att skapa bättre ppt i framtiden! Bägge delarna ligger på youtube: Del 1: http://www.youtube.com/watch?v=SPY31mp0RtA Del 2: http://www.youtube.com/watch?v=ZAeOiZ2Qgg4&feature=related  Mer gratis tips hittar du också på hans hemsida www.presentationsteknik.com Med bättre powerpoints skapar du effektivare möten och en bättre möteskultur. Mitt nästa blogginlägg kommer att handla om den fysiska miljöns betydelse för effekten av ett möte. Till dess, fundera på den bästa mötesmiljön d...

Sidor