text:
adventures in food, wine and other things
Food Parcel
Top of the Crops
P.E.T.S.
Martini Housewife
Recessionista!
RIP AA Gill, 1954-2016
Take a dragon's-view tour of New Zealand
It's spring again – and the lettuce season
The Essential Guide to Hawke's Bay and Napier, New Zealand
Footpath feasts
Turandot – when you can't be there
Ten reasons to visit New Zealand in 2016
The coolest street in Queensland
A no-sweat guide to Queenstown
RIP Jackie Collins, 1937-2015
New Plymouth Rocks
Editor's note: This story appeared in News Corp Australia newspapers and websites on February 28, 2016. It was originally titled "12 reasons…" but two events – Crankworx mountain biking festival and Warbirds over Wanaka – have been held since ;-).
BY JOHN CORBETT The off-peak months of autumn, winter and spring are ideal for visiting New Zealand. Its mind-blowing landscapes are less crowded and from the top to the bottom of the country there are great events to lure travellers across the Ditch. Here are some highlights:
Waiheke Island is now recognised as a producer of world-class wines
WAIHEKE WINE & FOOD FESTIVAL, 2 APRIL
A quick zip from downtown Auckland by high-speed ferry, lush green Waiheke Island is a downunder version of The Hamptons. Along with the mega-mansions and artists' colonies there are top-class vineyards and cellar doors and on 2 April the inaugural Waiheke Wine & Food Festival (part of the Waiheke Harvest Festival from 29 March to 6 April) gives visitors the chance to taste many of the island's boutique wines in one place. Waiheke is also known for its fine artisan foods and they'll be there too, along with live music.
festival.waihekewine.co.nz
Sileni Estate Winery: the finishing place of the inaugural Hawke's Bay International Marathon
HAWKE'S BAY INTERNATIONAL MARATHON, 14 MAY
There is a very good reason why you should participate in this inaugural marathon, half-marathon, 10km run and kids' course event: it's in one of New Zealand's premier wine regions. The easy-running trail winds through the late-autumn countryside and along the coast, finishing in the vineyards of Sileni Estates Winery. Wonderfully scenic and famously hospitable, Hawke's Bay is the home of some of the finest Art Deco-era architecture in the world. If you are in the region in June, a four-week winter version of F.A.W.C., the Hawke's Bay Food & Wine Classic, complements the larger summer event (4-13 November).
hawkesbaymarathon.co.nz
fawc.co.nz
New Zealand Bluff Oysters – One of the world's greats
BLUFF OYSTER FESTIVAL, 21 MAY
Every year, seafood lovers from everywhere pour in to the salty seaside township of Bluff on New Zealand's southernmost tip to celebrate one of the world's great seasonal delicacies. Harvested between March and August, "Bluffies" are the star of this iconic New Zealand food event which also features crayfish, abalone, scallops, blue cod and wild foods washed down with local ales and New Zealand wines. Live music and the Oyster Sack Creativity awards add to the fun.
bluffoysterfest.co.nz
ALL BLACKS INTERNATIONAL MATCHES, JUNE-SEPTEMBER
With cricket done and dusted till next summer, Kiwis focus on their major national obsession: rugby union. This winter, the Wallabies' keenest opponents face a succession of touring teams including Wales (18-25 June in Auckland, Wellington and Dunedin); Argentina (19 September, Hamilton); South Africa (17 September, Christchurch) and the ones you're waiting for: Australia (27 August, Wellington) and the 3rd Bledisloe Cup Test (22 October, Auckland).
allblacks.com
Queenstown Winter Festival
QUEENSTOWN WINTER FESTIVAL 24 JUNE-3 JULY
Forty-two years young, this ten-day extravaganza of street parties, fireworks and performances is New Zealand's – and possibly the southern hemisphere's – biggest celebration of winter. Nearby are the superb ski fields that draw thousands of Australians on direct flights from capital cities on the East Coast.
winterfestival.co.nz
Beervana – A highlight of the Wellington winter for craft beer lovers
BEERVANA, WELLINGTON, 12-13 AUGUST
Hmm, hops with a touch of lemongrass – or is it lychees? Beervana is a two-day celebration of craft beer like no other and a beer lover's chance to get amongst the biggest, broadest range of tipples you'll find under one roof. Masterclasses, seminars and fine food offerings draw devotees from Australia, the USA and beyond. Your trip will also coincide with the famed Visa Wellington on a Plate food event, held between 12 and 28 August.
beervana.co.nz
wellingtononaplate.com
The World of Wearable Art event is a big international drawcard
WORLD OF WEARABLE ART, WELLINGTON, 22 SEPTEMBER-9 OCTOBER
A world-class cultural event, WOW draws around 60,000 show-goers every year to see its fantastical range of garments made from an extraordinary array of materials. Fashion designers, artists, costume-makers and gifted unknowns compete to take part and the sell-out shows of the top garments are a theatrical extravaganza, with breathtaking choreography, lighting and soundscapes.
worldofwearableart.com
eventfinda.co.nz
HELENA BAY LUXURY LODGE OPENS NOVEMBER 2016
Here's your chance to live like an oligarch. Set on the unspoilt east coast of Northland, the latest addition to New Zealand's impressive collection of luxury lodges will host a maximum of ten guests at a time for NZ$3,000 per person per night. The secluded property is the brainchild of Russian billionaire Alexander Abramov (Forbes list: steel, mining) and features three stand-alone waterfront villas, a fully equipped health spa and a staff-guest ratio of 5:1. Catering includes an on-site chef from the three- Michelin-starred Don Alfonso 1890 restaurant in Southern Italy. Auckland is just 40-minutes away by high-speed helicopter.
helenabay.com
LAKE TAUPO CYCLE CHALLENGE, 26 NOVEMBER
Attention all MAMILs (middle-aged men in lycra): around 8,000 of you (and others) will converge on the centre of the North Island for the 40th anniversary of the Lake Taupo Challenge this November. The challenge: an epic 160-kilometre ride around New Zealand's biggest lake. The payoff: some of New Zealand's most scenic cycling. Should you prefer a more leisurely ride, The Great Lake Trail can be tackled year-round in two days and a night, or split into sections. Any way you do it, it's cycle heaven.
cyclechallenge.com
greatlaketrail.com
THE GREAT WAR EXHIBITION, WELLINGTON, TO NOVEMBER 2018
Lord of the Rings director Sir Peter Jackson brings his inimitable touch to this multimillion-dollar, Government-backed commemoration of the courage and sacrifice of New Zealanders during the First World War. Visitors are invited to journey through the conflict year by year, seeing the challenges faced by soldiers on battlefields like Gallipoli, and the hardships at home. The journey includes an interactive evocation of the trenches that conveys the sounds and scents of warfare. Visually and emotionally, it's immersive. www.alimentary.co.nz
greatwarexhibition.nz
Photos in order from top:
blacklabelexperience.com; Tim Whittaker Photography for Hawkes Bay Tourism; John Corbett; Youtube.com; queenstownnz.com; beervana.co.nz; Martin de Ruyter / The Nelson Mail; helenabay.com; Yuzuru Sunada; The Australian.com
Regal Advert
Address. alimentary.co.nz, PO Box Box 9697, Newmarket Auckland 1149 New Zealand
Ph. + 64 9 520-4517 Mob. + 64 27 242 1393 Email. info@alimentary.co.nz


text:
Q: Partially flatten multidimensional array I have an array of outlines and points. For an outline, calling outline.geometry.coordinates produces a multidimensional array of coordinates:
[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]]

For a point, calling point.geometry.coordinates produces a one dimensional array of the coordinates:
[-72.78630766033722,41.767349642115724]

Both points and outlines are held in an array.  I would like to ultimately end up with an array of all of the coordinate pairs, such as:
 [[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724],[-72.78630766033722,41.767349642115724], ...]]

What I've Tried
First, I tried to get all of the coordinates, where geometries is my array of outlines and points:
var coordinates = geometries.map(function(outline) {return outline.geometry.coordinates});

Not surprisingly, this creates the following array:
[[[[-72.68639118392117,41.66733032827929],[-72.68630366033922,41.667449647115724], ...]], [-72.78630766033722,41.767349642115724]]

Flattening this array would cause loss of the coordinate pairs being paired, so I'm not entirely sure how to go about this.  Any ideas?

A: One approach is to standardize the coordinate outputs.  If outlines give you an array of paired coordinates, you can have points do the same by wrapping it as a single element array.
Outline
[[a, b], [c, d], [e, f], ...]

Point
[[a, b]]

such that when you combine them they are all of the same shape / dimensionality.  At that point, you can flatten once using @dandavis' technique.

If you're able to use instanceof to determine whether your Object is an outline or point, you could use the following.
var coordinates = geometries.map(function(outline_or_point) {
  return outline_or_point instanceof outline ? outline.geometry.coordinates : [point.geometry.coordinates];
});

If instanceof isn't possible, you could do some duck typing, for example, by checking if outline_or_point is an array or a number.
var coordinates = geometries.map(function(outline_or_point) {
  return typeof outline_or_point[0] == 'number' ? [point.geometry.coordinates] : outline.geometry.coordinates;
});

A: How about this?
var geometries = [
    // point
    {
        geometry: {
            coordinates: [1, 2],
        },
    },

    // outline
    {
        geometry: {
            coordinates: [
                [
                    [3, 4],
                    [5, 6],
                ],
            ],
        },
    },
];

var coordinates = geometries.map(function(outline) {
  var coords = outline.geometry.coordinates;
  if (typeof coords[0] === 'number') {
    return [coords];
  } else {
    return coords[0];
  }
}).reduce(function (prev, next) {
    return prev.concat(next);
}, []);

console.log(coordinates);

// Output:
// [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]

redpajama_set_name: RedPajamaStackExchange


