text:
Q: How can I rotate only the border of this SVG and keep the middle fixed? I want to fix a SVG. I want to only rotate the ID #dotted-line but keep the g id="panda" fixed in the center. Right now the entire SVG rotates at the speed and smoothness that I want, but the middle moves also.
Please click "Run Code Snippet" below and hover your mouse over the icon to see the animation.

 svg {
   width: 40%;
   display: block;
   margin: 0 auto;
}

    svg:hover {
        width: 40%;
   display: block;
   margin: 0 auto;
            -webkit-animation-name: rotate;
            -webkit-animation-duration: 2s;
            -webkit-animation-iteration-count: 1;
            -webkit-animation-timing-function: linear;
            -moz-animation-name: rotate;
            -moz-animation-duration: 2s;
            -moz-animation-iteration-count: 1;
            -moz-animation-timing-function: linear;
            animation-name: rotate;
            animation-duration: 2s;
            animation-iteration-count: 1;
            animation-timing-function: linear;
        }

        @-webkit-keyframes rotate {
            from {-webkit-transform: rotate(0deg);}
            to {-webkit-transform: rotate(360deg);}
        }

        @-moz-keyframes rotate {
            from {-moz-transform: rotate(0deg);}
            to {-moz-transform: rotate(360deg);}
        }

        @keyframes rotate {
            from {transform: rotate(0deg);}
            to {transform: rotate(360deg);}
        }

}
<svg id="panda-circ" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108.6182 107.5305">
  <title>panda-rotate</title>
  <ellipse id="dotted-line" cx="54.3091" cy="53.7653" rx="53.8091" ry="53.2652" style="fill: none;stroke: #2717ff;stroke-dasharray: 4.018310070037842,4.018310070037842"/>
  <g id="panda">
    <path d="M33.83,73.7l5.46-11.0852L53.0219,50.5369l17.8688-1.9853,14.394,6.4525,1.489-1.1582,4.7981-1.1582,3.3091,2.1509L98.19,52.1916l5.2943-.3308,4.3016,2.978L107.62,59.306s7.7761,6.9488,7.7761,7.1142,2.6474,5.7908,2.6474,5.7908l.6617,4.3016L124,79.16l-4.9635,9.7613-8.2723,3.971-10.2581.8271,2.1509,2.9783L94.7155,98.683,81.4794,95.87,62.6181,98.5175l-4.1362.3308S41.4405,96.0358,41.4405,95.87s-8.1072-9.7616-8.1072-10.0924S33.83,74.1965,33.83,73.7Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M34.6879,73.6446l9.8782-4.0771,4.6025,1.1981,2.9181,8.5791a19.851,19.851,0,0,1-.311,3.101c-.1644.0045-4.1244,5.5747-4.1244,5.5747L58.6493,98.4777l5.1005-.8018,3.3061-7.3731,1.6624-8.3209-1.6376-3.431s-5.7551-.8356-5.9191-.9966a70.2706,70.2706,0,0,0-7.92,3.7625" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M58.5861,98.6832S56.9139,91.9725,56.9139,91.8,59.65,85.09,59.8026,85.09s5.1289-3.2827,5.1289-3.2827l3.233,2.9385L67.1,91.6283l-3.1928,6.8828Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M33.9952,73.7l10.2578-4.1362,5.6254,1.3236,6.9488,8.6034L52.36,82.6343l-4.1364,5.1292S59.64,98.3521,59.64,98.5175s-.9925.3308-.9925.3308L41.4405,95.705l-8.1072-9.5962Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M37.47,66.0893a25.1522,25.1522,0,0,1-2.1509-1.9206,15.6168,15.6168,0,0,0,.6617-2.6588l3.971-3.693,2.6472,2.068s-2.6472,2.659-2.8128,2.659S37.8006,65.6462,37.47,66.0893Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M44.0877,58.3811l.3185,11.3573,5.3988,2.638,3.217-21.84-8.297,19.5565" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8645,48.7171s-20.9863,22.17-20.9863,22.3358,21.84,5.7908,21.84,5.7908Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M84.7885,54.7323Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.45,55.17l1.6547-1.3236,4.6324-1.1582,3.3091,1.9855-2.4818,3.8053L87.27,60.4642l-2.6472-1.82Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M95.2117,54.5079s2.8126-2.3163,2.9783-2.3163,4.9635-.3308,4.9635-.3308l4.7978,3.1434-.3308,4.6327Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M86.4429,66.9757" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8907,48.7171l.6617,27.63,1.489,13.2361L81.6448,95.87l13.4015,2.978s7.7761-1.82,7.7761-2.1507a23.3375,23.3375,0,0,0-2.3163-2.9783s-6.7833-9.5959-6.9488-9.5959-9.2653-5.1292-9.2653-5.1292Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M83.9611,51.0924" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.2847,55.0042,80.652,72.5419" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M107.7859,59.4714,93.5573,84.2889" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M93.7227,84.2889l8.2726-8.1072,9.5959-3.3088,3.64-6.6182" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M102.1607,75.8509l9.4305-3.1437,3.1437,6.4528-2.6472,4.1362L105.47,85.778s-3.64-3.3091-3.64-3.8053S102.3261,75.6855,102.1607,75.8509Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M111.5912,72.8729l6.4528-.4965" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M124,79.3254l-2.978.9927,1.3236,1.6544Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
  </g>
</svg>

A: *

*animate #dotted-line and set the transform-origin

*change fill:none to fill-opacity:0 on the ellipse. Otherwise the animation will only start when you hover over the dotted line.

 svg {
   width: 40%;
   display: block;
   margin: 0 auto;
}

    #dotted-line:hover {
            transform-origin: 50% 50%;
            -webkit-animation-name: rotate;
            -webkit-animation-duration: 2s;
            -webkit-animation-iteration-count: 1;
            -webkit-animation-timing-function: linear;
            -moz-animation-name: rotate;
            -moz-animation-duration: 2s;
            -moz-animation-iteration-count: 1;
            -moz-animation-timing-function: linear;
            animation-name: rotate;
            animation-duration: 2s;
            animation-iteration-count: 1;
            animation-timing-function: linear;
        }

        @-webkit-keyframes rotate {
            from {-webkit-transform: rotate(0deg);}
            to {-webkit-transform: rotate(360deg);}
        }

        @-moz-keyframes rotate {
            from {-moz-transform: rotate(0deg);}
            to {-moz-transform: rotate(360deg);}
        }

        @keyframes rotate {
            from {transform: rotate(0deg);}
            to {transform: rotate(360deg);}
        }

}
<svg id="panda-circ" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108.6182 107.5305">
  <title>panda-rotate</title>
  <ellipse id="dotted-line" cx="54.3091" cy="53.7653" rx="53.8091" ry="53.2652" style="fill-opacity:0;stroke: #2717ff;stroke-dasharray: 4.018310070037842,4.018310070037842"/>
  <g id="panda">
    <path d="M33.83,73.7l5.46-11.0852L53.0219,50.5369l17.8688-1.9853,14.394,6.4525,1.489-1.1582,4.7981-1.1582,3.3091,2.1509L98.19,52.1916l5.2943-.3308,4.3016,2.978L107.62,59.306s7.7761,6.9488,7.7761,7.1142,2.6474,5.7908,2.6474,5.7908l.6617,4.3016L124,79.16l-4.9635,9.7613-8.2723,3.971-10.2581.8271,2.1509,2.9783L94.7155,98.683,81.4794,95.87,62.6181,98.5175l-4.1362.3308S41.4405,96.0358,41.4405,95.87s-8.1072-9.7616-8.1072-10.0924S33.83,74.1965,33.83,73.7Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M34.6879,73.6446l9.8782-4.0771,4.6025,1.1981,2.9181,8.5791a19.851,19.851,0,0,1-.311,3.101c-.1644.0045-4.1244,5.5747-4.1244,5.5747L58.6493,98.4777l5.1005-.8018,3.3061-7.3731,1.6624-8.3209-1.6376-3.431s-5.7551-.8356-5.9191-.9966a70.2706,70.2706,0,0,0-7.92,3.7625" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M58.5861,98.6832S56.9139,91.9725,56.9139,91.8,59.65,85.09,59.8026,85.09s5.1289-3.2827,5.1289-3.2827l3.233,2.9385L67.1,91.6283l-3.1928,6.8828Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M33.9952,73.7l10.2578-4.1362,5.6254,1.3236,6.9488,8.6034L52.36,82.6343l-4.1364,5.1292S59.64,98.3521,59.64,98.5175s-.9925.3308-.9925.3308L41.4405,95.705l-8.1072-9.5962Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M37.47,66.0893a25.1522,25.1522,0,0,1-2.1509-1.9206,15.6168,15.6168,0,0,0,.6617-2.6588l3.971-3.693,2.6472,2.068s-2.6472,2.659-2.8128,2.659S37.8006,65.6462,37.47,66.0893Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M44.0877,58.3811l.3185,11.3573,5.3988,2.638,3.217-21.84-8.297,19.5565" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8645,48.7171s-20.9863,22.17-20.9863,22.3358,21.84,5.7908,21.84,5.7908Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M84.7885,54.7323Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.45,55.17l1.6547-1.3236,4.6324-1.1582,3.3091,1.9855-2.4818,3.8053L87.27,60.4642l-2.6472-1.82Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M95.2117,54.5079s2.8126-2.3163,2.9783-2.3163,4.9635-.3308,4.9635-.3308l4.7978,3.1434-.3308,4.6327Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M86.4429,66.9757" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8907,48.7171l.6617,27.63,1.489,13.2361L81.6448,95.87l13.4015,2.978s7.7761-1.82,7.7761-2.1507a23.3375,23.3375,0,0,0-2.3163-2.9783s-6.7833-9.5959-6.9488-9.5959-9.2653-5.1292-9.2653-5.1292Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M83.9611,51.0924" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.2847,55.0042,80.652,72.5419" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M107.7859,59.4714,93.5573,84.2889" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M93.7227,84.2889l8.2726-8.1072,9.5959-3.3088,3.64-6.6182" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M102.1607,75.8509l9.4305-3.1437,3.1437,6.4528-2.6472,4.1362L105.47,85.778s-3.64-3.3091-3.64-3.8053S102.3261,75.6855,102.1607,75.8509Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M111.5912,72.8729l6.4528-.4965" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M124,79.3254l-2.978.9927,1.3236,1.6544Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
  </g>
</svg>

A: *

*I've moved the ellipse to be on top and changed it to pointer-events all.

*I've wrapped the ellipse in a <g> element so that the ellipse is at the local origin. That avoids Chrome's transform-origin bug.

*I've targetted the CSS animation at the ellipse rather than the entire SVG so that only it rotates.

 svg {
   width: 40%;
   display: block;
   margin: 0 auto;
}

