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

Jag är genetiskt sett mer lik en apa, än en afrikansk elefant är lik en indisk. Du också. Män är djur. Kvinnor likaså. Om detta berättade min branschkollega Rebecka Eriksson från Briza, en av talarna Möteskulturdagen, som vi arrangerade i april. Rebecka är utbildad biolog, så hon vet vad hon talar om! Hon pratade om vikten av att komma ihåg djuret i oss när vi designar våra möten. Det är inte fluffigt hippie-snack- det handlar om att vi ska se till att alla kan tillgodogöra sig den information som delges under ett möte. Mötesledaren kan till exempel skapa ro i flocken genom att se deltagarna i ögonen när de kommer. Det är en absolut grundläggande nödvändighet att alla mötesdeltagare ska känna sig välkomnade och behövda under mötet. Toapauser, fika, sömnbehov och så vidare är heller inget man kan fuska med om man är ute efter ett effektivt möte. Har vi inte fått basbehoven tillfredsställda, kommer våra hjärnor vara fullt upptagna med att försöka komma till rätta med det. Det blir gan...

En av alla nyanställda på IHM är Mervi Wouters som är affärsutvecklingsansvarig för Blended Learning. Men vad är det? Hur och varför, frågorna är många så vi bestämmer oss för att få till en pratstund med Mervi för att reda ut begreppen. – Hej Mervi, nu ska vi ta reda på allt om blended learning men först får du gärna berätta lite kort om din bakgrund. – Hej, det känns riktigt roligt att bli intervjuad för jag är mycket glad och stolt över min nya tjänst. Lite kort om min bakgrund blir svårt men jag gör ett försök.Jag är född och uppvuxen i Finland som du säkert hör, och mitt efternamn, som inte skvallrar om min bakgrund, har jag tack vare att jag sedan länge är gift med min man som kommer från Holland. Jag läste Ekonomlinjen vid Stockholms Universitet på 80-talet och parallellt med det startade jag tillsammans med ett par kurskamrater en redovisningsbyrå. Vi började tidigt med persondatorer och upptäckte att datorn i många stycken blev ett hinder för våra kunder. De förstod så kl...

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

Xin chào lần nữa, igår såg jag den helt fantastiska dokumentären ”Last Days in Vietnam” av Rory Kennedy. En skrämmande men också på många sätt fin bild av vad som hände de sista dagarna innan Saigon föll 1975. Skrämmande, för att det som vanligt i krig, dog en hel del människor, omkring 2 miljoner, och lidande för långt många fler. Fint för att många av de amerikanska soldaterna och ambassadpersonalen trotsade Vita Husets order om att inte evakuera några vietnameser och tog med sig över 130 tusen människor som varit i amerikansk tjänst. Men det är egentligen inte dokumentären jag tänkte skriva om, utan tankar som dök upp i samband med att jag tittade. 2009 var jag i Saigon eller Ho Chi Minh City som det numera heter, en fantastisk stad med över 5 miljoner mopeder som man fick kryssa emellan. En fantastiskt spännande stad just p g a att man sett och hört så mycket om denna stad under sin uppväxt, en fantastisk stad för att människorna var helt underbara. Här satt vi på Hotel Rex tak...

Det var ett tag sedan. För jag har inte haft tiden framför mig helt enkelt. Eller har jag haft det? Jag intalar mig själv att det är så. Men tankarna för mig också till att det skulle kunna vara ett solklart fall av prioriteringar, eller möjligtvis både och. Jag bestämmer mig ändå så här långt för att utse tiden som syndabock. Med motivet, för det knappa motstånd och den ringa försvarsställning som tiden besitter. Men även för att den internationella gångbarheten. Hela världen verkar ju dela förståelsen för knapphet av tid. Delar av Nuonaffären kan exempelvis härledas till denna bristvara. Åtminstone den biten som kostade alla svenska medborgare cirka 6000 bagare. Eller rättare sagt, 50 miljarder av våra skattebananer. Eller för att få en bild, ett reproduktion av Putins kritiserade OS arrangemang i Sotji, som gick för ungefär samma prislapp. Nåväl, oavsett politisk läggning, och i en tid när höger och vänster är center, kan väl alla ändå enas i mitten på att detta inte var den bäst...

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