text:
Sofia Kenin fought back from a set down to beat two-time grand slam winner Garbiñe Muguruza to win the Australian Open title and with it, claim her first grand slam title.
It was a nerveless display for one appearing in her first major final, especially after the disappointment of dropping an opening set that could have gone either way, the Russian-born American winning 4-6, 6-2, 6-2.
Maiden Slam Moment!@SofiaKenin captures her first Grand Slam title in a fearless 4-6 6-2 6-2 comeback over Muguruza for the #AusOpen women's singles ?#AO2020 pic.twitter.com/HU8mijCbTh
— #AusOpen (@AustralianOpen) February 1, 2020
After raising the Daphne Akhurst Memorial Cup aloft to the cheers of the crowd, an emotional Kenin explained just what it meant to be a grand slam champion.
"I want to congratulate Garbiñe on a great match and a great tournament. I'm sure we're going to have many more finals to come in the future and I want to congratulate you and your team on a great two weeks, so congratulations," said a magnanimous Kenin after the match.
"I just want to say my dream has officially come true, I can't even describe this feeling, it's so emotional and I've worked so hard and I'm just so grateful to be standing here. Dreams come true, so if you have a dream, go for it and it's going to come true."
?? Watch the #AusOpen LIVE
? Eurosport 1
??? Eurosport Player: https://t.co/0Fa7uXMVB9 pic.twitter.com/SxbkGRkrNg
— Eurosport UK (@Eurosport_UK) February 1, 2020
Kenin flew out of the blocks, showing no signs of the nerves that affected her semi-final opponent and home favourite Ashleigh Barty to confidently hold to 15 in the opening game before immediately putting pressure on the Muguruza serve.
But the Spaniard is not a two-time slam winner for nothing, and started to find her rhythm off the ground, pummelling huge groundstokes to fashion the opening break in a long third game. Even successive double faults didn't throw her off her stride, holding off a break point to extend her advantage before holding firm, a brutal 23 shot rally in the sixth game showing her younger opponent that she would not be bullied in the face of some fierce hitting.
Just as styles make boxing matches, it soon became apparent that this final could develop into a classic, one of power hitting against counter-punch and guile, Kenin using all of her armoury of slice and drop shots to dig herself out of a hole at 0-40 to hold and stay in the set at 4-3. It was a big moment, the American breaking back after a double-fault gift from her opponent.
Signs of nerves from Muguruza? If there were, she did well to disguise it, the Spaniard hitting freely and coming forward to break again before serving out confidently for a one set advantage. Time for a bathroom break for Kenin to reset and gather her thoughts. Just as Andy Murray stared himself in the mirror at 2-2 in the 2012 US Open final, perhaps the American did the same, telling herself to grasp this most important of opportunities.
It appeared to do the trick, a wobbly Muguruza service game allowing the American to break for 3-1 and take a stranglehold in the second set and a further break confirmed the alarming momentum switch as Kenin hammered home her advantage to take the set 6-2 and level the final.
The last time the pair met, it was Kenin who came out on top in another three-setter, winning 6-0, 2-6, 6-2 in their only previous meeting, in Beijing last September. Yet again, this battle would go the distance, but with much more at stake than that first round encounter in China.
And again, it was Kenin who grabbed the third set initiative, a pivotal hold from 0-40 in the fifth game of the decider proving the decisive moment in the match. It seemed to break the will of the Spaniard, who threw in a double fault to let slip a 40-0 lead of her own and leave the American on the brink of victory at 5-2, inside out improvised slices and topspin passes the shots of an exhibition match, rather than a grand slam final.
Nerves clearly getting the better of the more experienced woman, it was Muguruza making mistakes, another double fault followed by a Kenin winner setting up championship point. And, at the second time of asking, Kenin was home, yet another double gifting her the title.
Perhaps not the fitting way to win after such a polished performance but not that Kenin will care after a deserved victory.
Muguruza, who won the 2016 French Open and Wimbledon in 2017, would dearly have loved to have added the Australian Open title to her collection but was humble in defeat afterwards.
"I think I'm going to keep it short, because I'm going to get very emotional," said Muguruza after her defeat. "Congratulations, Sofia, I think you played an incredible match, incredible tournament. You deserve the trophy. I think we're going to see you play more finals for sure. I have to start thanking my team. It's an individual sport but I will never be here without them. They are over there, suffering with me today. It has been incredible playing out here in this environment.
"This court brings an energy and the crowd is what makes it special because we play for you guys. Thank you for coming. Almost our favourite grand slam, I have to say."
This year's women's tournament has been enthralling and perplexing in equal measure. From the shock exits of Serena Williams and Naomi Osaka at the hands of rising star Coco Gauff to the surprise final that will live in the memory.
The rise and fall of Muguruza, in particular, has been a story in itself. From the highs of French Open and Wimbledon glory, the Venezuelan-born Spaniard suffered an alarming drop in form and confidence, plummeting to 36th in the world only two years after she was ranked world number one.
But having reunited with former coach Conchita Martinez, also a former Wimbledon champion and Australian Open finalist, this tournament may just be the fillip she needs to get back to where she belongs.
Nothing but respect ❤
?? Watch the #AusOpen final LIVE
??? Eurosport Player: https://t.co/0Fa7uXMVB9 pic.twitter.com/fIriSrOBjj
Gym, food and dance
Surviving and thriving: The players dealing best with quarantine
Positive tests increase
Updated: Australian Open positive Covid tests, quarantine and players: What we know
Three planes infected with the coronavirus, 72 players in lockdown: Melbourne's nerves on edge
Coronavirus: Australian Open confirms further 25 players are quarantining

redpajama_set_name: RedPajamaCommonCrawl


text:
import {Workspace, Project, Reporter, Target, Flux, Diagnostic, AttributeTypes as V, ComponentElement, FileElement, File} from '@openmicrostep/msbuildsystem.core';
import {assert} from 'chai';
import * as path from 'path';

export class TestTarget extends Target {
  compiler: string;
  sysroot: string;
  static: boolean;
  files:         File[];
  publicHeaders: File[];
  defines:       string[];
  libraries:     string[];
  mylist:        string[];
}
Target.register(["Test"], TestTarget, {
  compiler     : V.defaultsTo(V.validateString, 'default compiler'),
  sysroot      : V.defaultsTo(V.validateString, 'default sysroot'),
  static       : V.defaultsTo(V.validateBoolean, false),
  files        : V.defaultsTo(ComponentElement.setAsListValidator(FileElement.validateFile), []),
  publicHeaders: V.defaultsTo(ComponentElement.setAsListValidator(FileElement.validateFile), []),
  defines      : V.defaultsTo(ComponentElement.setAsListValidator(V.validateString), []),
  libraries    : V.defaultsTo(ComponentElement.setAsListValidator(V.validateString), []),
  mylist       : V.defaultsTo(ComponentElement.setAsListValidator(V.validateString), []),
});

type Context = {
  workspace: Workspace;
  sharedProject: Project;
}

