text:
Q: Sort two arrays the same way For example, if I have these arrays:
var name = ["Bob","Tom","Larry"];
var age =  ["10", "20", "30"];

And I use name.sort() the order of the "name" array becomes:
var name = ["Bob","Larry","Tom"];

But, how can I sort the "name" array and have the "age" array keep the same order? Like this:
var name = ["Bob","Larry","Tom"];
var age =  ["10", "30", "20"];

A: You can sort the existing arrays, or reorganize the data.
Method 1:
To use the existing arrays, you can combine, sort, and separate them:
(Assuming equal length arrays)
var names = ["Bob","Tom","Larry"];
var ages =  ["10", "20", "30"];

//1) combine the arrays:
var list = [];
for (var j = 0; j < names.length; j++)
    list.push({'name': names[j], 'age': ages[j]});

//2) sort:
list.sort(function(a, b) {
    return ((a.name < b.name) ? -1 : ((a.name == b.name) ? 0 : 1));
    //Sort could be modified to, for example, sort on the age
    // if the name is the same. See Bonus section below
});

//3) separate them back out:
for (var k = 0; k < list.length; k++) {
    names[k] = list[k].name;
    ages[k] = list[k].age;
}

This has the advantage of not relying on string parsing techniques, and could be used on any number of arrays that need to be sorted together.
Method 2: Or you can reorganize the data a bit, and just sort a collection of objects:
var list = [
    {name: "Bob", age: 10},
    {name: "Tom", age: 20},
    {name: "Larry", age: 30}
    ];

list.sort(function(a, b) {
    return ((a.name < b.name) ? -1 : ((a.name == b.name) ? 0 : 1));
});

for (var i = 0; i<list.length; i++) {
    alert(list[i].name + ", " + list[i].age);
}

For the comparisons,-1 means lower index, 0 means equal, and 1 means higher index. And it is worth noting that sort() actually changes the underlying array.
Also worth noting, method 2 is more efficient as you do not have to loop through the entire list twice in addition to the sort.
http://jsfiddle.net/ghBn7/38/
Bonus Here is a generic sort method that takes one or more property names.
function sort_by_property(list, property_name_list) {
  list.sort((a, b) => {
    for (var p = 0; p < property_name_list.length; p++) {
      prop = property_name_list[p];
      if (a[prop] < b[prop]) {
        return -1;
      } else if (a[prop] !== a[prop]) {
        return 1;
      }
    }
    return 0;
  });
}

Usage:
var list = [
        {name: "Bob", age: 10},
        {name: "Tom", age: 20},
        {name: "Larry", age: 30},
        {name: "Larry", age: 25}
    ];

sort_by_property(list, ["name", "age"]);

for (var i = 0; i<list.length; i++) {
    console.log(list[i].name + ", " + list[i].age);
}

Output:

*

*Bob, 10

*Larry, 25

*Larry, 30

*Tom, 20

A: This solution (my work) sorts multiple arrays, without transforming the data to an intermediary structure, and works on large arrays efficiently. It allows passing arrays as a list, or object, and supports a custom compareFunction.
Usage:
let people = ["john", "benny", "sally", "george"];
let peopleIds = [10, 20, 30, 40];

sortArrays([people, peopleIds]);
[["benny", "george", "john", "sally"], [20, 40, 10, 30]] // output

sortArrays({people, peopleIds});
{"people": ["benny", "george", "john", "sally"], "peopleIds": [20, 40, 10, 30]} // output

Algorithm:

*

*Create a list of indexes of the main array (sortableArray)

*Sort the indexes with a custom compareFunction that compares the values, looked up with the index

*For each input array, map each index, in order, to its value

Implementation:
/**
 *  Sorts all arrays together with the first. Pass either a list of arrays, or a map. Any key is accepted.
 *     Array|Object arrays               [sortableArray, ...otherArrays]; {sortableArray: [], secondaryArray: [], ...}
 *     Function comparator(?,?) -> int   optional compareFunction, compatible with Array.sort(compareFunction)
 */
function sortArrays(arrays, comparator = (a, b) => (a  b) ? 1 : 0) {
    let arrayKeys = Object.keys(arrays);
    let sortableArray = Object.values(arrays)[0];
    let indexes = Object.keys(sortableArray);
    let sortedIndexes = indexes.sort((a, b) => comparator(sortableArray[a], sortableArray[b]));

    let sortByIndexes = (array, sortedIndexes) => sortedIndexes.map(sortedIndex => array[sortedIndex]);

    if (Array.isArray(arrays)) {
        return arrayKeys.map(arrayIndex => sortByIndexes(arrays[arrayIndex], sortedIndexes));
    } else {
        let sortedArrays = {};
        arrayKeys.forEach((arrayKey) => {
            sortedArrays[arrayKey] = sortByIndexes(arrays[arrayKey], sortedIndexes);
        });
        return sortedArrays;
    }
}

See also https://gist.github.com/boukeversteegh/3219ffb912ac6ef7282b1f5ce7a379ad

A: If performance matters, there is sort-ids package for that purpose:

var sortIds = require('sort-ids')
var reorder = require('array-rearrange')

var name = ["Bob","Larry","Tom"];
var age =  [30, 20, 10];

var ids = sortIds(age)
reorder(age, ids)
reorder(name, ids)

That is ~5 times faster than the comparator function.

