text:
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QObject, pyqtSignal
from PyQt4.QtGui import *
import subprocess
import threading
import settings
import json
import sys, os

# TODO: accept drag/drop from explorer
#       see http://stackoverflow.com/questions/8568500/pyqt-getting-file-name-for-file-dropped-in-app
#       and http://zetcode.com/gui/pyqt4/dragdrop/
class FileBrowseWidget(QtGui.QWidget):
    def __init__(self, parent, do_folder=False):
        super(FileBrowseWidget, self).__init__(parent)

        self.fnText = QtGui.QLineEdit("")
        self.browseButton = QtGui.QPushButton("Browse")
        self.browseButton.clicked.connect(self.browseButtonClicked)

        layout = QtGui.QHBoxLayout()
        layout.addWidget(self.fnText)
        layout.addWidget(self.browseButton)
        self.setLayout(layout)

        self.do_folder = do_folder

    def browseButtonClicked(self):
        if self.do_folder:
            fN = QtGui.QFileDialog.getExistingDirectory(self, 'Browse', '.')
        else:
            fN = QtGui.QFileDialog.getOpenFileName(self, 'Browse', '.', "Images (*.exr *.hdr *.ari *.cin *.dpx *.tif *.tga *.jpg *.jpeg *.png);;Movies (*.mp4 *.mov)")
        if fN:
            self.fnText.setText(fN)

def findCategories(prePath, elements):
    res = []
    for text, children in elements:
        itemTxt = prePath + str(text)
        res.append(itemTxt)
        if children:
            res = res + findCategories(itemTxt + "/", children)
    return res

class SequenceAdder(QtGui.QFrame):
    logUpdate = pyqtSignal(str, name='logUpdate')
    convertDone = pyqtSignal(int, name='convertDone')

    def __init__(self, parent):
        self.parent = parent
        super(SequenceAdder, self).__init__(parent)

        self.process = None

        # self.fileBrowser = FileBrowseWidget(self)
        self.fileBrowser = FileBrowseWidget(self, do_folder=True)
        self.categoryChooser = QtGui.QComboBox()
        categories = findCategories("", settings.data)
        for c in categories:
            self.categoryChooser.addItem(c)
        self.convertButton = QtGui.QPushButton("Convert")
        self.convertButton.clicked.connect(self.convertClicked)
        self.cancelButton = QtGui.QPushButton("Cancel")
        self.cancelButton.clicked.connect(self.cancelClicked)
        self.cancelButton.setEnabled(False)

        self.lbl = QtGui.QLabel("")

        self.logView = QtGui.QPlainTextEdit()
        self.logView.setPlainText("")
        self.logView.setReadOnly(True)

        layout = QtGui.QFormLayout()
        layout.addRow("Input Folder", self.fileBrowser)
        layout.addRow("Category", self.categoryChooser)
        layout.addRow(self.convertButton)
        layout.addRow(self.cancelButton)
        layout.addRow(self.lbl)
        layout.addRow(self.logView)

        self.setLayout(layout)

        self.logView.appendPlainText("")

    def done(self, setSuccess=False):
        if setSuccess:
            self.lbl.setText("DONE")
        else:
            self.lbl.setText("")
        self.convertButton.setEnabled(True)
        self.cancelButton.setEnabled(False)

    def callConvert(self, dir, cat):
        self.process = subprocess.Popen(("C:\Program Files\Nuke9.0v7\Nuke9.0.exe", "-t", "convertMaterial.py", dir, cat), bufsize=1, stdout=subprocess.PIPE)
        # for l in iter(self.process.stdout.readline, b''):
        #

        with self.process.stdout:
             for line in iter(self.process.stdout.readline, b''):
                 self.logUpdate.emit(str(line))
                 # self.logView.appendPlainText(str(line))
                 # print line
        self.process.wait()

        print "conversion done..." + str(self.process.returncode)
        self.convertDone.emit(int(self.process.returncode))

    def onLogUpdate(self, line):
        self.logView.appendPlainText(line)

    def onConvertDone(self, returncode):
        self.done()

        # success
        if returncode == 0:
            print "SUCCESS"

            with open('conversion_metadata.json', 'r') as dbfile:
                results = json.load(dbfile)
                print("Got {} results".format(len(results)))
                for r in results:
                    theID = settings.nextID()
                    it = r.copy()
                    it["id"] = theID
                    nm = r["name"]
                    print "Adding ", nm
                    del it["name"]
                    cat = str(self.categoryChooser.currentText())
                    settings.pathCache[cat][nm] = it
                settings.persistPathCache()

            try:
                os.unlink('conversion_metadata.json')
            except:
                print("Unexpected error when removing tmp file {}: {}".format(os.path.abspath('conversion_metadata.json'), sys.exc_info()[0]))
            # need to generate previously unused ID (maximum of all existing ids in pathCache + 1)
            #                  width, height from conversion process
            #                  fps from text field (can't get from conversion process for image sequences)
            #                  startframe / numframes from conversion process
            # idea for el-cheapo inter process communication: the adder creates a JSON with the metadata on finishing
            # (or sends the JSON string back)

    def convertClicked(self):
        # TODO: get progress and done as well as ability to cancel
        #       use  Popen.communicate() (see https://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll)
        #       also http://stackoverflow.com/questions/375427/non-blocking-read-on-a-subprocess-pipe-in-python/4896288#4896288

        self.logUpdate.connect(self.onLogUpdate)
        self.convertDone.connect(self.onConvertDone)

        threading.Thread(target=self.callConvert, args=(str(self.fileBrowser.fnText.text()), str(self.categoryChooser.currentText())) ).start()

        self.logView.setPlainText("")

        # TODO: proper progress bar etc
        # https://gist.github.com/kaotika/e8ca5c340ec94f599fb2
        self.lbl.setText("converting... please wait, this will take a while")

        self.convertButton.setEnabled(False)
        self.cancelButton.setEnabled(True)

    def cancelClicked(self):
        if self.process:
            self.process.terminate() # not very elegant, but ok
        print "cancel"
        self.done()


Those are the people we were talking with all last week at the Sustainable Brands conference in San Diego. People who—despite the naysayers, the doubters, the tuner-outers—not only believe but also work hard to show others there's a better way.
That's what unites all of us who do this work. We're all seeking to overcome the barrier of cynicism. Cynicism around the idea that investing in sustainability can make a difference—to our brands and our business results. Often that cynicism exists within our own organizations. Among our colleagues who have other priorities. Busy executives who are focused on meeting quarterly expectations. And employees who have a hard time seeing the connection between their day-to-day work and our sustainability goals.
We need to shut up.
Stop talking at people, and start listening to them.
Please don't be offended. (After all, I share your view—we've got something important to say!) But so often when we encounter someone who's not quite ready to buy in, we try to convince them by talking louder. Or by doubling down on proof points. It rarely works.
What we need to do, first, is understand their point of view. What are they worried about? How do they think about the world? What questions do they need answered? When we do that, we gain powerful insight that can help us frame our issue in a way that makes sense to that person. We can start to build a bridge between us.
But here is what's ironic.
The very last visitor to our #endcynicism booth was an older man with a thick Russian accent. He wanted to tell me about his two patents. One for a more sustainable flooring material and another for some sort of technology for making buildings earthquake-proof. But, he said, it was no use. No one cared. People didn't want to save the planet; they just wanted to make a profit.
I confess: I wasn't listening. I didn't want anything to do with his tale of woe.
And he wasn't listening to my message of optimism and hope either.
There we were. With the bridge up. The two of us on different sides, unable to reach one another. And what good is that?
Clearly, we all have more work ahead of us to truly #endcynicism. We can start by simply listening to each other. Let's try it this week and see what happens.
If you take a plunge for sustainability—will others follow?
Spending time with our tribe at Sustainable Brands 2016 in San Diego this week gave us a chance to re-energize and re-connect with the essential elements of brand purpose.


text:
Map & data
Carrier Vessel Portal
Marine Manager Portal
Joint Analytical Cell
Where Cost Matters: Global Fishing Watch Can Make Fisheries Monitoring Possible
Policy & Compliance / By Global Fishing Watch / September 1, 2017 August 19, 2022 / 2 minutes of reading
Metcalfe (second from right) conducts field surveys with local fishers.
Before discovering Global Fishing Watch, Dr. Kristian Metcalfe worked in Gabon on the west coast of central Africa on a Darwin Initiative funded project (20-009). The project established a network of Marine Protected Areas (MPAs) using spatial analysis of satellite-derived data such as Automatic Identification System (AIS) and Vessel Monitoring Systems (VMS). Although some governments are already using AIS or VMS to observe fishing activity in their Exclusive Economic Zones (EEZs), many do not have the infrastructure or resources to do so. To Metcalfe, Darwin Research Fellow at the University of Exeter, Global Fishing Watch has the potential to override those concerns. He is using our tools to demonstrate the potential strength of satellite data for more transparent monitoring and enforcement at sea.
Metcalfe became a beta tester for Global Fishing Watch in the early stages and started using it to inform his work in central Africa. Now, he is working on a new Darwin Initiative funded project (23-011) in the Republic of Congo with Professor Brendan Godley and Dr. Matthew Witt to collect various types of data on human activity in the marine environment and to inform the development of a marine spatial plan, with a particular emphasis on improving fisheries governance.
"Until recently, fisheries hasn't been a priority area for government funding in Congo because a large proportion of the government revenue is generated by hydrocarbon exploitation. However, with poverty alleviation and food security in mind, there has been a recent push by the government to better protect local livelihoods and fisheries resources," he said. He hopes to use Global Fishing Watch to show the Congolese Ministry of Fisheries that AIS is a cost effective tool for monitoring and enforcement efforts.
"Instead of spending thousands of dollars on a monitoring system, they could monitor fisheries online with Global Fishing Watch," he says. "I have used Global Fishing Watch to illustrate the value of real-time data to the fisheries agency in Congo, as well as explain to them that with a monitoring system in place, they can better manage and enforce their fishing fleet."
In fact, Metcalfe has already had some success in pushing the Ministry towards stricter action against illegal fishing. "In conjunction with other monitoring approaches, we have used Global Fishing Watch to show them patterns of illegal fishing within Conkouatai-Douli National Park and the artisanal fisheries zone," he said. "Now we are working together with our partners (Wildlife Conservation Society and Rénatura) to provide more funding to increase local capacity to undertake patrols and improve enforcement."
In Latin America, Training Helps Governments to Discover Suspicious Behavior
Canada Recognizes Need for Strong and Consistent Transshipment Measures
Monitoring is Key for the Future of Guyana's Marine Environment
I agree to the Global Fishing Watch Terms of Use and Privacy Policy
New Fusion of Global Datasets Advances Understanding of Vessel Identity and Activity
New research reveals shifting identities of global fishing fleet to help bolster fisheries management
2022: A Year of Success—and Greater Promise
©2023 Global Fishing Watch
Founded by Oceana, SkyTruth and Google

