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

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...

Välkommen tillbaka efter jul- och nyårshelgerna Hoppas du precis som jag haft möjlighet att reflektera över din yrkessituation. Kanske där du är och där du skulle vilja vara. Jag passar på att ställa två frågor till dig. Hur stor del av dig och din identitet är kopplad till yrkeslivet?  Hur mycket av din tid lägger du varje dygn på ditt arbete, båda fysisk och mentalt? Får jag gissa att svaren på båda frågorna är att jobbet är viktigt för dig och att du lägger mycket tid på ditt jobb! Tänk då vad en mentor kan bidra med. Utmana dig i dina tankar, snabbare nå dina mål, och vara det bollplank många av oss saknar. Föreställ dig att ha en eller flera olika mentorer i olika faser av ditt yrkesliv. Visst låter det coolt. Att alltid ha någon att bolla med, båda i medgång och motgång. Fortsätt tanken, visst bygger du upp massor av kunskap och erfarenhet i ditt yrkesliv? Skulle du själv kunna vara mentor åt någon?  ”Inte kan väl jag”…sluta nu. ALLA kan! Tänk om mentorskap var det naturligast...

Hej igen, roligt att det har blivit så många läsare av mina tankar kring den digitala utvecklingen. Jag är övertygad om att 2016 på många sätt kommer blir avgörande om man vill haka på i det digitala mästerskapet. Så, nu kör vi! Förståelsen för att digitalisering inte enbart handlar om teknologi utan framförallt om att skapa en maximal kundupplevelse tror jag kommer att bli årets fokus. De företag som börjat ”bli digitala” kommer att ha ett enormt försprång och de som under 2016 saknar ett digital strategi kommer inte kunna hänga med i matchen. I detta inlägg kommer jag inte prata om AI, VR, drönare, mobilitet eller någon annan hajpad teknologi utan kommer istället att fokusera på de mjuka värdena. Men självklart kommer jag på ett eller annat sätt återkomma till dessa punkter under bloggseriens gång. 1. Ledarskapet är avgörande för en framgångsrik digitaliseringSlappa vd:ar och ledare som är nonchalanta kring den digitala revolution vi befinner oss i och förkastar det hela med ”Att...

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...

2015 är nu förbi och ett nytt digitalt år ligger framför oss. Vill med detta extra inlägg summera de viktigaste digitala händelserna under 2015. 3 digitala ting om 2015: 1. Internet sprider sig till stora delar av världen2015 var ett viktigt teknologiskt år. Jag skulle säga att internets framfart över värden och inte minst i Asien är det som betytt mest för i särklass flest. Under 2015 fick halva Kinas befolkning internet och en femtedel av Indiens befolkning. Det innebär att Indien har fler internet användare än USA och att Kina har dubbelt så många! Både Kina och Indien är länder som genom sin egen digitalisering kommer att ta den digitala teknologin till en ny nivå. De är smarta, hungriga och är beredda att arbeta hårt för att sätta sina länder på den digitala kartan. Vem vet, kanske kommer gemene man inom en snar framtid prata om Bangalore och Zhongguancun istället för Silicon Valley? 2. Drönarna och VR tar plats I takt med att produktionen av drönare har effektiviserats och pr...

Günther är på ett mentoruppdrag och jag passar på att skriva ett inlägg om min allergi mot adepter. Det är inte så att jag är allergisk mot personer. Nej, jag är allergisk mot ordet adept, mot att kalla högpresterande vuxna människor för adept, vilket betyder lärjunge, lärling, elev. Innovativa mentorer har inte adepter, de är bollplank åt (potentiellt) högpresterande individer och möter dessa som jämlikar. Att kliva in i en mentorroll handlar om att hjälpa en kollega eller någon annan att tänka kring sina utmaningar, som liknar eller inte liknar ens egna. Personen är kanske nybliven chef, företagare eller specialist, precis som mentorn, men lever i sitt sammanhang, har sin bakgrund, sin personlighet. Mentorn är ett inkännande, utmanande, innovativt bollplank, inte en nestor eller ålderman. När jag agerar mentor frågar jag kanske Varför har du inte läst psykologi innan du startar företag? En konstig fråga, ställd utifrån min erfarenhet, som kan öppna upp för samtal om grundantagande...