A: It is very similar to jwatts1980's answer (Update 2).
Consider reading Sorting with map.
name.map(function (v, i) {
    return {
        value1  : v,
        value2  : age[i]
    };
}).sort(function (a, b) {
    return ((a.value1  name[a].localeCompare(name[b]) )

const sortedName = indices.map(i => name[i]),
const sortedAge = indices.map(i => age[i])

Here's a snippet:

const name = ["Bob","Tom","Larry"],
      age =  ["10", "20", "30"],

      indices = Array.from(name.keys())
                     .sort( (a,b) => name[a].localeCompare(name[b]) ),

      sortedName = indices.map(i => name[i]),
      sortedAge = indices.map(i => age[i])

console.log(indices)
console.log(sortedName)
console.log(sortedAge)

A: You are trying to sort 2 independet arrays by only calling sort() on one of them.
One way of achieving this would be writing your own sorting methd which would take care of this, meaning when it swaps 2 elements in-place in the "original" array, it should swap 2 elements in-place in the "attribute" array.
Here is a pseudocode on how you might try it.
function mySort(originals, attributes) {
    // Start of your sorting code here
        swap(originals, i, j);
        swap(attributes, i, j);
    // Rest of your sorting code here
}

A: inspired from @jwatts1980's answer, and @Alexander's answer here I merged both answer's into a quick and dirty solution;
The main array is the one to be sorted, the rest just follows its indexes
NOTE: Not very efficient for very very large arrays
 /* @sort argument is the array that has the values to sort
   @followers argument is an array of arrays which are all same length of 'sort'
   all will be sorted accordingly
   example:

   sortMutipleArrays(
         [0, 6, 7, 8, 3, 4, 9],
         [ ["zr", "sx", "sv", "et", "th", "fr", "nn"],
           ["zero", "six", "seven", "eight", "three", "four", "nine"]
         ]
   );

  // Will return

  {
     sorted: [0, 3, 4, 6, 7, 8, 9],
     followed: [
      ["zr", th, "fr", "sx", "sv", "et", "nn"],
      ["zero", "three", "four", "six", "seven", "eight", "nine"]
     ]
   }
 */

You probably want to change the method signature/return structure, but that should be easy though. I did it this way because I needed it
var sortMultipleArrays = function (sort, followers) {
  var index = this.getSortedIndex(sort)
    , followed = [];
  followers.unshift(sort);
  followers.forEach(function(arr){
    var _arr = [];
    for(var i = 0; i < arr.length; i++)
      _arr[i] = arr[index[i]];
    followed.push(_arr);
  });
  var result =  {sorted: followed[0]};
  followed.shift();
  result.followed = followed;
  return result;
};

var getSortedIndex = function (arr) {
  var index = [];
  for (var i = 0; i < arr.length; i++) {
    index.push(i);
  }
  index = index.sort((function(arr){
  /* this will sort ints in descending order, change it based on your needs */
    return function (a, b) {return ((arr[a] > arr[b]) ? -1 : ((arr[a] < arr[b]) ? 1 : 0));
    };
  })(arr));
  return index;
};

A: I was looking for something more generic and functional than the current answers.
Here's what I came up with: an es6 implementation (with no mutations!) that lets you sort as many arrays as you want given a "source" array
/**
 * Given multiple arrays of the same length, sort one (the "source" array), and
 * sort all other arrays to reorder the same way the source array does.
 *
 * Usage:
 *
 * sortMultipleArrays( objectWithArrays, sortFunctionToApplyToSource )
 *
 * sortMultipleArrays(
 *   {
 *    source: [...],
 *    other1: [...],
 *    other2: [...]
 *   },
 *   (a, b) => { return a - b })
 * )
 *
 * Returns:
 *   {
 *      source: [..sorted source array]
 *      other1: [...other1 sorted in same order as source],
 *      other2: [...other2 sorted in same order as source]
 *   }
 */
export function sortMultipleArrays( namedArrays, sortFn ) {
    const { source } = namedArrays;
    if( !source ) {
        throw new Error('You must pass in an object containing a key named "source" pointing to an array');
    }

    const arrayNames = Object.keys( namedArrays );

    // First build an array combining all arrays into one, eg
    // [{ source: 'source1', other: 'other1' }, { source: 'source2', other: 'other2' } ...]
    return source.map(( value, index ) =>
        arrayNames.reduce((memo, name) => ({
            ...memo,
            [ name ]: namedArrays[ name ][ index ]
        }), {})
    )
    // Then have user defined sort function sort the single array, but only
    // pass in the source value
    .sort(( a, b ) => sortFn( a.source, b.source ))
    // Then turn the source array back into an object with the values being the
    // sorted arrays, eg
    // { source: [ 'source1', 'source2' ], other: [ 'other1', 'other2' ] ... }
    .reduce(( memo, group ) =>
        arrayNames.reduce((ongoingMemo, arrayName) => ({
            ...ongoingMemo,
            [ arrayName ]: [
                ...( ongoingMemo[ arrayName ] || [] ),
                group[ arrayName ]
            ]
        }), memo), {});
}

A: You could append the original index of each member to the value, sort the array, then remove the index and use it to re-order the other array. It will only work where the contents are strings or can be converted to and from strings successfuly.
Another solution is keep a copy of the original array, then after sorting, find where each member is now and adjust the other array appropriately.

A: I was having the same issue and came up with this incredibly simple solution.  First combine the associated ellements into strings in a seperate array then use parseInt in your sort comparison function like this:

A: Simplest explantion is the best, merge the arrays, and then extract after sorting:
create an array
name_age=["bob@10","Tom@20","Larry@30"];

sort the array as before, then extract the name and the age, you can use @ to reconise where
name ends and age begins. Maybe not a method for the purist, but I have the same issue and this my approach.

A: How about:
var names = ["Bob","Tom","Larry"];
var ages =  ["10", "20", "30"];
var n = names.slice(0).sort()
var a = [];
for (x in n)
{
i = names.indexOf(n[x]);
a.push(ages[i]);
names[i] = null;
}
names = n
ages = a

redpajama_set_name: RedPajamaStackExchange


Description: The "Jessie Bain" was a small wooden steamer of 39 gross tons. She was built at Clayton, New York in 1888. She was one of the many small vessels that carried passengers among the Thousand Islands. This photograph was taken at Fine View Park, New York.


Olympia Fitness and Performance trains all walks of life, from 10-year olds to retirees, aspiring firefighters to aging golfers, and highschool athletes to weekend warriors. Regardless of age or ability, we have a program to fit your needs!
Our mission is to provide Rhode Island's best personal fitness training, group fitness classes, sports speed and agility training, and Titleist certified golf fitness training. Based in Cranston, RI our state of the art personal training, group fitness and sports performance facility is conveniently located within minutes of all towns within the Greater Providence area including Warwick, West Warwick, East Greenwich, West Greenwich, Cumberland and North Smithfield. Our personal trainers and group fitness instructors are Certified Strength and Conditioning Specialists (CSCS) with a 4-year degree in an Exercise Science related field or Certified Personal Trainers, and they offer years of experience. We are RI's best training facility because help each client, no matter what their ability level, achieve their personal fitness goals and get the results that they're looking for.
Great Trainers. Great Workouts. Great Results.
Achieve your highest level of fitness in a safe and inspirational environment.
Our mission is to provide our clients with the highest quality personal training services and group fitness instruction to help them achieve life-changing results.
Olympia Fitness + Performance does a great job of working the entire body into each workout. I have trained at many different places and I am continuously impressed by the variety of legitimate exercises that the trainers put me through. The facility is a great place to workout and has all of the amenities that an elite facility should have. I look forward to continuing to work with Olympia Fitness + Performance.
Click Here To Learn More About Our Facility In This Great Writeup On rhodeislandhomes.com!
Olympia Fitness + Performance is a state of the art training facility in Cranston RI that employs a highly qualified staff of Certified Strength and Conditioning Specialists (CSCS) and Certified Personal Trainers. We have worked with athletes and professionals of all ability levels and walks of life, and will do whatever it takes to help you achieve your goals. So what are you waiting for? Regardless of your current level of fitness, the time to start is now!


text:
Baltic Journal of Art History
Vol 7 (2014): Baltic Journal of Art History 7 Spring 2014 /
ART AND TRUTH
Juhan Maiste
DOI: https://doi.org/10.12697/BJAH.2014.7.07
Keywords: Art, Truth, Art History, The Analytic Versus the Phenomenological Approach
Art and truth are the two diferent beginnings of understanding our world, two possibilities that the artists themselves, as well as the authors of art history, often treat if not as opposite, then still as diferent in their fundamental essence. Mostly proceeding from the Platonic conception of idea (eidos) and form (morphe), the creation of the world of God and the creation of the world of man appears to us in the form of the piece of art what one can see and use but never understand in its final meanings and essence. Art is an attribute of idea, while truth in its turn is more profound than art, leaving art rather an illustrative role. The prerequisite of writing about truth is its logical foundation which, as the starting point of the epistemological side, prefers logical explanation, through which the output of the author fnds its place via the historical narrative or its semantic signifcance, being associated rather with the world that surrounds art than with art itself. According to this the non-epistemological fctional reality of art is given to us by diferent representations, while the truth remains to us a secret and a sort of Pandora's box that nobody has yet been able to open. The present article should be understood as a quest that seeks to bring forth art's actual nature from the shadow of diferent techniques, iconological approaches, political and social context, focusing in so doing on art as the unity of the external and the internal, including thereby the invisible and indistinguishable immaterial plasma, as well as the connected refection in the form of a visual image. At the same time, the author of this essay understands the discrepancy and the complicated nature of his aim. The article should be interpreted as a sort of search or then a pilgrimage into the depths of diferent opinions and evaluations of artistic reality, defning it from Aristotle to Plotinus, and from Kant to the new possibilities of phenomenology of the 20th century of Heidegger and Derrida. The aim of this article is to take under the observation and hesitation the methods achieved by the so-called "critical art history", and instead of mourning the "art history" as a discoursive paradigm, to speak in the beneft of the new "history of art" where the pieces of art (artefacts) appear to us as fresh corals lifted up from the bottom of the ocean. As a sort of revelation art gives birth both to poetry and which, since Herder, has been characterized as the metaphysical and inexplicable essence of the image – as something that is born out of the darkness of fantasy opens as light on the paintings of Olav Maran, William Turner or Jan van Eyck. The precondition of understanding art is not a trace in memory (eidòlon) or an image (eikòn), but the idea itself, which does not appear before or after the facts but simultaneously with them, thus opening the deeper contents of our psychological subconsciousness, fowing out as ergon in any work of art. And not anywhere else – neither above nor below, right or left. Art and truth are two diferent sides of the one and the same phenomenon – the world as a piece of art, which can be experienced and understood time and again through the ability given to man to understand the world within the limits that we are able to understand. This makes the understanding of art both complicated and simple, seeking not so much the proof than the enlightening experience. Without ofering practical instructions and suggestions as to how we should recognize art or to write about it, the author of this essay has rather expressed his concern about the conventional approach to the history of art today which, while constantly approaching science, has deprived art of its most essential part. Having alienated from the magical cathartic feeling of the touch of the genius, which is mediated rather by the emotions of joy and sorrow, good and bad, beautiful and ugly, which we use anyway as our fundamental tools describing and perhaps understanding the world and ourselves. Having changed the universe (Greek: apeiros) into cosmos, we have been able to weave the warp into the fabric of art and art facts, yet without understanding the meaning of single forms which are born again and again between the light and myself as the recipient of light. As much as art can be the twin sister of science, it is a part of the human soul and the divine spirit which, as the religious recognition, will open itself only to those who themselves are ready to open themselves to it.
Juhan Maiste is professor and Head of Departement of Art History at the university of Tartu. As a prolifc writer he has authored a large number of monographs and articles on architecture, classicism, cultural heritage, the philosophy and poetics of art history. Also among his scholarly interests have been Estonian and Livonian manor architecture, the phenomenon of park landscapes as well as the work of Johann Wilhelm Krause. In addition to teaching and research, professor Maiste curates the publication of the Baltic Journal of Art History.
Vol 7 (2014): Baltic Journal of Art History 7 Spring 2014
Juhan Maiste, Salvation Through Religion. The Rebirth Of The Classics In Arent Passer's Oeuvre. , Baltic Journal of Art History: Vol 8 (2014): Baltic Journal of Art History 8 Autumn 2014
Juhan Maiste, A Genius and His Myth: The Known and Unknown Michel Sittow , Baltic Journal of Art History: Vol 9 (2015): Baltic Journal of Art History 9 Spring 2015
Kadri Asmer, Juhan Maiste, In Search of the University Landscape , Baltic Journal of Art History: Vol 15 (2018): Baltic Journal of Art History 15 Spring 2018. In Search of the University Landscape: The Age of the Enlightenment, Volume I
Juhan Maiste, Tartu University: An Icon of Enlightenment in the North , Baltic Journal of Art History: Vol 15 (2018): Baltic Journal of Art History 15 Spring 2018. In Search of the University Landscape: The Age of the Enlightenment, Volume I
Juhan Maiste, THE CONCEPT OF RUSSIAN ARCHITECTURE IN THE BALTIC PROVINCES BETWEEN THE GREAT NORTHERN WAR AND THE COSMOPOLITANISM OF THE 19TH CENTURY , Baltic Journal of Art History: Vol 17 (2019): Baltic Journal of Art History 17 Spring 2019
Published by the University of Tartu Press in cooperation with the Department of Art History,
Institute of History and Archaeology, University of Tartu

redpajama_set_name: RedPajamaCommonCrawl


NAC wants your honest feedback. This survey consists of just a few questions and takes only a moment to complete. We thank you for taking the time to complete this survey and look forward to working with you in the future.
Note: It is optional to leave your personal information with your submission along with other areas of the survey.
Would you work with NAC again?
Use the space below to provide any additional feedback.


The OAME 2016 planning committee is pleased to announce that REGISTRATION IS NOW LIVE !!!
Register now on MCIS – choose the sessions you wish to attend – and pick the special events to add to make the conference an extra special experience. The Hospitality committee is planning a number of exciting events – including an amazing Annual Math Banquet on Thursday night !


1.Preheat oven to 170°C. Line 2 baking trays with greaseproof paper.
2.Using an electric mixer, beat the butter and icing sugar until light and fluffy, about 5 minutes.
3.Add the potato starch and plain flour, and mix to form a soft dough (do not worry if it looks sticky at this point. You should be able to pinch some off with your fingers and roll into a ball).
4.Roll into small balls (about 2-3cm diameter), arrange on the baking tray and press lightly with a fork to flatten and make indentation, dipping the fork in water after each press to prevent the cookie dough from sticking to the fork.
5.Bake in preheated oven for 15-17 mins (15 mins if you're making 2cm ones and 17 mins for 3cm ones) on the upper rack. The cookie will still look white when it comes out of the oven (this is normal). Allow to cool on baking tray and store in a tupperware once cooled.


text:
Home Markets
Do you still think Patterson-UTI Energy Inc. (NASDAQ:PTEN) is worth a look?
in Markets
Stocks of Patterson-UTI Energy Inc. (NASDAQ:PTEN) traded higher last session on Wall Street, down -2.48% to $15.73.
According to the data, Patterson-UTI Energy Inc. (NASDAQ:PTEN) has 15 analysts covering its stock. The consensus rating among analysts is 'Overweight'. As we calculate the median target price by taking the range between a high of $26.00 and a low of $18.00, we find $23.00. Given the previous closing price of $16.13, this indicates a potential upside of 42.59 percent. PTEN stock price is now -2.52% away from the 50-day moving average and 0.37% away from the 200-day moving average. The market capitalization of the company currently stands at $3.38B.
A total of 5 analysts have issued a hold rating and 7 have given it a buy rating. Brokers who have rated the stock have averaged $23.00 as their price target over the next twelve months.
On July 15, 2022, BofA Securities Downgraded its previous 'Buy' rating to 'Neutral' on the stock reducing its target price from $22 to quote $13.50, while 'Piper Sandler' rates the stock as 'Neutral'.
In other news, Holcomb James Michael, President-Drilling Subsidiary sold 58,335 shares of the company's stock on Nov 04. The stock was sold for $1,087,948 at an average price of $18.65. Upon completion of the transaction, the President-Drilling Subsidiary now directly owns 273,108 shares in the company, valued at $4.3 million. An SEC document containing details of the transaction can be found on the SEC's website. On Oct 26, President-Drilling Subsidiary Holcomb James Michael sold 16,666 shares of the business's stock. A total of $266,823 was realized by selling the stock at an average price of $16.01. This leaves the insider owning 331,443 shares of the company worth $5.21 million. Insiders disposed of 2,636,491 shares of company stock worth roughly $41.47 million over the past 1 year. A total of 1.00% of the company's stock is owned by insiders.
There have been several recent changes in the stakes of large investors in PTEN stock. A new stake in Patterson-UTI Energy Inc. shares was purchased by ASCRIBE CAPITAL LLC during the first quarter worth $59,223,000. CASTLEARK MANAGEMENT LLC invested $14,066,000 in shares of PTEN during the first quarter. In the first quarter, GREAT LAKES ADVISORS, LLC acquired a new stake in Patterson-UTI Energy Inc. valued at approximately $6,632,000. HRT FINANCIAL LP acquired a new stake in PTEN for approximately $6,215,000. BECK BODE, LLC purchased a new stake in PTEN valued at around $5,440,000 in the second quarter. In total, there are 371 active investors with 98.40% ownership of the company's stock.
Wednesday's opening bell rang with an opening price of $16.25 for Patterson-UTI Energy Inc. (NASDAQ: PTEN). During the past 12 months, Patterson-UTI Energy Inc. has had a low of $7.47 and a high of $20.53. As of last week, the company has a debt-to-equity ratio of 0.52, a current ratio of 1.50, and a quick ratio of 1.40. The fifty day moving average price for PTEN is $16.22 and a two-hundred day moving average price translates $15.68 for the stock.
The latest earnings results from Patterson-UTI Energy Inc. (NASDAQ: PTEN) was released for Sep, 2022. According to the Oil & Gas Drilling Company, earnings per share came in at $0.28, beating analysts' expectations of $0.18 by 0.1. This compares to -$0.44 EPS in the same period last year. The net profit margin was -13.20% and return on equity was -19.20% for PTEN. The company reported revenue of $727.5 million for the quarter, compared to $357.88 million a year earlier. Comparatively to last year's same quarter, the company's quarterly revenue rose 103.28 percent. For the current quarter, analysts expect PTEN to generate $709.43M in revenue.
Moreover, the firm recently paid out its quarterly dividend on 12/15/2022. Investors who held shares on 12/01/2022 were paid a $0.08 dividend. On an annualized basis, this represents a $0.32 dividend and a 2.03% percent yield. There was an ex-dividend date of 11/30/2022 for this dividend.
Patterson-UTI Energy Inc.(PTEN) Company Profile
Patterson-UTI Energy, Inc., through its subsidiaries, provides onshore contract drilling services to oil and natural gas operators in the United States and internationally. It operates through three segments: Contract Drilling Services, Pressure Pumping Services, and Directional Drilling Services. The Contract Drilling Services segment markets its contract drilling services primarily in west Texas, Appalachia, Rockies, Oklahoma, South Texas, East Texas, and Colombia. As of December 31, 2021, this segment had a drilling fleet of 192 marketable land-based drilling rigs. The Pressure Pumping Services segment offers pressure pumping services that consist of well stimulation for the completion of new wells and remedial work on existing wells, as well as hydraulic fracturing, cementing, and acid pumping services in Texas and the Appalachian region. The Directional Drilling Services segment provides a suite of directional drilling services, including directional drilling and measurement-while-drilling services; supply and rental of downhole performance motors; and software and services that enhances the accuracy of directional and horizontal wellbores, wellbore quality, and on-bottom rate of penetration. It also services equipment to drilling contractors, as well as provides electrical controls and automation to the energy, marine, and mining industries in North America and other markets; and owns and invests in oil and natural gas assets as a non-operating working interest owner located principally in Texas and New Mexico. Patterson-UTI Energy, Inc. was founded in 1978 and is headquartered in Houston, Texas.
Tags: NASDAQ:PTENPatterson-UTI Energy Inc.PTENPTEN stock
Does SentinelOne Inc. (NYSE:S) have deteriorating prospects?
A Stock With Stellar Fundamentals? Harmony Gold Mining Company Limited (NYSE:HMY): Is It Right For You?
Do investors have a safe investment in Onconova Therapeutics Inc. (NASDAQ:ONTX)?
Does Kingsoft Cloud Holdings Limited (NASDAQ:KC) warrant a purchase right now? What to Consider Before Making a Decision
Baker Hughes Company (BKR) Holding Strong: What's pushing it?
Could Sabre Corporation (SABR) stock price achieve new all-time highs if its expected earnings and revenue increase?
There is little time left for Rent the Runway Inc. (RENT) to reach its 1-year target estimate. How soon will it surpass it?
A breakdown of the latest mutual funds holding Sunstone Hotel Investors Inc. (SHO)
There is little time left for DocuSign Inc. (DOCU) to reach its 1-year target estimate. How soon will it surpass it?
Before Investing In Netflix Inc. (NASDAQ:NFLX), Here Are Some Things To Consider
Regal Rexnord Corporation (NYSE:RRX) Risks You Should Know Before Investing


text:
Q: Liferay Pagination not working I have created MVC portlet. In doView method I get the custom list(custom) based on the current login user.
@Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse){
List<LeadPojo> leadpojoli = new ArrayList<LeadPojo>();
LeadList lead_list = new LeadList();
leadpojoli = lead_list.getRecords(themeDisplay.getUserId()+"");
renderRequest.setAttribute("all_lead", leadpojoli);
super.doView(renderRequest, renderResponse);
}

In view.jsp I created "liferay-ui:search-container" with delta 5. When I click "Next" or "Previous" it fetching next 5 records and it is working fine in the view.jsp.
Now user select the "Edit" option from the "Actions".Now get the current record id and calling the editRecord method[In this method I fetching two more lists(contact and activity) based on the  selected record] from the MVC class and then loading into an other "edit.jsp" with respective lists, object and variables.
In "edit.jsp" also have two liferay-ui:search-container's and when I click 'next' or 'previous' buttons from the 'liferay-ui:search-container' in the "edit.jsp" it going back to previous page i.e doview method is executed.
How to fetch the next set of records in the liferay-ui:search-container form the "edit.jsp". Two liferay-ui:search-container's showing the total count of the list but not fetching the next set of records.
private void editRecord(ActionRequest request, ActionResponse response,String backURL) throws IOException {
     String recordId = ParamUtil.getString(request,'selectedId');
    List<LeadActivity> leadactivityli = new ArrayList<LeadActivity>();
    LeadProcess call = new LeadProcess();
    leadactivityli = call.getList(recordId);

    List<ContactPojo> allcon = new ArrayList<ContactPojo>();
    ContactList conli = new ContactList();
    allcon = conli.getContactList(recordId);
           request.setAttribute("allcontacts", allcon);

            request.setAttribute("edit_leadactivity", leadactivityli);
            response.setRenderParameter("mvcPath","/html/Edit.jsp");

    }

edit.jsp
<%
LeadPojo leadobj = (LeadPojo) request.getAttribute("editlead");
List<LeadActivity> leadactli = (List<LeadActivity>)request.getAttribute("edit_leadactivity");
List<ContactPojo> allcontacts = (List<ContactPojo>)request.getAttribute("allcontacts");
 int notesize =0;
    try{
        notesize = leadactli.size();
    }catch(Exception e){}

%>
<liferay-ui:search-container delta="10" emptyResultsMessage="No Progress Notes Were Found" rowChecker="<%= new RowChecker(renderResponse) %>" iteratorURL="<%= itURL %>">
    <liferay-ui:search-container-results results="<%= ListUtil.subList(leadactli,searchContainer.getStart(),searchContainer.getEnd()) %>" total="<%= notesize %>">
    </liferay-ui:search-container-results>
    <liferay-ui:search-container-row className="com.axxonet.LeadActivity" modelVar="leadview" >
        <liferay-ui:search-container-row-parameter name="recordid" value="<%= leadview.getId()%>"></liferay-ui:search-container-row-parameter>
        <liferay-ui:search-container-row-parameter name="lead_id" value="<%= leadview.getLead_id()%>"></liferay-ui:search-container-row-parameter>
        <liferay-ui:search-container-column-text name="Subject"  value="<%= leadview.getSubject()%>">
        </liferay-ui:search-container-column-text>
        <liferay-ui:search-container-column-text name="Visit Note" value="<%= leadview.getCompany_Account()%>">
        </liferay-ui:search-container-column-text>
      <liferay-ui:search-container-column-text name="Date" value="<%=leadview.getPersonalVisit() %>">
      </liferay-ui:search-container-column-text>
        <liferay-ui:search-container-column-text name="Created By" value="<%=leadview.getCreated_by()%>"/>
        <liferay-ui:search-container-column-jsp align="right" path="/html/leadactivity.jsp" />
    </liferay-ui:search-container-row>
    <liferay-ui:search-iterator  />
</liferay-ui:search-container>

A: It seems that you are not saying to your portlet class where have to redirect when you click on Next button in edit.jsp, so by default it redirect to view.jsp and execute doView(). Try to use a custom iteratorURL to achieve this.
Furthermore i'd like to point out that you are apparently managing the entire list even if the results are paginated (so it is just a "front-end pagination"): i hope the list won't grow too much.

A: Set one parameter redirect in your <portlet:renderURL>  and set its value as per page you will render.
Now get the redirect paramter in render method of  your portlet class.
Then compare it with value you set in <portlet:renderURL>. If return true then get your recordId here and then get two according to this recordId and set attributes.
And then return the page path like '/html/edit.jsp' . using include method or return string if you are using SPRING MVC or MVCRenderCommand in in liferay 7.


text:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace Mtelligent.Entities.Cohorts
{
    public class GoalCohort : Cohort
    {
        [UserEditable]
        [Required]
        public string Goal
        {
            get
            {
                if (Properties.ContainsKey("Goal"))
                {
                    return Properties["Goal"];
                }
                return string.Empty;
            }
            set
            {
                if (Properties.ContainsKey("Goal"))
                {
                    Properties["Goal"] = value;
                }
                else
                {
                    Properties.Add("Goal", value);
                }
            }
        }

        public override bool IsInCohort(Visitor visitor)
        {
            return visitor.Conversions.Where(a => a.Name == this.Goal).FirstOrDefault() != null;
        }

        public override bool RequiresConversions
        {
            get
            {
                return true;
            }
        }
    }

}

redpajama_set_name: RedPajamaGithub


text:
Rebmann
wildflphoto.com
Taxonomic Tree
Barnacles & Copepods
Rays & Sharks
Terrestrial Crustaceans
Genus List
Cycads
Dicots
Gymnosperms
Monocots
WhiskFerns
Stock Licensing
Only In Florida
Halifax Historical Museum
Ormond Beach Library
Wild Florida Photo - Aralia spinosa - Devil's walkingstick
Aralia spinosa
Devil's walkingstick
Florida native
Click on any image to open the slideshow
An occasional shrub or small tree of hammocks from the panhandle into the central peninsula of Florida. The range extends throughout the southeastern United States west into Texas and Oklahoma, north into the states from Missouri & Illinois to New York and Massachusetts, plus Maine.
Growing up to 10 meters (33 ft.) tall, Devil's Walkingstick has large bi-pinnately (sometimes tri-pinnately) compound leaves. The leaves are alternate, triangular in outline and from .5m -1.5m (1-1/2 to 5 ft.) long. The leaflets are ovate with serrate margins and 3-10cm (1-3/16 to 4 in.) in length. The large inflorescence can be up to 1.2m (4 ft.) long and is made up of numerous tiny white flowers in densely branched clusters. Flowering is in the summer. Fruit is a round dark purple drupe 5-8mm (~1/4 in.) in diameter.
Aralia spinosa shares a common name with Zanthoxylum clava-herculis, which is also called devil's walkingstick, although it is more frequently called Hurcules-club.
Aralia spinosa is a member of the Araliaceae - Ginseng family.
Atlas of Florida Vascular Plants (Institute for Systemic Botany) profile for this species
USDA Plant Profile for this species
Date record last modified: Aug 18, 2019
Paul Rebmann · All rights reserved · Copyright © 2015


Hyannis, MA and McLean, VA — March 21, 2018 - BackOffice Associates, the worldwide leader in information governance and data stewardship solutions, announced today that it will host a live webinar, "Transitioning to Modern Business Suites Requires Data Transformation," featuring Forrester Principal Analyst George Lawrie and BackOffice Associates Chief Strategy and Technology Officer Rex Ahlstrom, on March 28, at 11:00 a.m. ET.
In the webinar, Ahlstrom and Lawrie, who specializes in application development and delivery, will discuss the importance of establishing proper transitions to next-generation applications, such as SAP S/4HANA®, which can have a significant impact on evolving numerous aspects of an organization's business. In addition, the speakers will share the value of establishing proper data quality across the enterprise to ensure a successful transformation, and will provide recommendations for driving optimal and sustainable benefits from the transition.
SAP S/4HANA is a real-time enterprise resource planning suite for digital business. It is built on an advanced in-memory platform, SAP HANA®, and offers a personalized, consumer-grade user experience with SAP Fiori®. Deployable in the cloud or on premise, SAP S/4HANA can drive instant value across all lines of business – no matter the industry or business size.
For more information on the upcoming Modern Business Suites and Data Transformation webinar and to register, please visit http://bit.ly/2FW4oNm.


Commenced in 2012 to create and disseminate knowledge for the betterment of mankind of general and rural masses in particular. The Polytechnic is at Chikodi, which is surrounded by many Sugar industries. The college has well equipped laboratories for each discipline, workshops, computer facility with internet and Wi-Fi connectivity, and well qualified, experienced and dedicated faculties .
To create a thirst and to provide an environment that encourages the students for new ideas and understanding. To encourage students to challenge the status and to create a spirit of inquiry, to generate free exchange of thoughts and ideas and to provide the resources to explore. To create social awareness in young minds. We inspire students to continue learning throughout life.
To educate a whole person through engaged learning, community participation, and the development of ethical leaders.
We continually try to find new tricks & techniques to educate students more effectively.
To give maximum practical knowledge to students as much as we can.
To update Departmental library & Laboratories.


text:
Marie-Josée and Henry R. Kravis Center for Molecular Oncology
More About Marie-Josée and Henry R. Kravis Center for Molecular Oncology
Innovation Laboratory
Make an Impact Volunteer Form
CMO Director David Solit.
The Marie-Josée and Henry R. Kravis Center for Molecular Oncology (CMO) is undertaking a unique and intensive endeavor to transform cancer care through genomic analysis of patient-derived tumors. The center serves a team of laboratory and clinical researchers at Memorial Sloan Kettering working together to translate new molecular insights into individualized therapies and diagnostic tools.
Established with a gift of $100 million from Marie-Josée and Henry R. Kravis Foundation, the CMO brings together researchers with many different areas of expertise — including cancer biology, pathology, bioinformatics, and systems biology — to undertake a vast, translational research program. For every type of cancer, archived tumor specimens and tissues obtained in clinical trials are comprehensively profiled using next-generation sequencing and other technologies. The molecular information of each tumor is then correlated with clinical data, including the patient's outcome and response to therapy.
The goal of the CMO is to expedite and streamline cancer genomics research to guide cancer treatment. Ultimately our vision is to fully deliver on the promise of precision oncology and to create better treatment options for all people with cancer.
Thanks to our powerful combination of clinical and scientific resources focused exclusively on cancer, Memorial Sloan Kettering is in a unique position to reach this ambitious goal. The Marie-Josée and Henry R. Kravis Center for Molecular Oncology spans the full range of activities required to translate molecular insights into clinical innovations — from procuring and archiving patient tissues to pioneering the latest diagnostic tests and targeted therapies.
Book traversal links for Marie-Josée and Henry R. Kravis Center for Molecular Oncology
How Do Inherited Gene Mutations Cause Cancer? A New Database Will Help Researchers Find Out
A Milestone for Precision Oncology: FDA Gives Green Light to MSK's Genetic Database
Clearing the Fog around Tumor Mutational Burden
Double Trouble: Researchers Find Many Cancers Carry Two Mutations in the Same Gene
Double Jeopardy: Gene-Sequencing Test Uncovers New Clues about a Defect Seen in Many Tumors
Gene Mutations in the Blood Can Complicate Findings from Tumor Sequencing
FDA Authorizes MSK-IMPACT Test for Analyzing Patient Tumors
Experimental New Treatment Could Help Advanced Cancer Patients When Everything Else has Failed
Secondary Leukemia: Research Suggests New Ways to Understand What Causes This Side Effect of Cancer Treatment
How Basket Trials Are Transforming Oncology
Reaching a Milestone: Researchers Report Results of First 10,000 Patients Analyzed by MSK-IMPACT
#AACR17: Basket Trial for Experimental Drug Shows Promising Early Results
With MSK Leading the Way, Precision Medicine Links Lab Research to Patient Care
Innovative Research Center Will Explore Hereditary Cancer Genes
Why Doctors Are Trying A Skin Cancer Drug To Treat A Brain Tumor
What Are Exceptional Responders?
Expanding the Impact of Precision Medicine to Fuel Discoveries
Beyond the Usual Suspects: Study of Noncoding DNA Reveals New Mutations Linked to Cancer
A Sneak Preview of Our Annual "Major Trends" Seminar Live Webcast
Landmark $100 Million Gift from the Marie-Josée and Henry R. Kravis Foundation Supports a Groundbreaking Approach to Precision Oncology
Tumor Sequencing Test Brings Personalized Treatment Options to More Patients
Cancer 'Miracle' Patients Studied Anew for Disease Clues
Genetic Testing of Lung Tumors Leads to Better Therapies
Bold Initiative to Transform Cancer Care Established with a $100 Million Gift
At Work: Physician-Scientist David Solit
Landmark Gift of $100 Million from the Marie-Josée and Henry R. Kravis Foundation Will Support Groundbreaking Approach to Precision Oncology
Do BRCA Mutations in a Tumor Always Drive Its Growth? Not Necessarily, Study Finds


This spirited book, illustrated by the author's seven-year-old son, Noah, is a simple guide to raising gentle and loving children. Twenty-five ideas teach parents to provide the support and structure their children need most by encouraging empathy, nurturing independence, learning to apologise when they're wrong, and discovering the power of simply listening.
ils:.b2069121x|Book|Books||English|Celestial Arts,||63 pages ; 20 cm.


Jun 05, 2018ball mill manufacturer in chennai torrance Chennai Tiffins 85 Photos Indian 11321 183rd St Cerritos, CA,- ball mill manufacturer in chennai torrance,141 Reviews of Chennai Tiffins Just got back from using a Groupon at Chennai Tiffins We had, It looked like mashed peas rolled up into a ball half the size of my fist and then deep fried to golden brown I like a, Madison L .
Kolkata ball mill manufacturers in south india. Kolkata ball mill manufacturers in south india. High-frequency Screen. Compared with the commonly screening and grading equipments, Get Pirce. CITIC-Heavy Industries Co. Ltd.
ball mill, hammer mill, roller mill machine, manufacturer of high energy ball mill ball mill manufacturer in chennai torrance sons ltd, the complete source for the butwal cement mills pvt ltd nepal, international classification of goods amp.
torrance ball mill kolkata . News › formula untuk kecepatan kritis ball mill › ball mill anly digita timer type asy › ball mill prices and for sale belgium › maintenance ofe ball and race coal mill . Read More HFT Heavy Machinery .


text:
Mauricio Sulaiman President WBC honors the Legacy of Joseph Dwyer-2015
Boxing has lost another one of it's good guys. Former NABF president Joe Dwyer passed away this weekend in Long Island, NY. A life long "boxing guy," Dwyer fought as an amateur in the New York Golden Gloves, amassing an overall record of 56-2, 1 NC. Upon finishing Brooklyn's Fort Hamilton High School in 1956, Dwyer entered the U.S. Navy where he served on the USS Roosevelt and Intrepid with the 74th Fighter Squadron from 1956 – 1959. Dwyer served a thirty four year tenure with the NYPD from 1961-1995, for many years as an investigator of organized crime. With a never ending love for the "Sweet Science" still burning in his heart, Dwyer served as chief inspector with the New York State Athletic Commission for twelve years before joining the IBF as their championship chairman. Dwyer returned to judging fights before joining the WBC, eventually climbing to the presidency of the Council's North American Boxing Federation in June 2009. Dwyer's health began to decline in recent years, but he kept in close contact with his boxing "family." He is survived by his wife Linda, and children Arlene, Kathy and Joe, Jr. R.I.P. to a stand up guy who told it like it was.
WBC president Mauricio Sulaiman made a special presentation to Dwyer's family. Ring 8 also made presentations to the Dwyer and Mazzarella families. Dwyer and Mazzarella, both longtime Ring 8 members, passed away earlier this year. Dwyer was president of the North American Boxing Federation (NABF). Mazzarella, who served many years as Ring 8's treasurer, was a major influence in the founding of the NYSBHOF.
World Liberty TV, Boxing Channel Executive Producer our Own Dr. Abbey ,Spoke in length with WBC president Mauricio Sulaiman, about Mr Dwyer who was a president of the Council's North American Boxing Federation, See what he had to say, about the Legendary Joseph Dwyer.
49th Annual Village Halloween Parade NYC-2022
Mayor Eric Adam's first 100 Days & the future of NYC at Kings Theatre Brooklyn NY-2022
NYC Mayoral Candidate Eric Adams Event at Bronx NY-2021
First Responders Children's Foundation's 19th Annual Thanksgiving Day Parade Breakfast-2019


Upscale but with reasonable prices. Friendly and warm. Love the staff. Always make me feel special even though I'm not big spender All the women in my family go there. Husband has no hair!
Trey always keeps me looking fresh! My kids also get their hair cut here. Very friendly group!
Becky is great, she handles my hair, my 4 year old son hair and my wife's!
I have been here multiple times and have had my hair done by both Dee and Becky and would highly recommend their services. I have longer hair that needs to be cut just right so it doesn't get colicky or look sloppy and I always leave feeling great.
I really enjoyed my experience here. They always make my hair look great and they took their time to make sure I was happy. I would highly recommend.


About Flat Pack Kitchens | DIY Kitchens Info Online | FlatPackKitchens AU .
A versatile, colorful, Shaker or poly kitchens among others, can be designed to meet your particular preferences. Our cheap flat pack kitchens are made from material supplied from Germany by Blum with a lifetime warranty and constructed by qualified Australian craftsmen in a wide and varied range of innovative designs. Our designer Flat pack kitchens are serviced by experienced Australian commitment and pride in an Australian product. Your Flat pack kitchens in Melbourne or versatile DIY kitchens are supported by our record for supplying durable, hard-wearing products that enhance any home or building, thus adding value to your investment. We have highly trained staff, experienced in all aspects of custom made kitchen cabinets and offer delivery Australia wide.
Whether you are seeking Formica kitchens, laminate kitchens, or another type, we invite you to view some of the best designer kitchen cabinets and custom Flatpack kitchens available. Our products are easy to assemble, carcass materials of HRM (High Resistance to Moisture) boards, expertly crafted from the designs of experienced experts in creating cheap kitchen cabinets. At Custom Flat pack kitchens, we have an established reputation for producing of the highest quality, with recognized service excellence.
The perspective we present to our customers regarding kitchen design whether related to Shadowline kitchens, Laminex kitchens, modern kitchens, or bargain kitchens, is more than just a place to prepare food, irrespective whether it is in a domestic or commercial environment. The concept of our products, including diy flat pack kitchens, is designed to provide a relaxing and influencing enhancement that can be looked upon, not only a financial investment but, in people. The kitchen is an asset that can affect lifestyles and act as a motivation towards increased productivity in all aspects of their lives. Innovatively designed Custom Flat pack kitchens or DIY kitchens are a source of pride in any environment and an influencing factor in a variety of forms.
Our kitchen cabinets and flat pack kitchens are designed to meet your specific needs for not only practical convenience and accessibility but, also to enhance the tone and atmosphere that you want to create in your important kitchen area. Pride of ownership is an essential ingredient for all of us, in any design that involves kitchen cabinets and DIY flat pack kitchens. Not only is it reflected in the workmanship of our skilled craftsmen, but for you as the end user, for whom it can become a significant enhancement in appearance and for those who enjoy using it.
Our dedication to meeting the needs of our customers is well established. At Custom Flat pack kitchens, we accept this as an ongoing and challenging task, as we believe that you have the right to receive the best possible product value for your investment. In the world of designer flat pack kitchens, trends and new perceptions demand new and innovative concepts and methods of manufacturing. You have pride in your home or business property and this is an inherent factor in any form of design. It calls for a combined effort from designers, manufacturers, and craftsmen to produce personalized flat pack kitchens in Sydney, or any other city in Australia.
Custom Flat pack kitchens keep updated with the concepts of modern kitchen design and ensure that perceptions and customer needs are met. Whether related to DIY flat pack kitchens or cheap kitchen cabinets, we meet the reality of cutting-edge kitchen design. To achieve this, we have highly trained personnel who you can call upon to answer your questions, exchange ideas and who will provide solutions as necessary. Added customer support is provided by our management team regarding constructing any form of kitchen plan or model that has been viewed online, or in other media.
Our Custom Australian made kitchen cabinets and handle-less kitchen cabinets, as well as other products, are examples of the best in Australian workmanship and constructed of the highest quality materials from Blum, Germany. The appeal of our completed units and DIY kitchens is characterized by designer practicality, which is ensured by the continuous updating of our operational techniques and equipment. Our Custom Flat pack kitchens possess their own uniqueness in design, with a finishing process that allows for the exclusive needs of each installation.
With our combined knowledge and experience, we have developed a practical understanding of consumer needs and their personal visions regarding kitchen cabinets and advantages such as seen in handleless kitchens. How you work in a kitchen area is an individual trait and therefore, the needs for delegating space can vary significantly. The flat pack kitchens in the majority of homes are a focal area in most family environments. As well as being a source of comfort and pride in investment, it is a place where people meet and communicate in a relaxed atmosphere. We therefore, pay great attention to creating and ensuring utilization of space, which will meet your requirements, as well as enhancing this important area and making it practical for your needs!
As there are segments in flat pack kitchens, there are also segments in Kitchen cabinets. There are defined segments that are utilized for different functions, for example; space for consumables and non-consumables, or cleaning materials, food preparation and cooking and a lot more that meet personal requirements. How these special segments are created and where they are located, can make a significant difference. It can determine whether the area in bargain kitchens serves only as a kitchen, or does it become a place that assumes its own atmosphere and provides users with a special and unique environment!
We are proud of our experienced and customer-friendly personnel, who willingly take the designing and producing of Custom Flat pack kitchens beyond the norm. It is our belief that fixtures such as kitchen cabinets must form part of the design that will provide a suitable and comfortable area for individuals and their regular habits. This is an aspect of kitchen design that entails a high degree of flexibility, knowledge and customer communication skills. The result will fully enhance the available space, give value and complete customer satisfaction.
Whether you are considering new cheap flat pack kitchens, diy kitchens, or redesigning a kitchen, or looking for a new concept in custom made kitchen cabinets, we have the capabilities of providing you with the opportunity to create your dream diy kitchens in an innovative way that will make a significant difference to your lifestyle. With the best available and highly qualified designers, Blum materials and the support of our skilled Australian craftsmen, you can look forward to an original kitchen experience, of innovation and perception.
A great kitchen design and Custom Flat pack kitchens with Kitchen cabinets made to suit your particular needs, are three of the main contributions that help to make your kitchen a special place in the home environment and, a place to be proud of! A great atmosphere can work wonders and that helps to make your kitchen part of an investment for the future. With our commitment to quality products and the dedication of our skilled craftsmen, no matter whether there are cheap kitchen cabinets in flat pack kitchens; your home is a special place and we can help enhance it.
Your home is and probably will be your biggest and most valuable investment and it is also a special place for your family, in many respects. It is therefore, worthwhile considering enhancing it with the help of Custom Flat pack kitchens, because we have the experience and perception to make a difference in your lifestyle!


text:
// Author: jmarantz@google.com (Joshua Marantz)

#include "pagespeed/kernel/cache/cache_batcher.h"

#include <utility>

#include "base/logging.h"
#include "pagespeed/kernel/base/abstract_mutex.h"
#include "pagespeed/kernel/base/atomic_int32.h"
#include "pagespeed/kernel/base/scoped_ptr.h"
#include "pagespeed/kernel/base/statistics.h"
#include "pagespeed/kernel/base/string.h"
#include "pagespeed/kernel/base/string_util.h"
#include "pagespeed/kernel/cache/cache_interface.h"

namespace {

const char kDroppedGets[] = "cache_batcher_dropped_gets";
const char kCoalescedGets[] = "cache_batcher_coalesced_gets";
const char kQueuedGets[] = "cache_batcher_queued_gets";

}  // namespace

namespace net_instaweb {

// Used to track the progress of a MultiGet, so that we can keep track
// of how many lookups are outstanding, where a MultiGet counts as one
// lookup independent of how many keys it has.
class CacheBatcher::Group {
 public:
  Group(CacheBatcher* batcher, int group_size)
      : batcher_(batcher),
        outstanding_lookups_(group_size) {
  }

  void Done() {
    if (outstanding_lookups_.BarrierIncrement(-1) == 0) {
      batcher_->GroupComplete();
      delete this;
    }
  }

 private:
  CacheBatcher* batcher_;
  AtomicInt32 outstanding_lookups_;

  DISALLOW_COPY_AND_ASSIGN(Group);
};

class CacheBatcher::MultiCallback : public CacheInterface::Callback {
 public:
  MultiCallback(CacheBatcher* batcher, Group* group)
      : batcher_(batcher),
        group_(group) {
  }

  ~MultiCallback() override {
  }

  bool ValidateCandidate(
      const GoogleString& key, CacheInterface::KeyState state) override {
    if (saved_.empty()) {
      std::vector<CacheInterface::Callback*> callbacks;
      batcher_->ExtractInFlightKeys(key, &callbacks);
      DCHECK(!callbacks.empty());
      saved_.reserve(callbacks.size());
      for (Callback* callback : callbacks) {
        saved_.emplace_back(callback, false /* available */, state);
      }
    }

    bool all_succeed = true;
    for (auto& record : saved_) {
      if (!record.available) {
        Callback* callback = record.callback;
        CacheInterface::KeyState tmp_state = state;
        callback->set_value(value());
        if (!callback->DelegatedValidateCandidate(key, state)) {
          all_succeed = false;
          tmp_state = CacheInterface::kNotFound;
        }
        record.available = tmp_state == CacheInterface::kAvailable;
        record.state = tmp_state;
      }
    }
    return all_succeed;
  }

  void Done(CacheInterface::KeyState state) override {
    Group* group = group_;
    batcher_->DecrementInFlightGets(saved_.size());
    for (const auto& record : saved_) {
      record.callback->DelegatedDone(record.state);
    }
    delete this;
    group->Done();
  }

 private:
  CacheBatcher* batcher_;
  Group* group_;
  struct CallbackRecord {
    CallbackRecord(Callback* callback, bool available, KeyState state)
        : callback(callback),
          available(available),
          state(state) {
    }
    Callback* callback;
    bool available;
    KeyState state;
  };
  std::vector<CallbackRecord> saved_;

  DISALLOW_COPY_AND_ASSIGN(MultiCallback);
};

CacheBatcher::CacheBatcher(const Options& options, CacheInterface* cache,
                           AbstractMutex* mutex, Statistics* statistics)
    : cache_(cache),
      dropped_gets_(statistics->GetVariable(kDroppedGets)),
      coalesced_gets_(statistics->GetVariable(kCoalescedGets)),
      queued_gets_(statistics->GetVariable(kQueuedGets)),
      last_batch_size_(-1),
      mutex_(mutex),
      num_in_flight_groups_(0),
      num_in_flight_keys_(0),
      num_pending_gets_(0),
      options_(options),
      shutdown_(false) {
}

CacheBatcher::~CacheBatcher() {
}

GoogleString CacheBatcher::FormatName(StringPiece cache, int parallelism,
                                      int max) {
  return StrCat("Batcher(cache=", cache,
                ",parallelism=", IntegerToString(parallelism),
                ",max=", IntegerToString(max), ")");
}

GoogleString CacheBatcher::Name() const {
  return FormatName(cache_->Name(), options_.max_parallel_lookups,
                    options_.max_pending_gets);
}

void CacheBatcher::InitStats(Statistics* statistics) {
  statistics->AddVariable(kDroppedGets);
  statistics->AddVariable(kCoalescedGets);
  statistics->AddVariable(kQueuedGets);
}

bool CacheBatcher::CanIssueGet() const {
  return !shutdown_ && num_in_flight_groups_ < options_.max_parallel_lookups;
}

bool CacheBatcher::CanQueueCallback() const {
  return !shutdown_ && num_pending_gets_ < options_.max_pending_gets;
}

void CacheBatcher::Get(const GoogleString& key, Callback* callback) {
  bool immediate = false;
  bool drop_get = false;
  {
    ScopedMutex mutex(mutex_.get());

    // Determine if a lookup of this key is already in flight (and this callback
    // should be added to the list of in-flight callbacks under that key), can
    // be issued immediately, should be "queued", or should be dropped.
    bool can_queue = CanQueueCallback();
    if (can_queue) {
      auto iter = in_flight_.find(key);
      if (iter != in_flight_.end()) {
        iter->second.push_back(callback);
        ++num_pending_gets_;
        coalesced_gets_->Add(1);
        return;
      }
    }
    if (CanIssueGet()) {
      immediate = true;
      ++num_in_flight_groups_;
      ++num_pending_gets_;
      ++num_in_flight_keys_;
      in_flight_[key].push_back(callback);
    } else if (can_queue) {
      queued_[key].push_back(callback);
      queued_gets_->Add(1);
      ++num_pending_gets_;
    } else {
      drop_get = true;
    }
  }
  if (immediate) {
    Group* group = new Group(this, 1);
    callback = new MultiCallback(this, group);
    cache_->Get(key, callback);
  } else if (drop_get) {
    ValidateAndReportResult(key, CacheInterface::kNotFound, callback);
    dropped_gets_->Add(1);
  }
}

void CacheBatcher::GroupComplete() {
  MultiGetRequest* request = NULL;
  {
    ScopedMutex mutex(mutex_.get());
    if (queued_.empty()) {
      --num_in_flight_groups_;
      return;
    }
    last_batch_size_ = queued_.size();
    request = CreateRequestForQueuedKeys();
  }
  cache_->MultiGet(request);
}

CacheBatcher::MultiGetRequest* CacheBatcher::CreateRequestForQueuedKeys() {
  MultiGetRequest* request = ConvertMapToRequest(queued_);
  MoveQueuedKeys();
  return request;
}

void CacheBatcher::MoveQueuedKeys() {
  num_in_flight_keys_ += queued_.size();
  for (const auto& pair : queued_) {
    const GoogleString& key = pair.first;
    const std::vector<Callback*>& src_callbacks = pair.second;
    bool inserted;

    std::tie(std::ignore, inserted) = in_flight_.emplace(key, src_callbacks);
    // It should be impossible to have both in_flight_[key] and queued_[key]
    // exist and be nonempty simultaneously.
    DCHECK(inserted);
  }
  queued_.clear();
}

CacheBatcher::MultiGetRequest* CacheBatcher::ConvertMapToRequest(
    const CallbackMap &map) {
  Group* group = new Group(this, map.size());
  MultiGetRequest* request = new MultiGetRequest();
  for (const auto& pair : map) {
    const GoogleString& key = pair.first;
    request->emplace_back(key, new MultiCallback(this, group));
  }

  return request;
}

void CacheBatcher::ExtractInFlightKeys(
    const GoogleString& key,
    std::vector<CacheInterface::Callback*>* callbacks) {
  ScopedMutex mutex(mutex_.get());
  auto iter = in_flight_.find(key);
  CHECK(iter != in_flight_.end());
  iter->second.swap(*callbacks);
  in_flight_.erase(iter);
}

void CacheBatcher::Put(const GoogleString& key, const SharedString& value) {
  cache_->Put(key, value);
}

void CacheBatcher::Delete(const GoogleString& key) {
  cache_->Delete(key);
}

void CacheBatcher::DecrementInFlightGets(int n) {
  ScopedMutex mutex(mutex_.get());
  num_pending_gets_ -= n;
  --num_in_flight_keys_;
}

int CacheBatcher::last_batch_size() const {
  ScopedMutex mutex(mutex_.get());
  return last_batch_size_;
}

int CacheBatcher::num_in_flight_keys() {
  ScopedMutex mutex(mutex_.get());
  return num_in_flight_keys_;
}

void CacheBatcher::ShutDown() {
  MultiGetRequest* request = nullptr;
  {
    ScopedMutex mutex(mutex_.get());
    shutdown_ = true;
    if (!queued_.empty()) {
      request = ConvertMapToRequest(queued_);
      queued_.clear();
    }
  }

  if (request != nullptr) {
    ReportMultiGetNotFound(request);
  }
  cache_->ShutDown();
}

}  // namespace net_instaweb


text:
\section{Introduction}
\begin{abstract}
The integration of NMR and high pressure technique brings unique opportunities to study electronic, structural and dynamical properties under extreme conditions. Despite a great degree of success has been achieved using coil-based schemes, the contradictory requirement on sample volume of these two techniques remains an outstanding challenge.
In this letter, we introduce diamond nitrogen-vacancy (NV) centers, as the source and probe of in-situ nuclear spin polarization, to address the sample volume issue.
We demonstrate hyperpolarization and coherent control of $^{14}$N nuclear spins under high pressures.
NMR spectra of a micro-diamond are measured up to 16.6 GPa, and unexpected pressure shift of the $^{14}$N nuclear quadrupole and hyperfine coupling terms are observed.
Our work contributes to quantum sensing enhanced spectrometry under extreme conditions.

\end{abstract}

\maketitle
The combination of  nuclear magnetic resonance (NMR) and high pressure techniques provides a powerful tool to explore the frontier of condensed matter physics, material science, geoscience and life science. On the one hand, pressure is a basic thermodynamical parameter and pressure tuning is widely used in natural sciences.
 For example, high-pressure conditions are indispensable for some material synthesis and properties optimization processes \cite{HPHTDiamond, LaH10_HP_PRL, LaH10_HP_Nature}.
High pressure brings exotic states like unconventional superconductivity and magnetic quantum critical point to condensed matter physics \cite{2020ReviewHPSC, MnP_SC}.
On the other hand, NMR is an important spectrum methods to reveal local electronic, chemical and structural information.
High-pressure NMR offers unique opportunities to study dynamical structure of hydrogen and hydrides \cite{HPNMR_for_H, H_NMR200GPa}, phase transitions of metal and superconductor \cite{HPNMR_review2018}, and protein folding process \cite{2017Review_HP_protein}, to name a few.

Despite impressive advances have been made, high-pressure NMR still faces a fundamental challenge, that is, the contradictory requirement on sample volume of these two techniques. Diamond anvil cells (DAC) is the widely used scheme to prepare and maintain high-pressures conditions in lab, but it provides only pico- to nano- liters sample volume \cite{HPNMR_review2018}. As an example, a DAC with culet of 500-$\mu$m diameter can sustain pressure of 30 GPa and provide a sample volume of several nanoliters,  and higher pressures corresponding to smaller sample volume.
For coil-based NMR measurements, due to the large thermal noise from the coil and weak gyromagnetic ratio of nuclear spins (thus low polarization rate), a relative large sample volume (> nanoliters) is usually required to build a reasonable signal-to-noise ratio (SNR) \cite{NMR_nl_1995}.
The direct integration of traditional NMR and high-pressure techniques requires special design of pick-up coils, which can fit the geometrical restrictions and sustain high pressures inside DAC. In this direction, a series of delicate coils have been designed to implement high-pressure NMR, including split-pair coils \cite{1987DAC_NMR}, gasket resonators \cite{1998DAC_NMR}, and micro-coils \cite{micro_coils}. Recently, Lenz lenses with near unit filling factors and enhanced sensitivity enable NMR at megabar pressure \cite{Lenz_lenses, H2O_NMR100GPa, H_NMR200GPa}.

\begin{figure}[b]
	\includegraphics[width=0.48\textwidth]{Fig_1.eps}
	\caption{(color online). Optical hyperpolarization and readout of nuclear spins inside diamond anvil cells. (a) Nuclear spins (purple) are usually immune to optical excitation, but can be optically polarized (dynamic nuclear spin polarization, DNP) and read out through nearby nitrogen-vacancy (NV) centers,  provide a new strategy for  implementing NMR under high pressures. (b) An external magnetic field of about 500 Gauss brings NV center to its excited state level anti-crossing (ESLAC), where a ~$\mu$s laser pulse polarize both the NV electron spins and nearby nuclear spins. The same mechanism enables optical readout of the $^{14}$N nuclear spin states. }
	\label{fig1}
\end{figure}

Recent advances of quantum sensing via diamond nitrogen-vacancy (NV) center shine new light on the development of high-pressure NMR.
Hosted by the diamond lattice, NV centers present superb spin coherence and efficient optical interface, makes them ideal quantum sensors of magnetic fields under high pressures \cite{PRL2014HPODMR, HPODMR2019CPL, HPODMR2019Berkeley, HPODMR2019CUHK, HPODMR2019CNRS}.
With synchronized control and readout sequences,  NV centers inside DAC are able to extract ac magnetic field signal \cite{PR2021HPODMR}, a prerequisite to implement NMR measurement.
Furthermore, the near-perfect spin polarization of NV electron spins offer an opportunity to build hyperpolarization of nearby nuclear spins, which can dramatically improve the NMR signal of nanoscale samples \cite{NV_DNP_NMR}.
In this letter, we demonstrate that these merits of diamond NV centers can be fully integrated into the high-pressure environment,
providing an alternate solution to the sample volume issue of high-pressure NMR.
By working near the excited state level anti-crossing (ESLAC) of diamond NV centers, $^{14}$N nuclear spin of a micro-diamond (1~femtoliter in size) are polarized, coherently manipulated, and read out through a simple sequence combining laser and radio-frequency (RF) pulses.
Hyperpolarization-enhanced NMR spectra are measured up to 16.6 GPa, and unexpected pressure shift of $^{14}$N nuclear quadrupole and hyperfine coupling terms are observed.

We start by introducing nuclear spin hyperpolarization enabled by diamond NV centers.
An NV center is formed by a substitutional nitrogen atom and an adjacent vacancy of the diamond lattice (Fig. 1 (a) inset).
It is a spin-1 system with a spin triplet as the ground state. Under green laser excitation, the NV electron spin will be polarized to the $|m_S=0\rangle$ state due to spin-dependent  transition paths. Nearby nuclear spins, including the host nitrogen (${}^{14}$N ) and carbon (${}^{13}$C) nuclear spins, bring hyperfine splitting to the NV energy levels and are usually immune to the optical excitation.
However, the optical spin polarization of NV electron spin can transfer to nearby nuclear spins under specific conditions.
As shown in Fig. 1, an external magnetic field of about 500 Gauss brings the NV system to its ESLAC, where energy difference between the $|m_S=0\rangle$ and $|m_S=-1\rangle$ states disappears, enabling flip-flop process of the coupled spin system.
As a result, a short green laser pulse will polarize the system to the $|m_S=0, m_I=+1 \rangle$ state (for ${}^{14}$N ) \cite{PRL2009DNP, PRA2009DNP}.
After tuning off the laser pulse, NV electron spin will soon settle down to its ground states where the flip-flop process is prohibited by a different zero-field splitting ($D_{GS}=$2.87~GHz for ground states, and $D_{ES}=$1.42~GHz for excited states), and NMR measurement can be implemented in the NV ground states.

The spin-dependent fluorescence at NV ESLAC also provides an efficient method to read out the nuclear spin states optically \cite{PRA2009DNP, DNP_Readout}. The $|m_S=0, m_I=+1 \rangle$ states has the largest fluorescence counts rate, and other nuclear spin states have relative smaller counts rate.  For example, the counts rate of $|m_S=0, m_I=0 \rangle$ state is about 20\% lower than that of the  $|m_S=0, m_I=+1 \rangle$ state, thus nuclear spin state can be extracted directly from the fluorescence intensity if the electron spin is at the $|m_S=0\rangle$.  Details of the fluorescence difference of the ${}^{14}$N nuclear spin states can be found in Supplemental Material  \cite{SM}

\begin{figure}[tb]
	\includegraphics[width=0.48\textwidth]{Fig_2.eps}
	\caption{(color online).  Coherent control of NV electron spins and external magnetic field alignment for high-pressure NMR.  (a)  Confocal fluorescence images of the diamond anvil culet. Several microdiamonds with ensemble NV centers are loaded into the DAC culets, and a ruby particle is used for pressure calibration. A thin platinum wire (marked by the white dash line) is used to delivery microwave and radio-frequency pulses to NV centers. (b) Rabi oscillations  of NV electron spins. The measured Rabi frequency reaches 62~MHz.  (c) Optically detected magnetic resonance (ODMR) spectrum of an microdiamond as the external magnetic field is aligned to the quantization axis of the selected NV group. }
 \label{fig2}
\end{figure}

The experimental setup and sample loading methods have been described else-where \cite{HPODMR2019CPL}.
In current experiment, microdiamonds with average diameter of 1~$\mu$m are used (Adamas Nanotechnologies, NV-concentrations of about 3 ppm).
Fig. 2(a) shows confocal fluorescence images of the diamond culet after loading microdiamonds and a ruby pressure gauge.
A thin platinum wire is placed close to the microdiamonds to transmit RF and microwave (MW) pulses.

As shown in Fig. 2(b), Rabi frequency of NV electron spins reaches 62~MHz with a 16-watt microwave amplifier (Mini-circuts, ZHL-16W-43-S+), indicating the wire-based microwave transmission line works well on the diamond cutlets.

We then move to the alignment of the external magnetic field.
The magnetic field is generated by a permanent magnet, whose position and orientation are controlled by a translation stage and two rotation stages.
The strength and orientation of the magnetic field are measured by the optically detected magnetic resonance (ODMR) spectra of ensemble NV centers in the microdiamond.
There are four possible NV orientations in the diamond lattice, each of them contributes two resonances, so the full ODMR spectra exhibit eight resonances in general.
When the external magnetic field is aligned to the quantization axis of one NV group, the resonances of the other three NV groups are degenerated, resulting in an ODMR spectrum of only four dips, as shown in Fig. 2(c).
Note the zero-filed splitting ($D_{GS}$) of this spectrum has shifted to 3.116 GHz (naturally at 2.87 GHz), as a pressure of  16.6 GPa (calibrated by ruby fluoresces) is applied.
The magnetic field strength is tuned to 460 Gauss in order to polarize the ${}^{14}$N nuclear spin.
Details of the pressure and magnetic field calibrations can be found in Supplemental Material \cite{SM}.

The nuclear spin polarization cannot be observed directly on the ODMR spectra, as the widths of the ODMR resonant dips are too large.
There are several factors contribute to the line width of the ODMR spectra of ensemble NV centers.
Firstly, the power broadening of laser and microwave pulses, which can be suppressed by reducing the applied powers.
Secondly, inhomogeneous broadening of ensemble NV centers related to local strain, charge, and nuclear spin distributions \cite{ZuPRL2018}.
Thirdly, coupling to electron spin baths (mainly P1 centers), which leads short spin coherence time (about tens of nanoseconds) and is the dominate factor of the current case. The NV coherence time limited ODMR width is about several MHz, too large to resolve the hyperfine splitting of the ${}^{14}$N nuclear spin (2.16 MHz).

\begin{figure}[t]
	\includegraphics[width=0.48\textwidth]{Fig_3.eps}
\caption{(color online). NMR of $^{14}$N spin ensemble under high pressure.
(a) Pulse sequences to implement high-pressure NMR. The upper (lower) one shows CW (pulsed) mode.
(b) Energy levels of the coupled electron and nuclear spin system, with the transitions of the NMR measurements are labeled.
(c) NMR spectra of $^{14}$N spin ensemble under pressures of 0.6 GPa, 6.9 GPa and 13.5 GPa.
Left (right) pane: NV electron spins at the $m_s=|0>$ ($m_s=|-1>$) state and CW (pulsed) method is used.
(d) Absolute value of $Q$ (red) and $A_{\parallel}$ (blue) as function of pressure, solid lines are linear fitting, giving slopes of
$\frac{dQ}{dP}= 3.5 \pm 0.4$ kHz and $\frac{dA_{\parallel}}{dP}= 4.9 \pm 1.1$ kHz.
(e) Pressure dependence of the width of $^{14}$N NMR spectra, data in red (blue) are measured at the $m_s=|0>$ ($m_s=|-1>$) state.
}
	\label{fig3}
\end{figure}

We then demonstrate NMR, or more precisely nuclear quadrupolar resonance (NQR), of ${}^{14}$N nuclear spins under high pressures.
In the first experiment, NMR spectra are measured in a continue-wave (CW) mode.
As illustrated in Fig. 3(a), the polarization laser, driving RF pulses, and fluoresce collection are implemented simultaneously, while the RF frequency is scanned.
Under continue laser excitation, the NV electron spins are polarized and fixed to the $|m_S=0 \rangle$ state, and ${}^{14}$N nuclear spins are polarized to the $|m_I=+1 \rangle$ states if the RF pulses are off-resonance. When the RF pulse matches the resonant frequency of ${}^{14}$N nuclear spins, some population will be driven to the $|m_I=0 \rangle$ state, and a resonant dip can be observed, as shown in Fig. 3(c). This CW-NMR scheme is easy to implement but has limited contrast.
NMR spectra of this microdiamond are measured up to 16.6 GPa, and pressure-dependent shift and broadening of the NMR spectra are observed, as shown in Fig. 3(d) and (e).

An alternate and more robust approach to implement high-pressure NMR is using the pulsed mode, in which the spin polarization, manipulation and readout steps are implemented sequentially, as shown in Fig. 3(a). The RF pulse duration is chosen to achieve a $\pi$ rotation of the nuclear spin and is isolated from the optical pulses, thus the NMR contrast is enhanced as compared to that of the CW mode. Meanwhile, additional microwave pulses can be employed to control the state of NV electron, and NMR spectra at the NV $|m_S=-1 \rangle$ states can be obtained, as shown in Fig. 3(c). By fitting the NMR spectra with a single-peak Lorentz function, the resonant frequency and full width at half maximum (FWHM) are extracted, as summarized in Fig. 3(d) and (e).

The resonant frequency of the host ${}^{14}$N nuclear spins, $f_{RF0}$  and $f_{RF1}$ (as the NV electron spin set to $|m_S=0 \rangle$ or $|m_S=-1 \rangle$ state, respectively), are determined by the nuclear quadrupole coupling constant ($Q$), hyperfine coupling ($A_{\parallel}$) to the center electron spin, and the nuclear spin Zeeman effect, which can be written as:
\begin{equation*}
\begin{aligned}
f_{RF0}& = Q(P) + \gamma_n B, \\
f_{RF1}& = Q(P) + A_{\parallel}(P) + \gamma_n B,
\end{aligned}
\end{equation*}
where $\gamma_n$ is gyromagnetic ratio of ${}^{14}$N.
The nuclear Zeeman effect term is known as the strength of the external magnetic field $B$ has been measured by the ODMR spectra of NV electron spins (see Supplemental Material for details), so the combined measurement of $f_{RF0}$  and $f_{RF1}$ can be used to extracted the quadrupolar and hyperfine coupling parameters, as summarized in Fig. 3(d).

 As the pressure increases from 0.6 GPa to 16.6 GPa, the absolute value of the quadrupolar splitting decreases from 4.94 MHz to 4.89 MHz, and the hyperfine coupling term decreases from 2.16 MHz to 2.10 MHz.
 This is an unexpected result, as recent experiments have shown that thermal expansion of the diamond lattice would decrease the quadrupolar and hyperfine terms \cite{Q_A_T_PRB2020, Q_T_PRR2020}.
The quadrupolar term $Q$ is determined by the electric field gradient at the position of the nitrogen nucleus,
 and the hyperfine term $A_{\parallel}$ is determined by the Fermi contact term and dipole interaction.
 The absolute value of both terms decrease with increasing pressure, indicating the wave-function of the unpaired spin of NV centers shifts away from the nitrogen nucleus under pressures. Further experiments with nearby carbon nuclear spins, and \emph{ab initio} calculations should be pursued to fully understand the compression and modification of the NV electronic orbitals under high pressures.

As summarised in the lower pane of Fig. 3(d), the widths of the NMR spectra reaches tens of kilohertz.
We attribute the relative large NMR width to the short dephasing time of the nuclear spin ensembles.
To illustrate this point, we measure the Rabi oscillation and free-induction deday (FID) signal of the ensemble nuclear spins.
Figure 4(a) presents nuclear spin Rabi oscillation driving by RF pulses of different powers, envelop decays in a time scale of about 100~$\mu$s are observed for all the measurements, indicating a short nuclear spin coherence time of this sample.
Figure 4(b) presents nuclear spin FID signal, giving a nuclear spin dephasing time ($T_{2N}^*$) of 70 $\pm~ 10~\mu$s,
such a short dephasing time is consistent with the NMR width of about 30~kHz.

\begin{figure}[t]
	\includegraphics[width=0.48\textwidth]{Fig_4.eps}
	\caption{(color online).
Coherent control and dephasing of $^{14}$N spin ensemble under high pressure. The applied pressure is 0.6 GPa.
(a) Rabi oscillation of $^{14}$N spins at different RF drinving powers, while the electron spin is at the $m_S=0$ state. The used pulse sequence is shown in Fig. 3 (a).
(b) Free induction decay (FID) of $^{14}$N spins. The red line is fitting of a cosine function with exponential decay, which gives nuclear spin dephasing time ($T_{2N}^*$).
(c) Spin relaxation time of NV electron, which sets the coherence time of its nearby nuclear spins. The red line is fitting of an exponential decay.
}
	\label{fig4}
\end{figure}

It has been shown that the dephasing time of a nuclear spin is constrained by a fast relaxation nearby electron spin, as a random flip of the central spin brings a random phase to the strongly coupled nuclear spin \cite{C13_T2_1s}. To verify whether this mechanism dominate the decoherence of the measured nuclear spins, we further measure the NV electrons spin relaxation time, as presented in Fig. 4(c). An exponential decay function fitting of this signal gives $T_{1e}$ of 254 $\pm ~31~\mu$s, comparable to the nuclear spin dephasing time.
We note the measured $T_{1e}$ is much shorter than the results of our previous experiments \cite{HPODMR2019CPL}, even at a relative low pressures of about 0.6 GPa.
The unusually short NV spin relaxation time is partially caused by the dense electron spin bath (P1 centers) in this microdiamond.
Besides, there is an unknown and pressures dependent factor, as the NMR width increases with pressure (see Fig. 3 (d)).
Along with the broadening effect, the contrast of NMR spectra decreases with pressures,
and only 0.01\% contrast is left at pressure of 16.6 GPa.

It is expected that using diamond NV center with better spin coherence could improve the spectrum resolution of high-pressure NMR, and higher working pressures are achievable.
We would also like to point out that the restrictions on the width of high-pressure NMR by NV probes itself can be fully overcame with recently developed correlation measurements.
By synchronizing the applied sequence of pulses to a stable oscillator, the width of the NMR spectra is no longer limited by the relaxation time the NV electron spin, and spectrum resolution of better than 1~mHz has been demonstrated in experiments \cite{Corr_2017_degen, Corr_2017_Fedor}.
Furthermore, considering the quantum nature of the target nuclear spins, sequential weak measurements can be used to overcome the impact of back action inherent of quantum measurement \cite{Corr_weak_WP, Corr_weak_degen}.

 Note that the NV-based dynamic nuclear polarization is a fast developing field, and there are other efficient protocols for transferring the spin polarization of NV center to nearby nuclear spins, including Hartmann-Hahn resonant driving \cite{GQ2014NVDNP, NVDNPPRL}, PulsePol method \cite{PulsePol}, hyperpolarization at ground state level anti-crossing \cite{DNP_LAC}, and so forth. These dynamic nuclear polarization protocols are all compatible with the DAC high-pressure environment. However, the above-mentioned direct fluorescence readout method is not applicable to most of the dynamic nuclear polarization protocols. Nevertheless, after building the hyperpolarization of nuclear spins, nearby NV centers can work as in-situ sensitive probes to detect the nuclear spin procession signal inside the DAC \cite{PR2021HPODMR}.

 The combination of NV-based dynamic nuclear spin polarization and in-situ spin detection provides a perfect solution to the sample volume issue of high-pressure NMR.
 In current experiments, the sample volume is only about 1 $\mu m^3$ (1 femtoliter) and can be further deceased.
 Such a small sample volume is compatible with the small culets ($\leq$ 100 $\mu$m) of megabar region DAC.
 Meanwhile, a small detection volume would effectively eliminate inhomogeneous broadening due to gradients of pressure, magnetic field, and RF driving fields.
 Altogether, the NV-based scheme would enable megabar region NMR with micrometer spatial resolution, and can be
 a powerful tool to study exotic states of condensed matter physics like superconductivity of hydrides under high pressures \cite{LaH10_HP_PRL, LaH10_HP_Nature, H_NMR200GPa}.
 To fully exploit this approach, a detailed study of the optical and spin properties of diamond NV center under ultrahigh pressure is in progress.

In summary,  we propose and demonstrate a high-pressure NMR (and NQR) scheme enabled by diamond NV centers.
The first critical step of this scheme is hyperpolarization of the target nuclear spins with NV centers, followed by standard NMR sequence to control the evolution of the nuclear spins, and a second critical step is detection of the nuclear spin states with nearby NV quantum sensors.
We experimentally demonstrate high-pressure NMR of ${}^{14}$N nuclear spins in a microdiamond up to 16.6 GPa.
NMR spectra reveal that both the ${}^{14}$N nuclear quadrupole and hyperfine coupling terms deceases with increasing pressures, indicating the electron probability density of NV centers shifts away from the nitrogen nucleus under pressures.
The tens of kilohertz width of the NMR spectra is attributed to the fast relaxation time of the NV electron spins and can be suppressed with high-purity diamond and advanced correlation method.
These results deepen our understanding of the electronic structure of diamond NV center, and shine a new light on NMR and NQR under extreme conditions.

\emph{Acknowledgements }
This work was supported by Beijing Natural Science Foundation (Grant No. Z200009), Chinese Academy of Sciences (Grant Nos. YJKYYQ20190082, XDB28000000, XDB33000000, XDB25000000, QYZDBSSW-SLH013), the National Natural Science Foundation of China (Grant Nos. 11974020, 12022509, 12074422, 11934018, T2121001), the National Key Research and Development Program of China (Grant Nos. 2019YFA0308100, 2021YFA1400300, 2018YFA0305700), the Youth Innovation Promotion Association of Chinese Academy of Sciences (Grant No. 202003). This work was partially carried out at high-pressure synergetic measurement station of Synergic Extreme Condition User Facility.

redpajama_set_name: RedPajamaArXiv


This stunning detached period family residence is thought to date back to the early 1800s but has been extended in more recent years.
Tucked away in the village of North Kelsey, between Brigg and Caistor, the six-bedroom home comes with its own guest cottage.
To see inside the property, click on the video slideshow at the top of this page.
A long gated gravel laid driveway forms the formal entrance to the home, while more informal access comes via a second electronically operated gated entrance.
Once inside the house itself, its quality is immediately apparent in the impressive reception hall, which includes a feature twin approach oak staircase that leads to the first-floor.
A sophisticated lounge is set around a limestone period styled fireplace with a wood burning stove which is flanked by twin viewing windows into the adjacent conservatory, which are cleverly concealed entrance doors.
The lounge is divided into two distinctive spaces of a formal sitting area seat around the fireplace and a space which was originally a separate room used by the current owner as a movie area which could be a formal dining space.
The conservatory provides a perfect entertaining room for all seasons, while the stunning bespoke Chiselwood kitchen is another of the property's many highlights.
The kitchen is open plan to the family sitting and dining areas with views over the rear garden and onto open land beyond. The inclusion of a study, cloakroom and utility with pantry caters for modern family.
Upstairs, the first floor includes six double bedrooms, with the master suite having a fitted dressing room and a luxurious en-suite bathroom. An oak spiral staircase then leads to a private second-floor sitting room.
Three of the other bedrooms also have en-suites, with one being a child's Disney-themed suite.
A family bathroom with a corner bath is also part of this floor, with another staircase leading to a second-floor vaulted ceiling room which could form a perfect teenage retreat.
Outside, to the side of the property is a twin car port with stables or storage areas and a barn-style block which includes 10 removable stables.
To the rear of the side access to the house is the detached one-bedroom guest cottage, which has an open plan living kitchen and double bedroom with en-suite shower room.
The family garden with floral beds and shaped shrubs includes two seating areas with views over open land and a mature hedge provides screening from the formal garden to an all-weather polo practice area with fully secured fencing and lighting.
There is also an opportunity to purchase by separate negotiation fully fenced paddock land with a modern secure steel outbuilding with power, light and electric gated access.
The house is on the market with the Fine and Country Northern Lincolnshire estate agency for £995,000. For more information, call 01472 867880.


text:
@interface CheckoutCart : NSObject{

}

+ (CheckoutCart *)sharedInstance;

- (NSMutableArray*)juicesInCart;

- (NSMutableArray*)bowlsInCart;

- (NSMutableArray*)smootheesInCart;

- (NSMutableArray*)healthshotsInCart;

- (NSMutableArray*)hotdrinksInCart;

- (NSMutableArray*)coffeesInCart;

@property (strong, nonatomic) NSMutableDictionary *juiceDict;

@property (strong, nonatomic) NSMutableDictionary *addinDict;

@property (strong, nonatomic) NSMutableDictionary *quantity;

@property (nonatomic, assign) NSMutableArray* addinPrice;

@property (strong, nonatomic) NSString* instructions; //special instructions

@property (strong, nonatomic) NSString* userId; // It store the user id

@property (strong, nonatomic) NSString* userEmail; // To store the user email.

//@property (nonatomic, strong) NSMutableDictionary* itemDetails;
//
//@property (nonatomic, strong) NSMutableArray* allItemDetails;

@property (strong, nonatomic) NSString *allItems;

@property (strong, nonatomic) NSString *allItemName;

- (NSArray*)addinsInCart;

//- (BOOL)containsJuice:(Juice*)juice;

- (void)addJuice:(Juice*)juice;

- (void)addSmoothee:(Smoothee*)smoothee;
- (void)addBowl:(Bowl*)bowl;
- (void)addHealthShot:(HealthShot*)healthshot;
- (void)addHotDrink:(HotDrink*)hotdrink;
- (void)addCoffee:(Coffee*)coffee;
- (void)addAddin:(NSMutableArray *)addin second: (NSString *) category;

- (void)addJuiceCount:(NSNumber *)juicecount;

- (void)addBowlCount:(NSNumber *)bowlcount;

- (void)addSmootheeCount:(NSNumber *)smootheecount;

- (void)addHealthshotCount:(NSNumber *)healthshotcount;

- (void)addHotdrinkCount:(NSNumber *)hotdrinkcount;

- (void)addCoffeeCount:(NSNumber *)coffeecount;

- (void)addJuiceCountValue:(Juice *)juicevalue;

- (void)removeJuice:(Juice*)juice;

- (void)clearCart;

- (NSNumber*)total;

@end


Part of the Australian family-owned and operated OfficePace group, Burgtec offers you a world of choice.
We use our experience and eye for design to tailor office furniture solutions to suit modern workplaces and ways of working. While our traditional values of high quality design, craftmanship and exceptional customer service ensure you create a workspace that is unique, inspiring and practical.
Choose from Burgtec's collection of locally designed and manufactured furniture, OfficePace's expansive range of office furniture solutions including the renowned Strata workstation, and exclusive German and Italian designs.
Local manufacturing provides us with the flexibility to completely customise our furniture products to match your style and choice of colour.
We collaborate with architects and designers every day, providing great ideas to help you craft the perfect workplace.
How we work has changed and so too our workplaces. Get the latest insights about today's office furniture design.
Our dedicated client services team is available to assist you to create a workspace that you, your employees and your customers will love.
Our end-to-end services cover office design and space planning, project management through to installation and ongoing care.
We live and breathe world-leading workplaces that help people perform.
We'd love to help you create a standout space, the stress-free way.
Full service flexibility, world-leading designs, local manufacturer.


TODAY IS OFFICIALLY the Mid-Autumn Festival widely celebrated back home (15th day of the 8th month on the Chinese calendar).
Typically little ones will be parading their multi-design lanterns, while the adults struggle to keep the mosquitoes away under the moonlight. The moon is at its roundest in the month. It's the time to savour mooncakes too.
(Left, top and bottom) Cousins and their friends playing lanterns; (Right) Even adults are captivated by lanterns, as seen through the lens of my friend Lilian in Hoi An, Vietnam.
Far from home in the western African city of Accra… no mooncake, no lantern, no celebration either, but we enjoyed the same moon at its roundest.
Full moon in Accra, 8 Sept 2014.
I guess we can't complain as we'd been bestowed with abundant mooncakes in Hong Kong to last us a while.
Mooncakes in HK came in beautiful packaging like these.
This is from Marriot Hotel, Nanning, China.
This entry was posted in Happy at Home, Heavenly Hong Kong and tagged Accra, Ghana, Home, Hong Kong. Bookmark the permalink.


text:
Līga Kļaviņa (born January 27, 1980 in Tukums) is a female heptathlete from Latvia, who began her career as a high jumper. She competed for her native Baltic country at the 2000 Summer Olympics in Sydney, Australia.

Achievements

References

sports-reference

1980 births
Living people
Latvian female high jumpers
Latvian heptathletes
Athletes (track and field) at the 2000 Summer Olympics
Olympic athletes of Latvia

redpajama_set_name: RedPajamaWikipedia


Do your chores or you're grounded.
I got molested by a Catholic priest as a boy and I never got over the traumatic experience.
Y'all ever just start a new thread to keep the forums from dying? Haha yeah me neither.
your not my dad shut up.
I know I'm not because if I was I'd teach you the correct your vs you're at the very least.


Sell high and buy low whenever you can. Now is one of those rare times when investors can sell many of the most actively traded stocks and exchange-traded funds at high prices and replace them with low-priced call options.
That tack locks in gains without giving up the chance to make even more money if the rally continues. Of course, if the unusually heavy stock volume and buying soon marks a market top, investors will be very happy for having sold high and having lost only the small price of the options.
The implied volatilities of many call options are nearing low levels as the associated stocks and exchange-traded funds are surging to new highs owing largely to the recent stimulative actions taken by the Federal Reserve and European Central Bank. The stock market surged higher, lifting the Dow Jones Industrial Average to within 5% of its historic high of 14164.53, set on Oct. 9, 2007.
Consider the iShares Russell 2000 (ticker: IWM) exchange-traded fund. On Friday, the fund hit a 52-week high while at-the-money implied volatility hit an all-time low. Selling the ETF and replacing it with a bullish call option is easy enough. The trick is picking the expiration. That decision is personal and based on investors' market views and objectives.
Let's say you are looking for a short-term, one-month rally because you are afraid that the presidential election and January's fiscal cliff will slam stock prices. The fiscal cliff is the colorful phrase to describe the sharp tax increases and spending cuts that will take place Jan. 1 under current law unless Congress acts.
Investors concerned about the fiscal cliff could sell the Russell 2000 ETF, which tracks the small-capitalization-stock benchmark index, which recently traded at 86.14—just shy of its 52-week 86.96 high. At the same time, they could buy the October 86 call that traded for $1.72 when implied volatility was 17.5%.
If investor sentiment behaves as anticipated, the trade works well because they likely have locked in some major profits on the fund. Meantime, they can ride any continued advance into October, exiting just at about the time the election might overshadow central banks' curative actions.
If your market view is predicated on the belief that the fiscal cliff will prove to be a nonevent, and that the outcome of presidential election is largely meaningless as long as monetary policy drives the markets, you can make time your friend without paying too much for his companionship in the options market.
Consider the SPDR S&P 500 ETF Trust (SPY). On Friday, volume in options on the ETF was more than twice normal. The fund, which tracks the Standard & Poor's 500 Index, set a 52-week high at 148.11. Many investors own the ETF and other mutual funds that track the benchmark large-cap index. They can take profits, either completely or by just selling enough to take out their initial investment. That would mean they're playing with "house money," and use that to buy the SPY March 149 call at 5.09.
If the fiscal cliff is averted, stock prices would likely edge even higher, and the March 149 call would increase in value. The March expiration was chosen because it comes just ahead of first-quarter earnings reports, by which time Wall Street's bullish projections for profits may become tempered by realities of company warnings about their businesses.
These are heady times, but these trades will help keep you grounded. Sooner or later, all rallies run out of steam. Moreover, regardless of the fiscal cliff's outcome, it's a good bet capital-gains taxes will be higher next year than the favorable 15% long-term rate currently.
Investors who replace high-flying stocks with call options can lock in gains and side-step the looming risks.
Sell high and buy low whenever you can.