redpajama_set_name: RedPajamaCommonCrawl


Well shaped tree to 4 feet or more has small, orange, thin-skinned and tart fruit sometimes used in marmalades. Very tasty! Good sun hardy variety for container garden. Best in afternoon shade, amended well drained soil and moderate water. May be damaged at 32F.


Where do most cases of RMSF occur in the U.S.?
What are Rocky Mountain spotted fever risk factors?
What are Rocky Mountain spotted fever symptoms and signs?
What is the incubation period for Rocky Mountain spotted fever?
How do health-care providers diagnose Rocky Mountain spotted fever?
What is the prognosis of Rocky Mountain spotted fever?
What are the long-term effects of Rocky Mountain spotted fever?
Is there a vaccine for Rocky Mountain spotted fever?
Is it possible to prevent Rocky Mountain spotted fever?
RMSF is a potentially serious tick-borne disease, and it is the most common cause of fatal tick-borne diseases in the United States.
The incidence of RMSF has increased from less than two cases per million people in the year 2000 (approximately 500 cases) to over six cases per million people in 2010 (approximately 2,000 cases).
Although RMSF cases have been reported throughout the United States, the highest incidence of cases in 2010 were in Arkansas, Delaware, Missouri, North Carolina, Oklahoma, and Tennessee.
RMSF is treatable with antibiotics, but it can have serious long-term effects and can potentially lead to death if not treated quickly and properly.
Rocky Mountain spotted fever (RMSF) is a tick-borne disease caused by the bacterium Rickettsia rickettsii. This illness, which is found in North, Central, and South America, is transmitted via the bite of an infected tick. The illness affects the lining of blood vessels (causing a condition termed vasculitis), causing the blood vessels to leak, which ultimately can cause damage to nearly all internal organs. It is the most common cause of fatal tick-borne diseases in the United States. The fatality rate is less than 1%.
Cases of RMSF have been reported in many areas of the country, and the disease is not restricted to the Rocky Mountain region, as its name may imply. In fact, Arkansas, Missouri, North Carolina, Oklahoma, and Tennessee account for over 60% of reported cases. In 2010, there were approximately 2,000 cases reported in the U.S., which is more than twice as many cases reported annually in the 1990s.
Reported incidence of RMSF per million people in 2008; NN=not reported. SOURCE: CDC.
RMSF is caused by Rickettsia rickettsii, a bacterium that is transmitted to humans via the bite of an infected tick. In the United States, these ticks include the Rocky Mountain wood tick (Dermacentor andersoni), the American dog tick (Dermacentor variabilis), and the brown dog tick (Rhipicephalus sanguineus).
The tick needs to bite humans and then attach itself for at least six to 10 hours for the transmission of the bacterium to occur, although transmission does not occur for up to 24 hours in some cases.
Being outdoors in areas where the ticks carrying Rickettsia rickettsii are prevalent is the major risk factor for acquiring the disease.
Although the name of the disease includes the Rocky Mountains, it is somewhat of a misnomer as RMSF is most commonly reported in the south Atlantic and south central regions of the United States (though the Rocky Mountain region was one of the first areas where the disease was identified).
The incidence of RMSF increases when ticks are most active and people spend more time outdoors, which commonly occurs during the summer months, with peak periods in June and July. However, RMSF can occur during any month of the year.
RMSF is transmitted via a tick bite and cannot be transmitted from person to person. There are rare reports of RMSF being transmitted via blood transfusions, however.
RMSF typically begins with headaches, a high fever, and muscle aches. Some individuals may also develop abdominal pain, nausea, and vomiting. It is frequently followed by a rash (usually two to five days after the onset of fever) that appears around the ankles, forearms, and wrists. The rash consists of small, non-itchy, flat pink spots that then spread to the individual's chest and back and then down the remainder of the extremities. The rash can sometimes involve the palms and soles. In some cases (about 10% of the time), no rash develops, which makes diagnosing RMSF much more difficult. In about 35%-60% of patients with RMSF, a spotty rash that is red or purple (petechiae) may develop around the sixth day or later after the onset of symptoms. The appearance of this type of rash indicates that the disease has become more severe.
Kidneys: Kidney failure may occur due to damage of the small blood vessels in the kidney.
Extremities: Due to damage to the smallest blood vessels in the fingers or toes, blood flow can be disrupted, leading to gangrene, with amputation sometimes being necessary.
Brain: Headaches, lethargy, confusion, and even seizures can occur due to damage to the blood vessels in the brain.
Heart and lungs: Inflammation of heart tissue (myocarditis) or respiratory failure can lead to death.
Eyes: Damage to the eyes may occur, often due to inflammation of the vascular structures of the eye (uveitis or retinal vasculitis).
The signs and symptoms of RMSF can appear within the first few days after the tick bite, or they can be delayed by up to two weeks. The typical rash usually appears approximately two to five days after the onset of fever, though it may not appear at all.
RMSF is usually initially treated by a primary-care doctor (pediatrician, family doctor, or general internist) or emergency-medicine specialist. Depending on the severity of the illness, an infectious-disease specialist may also be consulted.
RMSF can be difficult to initially diagnose, as many of the early symptoms (such as headache, body aches, and fever) are commonly seen with many other viral or bacterial infections. The presence of the classic rash usually helps in establishing the diagnosis, however, not all patients with RMSF will develop a rash. A tentative clinical diagnosis of RMSF can be made based on the patient's symptoms and their physical exam, in addition to a history of possible tick exposure. The prompt initiation of treatment in suspected RMSF is crucial, even before confirmatory test results are obtained. Specialized laboratory tests (such as immunofluorescent antibody tests, latex agglutination, or enzyme immunoassays) are available to confirm the diagnosis of RMSF. However, these tests are not readily available in all health-care facilities, and results of these tests may take days or weeks.
During infection with RMSF, an individual's immune system will develop antibodies usually within the first seven to 10 days after illness onset (therefore the confirmatory lab tests might be negative during the first week). The indirect immunofluorescent assay needs to be performed on two samples to show a rise in antibody titers (the first sample is usually taken during the first week, and the second sample about two to four weeks later).
Additional routine blood tests, such as a complete blood count, an electrolyte panel, liver function tests, and coagulation studies will be obtained. These blood tests can help monitor for any potential complications, such as kidney failure or problems with blood clotting. An electrocardiogram (ECG) or chest X-ray may also be obtained if there are any potential cardiac or pulmonary manifestations of the disease. In individuals who have confusion or seizures, a CT scan of the brain may also be ordered. Additional tests will depend on the patient's symptoms and the severity of the disease.
Antibiotics are the treatment for RMSF. Doxycycline is the antibiotic of choice in children and adults suspected of having RMSF. Antibiotic treatment is most effective if started within the first five days of symptom onset, so prompt treatment with antibiotics should be initiated in any individual suspected of having RMSF, even before confirmatory laboratory testing results are available. The early initiation of antibiotics decreases the mortality rate of RMSF from 20% to less than 1%. For individuals who are allergic to doxycycline, and in some pregnant patients, chloramphenicol (Chloromycetin, Econochlor, Ocu-Chlor) is an alternative antibiotic that can be used. Although the disease responds well to treatment, it can become life-threatening if not treated promptly.
Though certain patients with mild symptoms and signs suspected of having RMSF can be treated as outpatients with antibiotics and close follow-up, other patients with suspected RMSF will require admission to the hospital for close monitoring and further evaluation.
If diagnosed early and treated promptly, RMSF has a very good prognosis. Most patients will fully recover without any long-term disabilities. However, a delay in diagnosis and treatment is contributory to the higher rates of complications and mortality seen with RMSF. In the United States, the mortality rate for RMSF is currently less than 1%. In the preantibiotic era, the mortality rate was around 30%.
The long-term effects of RMSF depend on the severity of the illness. Many patients recover fully without any long-term effects, whereas other individuals may suffer from permanent long-term neurologic problems and internal organ dysfunction.
There are currently no vaccines available for RMSF. The best way to prevent the disease is to avoid tick bites.
Wear long pants and long sleeves when walking or working outside, especially in wooded areas.
Check yourself, family members, and pets for ticks after you have been outside in a high-risk area.
If a tick is found, proper removal of the tick is important. Removal of the tick should be performed with tweezers while wearing gloves. The tick should not be crushed, and care should be taken to ensure that the whole tick is removed while gently pulling the tick out.
If possible, keep the tick so that identification of the tick species can be established if necessary.
Tintinalli, Judith E., et al. Tintinalli's Emergency Medicine: A Comprehensive Study Guide, 7th ed. New York: McGraw Hill Professional, 2010; 1071-1072.
United States. Centers for Disease Control and Prevention. "Rocky Mountain Spotted Fever (RMSF)." Nov. 21, 2013. <http://www.cdc.gov/rmsf/>.


Chinchilla enjoys a peaceful location in a quiet cul-de-sac, and is still within a short distance of the town centre and a stone′s throw from the piste. A perfect location in Courchevel 1850.
Chalet Chinchilla epitomises everything that you expect from a ski chalet in terms of classic alpine design and wonderfully comfortable accommodation. But as far as this chalet is concerned, it′s the location which sets it apart from others - a stone′s throw from the Cospillot piste and a short walk to the centre of the resort.
A wonderfully cosy living room with a roaring fire as its centrepiece provides the perfect haven to relax after a hard day on the piste and french doors open onto the terrace with views over Cospillot and across the valley to Courchevel 1650.
The bedrooms are spread across two levels, with two double en-suite bedrooms on the ground floor and the master bedroom above the kitchen. Children will love the bunkroom which is also on the ground floor with its own shower room.
Aching limbs can be soothed in the sauna which is on the lower level - an ideal retreat for a spot of relaxation.
Built to an extremely high specification, Chalet Chinchilla has been stylishly finished with elegant furniture and beautiful soft furnishings making it ideal for families or groups of friends alike.


