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

Blogginlägg av Ruth Westberg

Ruth Westberg

Ruth är vice VD på SevabConcept, ett automationsbolag som konstruerar, tillverkar, monterar och driftsätter produktionsutrustningar. Har en DHIM examen ifrån IHM och utsågs 2014 till ”Årets unga VD”.

Hos oss så erbjuder vi många delar av automation. Ofta innehåller projekt för oss hela vårt erbjudande, men i vissa uppdrag är det endast vissa delar inblandade. När det bara är några delar kan det tex handla om att programmera om befintliga utrustningar, byta ut komponenter som är gamla/saknar funktioner, och bygga elskåp. Trots att alla våra utrustningar är specialanpassade så följer vi ett standardiserat tillvägagångssätt i våra projekt. Det går ifrån en funktionbeskrivning från sälj, genom hela kedjan med mekanik konstruktion, elkonstruktion, tillverkning el & mek montage , driftsättning och installation. Det var någon som sa att *allt hos oss är special, men för oss är det standard* vilket stämmer väldigt bra. Vi tänker beskriva ett projekt som innehåller hela vår kedja. Processen startar med en förfrågan, där man har en önskan om att automatisera hela eller delar av sin produktion. Våra säljare tar fram lösningar, ofta är mekanikkonstruktörer och programmerare inblandade i...

I stora drag kan all produktion automatiseras, det handlar oftast bara om priset. Som nämnt tidigare behöver det vara en viss återbetalningstid för att det skall vara värt det. Lite beroende på hur länge produkten väntas produceras så är det också krav på återbetalningstiden. I det fallet, alltså hur mycket och hur länge en produkt vänast produceras, brukar vi prata om årsvolymer och årsmaskiner. Är det en årsmaskin innebär det att den mängd detaljer som skall produceras i stort belägger utrustningen dygnet runt i ett år. Då, om inte den tekniska lösningen är oerhört avancerad, är det i regel värt att automatisera. Är det däremot en mindre mängd som skall produceras, blir återbetalningstiden längre, och värdet att automatisera minskar/försvinner. Det kan vara möjligt att anpassa utrustningen så två halvårs produkter kan köras (eller flera), och då kan det göra att investeringen återbetalar sig. Vi brukar också prata om en 80/20 regel. Med den menar vi enkelt räknat att 80procent av ...

  Enligt wikipedia: Automation eller automatisering betyder att man låter en maskin eller teknik utföra ett arbete. Automation kommer från grekiskans 'automatos' och betyder på egen hand. Det finns såklart många olika typer av automation. När det kommer till att bygga maskiner, brukar vi prata om hel och halvautomatiska utrustningar. En helautomatisk utrustning är en enhet som efter startsignal helt själv utför arbete. En halvautomatisk utrustning kräver att vissa delar sker manuellt. Tex att en operatör placerar detaljer i läge, trycker på start, maskinen pressar ihop, kontrollerar att pressningen nått rätt moment och när det är klart plockas delarna ut av operatören. Exempel på helautomatisk utrustning kan vara en robotcell i en plastindustri. Roboten tillsammans med en formspruta och formsprutningsverktyg, hanterar ingående komponenter som hylsor och skruvar. Dessa placeras i formsprutningsverktyget av roboten, formsprutan stänger och pressar in plast och gjuter in hylsor och skr...

Digitala lösningar är vardag för majoriteten idag. Vi köper digitalt, vi sköter våra ärenden, såsom läkarbesök och matinköp digitalt, vi ser filmer och lyssnar till musik digitalt… Men, en sak man faktiskt inte pratar så ofta om är vad som händer bakom själva användandet. Du köper tex kläder via digitala tjänster, men hur fungerar det bakom kulisserna? Jag menar, hur kommer de där snygga brallorna från lagret till dig? I vissa fall sker det med manuellt arbete, dvs mänsklig arbetskraft. Men allt oftare är hela processen automatiserad. Din order skickas in till företaget, automatiskt startas en plockenhet som hämtar just din vara på det automatiserade lagret, transporterar den till förpackning, förpackning stängs, transportssedel skapas och förpackningen placeras i system för färdiga paket, vilka hämtas av transportör och transporteras till dig. Du får ett sms när det är framme på utlämningsstället. Smidigt. Men, har du någonsin tänkt på utrustningen som hanterar processen? Jag mena...