Någonting jag ofta blir ombedd att prata om är ledarskap. För mig är det en ganska diffus term. Vad är skillnaden på ledare och chef? För mig är en ledare en person som går i spetsen, som driver utveckling och bolag framåt. En ledare är en person som försöker se helheten och utifrån de förutsättningar som finns, göra det bästa av det. En ledare för mig är en ganska orädd, många gånger med entreprenöriella egenskaper, person. En person som vill se förändringar och dess resultat. En chef däremot, är i min värld en person som mer kontrollerar och upprätthåller ordningen, dvs att beslut och förändringar genomförs och att regelverk följs. En person som vårdar, och gör ganska mycket likadant jobb varje dag. Detta är kanske en uppfattning jag är ensam om, men som sagt, i min värld så ser jag på dessa två såhär. För andra kan säkert en chef vara samma sak som ledare, för vissa kan nog ledare vara en informell chef, en person man följer som inte egentligen har befogenhet för alla beslut, men...

I dag är vi lite extra stolta på IHM Volvo Cars Business School! Som strategisk kompetensutvecklings-partner till Volvo Car Norway och delaktiga i flera program vill vi gratulera Volvo i Norge till den fina utvecklingen – ni har gjort ett fantastiskt jobb! I norska finanstidningen Dagens Næringsliv presenterades den 12 maj Norsk Kundebarometers senaste rapport om vilka företag som har de mest nöjda kunderna. Efter flera år av svaga resultat hamnar numera flera bilföretag i toppen. Volvo tillhör de företag som har klättrat kraftfullt i listan, från plats 17 till en imponerande sjätteplats på totallistan. Jämfört med branschkollegorna är Volvo nu på en hedrande tredjeplats och i rygg på BMW som är tvåa efter Toyota på billistan.       – Detta är väldigt roligt, säger Øystein Herland, VD för Volvo Car Norway. Jag framhåller att det är den målmedvetna och systematiska process som ligger bakom det positiva resultatet. Alla våra anställda och återförsäljare har genomgått ett program för ...

Att våra utbildningar är bra har vi länge fått bekräftat genom att våra studenter får bra jobb ute hos företagen. Men nu ser vi också tydligt att många fler där ute har upptäckt IHMs Yrkehögskole-utbildningar. Vi får fler ansökningar än tidigare, vi får fler företag som vill ha praktikanter från IHM och vi har fler och fler representanter från näringslivet som vill engagera sig i våra Advisory Boards. Det är i dessa forum vi utvecklar program som matchar marknadens behov.   Nu börjar det intensiva arbetet med att genomföra muntliga tester och bedöma de blivande studenterna inför starten, riktigt skoj. Men många ansökningar på ett begränsat antal platser innebär också att inte alla kommer in, och vi hoppas självklart att ni som får det tråkiga beskedet söker igen, för nästa år kanske vi har fått ännu fler platser (och din arbetslivserfarenhet har ökat under tiden). Tack för alla ansökningar och väl mött i klass efter sommaren! Hälsningar gänget på IHM YH och lärare på Redovisningsek...

För något år sedan var jag på seminariet ”Konsten att göra affärer” på IHM och såg Lars-Johan Åge för första gången. Jag blev fascinerad av hur han fångade sin publik och lotsade dem igenom sina forskningsresultat. Kommentarerna och recensionerna efter seminariet bekräftade min upplevelse. Nu är det snart dags för Lars-Johan på IHM igen för att presentera en fördjupning av delar i hans forskning, spännande. Jag mailade Lars-Johan och fick till en tid för en liten pratstund. – Hej, jag har sett dig på scen tidigare så det ska bli roligt att få höra lite mer om dina tankar, men först kan vi väl få lite bakgrundsfakta. – Absolut, roligt att vara här. Jag jobbade många år som säljare och började intressera mig för vad det var som gjorde att en del lyckades medan andra lyckades mindre bra med till synes samma förutsättningar. Jag började forska i affärsprocessen och är idag ekonomie doktor på Handelshögskolan i Stockholm. – Och om jag har förstått det rätt så likställer du försäljning m...

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. ChefenNär ledarskapet saknas, och en...