ellipse {
  pointer-events: all;
}
    ellipse:hover {
        width: 40%;
   display: block;
   margin: 0 auto;
            -webkit-animation-name: rotate;
            -webkit-animation-duration: 2s;
            -webkit-animation-iteration-count: 1;
            -webkit-animation-timing-function: linear;
            -moz-animation-name: rotate;
            -moz-animation-duration: 2s;
            -moz-animation-iteration-count: 1;
            -moz-animation-timing-function: linear;
            animation-name: rotate;
            animation-duration: 2s;
            animation-iteration-count: 1;
            animation-timing-function: linear;
        }

        @-webkit-keyframes rotate {
            from {-webkit-transform: rotate(0deg);}
            to {-webkit-transform: rotate(360deg);}
        }

        @-moz-keyframes rotate {
            from {-moz-transform: rotate(0deg);}
            to {-moz-transform: rotate(360deg);}
        }

        @keyframes rotate {
            from {transform: rotate(0deg);}
            to {transform: rotate(360deg);}
        }

}
<svg id="panda-circ" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 108.6182 107.5305">
  <title>panda-rotate</title>
  <g id="panda">
    <path d="M33.83,73.7l5.46-11.0852L53.0219,50.5369l17.8688-1.9853,14.394,6.4525,1.489-1.1582,4.7981-1.1582,3.3091,2.1509L98.19,52.1916l5.2943-.3308,4.3016,2.978L107.62,59.306s7.7761,6.9488,7.7761,7.1142,2.6474,5.7908,2.6474,5.7908l.6617,4.3016L124,79.16l-4.9635,9.7613-8.2723,3.971-10.2581.8271,2.1509,2.9783L94.7155,98.683,81.4794,95.87,62.6181,98.5175l-4.1362.3308S41.4405,96.0358,41.4405,95.87s-8.1072-9.7616-8.1072-10.0924S33.83,74.1965,33.83,73.7Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M34.6879,73.6446l9.8782-4.0771,4.6025,1.1981,2.9181,8.5791a19.851,19.851,0,0,1-.311,3.101c-.1644.0045-4.1244,5.5747-4.1244,5.5747L58.6493,98.4777l5.1005-.8018,3.3061-7.3731,1.6624-8.3209-1.6376-3.431s-5.7551-.8356-5.9191-.9966a70.2706,70.2706,0,0,0-7.92,3.7625" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M58.5861,98.6832S56.9139,91.9725,56.9139,91.8,59.65,85.09,59.8026,85.09s5.1289-3.2827,5.1289-3.2827l3.233,2.9385L67.1,91.6283l-3.1928,6.8828Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M33.9952,73.7l10.2578-4.1362,5.6254,1.3236,6.9488,8.6034L52.36,82.6343l-4.1364,5.1292S59.64,98.3521,59.64,98.5175s-.9925.3308-.9925.3308L41.4405,95.705l-8.1072-9.5962Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M37.47,66.0893a25.1522,25.1522,0,0,1-2.1509-1.9206,15.6168,15.6168,0,0,0,.6617-2.6588l3.971-3.693,2.6472,2.068s-2.6472,2.659-2.8128,2.659S37.8006,65.6462,37.47,66.0893Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M44.0877,58.3811l.3185,11.3573,5.3988,2.638,3.217-21.84-8.297,19.5565" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8645,48.7171s-20.9863,22.17-20.9863,22.3358,21.84,5.7908,21.84,5.7908Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M84.7885,54.7323Z" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.45,55.17l1.6547-1.3236,4.6324-1.1582,3.3091,1.9855-2.4818,3.8053L87.27,60.4642l-2.6472-1.82Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M95.2117,54.5079s2.8126-2.3163,2.9783-2.3163,4.9635-.3308,4.9635-.3308l4.7978,3.1434-.3308,4.6327Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M86.4429,66.9757" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M70.8907,48.7171l.6617,27.63,1.489,13.2361L81.6448,95.87l13.4015,2.978s7.7761-1.82,7.7761-2.1507a23.3375,23.3375,0,0,0-2.3163-2.9783s-6.7833-9.5959-6.9488-9.5959-9.2653-5.1292-9.2653-5.1292Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M83.9611,51.0924" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M85.2847,55.0042,80.652,72.5419" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M107.7859,59.4714,93.5573,84.2889" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M93.7227,84.2889l8.2726-8.1072,9.5959-3.3088,3.64-6.6182" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M102.1607,75.8509l9.4305-3.1437,3.1437,6.4528-2.6472,4.1362L105.47,85.778s-3.64-3.3091-3.64-3.8053S102.3261,75.6855,102.1607,75.8509Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
    <path d="M111.5912,72.8729l6.4528-.4965" transform="translate(-20.6909 -21.2348)" style="fill: none;stroke: #000"/>
    <path d="M124,79.3254l-2.978.9927,1.3236,1.6544Z" transform="translate(-20.6909 -21.2348)" style="stroke: #000"/>
  </g>
  <g transform="translate(54.3091,53.7653)">
  <ellipse id="dotted-line" rx="53.8091" ry="53.2652" style="fill: none;stroke: #2717ff;stroke-dasharray: 4.018310070037842,4.018310070037842"/>
</g>
</svg>