text:
Air Force F35 Fighter Jet Crashes In Florida – Days After 1st Jet Went Down
By Manly Bryant on May 20, 2020
F-35 Lightning II / Facebook
A 79.2 million dollar F-35A Lightning II fighter jet, assigned to the 58th Fighter Squadron of the U.S Air Force reportedly crashed while landing at the Eglin Air Force Base in Florida.
NEWS RELEASE: An F-35A Lightning II assigned to the 58th Fighter Sq crashed upon landing around 9:30 p.m. today @TeamEglin. The pilot successfully ejected and was transported to the 96th Medical Group for evaluation and monitoring. The pilot is in stable condition. Cont.
— Eglin Air Force Base (@TeamEglin) May 20, 2020
It happened around 9:30 at night on Tuesday, May 19, 2020, and the pilot was able to successfully eject from the aircraft before it crashed on the runway. The rescue crew quickly recovered the airman and transported him to the 96th Medical Group.
"At the time of the accident, the pilot was participating in a routine night training sortie," the Eglin AFB said. "First responders from the 96th Test Wing are on the scene and the site is secured."
Fortunately, the pilot lived and there was not any damage to civilian property. The airman's name will not be released at this time but they said he was participating in a routine night training sortie.
F-22 crashes on Eglin range. Pilot ejected and is stable condition at the 96th Medical Group. This was a routine training mission with the 33rd Fighter Wing. Please visit https://t.co/p3LYI4GEUx for the full release. Queries please email [email protected] and call 910-261-5478
Just days before the crash, on Friday, May 15th, around 9:15 in the morning, there was another jet fighter participating in routine training and crashed 12 miles northeast of Eglin Air Force Base on a testing and training range. It was an F-22 assigned to the 43rd Fighter Squadron and it cost 150 million dollars.
"The aircraft debris has not yet been removed," Eglin Air Force Base said, according to News Week. "The interim safety investigation board is in control of the crash scene and will not move the debris until they can ensure all evidence is preserved to assist in establishing the cause of the accident."
That pilot was also able to safely eject from the jet before it crashed and was taken to the 96th Medical Group as well. His name was not disclosed either but he was reported to be in a stable condition.
With two fighter jets crashing within four days of each other, the investigation will show in the near future any potential connection or link between the two.
Enjoy Video Below Detailing F-35 Stealth Fighter
F-35 Stealth Fighter Can Take on Any Fighter Jet
Posted by AirForce Times on Tuesday, July 2, 2019


text:
The climate bill includes billions of funding. Will it be spent fairly?
0 0 Friday, December 10, 2021 Edit this post
The new infrastructure law signed by President Biden includes nearly $ 50 billion to protect communities from climate change, the...
The new infrastructure law signed by President Biden includes nearly $ 50 billion to protect communities from climate change, the largest investment of its kind ever. But spending that money will test the president's promise to pursue climate justice.
Biden has pledged to spend 40% of climate spending on underserved places, including communities of color and small towns. These places tend to be particularly vulnerable to climate change, but generally have a harder time protecting themselves.
Keeping that commitment could be a challenge. Much of the money for climate resilience goes through competitive grant programs, and these programs tend to favor wealthy, white, and urban communities. This is because, among other things, these communities have more money to hire experts to navigate the complicated process of obtaining federal grants.
I spoke to officials across the Biden administration to my article on the bill, and it is not known whether they found a way to remake these subsidy programs. Some lawyers, meanwhile, say they are looking for actions to back up the president's promises.
Quote: "What is most important? Asked Yoca Arditi-Rocha, executive director of the CLEO Institute, a nonprofit group in Florida. "Protect property values or protect people's lives?" "
Manatees get help: a feeding program
Wildlife officials are doing something they've never done before to help manatees in Florida: They plan to provide food for hundreds of malnourished animals at a key location on the east coast of Florida. State in an urgent effort to allow them to get through the winter.
It's a tough decision, as scientists have found that sometimes feeding wild animals can do more harm than good. But Florida's manatees, already threatened with extinction, have suffered catastrophic losses in the past year. Wildlife officials have linked the deaths to a sharp decline in the availability of sea grasses that aquatic animals eat.
The program, which will be experimental and limited, was announced on Wednesday. You can read the entire article here.
Numbers: In 2016, about 8,800 manatees remained in Florida waters, according to state wildlife officials. So far this year, more than 1,000 people have died.
An environmentalist who works for God (and against lawns)
Bill Jacobs is an environmentalist who believes in the sanctity of every life: every butterfly, every bird, every beetle and every bee.
That's why, for over 25 years, he and his wife, Lynn, chose not to have a lawn and instead filled their garden on the north coast of Long Island with pollinating plants, mostly native, to provide food and habitat. for our feathered and antennae friends.
Like I wrote in my recent article, along with beautiful photographs by Karsten Moran, this penchant for the natural has increasingly put the Jacobs at odds with their lawn-loving neighbors, two of whom work as landscapers. But Jacobs says that as a Catholic he feels responsible for being a steward of the land, and that anyone can help fight the collapse in biodiversity by planting native plants outside their doors.
Quote: "This lawn is an obsession, like a cult," Mr. Jacobs said. "It is poverty that most of us are not even aware of."
Opinion: What privilege means in the climate crisis
the Global North has the power to lead the charge against the pollution that it has long allowed, writes Carola Rackete, environmentalist and activist, in a guest essay.
Teachers: please share your thoughts
If you teach science, math, technology, or another STEM-related subject like climate change, we'd love to know how you fit the coverage of the New York Times in your study program. We hope to publish a collection of these answers on The Learning Network.
Headway overview
The New York Times Headway Team, a new group created to investigate major national and international challenges through the lens of progress, released its first series this month. You can read the climate articles here:
A five-star emporium of ambition on the Congo River
What do a former NBA star, Trump fundraiser, R&B singer, fashion executive and famous military entrepreneur have in common? They are all trying to invest in cobalt, a crucial metal in the clean energy revolution.
And, all strolled through the lobby of the Fleuve Congo hotel in Kinshasa, on the banks of the muddy and furious Congo River, in a country that produces more than 70 percent of the world's supply of cobalt, which keeps the car going. electric batteries against overheating and gives vehicles greater range without the need for charging.
The upscale River, with its $ 29 cheeseburgers and its seven-chandelier lobby in a country where most people live on $ 2 a day, is an emporium of ambition in a nation that serves up essential raw materials for food. the planet's fight against climate change. Virtually everyone who passes by the hotel seems determined to steal some of Congo's wealth, despite the fact that many have little or no experience in the mining industry.
You can read about this new wave of investors, and how years of corruption and labor abuse in Congo opened the door for them, in our article here.
Related: A few days later our article on Albert Yuma, the man in charge of the reform of artisanal mining in Congo, has been published he was fired from his post as chairman of the country's state mining enterprise.
Higher global temperatures mean more droughts. Sounds obvious, right? Well, it's not that simple.
Two years of poor rainfall in Madagascar created a food crisis in the poor agrarian southwest of the African nation. Corn an international team of scientists discovered that man-made climate change is unlikely to be a determining factor.
The researchers, working as part of the World Weather Attribution initiative, used computer simulations to compare today's world with a hypothetical world in which industrial activity had not added heat-trapping gases to the atmosphere. They did not find a significant difference in the likelihood of such a long and severe drought in this part of Madagascar.
The results show how difficult it can be to draw straight lines between individual extreme weather events – think floods, heat waves, cold spells – and global climate change. Droughts are the result of multiple factors, including precipitation, temperature, and soil and vegetation conditions.
However, the study does not give Madagascar reason to rest easy. Other research has indicated that the island is likely to experience more droughts if average global temperatures rise above the level the researchers considered in the latest study – as seems likely in the coming decades as part current policies.
Newsrust - US Top News: The climate bill includes billions of funding. Will it be spent fairly?
https://static01.nyt.com/images/2021/12/02/climate/02cli-EQUITY1/02cli-EQUITY1-facebookJumbo.jpg
https://www.newsrust.com/2021/12/the-climate-bill-includes-billions-of.html


Pattern is from Knit Socks. 2 skeins of cascade 220 superwash, #3 bamboo dpns, one at a time, cuff-down.
i followed the pattern as written, except that i reversed the direction of the mock cables for the second sock. these socks are a gift for a friend, men's size 10.5.


Eppendorf Safe-Lock 2 mL snap-cap tubes for regular and Blue model snap cap Bullet Blenders®. Non-sterile.
2.0 mL non-sterile Eppendorf Safe-Lock polypropylene microcentrifuge tubes, box of 500 (bulk). For use in BBX24 and BBX24B models of Bullet Blender. We recommend using at least two 2 mL tubes per homogenization cycle.


text:
HomeNewsNHS staff will be withdrawn from Westbrook House care centre
NHS staff will be withdrawn from Westbrook House care centre
May 7, 2018 Kathy Bailes News 0
KCHFT NHS staff will no longer be based at Westbrook House
NHS staff will be withdrawn from Westbrook House care centre from next month (June).
The centre, in Canterbury Road, provides respite, rehabilitation and intermediate, residential and nursing care to older people.
It is run by Kent County Council but has staffing from Kent Community Health NHS Foundation Trust (KCHFT).
A reorganisation of the service will see the Victoria Unit, which offers assessment facilities and intermediate care to frail older people, move to the lower floor and all services will be provided through the county council.
KCHFT staff have been offered alternative roles.
KCC says patients should see no difference in the services provided.
'Short stay'
A spokesman said: "The NHS and Kent County Council (KCC) have put forward proposals for a new interim model of care to be introduced at the Westbrook House Integrated Care Centre in Margate.
"The Victoria Unit currently offers assessment facilities and intermediate care to frail older people. Going forward it is proposed that these services are provided by way of a short stay social care reablement model, starting from June 1. The interim service would be delivered in a unit downstairs in the care centre.
"Short stay reablement units provide support to people to regain their ability to undertake their own personal care, help with daily living activities and other practical tasks, usually for up to six weeks. Service users tend to be people who have just been discharged from hospital or are otherwise entering the care system following a crisis. It is far less likely that there would need to be a home care package or long-term care after a period of reablement."
Community nursing staff from KCHFT will have some input for service users with low level nursing needs.
KCC says the consultation does not impact on the 60-bed care home at the site.
Alternative positions
The spokesman added: "Alternative positions have been made available to all KCHFT staff at Westbrook House, with many located in the immediate area. KCC staff are not part of the consultation as their employment is unaffected.
"Patients would see a seamless transition to a new model of care. The new way of working would allow the NHS and KCC to use the unit to its full potential. This would be a real benefit to the patients in east Kent and Thanet reducing the number of patients admitted to the acute hospital and helping others to be discharged earlier and closer to home.
"To ensure there is no impact on patient care an interim model of care is being put in place while plans for a long term model are finalised and approved."
Mr Ramsgate – Ralph Hoult – mingles with stars at Buckingham Palace OBE ceremony
Your photos: Thanet in May