function load_valid_simple(f: Flux<Context>) {
  let workspace = f.context.workspace = Workspace.createTemporary();
  let projectPath = path.normalize(__dirname + "/data/simple-project/make.js");
  let project = f.context.sharedProject = workspace.project(__dirname + "/data/simple-project");
  assert.equal(project.directory, path.normalize(__dirname + "/data/simple-project"));
  assert.equal(project.path, projectPath);
  assert.equal(project.definition!.name, 'MySimpleProject');
  assert.equal(project, workspace.project(__dirname + "/data/simple-project"), "two project at the same path share the same instance");
  assert.deepEqual<Diagnostic[]>(project.reporter.diagnostics, [
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdTime.c"                     , "msg": `file '${project.directory}${path.sep}MSStdTime.c' not found`            },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdTime-win32.c"               , "msg": `file '${project.directory}${path.sep}MSStdTime-win32.c' not found`      },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStd.c"                         , "msg": `file '${project.directory}${path.sep}MSStd.c' not found`                },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStd.h"                         , "msg": `file '${project.directory}${path.sep}MSStd.h' not found`                },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStd_Private.h"                 , "msg": `file '${project.directory}${path.sep}MSStd_Private.h' not found`        },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdShared.c"                   , "msg": `file '${project.directory}${path.sep}MSStdShared.c' not found`          },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdShared-win32.c"             , "msg": `file '${project.directory}${path.sep}MSStdShared-win32.c' not found`    },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdThreads.c"                  , "msg": `file '${project.directory}${path.sep}MSStdThreads.c' not found`         },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdThreads-win32.c"            , "msg": `file '${project.directory}${path.sep}MSStdThreads-win32.c' not found`   },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdBacktrace.c"                , "msg": `file '${project.directory}${path.sep}MSStdBacktrace.c' not found`       },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:MSStdBacktrace-win32.c"          , "msg": `file '${project.directory}${path.sep}MSStdBacktrace-win32.c' not found` },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:unix:MSStdTime-unix.c"           , "msg": `file '${project.directory}${path.sep}MSStdTime-unix.c' not found`       },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:unix:MSStdShared-unix.c"         , "msg": `file '${project.directory}${path.sep}MSStdShared-unix.c' not found`     },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:unix:MSStdThreads-unix.c"        , "msg": `file '${project.directory}${path.sep}MSStdThreads-unix.c' not found`    },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:backtrace:MSStdBacktrace-unix.c" , "msg": `file '${project.directory}${path.sep}MSStdBacktrace-unix.c' not found`  },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:mman:mman.c"                     , "msg": `file '${project.directory}${path.sep}mman.c' not found`                 },
    { "category": "load", is: "warning", "path": "MySimpleProject:files:mman:mman.h"                     , "msg": `file '${project.directory}${path.sep}mman.h' not found`                 },
  ]);
  f.continue();
}
function load_invalid() {
  let workspace = Workspace.createTemporary();
  let projectPath = path.normalize(__dirname + "/data/bad-project/make.js");
  let project = workspace.project(__dirname + "/data/bad-project");
  assert.equal(project.directory, path.normalize(__dirname + "/data/bad-project"));
  assert.equal(project.path, projectPath);
  assert.equal(project.definition!.name, 'MyInvalidProject');
  assert.deepEqual<Diagnostic[]>(project.reporter.diagnostics, [
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdTime.c"                     , "msg": `file '${project.directory}${path.sep}MSStdTime.c' not found`            },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdTime-win32.c"               , "msg": `file '${project.directory}${path.sep}MSStdTime-win32.c' not found`      },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStd.c"                         , "msg": `file '${project.directory}${path.sep}MSStd.c' not found`                },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStd.h"                         , "msg": `file '${project.directory}${path.sep}MSStd.h' not found`                },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStd_Private.h"                 , "msg": `file '${project.directory}${path.sep}MSStd_Private.h' not found`        },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdShared.c"                   , "msg": `file '${project.directory}${path.sep}MSStdShared.c' not found`          },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdShared-win32.c"             , "msg": `file '${project.directory}${path.sep}MSStdShared-win32.c' not found`    },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdThreads.c"                  , "msg": `file '${project.directory}${path.sep}MSStdThreads.c' not found`         },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdThreads-win32.c"            , "msg": `file '${project.directory}${path.sep}MSStdThreads-win32.c' not found`   },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdBacktrace.c"                , "msg": `file '${project.directory}${path.sep}MSStdBacktrace.c' not found`       },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:MSStdBacktrace-win32.c"          , "msg": `file '${project.directory}${path.sep}MSStdBacktrace-win32.c' not found` },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdTime-unix.c"           , "msg": `file '${project.directory}${path.sep}MSStdTime-unix.c' not found`       },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdShared-unix.c"         , "msg": `file '${project.directory}${path.sep}MSStdShared-unix.c' not found`     },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdThreads-unix.c"        , "msg": `file '${project.directory}${path.sep}MSStdThreads-unix.c' not found`    },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdTime-unix.c"           , "msg": `file '${project.directory}${path.sep}MSStdTime-unix.c' not found`       },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdShared-unix.c"         , "msg": `file '${project.directory}${path.sep}MSStdShared-unix.c' not found`     },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:unix:MSStdThreads-unix.c"        , "msg": `file '${project.directory}${path.sep}MSStdThreads-unix.c' not found`    },
    { "category": "load", is: "error"  , "path": "MyInvalidProject:files.elements[12]"                    , "msg": `conflict with an element defined with the same name: 'unix'`  },
    { "category": "load", is: "note"   , "path": "MyInvalidProject:files:mman.elements[0].tags"           , "msg": "'tags' could be misused, this key has special meaning for some elements" },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:mman:mman.h"                     , "msg": `file '${project.directory}${path.sep}mman.h' not found`                 },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:backtrace:MSStdBacktrace-unix.c" , "msg": `file '${project.directory}${path.sep}MSStdBacktrace-unix.c' not found`  },
    { "category": "load", is: "note"   , "path": "MyInvalidProject:files:mman.elements[0].tags"           , "msg": "'tags' could be misused, this key has special meaning for some elements" },
    { "category": "load", is: "warning", "path": "MyInvalidProject:files:mman:mman.h"                     , "msg": `file '${project.directory}${path.sep}mman.h' not found`                 },
    { "category": "load", is: "error"  , "path": "MyInvalidProject:files:mman"                            , "msg": "conflict with an element defined with the same name: 'mman'"  },
    { "category": "load", is: "error"  , "path": "MyInvalidProject:notanobject"                           , "msg": "an element definition or reference was expected"              },
    { "category": "load", is: "error"  , "path": "MyInvalidProject:nois.is"                               , "msg": "'is' attribute must be a string"                              },
    { "category": "resolve", is: "warning", "path": "MyInvalidProject:files:mman.elements[0]", "msg": "attribute must be an element, got a {\"name\":\"mman.c\",\"tags\":[\"CompileC\"]}"}, // MyInvalidProject:files.elements[14]
    { "category": "resolve", is: "warning", "path": "MyInvalidProject:files:mman.elements[0]", "msg": "attribute must be an element, got a {\"name\":\"mman.c\",\"tags\":[\"CompileC\"]}"}, // MyInvalidProject:files.elements[15]
    { "category": "resolve", is: "error"  , "path": "MyInvalidProject:all envs.elements[6]"  , "msg": "elements must be of the same type, expecting environment, got component"          },
  ]);
}
function build_graph(f: Flux<Context>) {
  let reporter = new Reporter();
  let project = f.context.sharedProject;
  let graph = project.buildGraph(reporter, {});
  let targetTasks = Array.from(graph.allTasks());
  assert.deepEqual(reporter.diagnostics, []);
  assert.deepEqual(targetTasks.map(task => task.name), [
    { type: 'target', name: 'MSStd', environment: 'darwin-i386'  , project: project.path },
    { type: 'target', name: 'MSStd', environment: 'darwin-x86_64', project: project.path },
    { type: 'target', name: 'MSStd', environment: 'linux-i386'   , project: project.path },
    { type: 'target', name: 'MSStd', environment: 'linux-x86_64' , project: project.path },
    { type: 'target', name: 'MSStd', environment: 'msvc12-i386'  , project: project.path },
    { type: 'target', name: 'MSStd', environment: 'msvc12-x86_64', project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'darwin-i386'  , project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'darwin-x86_64', project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'linux-i386'   , project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'linux-x86_64' , project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'msvc12-i386'  , project: project.path },
    { type: 'target', name: 'MSStd_static', environment: 'msvc12-x86_64', project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'darwin-i386'  , project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'darwin-x86_64', project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'linux-i386'   , project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'linux-x86_64' , project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'msvc12-i386'  , project: project.path },
    { type: 'target', name: 'anotherLib', environment: 'msvc12-x86_64', project: project.path }
  ]);
  let target = (graph.findTask(false, (t: Target) => t.name.name === "MSStd" && t.name.environment === 'darwin-i386') as Target);
  let msstd: any = target.attributes.toJSON();
  msstd.components = msstd.components.map(c => c.name);
  msstd.environment.components = msstd.environment.components.map(c => c.name);
  let exports = {
    is: "target-exports",
    name: "MSStd",
    environment: "darwin-i386",
    components: [
      "=generated",
      {
        is: "component",
        name: "",
        tags: [],
        components: [{
          is: "component",
          name: "",
          tags: [],
          components: [],
          "clang=": {
            is: "component",
            name: "clang",
            tags: ["clang"],
            compiler: "clang",
            components: [],
            mylist: ["v2"],
          }
        }]
      }
    ],
    "generated=": { is: "component", targets: ["MSStd"], components: [] }
  };
  assert.deepEqual(msstd, {
    is           : 'build-target',
    name         : 'MSStd',
    tags         : [],
    compatibleEnvironments: [],
    components   : [],
    targets      : [],
    manual       : false,
    mylist       : ["v2"],
    environment  : {
      is: "environment",
      name: "darwin-i386",
      compatibleEnvironments: [],
      sysroot: "darwin:i386",
      tags: ["darwin", "i386"],
      components: ["clang"],
      componentsByEnvironment: {},
    },
    compiler     : "clang",
    type         : 'Test',
    static       : false,
    sysroot      : "darwin:i386",
    defines      : ["MINGW_HAS_SECURE_API" ],
    libraries    : ['-lm', '-luuid', '-ldl'],
    files        : ["MSStdTime.c", "MSStd.c", "MSStdShared.c", "MSStdThreads.c", "MSStdBacktrace.c", "mman.c"].map(n => ({ is: "file", name: n, tags: ["CompileC"] })),
    publicHeaders: ["MSStd.h", "mman.h"].map(n => ({ is: "file", name: n, tags: ["Header"] })),
    exports: exports
  });
  assert.deepEqual(target.exports as any, exports);
  assert.deepEqual(reporter.diagnostics, []);
  f.continue();
}

function files(f: Flux<Context>) {
  let reporter = new Reporter();
  let project = f.context.sharedProject.tree;
  assert.deepEqual(
    project.resolveElements(reporter, "=files?CompileC").map(f => f.name),
    ["MSStdTime.c", "MSStd.c", "MSStdShared.c", "MSStdThreads.c", "MSStdBacktrace.c", "mman.c"]);
  assert.deepEqual(
    project.resolveElements(reporter, "=files?Header").map(f => f.name),
    ["MSStd.h", "mman.h"]);
  assert.deepEqual(
    project.resolveElements(reporter, "=files:mman?Header").map(f => f.name),
    ["mman.h"]);
  assert.deepEqual(
    project.resolveElements(reporter, "=files:unix").map(f => f.name),
    ["MSStdTime-unix.c", "MSStdShared-unix.c", "MSStdThreads-unix.c", "MSStdBacktrace-unix.c"]);
  assert.deepEqual(
    project.resolveElements(reporter, "=files:unix:backtrace").map(f => f.name),
    []);
  assert.deepEqual(reporter.diagnostics, [{is: "warning", "msg": "query 'files:unix:backtrace' refer to an element that can't be found, the group 'files:unix:backtrace' is ignored"}]);
  f.continue();
}
function components(f: Flux<Context>) {
  let reporter = new Reporter();
  let project = f.context.sharedProject.tree;
  assert.deepEqual(
    project.resolveElements(reporter, "=clang").map(e => e.toJSON()),
    [{ is: 'component', compiler: "clang", tags: ["clang"], mylist: ["v2"], components: [], componentsByEnvironment: {}, name: 'clang' }]);
  assert.deepEqual(
    project.resolveElements(reporter, "=all envs").map(e => e.name),
    ["darwin-i386", "darwin-x86_64", "linux-i386", "linux-x86_64", "msvc12-i386", "msvc12-x86_64"]);
  assert.deepEqual(
    project.resolveElements(reporter, "=darwin-i386").map(e => e.toJSON()),
    [
      {
        is: 'environment',
        sysroot: "darwin:i386",
        components: [
          {
            is: "component",
            name: "clang",
            components: [],
            componentsByEnvironment: {},
            mylist: ["v2"],
            compiler: "clang",
            tags: ["clang"]
          }
        ],
        componentsByEnvironment: {},
        tags: ["darwin", "i386"],
        name: 'darwin-i386',
        compatibleEnvironments: []
      }
    ]);
  assert.deepEqual(
    project.resolveElements(reporter, "=darwin-x86_64").map(e => e.toJSON()),
    [
      {
        is: 'environment',
        sysroot: "darwin:x86_64",
        components: [
          {
            is: "component",
            name: "clang",
            components: [],
            componentsByEnvironment: {},
            mylist: ["v2"],
            compiler: "clang",
            tags: ["clang"]
          }
        ],
        componentsByEnvironment: {},
        mylist: ["v1"],
        tags: ["darwin", "x86_64"],
        name: 'darwin-x86_64',
        compatibleEnvironments: []
      }
    ]);
  assert.deepEqual(reporter.diagnostics, []);
  f.continue();
}