Vi har sedan våren haft mer än fullt att göra. 2015 var vårt rekordår rent försäljningsmässigt, 2016 går ännu bättre. Att vi har mer och mer att göra, är ju såklart är helt fantastiskt! Återköp av våra befintliga kunder är ett av våra absoluta mål, att få nya är ett annat. För att nå de mål vi önskar behöver vi både gamla och nya kunder. Det är tillsammans med dem som vi skapar förutsättningar för utveckling. Men, den ökade efterfrågan innebär också en del utmaningar. Vi behöver bli fler, och söker i detta nu beredare/CNC operatör och även mekanik konstruktör. Vi behöver effektivisera vissa flöden. Vi behöver jobba oss över kullen, och sedan gasa lite till. Vi har flyttat omkring resurser internt, valt att lägga ut viss tillverkning och även hyrt in en del timmar. Alla har lagt in en extra växel, och precis som jag skrev, gasat sig framåt. En svårighet jag funderar mycket på, i att möta denna efterfrågan är, att hitta kompetens som kan hjälpa oss att genomföra arbetena. Vi, Concept ...

Jag har alltid sett mig själv som en person som inte är rädd för att hoppa på tåget, prova nytt och som genomför sina drömmar. Jag gillar inte människor som säger att de vill göra saker, och sen inte gör dem. För, för mig är drömmar inget man ser på vykort. Drömmar skall förverkligas. Det senaste har jag inte riktigt varit den där jag trodde jag var. Om det beror på att jag blivit äldre, klokare och fått mer erfarenhet, eller om det är så att jag blivit äldre, feg och bekväm som är orsaken vet jag inte. Äldre har jag ju faktiskt blivit, det är en gemensam nämnare. Men klokare och med mer erfarenhet? Javisst, borde vara jäkligt konstigt annars, man ska ju lära av sina misstag. Feg och bekväm? Ja antagligen. Lite sådär mätt och halvfet om ni förstår vad jag menar. På något sätt så har jag jobbat hårt för att nå mål jag drömt om. Jag har varit så fokuserad på det att jag glömt av att skapa nya mål, nya drömmar och att fortsätta dra igång det där jäkla tåget som alla säger går hela tide...

Ja nu var det ju det där med tiden igen, vart tar den vägen? Känns som om det inte var längesedan det var jul, och nu är det midsommar..? Det är galet. Helt galet, men kul, väldigt kul. Mycket har hänt under första halvan av 2016, jag har börjat skriva om det här flera gånger, men sen har något annat kommit emellan och dagarna, veckorna går… Jag tänker att vi tar det ifrån början. Efter genomförda förändringar i affärsplan och organisation 2014 fortsatte arbetet med förändringar och planer framåt. Vi tre operativa ägare som var kvar kände att vi tagit oss till en platå, men att vi för att komma vidare behövde tänka större, tänka längre och tänka nytt. Hur skulle vi på bästa sätt växa? Skulle vi försöka få in kapital för att växa? Hur skulle ägarbilden se ut? Vem ville man få in? Många tankar och diskussioner senare kom vi fram till två olika val. Antingen skulle vi köpa ett bolag, eller helt enkelt sälja. Vi bedömde det som för långsamt och tungt att växa organiskt, nytt kapital ell...

Det går tyvärr allt för länge mellan inläggen här numera. Tiden lixom bara flyter iväg. En dag blev plötsligt en vecka. En vecka en månad… Just nu står jag och planerar inför vårt mässdeltagande på Elmia Automation i maj. Det är alltid en hel del som skall ordnas. Vi har under 2015 tagit fram flera nya produkter som skall marknadsföras, och det är alltid en utmaning att få med tillräckligt mycket teknisk information utan att det för den saken blir för detaljerat och därmed också ganska obegripligt för många. Man vill ju också ha en monter som sticker ut, men som för den sakens skull inte upplevs som oseriös. Ibland känner jag att skillnaden är hårfin. Men visst ska man ha lite roligt också? För ett par veckor sedan fick vi klart vårt bokslut. Känns så fantastisk med siffror som är de högsta hittills både för omsättning och vinst. Förra årets bokslut, dvs 2014, var ju minst sagt tråkigare siffror. Men så blir det ibland. Och som vi lärt oss. Just av den anledningen känns 2015års siff...

Förra veckan fick jag förmånen att medverka som jury på UF mässan som hölls på Svenska Mässan i Göteborg. Så himla kul! När jag gick på gymnasiet var UF väldigt stort på vår skola. Mycket av detta berodde nog på de två fantastiska lärare som hade detta ämne som sitt för de egna valen man kunde göra. Jag hade väl tänkt som alla andra att ha ett UF bolag, men fick istället frågan om att vara med i den grupp som skulle driva elevkaféet vilket jag hoppade på. Det kändes på nått sätt mer riktigt. Vi hade samma projektlärare som UFarna. Att skolans ledning plötsligt beslöt sig för att lägga ner vårt kafé och lägga ut hela kafé verksamheten på extern part kan man ju se som lite halvkasst för vårt projekt. Den rektorn som var ansvarig över detta beslut kom vi att kalla ”kortbyxan” eftersom hans brallor alltid var 10cm för korta… Han var inte min favorit kan man säga, och om jag ska vara ärlig var jag säkert inte hans heller… Men, vi fick driva det en stund, göra en del roliga förändringar, ...

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