❶After listening to her speak for a few minutes I told her she was hired.
In order to obtain the best resume you must give your resume to the best resume writers in Boston. We make it easy to get your resume professionally done. Just follow three simple steps. First, simply fill out the online order form. Here you, would just need to tell us what you need help with and how soon do you need the work to be completed.
If you have a resume you did yourself, you can upload it to us for review. Next, one of our gurus will contact you to discuss your experience and skills in greater detail.
Feel free to ask any questions you might have. We will be happy to answer them. As the best professional resume writing services in Boston, MA we make the resume creation process maximally easy for you.
We know how difficult and stressful it is to be looking for a job right now. Allow us to make this process a little bit easier for you by having the best resume writer in Boston construct your resume. You will love the results. We make it easy! Follow our simple three step process to download your professionally polished resume.
Personalized approach After you submit your order form, you will be contacted by one of our resume gurus to discuss your skills and experience in greater detail. We are a team! Their talented and professional team helps applicants get the resume they need to land an interview. You can order a resume writing service any time of the day.
For applicants who are looking for best resume writing service in Boston, you can come with the agency that gives your application a priority stamp. The agency aims to significantly increase your chance to land a job interview and eventually be hired. It is known for delivery satisfaction to its clients. The agency provides hundreds of templates that you can choose from. There are also pre-written samples where you can just fill in with your information.
A representative or customer service support will guide you through the step-by-step and helpful tips to accomplish your own resume. This is a well-respected company in the field of resume writing services. With over 35 years of experience in this field, the agency has been helping clients find their dream jobs for decades. It caters to all levels of a profession and offers a personal approach to every resume project. It highlights your skills and experience to optimize your resume and generate job interviews.
It creates resumes that speak about youu — skills, experience, and other important information. It works with students, executives, and professionals from different fields.
Best Resume Writing Service In Boston Resume Writing Service. filezperfecttz.cf offers professional resume writing services to help clients have a correct, appropriate, and job suited CV. This agency is known for their skilled writers who are expert in creating unique resumes and cover letters. They create resumes .
Nov 18, · Boston's Professional LinkedIn Profile & Resume Writing Services Starting a new job search in Boston requires more technology sophistication each year. Historically, the Boston Herald job classifieds was the key filezperfecttz.cfon: 56 Saint Botolph Street, Boston, , MA. View the top certified resume companies in the Boston area. Boston Resume Services. Boston Resume Writing Services. Resume Writers *Top Pick Based on User Reviews* Professional Resume Service with Money back Guarantee Network of independent Resume Writing Professionals Visit Site.
The Best Professional Resume Writing Services in Boston (MA) Get your resume written by experts in your industry. get started now I think it is the best presentation of my career highlights. Scott Jordan, Area Sales Manager, Boston. You did a nice job on my resume! I like the wording and order of sections. I'm sure it will work now!. Sep 06, · We offer a wide variety of writing services including essays, research papers, term papers, thesis among many others. We have a lot of experience in the academic writing industry. We were once.


text:
本節描述的內容為:

* 用於處理和建立 JSON 資料的函數和運算子
* SQL/JSON 路徑語言