function with_external_dependencies(f: Flux<Context>) {
  let projectPath = path.normalize(__dirname + "/data/simple-project-dep/make.js");
  let project2 = f.context.workspace.project(__dirname + "/data/simple-project-dep");
  let project = f.context.sharedProject;
  assert.equal(project2.directory, path.normalize(__dirname + "/data/simple-project-dep"));
  assert.equal(project2.path, projectPath);
  assert.equal(project2.definition!.name, 'MyDependencyToSimpleProject');
  assert.deepEqual(project2.reporter.diagnostics.map(d => { if (d.path) d.path = path.relative(project2.directory, d.path); return d;}), []);

  let reporter = new Reporter();
  let graph = project2.buildGraph(reporter, { environments:["msvc12-i386"] });
  let targetTasks = Array.from(graph.allTasks());
  assert.deepEqual(reporter.diagnostics.map(d => { if (d.path) d.path = path.relative(project2.directory, d.path); return d;}), []);
  assert.deepEqual(targetTasks.map(task => task.name), [
    { type: 'target', name: 'ATarget', environment: 'msvc12-i386'  , project: project2.path },
    { type: 'target', name: 'MSStd', environment: 'msvc12-i386'  , project: project.path },
    { type: 'target', name: 'DependencyTestTarget', environment: 'msvc12-i386'  , project: project2.path }
  ]);
  f.continue();
}

export const tests = [
  { name: 'load valid simple'         , test: load_valid_simple          },
  { name: 'load invalid'              , test: load_invalid               },
  { name: 'build graph'               , test: build_graph                },
  { name: 'files'                     , test: files                      },
  { name: 'components'                , test: components                 },
  { name: 'with external dependencies', test: with_external_dependencies },
];

redpajama_set_name: RedPajamaGithub


text:
3D Printers and Machinery
The 15 Best 3D Printers of 2021
The 8 Best Laser Levels of 2021
The 10 Best Air Compressors of 2021
The 8 Best Angle Grinders of 2021
The 10 Best Cordless Phones of 2021
The 10 Best Ethernet Switches of 2021
The 8 Best Electric Scooters in 2021
The 6 Best USB Microscopes of 2021
The 8 Best Geiger Counters of 2021
The 15 Best USB Hubs of 2021
The 10 Best Laptop Cooling Pads of 2021
The 10 Best Backlit Keyboards of 2021
The 8 Best SD Card Readers of 2021
The 12 Best Motherboards of 2021
The 10 Best Power Supplies of 2021
The 10 Best Uninterruptible Power Supplies (UPS) of 2021
Health, Household and Care
The 8 Best Bunk Beds of 2021
The 10 Best Futons of 2021
The 9 Best Vinyl Cutting Machines of 2021
The 11 Best Embroidery Machines of 2021
The 6 Best Heat Press Machines in 2021
The 10 Best Paint Sprayers of 2021
The 8 Best Airbrushes for Cake Decorating in 2021
The 7 Best Panini Presses of 2021
The 7 Best Pressure Canners of 2021
The 12 Best Portable Air Conditioners of 2021
The 8 Best Rechargeable Hand Warmers of 2021
Audio & Musical Instruments
The 10 Best Boomboxes of 2021
The 10 Best Sound Cards of 2021
Monitors and TVs
The 6 Best 80-85 Inch TVs of 2021
The 10 Best 40 Inch TVs of 2021
The 10 Best 4K Monitors of 2021
The Top 10 Torrent Sites of 2021
Posted July 4, 2018 January 4, 2021 Eduard
Please share my content!
Top 10 Torrent Sites
Find out which are the best torrent sites
Torrent sites seem to suffer from instability issues nowadays. A classic example is 'The Pirate Bay' which very often disappears suddenly and reappears as if nothing's happened. Others like the popular Torrentz.eu website simply chose to terminate all services. Despite these unfortunate events, the BitTorrent ecosystem still flourishes with more and more torrent sites trying to make names for themselves.
In this article, we are going to take a closer look at those sites as well as old favorites. Torrent sites represent valuable resources for P2P users. If you want to find the best content shared through torrent files, you need to extend your browsing habits to more websites. And not just any other torrent sites, but the best providers of high-quality torrents. Finding exactly what you need is easier and more efficiently done when you know precisely where to look.
It's also worth considering the security of torrent sites. Some such websites might not be as user-friendly to use compared to others. They can be plagued with malicious ads and sometimes the torrent files can be fake. This is why you need to be careful and only download verified files from trusted uploaders and sites with solid reputations. Here is a selection of the best torrent sites in terms of everything. Things like safety, interface, types of files found and how many torrents are indexed on the site matter. Although this list could change over time, it's safe to say that at this time, these 10 are the best torrent sites to use.
1. Torrents.me
Why restrict yourself to a single torrent site when you could browse all the popular ones at once? This is what the ones behind the 'Torrents.me' website probably had in mind when creating this torrent site. You can use its powerful search engine to find torrents in a convenient dashboard interface.
When there are no results on a particular site, no problem, just switch to another. Your chances of finding what you're looking for will definitely rise considerably if you use this kind of meta-torrent site. It allows you to browse the most popular and trusted sites for torrents, most of which are also included in this article.
Because some sites are blocked in certain regions, this website will also allow you to use a proxy feature when searching, so you can gain access and unblock them. Another handy ability is to customize the dashboard and include other torrent sites enabling you to create the ultimate torrent downloading experience. 'Torrents.me' simplifies your torrent searches considerably so this is why it represents our number one recommendation.
2. 1337x
With a well-maintained torrent database and a very intuitive interface, 1337x became very popular in recent times. The site is organized with browsing sections to quickly find the latest games, movies, and music torrents. It's a good choice for finding more obscure content and it scores high in terms of safety considering the dedicated group of uploaders that deliver the newest high-quality torrents.
3. RARBG
RARBG was initially a Bulgarian tracker, but nowadays has become extremely popular due to its high-quality video specialization. It has expanded greatly and it's currently considered one of the best torrent sites if you're looking for high-resolution movies and other videos.
Its database is not as comprehensive as some others on this list, but the particular attention to quality makes RARBG a leading force in the world of torrent sites ever since its inception in 2008.
4. Torrentz2
When the original 'Torrentz.eu' site voluntarily announced its termination, a clone site quickly appeared to take its place. It was named 'Torrentz2' and despite a rough start initially, it has slowly become a worthy replacement. This is a meta-torrent indexer enabling users to browse multiple torrent sites simultaneously.
It's somewhat similar to 'Torrents.me', but it doesn't index that many sites. Still, it manages to create a much simpler interface and all the search results are in one place. The site doesn't offer magnet links or torrent downloads itself as it will just redirect you to another torrent site that does. Overall, Torrentz2 is a handy tool for any Peer-to-Peer enthusiast.
5. The Pirate Bay
The infamous Pirate Bay will always manage to find a spot on any 'top torrent sites' list. It's definitely the most popular and resilient torrent site out there. The fact that it's found in the middle of this list can be explained quite easily. It's still a good torrent site, but not the best.
The Pirate Bay is a classic with its simple and efficient interface, but there are some issues to consider. The site is often offline and unreachable from certain regions and sometimes even when it seems to be alive and well it works slower than other sites.
There are users who profit from the popularity of the site to spread malware through fake torrents, so you need to be extra careful when browsing. It's strongly recommended to choose only torrents from trusted and verified uploaders. They usually have green or pink colored skulls next to their usernames. While it does have some flaws, The Pirate Bay has many old and new torrents and can definitely cover your needs.
6. RuTracker
A very underrated site for downloading torrents is RuTracker, a Russian website that boasts a very organized selection of high-quality files. It has some slight drawbacks because you will need to register an account to use it properly and there's also the problem of everything being in Russian. With the help of Google Translate for web pages that can be solved though.
One thing that makes this torrent site stand out is the way it's organized and managed like a private tracker. The site is public and yet the uploading requirements are very strict. There are moderators that verify the uploads and overall the site has very high standards. It doesn't just allow anything like The Pirate Bay.
RuTracker is particularly great when it comes to music. You can find more obscure stuff and browse through genres with ease to seek out the newest releases. All in all, RuTracker deserves more recognition, especially if you're looking for FLAC music and other high-quality torrents. It gives off a feeling of community as it also has a very active forum (unfortunately only Russian speakers are allowed).
7. Zooqle
Zooqle is a relatively new torrent site which was brought to life with the idea of bringing together the latest releases in the world of film and TV shows. Nowadays it started to branch out into other types of torrent files, so you're able to find games, music, applications, books, and others.
This website is particularly dedicated for cinema fans who like to stay up to date with the newest TV releases. You can create an account for this purpose as the site allows you to subscribe to your favorite shows and get RSS feeds. Finding movies in the right quality per size ratio is a breeze too as the site is nicely organized in that regard.
With over 3 million verified torrents, Zooqle keeps ascending in popularity. It has great potential as a torrent website so this is why it was included in this list.
8. iDope
Another recent arrival on the torrent scene is iDope which has managed to increase its audience quite a lot ever since it appeared in 2016. This torrent search engine was initially created when the highly popular Kickass Torrents website has been closed.
It didn't manage so far to attain that level of popularity, but the library of indexed torrents is quite varied and there's a distinct lack of annoying pop-ups and ads you often see on similar sites. Besides the capable search tool, the site also has two easily-accessible sections for the most popular and recent torrents currently available. iDope works well and is safe to use. It can be said it makes a decent Kickass Torrents alternative.
9. Limetorrents
Although Limetorrents has an established reputation in the torrent business, it managed to stay under the radar for many P2P users so far. In this list, it manages to gain an honorable spot considering what a nice interface it has and thanks to its large collection of torrent files.
Whether it's games, TV shows or applications, this is a powerful website that you should definitely not overlook. You can make an account on the site to gain access to some additional benefits. If you're unsure what to watch or download next, there are helpful top and latest torrents sections.
10. Nyaa.si
The last torrent site worth mentioning is Nyaa.si which represents the continuation of the fallen anime torrent site Nyaa that went permanently down in 2017. Although the website is obviously geared towards anime fans as it provides exclusive content for them, its rising popularity makes it one of the best torrent sites out there.
Nyaa.si is a highly comprehensive website offering all kinds of anime content including TV shows, movies, music, games, and more. It will take some more time to reach the status of a full Nyaa replacement, but all in all, Nyaa.si represents an invaluable resource for some. This niche site is recommended considering how it receives constant updates.
Did you find our article helpful? Then you might also be interested in our articles about The 9 Best Torrent Downloader Softwares and the 8 Free Driver Updater Tools.
⟵The 9 Best Torrent Downloaders of 2021
How to Delete Your Yahoo Account in 4 Easy Steps⟶
8 Free Remote Access Softwares of 2021
7 Best Free Video Editing Softwares of 2021
10 Free Data Recovery Softwares of 2021
How to Delete Your Yahoo Account in 4 Easy Steps
Renea Reinsfelder on How To Find Your Windows (10, 8, 7) Product Key
Jan on The 6 Free Fax Services
Courtney on The economics of 3D Printers and brands which took over the market
Sebastian G on The economics of 3D Printers and brands which took over the market
Theordore Winston on What do you need to know about 3D printing?
3D Pinters
Drivers and Software
AMAZON DISCLOSURE:
We may receive commissions through certain links you click on our site. This includes but is not limited to Amazon and Walmart US LLC.