I mitt arbete jobbar jag dagligen med projekt där produktion skall automatiseras. Det är den ena häftiga utrustningen efter den andra som vi bygger. Alla utrustningar vi gör skall CE-märkas. Detta innebär bla att vi tar ansvar för att de är ”säkra” dvs att man vidtagit åtgärder vid designen för att minimera skaderisken, man har använt sig av de standarder man borde mm. Även om man försökt att minimera riskerna, kan olyckor hända. Eller så är olyckan kanske inte riktigt en olycka… Någonting som är viktigt att veta, är att det aldrig finns helt 100% system. Den mänskliga faktorn är allt som oftast avgörande. För inte allt så länge sedan dog en installatör anställd hos en annan aktör i branschen då han och hans kollega skulle prova en robotcell. Han klev in i cellen, stängde grinden, som säkerheten låg i (stängd dörr = stängt skydd = säkert att starta), och bad sin ”kompis” starta processen. Kompisen startade, och tjong, roboten slog killen i huvudet inne i cellen så illa så han inte ö...

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

Det finns ju vissa sker som jag tror alla är överens om att det är ett big no-no. Ändå, så verkar detta ha gått förbi en hel massa människor. Visst, det är helt fine, alla bryr sig inte det minsta om kläder och sånt. Jag kan väl inte säga att jag tillhör kategorin av folk som engagerar mig nämnvärt i kläder och mode. Jag har inte tid. Eller lust. Hur man än köper, så är garderoben ändå tom när man ska välja. Däremot finns det som sagt vissa gränser. Big no-no. Typ, strumpor i sandaler. Särskilt beiga strumpor i sandaler. Byxor som sitter i armhålorna, gärna med instoppad T-shirt är likadant. Tyvärr kommer dessa ofta i grupp så att säga… En annan sak är snabba solglasögon, gärna med nått fräsigt glas i skimrande turkos. Inte alltid, men ganska ofta sitter de på mindre snabba människor. Dvs människor med några extra kilon, som för att lixom minska ner deras snabbhet. Ofta, är dessa snabba glasögon lite som ett par försmå trosor- de skär in. Att ha dubbla tinningar tror jag aldrig komm...

Visst är jag för jämställdhet. Det tycker jag borde vara självklart idag 2015. Någonting man inte får glömma i debatten är, att män och kvinnor ÄR olika. Vi drivs i regel inte av samma saker. För män är hög lön viktigare än för kvinnor, vi vill mer ha flexibla arbetstider. Vi får inte heller glömma det faktum, att kvinnor föder barn och har en annan syn på hus och hem. Jag har skrivit om det förut, men det tåls att upprepas. (För tidigare inlägg http://www.ihm.se/blogg/ruth-westberg/vi-ar-alla-olikar) När vi var grottmänniskor, tog kvinnor hand om hem och barn. Männen jagade. Visst, det finns alltid dem som går mot strömmen, men i huvudsak är det kvinnor som bryr sig om hur det ser ut och är hemma. Killar är lite mer manana manana. Saker löser sig typ. Vi har väl att lära av varandra. Och, vi är bäst tillsammans. Så många rapporter som styrker detta- ju mer jämn könsfördelning på företag, desto bättre lönsamhet.  Självklart tycker jag att vi kan bli bättre på många plan, så som lika...

Loggade in av en händelse på försäkringskassan för ett bra tag sedan. Skulle kontrollera så allt är korrekt inlämnat för en av de anställda som varit sjuk länge. Ringer för att få hjälp. Telefonkö. Såklart. Jag bläddrar omkring lite på sidan och hittar en flik med ”Höjda ersättningsnivåer för sjuklönekostnader” Ahh nice tänker jag, sjukdom är dyrt, gött om de justerat nivåerna så man kan få ersättning för det som arbetsgivare. Men, ja just det men, man kan få 0,6% om man har sjuklönekostnader över 3miljoner. 3 MILJONER!! Alltså vafan Sverige. Hur många bolag har sjuklönekostnader över 3miljoner? Visst de stora, men de är 0,09% av alla bolag som finns i Sverige( alltså inte inom offentlig sektor, som typ vård, skola och omsorg). Hur många jobb skapar dem? Hur många människor sysselsätter de? Hur mycket bidrar de rent procentuellt med till statskassan? Nä fy skäms, gör det enklare för de företag som faktiskt skapar flest jobb. Gör det enklare för enmans, mikro och de små företagen att...

Sidor