Jag älskar paradoxen kring digitalisering för ju mer vi digitaliseras desto viktigare blir elementen kring det mänskliga. Jag har i introduktionen till denna bloggserie: Från digitala dinosaurier till digitala mästare konstaterat de tre sanningarna kring digitalisering; tanken kring att allt som kan digitaliseras kommer att digitaliseras, och kan antingen bli ett hot eller en möjlighet för dig. Just där, har du som ledare ett vägval att göra. Antingen ser du de enorma möjligheterna eller så börjar sakta men säkert din affärsmodell och bolag att dö för att du bara ser hot. För oss är digitalisering en överlevnadsfråga, för mitt bolag, men även för hela vårt lands framtida näringsliv. Industriella revolutionens tid är förbi och den digitala revolutionen är född. Företag måste förstå att vi lever i den digitala ekonomin. Och att den digitala ekonomin innebär en övergång från industrisamhällets hierarkiskt styrda processer, med fokus på produkter för en massmarknad, till användarfokuse...

Vår Crash Course IHM Digital Marketing har nu snart funnits i ett år, och mottagande av denna intensivutbuildning, för att ta fram strategier och optimera den digitala marknadsföringen, har varit väldigt bra. Stiftelsen IHMs uppgift är att stärka svenskt näringsliv så när deltagarna ger feedback att de kommit igång på alla fronter så känns det riktigt skönt. Vi har tidigare intervjuat Magnus från NCC och Petra på Bambino Mam AB om vad de tyckte om, och nyttan med kursen. Nu är det dags för Sara Hallén Andersson som jobbar på Brillor å Sånt i Malmö och som får representera detaljhandeln.  – Hej Sara, nu ska det bli spännande att höra vad du tyckte, men först kan vi väl få lite kort bakgrundsfakta om dig? – Hej, jag är 42 år, bor i Landskrona med min man och vår son. Jag har jobbat i optikbranschen i 23 år och idag är jag optikerassistent på Brillor å Sånt sedan några år tillbaka. – Vad gör en optikerassistent? – Jag slipar glas och utför en del reparationer, jag hjälper till med en ...

Jag har under en tid tänkt mycket på varför personal slutar. Mycket utifrån turnén vi har haft med IHM, där vi pratat om modernt ledarskap och som jag får återkomma till vid tid och tillfälle. Med denna post är jag självkritisk och vill dela de tankar jag har antecknat och hoppas att det är tankar som kan vara till hjälp.   Vi lever i en tid med 80-90 talister som är i arbetsmarknaden och har en helt annan syn på jobb och karriär. Som jag sa på en föreläsning med IHM, så är vi glada om vi kan ha en anställd hos oss i minst tre år. Lite skillnad mot förr i tiden då man var sitt yrke och fick yrket inpräntat på gravstenen. Nu är arbetsmarknaden är flexibel och digital, och som arbetsgivare behöver man skapa bolag som är attraktiva för att locka till sig de bästa talangerna, för i en digital tid är efterfrågan och tillgängligheten stor kring vassa medarbetare.   Nedan skriver jag kort om 7 skäl till varför jag tror att man tappar duktiga medarbetare:   1. Chefen När ledarskapet saknas,...

Jag är med i den relativt nystartade talarföreningen National Speakers Association Sweden (NSA Sweden). Det är en förening där vi talare och moderatorer kan dela med oss av våra erfarenheter och tillsammans arbeta för att främja branschen. En av målsättningarna är att hjälpa varandra bli bättre. På ett möte nyligen hade vi en dialog om pauser och om mellanrum och dess betydelse. Exempel 1: Som mötesledare kan tystnad vara ett effektivt sätt att ge deltagarna en chans att ge sig själva en insikt.  Att våga vara tyst och ge rikligt med tid att reflektera. Exempel 2: Som mötesledare är det viktigt med förståelse för att vi inte kan vara effektiva en längre tid om vi inte får mental paus då och då. Vissa hävdar att vi bara kan ha fullt fokus i fem minuter. Jag tror inte det var en tillfällighet att man i skolan tidigare hade bara 40 minuters lektioner innan det blev rast. Planera in pauserna i mötet! Om det är ett möte som sträcker sig längre än en halvdag är det bra att lägga in tid fö...

Hej på dig. Ja just du, som sitter framför datorn, din tablet eller mobilen och funderar på vad som händer i vår digitala värld. Om du vill, så kan jag lotsa dig igenom vad som händer och vad det innebär för dig och ditt företag.  Jag heter Arash Gilan och är medgrundare och vice VD för ett bolag som heter Viva Media Group. Viva hjälper bolag att synas digital och att skapa digitala intäkter. Du kan även kalla det digital marknadsföring som ger resultat.  Men, vad jag gör är inte vem jag är. Men det jag gör, blir ett uttryck för vem jag är. Jag är 30 år och härrom dagen fick jag väldigt överraskande veta att jag är med på Shortcuts lista över 100-uppstickare i Sverige (personer under 40 år som inspirerar, engagerar och gör Sverige bättre). Riktigt kul! Jag är väldigt passionerad över att lära mig saker och det jag vill lära mig mest kring och förstå är allt som berör digitalisering. Så pass att jag ägnar helger och kvällar att just nu skriva klart en bok i ämnet med titeln ”Get dig...