Over the last few years, the supply chain has emerged as a primary attack vector for both criminal gangs and nation-state groups. Attackers are compromising often smaller and less well-defended suppliers in order to gain access to larger primary targets. This problem is getting worse with the increasing digital transformation of business around the world -- more companies are dealing electronically with each other than ever before.
Recorded Future has now released an extension to its threat intelligence platform: a Third-Party Risk module.
"We believe that digital transformation is increasing risk for organizations on two fronts," explains Levi Gundert, VP of intelligence and risk: "firstly, the number of connected partners organizations have; and secondly, the attack surface for each one of those partners. This illustrates a clear need for more dynamic and transparent risk analysis, so security teams are better informed about their threat landscapes."
The Third-Party Risk module is, suggests Recorded Future, a natural extension of its primary threat intelligence service -- providing its customers with a risk posture score for their existing and potential third-party suppliers. The company already has risk analytics for around 100,000 companies. This number is growing daily. About 70% are public companies, and 30% private companies.
In an associated blog post today, Matt Kodama (VP of product) gives further details. The service comprises tens of thousands of company intelligence cards, providing a single source to intelligence-generated supplier risk scores. These risk scores are dynamically generated from real-time data with transparent sourcing and risk rules. Access to the risk data is from within the Recorded Future threat intelligence platform, allowing security teams to rapidly see and respond to new threats in their third-party suppliers.
"Recorded Future uses open, closed, technical, and proprietary internet data to create analytics mapped to a company's infrastructure and corresponding exposures," Gundert told SecurityWeek. "Specific data points considered in a risk score could include alleged company credentials discovered in criminal forums, number of typosquat domains, malware traffic from a company's network to a known Command and Control (C2) server, and/or a count of internet facing systems with known vulnerabilities."
"By analyzing real-time threat activity targeting third parties, in addition to third-party infrastructure and vulnerability data, we're providing a more complete view of risk. This comprehensive outlook allows our clients to understand current weaknesses and better evaluate the potential impact of emerging threats to their organization." added Matt Kodama.
The dark web footprint analyzes incidents of a company's name within the criminal forums -- the more frequently it is found, the higher the risk of abuse or attack. Leaked data from a potential third-party client would be particularly concerning. It could indicate that the company has already been compromised, and that criminals might have access to important credentials. "A spearphishing attack that seems to come from a trusted business partner," warns Recorded Future, "is far more compelling than one from a stranger."
Domain abuse finds and reports on typosquat domains. Their existence could indicate an ongoing or future phishing attack against the third-party. If successful, a 'stepping stone' attack against Recorded Future's customer could be launched.
Third-parties that use web technologies are particularly at risk -- especially if those technologies are unpatched. The risk severity can be determined by the potential impact of an attack, and any indication that a vulnerability is being actively exploited.
The IT policy violation risk indicator examines an infrastructure for indications of misuse or abuse. For example, an IP address hosting a command and control server indicates that the company is more susceptible to attack and may pose a risk to companies they do business with.
"For a long time, we described threat intelligence as ëgoing beyond the wall' -- providing a view of all threats developing outside the confines of an organization. But that's really just the first half of the story -- and it's not enough to protect a diverse ecosystem," explains Christopher Ahlberg, CEO and co-founder of Recorded Future. "We know that digital transformation is increasing cyber risk. We also know the only way to counteract this growing threat is to better understand how partner organizations impact our own threat landscapes. By offering Third-Party Risk as part of the Recorded Future Platform, we're helping organizations strengthen their own defenses and build healthy bonds between partners."
Boston, Mass.-based Recorded Future raised $25 million in a Series E funding round led by Insight Venture Partners in October 2017. This brought the total sum raised by the firm to $57.9 million.


POLY TILT-DUMPS - Extra thick molded polyethylene stands up to the daily rigors of constant hard use. Resists corrosion, grease and oil. Transports up to 2000 lbs. -- easy to clean. Features round tubular steel frames.
PORTABLE STEEL HOPPERS - Fork truck entry tubes make dumping into large containers easy. Foot operated caster lock is included. Rolls on 8 x 2" phenolic wheels. Weight capacity is 2000 lbs. FOB Shipping Point.


Treating knee osteoarthritis can be broken into two components. There's reducing the inflammation within the knee, and then there's getting all of the muscles and biomechanics right to take the pressure off the knee so that the same forces are not going through it.
In general, physical therapy can be very effective in getting the pain from arthritis to go away, and importantly, keeping it away. Essentially, it involves stretching and strengthening the muscles in the right way, such as strengthening the quadriceps, stretching the hip flexors, often stretching the ITP, these things help to unload the knee so that the knee has a chance to rest and recover itself.
By getting the biomechanics better, it also helps to take the pressure off so that the inflammation doesn't re-accumulate. Also, it's often important to look at the feet to make sure that the pressure is being dissipated appropriately. If people are hyperpronated or if their feet roll in, then sometimes a custom or over-the-counter orthotic can be very helpful as well.
Within physical therapy, there are many passive modalities that physical therapists sometimes employ. These include ultrasound, electrical stimulation, and manual manipulation. These sometimes can help with the symptoms and also help to take away some of the inflammation. A lot of people talk about weight loss – and for good reason. When people are overweight, for every extra pound that we put on, there's three extra pounds of pressure going through the knee. So certainly getting the weight under control can be very helpful in terms of taking the pressure off the knee.
And with that said, I think there is a very important point here to make, which is that sometimes I see patients and the first thing they say is, "I know, I know, I know, I have to lose weight." And while that may be true, to pin it all on that is a mistake, because it's very difficult to lose weight when it's hard to walk across the street because the pain is so bad. Exercise is such an important component of losing weight that sometimes you get yourself into a vicious cycle: your knee hurts so you stop moving, you put on weight so you put on more pressure on the knee, the knee hurts more and you move less. That can start spiraling downwards.
So the job of someone like me, with the kinds of interventions that I do with physical therapists and all the different healthcare professionals, one of the important things is to break that cycle. Sometimes just breaking the cycle (taking away the pain), allows the person to be more active, and a lot of the times the weight loss will take care of itself. Obviously, things like diet, nutrition, and overall exercise are very important, but if you can just take away the pain and break the cycle, the person will start moving better, the weight starts coming off and then you start spiraling in the right direction instead of the wrong direction.


How to test the volume control circuit? I use a 555 timer with a double potentiometer to change the frequency of an asymmetrical square-wave generator. So I found the capacitors "in" and "out" of the voltage controlled attenuator to be to small. Replaced them by 3 µF non polar ones.
A YT video shows the work in progress. It was a bit challenging to adjust the camera with my right hand and to do the rest with the left hand. So it's not for a movie award, but enjoy it anyway.
I've tried a few things lately with the volume control unit. The use of mono-flop or Schmitt trigger circuits to influence the initial part leads to plucking effects. However, a static effect that is not enough accelerated by the varying speed of my hand. Here is potential remaining yet for brain work.
In this context some thoughts to the walking bass effect. Pamelia Stickney said in a interview concerning plucking the hand outside but near the volume antenna, how I heard that out: "...how do you get the staccato and I thought much more efficient with the hand to move away from the antenna and use the thumb as a stopping place for the other fingers and then just control how slowly you want to open these fingers, bring down the sustain to silence, so you can choose how long you want your note to hold that you are plucking." This discribes the effect of an ADSR controller caused by her hand movements.
One more reason to spend more time learning to play the theremin before circuits are developed!
The problem with the theremin "walking bass" is that even when it is skillfully done, it is extremely "pitchy" but we don't notice it because it's all happening in a register where the human ear is less pitch sensitive. The bass line merrily bom-bom-boms along creating a wonderful illusion of an acoustic bass from the standpoint of timbre and amplification. It's a great theremin novelty effect and it impresses the hell out of people, but it is not a serious tool for music making.
It is interesting for me. The pitch in the bass range would be disturbed by the volume dynamic? Anyway, seems to be an artifact of ordinary theremines. But this play technique described could principally also be used in higher pitch ranges.
If a theremin is properly set up and played using a technique that avoids lateral movement of the pitch hand toward the volume antenna, there should be no interference with pitch from volume control.