要了解有關 SQL/JSON 標準的更多資訊,請參閱 \[[sqltr-19075-6](../../bibliography.md#sqltr-19075-6-sql-technical-report-part-6-sql-support-for-javascript-object-notation-json-first-edition-2017)\]。有關於 PostgreSQL 支援的 JSON 型別的詳細資訊,請參閱[第 8.14 節](../data-types/json-types.md)。

## 9.15.1. Processing and Creating JSON Data

[Table 9.44](json-functions-and-operators.md#table-9-44-json-and-jsonb-operators) 列出了可用於 JSON 資料型別的運算子(請參閱[第 8.14 節](../data-types/json-types.md))。

#### **Table 9.44. `json` and `jsonb` Operators**

| Operator | Right Operand Type | Return type | Description | Example | Example Result |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `->` | `int` | `json` or `jsonb` | Get JSON array element \(indexed from zero, negative integers count from the end\) | `'[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2` | `{"c":"baz"}` |
| `->` | `text` | `json` or `jsonb` | Get JSON object field by key | `'{"a": {"b":"foo"}}'::json->'a'` | `{"b":"foo"}` |
| `->>` | `int` | `text` | Get JSON array element as `text` | `'[1,2,3]'::json->>2` | `3` |
| `->>` | `text` | `text` | Get JSON object field as `text` | `'{"a":1,"b":2}'::json->>'b'` | `2` |
| `#>` | `text[]` | `json` or `jsonb` | Get JSON object at the specified path | `'{"a": {"b":{"c": "foo"}}}'::json#>'{a,b}'` | `{"c": "foo"}` |
| `#>>` | `text[]` | `text` | Get JSON object at the specified path as `text` | `'{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'` | `3` |

{% hint style="info" %}
這些運算子都有 json 和 jsonb 型別共用的變形。欄位/元素/路徑提取運算子回傳與其左側輸入相同的類型(json 或 jsonb),但指定為回傳 text 的運算符除外,這些運算子將結果強制轉換為 text。如果 JSON 輸入的結構不符合要求,則欄位/元素/路徑提取運算子將回傳 NULL 而不會失敗。例如,如果不存在這樣的元素。接受整數 JSON 陣列索引的欄位/元素/路徑提取運算子均支援表示從陣列末尾開始的負數索引值。
{% endhint %}

The standard comparison operators shown in [Table 9.1](https://www.postgresql.org/docs/12/functions-comparison.html#FUNCTIONS-COMPARISON-OP-TABLE) are available for `jsonb`, but not for `json`. They follow the ordering rules for B-tree operations outlined at [Section 8.14.4](https://www.postgresql.org/docs/12/datatype-json.html#JSON-INDEXING).

Some further operators also exist only for `jsonb`, as shown in [Table 9.45](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-JSONB-OP-TABLE). Many of these operators can be indexed by `jsonb` operator classes. For a full description of `jsonb` containment and existence semantics, see [Section 8.14.3](https://www.postgresql.org/docs/12/datatype-json.html#JSON-CONTAINMENT). [Section 8.14.4](https://www.postgresql.org/docs/12/datatype-json.html#JSON-INDEXING) describes how these operators can be used to effectively index `jsonb` data.

#### **Table 9.45. Additional `jsonb` Operators**

| Operator | Right Operand Type | Description | Example |  |  |  |  |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| `@>` | `jsonb` | Does the left JSON value contain the right JSON path/value entries at the top level? | `'{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb` |  |  |  |  |
| `<@` | `jsonb` | Are the left JSON path/value entries contained at the top level within the right JSON value? | `'{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb` |  |  |  |  |
| `?` | `text` | Does the _string_ exist as a top-level key within the JSON value? | `'{"a":1, "b":2}'::jsonb ? 'b'` |  |  |  |  |
| \`? | \` | `text[]` | Do any of these array _strings_ exist as top-level keys? | \`'{"a":1, "b":2, "c":3}'::jsonb ? | array\['b', 'c'\]\` |  |  |
| `?&` | `text[]` | Do all of these array _strings_ exist as top-level keys? | `'["a", "b"]'::jsonb ?& array['a', 'b']` |  |  |  |  |
| \` |  | \` | `jsonb` | Concatenate two `jsonb` values into a new `jsonb` value | \`'\["a", "b"\]'::jsonb |  | '\["c", "d"\]'::jsonb\` |
| `-` | `text` | Delete key/value pair or _string_ element from left operand. Key/value pairs are matched based on their key value. | `'{"a": "b"}'::jsonb - 'a'` |  |  |  |  |
| `-` | `text[]` | Delete multiple key/value pairs or _string_ elements from left operand. Key/value pairs are matched based on their key value. | `'{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[]` |  |  |  |  |
| `-` | `integer` | Delete the array element with specified index \(Negative integers count from the end\). Throws an error if top level container is not an array. | `'["a", "b"]'::jsonb - 1` |  |  |  |  |
| `#-` | `text[]` | Delete the field or element with specified path \(for JSON arrays, negative integers count from the end\) | `'["a", {"b":1}]'::jsonb #- '{1,b}'` |  |  |  |  |
| `@?` | `jsonpath` | Does JSON path return any item for the specified JSON value? | `'{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)'` |  |  |  |  |
| `@@` | `jsonpath` | Returns the result of JSON path predicate check for the specified JSON value. Only the first item of the result is taken into account. If the result is not Boolean, then `null` is returned. | `'{"a":[1,2,3,4,5]}'::jsonb @@ '$.a[*] > 2'` |  |  |  |  |

#### Note

The `||` operator concatenates the elements at the top level of each of its operands. It does not operate recursively. For example, if both operands are objects with a common key field name, the value of the field in the result will just be the value from the right hand operand.

#### Note

The `@?` and `@@` operators suppress the following errors: lacking object field or array element, unexpected JSON item type, and numeric errors. This behavior might be helpful while searching over JSON document collections of varying structure.

[Table 9.46](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-JSON-CREATION-TABLE) shows the functions that are available for creating `json` and `jsonb` values. \(There are no equivalent functions for `jsonb`, of the `row_to_json` and `array_to_json` functions. However, the `to_jsonb` function supplies much the same functionality as these functions would.\)

#### **Table 9.46. JSON Creation Functions**

      Function
      Description
      Example
      Example Result

to_json(anyelement)

to_jsonb(anyelement)

      Returns the value as json or jsonb. Arrays and
        composites are converted (recursively) to arrays and objects; otherwise,
        if there is a cast from the type to json, the cast function
        will be used to perform the conversion; otherwise, a scalar value is produced.
        For any scalar type other than a number, a Boolean, or a null value, the
        text representation will be used, in such a fashion that it is a valid json or jsonb value.
      to_json('Fred said "Hi."'::text)

        "Fred said \"Hi.\""

      array_to_json(anyarray [, pretty_bool])

      Returns the array as a JSON array. A PostgreSQL multidimensional array
        becomes a JSON array of arrays. Line feeds will be added between dimension-1
        elements if pretty_bool is true.
      array_to_json('{{1,5},{99,100}}'::int[])

      [[1,5],[99,100]]

      row_to_json(record [, pretty_bool])

      Returns the row as a JSON object. Line feeds will be added between level-1
        elements if pretty_bool is true.
      row_to_json(row(1,'foo'))

      {"f1":1,"f2":"foo"}

json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

      Builds a possibly-heterogeneously-typed JSON array out of a variadic argument
        list.
      json_build_array(1,2,'3',4,5)

      [1, 2, "3", 4, 5]

json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

      Builds a JSON object out of a variadic argument list. By convention, the
        argument list consists of alternating keys and values.
      json_build_object('foo',1,'bar',2)

      {"foo": 1, "bar": 2}

json_object(text[])

jsonb_object(text[])

      Builds a JSON object out of a text array. The array must have either exactly
        one dimension with an even number of members, in which case they are taken
        as alternating key/value pairs, or two dimensions such that each inner
        array has exactly two elements, which are taken as a key/value pair.

json_object('{a, 1, b, "def", c, 3.5}')

json_object('{{a, 1},{b, "def"},{c, 3.5}}')

        {"a": "1", "b": "def", "c": "3.5"}

json_object(keys text[], values text[])

jsonb_object(keys text[], values text[])

      This form of json_object takes keys and values pairwise from
        two separate arrays. In all other respects it is identical to the one-argument
        form.
      json_object('{a, b}', '{1,2}')

      {"a": "1", "b": "2"}

#### Note

`array_to_json` and `row_to_json` have the same behavior as `to_json` except for offering a pretty-printing option. The behavior described for `to_json` likewise applies to each individual value converted by the other JSON creation functions.

#### Note

The [hstore](https://www.postgresql.org/docs/12/hstore.html) extension has a cast from `hstore` to `json`, so that `hstore` values converted via the JSON creation functions will be represented as JSON objects, not as primitive string values.

[Table 9.47](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE) shows the functions that are available for processing `json` and `jsonb` values.

#### **Table 9.47. JSON Processing Functions**

      Function
      Return Type
      Description
      Example
      Example Result

json_array_length(json)

jsonb_array_length(jsonb)

      int

      Returns the number of elements in the outermost JSON array.
      json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]')

      5

json_each(json)

jsonb_each(jsonb)

setof key text, value json

setof key text, value jsonb

      Expands the outermost JSON object into a set of key/value pairs.
      select * from json_each('{"a":"foo", "b":"bar"}')

json_each_text(json)

jsonb_each_text(jsonb)

      setof key text, value text

      Expands the outermost JSON object into a set of key/value pairs. The returned
        values will be of type text.
      select * from json_each_text('{"a":"foo", "b":"bar"}')

json_extract_path(from_json json, VARIADIC path_elems text[])

jsonb_extract_path(from_json jsonb, VARIADIC path_elems text[])

json

jsonb

      Returns JSON value pointed to by path_elems (equivalent
        to #> operator).
      json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4')

      {"f5":99,"f6":"foo"}

json_extract_path_text(from_json json, VARIADIC path_elems text[])

jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])

      text

      Returns JSON value pointed to by path_elems as text (equivalent
        to #>> operator).
      json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6')

      foo

json_object_keys(json)

jsonb_object_keys(jsonb)

      setof text

      Returns set of keys in the outermost JSON object.
      json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')

json_populate_record(base anyelement, from_json json)

jsonb_populate_record(base anyelement, from_json jsonb)

      anyelement

      Expands the object in from_json to a row whose columns
        match the record type defined by base (see note below).
      select * from json_populate_record(null::myrowtype, '{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "a b c"}}')

json_populate_recordset(base anyelement, from_json json)

jsonb_populate_recordset(base anyelement, from_json jsonb)

      setof anyelement

      Expands the outermost array of objects in from_json to
        a set of rows whose columns match the record type defined by base (see
        note below).
      select * from json_populate_recordset(null::myrowtype, '[{"a":1,"b":2},{"a":3,"b":4}]')

json_array_elements(json)

jsonb_array_elements(jsonb)

setof json

setof jsonb

      Expands a JSON array to a set of JSON values.
      select * from json_array_elements('[1,true, [2,false]]')

json_array_elements_text(json)

jsonb_array_elements_text(jsonb)

      setof text

      Expands a JSON array to a set of text values.
      select * from json_array_elements_text('["foo", "bar"]')

json_typeof(json)

jsonb_typeof(jsonb)

      text

      Returns the type of the outermost JSON value as a text string. Possible
        types are object, array, string, number, boolean,
        and null.
      json_typeof('-123.4')

      number

json_to_record(json)

jsonb_to_record(jsonb)

      record

      Builds an arbitrary record from a JSON object (see note below). As with
        all functions returning record, the caller must explicitly
        define the structure of the record with an AS clause.
      select * from json_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int, b text, c int[], d text, r myrowtype)

json_to_recordset(json)

jsonb_to_recordset(jsonb)

      setof record

      Builds an arbitrary set of records from a JSON array of objects (see note
        below). As with all functions returning record, the caller
        must explicitly define the structure of the record with an AS clause.
      select * from json_to_recordset('[{"a":1,"b":"foo"},{"a":"2","c":"bar"}]') as x(a int, b text);

json_strip_nulls(from_json json)

jsonb_strip_nulls(from_json jsonb)

json

jsonb

      Returns from_json with all object fields that have
        null values omitted. Other null values are untouched.
      json_strip_nulls('[{"f1":1,"f2":null},2,null,3]')

      [{"f1":1},2,null,3]

      jsonb_set(target jsonb, path text[], new_value jsonb [, create_missing boolean])

      jsonb

      Returns target with the section designated by path replaced
        by new_value, or with new_value added
        if create_missing is true (default is true)
        and the item designated by path does not exist. As
        with the path oriented operators, negative integers that appear in path count
        from the end of JSON arrays.

jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false)

jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]')

[{"f1":[2,3,4],"f2":null},2,null,3]

[{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2]

      jsonb_insert(target jsonb, path text[], new_value jsonb [, insert_after boolean])

      jsonb

      Returns target with new_value inserted.
        If target section designated by path is
        in a JSONB array, new_value will be inserted before
        target or after if insert_after is true (default is false).
        If target section designated by path is
        in JSONB object, new_value will be inserted only if target does
        not exist. As with the path oriented operators, negative integers that
        appear in path count from the end of JSON arrays.

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"')

jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"', true)

{"a": [0, "new_value", 1, 2]}

{"a": [0, 1, "new_value", 2]}

      jsonb_pretty(from_json jsonb)

      text

      Returns from_json as indented JSON text.
      jsonb_pretty('[{"f1":1,"f2":null},2,null,3]')

      jsonb_path_exists(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

      boolean

      Checks whether JSON path returns any item for the specified JSON value.
      jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

        true

      jsonb_path_match(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

      boolean

      Returns the result of JSON path predicate check for the specified JSON
        value. Only the first item of the result is taken into account. If the
        result is not Boolean, then null is returned.
      jsonb_path_match('{"a":[1,2,3,4,5]}', 'exists($.a[*] ? (@ >= $min && @ <= $max))', '{"min":2,"max":4}')

      true

      jsonb_path_query(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

      setof jsonb

      Gets all JSON items returned by JSON path for the specified JSON value.
      select * from jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}');

      jsonb_path_query_array(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

      jsonb

      Gets all JSON items returned by JSON path for the specified JSON value
        and wraps result into an array.
      jsonb_path_query_array('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

      [2, 3, 4]

      jsonb_path_query_first(target jsonb, path jsonpath [, vars jsonb [, silent bool]])

      jsonb

      Gets the first JSON item returned by JSON path for the specified JSON
        value. Returns NULL on no results.
      jsonb_path_query_first('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2,"max":4}')

      2

#### Note

Many of these functions and operators will convert Unicode escapes in JSON strings to the appropriate single character. This is a non-issue if the input is type `jsonb`, because the conversion was already done; but for `json` input, this may result in throwing an error, as noted in [Section 8.14](https://www.postgresql.org/docs/12/datatype-json.html).

#### Note

The functions `json[b]_populate_record`, `json[b]_populate_recordset`, `json[b]_to_record` and `json[b]_to_recordset` operate on a JSON object, or array of objects, and extract the values associated with keys whose names match column names of the output row type. Object fields that do not correspond to any output column name are ignored, and output columns that do not match any object field will be filled with nulls. To convert a JSON value to the SQL type of an output column, the following rules are applied in sequence:

* A JSON null value is converted to a SQL null in all cases.
* If the output column is of type `json` or `jsonb`, the JSON value is just reproduced exactly.
* If the output column is a composite \(row\) type, and the JSON value is a JSON object, the fields of the object are converted to columns of the output row type by recursive application of these rules.
* Likewise, if the output column is an array type and the JSON value is a JSON array, the elements of the JSON array are converted to elements of the output array by recursive application of these rules.
* Otherwise, if the JSON value is a string literal, the contents of the string are fed to the input conversion function for the column's data type.
* Otherwise, the ordinary text representation of the JSON value is fed to the input conversion function for the column's data type.

While the examples for these functions use constants, the typical use would be to reference a table in the `FROM` clause and use one of its `json` or `jsonb` columns as an argument to the function. Extracted key values can then be referenced in other parts of the query, like `WHERE` clauses and target lists. Extracting multiple values in this way can improve performance over extracting them separately with per-key operators.

#### Note

All the items of the `path` parameter of `jsonb_set` as well as `jsonb_insert` except the last item must be present in the `target`. If `create_missing` is false, all items of the `path` parameter of `jsonb_set` must be present. If these conditions are not met the `target` is returned unchanged.

If the last path item is an object key, it will be created if it is absent and given the new value. If the last path item is an array index, if it is positive the item to set is found by counting from the left, and if negative by counting from the right - `-1` designates the rightmost element, and so on. If the item is out of the range -array\_length .. array\_length -1, and create\_missing is true, the new value is added at the beginning of the array if the item is negative, and at the end of the array if it is positive.

#### Note

The `json_typeof` function's `null` return value should not be confused with a SQL NULL. While calling `json_typeof('null'::json)` will return `null`, calling `json_typeof(NULL::json)` will return a SQL NULL.

#### Note

If the argument to `json_strip_nulls` contains duplicate field names in any object, the result could be semantically somewhat different, depending on the order in which they occur. This is not an issue for `jsonb_strip_nulls` since `jsonb` values never have duplicate object field names.

#### Note

The `jsonb_path_exists`, `jsonb_path_match`, `jsonb_path_query`, `jsonb_path_query_array`, and `jsonb_path_query_first` functions have optional `vars` and `silent` arguments.

If the _`vars`_ argument is specified, it provides an object containing named variables to be substituted into a `jsonpath` expression.

If the _`silent`_ argument is specified and has the `true` value, these functions suppress the same errors as the `@?` and `@@` operators.

See also [Section 9.20](https://www.postgresql.org/docs/12/functions-aggregate.html) for the aggregate function `json_agg` which aggregates record values as JSON, and the aggregate function `json_object_agg` which aggregates pairs of values into a JSON object, and their `jsonb` equivalents, `jsonb_agg` and `jsonb_object_agg`.

## 9.15.2. The SQL/JSON Path Language

SQL/JSON path expressions specify the items to be retrieved from the JSON data, similar to XPath expressions used for SQL access to XML. In PostgreSQL, path expressions are implemented as the `jsonpath` data type and can use any elements described in [Section 8.14.6](https://www.postgresql.org/docs/12/datatype-json.html#DATATYPE-JSONPATH).

JSON query functions and operators pass the provided path expression to the _path engine_ for evaluation. If the expression matches the queried JSON data, the corresponding SQL/JSON item is returned. Path expressions are written in the SQL/JSON path language and can also include arithmetic expressions and functions. Query functions treat the provided expression as a text string, so it must be enclosed in single quotes.

A path expression consists of a sequence of elements allowed by the `jsonpath` data type. The path expression is evaluated from left to right, but you can use parentheses to change the order of operations. If the evaluation is successful, a sequence of SQL/JSON items \(_SQL/JSON sequence_\) is produced, and the evaluation result is returned to the JSON query function that completes the specified computation.

To refer to the JSON data to be queried \(the _context item_\), use the `$` sign in the path expression. It can be followed by one or more [accessor operators](https://www.postgresql.org/docs/12/datatype-json.html#TYPE-JSONPATH-ACCESSORS), which go down the JSON structure level by level to retrieve the content of context item. Each operator that follows deals with the result of the previous evaluation step.

For example, suppose you have some JSON data from a GPS tracker that you would like to parse, such as:

```text
{
  "track": {
    "segments": [
      {
        "location":   [ 47.763, 13.4034 ],
        "start time": "2018-10-14 10:05:14",
        "HR": 73
      },
      {
        "location":   [ 47.706, 13.2635 ],
        "start time": "2018-10-14 10:39:21",
        "HR": 135
      }
    ]
  }
}
```

To retrieve the available track segments, you need to use the `.`_`key`_ accessor operator for all the preceding JSON objects:

```text
'$.track.segments'
```

If the item to retrieve is an element of an array, you have to unnest this array using the `[*]` operator. For example, the following path will return location coordinates for all the available track segments:

```text
'$.track.segments[*].location'
```

To return the coordinates of the first segment only, you can specify the corresponding subscript in the `[]` accessor operator. Note that the SQL/JSON arrays are 0-relative:

```text
'$.track.segments[0].location'
```

The result of each path evaluation step can be processed by one or more `jsonpath` operators and methods listed in [Section 9.15.2.3](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-PATH-OPERATORS). Each method name must be preceded by a dot. For example, you can get an array size:

```text
'$.track.segments.size()'
```

For more examples of using `jsonpath` operators and methods within path expressions, see [Section 9.15.2.3](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-PATH-OPERATORS).

When defining the path, you can also use one or more _filter expressions_ that work similar to the `WHERE` clause in SQL. A filter expression begins with a question mark and provides a condition in parentheses:

```text
? (condition)
```

Filter expressions must be specified right after the path evaluation step to which they are applied. The result of this step is filtered to include only those items that satisfy the provided condition. SQL/JSON defines three-valued logic, so the condition can be `true`, `false`, or `unknown`. The `unknown` value plays the same role as SQL `NULL` and can be tested for with the `is unknown` predicate. Further path evaluation steps use only those items for which filter expressions return `true`.

Functions and operators that can be used in filter expressions are listed in [Table 9.49](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-FILTER-EX-TABLE). The path evaluation result to be filtered is denoted by the `@` variable. To refer to a JSON element stored at a lower nesting level, add one or more accessor operators after `@`.

Suppose you would like to retrieve all heart rate values higher than 130. You can achieve this using the following expression:

```text
'$.track.segments[*].HR ? (@ > 130)'
```

To get the start time of segments with such values instead, you have to filter out irrelevant segments before returning the start time, so the filter expression is applied to the previous step, and the path used in the condition is different:

```text
'$.track.segments[*] ? (@.HR > 130)."start time"'
```

You can use several filter expressions on the same nesting level, if required. For example, the following expression selects all segments that contain locations with relevant coordinates and high heart rate values:

```text
'$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR > 130)."start time"'
```

Using filter expressions at different nesting levels is also allowed. The following example first filters all segments by location, and then returns high heart rate values for these segments, if available:

```text
'$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@ > 130)'
```

You can also nest filter expressions within each other:

```text
'$.track ? (exists(@.segments[*] ? (@.HR > 130))).segments.size()'
```

This expression returns the size of the track if it contains any segments with high heart rate values, or an empty sequence otherwise.

PostgreSQL's implementation of SQL/JSON path language has the following deviations from the SQL/JSON standard:

* `.datetime()` item method is not implemented yet mainly because immutable `jsonpath` functions and operators cannot reference session timezone, which is used in some datetime operations. Datetime support will be added to `jsonpath` in future versions of PostgreSQL.
* A path expression can be a Boolean predicate, although the SQL/JSON standard allows predicates only in filters. This is necessary for implementation of the `@@` operator. For example, the following `jsonpath` expression is valid in PostgreSQL:

  ```text
  '$.track.segments[*].HR < 70'
  ```

* There are minor differences in the interpretation of regular expression patterns used in `like_regex` filters, as described in [Section 9.15.2.2](https://www.postgresql.org/docs/12/functions-json.html#JSONPATH-REGULAR-EXPRESSIONS).

### **9.15.2.1. Strict And Lax Modes**

When you query JSON data, the path expression may not match the actual JSON data structure. An attempt to access a non-existent member of an object or element of an array results in a structural error. SQL/JSON path expressions have two modes of handling structural errors:

* lax \(default\) — the path engine implicitly adapts the queried data to the specified path. Any remaining structural errors are suppressed and converted to empty SQL/JSON sequences.
* strict — if a structural error occurs, an error is raised.

The lax mode facilitates matching of a JSON document structure and path expression if the JSON data does not conform to the expected schema. If an operand does not match the requirements of a particular operation, it can be automatically wrapped as an SQL/JSON array or unwrapped by converting its elements into an SQL/JSON sequence before performing this operation. Besides, comparison operators automatically unwrap their operands in the lax mode, so you can compare SQL/JSON arrays out-of-the-box. An array of size 1 is considered equal to its sole element. Automatic unwrapping is not performed only when:

* The path expression contains `type()` or `size()` methods that return the type and the number of elements in the array, respectively.
* The queried JSON data contain nested arrays. In this case, only the outermost array is unwrapped, while all the inner arrays remain unchanged. Thus, implicit unwrapping can only go one level down within each path evaluation step.

For example, when querying the GPS data listed above, you can abstract from the fact that it stores an array of segments when using the lax mode:

```text
'lax $.track.segments.location'
```

In the strict mode, the specified path must exactly match the structure of the queried JSON document to return an SQL/JSON item, so using this path expression will cause an error. To get the same result as in the lax mode, you have to explicitly unwrap the `segments` array:

```text
'strict $.track.segments[*].location'
```

### **9.15.2.2. Regular Expressions**

SQL/JSON path expressions allow matching text to a regular expression with the `like_regex` filter. For example, the following SQL/JSON path query would case-insensitively match all strings in an array that start with an English vowel:

```text
'$[*] ? (@ like_regex "^[aeiou]" flag "i")'
```

The optional `flag` string may include one or more of the characters `i` for case-insensitive match, `m` to allow `^` and `$` to match at newlines, `s` to allow `.` to match a newline, and `q` to quote the whole pattern \(reducing the behavior to a simple substring match\).

The SQL/JSON standard borrows its definition for regular expressions from the `LIKE_REGEX` operator, which in turn uses the XQuery standard. PostgreSQL does not currently support the `LIKE_REGEX` operator. Therefore, the `like_regex` filter is implemented using the POSIX regular expression engine described in [Section 9.7.3](https://www.postgresql.org/docs/12/functions-matching.html#FUNCTIONS-POSIX-REGEXP). This leads to various minor discrepancies from standard SQL/JSON behavior, which are cataloged in [Section 9.7.3.8](https://www.postgresql.org/docs/12/functions-matching.html#POSIX-VS-XQUERY). Note, however, that the flag-letter incompatibilities described there do not apply to SQL/JSON, as it translates the XQuery flag letters to match what the POSIX engine expects.

Keep in mind that the pattern argument of `like_regex` is a JSON path string literal, written according to the rules given in [Section 8.14.6](https://www.postgresql.org/docs/12/datatype-json.html#DATATYPE-JSONPATH). This means in particular that any backslashes you want to use in the regular expression must be doubled. For example, to match strings that contain only digits:

```text
'$ ? (@ like_regex "^\\d+$")'
```

### **9.15.2.3. SQL/JSON Path Operators And Methods**

[Table 9.48](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-OP-TABLE) shows the operators and methods available in `jsonpath`. [Table 9.49](https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-FILTER-EX-TABLE) shows the available filter expression elements.

#### **Table 9.48. `jsonpath` Operators and Methods**

| Operator/Method | Description | Example JSON | Example Query | Result |
| :--- | :--- | :--- | :--- | :--- |
| `+` \(unary\) | Plus operator that iterates over the SQL/JSON sequence | `{"x": [2.85, -14.7, -9.4]}` | `+ $.x.floor()` | `2, -15, -10` |
| `-` \(unary\) | Minus operator that iterates over the SQL/JSON sequence | `{"x": [2.85, -14.7, -9.4]}` | `- $.x.floor()` | `-2, 15, 10` |
| `+` \(binary\) | Addition | `[2]` | `2 + $[0]` | `4` |
| `-` \(binary\) | Subtraction | `[2]` | `4 - $[0]` | `2` |
| `*` | Multiplication | `[4]` | `2 * $[0]` | `8` |
| `/` | Division | `[8]` | `$[0] / 2` | `4` |
| `%` | Modulus | `[32]` | `$[0] % 10` | `2` |
| `type()` | Type of the SQL/JSON item | `[1, "2", {}]` | `$[*].type()` | `"number", "string", "object"` |
| `size()` | Size of the SQL/JSON item | `{"m": [11, 15]}` | `$.m.size()` | `2` |
| `double()` | Approximate floating-point number converted from an SQL/JSON number or a string | `{"len": "1.9"}` | `$.len.double() * 2` | `3.8` |
| `ceiling()` | Nearest integer greater than or equal to the SQL/JSON number | `{"h": 1.3}` | `$.h.ceiling()` | `2` |
| `floor()` | Nearest integer less than or equal to the SQL/JSON number | `{"h": 1.3}` | `$.h.floor()` | `1` |
| `abs()` | Absolute value of the SQL/JSON number | `{"z": -0.3}` | `$.z.abs()` | `0.3` |
| `keyvalue()` | Sequence of object's key-value pairs represented as array of items containing three fields \(`"key"`, `"value"`, and `"id"`\). `"id"` is a unique identifier of the object key-value pair belongs to. | `{"x": "20", "y": 32}` | `$.keyvalue()` | `{"key": "x", "value": "20", "id": 0}, {"key": "y", "value": 32, "id": 0}` |

#### **Table 9.49. `jsonpath` Filter Expression Elements**

| Value/Predicate | Description | Example JSON | Example Query | Result |  |  |  |  |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| `==` | Equality operator | `[1, 2, 1, 3]` | `$[*] ? (@ == 1)` | `1, 1` |  |  |  |  |
| `!=` | Non-equality operator | `[1, 2, 1, 3]` | `$[*] ? (@ != 1)` | `2, 3` |  |  |  |  |
| `<>` | Non-equality operator \(same as `!=`\) | `[1, 2, 1, 3]` | `$[*] ? (@ <> 1)` | `2, 3` |  |  |  |  |
| `<` | Less-than operator | `[1, 2, 3]` | `$[*] ? (@ < 2)` | `1` |  |  |  |  |
| `<=` | Less-than-or-equal-to operator | `[1, 2, 3]` | `$[*] ? (@ <= 2)` | `1, 2` |  |  |  |  |
| `>` | Greater-than operator | `[1, 2, 3]` | `$[*] ? (@ > 2)` | `3` |  |  |  |  |
| `>=` | Greater-than-or-equal-to operator | `[1, 2, 3]` | `$[*] ? (@ >= 2)` | `2, 3` |  |  |  |  |
| `true` | Value used to perform comparison with JSON `true` literal | `[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]` | `$[*] ? (@.parent == true)` | `{"name": "Chris", "parent": true}` |  |  |  |  |
| `false` | Value used to perform comparison with JSON `false` literal | `[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]` | `$[*] ? (@.parent == false)` | `{"name": "John", "parent": false}` |  |  |  |  |
| `null` | Value used to perform comparison with JSON `null` value | `[{"name": "Mary", "job": null}, {"name": "Michael", "job": "driver"}]` | `$[*] ? (@.job == null) .name` | `"Mary"` |  |  |  |  |
| `&&` | Boolean AND | `[1, 3, 7]` | `$[*] ? (@ > 1 && @ < 5)` | `3` |  |  |  |  |
| \` |  | \` | Boolean OR | `[1, 3, 7]` | \`$\[\*\] ? \(@ < 1 |  | @ > 5\)\` | `7` |
| `!` | Boolean NOT | `[1, 3, 7]` | `$[*] ? (!(@ < 5))` | `7` |  |  |  |  |
| `like_regex` | Tests whether the first operand matches the regular expression given by the second operand, optionally with modifications described by a string of `flag` characters \(see [Section 9.15.2.2](https://www.postgresql.org/docs/12/functions-json.html#JSONPATH-REGULAR-EXPRESSIONS)\) | `["abc", "abd", "aBdC", "abdacb", "babc"]` | `$[*] ? (@ like_regex "^ab.*c" flag "i")` | `"abc", "aBdC", "abdacb"` |  |  |  |  |
| `starts with` | Tests whether the second operand is an initial substring of the first operand | `["John Smith", "Mary Stone", "Bob Johnson"]` | `$[*] ? (@ starts with "John")` | `"John Smith"` |  |  |  |  |
| `exists` | Tests whether a path expression matches at least one SQL/JSON item | `{"x": [1, 2], "y": [2, 4]}` | `strict $.* ? (exists (@ ? (@[*] > 2)))` | `2, 4` |  |  |  |  |
| `is unknown` | Tests whether a Boolean condition is `unknown` | `[-1, 2, 7, "infinity"]` | `$[*] ? ((@ > 0) is unknown)` | `"infinity"` |  |  |  |  |

redpajama_set_name: RedPajamaGithub


text:
First Xero Small Business Insights report for Canada reveals inflation impact on small businesses
Real sales for Canadian small businesses fell by 1.7% year-over-year amid challenging economic climate
Toronto — August 24, 2022 — Xero, the global small business platform, today launched its Xero Small Business Insights for Canada and the United States, which provides critical insights into what is happening in this important sector of the economy, and highlights the impact inflation is having on Canadian small businesses.
Each quarter, Xero will provide small business performance data for Canada and the US, covering sales, time to be paid, and late payments across tens of thousands of its small business customers. The launch special report, Small business snapshot: United States and Canada, shares insights into the performance of small businesses in Canada through a shifting economy, from 2017, through the pandemic and recovery, to the current inflationary climate.
Growth has slowed, with inflation skewing sales
The report, produced in partnership with Accenture and based on aggregated and anonymized data from tens and thousands of small business customers across Canada and the US, reveals important insights into how the Canadian economic climate is affecting small businesses:
Canadian small business sales growth has slowed through early 2022. In March 2022, small business sales growth was 5.0 percent year-over-year (y/y), a notable slowdown from pre-pandemic average growth of 9.0 percent y/y, and slower than the 13.4 percent y/y rise recorded in February 2022. This measure is a nominal measure of sales - including both price and volume changes.
And real sales have fallen: As inflation rose 6.7 percent y/y in March 2022, this means real sales growth, which excludes price effects, actually fell 1.7 percent y/y (down from a 7.7 percent rise in February). That is, the rise in sales growth in March 2022 was due to higher prices, rather than an increase in the amount of goods and services sold.
"With our Xero Small Business Insights, our goal is to not only advocate for small businesses, but also empower them and our policy makers with data that informs the right decisions for our shared futures," said Chris O'Neill, Chief Growth Officer, Xero. "We've seen from other regions how these insights have truly supported small businesses - and even helped to shape concrete action - and we're thrilled to bring these insights to the Canadian market.
"Small and medium businesses are the heart of Canada's economy but it's been an incredibly tough few years. Sales growth collapsed in May 2020 when the pandemic hit, down 23 percent year-over-year, and then took eight months to get back to consistent positive sales growth.
"As borrowing costs rise, expenses increase, and customer dollars decline in purchasing power, it is more important than ever that small businesses understand exactly what is happening to their costs and profit margins at all times to navigate this tricky period."
Payment times signal trend towards increased stability
The report also revealed that payment times and late payment delays have improved for small businesses in Canada. An improvement in these metrics means small businesses experienced decreased cash flow pressures.
Small businesses waited an average of 27.5 days for invoices to be paid in March 2022, which was slightly quicker than the 2021 average of 28.1 days.
Payments were an average of 6.6 days late in March 2022 - just below the 2021 average of 6.7 days.
"It's heartening that Canadian small businesses haven't suffered major increases in payment times or delays, due in part to the rapid pandemic-driven uptake of online payments as well as substantial government stimulus packages that added much-needed liquidity into the market," said O'Neill.
"However, small business owners should note that as inflation continues to rise over the remainder of the year they need to stay on top of their accounts to ensure they are maintaining cash flow and profitability."
Amit Singh, Managing Director, Accenture, said: "Small businesses and medium sized businesses are the heartbeat of the Canadian economy – making up almost 99.8 percent of employing businesses. Understanding and tracking the performance of small businesses, particularly during times of economic uncertainty, is absolutely crucial for effective economic management and public policy. The Xero Small Business Insights program provides timely insights about the health of small businesses. The metrics in this report have proven the resilience of small businesses in times of challenge – lockdowns, social distancing mandates and now unprecedented growth in inflation."
The launch of Xero Small Business Insights for the US and Canada was announced at Xerocon New Orleans, one of the world's premier events for cloud accounting leaders. Accounting and bookkeeping partners and the Xero app partner community are gathered over two days to hear the latest from industry leaders and gain expert insight into the newest Xero tools and features to help save time, grow their business and have a greater impact on their clients' success. Xero also produces regular Xero Small Business Insights for Australia, the United Kingdom and New Zealand. Visit xero.com/xerosbi for more information.
Xero Communications | Kelly Kerr | americaspress@xero.com
The Small business snapshot: United States and Canada report is based on aggregated and anonymized data from tens of thousands of small business customers across Canada and the US. This represents actual data and is not a survey. The report, including the insights and analysis contained within it, was prepared by Accenture with the support of Xero, using Xero Small Business Insights data, publicly available data and Accenture estimates for the purpose of informing and developing policies to support small businesses.
For several years, Xero, in partnership with Accenture, has been providing small business performance reports in Australia, New Zealand and the United Kingdom, based on the aggregated and anonymized data of its customers, in Australia, New Zealand and the United Kingdom. Now, it is expanding Xero Small Business Insights to Canada and the United States for the first time.
Xero Small Business Insights will be released quarterly in Canada and the United States to help increase understanding about the performance of the small business economy. The data and a summary report will be available to download for free each quarter at www.xero.com/xerosbi.
Or compare plans from $15.50 per month
The current region is New ZealandRegion:
New Zealand (NZD)


We specialize in sourcing parts like T495C685M016AS for hard-to-find, long lead time, obsolete electronic components and ICs for customers everyday. We are professional T495C685M016AS supplier and T495C685M016AS distributor with good credit standing in china. Please Email Us to get T495C685M016AS price and other information. Buy electronic parts T495C685M016AS from Rantle East Electronic - Your Source for Quality Electronic Components in China.


We are offering Salesforce Development and Admin Training. By real time faculty on real time projects."Offline Demo Classes" on 1st september 2018.Timings:10:00AM to 11:00AM.
#202,Ratanmoti Bhavan,HIG-421,JNTU Road,Opp Manjeera Trinity Co-orperate lane, Adjacent to Nandini Restaurant,KPHB,Hyderabad-500085.mobile +91-9666991766.
Related Ads found for "Salesforce Admin And Developer "


This is definitely the Rock 'n' Soul tour of this summer! The Tedeschi Trucks Band and Sharon Jones & the Dap-Kings started this summer tour on June 5 in Paso Robles, CA and rolled into Ravinia Festival this past Sunday. Doyle Bramhall II will be the opening act on most dates of this 20 date tour and appeared at this stop on the tour. The show ended with all bands (over twenty musicians on stage) playing a couple jamming encores.
Doyle Bramhall II is the son of Doyle Bramhall I, who was the drummer for the blues legend Lightning Hopkins. Doyle Senior was also a regular collaborator with Stevie Ray and Jimmie Vaughan. Doyle II toured with Jimmy Vaughan's band, The Fabulous Thunderbirds as the band's second guitarist when he was eighteen. He co-founded the rock band Arc Angels with Charlie Sexton using Double Trouble (Stevie Ray Vaughan's band) as the rhythm section. Eric Clapton has stated that Doyle is one of the most gifted players that he has encountered.
Doyle started his show at 6:28 and played for about a half hour. I wish that he was given more time for his set as I wanted to hear more from this gifted guitarist. The highlights of his show were "So You Want It to Rain" and a Muddy Waters cover "She's All Right". I am definitely going to see him again when he comes to town.
This was the first time that I saw Sharon and the Dap-Kings and I was amazed. I was blown away by Sharon's soulful energetic performance even before learning that she was a cancer survivor. Her career came to a complete halt in 2013 when she learned that she had pancreatic cancer, which often has a poor prognosis. Sharon underwent surgery and chemotherapy and is now cancer free and in good health.
The Dap-Kings started their set with an instrumental song and were introduced by the guitarist, Binky Griptite. After that, the backup singers (The Dapettes) Saun and Starr sang two song from their new album, Look Closer. Then Sharon came out and started her set with "If You Call". Each song got better as she gave it her all for each song she sang. Sharon gave powerful renditions of "Heard It Through the Grapevine" (Marvin Gaye) and "In Every Beat of My Heart" (Gladys Knight). Sharon got the crowd dancing with her 60s dance song medley. She even invited a fan up on the stage to dance with her on the song "He Said I Can". Sharon ended her set with " Get Up and Get Out" performing the song like Tina Turner. It was a great ending for her set.
Blues Grammy Award winning band, Tedeschi Trucks Band (TTB) took the stage at 9 pm at Ravinia for a set of rock, blues and soul songs. The crowd really started getting into show with their Beatles cover of "I've Got a Feeling". Kofi Burbridge shined on the flute for "Idle Wind" jamming with Derek on the guitar. The crowd started dancing to 'Keep on Growing" a cover of a Derek and the Dominos tune. Mike Mattison took the vocal leads on "Get What You Deserve". Susan was jamming like many of the blues legends that she has previously shared the stage on the Bobby Blue Bland cover "I Pity the Fool". Derek and Susan tore it up on the guitar for the final song in the TTB set "Bound for Glory".
The encores were a great ending to a great day of music at Ravinia. All of the bands shared the stage and played "Tell Mama" and "Sing a Simple Song / I Want to Take You Higher".


text:
Graphic shows match previews with fixtures, comparison of team statistics, and previous head-to-head records.
GN41894EN
UEFA Champions League Day 3, Tuesday Oct 19
By Chris Dinsdale
October 19, 2021 - UEFA Champions League Matchday 3, Tuesday fixtures. Europe's new UEFA Champions League season continues, with key fixtures including Atletico Madrid hosting Liverpool, Real Madrid travelling for a tricky contest with Shakhtar Donetsk, and Paris Saint-Germain taking on Leipzig. The final will be played at the Krestovsky Stadium, Saint Petersburg, on May 28, 2022.
UEFA Champions League reaches knock-out stages
Reds and Ajax qualify with perfect records
UEFA Champions League Day 6, Tuesday Dec 7
UEFA Champions League Day 6, Wednesday Dec 8
UEFA Champions League Group standings, A-D
UEFA Champions League Group standings, E-H
UEFA Champions League Day 5, Wednesday Nov 24
UEFA Champions League Day 5, Tuesday Nov 23
UEFA Champions League Day 4, Wednesday Nov 3
UEFA Champions League Day 4, Tuesday Nov 2
UEFA Champions League Day 3, Wednesday Oct 20
Ronaldo makes 178th appearance in Champions League
UEFA Champions League Day 2, Tuesday Sep 28
UEFA Champions League Day 2, Wednesday Sep 29
UEFA Champions League fixture widget
Interactive Champions League guide 2021-22 with live results
UEFA Champions League 2021-22 team guide with live data
UEFA Champions League returns to radically evolved landscape
UEFA Champions League team guide 2021-22
UEFA Champions League kits 2021-22
UEFA Champions League live fixtures 2021-22
UEFA Champions League 2021-22 crests
UEFA Champions League 2021-22 Group Stage Draw
UEFA Champions League 2021-22 play-off draw
Group A: Manchester City, Paris St-Germain, RB Leipzig, Club Brugge
Group B: Atlético Madrid, Liverpool, FC Porto, AC Milan
Group C: Sporting, Borussia Dortmund, Ajax, Besiktas JK
Group D: Internazionale, Real Madrid, Shakhtar Donetsk, Sheriff Tiraspol
The 2021-22 UEFA Champions League is the 30th season of Europe's primary club football tournament.
Chelsea are defending champions having defeated English Premier League rivals Manchester City in the 2021 final.
Real Madrid are the most successful club in European Cup history, with 13 titles, ahead of AC Milan (7), Bayern Munich (6) and Liverpool (6).
The UEFA Champions League is contested by the highest ranked teams of the strongest UEFA national associations. It is the top club competition in European football and one of the most prestigious tournaments in the world. The Champions League final is the most watched annual sporting event worldwide.
UEFA Champions League (official)


Room to Breathe DVD is available for home and community screenings.
Host a small screening in your home to help inspire meaningful discussion and action among parents, neighbors and friends (up to 25 people).
Engage your community with a screening at a local school, community center or other setting, with permission to charge admission or request donations (up to 50 people).
Engage your community with a screening at a local school, community center or other setting, with permission to charge admission or request donations (more than 50 people).
If you have other ideas or wish to hold multiple screenings, please inquire with us -- roomtobreathefilm[at]gmail[dot]com.


Someone asked about using "enough" in front of a comparative adjective e.g. "he felt enough better to go back to work." A lively discussion ensued between the BrE and AmE contingents about whether a) enough can ever be used with a comparative and b) if it can, whether it ever appears in front of the adjective. Once it became clear that BrE speakers do not use such constructions at all, a heated discussion followed among AmE speakers about whether such constructions are a perfectly normal, even sophisticated, part of standard (is there such a thing?) AmE or instead represent colloquialisms confined to some geographic region or social niche. The Corpus of Contemporary American English has a small number of hits, mostly in fiction, which seems to support some level of use, albeit limited.
Which of the following, if any, sound correct to AmE speakers in a written, but not necessarily formal, context?
A. Art felt enough better to go back to work.
B. Bart felt better enough to go back to work.
C. Curt felt sufficiently better to go back to work.
D. Dirk felt sufficiently well to go back to work.
E. Erik felt well enough to go back to work.
F. Fred felt improved enough to go back to work.
G. Or some other way to express the idea?
BTW, I looked at prior questions in this forum. One, which I'd hoped would provide some insight, used the term "enough better" as part of a larger example but didn't ask for or receive any comments on that particular point: Q: How much not better than average is enough?
Another, Too X, X enough, enough X didn't address the use of enough in front of a comparative.
I'm Canadian, so I'm pretty familiar with both American and British English. To my ear, none of the enough X constructions sound right. Your A. example sounds flat out wrong.
Example B. sounds just fine.
Examples C. and D. are little stilted, but not necessarily wrong.
Examples E. and F. also sound fine, although I would say E. is conventional and F. is less so.
I'm not sure what conclusions you might draw from this. It seems to me in English it's all fine and well to say there are rules and exceptions to rules, but in the end it seems to come down very often to what just sounds right to a native English speaker.
Well, you appear to be asking simply for opinions without any need to defend those opinions, so I'll add my own: I distinctly prefer E ("he felt well enough") above all the other options, although I might add "sufficiently improved" to the list. I have no particular rules or precedents to offer in defense of either of these opinions, however.
In your context of physical health, the correct English is "he felt well enough".
When someone is recovering from illness we do say they are "feeling better", but when we need to compare it we say "well enough".
Option "e" provides a simple and conventional method of stating the aforementioned.
Not the answer you're looking for? Browse other questions tagged american-english british-english phrase-usage adverb-position or ask your own question.
How much not better than average is enough?
which usage is better: upon or with?


text:
Q: Inserting data into a table with new and old data from another two tables I have a table name Queue_info with structure as
Queue_Id number(10)
Movie_Id number(10)
User_Id Varchar2(20)
Status Varchar2(20)
Reserved_date date

I have two other tables named Movie_info having a many columns including movie_Id and User_info having many columns including User_Id.
In the first table movie_id, user_id is foreign key from movie_info(movie_id) and user_info(User_id).
My problem is that if I insert any value either in the Movie_info or User_info, the Queue_info table should be updated as new entry for every user or for every movie
For example
If insertion in Movie_info as new movie then queue_info should be updated as for every user the status of that new movie is awaiting.

A: use from triggers. by using triggers you can update all related tables to your table. for example if 1 row inserted in to table 1, 1 row insert in to table 2 too.

A: Some notes first:

*

*I really like that you have a standardized way to name tables and fields. I would use Queue instead of Queue_info, Movie instead of Movie_info, etc..., as all tables have information - don't they? - and we all know that. I'd also choose MovieId instead of Movie_Id, ReservedDate instead of Resedrved_date but that's a matter of personal taste (allergy to underscores).
What I wanted to stress is that choosing one way for naming and keeping it is very good.

*What I don't like is that while your structure seems normalized, you use Varchar type for the User_id Key. Primary (and Foreign) Keys are best if they are small in size and with constant size. This mainly helps in keeping index sizes small (so more efficient) and secondly because the keys are the only values stored repeatedly in the db (so it helps keeping db size small).

Now, to your question, do you really need this? I mean, you may end up having in your database thousands of movies and users. Do you want to add a thousand rows in the Queue table whenever a new movie is inserted? Or another thousand rows when a new user is registered? Or 50 thousand rows when a new list with 50 new movies arrives (and is inserted in the db)?
With 10K movies and 2K users, you'll have a 20M rows table. There is no problem with a table of that size, and one or more triggers will serve your need. What happens if you have 100K movies and 50K users though? A 5G rows table. You can deal with that too, but perhaps you can just keep in that table only the movies that a user is interested in (or has borrowed or has seen, whatever the purpose of the db is). And if you want to have a list of movies that a certain user has not yet been interested in, check for those Movie_Id that do not exist in the table. with something like this:
SELECT
    Movie_Id, Movie_Title
FROM
    Movie_info AS m
WHERE
    NOT EXISTS
      ( SELECT *
        FROM Queue_info AS q
        WHERE q.Movie_Id = m.Movie_Id
          AND q.User_Id = @UserId
      )

redpajama_set_name: RedPajamaStackExchange


text:
Аргентинский топоним:
 Мальвинас-Архентинас (Альмиранте-Браун) — населённый пункт в муниципалитете Альмиранте-Браун провинции Буэнос-Айрес.
 Мальвинас-Архентинас (Кордова) — город и муниципалитет в департаменте Колон провинции Кордова.

См. также
 Мальвинас Архентинас — футбольный стадион, расположенный в столице провинции Мендоса.

redpajama_set_name: RedPajamaWikipedia


FIFA 15 News - FIFA 15 explains changes to thwart scammers and coin sellers in Ultimate Team. Still more are coming to the game's "Transfer Market," where soccer players are traded for the game's virtual currency. More news about FIFA 15 on Runeme.com.