text:
https://www.nationalgeographic.com/news/2018/03/caribou-herd-migration-drone-footage.html
Drones Are Spying on Caribou—for Science
Cutting-edge drone technology reveals the complex social dynamics of a migrating herd.
Drone Video Captures Caribou From the Air
A drone camera films a herd of caribou as they migrate in Western Canada. The footage offers a unique look at the behavior of individuals within the herd.
By Jennifer S. Holland
Flying cameras are giving biologists an all-encompassing view of migration that reveals how social interactions motivate the animals' every move.
Ecologists Andrew Berdahl, a Santa Fe Institute fellow, Colin Torney of the University of Glasgow, and colleagues flew drones to capture footage of Dolphin and Union caribou, a Canadian herd, as the animals crossed from Victoria Island to the Canadian mainland in the last stage of their fall migration.
Scientists have long pondered the dynamics of animal migrations, but they've had limited ways to study them. "Tracking collars revolutionized ecology by allowing researchers to quantify animal movement in a rigorous way," says Berdahl of the widely used GPS and radio-collar technology. But GPS doesn't capture the entire herd nor the dynamics between animals—providing only a snapshot, rather than a full-picture view.
A Better View
In order to truly understand migration in detail, he says, "we also need to know the social context driving movement decisions. And for that we need to see the behavior of [more] of the herd at the same time."
So in 2015, the team put cameras in the sky. They captured 12 hours and 40 minutes of footage of the running caribou herd (in short clips, limited by drone battery life). They then fed the information into a computer vision program that identified the unique caribou in each frame, then linked the animals' positions across frames to get their individual trajectories. This allowed the scientists to see each animal's behavior in relation its neighbors—visualizing what were "essentially traffic rules for caribou."
The footage revealed great variation in the interactions within the herd—who paid attention to whom, who stuck close to whom, and whose moves were most influential on others—illustrating the importance of age, sex, social status, and reproductive status in the animals' movement choices. For example, bull males were the least likely to take cues from others, while young calves tended to be copy-cats.
It also showed that caribou were more influenced by herd members in front of them than by those beside or behind them. This unequal influence supports traditional Inuit knowledge that as herds travel, a subset of lead animals effectively determines the path of the group. Presumably, Berdahl says, more experienced animals take up front positions that let them teach younger individuals the migration route.
"It's very exciting to be able to use new technology to obtain quantitative information about large animals [on the move]," says Iain Couzin of the Max Planck Institute for Ornithology in Germany, an expert on collective behavior not involved in the study. "These are very difficult data to get. Drones are opening up a new opportunity for us biologists, giving us access to systems that are incredibly hard to study."
The team's methods and findings are reported today in Philosophical Transactions of the Royal Society, B.
The study authors see their technique as a means to examine how social information is used at different life stages, how this behavior varies throughout the year, and whether some individuals are persistent leaders or followers.
"Every individual step an animal takes is a decision," says Berdahl, that depends on social cues in concert with environmental ones such as obstacles and incentives along the path. He hopes that zooming in on those cues can offer clues to the motivations and pressures that drive caribou movement, plus insight into the leadership dynamics of herds—especially as some are forced to forge new paths in a rapidly changing environment.
Meanwhile, there's great potential for drones to gather additional layers of information—such as high-resolution, 3-D images of the migration landscape—to put the animals' behaviors into even more detailed context. "These interactions don't happen in a barren environment," says Couzin, who, in his own research, looks forward to taking "a hybrid approach, using different technologies at different scales to get a more comprehensive picture" of animal movements in natural settings.
"This is a developing methodology that could be applied to many animal systems," Berdahl adds. "I'd be tempted to say it will revolutionize studies of this kind."


Download Gratuit JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , stelyos, muzica noua, cucurigu, waptrick, zippy, fisierul meu, trilu lilu, files, jean, de, la, craiova, am, plecat, candva, de, jos, ton, de, apel, single audio, melodie originala, download, mp3, album, video, versuri, lyrcis, song, audio , melodie , free , versuri , lyrics , song , vitan club , net , mp3 alese , ten28 , radio fly , fun music , thepiratebay , filelist , youtube , negativ, lyrics , song , asculta , online , download , descarca , gratis , hot files , mp3tube , mp3alese , torent , live , girlshare , fileshare , file host , filehost , hit zippyshare , hotfiles , radio edit , trak , play free.
Download JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Descarca JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Free Download JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Descarca Gratuit JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Fisier Online JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Asculta Online JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , YouTube JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Lyrcis JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Versuri JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) , Cauta JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) .
Pe aceasta pagina vei putea descarca melodia JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) in format mp3 gratuit. Pentru descarcare accesati linkul Descarca Mp3. Daca doriti sa ascultati melodia JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) dati click pe butonul play din player.
On this page you can download JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) mp3 free. For downloading this music click on Download File link. For playing JEAN DE LA CRAIOVA - AM PLECAT CANDVA DE JOS ( TON DE APEL ) online click on the play button on the mp3 player.


text:
Everybody should be able to help. Here's how you can make this project more
awesome:

1. [Fork it](https://github.com/gnugat/konzolo/fork_select)
2. improve it
3. submit a [pull request](https://help.github.com/articles/creating-a-pull-request)

Your work will then be reviewed as soon as possible (suggestions about some
changes, improvements or alternatives may be given).

Here's some tips to make you the best contributor ever:

* [Green tests](#green-tests)
* [Standard code](#standard-code)
* [Specifications](#specifications)
* [Keeping your fork up-to-date](#keeping-your-fork-up-to-date)

## Green tests

Run the tests using [phpspec](http://www.phpspec.net/):

    ./vendor/bin/phpspec run

## Standard code

Use [PHP CS fixer](http://cs.sensiolabs.org/) to make your code compliant with
Redaktilo's coding standards:

    php-cs-fixer fix --config=sf23 .

## Specifications

Konzolo drives its development using [phpspec](http://www.phpspec.net/):

    # Generate the specification class:
    phpspec describe 'Gnugat\Konzolo\MyNewClass'

    # Customize the specification class:
    $EDITOR tests/spec/Gnugat/Konzolo/MyNewClass.php

    # Generate the specified class:
    phpspec run

    # Customize the class:
    $EDITOR src/Gnugat/Konzolo/MyNewClass.php

    phpspec run # Should be green!

## Keeping your fork up-to-date

To keep your fork up-to-date, you should track the upstream (original) one
using the following command:

    git remote add upstream https://github.com/gnugat/konzolo.git

Then get the upstream changes:

    git checkout master
    git pull --rebase origin master
    git pull --rebase upstream master
    git checkout <your-branch>
    git rebase master

Finally, publish your changes:

    git push -f origin <your-branch>

Your pull request will be automatically updated.

redpajama_set_name: RedPajamaGithub


The death (more like the murder) of our master bedroom closet has already been documented, here.
The mess he caused extended beyond just the closet!
He's gloating! I swear, he's gloating. Or maybe marking his territory?
Look at that, he's trying to TAKE CREDIT!
Geeze, they did a study to answer that question?!
Bad kitty. Bad, bad kitty. And it's not the first time he's caused mischief around here!
Our weekend just found a project.
Let's just acknowledge this little tidbit of wisdom (sent to me from a co-worker) and move on, shall we?
I was sitting in the waiting room for my first appointment with a new dentist.
I noticed his DDS diploma on the wall, which bore his full name.
"Yes! Why, yes I did! I'm a Mustang," he gleamed with pride.
"You were in my class!" I exclaimed excitedly.
In a discussion with her, she explained that, because the credit card used to make the reservation (Elisabeth's) and the credit card used to pay the change fee (mine) were different, they had no record of the 13-digit number, as it is normally "attached" to the reservation. I was also told that CheapTickets, not United, was responsible for the itinerary through Canada (CheapTickets had insisted the exact opposite), and that they should have indicated the need for a passport… which they didn't – at least not on any communication I saw in forwarded communication from Elisabeth.
Rhonda very patiently explained United Airlines' position, and then, as a "gesture of good faith," she offered to e-mail me a voucher for $150 to be used on UA travel. Although I told her I'd prefer a credit to my Visa card, I accepted her offer and waited to see that voucher in my in-box. It's been three days and I just realized that, although Rhonda didn't state so explicitly, she's probably waiting to see this post before e-mailing me said voucher.
Well, we're still embroiled in a dispute – and oh my, it's getting dramatic. And infuriating. And ridiculous.
We have received your request in reference to ticket numbers 016 XXXX 732774, 016 XXXX 534585 & 016 XXXX 544949.
We appreciate you choosing United Airlines and hope that we can welcome you onboard again soon.
I am not sure what ticket numbers you are referring to, as I only know what changes were made to her ticket both before her travel day (she was sent an e-mail, indicating that her route had been changed) and on travel day when the agent found her another ticket.
Please elevate this to a superior and re-investigate your records per the description I submitted. Please get back to me ASAP! I have already posted the beginning of this story on my blog (and the resolution is being awaited) and I can also post on your Facebook page for all to see that I have been called a liar by United Airlines. I will not post anything today, in hopes of a speedy resolution to this matter.
Thanks. I look forward to hearing from you very soon.
We have received your request in reference to ticket numbers 016 XXXX 732774, 016 XXXX 534585 & 016 XXXX544949.
I'm sorry if you feel that we're not trying to assist you with a refund. Since the charge is still not reflecting in our system, we're unable to confirm this amount. As you have sent us a copy of the credit card charge, we do see that you were charged $150.00 on December 17, 2010.
However, we still cannot proceed with the refund as the charge number that reflects on the statement is incomplete. We need the 13 digit ticket number starting with 0164 to view the reservation in our system.
I find it ridiculous that you have proof that 1.) we were indeed charged $150 by United Airlines on 12/17/10 and 2.) the 10-digit charge number DOES start with 0164. (The number on the Visa statement is 0164066631.) I did call Visa, per your suggestion, and they confirm that they only have the 10-digit number that appears on the statement. As the ticket was electronic and the ticket number isn't indicated on e-mail correspondence, we do not have the 13-digit number.
BUT YOU DO, AND YOU KNOW IT.
It is a number generated by United Airlines! Visa only provides a portion of the number as a convenience for their customers. You have the full number.
To make our refund contingent upon us knowing a number that was never provided to us, but you have, is ridiculous! What are you disputing? That we paid the $150 to United Airlines on 12/17? We did, as proven by the statement below. That my story is falsified, for some reason? It isn't, I assure you.
Please escalate this to a superior and indicate a number I can call to speak directly to that person.
OK, now I am pulling my hair out! I am seriously ready to call our local news and see if they'll cover this in their consumer affairs reports!
This post recently cropped up on an English website. They linked to this and this page of my blog, showing Tom's amazing home handiwork, both the shed and beyond.
Now how do I get Sunset magazine to contact us?!
…can keep Shasta from her ball and her pleas for playtime.


For three days in July, 15 high school students from Watauga and Ashe Counties came together for a unique experience hosted by Appalachian State University's Department of Applied Design. The student participated in a design camp where they learned basic techniques in apparel design, industrial design and interior design.
Led by three faculty in the department, assistant professors Michael Rall and Dr. Anthony Wilson and associate professor Alex Poorman, the students spent a day immersed in each discipline working on projects themed around music. While on campus, the students learned industrial design techniques by creating musical instruments and accessories through hand renderings, practiced their interior design skills by crafting a scale bristle-board model of a musician's studio and tried their hand at apparel design by sewing a scaled clothing collection to fit a specific musical genre.


text:
MEDIAWATCH: Shane Te Pou is right & why the Greens need…
Trump's Path to Power – how he steals the 2020 election…
You Know What? Collins Could Win This.
Te Ao with MOANA – The ultimate Willie Jackson Interview
Political Caption Competition
Home Bloggers Christine Rose MUST READ: On freedom of speech and racism most vile
Christine Rose
MUST READ: On freedom of speech and racism most vile
I love Aotearoa and hate racism. And the ability to protest peacefully is something I'd never want to take for granted. It's a right, a freedom, of speech and action, and I exercise it regularly; whether it's against environmental abuses, for animal rights, for solidarity with Palestine, for the right to access cannabis should I choose. Unjust laws and practices demand that I act on my conscience and take to the streets with banners and flags, to make a stand and to try to effect change, to mobilise against injustice.
Sometimes when I'm protesting, I'm accused of being a fanatic, part of a mob, disruptive, of being wrong. My beliefs and participation in marches and blocking the streets looks like radical political interference to those who don't share my views. While I think it's my moral duty to stand against injustice, others think I'm overly political and disrespectful of the established political order.
But I'll continue to exercise that right, and recall that that not too far away in our history, anti-racist Springbok tour protestors were beaten by state forces for also protesting a view contrary to widespread opinions of the time. Our right to take to the streets in defence of personal freedoms and in favour of law change is something denied in other countries and at other times.
That this week we could freely assemble and speak against inflammatory views of visiting racists is a sign of an open society. But things are never black and white. My views expressed as freedom of speech looks like fanaticism to others. And similarly, what looks like the expression of others' fanaticism can also look like freedom of speech to some.
These paradoxes came to a head this week with the reaction to the visiting Canadian self-described 'libertarians'. The unpalatable, inflammatory, provocative and intolerant views of the right wingers Southern and Molyneux, were met with some intolerance on the other side.
In my view we're right to be reject prejudiced and racist views. We should tolerate no racism. But signs saying 'Free speech be damned', and 'Punch Nazis', run the risk of bringing intolerance back onto those of us whose own views would be shut down by more conservative forces in society. I consider my own views to be humanistic, liberal and progressive, part of the fight for a more just distribution of wealth and a fairer treatment of all life on our planet. But there are plenty of others out there who see my views as radical and a threat to society. They'd like me to shut up and sit down, where I feel the need to speak up and rattle the cage.
I was heartened to see a reported thousand citizens gathered in Aotea Square on Friday night, protesting against racism and the visiting Canadian right wingers. A thousand people out on a cold wintery night, standing against racism is a powerful force. But it's generated a lot of discussion about whether it is right to curtail free speech just because we don't want to hear the message. What's that mean for my own freedom of speech when people take offence at my views and would rather I just sit down too? There's an irony in any position that expects freedom of speech for one's own view but not for the view of others.
What concerns me most, are not the fringe and fanatical views of these visitors Molyneux and Southern, whose message has probably got a much larger audience because of the attempts at suppression, but the wider forces of racism in our society that they reflect. White supremacy has no logical justification and should have no traction.
But racism is alive and well and needs to be fought, not just on the occasional Friday night when visiting fanatics ignite the flames. The institutionalised and historic racism that sees Maori and Pacific Island people over-represented in prison statistics, in poor health outcomes, in educational under-achievement, in police bias, in poor wages and housing, in snide negative stereotypes, in lost lands and sovereignty, in a lack of self-determination, culture and mana; the racism that sees Maori and Pasifika denied access to positions of economic and social power, home ownership, in having a home, in material hardship, reduced life expectancy, these are the forms of racism that we should be fighting against every day in every sector. But you probably won't get any of that on a slogan or a banner brandished in Aotea Square on a Friday night.
I'm sure anti-racism protestors on Friday night were as much against Southern and Molyneux as they were against racism per se. But Southern and Molyneux are a representation of more vile historical and contemporary forces, they're the symptoms of colonial oppression and appropriation, of a dominant narrative that shapes society, the economy and our everyday lives. Racism needs to be fought on the streets, the workplace, the media, the economy, at home in New Zealand, and in nations across the world, every night. The most significant injustice isn't that some barely credible white supremacists travel the world vomiting diatribe, but that racial inequality still informs and shapes life outcomes marginalising ethnic groups here and in every nation on a daily basis.
Previous article'Blacklisted' Indonesian studies researcher detained in Bali airport
Next articleThe Daily Blog Open Mic – Sunday 5th August 2018
http://christinerosenz.tumblr.com/
MEDIAWATCH: Shane Te Pou is right & why the Greens need Sue Bradford & Nandor now
Trump's Path to Power – how he steals the 2020 election & why muting his mic in the next debate will help him
Sam August 5, 2018 at 9:25 am
Just watching Tim Pools live stream of Antifa (Anti freespeech vs Proud Boys (MAGA stock crowd, (M)icrosoft, (A)mazon, (G)oogle, (A)pple) one thing that comes through the speakers is the Proud boys shout Trump ie they have a leader and Antifa doesn't. But it's interesting that underpinning all this is the MAGA stock. MAGA stock execs really don't care what some one does with there products so long as sales are up for the quarter and we get our bonuses. It's not like gadgets come with health warnings or safe practice guides or anything. Some people just have way more money than sense.
CLEANGREEN August 5, 2018 at 11:16 am
The anti free speech crood have allowed this subject a large undue amount of press coverage that have now made Southern and Molyneux look like heros in the social media sites now with over a half a million 'likes' on facebook and utube with a massive support building outside NZ also so it had a positive effect on getting their veiws supported outside NZ and within.
The aniti- free speech should have just ignored the pair and it would not have increased their support globally.
Marc August 5, 2018 at 2:59 pm
Do a search for those two (Lauren Southern and Stefan Molyneux) on Canadian newspaper and media websites, and you will find little if any mention of these characters, while here they have created a 'storm' in the MSM and social media teacups.
Ridiculous, just as so much happening in Niu Zillind aka Sleepy Hobbit Land.
https://www.thestar.com/news.html
https://www.theglobeandmail.com/canada/toronto/
Sam August 5, 2018 at 3:09 pm
Americas share of global GDP keeps declining. The west is losing power and enfluence and a lot of westerners don't really know how to deal with that. This generation has grown up in relative comfort, Europe has been beep into a 20% share of global GDP for decades so it shows what we can expect from an America with a 20% share of GDP – wide spread immigration and boarder failures, low defence spending, over borrowing. It took about 60 years after WW2 before the U.K finally figured out that they weren't a super any more, the US has a population 3 times greater than the UK so I think the fall for the U.S will be 3 times faster or the U.S loses economic and trade supremacy in 20 years. That's not including anything dumb like nuclear war of crop failures.
David Stone August 6, 2018 at 9:22 am
Micheal Hudson has something to say on this here..http://www.informationclearinghouse.info/49958.htm
D J S
bert August 5, 2018 at 5:00 pm
I still don't know who she is despite the media coverage. As they say she is a "Neville Nobody" She does however give blondes a good name.
It's difficult to tell who is who because sections of the left and sections of the right are throwing around labels like there's no tomorrow calling any one who disagrees with them fascist or commie and you can go down the list. And it's like every one just magically transformed into fascists about a month ago. It's a dangerous phenomenon that foreign social media personalities can cause a lose of cohesion among New Zealanders. We just have to recognise it, and show abit tolerance towards each other instead of getting screw attacked by foreigners.
Vern B August 5, 2018 at 1:51 pm
Why do you believe Southern and Molyneux are racist? Personally, I can't standing listening to Molyneux, and Southern can grate…. but I do listen to the occasional interview. My take is that they are very much against it, so Im wondering what I have missed.
Frank Macskasy August 6, 2018 at 10:53 am
Vern, their racist and misogynistic chauvinism has been covered ad nauseum on this forum. Look up the comments sections on blogposts by Chris Trotter and Martyn Bradbury.
But for starters, their bizarre view that the European race is more intelligent than other races. References: https://www.splcenter.org/fighting-hate/extremist-files/individual/stefan-molyneux
They claim their view is based on science – but that is utter bollocks. No such science exists. This is little more than a replay of 1930s Nazi eugenics 'theory'.
Andy August 6, 2018 at 1:54 pm
"European" isn't a race.
One of the IQ issues Molyneux raised in an interview with Jordan Peterson is that Ashkenazi Jews score on average 15 points higher than the surrounding population in IQ tests
https://en.wikipedia.org/wiki/Ashkenazi_Jewish_intelligence
I guess it takes a special kind of Nazi to claim that Jews are brighter than the rest of us
Frank Macskasy August 6, 2018 at 2:05 pm
That link you provided also suggests that there are cultural aspects to apparent "high IQ". As someone else pointed out, if IQ tests were written by Innuit (eskimos), guess who would rate highly amongst human beings? Go on, take a guess.
I wasn't actually suggesting any causal relationship, just observing the differences. In the case of the Ashkenazy, they are part of the surrounding culture, though there may be differences in educational aspirations etc.
The point I am making is that this isn't some crank eugenics, it is fairly well established science, and Molyneux has interviewed an Otago professor on the subject
Whether one uses the science to advance a political agenda is a separate question, of course, and then it can become distasteful at best, genocidal at worst
…and Molyneux has interviewed an Otago professor on the subject
Yes, Andy, you're correct. Molyneux spoke to Emeritus Professor James Flynn of the University of Otago.
This was the result;
Prof Flynn was interviewed by Mr Molyneux in 2015 – the hour-long chat is on YouTube – but said if the Canadian called now, he wouldn't answer.
"I wouldn't think of going within a mile of him if he talked," Prof Flynn told Newshub, saying while he enjoyed debating the subject of race and IQ with academics he disagreed with, such as Dr Murray and the late Arthur Jensen, there was no point in listening to what Mr Molyneux has to say.
"These people are just coattail-hangers. They don't have anything new to contribute to the debate – they just try and make the debate spectacular. I've invested a huge amount of time on this issue, read all the best thinkers, and wouldn't think it would be worth my time."
In his 1980 book Race, IQ and Jensen, Prof Flynn called attempts to link IQ squarely to race "disturbing", expressing great scepticism.
ref: https://www.msn.com/en-nz/news/national/stefan-molyneux-iq-and-race-what-the-experts-think/ar-BBLxzmC
Thank you for pointing out this event to us. It helps demolish Molyneux as the far-right crank that he is.
"Thank you for pointing out this event to us."
Since you mention Charles Murray ,who Flynn apparently disagrees with, I note that at a recent campus in the USA, his talk was shouted down by leftist activists and the liberal professor that invited him was physically assaulted and ended up in a neck brace.
So NZ has got a wee way to go before we turn violent big time, but give it time.
Douglas Murray and Nigel Farage are coming to our soils soon. Murray has been a critic of mass Islamic immigration into Europe, so is obviously a Nazi. Go for it team!
who Flynn apparently disagrees with
"Apparently"?!
Prof Flynn said "if the Canadian called now, he wouldn't answer".
Nothing "apparently" about it. He was crystal clear: "I wouldn't think of going within a mile of him if he talked".
I was referring to Charles Murray, not Molyneux.
You were also referring to "Molyneux has interviewed an Otago professor on the subject", as per your 2:21 pm post above.
Johnnybg August 5, 2018 at 2:24 pm
Over the free speech issue all TDB has succeeded in doing is to make a mountain out of a molehill, & act as a recruiting sergeant for the extreme right. I've got the message.
This radical old free speech activist & street-fighter has been siting on the fence for a while now, but this successful attack on free speech by a tiny minority of resentment fueled, fascist like bigots & the liberal globalisation elite who they keep in power, has led to a change of heart.
I'm now committed to joining the war to rid our country of this pernicious life negating, soul destroying plague. Time to go back to the streets & do what I can to fire up the slumbering troops, who like me, are absolutely sick & tired of being brow beaten & lorded over by an ignorant, viscous, fascist, racist & unpatriotic few who can't see the wood for the trees.
"I'm now committed to joining the war to rid our country of this pernicious life negating, soul destroying plague"
That's not how I would describe Islam, but I take your point
Johnnybg August 7, 2018 at 10:27 am
Kia Kaha…Fight back.
Be sure, that your 'freedom' to protest and use 'free speech', is only condoned by the establishment elite and the deep state combined, because those who actually use their 'right' are minorities and pose NO true challenge to the status quo.
The Springbok Tour unrest and protests were a sign of the time, yes, but they changed only little. In fact, so called 'liberalism' of a social kind, including forms of an open society and 'multiculturalism', have been adopted by the establishment (dominated by the rich and powerful and their mostly well educated servants), because they realised it even serves their own purposes.
Their power and control of the status quo rests on the good old 'divide and rule' concept. So Southern and Molyneux fit in well into that also, stirring up others, who opposed them, leading to lively online debates, even hate tirades and to protests (albeit in small numbers) out on the streets.
So the ones in charge can lean back, enjoy the popcorn, and laugh about all the participants, some more ignorant than others, some simply naive to the extreme, and continue playing their game.
Only if there was mass protests that would endanger the present status quo within society, and above all its still neoliberal, capitalist order, then would we have them engage state and even private security forces, to oppose any movement for real change.
The so called 'freedom' to protest must be seen in that context, and in hindsight and on reflection, it is merely a phrase, although enshrined in law (with caveats and restrictions also), and leads many to believe they actually have true freedom, that would lead to any REAL and significant change for humanity.
Don't fight. Reject, and resist – Gandhi achieved quite a lot that way.
These people want fights, want wars, but there other ways of bringing about change.
Try search for them and anything about them on Canadian MSM and so, you will find damned little if any mention of them there:
http://www.cbc.ca/search
Yet searching via Google, endless results about them and what they stirred up here can be found, and only a bit about what they caused in Australia. NZ Inc is a JOKE!
Making a mountain out of a mole hill, I fear.
Canadian CBC? Are you serious ?
Do a Google search then you gollywog hug teddy bear supremacist, you find only results for NZ and some for Australia, re those two.
How comes Freedomainradio gets so many hits?
Just because you live in a leftist echo chamber doesn't mean the rest of the world does
So Google is a 'leftist echo chamber' now, is it?
The tactics Ghandi employed wasn't with out force. I mean the wonderful British forced India to grow opium and never mind crops to feed the people ending in 200 million dead Indians and Chinese. So not down playing the role boarders and foreign affairs and a military plays at all. If we are serious about preventing skeletons in the closet that is.
Lone comet August 5, 2018 at 5:12 pm
I think it is right to protest against racism and lack of tolerance towards refugees and immigration. Its good that these two were not able to find a venue that would allow them to espouse racist rhetoric, and make money out of it too. Good on the Powerstation and city council too, and good riddance to bad rubbish. This is not an argument about freedom of speech.
Jenny August 5, 2018 at 6:21 pm
Free speech and suppression of free speech is something that the rich and powerful enjoy. The rest of us, without deep pockets, like Russel McVeigh, or in the favour of Right Wing pressure groups, that can raise $50 thousand overnight, not so much.
"They pushed the boundaries by asking for a super-injunction while at the same time telling the public [in the wake of the Russell McVeagh revelations] that everything was fine and there was nothing to worry about.
"They were making public statements that they weren't suppressing Catriona MacLennan's free speech but that's what they were doing to me."…..
…..Tidy and clean-shaven, the young lawyer speaks slowly and weighs each word. The contents of the email were "distressing", and that was compounded by the fact he was not allowed to talk to anyone about it, apart from his lawyer. And it went on for four months. "It was like a weight".
Taylor is presently looking for a job. A legal clash with the body representing lawyers probably doesn't help his case – but he believed he had an obligation to stand up and do the right thing…..
…..Taylor wears a smart shirt and black jeans. His parents, he said, come from a working class background – so he knew how lucky he was to have the opportunity to speak up. "I have more privilege to do that. It would feel wrong not to say something. I have a strong sense of justice. I don't know if something triggered that.
https://www.stuff.co.nz/national/106008654/a-young-law-graduate-was-the-target-of-one-of-nzs-most-sweeping-gagging-orders
Related comments and posts:
"There's No Such Thing as Free Speech"
"…the gory freedom of free foxes in a free chicken run"
Scotty August 5, 2018 at 9:15 pm
I you tubed these pair and listened to their speeches.
from what I could make out….. Stephan Moulinex reports that the US military have for decades, studied groups/cultures/races from each country around the world and factually concluded that they all have different average levels of IQ.
And today they are judged against high average IQ groups/cultures/races and if they fall below the medium they are losers/underlings/inferiors which he believes is racist/unfair/troublesome and wrong .
So an analogy could be…if you where not good at sports (in a majority sporty school) you where labeled a looser.
It feels like what has happened here in NZ, is a linch mob mentality , Some called them RACIST So jump to it boys, get a rope and let's go hang em!.
Some one please correct me if I'm factualy wrong
Instead of wasting so much time on these hopeless, mischief making sidekicks Southern and Moulineux, people here should perhaps focus on the REAL challenges our society faces, which we have NO answers for to this day, as the government cannot even go as far as banning single use plastic bags:
https://www.smithersrapra.com/news/2016/october/global-demand-for-plastic-films-is-forecast-to-gro
'Global demand for plastic films is forecast to grow by 4% per annum to 2021 reaching 73.3 million tonnes'
https://www.statista.com/statistics/282732/global-production-of-plastics-since-1950/
Think about how to clothe, house and transport and feed the billions of people on this climate disaster facing planet without using plastic and synthetic materials for a change!
I hear and read almost NADA on such challenges and find NO solutions that are feasible and economical, to rid us off plastic, which is largely made from petroleum and the likes.
Southern made a doco about the plight of South African farmers, who are being tortures, murdered and raped
Naturally, people aren't interested in hearing gory stories about women having kneecaps drilled out with electric drills, or children being boiled alive in baths of scalding water.
They'd much rather gather on street corners banging drums and rallies, mindlessly chanting slogans
Bloody Nazis!
Are you sure you saw a nazi. We have laws against nazi memorabilia. I strongly suggest if you see it again you have a quiet word with the appropriate agency.
Everyone else saw Nazis. TV One had images of Swastikas alongside Southern, presumably to imply for low IQ TVOne viewers that she is a Nazi
Perhaps you have not been made aware of the Swastika on her buttock, covered up during the interviews?
Which South African farmers are you talking about, those racist white ones, who in one case buried a black man alive, and some of whom still shoot the "Kaffir", such as the ones here?
https://www.independent.co.uk/news/world/africa/south-africa-white-farmers-forced-black-man-coffin-jailed-theo-martins-jackson-willem-osthuizen-a8023266.html
Or are you talking about the few small black farmers, who have been denied access to fertile land for generations now?
Jenny August 6, 2018 at 12:23 am
"White supremacy has no logical justification and should have no traction."
You would think so wouldn't you?
The fact that Southern and Molyneaux were able to hire a 500 seat private venue at $79 a ticket, and claimed to have sold it out, shows that there is a ready market for this sort of thing.
And those prepared to pay $749 "to break bread" with this pair, are people with the resources to back their racist program in this country after they are gone.
$79 general admission to "hear speeches by world leading commentators and justice activists"
$99 early admission (a few minutes early to get better seats)
$199 meet & greet 'strictly limited to 40 people at each event for half an hour backstage access prior to the show'
$499 VIP meet & greet "10 people will get to spend an extra 15 minutes in the Meet & Greet, plus get a swag of personally signed, awesome merchandise"
$749 dinner and early admission "opportunity to break bread at an intimate function prior to the main event that evening with not one but two of the most influential Alt Media personalities of our generation"
But rather than let Southern and Molyneaux have their private meeting with 500 other like minded individuals. And conspire with a few seriously wealthy Kiwi racists over dinner.
Personally I think it is better to use the precautionary principle.
Racism is a bad thing, Alt-Right fascism is a bad thing. Do we really need to give platform to racists and fascists to argue that they are not?
If they are Alt-Right racists, how come Lauren Southern gets called a "coal burner" by the Alt Right for dating a black man?
Marc August 7, 2018 at 11:59 pm
Maybe he was only 'painted black', oh, I remember a Rolling Stones song with that line now.
Danyl Strype August 6, 2018 at 5:26 am
This is a wonderfully nuanced piece Christine. You nailed both the ignorant irrelevance of the visiting trolls, and the degree to which the shield of liberal principles like free speech and due process protect our own freedoms to dissent. Those who say ridiculously foolhardy things like "free speech be damned" need to think about how much the owning class and the deep state would love to see that shield weakened and demolished. Be careful what you wish for …
Christine Rose August 7, 2018 at 8:32 pm
Thanks for the feedback Danyl
Z August 6, 2018 at 9:28 am
This is hate speech. I felt the need to give an example since NZ appears to have no concept
https://m.youtube.com/watch?v=_9MDHNgdpVM&pbjreload=10
The speaker is screaming into a megaphone, "White people, give us your f***** money, your f****** house, your f****** property, we need it f****** all!"
While talking about capitalism, protesters can be heard yelling "reparations" and "burn it down."

redpajama_set_name: RedPajamaCommonCrawl


ShopSleuth's Takken's Shoes Store Locator found 8 store locations in malls and outlets in 1 states. Below is the count of all of these Takken's Shoes locations broken down by state. View Takken's Shoes Outlet Locations.
Takken's Shoes is ranked #47 out of 121 Men's & Women's Shoes stores in the U.S., based on the number of locations.
Stores like Takken's Shoes include: Zappos, Off Broadway Shoes, Shoe Carnival, DSW Shoe Warehouse and Famous Footwear.


text:
Q: How best to keep my localhost on Http while my Remote production is on Https I am using a plugin **Really Simple SSL** that configured to use SSL. And I use WP Migrate Pro to move my DB from local to remote. But I usually run into the problem of pulling the DB from productions to localhost during development, most of my links on the localhost are using https.
I do not want to set SSL on my local development.
Presently, I deactivate the plugin Really Simple SSL using `wp cli'. Next, I have to Find and Replace https to http on the localhost. That makes updates to be using unsecured repos and my fonts, css and cdn use http which create a new security risk for my development which would eventually end on in production.
What is the best approach so that I do not expose my production to security risk after development?

A: The correct approach is to use HTTPS everywhere, and to migrate to SSL properly:

*

*remove the Really Simple SSL plugin

*change your sites URL option to the https version

*search replace your database so all content uses the https URL via WP CLI or a search replace tool ( do not use an SQL query it will break things )

*update any hardcoded strings in your theme from http to https

Then finally:

*

*set up a local SSL certificate and trust it in your browser

A lot of local dev environments will generate the certificate automatically, e.g. VVV or Local.
The alternative is a painful manual search replace each and every time you pull changes down, and push changes up.

redpajama_set_name: RedPajamaStackExchange


text:
North Kitsap, Olympic knocked into consolation bracket
TACOMA — Height isn't something Kitsap teams are used to seeing in the Olympic League.
The problems created when a 6-foot-3 forward is in your face showed in the North Kitsap Vikings as they lost to fifth-ranked White River 54-37 Saturday in a Class 2A West Central District girls basketball game at Foss High School.
The winner-to-regional game showcased the experience by the Hornets, who have taken home back-to-back state trophies, and the youthfulness of North Kitsap.
The Vikings will take on a much more familiar opponent in Kingston (13-9) on Tuesday in a loser-out game at Foss at 6 p.m. The Buccaneers stayed alive by beating Sammamish 51-22 at Curtis High.
Olympic, which lost to the Liberty Patriots in another winner-to-regional game 34-31, will face Foster on Tuesday at Foss at 7:45 p.m.
The Vikings (13-8) knew they would be up against a stalwart team, one that includes standout 6-3 forwards Kendall Bird and Darian Gore. NK didn't back down, trailing the Hornets only 10-8 after the first quarter and 21-15 at the half. It was the second half that saw White River (19-3) pull away as North couldn't get the ball to drop.
"I thought we got some good baskets, and nice looks, we just couldn't get 'em," NK coach Penny Gienger said.
The Vikings made some inroads on White River's lead in the fourth quarter as freshman Raelee Moore hit a long two from the right corner, followed by two free throws by senior Molly Lemmon to cut it to 37-28. On NK's next possession, Ainsly MacKenzie's free throw made it 39-30 with 4:39 to go in the fourth.
But that would be as close as North would get as White River went 11 of 14 from the free-throw line in the final minutes.
"To beat the No. 1 team, you've got to make your foul shots and make your lay-ins," Gienger said. "We played them hard and I thought we got them frustrated. We got their big girls in foul trouble, but they hit a couple threes and we ended up fouling."
Lemmon finished with 13 points while Moore added 11. NK held Gore to just six points and Bird to 11, but didn't account for the 3-point shooting of Maci Goethals, who finished with 13 points as did Georgia Lavinder.
Olympic held the Patriots (9-13) from Issaquah to just 34 points, including one point in the second quarter. The Trojans (15-7) are hoping to make the regional tournament for the sixth year in a row, but will have to do it the hard way — from the consolation bracket.
"I told the girls in the locker room, 'This one's on me.' We should have gone to man-to-man much, much sooner than we did," Olympic coach Laurie Shaw said.
Olympic's zone defense has been playing well late in the season.
"This team scored 75 points last Thursday," Shaw said of the Patriots' win over Fife. "We held them to 34. We held them to one in the second quarter, playing great defense. But, down the stretch we just ran out of time."
Olympic held a 31-27 lead late in the fourth quarter. Sydney Argosino drained a 3-pointer to close within 31-30 with two minutes left. Sloane Zerda gave the Patriots a 32-31 lead when she made two free throws with 1:30 remaining.
After Olympic turned the ball over on a shot-clock violation, Liberty's Samantha Kelderman hit a layup with 33.5 seconds left to make it 34-31. Olympic's last second 3-pointer came up short at the buzzer.
"This was not one of our best games," Shaw said. "But other than that, I don't think it was a bad game. We're holding teams to very few points, playing very good defense. (We) just had a couple of misses that were un-reboundable because there was nobody there to rebound."
The Trojans have yet to have back-to-back poor games, and Shaw believes that won't change.
"We'll go back to practice Monday and work on some things and go beat the Foster Bulldogs on Tuesday," she said.
ALSO: Port Angeles beat River Ridge 39-34 in its winner-to-regional game. The Roughriders (20-3), who were without Natalie Steinman (sick), Emily Johnson (injury) and Maddie Boe (injury) will face Franklin Pierce at 6 p.m. Thursday in the district semifinals at Foss.
White River 54, North Kitsap 37
North Kitsap	8	7	7	15	—	37
White River	10	11	10	23	—	54
North Kitsap—Molly Lemmon 13, Lauren Weins 1, Ashley Vest 1, Olivia Selembo 7, Megan Green, Ainsly MacKenzie 1, Jazmine Selembo, Raelee Moore 11, Adele Keller 3.
White River—Sidney Schultz, Maci Goethals 13, Kayla Howard 2, Lucy Rasmussen 2, Georgia Lavinder 13, Kendall Bird 11, Darian Gore 6, Sofia Lavinder, Sydney Andersen 5, Dallas Bushaw 2.
Liberty 34, Olympic 31
Olympic	4	6	12	9	—	31
Liberty	13	1	8	12	— 34
Olympic—Danielle Monzon 8, Katie Campana 3, Dejah Coleman 1, Ella Hazzard, Katie Shaw, Kaydra McInnis 4, Zoie Matheny 2, Kiki Mitchell 11.
Liberty—Presley Sweeney 5, Kelli Anderson, Vanessa Powers, Savannah Metzger, Samantha Kelderman 10, Sydney Argosino 11, Kylie Kirksey 5, Jasmine Baker, Alissa Campbell.


Centralized Air conditioning is very known process to be used for changing the behavior of air to make the environment more comfortable. The defined aim of centralized air conditioning machines is to distribute the air at every corner of the space where it is installed. It is designed to offer more comfort for improving air levels within home, office or other big indoor areas.
Basically, air conditioning machines are used to manage the refrigeration cycle due to which air temperature remains cool. Often, evaporation or free cooling also works to keep the temperature down.
Centralized air conditioning for auditoriums etc.
However, our AC design & installation services are not limited for aforementioned specific areas only. We customise and extend our Centralized Air Conditioning services according to your needs.
Click to check our Industrial Air Cooling services.
No matter if you are looking centralized air conditioning solutions to be installed in small or large area, it will be easily and quickly done.
You will get centralized air conditioning services within minimal cost investment.
Blower, compressor, condenser, and other equipments will be properly tested before installation.
Our engineers are not only engaged in installation of centralized air conditioning machines but also they take care of ventilation and heating issues.
No matter in which area you want installation of air conditioners, the process will be easily executed without any problem.
To get centralized air conditioning for your property at its best, you may dial our contact number +91-9711820827 or request a quote through below form.


text:
Q: JNI: passing integer array from Java to C Edit: Skip to part 2 for a simpler code.
Part 1:
I am working on a project wherein I have to call Java routines from C++.
I use the following code to call the java method. The parameter is a string array from which the first 2 values are used to read a file from the hard drive decode it and return the data. For testing purpose, I am returning a 1D integer array containing only the first image in the file. There are more images in the file with Z depth and time sequence like in a video, ignoring those for now.
    mid = m_pJVMInstance->m_pEnv->GetStaticMethodID(imageJ_cls, "getIntData", "([Ljava/lang/String;)[I");
    if (mid == nullptr)
        cerr << "ERROR: method not found !" << endl;
    else {
        jobjectArray arr = m_pJVMInstance->m_pEnv->NewObjectArray(2,      // constructs java array of 2
            m_pJVMInstance->m_pEnv->FindClass("java/lang/String"),    // Strings
            m_pJVMInstance->m_pEnv->NewStringUTF("str"));   // each initialized with value "str"
        m_pJVMInstance->m_pEnv->SetObjectArrayElement(arr, 0, m_pJVMInstance->m_pEnv->NewStringUTF("D:\Dev_Environment\Test_Files\\"));  // change an element
        m_pJVMInstance->m_pEnv->SetObjectArrayElement(arr, 1, m_pJVMInstance->m_pEnv->NewStringUTF("4D_1ch.lsm"));  // change an element
        jintArray depth = (jintArray)(m_pJVMInstance->m_pEnv->CallStaticIntMethod(imageJ_cls, mid, arr));   // call the method with the arr as argument.

        m_pJVMInstance->m_pEnv->DeleteLocalRef(arr);     // release the object
    }

The method mid is getting the correct function. The Java code does some processing and returns a integer array to C++ for further processing.
The Java code:
public static int[] getIntData(String[] args) {
    int[] test = new int[1];
    test[0] = 1;
    String dir = args[0];
    String name = args[1];
    String id = dir + name;
    ImageProcessorReader ip_reader = new ImageProcessorReader(
            new ChannelSeparator(LociPrefs.makeImageReader()));
    try {
        IJ.showStatus("Examining file " + name);
        ip_reader.setId(id);
        int num = ip_reader.getImageCount();
        int width = ip_reader.getSizeX();
        int height = ip_reader.getSizeY();
        ImageStack stack = new ImageStack(width, height);
        byte[][][] lookupTable = new byte[ip_reader.getSizeC()][][];

        //TODO: Don't know how to handle multiple channels i.e RGb images currently.
        // Adding all the slices into a 2D array and returning those values.
        int[] test_array = new int[width*height];
        int[][][] return_array = new int[height][width][num];
        for (int i=0; i<num; i++) {
            IJ.showStatus("Reading image plane #" + (i + 1) + "/" + num);
            ImageProcessor ip = ip_reader.openProcessors(i)[0];

            // Copying the value to the return array.
            int[][] temp_array = ip.getIntArray();
            for (int h=0; h < height; h++) {
                for (int w = 0; w < width; w++) {
                    return_array[h][w][i] = temp_array[h][w];
                    if (i==0){
                        test_array[h*width + w] = temp_array[h][w];
                    }
                }
            }

            //java.awt.image.BufferedImage awt_Ip =  ip.getBufferedImage();
            //ImageIO.write(awt_Ip, "jpg", new File("D:\\Dev_Environment\\Test_Files\\Test_Folder\\out" + Integer.toString(i) + ".jpg"));

            stack.addSlice("" + (i + 1), ip);
            int channel = ip_reader.getZCTCoords(i)[1];
            lookupTable[channel] = ip_reader.get8BitLookupTable();
        }
        IJ.showStatus("Constructing image");
        ImagePlus imp = new ImagePlus(name, stack);

        // ImagePlus show is leading to java window not responding, maybe it is because this program is not a imageJ plugin but a standalone program.
        //imp.show();

        //ImagePlus colorizedImage = applyLookupTables(r, imp, lookupTable);
        //r.close();
        //colorizedImage.show();
        IJ.showStatus("");
        test[0] = 2;
        return test;
    }
    catch (FormatException exc) {
        IJ.error("Sorry, an error occurred: " + exc.getMessage());
        test[0] = 3;
    }
    catch (IOException exc) {
        IJ.error("Sorry, an error occurred: " + exc.getMessage());
        test[0] = 4;
    }
    return test;
}

For testing only I added a test array of size 1 to check the output in C++. I am getting 0 as a return value in the depth variable.
My question is how do we return an integer array from Java to c++? Is jintArray the right way? Consequently, can I return a 3D array from Java to C++?
Edit
Part 2:
I did a test with new Java code and same C++ code, except now I am calling "getInDataS" from the java side. Here is the java code:
    public static int[] getIntDataS(String[] args) {
    int[] test = new int[10];
    test[0] = 10;
    test[1] = 10;
    test[2] = 10;
    test[3] = 10;
    test[4] = 10;
    test[5] = 10;
    test[6] = 10;
    test[7] = 10;
    test[8] = 10;
    test[9] = 10;
    return test;
}

I am atleast getting some value in the depth variable but as soon as I try to read the values access violation is thrown. Bothe the lines of code throw the error. Here is the C++ Code:
jintArray depth = (jintArray)(m_pJVMInstance->m_pEnv->CallStaticIntMethod(imageJ_cls, mid, arr));
jsize len = m_pJVMInstance->m_pEnv->GetArrayLength(depth);
jint* body = m_pJVMInstance->m_pEnv->GetIntArrayElements(depth, 0);

A: Returning int array works exactly as you describe, but the JNI function to call such Java method is not CallStaticIntMethod(), but CallStaticObjectMethod(). This is the most likely cause of the error you get.
To accept a 2D array (or more) in C, you declare it as jobjectArray, and get the object value of each element as jintArray.
Note that your C code leaks some local references, which may be a problem if it is called in a loop. It may be easier to wrap this code with PushLocalFrame() and PopLocalFrame().


text:
Q: How can I install and run MDbg on macOS from the dotnet command line? I'm trying to install and run the Managed debugger (MDbg) from dotnet core.
https://www.nuget.org/packages/MDbg/0.1.0
says I can run dotnet add package MDbg --version 0.1.0.
This adds a dependency to a CS project but does not give me access to an MDbg executable.
What do I need to do to access a command line debugger for C#?
I don't want to use VSCode or Visual Studio to access a debugger, I want to debug from the command line.

A: MDbg can only be used to debug full .NET Framework applications (and only on windows). There is an open issue to port it to .NET Core, but as of now it's not done yet. Here is documentation link describing different available options to debug .NET Core applications (including on OSX).


1. Hot air drying is a modern way of drying food in drying room or baking oven by blowing hot air to speed up the air flow. It is used frequently to make air dried food.
2. Black Fungus is edible and often used in Asian cooking. It is a beneficial herb in helping with health issues by treating the lungs, stomach and liver, according to the Institute of Chinese Medicine.


2018년 7월20 – 24일 캐나다 토론토 쉐라톤 센트럴 호텔(Sheraton Centre Toronto Hotel)에서 68번째 ACA (American Crystallographic Association) Annual Meeting이 개최되었다. 이번 학회에는 세계 각국에서 온 1,000명 이상의 과학자들과 대학원생들이 참석을 하였다. 워크샵을 포함 총 45개의 세션이 5일 동안 진행되었으며 200여명의 저명한 과학자와 젊은 과학자들이 함께 발표를 하였다. 이번 학회에서는 하루를 3 parts(오전/오후/저녁으로)로 나눠서 각 part당 4~6개의 category에 대한 symposium이 동시에 진행되었다. 그리고 3일간 매일 2시간(오후 5시 30분부터 7시 30분까지) 동안 진행된 포스터 발표 session에서는 200여개의 포스터에 대해서 세계 각국에서 온 발표자들과 과학자들이 다양한 주제에 대해 심도 있는 토론과 활발한 교류가 이루어졌다. 특히 이번 학회에서는 생체 내 단백질 구조를 규명하는 방법으로 결정학에 대한 발표뿐만 아니라 다양한 최신 방식의 구조 분석 기술들과 그에 대한 결과도 발표 되었다.
학회가 개최된 쉐라톤 호텔 바로 길 건너편에는 토론토 시청이 있어서 교통 접근성이 좋았다.
Reception Desk에서 참가자에게 친절하게 설명을 하고 있는 학회 직원들.
이 workshop은 총 6개의 Session으로 8시간 동안 진행이 되었고 각국의 유명한 박사님들이 발표를 하셨다. 본 워크샵은 pre-registration이 필수였고 EM workshop의 경우에는 등록비가 $110 이었다. 최근 세간의 관심을 증명하듯, 늦게 참석한 분들은 자리가 없어, 바닥에 앉아 강연을 들을 정도로, 다른 workshop에 비해서 훨씬 많은 참석자가 있었다.
Workshop이 진행되었던 Provincial North Hall. Crystallography 학회 임에도 불구하고 동시에 진행된 4개의 workshop 중 가장 참석자가 많았다. CryoEM workshop의 Introduction을 맡았던 Wah Chiu 교수님의 Recommended Readings.
Toronto Univ.의 Computer Science 전공 박사과정 학생인 Ali Punjani가 기존에 잘 알려진 CryoEM processing program인 RELION과 EMAN에 영감을 받아서 새로운 Algorithm (stochastic gradient descent (SGD) and branch-and-bound maximum likelihood optimization algorithms) 을 가진 cryoSPARC이라는 web-based program package를 개발하였고 Structura Biotechnology Inc. 회사도 설립했음을 이야기하였다.
이 'cryoSPARC' 라는 프로그램은 상대적으로 저사양의 컴퓨터로도 cryo-EM structure에 대한 calculation을 가능하게 해준다는 장점을 가진다고 소개를 해주었다. 이 프로그램은 다른 software보다 빠른 계산 속도를 가져, 26S proteasome 같은 경우에는 3시간 안에 high-resolution structure를 만들어 낼 수 있다. 특히 다른 cryo-EM package program에서는 일일이 진행해야 했던 structural heterogeneity selection을 manual picking하는 반면, cryoSPARC에서는 auto-selection이 가능하기 때문에, 동시에 여러 가지 conformation을 가진 구조를 규명할 수 있다.
X-선 결정학에서는 새로운 구조를 규명하기 위해서 phase problem을 해결하는 다양한 방법 (MR, SAD, MAD, MIR)이 존재하는데, cryoEM은 image 자체를 보기 때문에 X-선 결정학에서 사용하는 이런 방식으로 구조를 규명하지 않는다고 한다. 그렇다면 단백질 polypeptide chain의 N-terminus와 C-terminus를 구분하는 것은 단백질의 구조 모델을 만들어 내는 반드시 필요한 작업이다. X-선 결정학에서는 phasing problem을 해결하며, 이러한 문제를 해결할 수 있다. 그러나 cryoEM은 image를 이용하여 electron density map을 얻을 수 있지만, 단백질의 N-terminus와 C-terminus를 구분하기 어렵다. 따라서 기존의 EM기법에는 다른 방식으로 비슷한 단백질의 구조가 이미 풀려 있는 경우에 MR (Molecular Replacement)이라는 방법과 비슷한 원리로 구조를 규명하는 정도였다. 그러므로, cryoEM에서 기존에 알려져 있지 않은 de novo 구조를 어떻게 규명할 수 있는지에 대해서 많은 논의를 있었다. 현재까지는 technical limitation 때문에 <3.x Å 의 High resolution의 구조만 de novo modeling이 가능하다고 하였다. 여기서 소개된 방법으로 첫번째 방법은 생물학 이외의 다른 분야에서 많이 응용이 되고 있는 algorithm 중 하나인 TSP (Travelling salesman problem)와 Cα 간의 거리(이를 restrain factor로 정해서 mainchain을 tracing 하여)를 복합해서 사용하는 방식으로 image processing을 통해서 생성된 electron density map에 무작위로 atom을 scatter 시킨 후 이 atom들의 Cα 간의 거리가 3.5 ~ 3.8 Å 이라는 restriction factor를 주어 단백질의 main chain을 찾는 de novo modeling 진행한다. 두 번째 방법으로는 secondary structure prediction과 함께 bulky hydrophobic residue의 position을 가지고 mainchain을 tracing 하여 de novo modeling을 하는 것으로 고분해능 구조의 경우에는 α-helix나 β-sheet이 구조가 보이는데 이를 바탕으로 연결되어있는 전자 밀도를 이어서 어느 쪽에서 N-terminus가 시작이 되는지 확인을 한다. 그리고 어느 정도 확인이 되었을 때는 Tyrosine이나 Tryptophan 같이 bulky side chain을 갖는 residue들의 secondary structure 위의 position을 비교해서 de novo modeling을 진행을 한다.
이 세션에서는 Crystallography 이외의 다른 method에 대한 application이 있었는데 대부분 SAXS (Small Angle X-ray Scattering)에 관한 내용이었다.
1) Solving the phase problem in solution scattering.
Buffalo Univ.의 Thomas Grant 교수님이 이 발표를 하셨는데, 구조하는 랩에서 흔히 접할 수 있는 SAXS (Small Angle X-ray Scattering) model을 만드는데 기존에 알려져 있는 것과 다른algorithm에 대한 내용이었다. 기존에 publish가 된 많은 SAXS 관련 논문들은 1D plot을 이용해서 3차원 modeling을 하는 algorithm을 가지고 있는데, 이 세션에서는 iterative structure factor retrieval algorithm이라는 새로운 방식을 통해서 solution scattering data로부터 직접 electron density를 구하는 방법을 소개를 하였다. 이 방식은 반복적으로 같은 식의 계산을 진행하는데 negative density가 없어지는 방향으로 계산이 진행되며, 각 계산에서는 매번 다른 structure가 나올 수 있기 때문에 align과 averaging을 함께 반복하는 방식이라고 한다. 이 방식을 통하면 Fourier transform 에 기반한 model이 아닌 scattering에서 직접 electron density map을 만들어 낼 수 있다고 한다. 이 방식은 기존에 SAXS 분석방식보다 좀 더 정확한 정보를 얻을 수 있다고 한다.
기존의 Bead modeling 방식과 Direct Electron Density Calculation에 의한 구조를 비교하는 모습.
2) CryoEM for drug discovery, design, understanding and application.
Hybrid Technique 세션이 진행되는 사이에 Transaction symposium이 있어서 개인적으로 관심 있는 cryoEM 세션을 들었다. 이 세션에서는 Merck & Co. Inc. 소속의 과학자인 Giovanna Scapin이 발표하였다. Merck에서는 기존의 구조를 기반으로 한 약물 연구를 많이 진행 해왔는데, 그 방식이 현재의 X-선 결정학에서 cryoEM으로 많은 변화를 하였다는 내용과 함께 새로운 약물 개발을 하고 있는 내용에 대해서 소개를 해주었다. 현재 Merck에서는 다양한 질환의 원인이 되는 단백질 구조 규명을 시도하고 있는데, 이번 발표에서는 그 중 Insulin-Insulin receptor complex의 고해상도 구조를 cryoEM을 이용해서 규명한 내용을 이야기했다. 이 발표에서는 cryoEM에서 흔히 겪는 문제에 대한 해결 방안을 주로 발표를 하였다. 기존 cryoEM에서 vitrification 과정은 대부분이 FEI (현재는 Thermo scientificTM)에서 개발한 Vitrobot이라는 장비를 가지고 진행이 되어 왔는데, Merck cryoEM team에서는 이 장비가 아닌 새로운 vitrification 장비인 Spotiton를 사용하여 grid 사용 효율을 증대 시키고, screening time을 비약적으로 단축시켰으며 높은 재현성을(vitrobot의 가장 큰 단점으로 지적이 되는 것이 재현성임) 가지는 것을 확인하여 이를 이용해서 cryoEM grid를 preparation을 하였다고 한다. 또한 cryoEM에서 단골손님으로 등장하는 문제인 preferred orientation problem을 겪었는데 이 경우에는 tomography에서 사용하는 plate tilting 기법과 Ultra-fast plunging 방법을 이용해서 해결을 했다고 한다. 이를 통해 Merck 에서는 4.3 Å의 고해상도 구조를 규명했다.
해당 세션에서는 현재 구조생물학 분야에서 가장 Leading edge에 있는 과학자들이 최신 논문에 실린 내용을 발표 하였고 동시에 현재 cryoEM 장비 현황이나 기술적인 개발 상태 및 알고리즘에 대해서 함께 발표를 하였다.
1) Single-Particle Cryo-EM Studies of Lipopolysaccharide Transport.
MsbA는 Gram-negative bacteria의 outer membrane을 구성하는 중요한 성분 중 하나인 Lipopolysaccharide (LPS) 를 수송하는 transport로 cytoplasm에서 생성된 LPS를 inner membrane을 통과하여 periplasm로 이동을 시켜주는 flipase이다. 이번 발표에서는 ATP-binding cassette transporter인 MsbA의 다양한 state의 고해상도 구조를 cryo-EM을 이용하여 규명한 내용을 설명하였다. 이 발표에서는 MsbA의 구조를 규명할 때의 문제 해결 방법에 대해서 주로 이야기를 하였다. (cryo-EM에서는 computation을 주로 사용하므로, troubleshooting에 관한 발표가 많았던 것 같다.) 일반적으로 cryoEM 전 sample 상태를 screening하기 위해서 주로 Negative stain TEM을 이용한다. 이때 일반적으로 membrane protein들의 정제에 사용하는 DDM(detergent)을 넣어, detergent shell이 형성되는 것을 이용하는데, DDM으로 negative screening을 진행했을 때는 structural heterogeneity 가 존재하여 고분해능의 구조를 풀 수 없었다고 한다. 이 문제를 해결하기 위해 lipid nanodisk(특히, MSP1D1 & MSP1E3D1)를 이용하여 membrane을 reconstruction 하면 structural heterogeneity가 사라져 uniform conformation 상태의 sample을 만들 수가 있고 이렇게 reconstruction 된 protein-lipid nanodisk complex를 cryoEM을 이용해 고해상도의 구조를 얻었다고 한다. 또한 ATPase activity assay를 진행할 때, 기존에 많이 사용하던 liposome based assay보다 lipid nanodisk based assay에서 좀 더 reasonable하고 높은 activity를 보이는 것을 확인할 수 있었다며, membrane protein 연구에서 lipid nanodisk의 중요성을 강조했다.
2) Near-atomic resolution CryoEM analysis of the Type III Secretion Injectisome.
Bacteria secretion system은 크게 sec-independent (type I, III and IV)와 sec-dependent (type II, V)로 나눠져 있다. 이 발표에서는 그 중에서 가장 크기가 큰 type III secretion system에 관한 연구 결과를 발표를 하였다. Bacteria의 type III secretion hole complex의 경우에는 약 3 MDa이나 되는 거대분자 인데, 이 복합체는 3개의 membrane (host membrane, bacteria outer membrane, bacteria inner membrane)을 관통하는 막 단백질이기 때문에 전체 구조를 한 번에 규명하는 것은 쉽지 않다고 한다. 그래서 작용을 하는 파트 별로 구조를 푼 내용을 위주로 설명을 진행하였다.
X-선 결정학을 사용하는 것은 물론, 큰 부분들의 경우에는 cryoEM, 그리고 intrinsically disorder protein의 경우에는 NMR 등의 다양한 기법을 이용해서 구조를 연구를 한 것이 인상적이었다. 특히 그 중에서 P. aeruginosa의 ruler protein PscP이라고 하여 needle (T3SS의 bacteria outer membrane과 host membrane을 이어주는 부분) length를 sensing 할 수 있는 Model에 대해서 자세히 설명을 하였다. PscP의 N-terminal에는 intrinsically disordered domain이 존재하는데 bacteria는 이것을 needle의 길이를 조절하는 ruler로 사용한다고 한다. 여기에 존재하는 conserved FEQA motif가 C-terminal globular domain과 함께 T3SS의 Needle의 길이를 측정해서 정확한 length가 될 수 있도록 조절한다는 내용이었다.
구조생물학은 다른 분야들과 다르게 상대적으로 유행에 민감한 학문 임에도 불구하고 Natalie Strynadka group에서는 20년 동안 한 가지의 거대 분자의 구조를 다각도로 구조 및 생화학적 특징을 분석하는 것이 대단하다고 생각이 들었다.
1) Molecular Therapy for 2.5-4Å Models: Anecdotes and Progress from the CryoEM Model Challenge.
이 발표의 연사는 Duke Univ.의 Jane Richardson 교수님으로 구조생물학자라면 한 번쯤은 꼭 접해보았을 Molprobity라는 structure validation server을 개발한 분으로, 요즘 이슈가 많이 되고 있는 cryoEM 구조의 validation에 대해서 이야기를 하였다. (특히 단백질) 생체 분자의 구조를 풀어서 논문을 투고할 시에 PDB (Protein Data Bank) validation report를 요구하는 논문들이 상당히 많은데, 이 validation에서 핵심적인 역할을 하는 program이 Molprobity이다. 발표에서는 기존에 X-ray crystallography 구조를 validation을 하는 Molprobity server로 cryoEM 구조를 validation을 하면 여러 가지 문제점이 있다고 한다. 현재 X-ray crystallography를 위한 Molprobity의 경우에는 Rfree, electron density fit 등의 criteria를 기반으로 하고 있는데, cryoEM structure validation에 이 criteria를 그대로 사용하면 많은 문제점이 있을 수 있다고 한다. 그래서 cryoEM structure validation을 위해 CaBLAM이나 Cis-nonPro peptide라는 새로운 validation program이 개발 혹은 개선되었으며 cryoEM structure의 경우에는 이를 이용해서 validation 하는 것이 정확하다고 한다. 특히 CaBLAM의 경우에는 Cα-Cα 사이의 거리를 기반으로 validation을 하며, 2.5~4Å의 상대적으로 고해상도의 cryoEM 구조의 경우에는 large scale virtual dihedral illuminate가 가능해서 cryoEM structure 를 validation하는데 적절하다고 한다. 2013년 PNAS에서 한바탕 소동이 있었던 cryoEM fake structure에 대해서도 언급을 하면서 validation criteria를 엄격하게 만들 것이 중요하고, 현재 cryoEM community에서는 이에 관한 논의가 계속해서 진행중이라고 한다.
1) CASIS Perspective on the Use of the International Space Station National Laboratory for Crystallization Experiments.
Microgravity 상태를 유지하고 있는 우주정거장의 모습. 이렇게 gravity가 적은 상태에서는 결정이 더 잘 성장 할 수 있다고 한다.
2) Microgravity protein crystal growth for x-ray and neutron crystallography: What works and what would not!
앞 세션이 우주정거장에서 다양한 실험들이 진행되고 있다는 발표를 하였다면, 이번 발표에서는 실제 우주정거장에서의 실험에 참가한 group의 결과를 발표하는 자리였다. 이 group에서는 결정의 크기를 크게 만들었다는 것을 중점적으로 발표를 하였는데 이를 통해 우주정거장에서 만들어진 큰 crystal은 Neutron diffraction을 이용한 연구에 용이하다고 한다. Neutron diffraction은 일반적인 X-ray diffraction에서 얻을 수 없는 중성자에 관한 정보를 얻을 수 있기 때문에 Enzyme의 molecular mechanism을 규명하는데 중요한 역할을 할 수 있지만, 기술적으로 diffraction을 시키는 crystal의 크기가 매우 커야만 진행을 할 수 있다. 이러한 문제점을 해결하기 위해 사용되는 우주정거장 같은 microgravity의 상황에서는 결정화를 진행할 때, nucleation이 적게 일어나는 동시에 거의 모든 액체가 diffusion이 일어나서 결정이 일반 중력 (지구의 중력) 상태에서보다도 훨씬 크고 단단하게 자랄 수 있다고 한다. 성공사례로 보여준 cytochrome C의 경우에는 일반적인 상황에서 결정을 키웠을 때 100 ~ 200 nm 정도밖에 자라지 않았으나 같은 조건이지만 미세 중력 존재 하에서 결정화를 하면 2000 ~ 3000 nm 의 크기까지 자랄 수 있었다고 한다. 최근 NASA의 도움으로 nature publishing group에 Nature microgravity 라는 자매지가 발간이 되어 이에 관한 연구들은 더욱더 활발하게 진행이 되고 있다고 한다. 그리고 후속 연구로 crystallization 뿐만 아니라 microgravity에서 cell culture도 진행 중이라고 한다.
1) Better Data with SEC-SAXS.
이 세션에서는 Stanford university에 있는 SLAC National Accelerator Laboratory에 SAXS beamline BL 4-2담당자인 Thomas Weiss 박사님이 현재 빔라인에서 사용하고 있는 SEC-SAXS의 strategy에 대해서 소개를 하였다. 비교적 최근에 batched SAXS를 대신하여 SEC-SAXS technique이 개발이 되어서 protein aggregation을 효율적으로 제거를 할 수 있게 되면서 SAXS에 많은 변화가 있었다. 하지만 이런 SEC-SAXS에도 문제점이 있는데 그 중에 하나가 capillary fouling이다. Capillary fouling은 지속적인 x-ray 에 의한 capillary가 damage를 입어서 background level이 변화 하는 것을 의미한다. 장시간 동안 x-ray를 열어서 같은 capillary에 빔을 조사할 경우 시간에 따른 capillary의 background의 변화를 간과하면 background level을 substrate할 때 어떤 부분을 background로 잡느냐에 따라서 structure noise가 다르게 발생 할 수 있다고 한다. 그래서 이 빔라인에서는 이를 해결하기 위해서 x-ray shutter 를 UV detector에서 protein이 elution 되는 것을 확인하고 그때만 열어서 data collection을 진행함으로써 capillary radiation damage를 최소한으로 줄여capillary fouling을 막는다고 하였다. 추가적으로 이 beamline에서의 SAXS setting은 1번의 실험당 5~10 mg/mL정도의 50 uL 이하의 sample만 필요로 하기 때문에 기존에 있는 다른 beamline들에 비해서 적은 sample로도 SEC-SAXS를 진행 할 수 있다고 한다. 그리고 2.4 mL 짜리의 small volume size exclusion chromatography를 이용하며 flow rate도 매우 저속인 0.04 ~ 0.1 mL/min정도를 사용하고 있다고 한다. 또한 beam의 출력을 11 keV에서 12.4 keV로 올리고 준비된 sample에 DTT 를 첨가하는 방식도 적용하여 기존에 SEC-SAXS data 보다 좋은 quality의 data를 모을 수 있다고 한다.
SLAC의 SSRL BL 4-2 beamline의 현황. Thomas Weiss 박사님은 shutter control이 high quality의 SEC-SAXS data를 얻는 좋은 방법이라고 말하였다.
2) Crystal structure of a 6.5 MDa bacterial microcompartment shell.
Bacterial microcompartments (BMCs)는 매우 크고 아주 많은 단백질로 이루어져 있는 enzyme complex 이다. 이러한 BMC는 bacteria 내에서 매우 다양한 metabolic pathway에 기능하는 것으로 알려져 있는데, 이 BMC는 BMC-H, BMC-Ts, BMC-TD, BMC-TP의 복합 단백질로 구성이 되어있다고 한다. (이전까지는 조성이 정확이 어떤지 알지 못했다.) 자세한 구조적인 정보가 알려져 있지 않아서, 이 group에서는 구조를 풀고자 먼저 결정화를 진행하였다고 한다. (정제를 어떻게 했는지 궁금했지만 그 방법에 대해서는 소개하지 않았다.) 하지만 initial crystal의 경우에는 16 Å 정도 밖에 회절을 하지 않아서 다양한 결정화 technique을 통하여 결정을 improve하였고, 이렇게 만들어진 결정은 3.5 Å까지 회절을 하였지만(C 2 2 2 space group, 394 x 638 x 642 unit cell, 굉장히 거대한 unit cell을 가지고 있다.) 결정학에서 가장 중요한 단계 중의 하나인 phasing 을 해결 할 수 없었다고 한다 (Heavy atom, NCS averaging [self-rotation function; Icosahedral symmetry]을 시도를 하였지만 구조를 풀 수 없었다고 했다.). 구조를 규명하기 위해 여러 방법 중 low resolution structure를 이용해서 phasing을 해결하는 시도를 하였는데, cryoEM을 통해서 low resolution ~ 8 Å의 구조를 만든 후 이를 이용해서 phasing problem을 해결했다고 하였다. 그리고 팁으로 말해 준 내용으로는 이렇게 high symmetry를 갖는 경우에 refinement 시 NCS averaging method를 사용하면 훨씬 좋은 electron density map을 만들어 낼 수 있었다고 이야기 하였다. 이 구조를 통해서 BMC가 540여 개의 단백질로 6.5 MDa의 거대 분자를 이루고 정확히는 BMC-H, BMC-Ts, BMC-TD, BMC-TP의 구성을 알 수 있었다고 한다.
- 자세한 내용은 http://science.sciencemag.org/content/356/6344/1293 참고.
매년 열리는 American Crystallographic Association Annual meeting이 Toronto에서 성황리에 개최되었다. 결정학을 바탕으로 한 다양한 학문들이(물리, 화학, 생물학) 한데 모여서 열띤 토론의 장을 만들었다.
특히 관심이 갔던 것은 2017년 노벨화학상을 cryo-EM이 수상을 하면서 약 60여년 동안 구조생물학의 중심이었던 X-선 결정학자들의 구조생물학을 연구하는 한 가지의 tool로 cryo-EM에 대한 생각이었는데, 세계에서 유명한 결정학자들 조차도 지대한 관심을 갖기 시작하였고 이를 받아들일 준비가 되어있는 모습이 인상적이었다.
또한 SAXS나 EM를 비롯한 다양한 hybrid techniques이 꾸준히 개발이 되면서 bio-molecule에 대한 연구가 앞으로 더욱더 활발해질 것이라는 느낌을 받을 수 있었다.
학회 내내 보이셨던 노년의 사진기사 선생님.
매 세션마다 열정적으로 사진을 찍으시는 모습이 인상적이었다.


text:
Home NEWS Science News Health
"Virtual pillars" separate and sort blood-based nanoparticles
DURHAM, N.C. – Engineers at Duke University have developed a device that uses sound waves to separate and sort the tiniest particles found in blood in a matter of minutes. The technology is based on a concept called "virtual pillars" and could be a boon to both scientific research and medical applications.
Credit: Jinxin Zhang, Duke University
Tiny biological nanoparticles called "small extracellular vesicles" (sEVs) are released from every type of cell in the body and are believed to play a large role in cell-to-cell communication and disease transmission. The new technology, dubbed Acoustic Nanoscale Separation via Wave-pillar Excitation Resonance, or ANSWER for short, not only pulls these nanoparticles from biofluids in under 10 minutes, it also sorts them into size categories believed to have distinct biological roles.
The results appeared online November 23 in the journal Science Advances.
"These nanoparticles have significant potential in medical diagnosis and treatment, but the current technologies for separating and sorting them take several hours or days, are inconsistent, produce low yield or purity, suffer from contamination and sometimes damage the nanoparticles," said Tony Jun Huang, the William Bevan Distinguished Professor of Mechanical Engineering and Materials Science at Duke.
"We want to make extracting and sorting high-quality sEVs as simple as pushing a button and getting the desired samples faster than it takes to take a shower," Huang said.
Recent research indicates that sEVs are comprised of several subgroups with distinct sizes (e.g., smaller than 50 nanometers, between 60 and 80 nanometers, and between 90 and 150 nanometers). Each size is believed to have different biological properties.
The recent discovery of sEV subpopulations has excited researchers because of their potential to revolutionize the field of non-invasive diagnostics, such as the early detection of cancer and Alzheimer's disease. But the particles haven't found their way into clinical settings yet.
Huang said this is largely due to the difficulties associated with separating and isolating these nano-sized sEV subpopulations. To meet this challenge, Huang, his doctoral student Jinxin Zhang, and collaborators at UCLA, Harvard, and Magee-Womens Research Institute, developed the ANSWER platform.
The device uses a single pair of transducers to generate a standing sound wave that envelops a narrow, enclosed channel filled with fluid. The sound wave "leaks" into the liquid center through the channel walls and interacts with the original standing sound wave. With careful design of the wall thickness, channel size and sound frequency, this interaction creates a resonance that forms "virtual pillars" along the center of the channel.
Each of these virtual pillars is essentially a half-egg-shaped region of high pressure. As particles attempt to cross over the pillars, they get pushed toward the edges of the channel. And the bigger the particles, the bigger the push. By tuning the series of virtual pillars to create nuanced forces on the traveling nanoparticles, the researchers can precisely sort them by size into a variety of groups determined by the needs of the experiments at hand.
"The ANSWER EV fractionation technology is the most advanced capability for precise EV fractionation, and it will significantly impact the horizon of EV diagnostics, prognostics and liquid biopsy," said David Wong, director for UCLA Center for Oral/Head & Neck Oncology Research.
In the new paper, the researchers demonstrate that their ANSWER platform can successfully sort sEVs into three subgroups with 96% accuracy for nanoparticles on the larger end of the spectrum and 80% accuracy for the smallest. They also show flexibility in their system, adjusting the number of groupings and ranges of sizes with simple updates to the sound wave parameters. Each of the experiments only took 10 minutes to complete, whereas other methods such as ultra-centrifugation can take several hours or days.
"Due to its contact-free nature, ANSWER offers a biocompatible approach for the separation of biological nanoparticles." Zhang said. "Unlike mechanical filtration methods, which have fixed separation cutoff diameters, ANSWER offers a tunable approach to nanoscale separation, and the cutoff diameter can be precisely modified by varying the input acoustic power."
Moving forward, the researchers will continue improving the ANSWER technology so that it can be efficient in purifying other biologically relevant nanoparticles such as viruses, antibodies and proteins.
This research was supported by the National Institutes of Health (UH3TR002978, R01HD103727, U18TR003778, R01GM132603, R01GM143439 R01GM135486, R01GM144417, R44AG063643) and the National Science Foundation (CMMI-2104295, CMMI-2104526).
CITATION: "A Solution to the Biophysical Fractionation of Extracellular Vesicles: Acoustic Nanoscale Separation via Wave-pillar Excitation Resonance (ANSWER)," Jinxin Zhang, Chuyi Chen, Ryan Becker, Joseph Rufo, Shujie Yang, John Mai, Peiran Zhang, Yuyang Gu, Zeyu Wang, Zhehan Ma, Jianping Xia, Nanjing Hao, Zhenhua Tian, David T. W. Wong, Yoel Sadovsky, Luke P. Lee, and Tony Jun Huang. Science Advances, Nov. 23, 2022. DOI: 10.1126/sciadv.ade0640
https://www.science.org/doi/10.1126/sciadv.ade0640
10.1126/sciadv.ade0640
A Solution to the Biophysical Fractionation of Extracellular Vesicles: Acoustic Nanoscale Separation via Wave-pillar Excitation Resonance (ANSWER)


text:
const request = require('supertest');
const chance = require('chance').Chance();
const should = require('should');

const username = chance.email();
const stub = {
  name: username,
  score: 10
};

process.env.NODE_ENV = 'testing';
process.env.PORT = 3005;

describe('Loading Express', () => {
  var app, server;

  beforeEach(() => {
    delete require.cache[require.resolve('../../bin/www')];
    app = require('../../server').default;
    server = require('../../bin/www').default;
  });

  afterEach((done) => {
    server.close(done);
  });

  it('responds to /api/players', (done) => {
    request(app)
      .get('/api/players')
      .expect(200, done);
  });

  it('404 everything else', (done) => {
    request(app)
      .get('/foo/bar')
      .expect(404, done);
  });

  describe('Player', () => {
    it('should create a player', (done) => {
      request(app)
        .post('/api/players')
        .send(stub)
        .expect(201)
        .end((err, res) => {
          if (err) {
            throw err;
          }

          res.body.name.should.equal(stub.name);
          res.body.score.should.equal(stub.score);

          done();
        });
    });

    it('should respond with an array of players', (done) => {
      request(app)
        .get('/api/players')
        .expect('Content-Type', /json/)
        .expect(200)
        .end((err, res) => {
          if (err) {
            throw err;
          }
          res.body.should.be.a.Array();
          done();
        });
    });
  });
});


text:
package com.rootls.other;

import com.rootls.common.BaseController;
import com.rootls.common.InerCache;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by luowei on 2014/4/13.
 */
@Controller
@RequestMapping("/cache")
public class CacheController {

    @ResponseBody
    @RequestMapping("/clear")
    public String innerCacheClear(){
        InerCache.clearCache();
        return "{\"code\":1,\"msg\":\"ok\"}";
    }

}


text:
Q: HTML/PHP scripting - redirect to a new webpage after validation I am using something similar to the following code to log a user in and redirect that user to a new web page once they are logged in:
<!DOCTYPE HTML>

<meta http-equiv=Content-Type content="text/html;  charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="css/style.css" />
<title>application</title>

<form method="GET" action="validateLogin.php">

Trader Id:

     <input type="text" name="user">

Password:

       <input type="password" name="pass">

             <input type="hidden" size="50" value="<?php echo $var; ?>"/>

       <input type="submit" value="Login">

</form>

EDITED
PHP
$query = mysql_query("SELECT username FROM Users WHERE username=$username");
if (mysql_num_rows($query) != 0) {
  echo 1;
} else {
  echo -1;
}

My PHP validation script (validateLogin.php) returns 1 if the user is logged in and -1 if they do not have an account. How can I modify this script so that when the user logs in, and logs in successfully, they are redirected to a new page rather than being shown the -1 or 1 return?

A: $query = mysql_query("SELECT username FROM Users WHERE username=$username");
if (mysql_num_rows($query) == 1){
   header('Location:success.php'); //Login successfull
}else{
   header('Location:login.php'); //Login failed
}

A: if( $var > 0 ) header('Location:success.php');

A: Just add this into your condition
if (mysql_num_rows($query) != 0) {
  header('Location:success.php');
} else {
  header('Location:login.php');
}


text:
using System;
using System.Web;
using System.Collections.Generic;
using System.Text;
using LTAF.Engine;
using LTAF.Emulators;
using System.Threading;
using System.Text.RegularExpressions;

namespace LTAF
{
    /// <summary>
    /// Class that represents a web page as seen by the browser than can be automated.
    /// </summary>
    public class HtmlPage
    {
        private const int EXECUTE_COMMAND_TIMEOUT = 60;
        private const int REFRESH_TIMEOUT_DEFAULT = 5;

        private const string ERROR_APPLICATIONPATH_NULL = "'ApplicationPath' is required when creating an HtmlPage. "+
            "Pass it through the constructor or make sure a valid ApplicationPathFinder has been registered with the ServiceLocator.";

        private static string _aspnetErrorRegexPattern;
        private static EmulatedBrowserCommandExecutorFactory _defaultFactory = new EmulatedBrowserCommandExecutorFactory();

        private readonly int _threadId;
        private HtmlElementCollection _elements;
        private string _applicationPath = null;

        /// <summary>The index of this window used to locate it in the client</summary>
        internal int WindowIndex { get; set; }

        /// <summary>
        /// The frame hierarchy to use to reach the page under test
        /// </summary>
        internal List<string> FrameHierachy { get; set; }

        /// <summary>
        /// Constructs a new HtmlPage to interact with the page loaded in the browser
        /// </summary>
        public HtmlPage()
            : this(null, null)
        {
        }

        /// <summary>
        /// Constructor that automatically navigates to url specified
        /// </summary>
        /// <param name="navigateUrl">The Url to navigate to</param>
        public HtmlPage(string navigateUrl)
            : this(null, navigateUrl)
        {
        }

        /// <summary>
        /// Constructs a new HtmlPage with an application path to be used to resolve relative paths
        /// </summary>
        /// <param name="applicationPath">Application path used to resolve relative paths</param>
        public HtmlPage(Uri applicationPath)
            : this(applicationPath.AbsoluteUri, null)
        {
        }

        /// <summary>
        /// Constructs a new HtmlPage with an application path to be used to resolve relative paths and navigates to target page
        /// </summary>
        /// <param name="applicationPath">The application path used to resolve relative paths</param>
        /// <param name="navigateUrl">The Url to navigate to</param>
        private HtmlPage(string applicationPath, string navigateUrl)
        {
            if (applicationPath ==  null)
            {
                applicationPath = ServiceLocator.ApplicationPathFinder.GetApplicationPath();

                if (applicationPath == null)
                {
                    throw new InvalidOperationException(ERROR_APPLICATIONPATH_NULL);
                }
            }

            // ensure that DNS name of the host is punycoded (when it is necessary for
            applicationPath = EnsureDnsSafePath(applicationPath);

            _threadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
            _elements = new HtmlElementCollection(this);
            _applicationPath = applicationPath;
            FrameHierachy = new List<string>();

            if (ServiceLocator.BrowserCommandExecutorFactory != null)
            {
                this.BrowserCommandExecutor = ServiceLocator.BrowserCommandExecutorFactory.CreateBrowserCommandExecutor(applicationPath, this);
            }
            else
            {
                this.BrowserCommandExecutor = _defaultFactory.CreateBrowserCommandExecutor(applicationPath, this);
            }

            if (navigateUrl != null)
            {
                this.Navigate(navigateUrl);
            }
        }

        /// <summary>
        /// Ensure that DNS name of the host is punycoded (when it is necessary)
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string EnsureDnsSafePath(string path)
        {
            string safePath = path;

            if (!Uri.IsWellFormedUriString(path, UriKind.RelativeOrAbsolute))
            {
                if (!string.IsNullOrEmpty(path))
                {
                    path = "http://" + path;
                }
            }

            if (Uri.IsWellFormedUriString(path, UriKind.Absolute))
            {
                Uri uri = new Uri(path);
                safePath = uri.Scheme + "://" + uri.DnsSafeHost + (uri.Port != 80 && uri.Port > 0 ? ":" + uri.Port.ToString() : "") + uri.PathAndQuery;
            }

            return safePath;
        }

        #region Properties
        /// <summary>
        /// The command executor to use when issuing command for this page.
        /// </summary>
        internal IBrowserCommandExecutor BrowserCommandExecutor
        {
            get;
            set;
        }

        /// <summary>
        /// The Dom elements that are exposed by this web page.
        /// </summary>
        public HtmlElementCollection Elements
        {
            get
            {
                return _elements;
            }
        }

        /// <summary>
        /// The root Dom element exposed by this web page
        /// </summary>
        public HtmlElement RootElement
        {
            get
            {
                if (this.Elements.Count == 0)
                {
                    throw new InvalidOperationException("Dom has not been loaded, please call Navigate() before trying to access the RootElement property.");
                }

                return this.Elements[0];
            }
        }
        #endregion

        #region ExecuteCommand

        /// <summary>
        /// Execute a command on this web page.
        /// </summary>
        /// <param name="command">The command to execute</param>
        /// <returns>BrowserInfo object containing results from the command execution</returns>
        public BrowserInfo ExecuteCommand(BrowserCommand command)
        {
            return ExecuteCommand(null, command);
        }

        /// <summary>
        /// Execute a command on this web page.
        /// </summary>
        /// <param name="source">HtmlElement that initiated this command, null if none</param>
        /// <param name="command">The command to execute</param>
        /// <returns>BrowserInfo object containing results from the command execution</returns>
        public virtual BrowserInfo ExecuteCommand(HtmlElement source, BrowserCommand command)
        {
            command.Target.WindowIndex = this.WindowIndex;
            if (this.WindowIndex > 0)
            {
                command.Description += String.Format(" (Popup window: {0})", this.WindowIndex);
            }
            if (this.FrameHierachy.Count > 0)
            {
                string[] frames = this.FrameHierachy.ToArray();
                command.Description += String.Format(" (Frame: {0})", String.Join("-", frames));
                command.Target.FrameHierarchy = frames;
            }

            command.Traces = WebTestConsole.GetTraces();

            BrowserInfo browserInfo = null;

            try
            {

                browserInfo = this.BrowserCommandExecutor.ExecuteCommand(Thread.CurrentThread.ManagedThreadId, source, command, EXECUTE_COMMAND_TIMEOUT);
            }
            finally
            {
                WebTestConsole.Clear();
            }

            if (browserInfo != null)
            {
                if (string.IsNullOrEmpty(browserInfo.ErrorMessages))
                {
                    return browserInfo;
                }
                else
                {
                    throw new WebTestException("Exception was thrown by the client engine: " + browserInfo.ErrorMessages + " when running command: " +
                        command.Description + " on the target: <" + command.Target.TagName + " id=" + command.Target.Id + ", index: " + command.Target.Index + ">.");
                }
            }

            throw new TimeoutException(string.Format("BrowserCommand \"{0}\" timed out after {1} seconds(s)!", command.Description, EXECUTE_COMMAND_TIMEOUT));
        }
        #endregion

        #region Navigate
        /// <summary>
        /// Navigate to a url and load its DOM.
        /// </summary>
        /// <param name="url">The absolute or relative url (relative to app root) to navigate to.</param>
        public void Navigate(string url)
        {
            Navigate(url, NavigationVerification.Default);
        }

        /// <summary>
        /// Navigate to a url and load its DOM.
        /// </summary>
        /// <param name="url">The absolute or relative url (relative to app root) to navigate to.</param>
        /// <param name="navigationVerificationMode">NavigationVerification mode</param>
        public void Navigate(string url, NavigationVerification navigationVerificationMode)
        {
            Navigate(url, navigationVerificationMode, 0);
        }

        /// <summary>
        /// Returns an absolute url based on the current application path.
        /// </summary>
        /// <param name="url">The relative url.</param>
        /// <returns>The absolute url.</returns>
        protected internal string ResolveNavigateUrl(string url)
        {
            if (Uri.IsWellFormedUriString(url, UriKind.Absolute))
            {
                return url;
            }
            else if (url == "/" || String.IsNullOrEmpty(url))
            {
                return this._applicationPath;
            }
            else
            {
                string appPath = this._applicationPath.EndsWith("/") ? this._applicationPath : this._applicationPath + "/";
                return appPath + url.TrimStart('/');
            }
        }

        /// <summary>
        /// Navigate to this web page.
        /// </summary>
        /// <param name="url">The absolute or relative url (relative to app root) to navigate to.</param>
        /// <param name="navigationVerificationMode">NavigationVerification mode</param>
        /// <param name="millisecondsWaitToLoad">Time in milliseconds after navigate to wait for page to be fully loaded.</param>
        protected virtual void Navigate(string url, NavigationVerification navigationVerificationMode, int millisecondsWaitToLoad)
        {
            string absoluteUrl = ResolveNavigateUrl(url);

            BrowserCommand command = new BrowserCommand();
            command.Description = String.Format("Navigate - {0}", absoluteUrl);
            command.Handler.RequiresElementFound = false;
            command.Handler.ClientFunctionName = BrowserCommand.FunctionNames.NavigateToUrl;
            command.Handler.SetArguments(absoluteUrl, navigationVerificationMode);
            this.ExecuteCommand(command);

            if (millisecondsWaitToLoad > 0)
            {
                System.Threading.Thread.Sleep(millisecondsWaitToLoad);
            }

            this.Elements.Refresh();
        }
        #endregion

        #region GetCurrentUrl
        /// <summary>
        /// Returns the url of the page currently loaded
        /// </summary>
        /// <returns>Url of the page currently loaded</returns>
        public string GetCurrentUrl()
        {
            BrowserCommand command = new BrowserCommand(BrowserCommand.FunctionNames.GetCurrentUrl);
            command.Description = "GetCurrentUrl";
            command.Handler.RequiresElementFound = false;
            return this.ExecuteCommand(command).Data;
        }
        #endregion

        #region ExecuteScript
        /// <summary>
        /// Evaluates a custom script expression in the context of the page under test
        /// </summary>
        /// <param name="scriptExpression">The javascript expression to evaluate</param>
        public object ExecuteScript(string scriptExpression)
        {
            BrowserCommand command = new BrowserCommand();
            command.Description = "ExecuteScript";
            command.Handler.RequiresElementFound = false;
            command.Handler.ClientFunctionName = BrowserCommand.FunctionNames.ExecuteScript;
            command.Handler.SetArguments(scriptExpression);

            BrowserInfo result = this.ExecuteCommand(command);
            if(result == null || string.IsNullOrEmpty(result.Data))
            {
                return null;
            }
            else
            {
                return TestDriverPage.SystemWebExtensionsAbstractions.DeserializeJson(result.Data);
            }
        }
        #endregion

        #region WaitForAsyncPostComplete
        /// <summary>
        /// Method that waits until no asynchronous post is in execution
        /// </summary>
        public void WaitForAsyncPostComplete()
        {
            this.WaitForScript("Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack() == false", 1000);
        }
        #endregion

        #region WaitForScript
        /// <summary>
        /// Method that waits until a custom script expression that is evaluated in the context of the
        /// page under test returns true
        /// </summary>
        /// <param name="scriptExpression">The javascript expression to evaluate</param>
        /// <param name="timeoutInSeconds">The timeout in seconds to keep trying the expression before fail.</param>
        public void WaitForScript(string scriptExpression, int timeoutInSeconds)
        {
            BrowserCommand command = new BrowserCommand();
            command.Description = "WaitForScript";
            command.Handler.RequiresElementFound = false;
            command.Handler.ClientFunctionName = BrowserCommand.FunctionNames.WaitForScript;
            command.Handler.SetArguments(scriptExpression, timeoutInSeconds * 1000);

            this.ExecuteCommand(command);
        }
        #endregion

        #region GetPopupWindow
        /// <summary>
        /// Method that gets a reference to an HTML popup page
        /// </summary>
        /// <param name="index">Zero based index of windows opened by driver</param>
        /// <param name="timeoutInSeconds">Timeout to wait for the popup window to finish loading</param>
        /// <param name="waitBetweenAttemptsInMilliseconds">Milliseconds to wait between attempting to get popup page</param>
        /// <returns>HtmlPage to interact with the supplied popup window</returns>
        public HtmlPage GetPopupPage(int index, int timeoutInSeconds = REFRESH_TIMEOUT_DEFAULT, int waitBetweenAttemptsInMilliseconds = 500)
        {
            HtmlPage popupPage = new HtmlPage();
            popupPage.WindowIndex = index;

            Exception exception = null;
            DateTime timeout = DateTime.Now.AddSeconds(timeoutInSeconds);

            // Wait until the popup page can be refreshed, or until timeout
            while (!TryPageRefresh(popupPage, out exception) && DateTime.Now < timeout)
            {
                Thread.Sleep(waitBetweenAttemptsInMilliseconds);
            }

            if (exception != null)
            {
                throw new WebTestException(
                    String.Format("Failed to retrieve the popup window after {0} seconds.", timeoutInSeconds),
                    exception);
            }

            return popupPage;
        }
        #endregion

        #region GetFrameWindow
        /// <summary>
        /// Method that gets a reference to an HTML frame
        /// </summary>
        /// <param name="frameNames">One or more frame names reachable from the current page</param>
        /// <returns>HtmlPage to interact with the supplied frame</returns>
        public HtmlPage GetFramePage(params string[] frameNames)
        {
            return GetFramePage(frameNames, REFRESH_TIMEOUT_DEFAULT);
        }

        /// <summary>
        /// Method that gets a reference to an HTML frame
        /// </summary>
        /// <param name="frameNames">One or more frame names reachable from the current page</param>
        /// <param name="timeoutInSeconds">Timeout to wait for the target frame to finish loading</param>
        /// <param name="waitBetweenAttemptsInMilliseconds">Milliseconds to wait between attempting to get frame</param>
        /// <returns>HtmlPage to interact with the supplied frame</returns>
        public HtmlPage GetFramePage(string[] frameNames, int timeoutInSeconds = REFRESH_TIMEOUT_DEFAULT, int waitBetweenAttemptsInMilliseconds = 500)
        {
            HtmlPage framePage = new HtmlPage();
            framePage.FrameHierachy.AddRange(this.FrameHierachy);
            framePage.FrameHierachy.AddRange(frameNames);

            Exception exception = null;
            DateTime timeout = DateTime.Now.AddSeconds(timeoutInSeconds);

            // Wait until the frame page can be refreshed, or until timeout
            while (!TryPageRefresh(framePage, out exception) && DateTime.Now < timeout)
            {
                Thread.Sleep(waitBetweenAttemptsInMilliseconds);
            }

            if (exception != null)
            {
                throw new WebTestException(
                    String.Format("Failed to retrieve the frame after {0} seconds.", timeoutInSeconds),
                    exception);
            }

            return framePage;
        }
        #endregion

        /// <summary>
        /// Helper method that attempts to refresh the elements collection of a page
        /// </summary>
        private bool TryPageRefresh(HtmlPage page, out Exception exception)
        {
            exception = null;
            try
            {
                page.Elements.Refresh();
            }
            catch (Exception e)
            {
                exception = e;
                return false;
            }
            return true;
        }

        /// <summary>
        /// Returns whether the current page is an Asp.Net server error page.
        /// </summary>
        /// <returns>True if current page is an Asp.Net server error page, false otherwise</returns>
        public virtual bool IsServerError()
        {
            HtmlElementFindParams findParams = new HtmlElementFindParams("h1", 0);
            if (this.Elements.Exists(findParams, 0))
            {
                if (_aspnetErrorRegexPattern == null)
                {
                    WebResourceReader reader = new WebResourceReader();
                    string aspnetErrorStringFormatter = reader.GetString("System.Web", "System.Web", "Error_Formatter_ASPNET_Error"); //Server Error in '{0}' Application.
                    _aspnetErrorRegexPattern = String.Format(aspnetErrorStringFormatter, ".+?");
                }

                HtmlElement h1 = this.Elements.Find(findParams, 0);
                return Regex.IsMatch(h1.CachedInnerText, _aspnetErrorRegexPattern , RegexOptions.Singleline);
            }
            return false;

        }
    }
}


'Bad' parenting as car crash telly and 'mothers gone wrong' is just part of the media pathologization of parenting, indicating the spectrum of ideology, invested in mothers. Emotional Capital (like Social Capital but of the private sphere) is used here to understand power in mothering, invisible labour deployed, creation of 'families' and reproduction of social values and class. With Tracey Jenson, Rachel Thompson and Martina Mullaney of Enemies of Good Art. Chaired by Esther Windsor.
Dr Tracey Jensen's is a Lecturer at Newcastle University and recently published "Watching with my hands over my eyes": Shame and irritation in ambivalent encounters with 'Bad Mothers' in Radical Psychology.
Dr Rachel Thomson is Professor of Social Research at Faculty of Health and Social Care, The Open University. Her book 'Making Modern Mothers', questions: What does motherhood mean today?
Esther Windsor is a curator and artist completing a practice based, Fine Art PhD at Kingston University, Ugly Beast: A critical study of curating contemporary fine art.