text:
Deoxygenation of the Baltic Sea during the last century
Jacob Carstensen, Jesper H. Andersen, Bo G. Gustafsson, and Daniel J. Conley
PNAS April 15, 2014 111 (15) 5628-5633; first published March 31, 2014 https://doi.org/10.1073/pnas.1323156111
Jacob Carstensen
aDepartment of Bioscience, Aarhus University, DK-4000 Roskilde, Denmark;
For correspondence: jac@dmu.dk
Jesper H. Andersen
Bo G. Gustafsson
bBaltic Nest Institute, Stockholm University, SE-106 91 Stockholm, Sweden; and
Daniel J. Conley
cDepartment of Geology, Lund University, SE-223 62 Lund, Sweden
Edited by David M. Karl, University of Hawaii, Honolulu, HI, and approved March 4, 2014 (received for review December 12, 2013)
Oxygen-deficient waters are expanding globally in response to warming and coastal eutrophication. Coastal ecosystems provide valuable services to humans, but these services are severely reduced with decreasing oxygen conditions. In the Baltic Sea, oxygen-deficient waters have expanded from 5,000 to over 60,000 km2 with large decadal fluctuations over the last century, reducing the potential fish yield and favoring noxious algal blooms. This increase is due to the imbalance between oxygen supply from physical processes and oxygen demand from consumption of organic material, enhanced by nutrient inputs and temperature increases. Further nutrient reductions will be necessary to restore a healthier Baltic Sea and counteract effects from warming.
Deoxygenation is a global problem in coastal and open regions of the ocean, and has led to expanding areas of oxygen minimum zones and coastal hypoxia. The recent expansion of hypoxia in coastal ecosystems has been primarily attributed to global warming and enhanced nutrient input from land and atmosphere. The largest anthropogenically induced hypoxic area in the world is the Baltic Sea, where the relative importance of physical forcing versus eutrophication is still debated. We have analyzed water column oxygen and salinity profiles to reconstruct oxygen and stratification conditions over the last 115 y and compare the influence of both climate and anthropogenic forcing on hypoxia. We report a 10-fold increase of hypoxia in the Baltic Sea and show that this is primarily linked to increased inputs of nutrients from land, although increased respiration from higher temperatures during the last two decades has contributed to worsening oxygen conditions. Although shifts in climate and physical circulation are important factors modulating the extent of hypoxia, further nutrient reductions in the Baltic Sea will be necessary to reduce the ecosystems impacts of deoxygenation.
Dead zones are hypoxic (low-oxygen) areas unable to support most marine life, and over the past 50 y they have spread rapidly in the open ocean (1) as well as in coastal ecosystems (2). Global warming is thought to be a major driver for these changes (3), although biogeochemical factors have also been recognized, especially in coastal marine ecosystems (4, 5). In the Baltic Sea, the present spread of hypoxia is the combined result of climate changes influencing deepwater oxygenation (6) and increased eutrophication (7, 8), resulting in a hypoxic area ranging between 12,000 and 70,000 km2 with an average of 49,000 km2 over the time period 1961–2000 (7). Here, we separate the effects of the two factors on oxygen conditions.
Physical factors are an important consideration in whether an ecosystem will experience hypoxia. The Baltic Sea is naturally prone to hypoxia due to a restricted water exchange with the ocean and a long residence time above 30 y (9, 10). Saltier, denser water from the North Atlantic flows over a series of shallow sills in the Danish Straits to ventilate waters below the permanent halocline and are governed by meteorological-induced variations in sea levels (11), displaying variations at decadal scales (12, 13). The dense saltwater inflows bring new supplies of oxygen to bottom waters, but at the same time enhance stratification, creating larger bottom areas that experience hypoxia (14). In particular, the ventilation of the deeper waters is attributed to events of larger inflows of high-saline water (>17), termed Major Baltic Inflows (MBIs), that have been less frequent in the last three decades (6).
Climate warming decreases oxygen solubility due to higher water temperature, increases stratification, and enhances respiration processes (15). Climate warming is likely to be accompanied by increased precipitation and inflows of freshwater and nutrients to coastal waters in many areas of the globe. Increasing nutrient inputs from land stimulates primary production and export of organic material to the deep waters, thereby disrupting the subtle natural balance between oxygen supply from physical processes and oxygen demand from consumption of organic material. However, the importance of decreasing oxygenation versus increasing nutrient inputs for explaining the recent spread of hypoxia is not known (6, 7).
Water column measurements of dissolved oxygen concentrations began around 1900 with more regularly spaced measurements commencing in the 1960s (Fig. S1), allowing a more consistent assessment of the spatial extent of hypoxia (7, 14). The sparse temporal and spatial resolution of oxygen data before 1960 allowed only assessing hypoxia at specific locations (16) or specific years (17). To our knowledge, our study is the first to report basin-wide trends of stratification and oxygen conditions from 1898 to present, and here we will focus on the two basins that have perennial hypoxia—the Bornholm Basin and the Gotland Basin (Fig. S2). These two basins are connected via a channel with a sill depth of 60 m.
Over the past century, bottom-water temperatures increased about 2 °C in both basins (Fig. 1 A and B), whereas bottom-water salinity exhibited multidecadal oscillations without trends, displaying larger and more dynamic variations in the Bornholm Basin that has a shorter residence time than the Gotland Basin (Fig. 1 C and D). Periods of intense saltwater inflows, such as around 1950 (12), increased salinity of the bottom water by ∼1. Saltwater inflows were weak from 1982 to 1993, termed the stagnation period (12), which resulted in a freshening of both bottom (Fig. 1 C and D) and surface waters (Fig. S3), although the surface water response in the Gotland Basin was delayed. The deepwater temperature also decreased during the stagnation period (Fig. 1B), due to less inflow of warmer water from the Danish Straits. In the Gotland Basin, the halocline gradually deepened from 70 to 80 m (Fig. 1 E and F), an unprecedented low position of the halocline within the 20th century. The lower depth of the discontinuity layer was similarly displaced from 85 to 100 m (Fig. S3), resulting in much deeper mixing across the halocline. In the Bornholm Basin, the position of the halocline was relatively constant, because it is largely controlled by the sill depth of the connecting channel. The freshening of the bottom water, combined with a delayed response of surface salinity, reduced stratification strength during the stagnation period enabling mixing across the halocline, most pronounced for the Gotland Basin (Fig. 1 G and H). Overall, the properties of the halocline remained relatively constant since 1900, with the exception of the stagnation period.
Long-term trends in temperature, salinity, and oxygen characteristics. The left panel show trends for the Bornholm Basin, and the right panel show trends for the Gotland Basin. Trends are temperature in the bottom layer (A and B), bottom-water salinity (C and D), depth location of the halocline (E and F), Brunt–Väisälä frequency, which is a proxy for stratification strength, calculated from the salinity profile parameters (G and H), apparent oxygen utilization (AOU) at the lower boundary of the discontinuity layer (I and J), change in AOU with depth below the discontinuity layer (K and L), areal extent of hypoxia (<2 mg⋅L−1) with the bottom area below the discontinuity layer (M and N), and total AOU below the discontinuity layer (O and P). The circles represent annual means and the solid black line is the 5-y moving average. A few outliers are not shown in the plots above but can be seen in Fig. S3 together with SEs of the annual means. Seasonal and spatial distributions of profile parameters are shown in Figs. S4 and S5.
Climate change has caused the bottom waters to become increasingly oxygen depleted through decreasing solubility of oxygen due to increasing temperature and through increased respiration of organic matter. Oxygen saturation has decreased about 0.5 mg⋅L−1 over the past 115 y as a result of the temperature increase alone. In addition, apparent oxygen utilization (AOU), a measure of the deoxygenation (see definition in Data and Methods), at the lower boundary of the discontinuity layer increased gradually by 2 and 4 mg⋅L−1 in the Bornholm Basin and Gotland Basin, respectively (Fig. 1 I and J), although with a marked decrease in the Gotland Basin during the stagnation period. AOU further decreased below the discontinuity layer at a relatively constant slope over time of 0.15 mg⋅L−1⋅m−1 in the Bornholm Basin (Fig. 1K) and with a substantially lower slope around 0.025 mg⋅L−1⋅m−1 in the Gotland Basin, albeit displaying a doubling during the stagnation period (Fig. 1L). The strongly oxygen-depleted waters were confined to the deepest parts of the Gotland Basin, where high concentrations of hydrogen sulfide were observed, and did not spread due to lack of MBI events. The time series also suggest that a minor stagnation period could have occurred around 1930 with decreasing salinity (Fig. 1D), lower AOU below the discontinuity layer (Fig. 1J), and increasing slope of AOU with depth (Fig. 1L), consistent with a reported 3-y period without any MBI (12).
The area of hypoxia (here, oxygen concentrations <2 mg⋅L−1) expanded in both basins (Fig. 1 M and N), increasing from around 5,000 km2 to over 60,000 km2 over the past 115 y. In the beginning of the 20th century, hypoxia was confined to the deepest areas (Fig. 2A), expanding gradually over the next 70 y (Fig. 2 B–D), before the extent decreased during the stagnation period. At the end of the stagnation period, hypoxia had approximately the same extent as in 1931 (Fig. 2 B and E), but hypoxia has spread again over the last two decades, reaching an unprecedented large extent in recent years (Fig. 2F). In the Gotland Basin, the extent of hypoxia is increasingly controlled by the bottom area below the discontinuity layer, and now almost the entire area below the discontinuity layer is hypoxic (Fig. 1N). In the Bornholm Basin, the hypoxic bottom water is occasionally flushed into the Gotland Basin during strong MBI events, most pronounced in 1993 and 2003 (Fig. 1M). Such inflows typically amount to 150–300 km3 with the potential to improve the total AOU (TAOU) by ∼1–2 1012 g O2, provided that the Bornholm Basin deep waters are completely flushed. The two above-mentioned MBIs actually improved the TAOU by ∼0.5 1012 g O2 (Fig. 1O), but the export of this hypoxic water was not apparent in the AOU balance for the Gotland Basin (Fig. 1P).
Spatial distributions of bottom hypoxia and anoxia over time. Estimated bottom oxygen concentrations <2 mg⋅L−1 are shown in red, and concentrations <0 mg⋅L−1 are shown in black for 1906 (A), 1931 (B), 1955 (C), 1974 (D), 1993 (E), and 2012 (F). The spatial distributions represent means across all months (January to December).
Our simple mass balance model demonstrates that changes in the inflow to and volume of the Gotland Basin deep waters significantly modulate oxygen conditions. Inflow and outflow generally balance, resulting in an average bottom-water volume of around 2,000 km3 (about 10% of the total volume of the Baltic Sea). However, during the stagnation period the volume of the deep waters decreased by more than 500 km3. This reduction started already around 1970 and intensified during the stagnation period (Fig. 3A). The deep-water volume increased again with the MBI in 1993, reaching the long-term average in 2000. Vertical mixing across the halocline generally had a similar order of magnitude as lateral transports and was larger than previous thought (10, 18). During the stagnation period, vertical mixing was about 50% higher.
Estimated contributions of physical processes and nutrient input to hypoxia. Water transports for the Gotland Basin deep water (A), annual fluxes of total apparent oxygen utilization (TAOU) (B), and TAOU in the deep water, estimated (5-y moving average; Fig. 1P) and adjusted by subtracting variations in lateral transports and vertical mixing (C). Nitrogen input from land and atmosphere was used to describe the oxygen consumption; similar plots using phosphorus inputs are shown in Fig. S6.
Oscillations in inflow and outflow were also apparent in the lateral imports and exports of TAOU (Fig. 3B). The export of TAOU generally exceeded import because bottom waters in the Gotland Basin were more deoxygenated than in the Bornholm Basin. However, the expansion of the deep-water volume following the stagnation period resulted in a net accumulation of TAOU from lateral transport processes. The importance of vertical mixing has increased over time due to larger differences in oxygen conditions across the halocline. The weaker stratification during the stagnation period increased the vertical mixing of oxygen by up to 30%. Oxygen consumption increased from 2.2 to 3.3 1012 g O2⋅y−1 in the early 1980s before decreasing again. According to the budget model, only one-third of the consumption could be directly coupled to enhanced nutrient input, and only 8–25% of the input resulted in deep-water oxygen consumption (Table S1). Despite larger reductions in nutrient inputs from land and atmosphere since the 1980s (8), respiration still remains relatively high due to the increase in bottom-water temperature (Fig. 1B). In fact, warming of bottom waters following the stagnation period increased respiration by ∼20% (using estimates from Table S1). The lack of inflows significantly reduced TAOU during the stagnation period by increased vertical mixing and reduced bottom volume, but if we remove the effect of lateral transports and vertical mixing there has been a gradual increase in TAOU from around 20 to >30 1012 g O2 during the last century and signs of recovery are not observed (Fig. 3C).
Climate warming plays an important role in increasing ocean deoxygenation (1), but for the Baltic Sea we show that anthropogenic nutrient discharges are the primary driving factor creating widespread hypoxic conditions. This has also been reported for other coastal ecosystems such as the Gulf of Mexico (4) and Chesapeake Bay (19), where overall increases in hypoxia from enhanced nutrient delivery are modulated by variations in freshwater inputs and stratification. The stagnation period (1982–1993) in the Baltic Sea was an exceptional event in the last 115 y, highlighting that physical forcing can remedy deoxygenation effects of eutrophication through enhanced vertical mixing. Increasing precipitation and runoff to the Baltic Sea in the 1980s is thought to be the main cause behind the lack of MBIs during the stagnation period (12). Regional climate models predict increasing river flow into the Baltic Sea (20), which, in analogy to the stagnation period, may result in a less strongly and more deeply stratified water column, alleviating hypoxia from the shoals of the deeper basins. However, increasing respiration and decreasing oxygen solubility with warming of the Baltic Sea will promote deoxygenation in the deep basins.
Substantial reductions in nutrient inputs over the last couple of decades (8) were expected to improve oxygen conditions. The apparent lack of recovery could be explained by increasing temperature and enhanced primary production by nitrogen-fixing cyanobacteria. Enhanced releases of iron-bound phosphate from sediments with expanding hypoxia (14), as observed over the last two decades, may sustain noxious cyanobacterial summer blooms, creating a positive-feedback mechanism that maintains hypoxia (21). Due to the long residence time of the Baltic Sea, elevated phosphate concentrations may still persist for decades. It is also possible that oxygen improvements anticipated from nutrient reductions have been counteracted by increases in organic matter inputs from land (22, 23). Thus, the lack of recovery could be due to delayed responses and potential hysteresis in combination with shifting baselines associated with other components of global change (24).
Hypoxia directly impacts marine ecosystem function and services through changes in food web structure and biodiversity (25, 26). Although salinity sets the limits for benthic macrofaunal diversity in the Baltic Sea and the number of functional groups is low, bottom-water hypoxia is currently the main factor structuring the benthic communities in the Gotland Basin, resulting in large areas completely devoid of macrofauna (7, 27, 28). The 10-fold increase in hypoxic area amounts to an estimated "missing" macrofaunal biomass of ∼1.7 million tons (27), with important repercussions for the transfer of energy through the food web. However, eutrophication may also stimulate secondary production in the shallower areas (29). Moreover, cod eggs are neutrally buoyant in waters with salinities between 10 and 15 and need sufficient oxygen for survival, but the volume of bottom water in the Gotland Basin possessing survivable characteristics have diminished over the last 50 y (30), threatening the reproduction of this valuable species. Thus, the large expansion of hypoxia has essentially had significant effects on the Baltic Sea ecosystem at all trophic levels.
Excessive nutrient inputs from land over the last century have altered the subtle balance between oxygen supply and consumption, from a state with hypoxia confined to the deep bottom waters to widespread hypoxia in most bottom waters. Multiple stressors and strong resilience in the Baltic Sea maintains an undesirable state with low oxygen conditions creating a positive feedback for continued hypoxia (31) supporting cyanobacteria blooms (32). Temperature increases, most prominent during the last two decades, have shifted this balance even further. Physical forcing may act to shift this balance back again, as observed during the stagnation period, but we cannot hope for future climate to counter the effects of anthropogenic pollution. Further reduction of nutrient inputs is the only realistic management option to reestablish a healthier Baltic Sea (33, 34).
Study Site.
The Baltic Sea is connected to the North Sea through the entrance area consisting of the Danish Straits and the Kattegat (Fig. S2). The water exchange of the Baltic Sea is restricted by the Darss sill (15 m) and the Drogden sill (8 m) (35). The Baltic Sea consists of several connected basins. At favorable wind conditions, saline water spills over the sills and forms a bottom current in the Arkona Basin and cascades into the deeper Bornholm Basin (maximum depth, ∼90 m). From the Bornholm Basin, the bottom water enters into the larger and deeper Gotland Basin through the Słupsk Furrow, having a sill depth of 60 m. Finally, the Gotland Basin connects to the Gulf of Riga, Gulf of Finland, and Gulf of Bothnia. The Gulf of Finland can be regarded as a hydrographical extension of the Gotland Basin, and therefore these two basins are considered as one entity denoted here as the Gotland Basin.
Perennial hypoxia occurs in the Bornholm Basin and the Gotland Basin (including the Gulf of Finland) only, and the bottom layers of these two basins will be investigated in the present study. The water column in the two basins is stratified by a permanent halocline at depths around 55 and 70 m in the Bornholm Basin and Gotland Basin, respectively, and a seasonal thermocline above the halocline. Oxygen concentrations below the thermocline decline seasonally, albeit not reaching levels indicative of hypoxia, here defined as <2 mg⋅L−1, but reach saturation levels again during winter when the thermocline is eroded by mixing.
Discrete and continuous depth profiles of salinity, temperature, and oxygen were obtained from national monitoring programs and research cruises (Table S2). Most profiles from before 1960 were from research cruises. The profiles were spatially scattered over the two study basins with 21,712 distinct sampling locations (Fig. S7A). Data from the coastal zone were excluded, because hypoxia in the coastal zone is not directly linked to hypoxia in the open waters (36). These many sampling locations, of which a large proportion have been sampled a few times only, were projected onto the existing monitoring network by identifying spatial clusters of sampling locations and assigning these to the nearest monitoring station. Thus, all profiles were associated with 1 out of 242 monitoring stations (Fig. S7B).
The first measurements of salinity, temperature, and oxygen in the Baltic Sea were carried out in the late 19th century, but the number of profiles before 1960 was low (Fig. S1) and these were heterogeneously sampled across the two basins considered here. The relatively lower number of profiles in the two most recent years is due to pending reporting of hydrographical measurements to the databases. A total of 36,379 salinity profiles and 16,690 oxygen profiles was sampled in the deeper areas of the two basins with permanently stratified conditions, and these profiles were used to characterize the halocline and oxygen conditions below the halocline. The reasonable data coverage after 1960 has allowed for assessing the extent of hypoxia by spatially interpolating the values (7), but such purely empirical approaches are not applicable to the period before 1960 due to the sparseness of data. Therefore, we chose an approach where we model the salinity and oxygen profiles with a few parameters, and use the spatial and seasonal structure of these parameters to assess the properties of the halocline and the oxygen conditions below the halocline from 1898 to 2012.
Parameterization of the Salinity and Oxygen Profiles.
Salinity profiles typically had a sigmoid appearance with depth and were parameterized using the cumulative probability density function of the normal distribution . Four parameters were used to characterize the salinity profile: (i) the subsurface salinity, (ii) the salinity difference between the subsurface and the bottom layer, (iii) halocline depth, and (iv) halocline thickness (Fig. S8A). The subsurface salinity (Ssubsurf), estimated as the average salinity between 20 and 30 m, was used for the parameterization to avoid potential bias introduced by a thin lower-salinity layer in the surface, occasionally observed in the data. The salinity difference between the subsurface and bottom layers (Sdif) was estimated as a scaling factor for , whereas halocline depth was estimated by µ and halocline thickness was estimated as . Thus, from the properties of it is noted that 68% of the change from subsurface to bottom salinity occurs in the depth interval defined by the halocline thickness , also referred to as the discontinuity layer (37). The salinity parameters were estimated by nonlinear regression (PROC MODEL in SAS) using profiles reaching depths of at least 60 and 80 m in the Bornholm Basin and Gotland Basin, respectively, to ensure that most of the salinity change was recorded in the profile and that estimation of the profile sigmoid model was possible. The Brunt–Väisälä frequency, which can be interpreted as a measure of the stratification strength, can easily be approximated from the parameterization of the profile:
where density in brackish water is approximated by salinity [ (38)] at the halocline depth in the first factor and the derivative of density with depth in the second factor is approximated by the change in salinity over the discontinuity layer.
Because the sills are shallow and inflows to the Baltic Sea occur at windy conditions, the water spilling over the Drogden and Darss sills is generally saturated in oxygen before submerging to supply the bottom waters in the study area. However, oxygen concentration at saturation varies strongly with salinity and temperature, and therefore we consider AOU, defined as the difference between the measured dissolved oxygen concentration and its equilibrium saturation concentration in water with same salinity and temperature. Hence, AOU is a measure of the oxygen consumption of the bottom water parcel since it spilled over the sills. In the last four to five decades, hydrogen sulfide (H2S) has been measured in the deepest parts of the Gotland Basin, albeit not consistently. When measured, H2S has been converted into a negative oxygen concentration (H2S = −2O2), yielding an AOU exceeding oxygen saturation concentrations. Oxidation potentials for other substances such as NH4+, Fe2+, and Mn2+, were not considered. Because H2S has not been measured consistently in the dataset and not at all before 1960, oxygen concentrations equal to zero could represent conditions with H2S and, thus, a negative oxygen concentration and an AOU above the oxygen saturation concentration. Such observations, which actually represent values above/below their nominal values, are termed censored data (39).
In the discrete profiles, the number of oxygen measurements was generally lower than for salinity, and consequently, the parameterization of the oxygen profile had to be even simpler. Two parameters were used to characterize oxygen conditions below the halocline as a linear function of depth (Fig. S8B): (i) the AOU at the lower boundary of the discontinuity layer (intercept, AOUboundary), and (ii) the change in AOU with depth below the discontinuity layer (slope, AOUslope). These two parameters were estimated in two steps. First, AOUboundary was interpolated from the nearest measured oxygen observation above and below the lower boundary of the discontinuity layer using the estimated salinity profile for interpolation rather than depth, because salinity is a better indicator of mixing than depth. The estimation of AOUboundary was not affected by censored oxygen observations. Second, using oxygen observations below the discontinuity layer, AOUslope was estimated by means of censored data linear regression (PROC LIFEREG in SAS) with the intercept fixed to the estimate of AOUboundary.
Spatiotemporal Modeling of Profile Parameters.
The profiles were heterogeneously sampled in time and space, and the aim was to separate three sources of variations: (i) spatial variation, (ii) seasonal variation, and (iii) long-term trend. First, a general linear model (GLM) (PROC GLM in SAS) with station, month, and year of sampling as categorical factors was applied to each of the six parameters estimated from the salinity and oxygen profiles. Based on the station-specific means from the GLM, 2D smooth splines describing the spatial variation for each profile parameter were estimated by means of a generalized additive model (GAM) (PROC GAM in SAS). The spatial splines were used to spatially detrend all profile parameters using their actual sampling location. Second, the temporal sources of variation were estimated applying a robust GLM with two factors (month and year) on the spatially detrended observations for the two basins separately. The robust estimation algorithm, which iteratively discarded profile parameter estimates beyond the 99.9% confidence prediction interval of the GLM, was used as some measured profiles (∼5% of the profiles) delivered unrealistic parameter estimates, mostly due to lack of sufficient observations below the halocline. The second GLM provided mean estimates for the seasonal variation and long-term trend for each of the two basins separately.
The spatial models and the long-term trends for the profile parameter estimates were used for obtaining integrated values of volume, salt content, and AOU for the bottom layers of the two basins in their entirety as well as the extent of hypoxia. Yearly estimates of the profile parameters were scaled using the spatial spline model over a bathymetry grid of 1 km × 1 km (http://balance-eu.org), and salinity and oxygen profiles modeled by these parameters were integrated vertically and horizontally for the two basins separately. Thus, the time series of integrated values represent annual means for all 12 mo of the year.
Time Series Modeling of Oxygen Deficiency.
These time series of integrated values (1898–2012) were used in a dynamic box model approach for the deep waters (water below the halocline) in the Gotland Basin (Fig. S9). The deep waters of the Bornholm Basin were not modeled using this approach, because most inflows interleave just below the halocline and the hypoxic water in the deepest part of the basin is replaced only by episodic inflows of denser water (MBIs). Hence, the simple box model approach using annual data could not capture the dynamics of the Bornholm Basin.
In the Gotland Basin, the water balance is as follows:
where is the change in volume from year t to year t − 1, and are the flows into and out of the deep waters. The inflow to the deep waters of the Gotland Basin originates as saline waters from the Danish Straits spilling over the two sills at Darss and Drogden that partially mixes with residing water in the Arkona Basin before entering the Bornholm Basin. During passage through the Arkona Basin, the volume of the inflow increases and salinity decreases (38). This inflowing water is either flushed to the Gotland Basin through the Słupsk Furrow or entrained into the surface layer. The dense water flow through the Słupsk Furrow constitutes the inflow to the Gotland Basin. The deep water of the Gotland Basin spills into the Gulf of Bothnia or leaves mainly through upward entrainment.
The salt balance for the Gotland Basin is as follows:
where is the change in total amount of salt of the deep water in the Gotland Basin across years, is the salinity of the inflowing deep water from the previous year that is flushed into the Słupsk Furrow, and is the salinity in the Gotland Basin deep waters in the previous year. The last term describes the vertical mixing of salt across the halocline. Following Stigebrandt (38), it is assumed that the turbulent diffusion coefficient is inversely related to the Brunt–Väisälä frequency . The scaling parameter is denoted and the salinity difference across the halocline is .
The balance for AOU follows the same principle but with the addition of an oxygen consumption term.
where is the change in TAOU of the deep water in the Gotland Basin across years, and are the AOUs in the deep waters in the two basins of the previous year, and and are two parameters describing how oxygen consumption is linearly related to the input of either total nitrogen or total phosphorus , and scaled by temperature with a Q10-parameter . Time series of nitrogen and phosphorus inputs (1850–2006) were taken from ref. 8. It is assumed that the surface water is saturated in oxygen (AUO = 0). The increasing AOU in the Bornholm Basin over time implies that the export of AOU to the Gotland Basin has increased. The unknown parameters in the water, salt, and oxygen balances above ( and ) were estimated by maximum-likelihood estimation from time series of total salinity and TAOU. Moving averages of 5 y were used for estimation to overcome small gaps in the time series, and because time differences [ and ] of the annual values introduced large noise in the equations and consequently, large uncertainty in the parameter estimates. Thus, the model was essentially estimated on three time series sequences: 1903–1910, 1922–1938, and 1954–2006, where all input time series were nonmissing.
Changes in the lateral flows and mixing across the halocline significantly affected TAOU, and to assess the TAOU trend without these physical modulations, the dynamic flow and mixing terms [ , and ] were subtracted and replaced by average values for the study period. The difference between the TAOU and the adjusted TAOU was set to zero at the start of each of the three time series sequences.
We thank the many people from research institutions and monitoring agencies who over the years have sampled and provided water quality data to the Baltic Environmental Database. Karsten Dromph and Cordula Göke helped with database and geographic information system programming. Bo Riemann is acknowledged for commenting on the paper. This study is a contribution from the HYPER project under the BONUS+ program and the TARGREV project under the Helsinki Commission. Funding for these projects was obtained from the European Community's Seventh Framework Programme research program, the Danish and Swedish research councils, the Nordic Council of Ministers, and Aarhus University Research Foundation.
↵1To whom correspondence should be addressed. E-mail: jac{at}dmu.dk.
Author contributions: J.C. designed research; J.C., J.H.A., B.G.G., and D.J.C. performed research; J.C. analyzed data; and J.C., J.H.A., B.G.G., and D.J.C. wrote the paper.
Data deposition: Data have been deposited with the Baltic Nest Institute's Baltic Environmental Database (BED), http://nest.su.se.
Stramma L,
Johnson GC,
Sprintall J,
Mohrholz V
(2008) Expanding oxygen-minimum zones in the tropical oceans. Science 320(5876):655–658.
Díaz RJ,
Rosenberg R
(2008) Spreading dead zones and consequences for marine ecosystems. Science 321(5891):926–929.
Levitus S,
(2009) Global ocean heat content 1955–2008 in light of recently revealed instrumentation problems. Geophys Res Lett 36(7):L07608.
Rabalais NN,
Turner RE,
Wiseman WJ Jr.
(2002) Gulf of Mexico hypoxia, A.K.A. "The Dead Zone" Annu Rev Ecol Syst 33:235–263.
Kemp WM,
Testa J,
Conley DJ,
Gilbert D,
Hagy J
(2009) Temporal responses of coastal hypoxia to nutrient loading and physical controls. Biogeosciences 6(12):2985–3008.
Kabel K,
(2012) Impact of climate change on the Baltic Sea ecosystem over the past 1,000 years. Nat Clim Change 2(12):871–874.
(2009) Hypoxia-related processes in the Baltic Sea. Environ Sci Technol 43(10):3412–3420.
Gustafsson BG,
(2012) Reconstructing the development of Baltic sea eutrophication 1850–2006. Ambio 41(6):534–548.
Stigebrandt A,
Gustafsson BG
(2003) Response of the Baltic Sea to climate change—theory and observations. J Sea Res 49(4):243–256.
Döös K,
Meier HEM,
Döscher R
(2004) The Baltic haline conveyor belt or the overturning circulation and mixing in the Baltic. Ambio 33(4-5):261–266.
Andersson HC
(2001) Modeling the exchange of the Baltic Sea from the meridional atmospheric pressure difference across the North Sea. J Geophys Res 106(C9):19731–19744.
Schinke H,
Matthäus W
(1998) On the causes of major Baltic inflows—an analysis of long time series. Cont Shelf Res 18(1):67–97.
Meier HEM
(2007) Modeling the pathways and ages of inflowing salt- and freshwater in the Baltic Sea. Estuar Coast Shelf Sci 74(4):610–627.
Humborg C,
Rahm L,
Savchuk OP,
Wulff F
(2002) Hypoxia in the Baltic Sea and basin-scale changes in phosphorus biogeochemistry. Environ Sci Technol 36(24):5315–5320.
Diaz RJ,
Justic D
(2009) Global change and eutrophication of coastal waters. ICES J Mar Sci 66(7):1528–1537.
Fonselius S,
Valderama J
(2003) One hundred years of hydrographic measurements in the Baltic Sea. J Sea Res 49(4):229–241.
Savchuk O,
Wulff F,
Hille S,
Pollehne F
(2008) The Baltic Sea a century ago—a reconstruction from model simulations, verified by observations. J Mar Syst 74(1-2):485–494.
Feistel R,
Nausch G,
Wasmund N
Nehring D,
Nagel K
(2008) in State and Evolution of the Baltic Sea, 1952–2005, eds Feistel R, Nausch G, Wasmund N (Wiley, Hoboken, NJ), pp 337–366.
Hagy JD,
Boynton WR,
Keefe CW,
Wood KV
(2004) Hypoxia in Chesapeake Bay, 1950–2001: Long-term change in relation to nutrient loading and river flow. Estuaries 27(4):634–658.
Graham LP
(2004) Climate change effects on river flow to the Baltic Sea. Ambio 33(4-5):235–241.
Vahtera E,
(2007) Internal ecosystem feedbacks enhance nitrogen-fixing cyanobacteria blooms and complicate management in the Baltic Sea. Ambio 36(2-3):186–194.
Kritzberg ES,
Ekström SM
(2012) Increasing iron concentrations in surface waters—a factor behind brownification? Biogeosciences 9(4):1465–1478.
Wikner J,
Andersson A
(2012) Increased freshwater discharge shifts the trophic balance in the coastal zone of the northern Baltic Sea. Glob Change Biol 18(8):2509–2519.
Duarte CM,
Carstensen J,
Sánchez-Camacho M
(2009) Return to Neverland: Shifting baselines affect eutrophication restoration targets. Estuaries Coasts 32(1):29–36.
Levin LA,
(2009) Effects of natural and human-induced hypoxia on coastal benthos. Biogeosciences 6(10):2063–2098.
(2012) Expansion of oxygen minimum zones may reduce available habitat for tropical pelagic fishes. Nat Clim Change 2(1):33–37.
Karlson K,
Rosenberg R,
Bonsdorff E
(2002) Temporal and spatial large-scale effects of eutrophication and oxygen deficiency on benthic fauna in Scandinavian and Baltic waters—a review. Oceanogr Mar Biol 40:427–489.
Villnäs A,
Norkko A
(2011) Benthic diversity gradients and shifting baselines: Implications for assessing environmental status. Ecol Appl 21(6):2172–2186.
Elmgren R
(1989) Man's impact on the ecosystem of the Baltic Sea: Energy flows today and at the turn of the century. Ambio 18(6):326–332.
MacKenzie BR,
Hinrichsen H-H,
Plikshs M,
Wieland K,
Zezera AS
(2000) Quantifying environmental heterogeneity: Habitat size necessary for successful development of cod Gadus morhua eggs in the Baltic Sea. Mar Ecol Prog Ser 193:143–156.
Vaquer-Sunyer R,
Duarte CM
(2009) Ecosystem thresholds with hypoxia. Hydrobiologia 629:21–29.
Funkey CP,
(2014) Hypoxia sustains cyanobacteria blooms in the Baltic Sea. Environ Sci Technol 48(5):2598–2602.
Conley DJ
(2012) Ecology: Save the Baltic Sea. Nature 486(7404):463–464.
Helsinki Commission for Protection of the Baltic Sea
(2007) HELCOM Baltic Sea Action Plan. Available at www.helcom.fi/Documents/Baltic%20sea%20action%20plan/BSAP_Final.pdf. Accessed March 21, 2014.
Gustafsson B
(2000) Time-dependent modeling of the Baltic entrance area. 1. Quantification of circulation and residence times in the Kattegat and the Straits of the Baltic Sill. Estuaries 23(2):231–252.
(2011) Hypoxia is increasing in the coastal zone of the Baltic Sea. Environ Sci Technol 45(16):6777–6783.
Lass HU,
(2008) in State and Evolution of the Baltic Sea, 1952–2005, eds Feistel R, Nausch G, Wasmund N (Wiley, Hoboken, NJ), pp 5–43.
Stigebrandt A
(1987) Computations of the flow of dense water into the Baltic Sea from hydrographical measurements in the Arkona Basin. Tellus 39A(2):170–177.
Carstensen J
(2010) Censored data regression: Statistical methods for analyzing Secchi transparency in shallow systems. Limnol Oceanogr Methods 8:376–385.
You are going to email the following Deoxygenation of the Baltic Sea during the last century
Deoxygenation of the Baltic Sea
Jacob Carstensen, Jesper H. Andersen, Bo G. Gustafsson, Daniel J. Conley
Proceedings of the National Academy of Sciences Apr 2014, 111 (15) 5628-5633; DOI: 10.1073/pnas.1323156111

redpajama_set_name: RedPajamaCommonCrawl


text:
Overland 176 launch, with David Marr
Wednesday night was the launch of the latest edition of Overland at Trades Hall and the guest speaker was Media Watch host David Marr launching a salvo in the media wars. Marr is hoping to strike a blow for the left (sorry, that should be the Left) in its struggle against the conservative right (I mean Right)-wing narrative that he believes is dominating coverage of the big issues. In his mind, Tampa, refugees and all that surrounds it is fundamentally about race, or more specifically racism, and the media have been too gutless to call it that. The conservatives are controlling the agenda, cries Marr, and the frank and free debate that existed before the days of Howard have been stopped.
A bit too much paranoid whinging, to my mind. There are plenty of progressive media outlets constantly carping about the evils of Howard, Bush and all things conservative. The ABC and Fairfax seem to operate on the premise that we are all evil, nasty people who need to be enlightened by their hol…
Asia Trip: Visas and more
For those of you who are the least bit interested in the progress of my epic Asian adventure planned for the end of the year, a quick update. I'm at what is known as the Boring Bureaucracy Stage of planning. Have a pile of Visa applications to sort through for six of the nine countries I'll be visiting, each of them with their own quirks and bizarre formatting.
I'm also starting to realise the enormity of the land travel I am planning in the early part of the trip. Based on Bangkok, I hope to visit Rangoon, Phnom Penh, Vientienne and Hanoi all within 5 weeks. Already I've found out that Rangoon cannot be accessed via land (whatever happened to that Thai-Burma railway that was built?!!) and the others are going to be rather torurous. True, that is part of the fun of travelling, but it looks like it will be crammed with cattle - possibly literally - on a truck, a bus or a train. No sarcasm intended, I can't wait.
Melbourne Fringe: 400 Columns, Trades Hall
The Age's resident dag Danny Katz is one of the funniest men in print. His weekly columns mix nerdy Jewish humour, a deceptively good understanding of the power of language, savage self-deprecation and a damn good understanding on what makes people laugh. To translate these columns - 400 Columns, that is - into a stage play was always going to be a difficult task, primarily because so much of the humour comes from who the columnist is and the egocentric nature of the stuff that he writes. If it was to be anyone else writing it, they'd be dismissed as a nutter, but because it's Katz it is instead considered schoolboy charm.
CONTINUES IN COMMENTS
That'll put the wind up 'em
Oh the irony, but it seems the Greens are engaging in a bit of astro-turfing (creating the illusion of grass roots support for your cause). Glossy full-colour postcards have started appearing, published by "Friends All for Renewable Technologies" (FART... groan). The postcard tells voters:
John Howard's recent energy policy has snubbed the use of clean, renewable sources like wind and solar energy.
At this election Vote One for the Environment, and put the Liberals last.
It's the bit after that that is most interesting:
Authorised by Adrian Whitehead, 43 Osbourne Rd Warrandyte, Vic 3113.
That wouldn't be the same Adrian Whitehead who is State Convenor for the Greens in Victoria and is authorising all the Victorian Greens election material?
If you like being taken as a sucker, then why not check out the FART web site.
UPDATE (30/9, 2:10am): After poking around a bit on the FART website - www.fart.fm - have come across a few interesting snippets:
- There is a p…
Just what this country needs - another trashy tabloid magazine. As if our collective intelligences hadn't already been insulted enough with the braindead moronic dross that airs nightly on television and the glossy eyecandy that occupies space next to the Tic-Tacs at the supermarket, we are about to be subjected to the Australian launch of UK gutter rag OK!
It's worthy being highly suspicious of any publication that includes silly punctuation in the title. It's a dog-whistle technique, used to scare off thinking people and attract the types who need something exciting at the end of every story, every sentence, and in this case, every word. It's not even the sort of word that it worthy of an exclamation mark, and certainly not one that is worthy of having a publication named after it. I wouldn't go and read Whatever! or Alright! or even I'll be there in a minute!
Another worrying part is that OK! have made public the fact that they are willing to pay for stori…
Melbourne Ports battle: from East to West (Bank)
It was toe to toe, head to head, Scopus graduate against Scopus graduate as the two main candidates in Melbourne Ports faced off against each other on Sunday night in an election debate sponsored by the Australian Jewish News. Michael Danby and David Southwick presented themselves for scrutiny by a predominantly Jewish audience, and the contest was fierce.
Danby was noticeably more polished and confident in his presentation, and looked every bit the seasoned competitor compared to the young(er) and inexperienced Southwick. Danby presented his message exceptionally well to an initially reluctant audience. He turned many of the ALP's weaknesses into strengths, and showed a keen eye for the prejudices of the crowd. He dealt with the anti-Israeli sentiments in the left faction of the ALP with a disciplined message that the leadership of the party were supporters of Israel and that the views of fringe-dwellers were irrelevant. As the issue continued to reoccur through the evening, …
ALP can't stop scratching
The ALP used Grand Final weekend to launch a new ad in that other epic battle that will probably be decided by Queenslanders (lame, I know). The 'scratchie ad' was put to air, and puts the focus right back on to Howard, Costello and the plans for succession. For those who were too busy praying or breathing in fresh air rather than watching the footy, the ad features a scratchie card with Howard's face in view, and through the ad the face is scratched away to reveal Costello lurking underneath. A clip from Abbott from earlier this year then spells out that if the Liberals a returned, power would inevitably transfer from Howard to Costello.
Accepting that the premise of this commerical is correct and Howard will not sit out the full term - sounds perfectly reasonable from here - the crux of the ad is that Costello as Prime Minister is bad news. The ALP have presumably done their research and realise that Costello is just not popular; he's smarmy; an economic rational…
Film: The Corporation
If a corporation was a human being, would we consider it a psychopath? After all, it's completely selfish, shows little concern for others, and seems to break the law with reckless abandon. At least that's the conclusion of the film-makers behind The Corporation, a new (well, kinda new at least) Canadian documentary in the tradition of Bowling for Columbine and Supersize Me.
Unlike its predecessors, the film makes an effort to achieve balance. Apart from it's final 20 minutes, with its comrades' call to arms, the film is not a simple propaganda flick with a spirited film-maker in the pulpit. Instead it states its case and accepts challenges from a variety of perspectives, some of them successful, some of them not. Credit should go to any film that can include both Milton Friedman (living legend and Nobel prize winning economist) and Noam Chomsky (Che Guevera in a pullover knitted by his mother).
The critique of corporations starts narrowly and then grows. It's an interesting tho…
It's a referendum, but on what?
It was a brilliant piece of politicking by Latham yesterday as he launched the party's policy on public hospitals. It was Latham at his strongest, targetting a human services issue, keeping the message simple and effective, and looking every inch the caring leader. The policy itself is strong, and a stark contrast to the approach of the Liberals, which is essentially to pay the private sector to do the same thing.
The best part of Latham's message on Wednesday was his assertion that this election would be a referendum on Medicare. Brilliant. Clever. Effective. The statement (surely a deliberate remark rather than one of Latham's throwaways) works well for two reasons. Firstly, it gives the campaign a central theme which has thus been lacking; 1993 and 1998 were on the GST, 1996 was on Keating's vision, 2001 was on Tampa, but what was 2004 going to be? Latham has just had a good stab at framing the election, something that neither leader had been able to effecti…
Bartlett the Blogger
It's always flattering to receive a kind word on someone else's blog, and especially flattering when that "someone else" is someone you greatly admire:
Check this out from Andrew Bartlett Online on 22/9:
For people who like looking around blogs on social issues, you could also try this one - http://www.ariontheweb.blogspot.com/ . I know this guy a bit. Nice enough and used to be a Democrat. Having just gone there, I note he's said I'm the only person who could look bored bungy jumping. Also a comment from someone who says they can't vote for me cos I'm too weird for wearing purple all the time.
I'd be happy if "nice enough" appeared on my epitaph. Thanks Andrew.
Regime change in Indonesia
Congratulations to Susilo Bambang Yudhoyono, who is not only the newly-elected President of Indonesia, but is also a tongue-twister given to Javanese school children, who in order to pass primary school must say the name without either laughing or doing the gun-trigger action when saying the Bambang bit.
Anyhow, Yudhoyono seems like a major step forward after the ineffective and clumsy rule of Megawati Sukarnoputri. Megawati seemed unable to properly combine the need for concensus with the need for action, and was painfully bogged down in petty politics and saw the nation slide backwards under her rule. It's no surprise that Indonesians voted her out of office after a single term.
Yudhoyono seems like a doer as well as a thinker, and given the challenges facing the archapelago, this is a positive step. As well as tackling terrorism in his midst, SBY (yep, that's what they call him) needs to reignite a fragile Indonesian economy and continue with many of the reforms that sta…
Liberals lampoon Latham's Liverpool legacy
Sunday morning the Liberals launched a new TV ad, which presumably will be followed by print and potentially billboards, focussing on Latham's inexperience and implying that he'll have his 'L Plates' on when he gets into Government. The ad piles on some of the evidence from his time on Liverpool council, but the fear in the ad runs deeper than that; it implies that Latham is not a safe pair of hands. For now the message simply focussed on economic management, but it is not exactly a chasmic leap to imagine the message will spread to national security and refugees (remember them?) as areas where Latham is a dangerous choice.
It's a clever strategy from the Liberals, and one that many suspected. Howard is old, boring and stuffy... or wise, experienced and reliable, depending on your viewpoint. The way that the strategy works is that on the surface it may be a straight-out attack ad, but in reality it is designed to highlight Latham's weaknesses in areas where…
The Age's man in London Peter Fray wrote an interesting piece in Saturday's paper about a story that has been buzzing around London for a while:
The political excesses of the British press are a wonder - or horror - to behold, but there is one story that for several months not even the most lurid paper has dared to touch.
It concerns an alleged crisis within Prime Minister Tony Blair's family and is widely considered to be behind this week's disclosure that Mr Blair nearly quit this year.
So just what could this story be? Ariontheweb values the ability to sleep at night, and so doesn't want to get his hands too dirty on this one, so you can do your own digging...
Painful as it is to say it, the non-Victorian Grand Final next week is definately GFF (Good For Football). The league is a national CLUB league, meaning that players are lining up for their teams, not their states. It is irrelevant whether they are from Fremantle or Footscray - they're the other blokes, on the other team.
Those whingers and moaners who are pissed off that there is no Victorian side in the game need to ask themselves if they are genuinely fans of a national league, or are they simply parochial supporters who see the AFL as just the VFL after the renovators got to it. Economies-of-scale mean it is a national league or bust (well, national league or WAFL, which is much the same) and we should celebrate it rather than mourn it.
Carn the mighty (Pordadelaide) Magpies!!!!
Freeway fun and games
Transport is the big issue that will decide the eastern suburbs of Melbourne this campaign. Forget terror, national security and war in Iraq, it'll be a big stretch of bitumen from Frankston to Mitcham that will be the major vote-grabber, particularly the question of who's going to pay for the thing. The State Government Bracksflipped soon after the last state election, deciding on a toll road, and the Federal Government are playing hardball, denying Federal funds unless the state stick to its original promise and make it toll free. It does seem like a rather arrogant move by the Federal Government to decide to be the enforcer of the State Government's electoral promises, but cynical politics prevails.
Okay, so on the ground, how does each party respond? The Liberals are unashamedly selling themselves as the motorists best friend, promising a big fat long and FREE road. The ALP will put pressure on the State Government to forget the tolls, and will direct federal road…
Greens back Bungy Stunt - No Strings Attached
Andrew Bartlett has proven himself the only pollie in Canberra who could look bored during a stunt like this:
Tumultuous Thursday
Just as footballers around the country celebrated Mad Monday a fortnight ago, drinking plenty, singing karaoke and just generally making a nuisance of themselves once the season was ancient history, political parties have a similar version, except this one is Tumultuous Thursday (yep, okay, it sounds a little desperate, but work with me). Midday Thursday (16 September, this time around) is the close of nomination for every seat around the country, and more crucially in the Senate. This is the latest that anyone can nominate themselves, and is usually the time that a few surprises emerge; did anyone mention Pauline?
MORE IN COMMENTS
The broad Liberal Church
Howard at a door-stop in Perth, today:
"As I've often said in the past, the Liberal Party is a broad church. If I can sort of, you know, push out the boundaries of the ecclesiastical allusions, it is a broad church and it emcompasses people who are Christian believers and there are various gradients of that too. There are traditional Protestants, traditional Catholics, born-again Christians, and people, perhaps, of a more reformist Catholic tradition and we have non-believers and I think it's a party for all of the talents and all of the beliefs and all of the non-beliefs as well."
Gee, John, that's all the colours of the rainbow.
Senator Hanson?
So Pauline is running for the Senate in Queensland... again. Pauline made her crucial political mistake way back in 1998, when after holding the seat of Oxley for a single term, she chose to run for the House of Reps again, this time in Blair, rather than running for the Senate. Alas, One Nation won that very Senate seat in 1998, with Heather Hill, then Len Harris, flying the flag for the party. Given that Harris' profile makes Andrew Bartlett looks like a pop-star, it was clearly a mistake. Just how different would things have been if Pauline was a Senator for the past six years?
Just like in 2001, Pauline will pick up a couple of percent, but do no more than give the Nationals yet another headache.
Tough times in Toorak
There always a dash of excitement that comes with heading down to shops in the 'burbs and finding a copy of the Toorak Metropolitan News stacked invitingly on a park bench. For those not fortunate enough to live in the inner suburbs of Melbourne, the Toorak News is probably best described as one part Andrew Bolt, one part local Rotary club, six parts Yellow Pages, all in full-colour newsprint.
There are plenty of reasons to love the Toorak Metropolitan News, and here is a mere 6 of them:
- The Name. News from Toorak? Nope. Produced in Toorak? Not if the St Kilda Road address is any guide. Distributed to Toorak? Yes, and 40 other suburbs in a 20km arc south and east of the CBD. Perhaps TMN are a fan of my idea of keeping the property bubble alive by naming every suburb relative to Toorak; Footscray is "Toorak West", Lilydale is "Outer Toorak", Heidelberg is "Toorak Hills"... adds thousands to the value!
- The random Capitalisation. Doesn't…
Hostages - Forced Iraqi Hospitality?
There was a painful inevitability about it if the suggestion that two Australians have been taken hostage in Iraq proves to be correct. With the nationals of countless other countries being taken hostage, sooner or later it would be Australia's turn. Of course, Australia must stand firm and not let its policy be dictated by terrorist nutters who were obviously neglected as children, in this case the Secret Islamic Army and its northern armed wing, the Horror Brigades (both of whom clearly need to work on their PR strategy, if the names are any guide).
The story is still emerging, but if the central premise is correct then it's going to be a painful couple of days ahead.
"Take Me Out" - Richard Greenberg - MTC production
Picture a drunk guy stumbling round a pub near the time of last drinks. He lurches unsteadily in several different directions (often all at once) and picks on people in all corners of the room. He is itching for a fight, wants an opponent to get his fists into, and is happy to take on several at a time. He is indiscriminate, and doesn't pick his target carefully at all. Even if he might have a chance against one of them, against many he doesn't stand a chance.
"Take Me Out" is a bit like the drunk guy at the pub. It's not content to take on just one or two taboos in a night, instead it wants to take on a whole army of them, one after the other and often in quick succession, and with weaker impact each successive time. The context for this is the locker room for a baseball team. Initially the taboo of the gay-male-as-sports-star is explored, with some fine dramatic moments and a tight script. Then the play considers the identity of African Americans, and as one character wryly…
Debate - a good mark for Mark
My gosh, it's amazing, what an incredible thing that no one expected to see in the debate. Michelle Grattan smiled! And even cracked a joke - with Laurie! Oh, how my heart did flutter with joy.
Less importantly, the debate went ahead with quiet determination rather than gusto on the part of the participants. Howard and Latham both took a very risk averse approach to the debate, hammering out some preprepared lines and a few clever 'squirrels' of the questions asked just to make sure they got their message through. There was a lack of discipline on behalf of the moderator Laurie (perhaps he was too enamored with Michelle?) who too often would follow one leader's comments by inviting the other to respond, and to then respond to the response, and respond to the response to the response. A bit like dueling banjos after a while.
Latham looked surprisingly strong on national security, wisely avoiding a heavy hand on Iraq, and instead emphasising the need for a more loc…
The not-so-Great Debate
Tonight is the one (and likely to be only) leaders' debate for the election, and like most debates in previous years, it will be watched only by political tragics and masochists, neither of whom are key to deciding the election winner. Still, beyond actually hitting the voters who matter, the debate does have a large amount of momentum value, especially so this time around given that it will be the ice-breaker after three days with almost no campaigning.
Howard is naturally more suited than Latham to the debate format. Howard has a sharp intellect, is very verbally dexterous, and loves a good argument with a willing opponent. Latham, however, is more a man-of-the-people (providing the people are not taxi drivers or Presidents of the United States) who prefers interacting with punters to make his point rather than arguing with a political opponent. He isn't as verbal or as sharp as Howard, but has a more casual, conversational approach. It's not wonder than Latham was …
Greens in on the ACT
Just what are the Greens on about, talking up their prospects of winning an ACT Senate seat?? Time after time during this campaign, the Greens seem obsessive about promoting their ACT Senate candidate, Kerrie Tucker, often when it would seem more strategic to promote the lead candidates in a number of states where the Senate vote will be in the balance. Take this quote from a press release from Saint Bob during the week:
He said that a key to stopping the Coalition turning the Senate into a rubber stamp for Mr Howard is the election of Greens ACT Senate candidate Kerrie Tucker MLA.
So Kerrie scores a mention, but there's no sign of David Risstrom, John Kaye or Drew Hutton, all lead Senate candidates in other states, and all much more likely to get themselves elected.
For a minor party to get a Senator elected in the ACT or the NT is an epic task. The electoral system means that, with two senators being elected in each territory, the quota in 33% of the total vote. So in 2001, b…
Jakarta Bombing
Was it linked to the election campaign? Was it linked to Australia's involvement in Iraq? Was it linked to the complete and utter failure of the Australian government to adopt fundamentalist Shari'a law?
Without all the facts being at hand, any speculation would be premature and, well, speculative, which of course has never stopped any previous speculation. Of course any discussion of the attack needs to begin with the usual caveats... 1. Condolences to all the victims and 2. This was an act of terrorists distorting rather than expressing a religious faith.
It seems naive to dismiss the possibility that this was timed strategically to influence the result of the Australian, and potentially Indonesian, election results. The bombing may lead voters in both constituencies to doubt the virtue of their national governments, and consider the potential for change. The Madrid scenario may be playing itself out again, with an electorate already discontented with their national lea…
Thursday - Richard Woolcott @ IPCS
Just weeks after being dismissed as a "Doddering Dacquari Diplomat" by De-Anne Kelly, that "Looselipped Layabout Lackey" from Queensland, Richard Woolcott has again spoken publicly about his concern with the Government.
The forum for Woolcott was the Institute of Postcolonial Studies in Melbourne, and Woolcott maintained his diplomatic air whilst quietly savaging most aspects of the Government's handling of Iraq - before, during and after the war. Criticism from Woolcott should carry plenty of weight - in the fine public service tradition he is apolitical, he has exceptional knowledge of international relations, he is familar with the major players and he offers sound judgement. Woolcott is no 'Usual Suspect', taking a number to attack the Government like it's the deli at Prahran Market.
The nub of his presentation has been published in The Age today and Woolcott focuses on 13 myths perpetuated by the Governments of the Coalition of the Willing. …
Latham, tax, and bouncing babies
Who said blokes can't give birth? In what seemed to resemble giving birth to a watermelon, or a small elephant, or something else that's not supposed to pass through a small hole, the ALP have finally pushed and pushed and pushed and produced their own cute-as-a-button tax policy. The pressure was on for 4 months solid since the budget, and the ALP took a softly-softly approach, telling anyone who'd listen to wait until the election campaign and all would be revealed. Like all new babies, this one is small and a little delicate, and with some rough handling can be in big trouble.
$8 a week saving for working families is a pretty ordinary result for such a long awaited document. And it gets worse then that when the reduction in Family Tax benefits is factored in. At least Latham had the targetting right, helping those below the $52k threshold. The size of it just doesn't seem like a real vote swinger, the sort of thing that could win over a family already concerne…
Go Harvey Go!!
As well as having the most annoying jingle on television, radio, and anywhere else you happen to stumble into its audio-assault range, Harvey Norman have a poor record when it comes to customer service. Last month crikey(.com.au) revealed the existance of an internal document asking employees to look out for ACCC reps on the prowl, such is the paranoia within HN:
"Please enure that should you or any of your staff be suspicious that a customer could be from the ACCC, be sure to take a photo of the person, with a digital camera (no more bold) clearly showing their face - maybe say 'smile customer relations day'."
And now the up-and-coming consumer rights site www.notgoodenough.org has devoted its top ten list of consumer complaints exclusively to Harvey Norman. Makes great reading, and is probably the a case-study in waiting for marketing students keen to know how not to treat your customers.
Seat Watch - Wentworth
Quick quiz - when the voters of Wentworth cast their vote in the '01 Federal election, did they vote for Peter King, or did they vote for the Liberal Party? It's a trick question. Of course it was the Liberal brand they voted for. Most of them had never heard of Peter King. So what would have changed between then and now?
The media seem to be getting itself in a collective lather over the prospect of the Liberals losing one of the jewels in the crown. The candidate is millionaire-republican-merchant-banker-Sydney-man-about-town - no it's not Rene Rivkin - Malcolm Turnbull. Reality is that Turnbull's a shoo-in, and nothing will change that.
Even assuming a three cornered contest, between Liberals, ALP and Independent King, the seat would still stay with the Libs.
King will no doubt preference the Liberals ahead of the ALP, consistant with his claim to be a 'Liberal Independent'. Even if he didn't, voters with the savvy to vote for an indie are more t…
Hmmmm, what happens next?
Ever get a sense of deja vu around election time? There are plenty of things which repeat themselves each and every time - debates about the debate, accusations of ABC bias, scaremongering on budget defecits... and Green's preferences negotiations. This is one of the lamest, most predictable exercises in politics, but for some reason the major parties get caught up in the environmental bidding war every time.
Here's how the stragegy works: the Greens talk themselves up as being the Next Big Thing, with good polling, money to spend, and a wave of support going their way. They make themselves out to be the kingmaker, the ones who won't get into government, but whose preferences will be crucial to deciding who does. Then they play the waiting game, waiting to be wooed by the major parties who give a concession here and a concession there to the environment, desperately keen to pick up the preferences. The Greens then go public and talk about how they are "seriously…
Try spinning this one into a positive
Just what on earth were they thinking at the Grozny Concerned Citizens Club (or whatever it was) when they decided that instead of protest marches with placards and folk music, the best way to create a free Chechnya would be to take children hostage and kill them??? Surely they should have had a chat to the guys in Public Relations before they went with that idea.
No-show Nelson
It was fun an games today at Melbourne University as rumour spread of a visit from the education minister, Brendan (half-)Nelson. As if the rumours were of a visit from Elvis himself, there was a ripple of excitement which passed through the student body. Left-wing students put up posters of the minister, urging us to interrupt his plans to address a group on his plans to destroy university education (well he probably wouldn't phrase it that way).
By 12:30pm, the protesters were out in force, with ill-fitting t-shirts and a megaphone as the means of persuasion, and even a Channel 10 camera along for the ride. By 12:45pm, however, things were looking a little shakey. Alas, it was revealed, the minister was never scheduled to visit the University, and no one beyond those protesting against it were aware of any planned visit. Do'h. So desperate were the protesters to have not wasted an hour of their life boxing at shadows that a bad bit of street theatre involving a giant p…
Sparring in their own corners
It's been a very tentative start to the campaign by both major parties. So far the election seems to be taking place in an echo chamber, with no substantive issues actually being discussed, and minor verbal gaffes being blown out of all proportion. The big three so far, not one of which will swing a single voter, is:
- Mark Latham on 2GB ruling out a payroll tax, even though the ALP support a 0.1% levy to finance workers entitlements in case of company collapse.
- Trish Worth (one of the more refugee-friendly Liberals) making a poorly chosen comparison between quaratine for pets and for asylum seekers.
- Senator George Brandis possibly but probably not calling Howard a "lying rodent" whilst in private company.
So far nothing of substance is on the table, and the campaign threatens to be an issue-free zone, where both sides are making themselves a small target and there's no engagement. At least it gives the minor parties some space to breath.
Seat Watch - Melbourne Ports
One seat that is being very keenly fought is that of Melbourne Ports, in the inner suburbs of Melbourne. Despite being an affluent seat whose demographics lean toward the Liberals, the seat has stuck thick with the ALP, perhaps due to large pockets of Jewish and gay and lesbian voters, traditional supporters of Labor. This time around, the Liberals can sniff blood, and are going full bore to win the seat.
The incumbant is controversial Labor MP Michael Danby, a member of the Unity fanction and perhaps one of the most conservative within the Labor caucus. Danby has made many enemies within the parliament and the media, with MPs on the left - notable Tanya Plibersek and Julia Irwin - being critical of Danby's unstinting support for Israel, and outburst such as this one directed at SMH columnist Alan Ramsey. Danby does, however, know how to get his constituency on side. With 3 in 10 Melbourne Ports voters identifying as Jewish, Danby knows how to use the issue of Israel to his a…
"Take Me Out" - Richard Greenberg - MTC production...


text:
package pt.davidafsilva.slacker.server;

import org.junit.Test;
import org.junit.runner.RunWith;

import java.time.Instant;
import java.util.Optional;

import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.unit.junit.VertxUnitRunner;
import pt.davidafsilva.slacker.api.ResultCode;
import pt.davidafsilva.slacker.api.SlackerBaseTest;
import pt.davidafsilva.slacker.api.SlackerRequest;
import pt.davidafsilva.slacker.api.SlackerRequestBuilder;
import pt.davidafsilva.slacker.api.SlackerRequestMessageCodec;
import pt.davidafsilva.slacker.api.SlackerResponse;
import pt.davidafsilva.slacker.api.SlackerResponseMessageCodec;

import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

/**
 * Unit tests for the {@link EventServerVerticle} object.
 *
 * @author david
 */
@RunWith(VertxUnitRunner.class)
public class EventServerVerticleTest extends SlackerBaseTest {

  // the request used for the test execution
  private static final SlackerRequest REQUEST = new SlackerRequestBuilder()
      .timestamp(Instant.now())
      .channelId("12345")
      .channelName("#dope")
      .userId("6789")
      .userName("david")
      .teamDomain("slack.davidafsilva.pt")
      .teamIdentifier("davidafsilva")
      .command("test")
      .args("123 456")
      .build();

  @Override
  public void setup() throws Exception {
    super.setup();

    // register the codecs
    vertx.eventBus()
        .registerCodec(new SlackerRequestMessageCodec())
        .registerCodec(new SlackerResponseMessageCodec());

    // register the event verticle
    assertTrue(deployVerticle(new EventServerVerticle(new ExecutorRegistry())).succeeded());
  }

  @Test(expected = NullPointerException.class)
  public void test_nullRegistry() {
    new EventServerVerticle(null);
  }

  @Test
  public void test_register_nullRequest() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS, null, reply -> {
      assertTrue(reply.failed());
      assertEquals("invalid register event received", reply.cause().getMessage());
      latch.countDown();
    }));
  }

  @Test
  public void test_register_nonJsonRequest() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS, "x", reply -> {
      assertTrue(reply.failed());
      assertEquals("invalid register event received", reply.cause().getMessage());
      latch.countDown();
    }));
  }

  @Test
  public void test_register_invalidRequestData() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS,
        new JsonObject().put("v", "1.0.0"), reply -> {
          assertTrue(reply.failed());
          assertEquals("unable to register executor: missing required fields",
              reply.cause().getMessage());
          latch.countDown();
        }));
  }

  @Test
  public void test_register_success() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS,
        new JsonObject().put("i", "test").put("v", "1.0.0"), reply -> {
          assertTrue(reply.succeeded());
          assertNotNull(reply.result().body());
          assertThat(reply.result().body(), instanceOf(JsonObject.class));
          final JsonObject json = (JsonObject) reply.result().body();
          assertTrue(json.containsKey("a"));
          assertEquals(32 + 17, json.getString("a").length());
          latch.countDown();
        }));
  }

  @Test
  public void test_request_nullRequest() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, null, reply -> {
      assertTrue(reply.failed());
      assertEquals("invalid request event received", reply.cause().getMessage());
      latch.countDown();
    }));
  }

  @Test
  public void test_request_nonSlackerRequest() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, "x", reply -> {
      assertTrue(reply.failed());
      assertEquals("invalid request event received", reply.cause().getMessage());
      latch.countDown();
    }));
  }

  @Test
  public void test_request_noExecutor() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, REQUEST,
        new DeliveryOptions().setCodecName(SlackerRequestMessageCodec.NAME),
        reply -> {
          assertTrue(reply.failed());
          assertEquals("no executor available for the command: test", reply.cause().getMessage());
          latch.countDown();
        }));
  }

  @Test
  public void test_request_failedExecutorProcessing() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS,
        new JsonObject().put("i", "test").put("v", "1.0.0"), reply -> {
          final JsonObject json = (JsonObject) reply.result().body();
          vertx.eventBus().consumer(json.getString("a"), req -> req.fail(99, "dummy"));
          latch.countDown();
        }));

    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, REQUEST,
        new DeliveryOptions().setCodecName(SlackerRequestMessageCodec.NAME),
        reply -> {
          assertTrue(reply.failed());
          assertEquals("failed test processing: dummy", reply.cause().getMessage());
          latch.countDown();
        }));
  }

  @Test
  public void test_request_executorReplyWithWrongType() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS,
        new JsonObject().put("i", "test").put("v", "1.0.0"), reply -> {
          final JsonObject json = (JsonObject) reply.result().body();
          vertx.eventBus().consumer(json.getString("a"), req -> req.reply("dummy"));
          latch.countDown();
        }));

    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, REQUEST,
        new DeliveryOptions().setCodecName(SlackerRequestMessageCodec.NAME),
        reply -> {
          assertTrue(reply.failed());
          assertEquals("failed test processing: invalid response", reply.cause().getMessage());
          latch.countDown();
        }));
  }

  @Test
  public void test_request_success() {
    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REG_SERVER_ADDRESS,
        new JsonObject().put("i", "test").put("v", "1.0.0"), reply -> {
          final JsonObject json = (JsonObject) reply.result().body();
          vertx.eventBus().consumer(json.getString("a"), req -> req.reply(new SlackerResponse() {
            @Override
            public ResultCode getCode() {
              return ResultCode.OK;
            }

            @Override
            public Optional<String> getResponse() {
              return Optional.of("test");
            }
          }, new DeliveryOptions().setCodecName(SlackerResponseMessageCodec.NAME)));
          latch.countDown();
        }));

    wrapExec(latch -> vertx.eventBus().send(EventServerVerticle.REQ_SERVER_ADDRESS, REQUEST,
        new DeliveryOptions().setCodecName(SlackerRequestMessageCodec.NAME),
        reply -> {
          assertTrue(reply.succeeded());
          assertNotNull(reply.result().body());
          assertThat(reply.result().body(), instanceOf(SlackerResponse.class));
          final SlackerResponse response = (SlackerResponse) reply.result().body();
          assertEquals(ResultCode.OK, response.getCode());
          assertTrue(response.getResponse().isPresent());
          assertEquals("test", response.getResponse().get());
          latch.countDown();
        }));
  }
}