Häromdan skrev jag ett blogginlägg där jag försökte mynta begreppet Audiam, att dagens marknadsföring borde handla om att lyssna i mycket större utsträckning. Det blev en del reaktioner, mest positiva, och det kom igång en spännande diskussion på bloggen. Så… …tankar föder tankar. Här kommer ett blogginlägg med lite tankar som fötts ur dessa diskussioner och några diskussioner jag haft IRL. Idag pratar vi mycket om ”Internet of things”, alltså våra sakers internet. Det strategiska forsknings-  och innovationsprogrammet Internet of Things (Iot) på Uppsala Universitet definierar begreppet så här: Internet of things, är ett samlingsbegrepp för den utveckling som innebär att maskiner, fordon, gods, hushållsapparater, kläder och andra saker samt varelser (inklusive människor), förses med små inbyggda sensorer och processorer. Detta medför att dessa enheter kan uppfatta sin omvärld, kommunicera med den och på så sätt skapa ett situationsanpassat beteende och medverka till att skapa smart...

  Gamla tiders mentorskap är ute. Det är inte längre kunskapsöverföring från äldre till yngre som behövs för att skapa tillväxt och ett hälsosamt arbetsliv. Istället ropar många efter kreativa, intressanta, erfarna, sporrande, nytänkande personer som kan ställa upp som reflektionspartner och bollplank under en tid. Intressant nog möter vi ofta i våra roller som ledarutvecklare och affärskonsult personer som borde vara mentorer, men de tvekar ibland för de vet inte riktigt vad som krävs. Vi möter lika ofta personer som skulle behöva en mentor, men som inte vet vilken kraft som ligger i mentorskap. Den som vill vara eller ha en innovativ mentor, behöver förstå den moderna mentorns uppgift. Mentorn behöver ha både egna erfarenheter och lust att se andra utvecklas. Dessutom behöver mentorn ha en del smarta verktyg i bakfickan. När vi skrev vår bok ”Det innovativa mentorskapet” utgick vi ifrån mentorns behov. Resultatet är en bok om den mer relationsorienterade och psykologiska sidan av ...

Då var det dags. Jag skulle bli jobbskuggad. Herregud. Jag? Jobbskuggad? Följa mig en hel dag? Ja herre gud, hur ska detta gå? Jag tänkte först att jag skulle försöka få till en ”rolig” dag med kundbesök, lunchmöte, lite fler möten, fika o ja…? Typ så. Men hur gick det? Njaeee, va ska man säga..? Dagen började med ett snabbt hej, (Linnea fick en grundlig rundtur av min käre far i våra lokaler innan jag kom, de var liiiiiiiite tidiga, jag som vanligt smet in ett par korta minuter innan utsatt tid) sedan direkt in på möte. Rekryteringar. Planer framåt, tankar om det gångna året… Hur ser behovet ut..? Ja ni vet. Starten blev inte riktigt som jag önskat, tänkte ju ett par tre kaffe, prata om livet, företag, jobb i stort. Drömmar. Jag gillar drömmar. Men nej, inget av det de första timmarna. Sen tillslut fick vi en stund över. Då, minsann hann vi prata. Om livet, drömmar, arbete, utmaningar, lärda läxor… Väldigt roligt. Jag hade många gånger önskat att det fanns en bok att följa. Typ gör...

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,...

IHM och Marknadscheferna i nytt spännande samarbete! MarknadschefsAkademin är en unik satsning på kompetensuppdatering för dig som arbetar som marknadschef eller marknadsansvarig – ett årsabonnemang med kunskap och kontinuerligt lärande.  Under ett års tid får du uppdateringar, den senaste kunskapen och trenderna inom marknadsföring – inte minst det digitala. Du möter andra i din egen situation och duktiga föreläsare inom utvalda områden. Ni träffas fyra heldagar under ett år för föreläsningar och workshops. Dessutom ingår MCPLAY-konceptet, där du varje vecka får en film med 9 utvalda minuter direkt till din egen dator.  

Sidor