Here's something to warm you up! You can now cast your vote in the annual New Jersey's Top Ten Beaches. The annual contest is back after taking a year off due to Hurricane Sandy.
The contest began in 2008 to encourage pride in our beaches. Wildwood, Wildwood Crest and North Wildwood have all come up winners in recent years..
You can cast your vote for your favorite beach and take the survey from now until April 30th. Winners will be announced on May 22nd.
The survey is made possible by the New Jersey Sea Grant Consortium and Richard Stockton College's Coastal Resource Center.


text:
Q: SQL Merge - How can I optimize this? Table A (table to merge into) has 90,000 rows
Table B (source table) has 3,677 rows
I would expect this to merge really quick but it's taking 30 minutes (and counting).
How can it be optimized to run faster?
ALTER PROCEDURE [dbo].[MergeAddressFromGraph]
-- no params

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
-- first add fids to the MergeFundraiserNameAddress table instead of the temp table?

SELECT fundraiserid, ein
INTO #fids
FROM  bb02_fundraiser

BEGIN TRAN;
MERGE BB02_FundraiserNameAddress AS T
USING
(
    select f.fundraiserid,
           n.addresslines,
           n.town,
           n.county,
           n.postcode,
           n.country,
           n.fulladdress,
           n.ein
    from MergeFundraiserNameAddress n
         join bb02_fundraiser f
         on f.ein = n.ein and f.isdefault = 1
    group by n.ein,
             f.fundraiserid,
             n.addresslines,
             n.town,
             n.county,
             n.postcode,
             n.country,
             n.fulladdress

) AS S
ON (T.fundraiserid in( (select fundraiserid from #fids where ein = S.ein)) )

WHEN MATCHED
    THEN UPDATE
        SET
              -- ADDRESS
              T.addresslines = S.addresslines
              ,T.town = S.town
              ,T.county = S.county
              ,T.postcode = S.postcode
              ,T.country = S.country
              ,T.fulladdress = S.fulladdress

;

DELETE FROM MergeFundraiserNameAddress

COMMIT TRAN;

drop table #fids

END
UPDATE
I was able to improve the stored procedure which now runs in just a few seconds. I joined on the temp table instead of the bb02_fundraiser table and removed the subquery in the ON clause.
I realize now that the Merge is not necessary and I could have used an Update instead, but I'm ok with this right now because an INSERT may be needed soon in a refactor.
UPDATED STORED PROCEDURE BELOW
IF OBJECT_ID('tempdb..#fids') IS NOT NULL
    DROP TABLE #fids
SELECT fundraiserid, ein
INTO #fids
FROM  bb02_fundraiser
where isdefault = 1

BEGIN TRAN;
MERGE BB02_FundraiserNameAddress AS T
USING
(
    select f.fundraiserid,
           n.addresslines,
           n.town,
           n.county,
           n.postcode,
           n.country,
           n.fulladdress,
           n.ein
    from MergeFundraiserNameAddress n
         join #fids f
         on f.ein = n.ein
    group by n.ein,
             f.fundraiserid,
             n.addresslines,
             n.town,
             n.county,
             n.postcode,
             n.country,
             n.fulladdress

) AS S
ON (T.fundraiserid = S.fundraiserid)

WHEN MATCHED
    THEN UPDATE
        SET
              -- ADDRESS
              T.addresslines = S.addresslines
              ,T.town = S.town
              ,T.county = S.county
              ,T.postcode = S.postcode
              ,T.country = S.country
              ,T.fulladdress = S.fulladdress

;

DELETE FROM MergeFundraiserNameAddress

COMMIT TRAN;

IF OBJECT_ID('tempdb..#fids') IS NOT NULL
DROP TABLE #fids

A: See below if this statement alone does the job for you.
UPDATE T
SET    T.addresslines = n.addresslines
      ,T.town = n.town
      ,T.county = n.county
      ,T.postcode = n.postcode
      ,T.country = n.country
      ,T.fulladdress = n.fulladdress
    from MergeFundraiserNameAddress n join bb02_fundraiser f
    on f.ein = n.ein and f.isdefault = 1
    INNER JOIN  BB02_FundraiserNameAddress T
    ON T.fundraiserid = f.fundraiserid AND T.ein = f.ein
group by n.ein,
             f.fundraiserid,
             n.addresslines,
             n.town,
             n.county,
             n.postcode,
             n.country,
             n.fulladdress

As other users has mentioned in your comments, why use MERGE statement when you're only updating records. MERGE statement is used when you are doing multiple operation such as UPDATE , DELETE and INSERT.
Since you are only UPDATING records there is no need for merge statement.
Reason For Slow Performance
Since you are getting all the records in a Temp table and then joining it with other tables and not creating any indexes on that Temp table, The absence of any indexes will hurt the query performance.
When you do a SELECT * INTO #TempTable FROM Some_Table it will bring all the data from Some_Table into a Temp table but not the indexes. you can see your self by running this simple query
select * from tempdb.sys.indexes
where object_id = (select object_id
                   from tempdb.sys.objects
                   where name LIKE '#TempTable%')

A: also why delete when you can truncate.
truncate table  MergeFundraiserNameAddress


text:
Published on Welcome to Ekklesia (http://www.ekklesia.co.uk)
Home > Methodist Vice-President to be Co-President of Housing Justice
Methodist Vice-President to be Co-President of Housing Justice
Dismiss this ad
Rachel Lampard, Team Leader of the Joint Public Issues Team and Vice-President of the Methodist Conference, has been appointed as a Co-President of the charity Housing Justice.
Since 2008, Rachel Lampard has been the Team Leader of the Joint Public Issues Team, an ecumenical collaboration between the Methodist Church, the Baptist Union, the United Reformed Church and the Church of Scotland, enabling the denominations to campaign and speak out on issues of poverty, climate change and peace.
At the Methodist Conference in 2015, she was elected to serve as Vice President of Conference, alongside the Rev Roger Walton during 2016 - 2017.
Rachel Lampard is no stranger to the work of Housing Justice. In the 1980's, she served as policy and campaign lead for the Catholic Housing Aid Society, which became Housing Justice in 2003. Her appointment, joining Cardinal Vincent Nicholas, the Archbishop of Westminster, comes at the end of the Jubilee Celebrations for the Catholic Housing Aid Society.
As part of her new role of President, Racjel Lampard visited the Housing Office, based at the South London Mission at Bermondsey Central Hall to meet staff and volunteers of the charity.
Speaking of her new role, she said: "I have seen how homelessness and poor housing damages people's lives. Churches have long been at the forefront of responding by offering help to those affected, developing innovative solutions, and campaigning for change.
I am delighted and honoured to have been appointed as a President of Housing Justice and look forward to continuing to support their work, and the work that is done by churches, of all denominations, around the country."
Welcoming this appointment, Housing Justice Chair, the Rt Rev James Langstaff said: "Throughout 2016, Housing Justice has been celebrating the birthday of the Catholic Housing Aid Society, which laid roots to what Housing Justice has become. We are grateful to all those who worked so hard to enable the current organisation to become what it has.
"I warmly welcome Rachel's appointment as a President of Housing Justice because she is no stranger to championing the cause of the benefit that churches can and do make in practical action to those who are homeless or in housing need."
He concluded: "Inviting Rachel to take up this important role will not just maintain the link to our heritage as a charity, but also be an example of our continued commitment to working ecumenically with organisations such as the Joint Public Issues Team as well as the denominations which they represent."
* Housing Justice http://www.housingjustice.org.uk/ [1]
* Methodist Church in Britain http://www.methodist.org.uk/ [2]
[Ekk/4]
Although the views expressed in this article do not necessarily represent the views of Ekklesia, the article may reflect Ekklesia's values. If you use Ekklesia's news briefings please consider making a donation to sponsor Ekklesia's work here [3].
Source URL: http://www.ekklesia.co.uk/node/23637
[1] http://www.housingjustice.org.uk/
[2] http://www.methodist.org.uk/
[3] http://www.ekklesia.co.uk/about/donate


Employer wellness programs are intended to encourage healthier lifestyles or prevent disease among workers. These programs oftentimes use health risk assessments and biometric screenings to help determine a worker's health risk factors, like body weight, cholesterol and blood pressure levels. Some employers offer financial and other incentives for employees who participate in these programs or achieve specified health outcomes.
On April 16, 2015, the U.S. Equal Employment Opportunity Commission ("EEOC") issued a proposed rule to provide much-needed guidance to employers and employees about how employer-sponsored wellness programs offered as part of an employer's group health plan can comply with the Americans with Disabilities Act ("ADA"), the Health Insurance Portability and Accountability Act ("HIPAA") and the Affordable Care Act ("ACA").
The EEOC's proposed rule makes clear that wellness programs are permissible so long as they are voluntary and reasonably likely to promote health or prevent disease. Employers may not use wellness programs to discriminate based on disability and may not deny health coverage or discipline employees for refusing to participate in the program. For those employees choosing to participate in a wellness program, employers may offer incentives up to 30 percent of the total cost of employee-only coverage. Under the proposed rule, medical information collected as part of a wellness program may be disclosed to employers only in aggregate form that does not reveal the employee's identity and must be kept confidential.
Connell Foley's labor and employment law attorneys will continue to track this proposed rule and provide further legal updates on the status of employer wellness programs.


text:
Samadhi (Sanskrit, समाधि,  "Versenkung, Sammlung", wörtlich "fixieren, festmachen, Aufmerksamkeit auf etwas richten") ist ein Begriff des Hinduismus, Buddhismus, Zen, Jainismus, Sikhismus und anderer indischer Lehren. Samadhi bezeichnet einen Bewusstseinszustand, der über Wachen, Träumen und Tiefschlaf hinausgehen und in dem das diskursive Denken aufhören soll. Es wird als ein völliges Aufgehen in dem Objekt beschrieben, über das meditiert wurde. In der Bhagavad Gita wird er zu Beginn des  zweiten Kapitels genannt. Samadhi ist das 8. Glied (anga) des Raja Yoga (bzw. Ashtanga Yoga oder Kriya Yoga) nach Patañjali.

Stufen des Samadhi

Es werden zwei Arten von Samadhi unterschieden: der bewusste Samadhi-Zustand wird Samprajnata genannt, der überbewusste  Asamprajnata. Beim bewussten Samadhi, auch als Savikalpa Samadhi bezeichnet, bleibt die Dualität zwischen betrachtendem Geist und dem höheren Selbst (Brahman, Purusha) bestehen. Bei dieser Art des Samadhi nimmt der geistige Prozess, und hier vor allem die Schwingungen des Mentalen Bewusstseins (citta-vritti), die Form des Brahman an. So soll die mentale Schwingung im Brahman zur Ruhe kommen, sich doch ihrer selbst immer bewusst bleiben.  Beim überbewussten Samadhi, auch als Nirvikalpa Samadhi bezeichnet, soll sich das geistige Bewusstsein derart mit dem höchsten Selbst (Paramatma) vereinen, dass sich die Unterscheidung zwischen Erkennendem, Erkenntnis und Erkanntem verflüchtigt, wie Wellen im Wasser verschwinden oder sich wie Schaum im Meer auflöst.
Dieser Samadhi unterscheidet sich vom ersten dadurch, dass das Bewusstsein nicht mehr in das normale mentale Ich-Bewusstsein zurückkehrt. Die Einheit des Bewusstseins mit dem inneren Erleuchtungsbewusstsein des Paramatma-Purusha bleibe bestehen. Deshalb gilt erst dieser Samadhi als wahre Erleuchtung.

Der spirituelle Lehrer Paramahansa Yogananda dagegen unterscheidet in seiner Bhagavad-Gita-Interpretation drei Stufen von Samadhi:
Die erste Stufe, Jada Samadhi, sei ein unbewusstes kataleptisches Stadium, spirituell nutzlos, weil es nur zeitweise das Bewusstsein und die Aktivität des Ego aufhebe. Jada Samadhi, oder unbewusste Trance, wird durch Methoden der physischen Kontrolle, indem man den Verstand leer hält oder durch das Drücken auf bestimmte Drüsen, erzeugt. Dadurch werde jedoch weder Weisheit erlangt noch Karma vernichtet. Im Zustand des Savikalpa Samadhi jedoch seien Aufmerksamkeit und Lebenskraft von den Sinnen völlig abgezogen und identifizierten sich bewusst mit dem immer frohen Geist. In diesem Zustand ist die Seele vom Ich-Bewusstsein befreit und wird sich des Geistes bewusst, in dem alles Geschaffene aufgeht. Der Körper ist in einem trancegleichen Zustand, das Bewusstsein jedoch  voll aufnahmefähig für die glückselige Erfahrung im Inneren. Schließlich, im fortgeschrittensten Zustand, Nirvikalpa Samadhi, erkenne sich die Seele mit dem Geist als eins. Das Ich-Bewusstsein, das Seelenbewusstsein sowie der Geistozean werden alle als zusammen existierend erkannt. In Nirvikalpa sei sich die Seele gleichzeitig des Geistes im Inneren und der äußeren Welt bewusst. Der göttliche Mensch in diesem Zustand soll seinen materiellen Aufgaben und Tätigkeiten nachgehen können, ohne seine Einheit mit Gott zu verlieren.

Der Raja Yoga beschreibt einen Stufenpfad zur Erleuchtung, der seinen ersten Höhepunkt im Ishvara-Samadhi hat. Dieser Samadhi gilt als spiritueller Bewusstseinszustand im bis dahin durch Meditation vorbereiteten Körper. Der so gereinigte Körper stehe nun unter der Kontrolle des Geistes und erfahre im Samadhi eine tiefe Ruhe und Entspannung. Auf den Ishvara-Samadhi, die Stufe 8 des Raja Yoga, folgen der Savikalpa-Samadhi und der Nirvikalpa Samadhi, die wahre Erleuchtung und Vereinigung mit dem höchsten Atman, dem Paramatma-Purusha und dem Verlöschen des Ich-Gefühls. Erfahrungen des inneren Lichtes habe der Schüler schon auf den mittleren Stufen des Raja-Yoga, erst höhere Samadhistufen seien mit Erfahrungen des kosmischen Bewusstseins verbunden. Weitere Samadhi-Stufen zum Meister werden in den Yogasystemen nicht offen beschrieben.

Samadhi im Yogasutra des Patañjali
Patañjali hat das Yoga-Wissen seiner Zeit in konzentrierten Versen zwischen 200 vor und 400 nach Christus zusammengefasst. Dabei wird Samadhi der erste und höchste Schritt (prathamah samadhi padah) des aus 8 Gliedern (anga) bestehenden Yoga (ashtanga yoga) genannt. Im Yogasutra 1,7–23 und 3,3  finden  sich Aussagen zu dem Begriff Samadhi.

Eine andere Aussage lautet:
Und weiterhin heißt es:

Samadhi im Buddhismus

Auch als "Einspitzigkeit des Geistes", "Sammlung", "Konzentration" oder "Einigung des Herzgeistes" bezeichnet. Samādhi bildet zusammen mit Weisheit (prajna) und Tugend (sila) den achtfachen Pfad im Buddhismus. Der Bereich "Konzentration" setzt sich aus rechter Achtsamkeit (samma sati) und rechter Sammlung (sammā samādhi) zusammen. Die rechte Sammlung orientiert sich an den ersten vier Versenkungsstufen (jhana) und kann weiter eingeteilt werden in angrenzende (upacāra) Sammlung, das heißt ohne eine der Versenkungsstufen und in volle (appanā) Sammlung, mit einer der Versenkungsstufen. Bei der rechten Sammlung lässt die Unruhe nach, der Herzgeist ist geeint und beruhigt sich, die Hemmnisse (nivarana) sind abwesend. In traditionell buddhistischen Meditationstechniken richtet man zum Beispiel die Achtsamkeit auf ein Meditationsobjekt wie den Atem, um den Geist zu sammeln und die Versenkungen mit Körper und Geist zu erreichen.

Sonstiges
Mahasamadhi (großer Samadhi) ist das Hindi-Wort für das bewusste Verlassen des physischen Körpers eines Yogi bei seinem Tod. Der Begriff Samadhi bezeichnet auch die Grabstätte eines Yogis.

Als "Samadhi" bezeichnete man auch die Praxis des Lebendigbegrabenlassens als Zeichen der Loyalität zu einem Guru o. ä. Auf Veranlassung der britischen Gesandten, die dies nicht mit ihren puritanischen Moralvorstellungen vereinbaren konnten, erließen die Herrscher einzelner Fürstenstaaten ab Ende der 1840er Jahre Gesetze, die die Bestrafung Beteiligter vorsahen. Tatsächlich umgesetzt wurden diese erst nach 1860, als auch die jeweiligen Feudalherren (jagir) mit bestraft wurden, in deren Dörfer solches geschah.

Siehe auch
 Erleuchtung

Einzelnachweise

Hinduismus
Yoga
Zen

redpajama_set_name: RedPajamaWikipedia


International House Trust is delighted to announce the appointment of Mark Rendell as Chief Executive of International House London with effect from January 2019.
Mark was Principal of St Giles International London Central for the past seven years. He has raised the organisation's profile and inspection results, developed its strategic direction, while securing a sound financial performance and stable management team.
Previously, Mark has had a highly successful and varied career in the English Language Teaching profession with wide experience outside the UK. He worked as Deputy Chief Executive for English UK, and before that for EF English First in a number of roles based in Poland, Saudi Arabia and then China. Academically Mark has a BA in English and History, Trinity Licentiate Diploma in TESOL and an MSc in ELT Management.
Mark brings strong industry knowledge and a wide range of contacts to International House. In particular, he is Vice Chair of English UK and a board member of the British Council's Accreditation UK. Through his executive and non-executive roles at English UK, Mark has a good appreciation of the charitable values and objectives of International House Trust.
IHWO welcomes Mark to his new role and looks forward to working with him in the future.
IH Newcastle Celebrates 40th Birthday!


LET'S GET GIRLY! 2-Pack Pom Pom Bib Gift Set for Girls. Made in the USA from premium cotton muslin imported from Japan. Playfully sophisticated and super fun! Lightweight, breathable, durable, luxuriously soft. Makes a fabulous baby shower gift! Extra Small – Sized to fit most babies ages 0 to 4 months (see A NOTE ABOUT SIZE below).
Extra Small 2-pack Pom Pom Bib Gift Set for girls. Made in California from premium 100% cotton muslin imported from Japan. Durable, breathable, absorbent, lightweight, luxuriously soft. Adjustable neck with snaps. No scratchy velcro to irritate your baby girl's sensitive skin.
WHAT MAKES OUR BABY GIRL BIBS SO SPECIAL?
A NOTE ABOUT SIZE: While our baby girl bibs are adjustable, they may fit snug on some babies. This is an Extra Small bib that fits most babies ages 0 to 4 months on average.


The Houston Independent School District has launched a new series of videos to help explain different aspects of the 2012 bond program that will renovate, replace or rebuild 40 schools across the city.
The short videos, designed for both web and TV, cover topics such as procurement and insurance on bond projects, as well as the benefits of building schools that are environmentally sustainable. The goal is to give viewers a quick snapshot into how the district is moving forward with its $1.89 billion building plan.
Alexis Licata, Officer, Business Logistics & Purchasing of HISD's Office of Supplier Diversity, discusses how the district is trying to increase Supplier Diversity with its program for Minority and Women-Owned Businesses.
"We want to assist Minority and/or Women Businesses [in obtaining] contracts," Licata says in the video. "Whether that's obtaining as a prime supplier with HISD or obtaining business as a subcontractor to do business with HISD."
HISD aims to provide equal access to procurement opportunities for all qualified vendors and suppliers, including M/WBEs. Additionally, the district's Purchasing Department helps companies navigate the process of doing business with HISD.
Other video topics include insurance and bonding, the planning and design of new schools, and green building.


text:
Twitter fined $546,000 in December 2020 by European Data Protection Authority for 2019 Breach Notification Violations
By Kathleen Porter on January 5, 2021
Posted in Enforcement + Litigation, International Privacy Laws
The Irish Data Protection Commission (DPC) fined Twitter 450,000 euros (about US$546,000) for failing to timely notify the Irish DPC within the required 72 hours of discovering a Q4 2018 breach involving a bug in its Android app, and also for failing to adequately document that breach. The bug caused some 88,726 European Twitter users' protected tweets to be made public.
The case is notable because it is the first fine levied against a U.S. technology company in a cross border violation under the EU's General Data Protection Regulation's (GDPR), which went into effect in 2018. Under the GDPR, the member state of the foreign company's EU headquarters takes the lead on inquiries on behalf of all the EU's 27 member states. Because Twitter EU's headquarters are in Ireland, the DPC took the lead on the investigating the 2018 breach incident, which Twitter attributed to poor staffing during the holidays.
Pursuant to Article 60 of the GDPR, the Irish DPC submitted its draft decision last May to the other EU DPAs. In the draft decision, the Irish DPC found Twitter's violations to be negligent, but not intentional or systematic. Other member states disagreed with the Irish DPC draft decision, due in part to the small proposed fine. The Irish DPC's proposed fine was only a small fraction of the maximum fine amount permitted, which under GDPR is up to 4% of a company's global revenue or 20 million euros ($22 million), whichever is higher. Twitter's global annual revenue was reportedly about $60 million in 2018.
The Irish DPC responded to the criticisms from other member states by stating that its proposed fine under the GDPR was an "effective, proportionate and dissuasive measure" and brought the matter before the European Data Protection Board, which upheld most of the decision but directed Ireland to increase the fine.
The Twitter case is just the first of many cases involving U.S. companies before the Irish DPC, as there are some 20 other pending inquiries. Ireland also serves as the EU headquarters for U.S. technology companies such as Facebook, Apple and Google.
The decision is available here.
Tags: Apple, dpc, EU's General Data Protection Regulation, Facebook, GDPR, Google, Irish Data Protection Commission, twitter
Kathleen Porter
Kathy Porter's practice straddles the areas of intellectual property, business transactions, trade regulation, and Internet law and includes import/export control issues, such as compliance and enforcement, competition, privacy, and data security. She counsels businesses on the development and implementation of data security and…
Kathy Porter's practice straddles the areas of intellectual property, business transactions, trade regulation, and Internet law and includes import/export control issues, such as compliance and enforcement, competition, privacy, and data security. She counsels businesses on the development and implementation of data security and privacy practices to comply with the patchwork of laws and rules applicable to the collection, use, safeguarding, sharing, and transfer of protected or personal data. She regularly structures arrangements with promoters, marketers, website exchanges, and other third parties for the purchase, sale, sharing, and safeguarding of personal data. Kathy prepares and negotiates representations, warranties, and indemnities regarding personal or protected data and privacy and data practices. She also assists clients with privacy audits and works with third-party certification organizations to obtain certification of companies' privacy practices. She guides clients through internal investigations to assess and address notice and other obligations regarding privacy breaches. Kathy often works closely with our litigation attorneys to manage external investigations such as those by federal or state regulators. Read her rc.com bio here.
Read more about Kathleen Porter
France Fines Discord under GDPR
Biden's Executive Order Implementing New EU-U.S. Data Privacy Framework to Replace Privacy Shield
Irish DPA Hits WhatsApp with $266M Fine for Alleged GDPR Violations


This section is a composite of several messages to bionet.chlamydomonas and personal communication.
If they are swimming but not mating, consider lower the density of cells (less than 10^6/ml is best for difficult maters). Make sure you made the gametes in strong light. We find that gametogenesis can take as little as 4 hours (in distilled water) but overnight (in your favorite medium without nitrogen) also works.
I have pieced together procedures from various sources (all personal communications) — Lib Harris (also source book), Pete Lefebvre, Bill Snell, and Susan Dutcher — for mating Chlamy that are working routinely for us and accomodate cw- and pf strains as well as strains with various requirements such as arginine or nicotinamide. There is probably much room for modification, e.g. medium, light intensity, temperature, etc.
1. Have on hand at all times lawns on TAP (tris-acetate-phosphate with 8 mM ammonium) supplemented with 0.4% yeast extract, 2 mM arginine, and 10 mM MOPS (1.5% agar unless otherwise stated) = "rich plates". pH is 6.8 and the result of using acetic acid (1 ml per liter) instead of acetate, and additional sodium hydroxide (about 1.4 ml of 4M per liter). MOPS helps to control pH. Tris has a pK of about 8, and with it as the only buffering agent the medium tends to rise to that value and be toxic. MOPS has a pK around 7 (but is twice as expensive). Arginine is added to make sure that arg- strains have enough, and it can be omitted. Yeast extract provides supplements for some of the "standard" mapping strains (e.g. CC2645) and also helps reveal contamination in cultures (but also encourages it). The lawns are grown at room temperature (20C) under dim light and are ready in 5 days; other temp and lighting conditions will probably work equally well, but growth time will vary accordingly. These stocks are replaced every two weeks, but may be useful longer than that, especially if MOPS is used.
2. Scrape off about 1/3 of the lawn and suspend in 1.0 ml N-TAP (no MOPS or N source) in 24-well culture dish. Break up clumps with repeated pipeting. Use 0.5 ml to make lawn of cells on N-TAP containing 1 mM ammonium = "lowN plates". Incubate 2 days @ 25C under moderate light (2000 f-c fluorescent). Even arg- and nic- strains will survive and mate well. Plate remaining 0.5 ml on rich plates to refresh stocks.
3. Scrape off about 1/3 of lowN lawn and suspend in 4 ml half-strength N-TAP in 25-ml flask. Goal is about 2 million cells per ml. Shake in water bath at 25C under bright light (2, 150W flood lamps about 20 cm away) for 4 hours (2 hours may be enough; mating activity declines overnight but not to zero).
4. Mix 0.5 ml of each mating type in 1.5-ml sterile Eppendorf tube. Incubate stationary at 25C under bright light for appropriate time (see below). Rest tubes in the necks of 25-ml conical flasks filled with water and bathed with water to control temp. The appropriate time depends on strains. Very active walled strains such as CC124- and CC125+ can be plated in an hour or two, and longer incubation gives clumps that are hard to break up. cw- strains probably can also be plated fairly soon if the other strain mates well. For pf strains let mating go for an hour, spin cells just enough to pellet (2000 rpm, 1 min), remove most of the medium, vortex cells gently up in the residual medium, and let mating proceed another 3 hours to overnight as needed. Plate 0.5 ml portions.
In response to the inquiries about using IBMX for activating gametes of C. reinhardtii, folks should be aware that not all strains will activate with dibutyryl cAMP and IBMX. For example, we are unable to activate strain 21gr using this combination, and instead the cells resorb their flagella and otherwise look funny. On the other hand gametes activate perfectly well if we use 10 mM dibutyryl cAMP (50 mM stock is made in N-free medium and stored frozen) and 0.15mM papaverine. We use 100% DMSO as the solvent for the 15 mM papaverine stock solution. And we warm the DMSO to 60 degrees to get the papaverine in solution. Also, we always make up fresh papaverine, and we find it is important to use DMSO that is fresh. Thus we use DMSO sold in small vials by Sigma. We find that cell concentration is not very important but if money is an object, and one wants to use less dibutyryl cAMP, cells activate just as well at 2 x 107 cells per ml as they do at 2 x 109 cells/ml.
Save a little of your mating mixture, 0.5-1 ml or so, in a tube and leave it in bright light overnight, then check to see if there's a zygospore pellicle formed. This will look like a somewhat reticulate network around the walls of the tube, and on the surface of the liquid – try it with a wild type x wild type cross done in parallel, so you have something to compare it to. If you *don't* see a pellicle in your cw mating, then you have an advance indication that you may not have gotten good mating efficiency, and you can go ahead and repeat the cross. This saves waiting for maturation and visible zygotes on the plates.
In my experience, there are two types of problems with cw crosses. First, some of the cw strains have a high proportion of "bald" cells with no flagella. This is particularly true of the original Davies cw15 isolates, in the Chlamydomonas Genetics Center collection as CC-277 and CC-278. However, CC-400 and CC-406 are among the better ones in this respect, as they were selected originally for swimming and mating ability.
Second, we've had problems with crosses involving cw15 and arg7 in combination. In this case, mating may occur at reasonable efficiency, and zygospores are formed, but germination and product survival are very poor. I don't have a good workaround for this, and would be interested in hearing the experience of others.
I would add that if the cells on the plate are 6-7 days old, they should have depleted the nitrogen and be gametic so all you need is for them to be flagellated to mate them. I try to suspend cells by smearing them on the side of the tube then bringing medium up by the loopful to dissolve the smear (Paul Levine compared this to making a flour paste for gravy) and I don't vortex the cells because this can shear off flagella. I also look at my plates under a dissecting scope before wrapping them because frequently I can see zygotes by their relatively enourmous cell diameter.