params= new JRegistry(); $this->params->loadString($plugin->params, 'JSON'); $this->_cacheEnabled = $this->params->get('cache_enabled'); if ($this->_cacheEnabled === null) $this->_cacheEnabled == 1; $this->_autoflush = $this->params->get('autoFlush'); if ($this->_autoflush === null) $this->_autoflush = 1; $this->_autoflush3rdParty = $this->params->get('autoFlush-ThirdParty'); if ($this->_autoflush3rdParty === null) $this->_autoflush3rdParty = 1; $this->_autoflushClientSide = $this->params->get('autoFlush-ClientSide'); if ($this->_autoflushClientSide === null) $this->_autoflushClientSide = 0; } /** * Heartbeat cache checking function. Will also monitor $_GET for the jSGCache parameter * (pressing the purge cache button in admin) * * * @access public * @return null */ public function onAfterInitialise() { if (!$this->_cacheEnabled || $this->_isBlacklisted($this->_applicationPath)) { JResponse::setHeader('X-Cache-Enabled','False',true); return; } if ($this->_cacheEnabled) { JResponse::setHeader('X-Cache-Enabled','True',true); } //Init the application url $this->_applicationPath = str_replace(array('administrator/index.php','index.php'),'',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME'])); //Check for any admin action and proceed to flushMonitor and 3rd party plugins if ( isset($_POST['task']) || isset($_GET['task']) || isset($_GET['cart_virtuemart_product_id'])) { $this->_flushMonitor(); if ($this->_autoflush3rdParty) $this->_monitorThirdPartyPlugins(); } //Check if we have a logged in user and enable cache bypass cookie 'task' => string 'user.login' $user = JFactory::getUser(); if (!$user->guest || (isset($_POST['task']) && preg_match('/login/i', $_POST['task']))) { $_POST[JSession::getFormToken()] = 1; //Force the correct token, since the login box on the page is cached with the 1st visitors' token //Enable the cache bypass for logged users by setting a cache bypass cookie setcookie('jSGCacheBypass',1,time() + 6000,'/'); } if ($user->guest || (isset($_POST['task']) && $_POST['task'] == 'user.logout')) { //Remove the bypass cookie if not a logged user if (isset($_COOKIE['jSGCacheBypass'])) setcookie('jSGCacheBypass',0, time() - 3600,'/'); } // Handle purge button press when get has jSGCache=purge, but only in admin with a logged user if(isset($_GET['jSGCache']) && $_GET['jSGCache'] == 'purge' && JFactory::getApplication()->isAdmin() && !$user->guest ) $this->_purgeCache(true); } /** * Admin panel icon display * * @access public * @param string $context * @return array */ public function onGetIcons( $context ) { return array(array( 'link'=>'?jSGCache=purge', 'image'=>'header/icon-48-purge.png', 'text'=>JText::_('Purge jSGCache'), 'id'=>'jSGCache' )); } /** * Calls the cache server to purge the cache * * @access public * @param string|bool $message Message to be displayed if purge is successful. If this param is false no output would be done * @return null */ private function _purgeCache( $message = true ) { $purgeRequest = $this->_applicationPath . '(.*)'; // Check if caching server is varnish or nginx. $sgcache_ip = '/etc/sgcache_ip'; $hostname = $_SERVER['SERVER_ADDR']; $purge_method = "PURGE"; if (file_exists($sgcache_ip)) { $hostname = trim( file_get_contents( $sgcache_ip, true ) ); $purge_method = "BAN"; } $cacheServerSocket = fsockopen($hostname, 80, $errno, $errstr, 2); if(!$cacheServerSocket) { JError::raise(E_ERROR,500,JText::_('Connection to cache server failed!')); JError::raise(E_ERROR,500,JText::_($errstr ($errno))); return; } $request = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: {$_SERVER['SERVER_NAME']}\r\nConnection: Close\r\n\r\n"; if (preg_match('/^www\./',$_SERVER['SERVER_NAME'])) { $domain_no_www = preg_replace('/^www\./', '', $_SERVER['SERVER_NAME']); $request2 = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: {$domain_no_www}\r\nConnection: Close\r\n\r\n"; } else $request2 = "$purge_method {$purgeRequest} HTTP/1.0\r\nHost: www.{$_SERVER['SERVER_NAME']}\r\nConnection: Close\r\n\r\n"; fwrite($cacheServerSocket, $request); $response = fgets($cacheServerSocket); fclose($cacheServerSocket); $cacheServerSocket = fsockopen($hostname, 80, $errno, $errstr, 2); fwrite($cacheServerSocket, $request2); fclose($cacheServerSocket); if($message !== false) { if(preg_match('/200/',$response)) { if ($message === true) JFactory::getApplication()->enqueueMessage(JText::_('SG Cache Successfully Purged!')); else JFactory::getApplication()->enqueueMessage(JText::_( $message )); } else { JError::raise(E_NOTICE,501, JText::_('SG Cache: Purge was not successful!')); JError::raise(E_NOTICE,501, jText::_('Error: ' . $response)); } } } /** * Check if url is in caching blacklist * * @param string $applicationPath * * @return bool */ private function _isBlacklisted($applicationPath) { $blacklistArray = explode("\n",$this->params->get('blacklist')); $blacklistRegexArray = array(); $indexIsBlacklisted = false; foreach($blacklistArray as $key=>$row) { $row = trim($row); if ($row != '/' && $quoted = preg_quote($row,'/')) $blacklistRegexArray[$key] = $quoted; if ($row == '/') $indexIsBlacklisted = true; } if ($indexIsBlacklisted && $_SERVER['REQUEST_URI'] == $applicationPath) return true; if (empty($blacklistRegexArray)) return false; $blacklistRegex = '/('.implode('|',$blacklistRegexArray) . ')/i'; return preg_match($blacklistRegex, $_SERVER['REQUEST_URI']); } /** * 3rd party plugin monitor * * @access private * @return null */ private function _monitorThirdPartyPlugins() { // Kunena & K2 if ($this->params->get('autoFlush-ThirdParty') == 1 && isset($_POST['option']) && ($_POST['option']=='com_k2' || $_POST['option' ]== 'com_kunena')) { $this->_purgeCache(false); } // VirtueMart if ( (isset($_POST['option']) && $_POST['option'] == 'com_virtuemart') || ( isset($_GET['option']) && $_GET['option'] == 'com_virtuemart' ) || isset($_GET['cart_virtuemart_product_id']) ) { if($this->params->get('autoFlush-ThirdParty') == 1) $this->_purgeCache(false); } } /** * Action monitor * * @access private * @return null */ private function _flushMonitor() { $user = JFactory::getUser(); if ((!JFactory::getApplication()->isAdmin() && !$this->_autoflushClientSide) || $user->guest) return; $autoflush = $this->params->get('autoFlush'); if ($autoflush === null) $autoflush = 1; if (isset($_POST['task']) && $_POST['task'] && !in_array($_POST['task'],self::$_ignoreTasks) && $autoflush == 1) $this->_purgeCache(false); } } Eiderdown

On Sæból is a rather big eiderduck nesting colony. It has about 2300 nests and covers around 7 hectares of land.

The eider ducks are wild birds who live in the northern regions and nest in mai/june. In Iceland they have been under nature conservancy since 1847.


aedarvarpFriðlýst æðarvarp = Eider nesting area under nature conservancy aedarvarp1The area is well marked. Unfortunately sometimes it is not enough to protect the privacy of the nesting birds

Icelanders have collected and used the eiderdown since the beginning of settlement in Iceland. In this time a unique simbiosis has developed between humans and the wild eider ducks.
The eider-farmers protect the nesting area, so the bird is protected from predators, such as foxes, seagulls, ravens, parasitic jaegers and minks. They also keep away other visitors like farm animals and people.
During the nesting time we have to keep watch over the colony for 24 hours. Before the birds come we also prepare the area for them by making nests for them, for example out of old tires or make little houses. You can see more pictures further down on this site.


eider1Example of a nesting location. This house is made by Hanný who also took the picture. eider15Example of a nesting location. Here the bird has chosen to nest in old tires. Photographer: Stephanie Hentschel

We start to prepare the nesting area in april or when the snow reduces. Then we go and clean out the old nests. We take out old hay and eggshells and put in new dry hay. We leave the old eggshells beside the nests to lure the birds, who often like to come to their same old nests year after year.
We also put up scarecrows and lines on who we attatch colorful materials and flags. The poles and cliffs at the beach are painted in noteable colors and colorful things are spread around the nesting area. For example old fishnet balls. During the nesting time we also have a radio on the area which is on 24/7.
All those things are done to scare away the predators and at the same time make the area appealing to the eider ducks, who find security in the colorful objects and presence of the humans.


aedarvarp3The scarecrows 16 april 2014 duntynsla51Flags made in spring 2016. We got the material from Kidka, the wool factory in Hvammstangi.

The first birds start to come to the nesting area in late april. The eider ducks always come in pairs and waddle around the area, looking for a suitable nesting location. When the right spot has been found the mother starts to prepare the nest. She starts by throwing out anything that in her opinion doesn't belong in the nest and replaces it with more desired components, such as moss, grass, seaweed and hay.
The duck lays one egg a day, covers it and heads to the ocean. She comes back every day until she has a certain amount of eggs (often 4-6 eggs) and then she starts to nest. During the nesting she does not stand up. Not even to eat or do her other needs. While she is nesting she picks of her down and uses it to keep the eggs warm. The male duck sits beside his female partner while she is nesting, but goes every now and then to the ocean to eat. Shortly before the youngs hatch he goes to the sea and abandones the mother, leaving her with all the work.


duntynsla58Five eggs in one nest, all starting to hatch duntynsla24Eiderduck on her nest


As soon as the first eider ducks have started nesting we start to protect the colony around the clock for a period of 6 weeks. It takes the eggs 24 days to hatch, but unfortunately not all the ducks start nesting at the same time, which extends our protection-season.

While we protect the colony we mostly have to scare away ravens, who like to cause damage to the nests. They drive the ducks of the nests, eat their eggs and often destroy the whole nest. There are also some species of seagulls who try this, and they have to be kept away as well. We are also beware of the mink, but luckily they are rather seldom in our area.
In the night we are a lot on the move around the nesting area, by that hoping to keep away the artic fox. Occasionally we also have to keep away curios tourists.

It takes many years to build up an eider nesting area, but if it is well taken care of and the birds feel good and safe, they return every year.


eider9In the eider nesting colony. The picture is taken while collecting the down. Photo is taken by Stephanie Hentschel

The down is collected right before the youngs hatch. We have to go very carefully into the nesting area and crawl between the nests so we don't frighten the ducks. The younger ducks often fly of their nests, but the older ones just walk scolding around the nest. Some are so tame that they don't stand up, so we have to pick them up and put them beside the nest.
The eggs are taken carefully out of the nest, the down collected, dry hay put in it's place and then the eggs are carefully laid back into the nest. When we move on the birds come right back and lay on their nests.


eider13Before: Eider nest with down. Photographer: Stephanie Hentschel eider14After: The down has been collected and replaced with dry hay. Photographer: Stephanie Hentschel

The eider down can only be collected in good weather. It has to be rather warm, for the sake of the eggs, and neither rain or wind, for the sake of the down.
With this approach you get the best and most precious eider down and don't harm the youngs that hatch into the dry hay. As soon as they are dry they go with their mother to the sea where they have to start looking for food.
We also protect the youngs the first weeks after they are in the sea, because otherwise the big seagulls would just eat most of them.

When the down has been collected we immediately start to dry it, by spreading it on grates and blowing warm air under it. When the down has dried it goes to a professional rinsing station where it is cleaned and made ready for sale.


eider8Tobbi drying the eider down. Photographer: Stephanie Hentschel



Click on the pictures to make them bigger. Then you can also read the text that goes with them ..


duntynsla2 duntynsla9 duntynsla14
duntynsla26 duntynsla21 duntynsla61
duntynsla37 duntynsla34 duntynsla67
duntynsla68 duntynsla38 duntynsla8
aedarvarp2 aedarvarp5 duntynsla45
duntynsla47 duntynsla50 duntynsla18 duntynsla52
duntynsla34 eider 2018 7  


Collecting the down:

duntynsla3 duntynsla4 duntynsla5 duntynsla6
duntynsla12 duntynsla15 duntynsla49 duntynsla30
duntynsla63  duntynsla3  duntynsla64 duntynsla39
eider19 eider 2018 6



aedarvarp15 aedarvarp22 aedarvarp14
aedarvarp19 aedarvarp18
duntynsla55 eider17 eider18 eider20


Other pictures:

bliki duntynsla24 duntynsla7
duntynsla28 duntynsla43 aedarvarp9
aedarvarp8 duntynsla11 duntynsla60
aedarvarp4 eider 2018 1
eider 2018 4



Preparing a nest


Eiderduck adjusting her down. I recommend that you watch this video in the best possible quality.



Youngs about to hatch

The following video was published by the Eider Farming Association of Iceland: