/** * 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); } Familjen är allt! | IHM

Familjen är allt!

Benvenuti ad un altro incontro! Det går bra för vår IHM-alumn Christian Di Luca, VD för Gruppo Di Luca. Jag bestämmer mig för att träffa Christian och höra hur det känns, som sportjournalisterna brukar fråga.

Lite för tidigt är jag på plats och blir välkomnad av en kille i receptionen. –Ta en kaffe och slå dig ner så kommer Christian strax. Jag vänder mig om och ser ett stort kök mitt i entrén, vilket känns härligt annorlunda, känns lite italienskt. Hyllor med alla Zeta och Delizie produkter och mycket viner ramar in, och det är inte utan att jag vill kliva in och börja röra i grytorna. Efter bara en liten stund blir det liv och rörelse. En kille börjar skala morötter och en annan sätter på pastavatten. Nu jobbas det febrilt i köket och fler ansluter, dofterna börjar spridas i lokalen och det är mycket skratt. Nu kommer Christian.

– Hej, ursäkta att jag är lite sen, jag har cyklat så fort jag kan för att hinna hit. Vi går och sätter oss i ett konferensrum så blir det lite lugnare. 

– Ingen fara, jag har suttit och funderat på det här med att låta alla mötas av ett stort kök i entrén?

– Det är hjärtat i hela företaget - det är så jag och mina syskon har vuxit upp. Alla samlas i köket och går igenom vad som har hänt eller vad som ska hända, mycket skratt och diskussioner. Så vill vi ha det på kontoret också för att visa att vi jobbar med mat och kärleken till den.

Vi har nu slagit oss ner i konferensrummet ”Urbino”, uppkallat efter en stad i närheten av Fernando Di Lucas födelseort Fano, Fernando är grundare till Gruppo Di Luca och syskonens far. 

Christian fortsätter:
– Vi ställer fram olika delar av vårt sortiment plus färska grönsaker varje dag ute i köket, och det är 3-4 olika matlag varje dag som lagar och fixar till en god lunch för alla, lika gott och roligt varje dag.

– Nu började vi i en helt annan ända än jag tänkt mig den här intervjun, men jag fortsätter på det spåret. Du är född i Sverige med italiensk far och svensk mor, är du mest svensk eller italiensk?

– Jag är nog mycket italiensk med tanke på temperament och så, skrattar Christian, men också väldigt svensk. Jag funderar inte så ofta på det, men det är klart att jag har präglats väldigt mycket av hela vår familjs kärlek till italiensk mat, och nu jobbar jag med det jag älskar, ihop med folk jag älskar, i ett land jag älskar, på så sätt kan man säga att jag lever min dröm genom företaget.

– Jag läser ofta om att entreprenörskapet i södra Europa är mycket större än här uppe i norr. Har du några reflektioner kring det?

– Absolut, jag upplever att det är fler entreprenörer och småföretag i Italien, det är en annan företagskultur eller rättare sagt företagare-kultur, det kokar lite mer.

– Var beror det på?

– Utan att riktigt veta, så tror jag att man ofta i Italien har en ganska skeptisk syn på staten och människorna med makt, man måste själv ta hand om sig och sin familj och se om sitt hus. De sociala skyddsnäten är inte lika omfattande i Italien. Så har det varit länge, och det i sig har skapat en tradition av eget företagande. Vi har inte den traditionen lika tydligt i Sverige och det som kanske har bromsat är att vi snarare förlitar oss på att staten skapar vår grundtrygghet och det kanske inte ger samma driv. Men det känns som det är fler och fler små svenska företag som tar för sig på marknaden. Kul!

– Men vad är det som driver dig, som VD i ett idag väldigt stort familjeföretag?

– Mycket! Min pappa skapade grunden till det som jag och mina två systrar idag driver tillsammans med väldigt många bra medarbetare, mitt stora intresse för mat, försäljning och marknadsföring driver mig. Dessutom är jag tävlingsmänniska och det driver mig att hela tiden utveckla och förbättra. Dessutom är det kul att göra detta tillsammans med familjen, mina syskon och pappa. 
Jag har en familj med tre barn och vill naturligtvis att de ska ha en trygg uppväxt och kanske vilja jobba här framöver, det skapar också driv och inte minst ett ansvar. Sist men inte minst, vi som jobbar här älskar mat, och vår vision är att vi genom att ha de bästa produkterna i respektive produktgrupp skapar en grund för det viktigaste av allt; Att alla ska kunna äta god medelhavsmat varje dag.

– Jag älskar också mat, gärna italiensk, och tack vare en del italienska vänner lärde jag mig tidigt betydelsen av en god, perfekt pasta. Men i Göteborg blir man ofta förbannad över att man inte kan få en god pasta med sås till lunch. Det är snarare tvärtom, massor av sås med lite överkokt pasta.

– Det är samma sak i Stockholm, tyvärr. Jag vet inte hur det blivit så, för i Italien är det ganska lite sås som man blandar ihop med pastan, som måste ha tuggmotstånd ”al dente”, detta är en del av en kärleksfullt tillagad rätt.

– Och ni har sedan många år försökt att berätta om er syn på italiensk mat genom receptfoldrar, där er pappa Fernando och Markus Aujalay samtalar och lagar mat. Har det inte fått något genomslag?

– Jo, i hemmen, det är jag helt säker på! Varför lunchrestaurangerna inte hängt med har jag svårt att förstå. Vi konsumenter kanske måste ställa högre krav. Vi svenskar har tagit till oss och är generellt sett duktiga på det italienska köket, även om det naturligtvis finns en del förvanskningar också.

– Jag läste någonstans att en av dina favoriträtter är Spaghetti alla Puttanesca, men om man tillhör matlaget som ska laga lunch till alla här på Gruppo Di Luca, skulle man våga laga den till dig då?

– Ha ha, absolut, men jag kanske kommer och hjälper till. Jag har många italienska rätter som favoriter, men just Puttanesca är ett väldigt bra exempel på hur man snabbt och enkelt kan tillaga en jättegod rätt till hela familjen istället för att köpa färdigmat. Prova att laga den med vår nya sardellpasta, Umami på tub som vi kallar den, så slipper man kladdet med burksardeller som aldrig går åt. Vi har väldigt många duktiga matlagare här på jobbet, och bara man gillar god mat så lär man sig att laga också, precis som det ska vara i en stor familj.

– Nu har vi pratat väldigt mycket mat och jag kom ju hit för att prata om att ni blivit ”Årets Företagare”, hur känns det? Och hur blir man det?

– Det känns underbart, det är den finaste utmärkelsen man kan få som svensk företagare. Det som lett oss till utmärkelsen är många år av hårt arbete i kombination med alla våra engagerade medarbetares kärlek till italiensk mat.

– Vad säger pappa, är han stolt?

– Givetvis är han jättestolt, och jag och mina syskon är mycket stolta för att de specifikt gav oss i 2:a generationens ledning av Gruppo Di Luca utmärkelsen. Vår pappa gav oss grunden och vi har förvaltat och utvecklat den.

– Men har Fernando släppt taget helt?

– Nej, det gör han nog aldrig, skrattar Christian. Här blir det tydligt att vi är en väldigt italiensk familj för jag och mina syskon har haft många häftiga diskussioner med vår pappa för att utveckla det här företaget i den riktning vi tror på. Och vi har lyckats, det visar den här utmärkelsen.

– Men Fernando har ändå varit en stor del av er profil.

– Ja, men vi har sedan en tid tillbaka startat en stor varumärkesresa, där vi inte bara lyfter fram Fernando, utan mer av hela familjen. Vår första reklamfilm har precis haft premiär och där vi får se pappas avsked från Italien och hur han åkte iväg på sin Lambretta mot kärleken i Sverige.

– Pappa igen?

– Ja, han är fortfarande en stor del av vår familj, vår historia och vårt företag, så han försvinner inte. Men du kommer också att få en inblick i mitt och de andras kök, alla är med! I vår strävan att bli bäst, inte störst, så betyder hela familjen allt, och där räknar jag in våra medarbetare också.

– Det låter väldigt spännande och kul. Jag hoppas att detta kanske slår igenom på lunchrestaurangerna också. Jag såg att det hängde en cykeltröja i taket i receptionen, en rosa ledartröja från Bianchi med texten; Con la testa si vuole, col cuore si vince, på ryggen. Vad betyder det?

– Med hjärnan kvalar du in, men med hjärtat vinner du! 

– Då tackar jag för mig och önskar dig, hela familjen och företaget lycka till!

– Tack, jätteroligt att ha dig och IHM här, kunskaperna jag fått med mig från Strategic Brand Management och Personligt Ledarskap har betytt mycket för mig, jag har fortfarande kontakt, även affärsmässig, med min handledare Calle Peyron. Jag vill att du tar med dig sardellpastan och de andra ingredienserna till Puttanescan, mitt recept har du, så lagar du det till din familj när du kommer hem, berätta vad du tyckte och lycka till!

Jag lämnar Gruppo Di Luca och Christian och tar tåget mot Göteborg. Tänker på min vän Erik, och hans pappa Vito som tog Vespan upp till sin kärlek i Sverige. Det är inte bara det som förenar dessa svensk-italienska familjer, kärleken till maten och att samla familj och vänner kring den är också densamma. Man känner verkligen värmen i det här företaget, inte bara hos Christian utan hos alla jag mötte. Jag skrattar för mig själv när jag tittar på ingredienserna och receptet jag fick med mig för att laga Puttanescan till mig och Lena på kvällen, känslan är precis som när jag pratade med Vito om olika recept, han betonade alltid hur viktigt det var att jag gjorde på vissa sätt så att min fru Lena skulle bli glad. Jag älskar verkligen italienarnas förhållningssätt till maten och att samla sina vänner kring den, finns det något annat land i världen där det är så tydligt?

Aludd

PS: Och hur blev min Puttanesca undrar kanske du och Christian? Den blev helt underbar, och sardellpasta på tub är fantastiskt bra! Jag såg deras reklamfilm på TV igår och tycker att de fångat sin historia på ett mycket snyggt sätt, ser fram emot en fortsättning. Filmen kan du se här.

PSS: Enligt önskemål kommer här receptet:

Ingredienser 4 portioner

400 g Spaghetti

2-4 vitlöksklyftor

2,5 tsk Zeta Sardellcrème

1 burk Körsbärstomater

3 msk Kapris, små

½ röd chili finhackad

1 dl Oliver Taggiasca, utan kärnor eller Kalamata urkärnade

½ dl bladpersilja , finhackad

Olivolja

nymald svartpeppar

Koka pastan enligt anvisningen på förpackningen. Skala och hacka vitlöken. Fräs vitlök, chili och sardellcréme i rikligt med olivolja i en vid kastrull eller traktörpanna. 
Tillsätt körsbärstomaterna och låt småputtra ca 10 minuter. 
Blanda ner kapris och oliver i tomatsåsen och smaka av med salt och peppar. Häll av pastan och blanda med såsen och finhackad persilja. Servera med riven parmesan och lite olivolja.

4 juni 2014
Hur är det ställt med tillit & engagemang i ditt företag?
IHM Personligt ledarskap ger dig styrkan. Kom och testa oss!