Efter Sveriges djupdykning i den senaste PISA-studien bad regeringen den ekonomiska samarbetsorganisationen OECD göra en snabbanalys av resultatet för svensk del. Andreas Schleicher, chef för utbildningsfrågor vid OECD var nyligen i Sverige och presenterade denna analys. Schleicher menar att det borde satsas mer på lärarna, på deras löner och karriärmöjligheter. Det som också är särskilt viktigt enligt Schleicher är en förändrad attityd till utbildning.  När man ställer frågan ”Hur blir man bra på matte?”, svarar majoriteten av våra svenska elever att det handlar om talang. Om jag inte är född till ett mattegeni kan jag göra något annat. Om man ställer precis samma fråga till exempelvis en finsk eller kinesisk elev svarar nio av tio: Om jag verkligen försöker ordentligt och anstränger mig kommer mina lärare att hjälpa mig, och då kommer jag att nå framgång. Man kan ifrågasätta bilden vi fått lära oss i Sverige sedan vi var barn, om gener, talang och intelligens. Stämmer den med verk...

Har du kommit i kontakt uttrycket pace over perfection (ungefär fart framför fullkomlighet)? Jag har hört det flera gånger i affärssammanhang, och tror att det många gånger är ett bra motto. Det kan ge mandat till att fortsätta röra sig framåt, att inte i envishet sträva efter perfektion, att istället få saker gjorda. Och vi gillar ju fart! Det förknippas med effektivitet, att vinna, att komma först!  Samtidigt upplever många en stor tidsbrist. Trots att vi som kollektiv aldrig fått så mycket gjort och haft så mycket fritid, ökar stressen och tidspressen. Resultatet? Kvantitet men ingen kvalitet. Väldigt mycket pace, långt ifrån perfection. Det verkar som att tankar inte får ta tid. Många organisationer som jag jobbar med, tycker att medarbetarna tillbringar för mycket tid i möten, och för att effektivisera tar man då helt enkelt bort några av dem. Veckomötet, det skippar vi! Men det är att börja i fel ände. Om man lär sig skapa bra möten, blir en effekt att man sparar tid på sina m...

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

Aulan på IHM i Göteborg var full när IHM och SAJ bjöd in till inspirationskväll med tema trender och arbetsglädje. Årets föreläsare och årets genombrott 2014, Göran Adlén och Dennis Westerberg föreläste, skratten duggade tätt och stämningen var görgo’, som vi säger i Göteborg. Monica Birgerson från IHM och Stefan Jonsson var kvällens värdar.  Bilden: Monica Birgerson, Göran Adlén, Dennis Westerberg och Stefan Jonsson. Foto: Thom Estifanos.

Efter två år på IHM och utbildningen Säljare IT Solutions B2B har vi idag slutfört det sista, men kanske den viktigaste delen av vår utbildning. Examensarbetet är inlämnat, klart och redovisat för vår examinator! Vårt uppdrag har varit att skriva marknadsplaner för de olika företag vi vart på under vår 16 veckor långa LIA. För min grupps del blev det att skriva en marknadsplan för det företag jag numera också arbetar för - Print IT. Från alla olika håll i klassen har detta inneburit otroligt hårt arbete då många liksom jag själv, under perioden vi arbetat med ex-arbetet, samtidigt arbetat på de företag vi fått jobb på. Men det gick, för idag blev ju alltsammans helt klart och jag tror många liksom jag själv längtat efter denna dagen! Så imorgon väntas våra betyg och därefter har vi bara diplomeringen kvar som kommer hållas på skolan den 29e Maj. Två år har flugit förbi, och jag hoppas alla som följt bloggen under min tid på Nelly faktiskt förstått att jag helt bytte spår. Vilket jag...

Sidor