redpajama_set_name: RedPajamaGithub


LADY JOANNA VASSA-- hasn't run before on the all-weather, this surface may not suit it but it has been known to lead so could improve so no lay or bet on this horse.
INDASTAR**-- has run twice at this course and distance in what looks like being fast times for the class of race it can lead or race near the front and has to be on the short list.
INTENSE STARLET-- has run here before but over 6 furlongs and at this trip might find things happening too quick for it but I'm not confident enough to lay it.
TILSWORTH MICKY-- a 4year old that's only had 6 races, none on this surface,its only attempt at this trip saw it tailed off but also doesn't seem to stay 6 furlongs, so I couldn't back or lay this one.
GOWANLESS*-- hasn't run on any all-weather surface before but did a fast time on good to firm going on the turf so ought to like this surface and a potential hidden danger.
SUGAR TOWN-- this one looks to want a little bit further but has had 2 runs here over 6 furlongs which have muddied the waters another to leave alone on both fronts.
HARPERS RUBY-- has won on this surface at Wolverhampton in a faster time than Indastar but is held by it on a run over this course and distance but could have place claims.
TELL THE STARS-- has only had 5 runs and its last one at this course, I'm not sure what its ideal distance is but it is a 3-year-old so could be open to improvement but I couldn't back it or lay it.
CAMANCHE GREY-- has had 9 races on the all-weather tracks without a victory and this surface doesn't seem to suit it very much but its time says it might make the frame.
SUMMARY: What a poor race, I've only got 3 horses with a recorded time on this surface and there's been no proven advantage to be either side of the track, I've got 5 that I couldn't back or lay, I've got another as a possible hidden danger plus 4 that I would lay if the prices were low enough, in looking for the winner everything seems to link to INDASTAR 6/1 who has won at this course and distance with Harpers Ruby and Majestic Manannan behind it and is weighted to beat them again here but Harpers Ruby has done a faster time than the selection at Wolverhampton that has the same surface, remember we are talking about class 6 animals so consistency doesn't appear on their CV's so any stakes should be kept to a sensibly slow level.