text:
Cypress Hills Park to begin prescribed burns in next one to five years
Posted on August 16, 2016 by Tim Kalinowski
The Sawback area in Banff National Park undergoes prescribed burns in 2014. Peter Swain, South Region Director for Alberta Parks, says his ministry has plans to do the same in the Cypress Hills now that Fire Smart work around the Elkwater townsite is complete. PARKS CANADA PHOTO
Peter Swain, South Region Director for Alberta Parks, acknowledges more needs to be done to offset fire risks in Cypress Hills Interprovincial Park from a broader ecological perspective, and the park intends to do this through use of intensive grazing and prescribed burning.
"This year we will create a prescribed burn plan," confirms Swain, "and then it will take one to five years depending on what the burning windows look like. I can't guarantee you we are going to burn stuff next spring. I can't because it might be really hot and dry next spring, and it's a terrible time to burn…. I will say in the next one to five years you are going to see prescribed burns in the Cypress Hills… Since 2009 we have done a ton of stuff leading us to this point where we are now."
Swain says park staff has not held concrete discussions with local grazing associations as yet to enlist their aid in helping mitigate the Park's fire risks through grazing, but says it is a priority now that extensive Fire Smarting has been completed around Elkwater townsite and most of the park's campgrounds.
"They have seen the (Forest and Fire Management, Cypress Hills Interprovincial Park 2009) report, but we have never officially asked: Can you start grazing this way? It sounds like they are at point where they are interested in doing this. And that is great because we are going to need their help to do it. They are going to be the ones doing it… What is clearly laid out in the Integrated Forest Fire Management Strategy (IFFMS) is working with the ranchers so they can ranch their cattle with a little more focus so we create corridors of high grazing and therefore low fire risk, alongside roadsides for example, where you might have a higher chance of getting a burn started."
The report also suggested strategic logging of stands vulnerable to fire within the park, but admits the logging would likely not be commercially viable without direct government subsidization. Swain says he doesn't see an extensive logging strategy as feasible option at this time as no lumber companies have expressed any interest in either doing the work or buying the wood if the work is completed by park staff.
"We would do that (logging) if it made sense," says Swain. "Fifty years ago it would have made sense. We know that logging companies are not interested in our wood. We know there really isn't a market out there for it; although it does cost us a lot of money to pick up the trees and move them. Certainly if somebody were interested in doing that, and they think they could actually make money at it, I would be interested to see that… When we cut our trees down and created our fire breaks, the wood was a surprisingly good quality and good size, but the best offer we got from a sawmill was we'll come out and pick it up for free."
Swain says Cypress Hills Park is right on schedule in fulfilling most of the recommendations laid out in the (IFFMS). Things just had to be done in a certain sequence, says Swain.
"We're right on track for implementing everything that is in there," he confirms. "We are actually quite proud of what we have done in terms of public confidence there. We have spent a little over two million dollars on Fire Smarting and fire breaks. There is a half million dollars alone we have spent on community wildfire sprinklers in Elkwater. We are at the point now where we have all of our infrastructure in terms of Fire Smarting in place.
"In the event of a cataclysmic fire, it is really about saving lives and infrastructure. We still have a few smaller campsites further out that haven't been Fire Smarted, otherwise we have reached all the goals laid out in the (Forest and Fire Management report) except for the prescribed burning. We had to finish up all the right fire breaks before we could do that. We are now at the point where we can start considering prescribed burns. We're at that stage now, and that is exactly on target for what the Integrated Forest Fire Management Strategy said."
Swain feels there is an unprecedented opportunity for Cypress Hills Park over the next five years to address some of the broader ecological problems posed by the aging forest in the park. He is excited many in the area have expressed a serious interest in seeing that work done.
"Forest fire risk is about protecting people first, then infrastructure and the environment. So we have put our priorities where they should be to date," says Swain. "I guess right now, given the level of discourse for wildfire and awareness of wildfire in the broader community, in the past prescribed burning has always had a lot of perception issues because people did not want to see burned trees or the smoke, but I think now with the heightened level of awareness in the community at large, people are going to be much more understanding of seeing prescribed burning and accepting of it. And that's going to be half of the battle."
"I am really excited that here in the next five years, we're going to have an opportunity to make real difference in the health of the Cypress Hills both from an ecological perspective and a safety perspective."
In response to some of the criticisms laid at the Park's feet by members of the local grazing associations, Swain says the Cypress Hills ranching community has an important role to play in all of this, perhaps even more crucial than prescribed burning, in the near future.
"The ranching community has a real role to play in creating fire breaks and areas of decreased fire risk along critical corridors, and that is what we are going to be asking them to do through annual grazing permit that comes out," explains Swain. "That will be part of their grazing permit starting next year. We will be asking them to help reduce these areas of fire risk as part of their overall grazing strategy."


Stunning Elizabethan family home with fabulous gardens, shops and food.
lease use the calendar below to view what's on and select the date of your visit. Hover the mouse over a date to see times and sold out events.
For many, the Gardens at Doddington are just as spectacular as the Hall itself. Remaining faithful to the original Elizabethan layout, mellow walls provide the framework for the formal East Front and West Gardens. Beyond the West Gardens begin the lovingly restored Wild Gardens. Over the generations, most recently by Antony and Victoria Jarvis and Claire and James Birch, the gardens at Doddington have been restored, cared for, nurtured and developed to their fullest potential.
A free spring spotters' trail will be available for children to explore the gardens during the Easter holidays.
Doddington season ticket holders, Historic Houses members and RHS members benefit from free entry to the Gardens during normal opening times. Please show your card on arrival at the Gatehouse.
Find out about our Doddington season tickets on our online shop, offering fantastic value and valid for use during normal opening times and Christmas opening for a whole year from date of purchase.
To round off your day why not stop by our Cafe, before exploring our Farm Shop, Country Clothing store, Home store, Giant Bike Shop and award-winning Restaurant.
Tickets only valid on selected day, tickets are not timed, you can visit during 11-4.30pm (last entry 3.30pm). Please note that tickets are non refundable and non transferable.


text:
Care in the time of coronavirus: Ethical considerations in head and neck oncology
Eli A. Gordin, Andrew Day, Lenka Stankova, Elizabeth Heitman, John Sadler
As COVID-19 continues to challenge the practice of head and neck oncology, clinicians are forced to make new decisions in the setting of the pandemic that impact the safety of their patients, their institutions, and themselves. The difficulty inherent in these decisions is compounded by potentially serious ramifications to the welfare of patients and health-care staff, amid a scarcity of data on which to base informed choices. This paper explores the risks of COVID-19 incurred while striving to uphold the standard of care in head and neck oncology. The ethical problems are assessed from the perspective of the patient with cancer, health-care provider, and other patients within the health-care system. While no single management algorithm for head and neck cancer can be universally implemented, a detailed examination of these issues is necessary to formulate ethically sound treatment strategies.
https://doi.org/10.1002/hed.26272
10.1002/hed.26272
Dive into the research topics of 'Care in the time of coronavirus: Ethical considerations in head and neck oncology'. Together they form a unique fingerprint.
Coronavirus Medicine & Life Sciences 100%
Neck Medicine & Life Sciences 60%
Head Medicine & Life Sciences 57%
Pandemics Medicine & Life Sciences 42%
Head and Neck Neoplasms Medicine & Life Sciences 39%
Patient Safety Medicine & Life Sciences 39%
Standard of Care Medicine & Life Sciences 38%
Gordin, E. A., Day, A., Stankova, L., Heitman, E., & Sadler, J. (2020). Care in the time of coronavirus: Ethical considerations in head and neck oncology. Head and Neck, 42(7), 1519-1525. https://doi.org/10.1002/hed.26272
Care in the time of coronavirus : Ethical considerations in head and neck oncology. / Gordin, Eli A.; Day, Andrew; Stankova, Lenka; Heitman, Elizabeth; Sadler, John.
In: Head and Neck, Vol. 42, No. 7, 01.07.2020, p. 1519-1525.
Gordin, EA, Day, A, Stankova, L, Heitman, E & Sadler, J 2020, 'Care in the time of coronavirus: Ethical considerations in head and neck oncology', Head and Neck, vol. 42, no. 7, pp. 1519-1525. https://doi.org/10.1002/hed.26272
Gordin EA, Day A, Stankova L, Heitman E, Sadler J. Care in the time of coronavirus: Ethical considerations in head and neck oncology. Head and Neck. 2020 Jul 1;42(7):1519-1525. https://doi.org/10.1002/hed.26272
Gordin, Eli A. ; Day, Andrew ; Stankova, Lenka ; Heitman, Elizabeth ; Sadler, John. / Care in the time of coronavirus : Ethical considerations in head and neck oncology. In: Head and Neck. 2020 ; Vol. 42, No. 7. pp. 1519-1525.
@article{c1bcfeac632f46c7af944fb8c9a90b98,
title = "Care in the time of coronavirus: Ethical considerations in head and neck oncology",
abstract = "As COVID-19 continues to challenge the practice of head and neck oncology, clinicians are forced to make new decisions in the setting of the pandemic that impact the safety of their patients, their institutions, and themselves. The difficulty inherent in these decisions is compounded by potentially serious ramifications to the welfare of patients and health-care staff, amid a scarcity of data on which to base informed choices. This paper explores the risks of COVID-19 incurred while striving to uphold the standard of care in head and neck oncology. The ethical problems are assessed from the perspective of the patient with cancer, health-care provider, and other patients within the health-care system. While no single management algorithm for head and neck cancer can be universally implemented, a detailed examination of these issues is necessary to formulate ethically sound treatment strategies.",
keywords = "COVID-19, cancer, ethics, head and neck, oncology",
author = "Gordin, {Eli A.} and Andrew Day and Lenka Stankova and Elizabeth Heitman and John Sadler",
note = "Publisher Copyright: {\textcopyright} 2020 Wiley Periodicals, Inc.",
doi = "10.1002/hed.26272",
journal = "Head and Neck",
T1 - Care in the time of coronavirus
T2 - Ethical considerations in head and neck oncology
AU - Gordin, Eli A.
AU - Day, Andrew
AU - Stankova, Lenka
AU - Heitman, Elizabeth
AU - Sadler, John
N1 - Publisher Copyright: © 2020 Wiley Periodicals, Inc.
N2 - As COVID-19 continues to challenge the practice of head and neck oncology, clinicians are forced to make new decisions in the setting of the pandemic that impact the safety of their patients, their institutions, and themselves. The difficulty inherent in these decisions is compounded by potentially serious ramifications to the welfare of patients and health-care staff, amid a scarcity of data on which to base informed choices. This paper explores the risks of COVID-19 incurred while striving to uphold the standard of care in head and neck oncology. The ethical problems are assessed from the perspective of the patient with cancer, health-care provider, and other patients within the health-care system. While no single management algorithm for head and neck cancer can be universally implemented, a detailed examination of these issues is necessary to formulate ethically sound treatment strategies.
AB - As COVID-19 continues to challenge the practice of head and neck oncology, clinicians are forced to make new decisions in the setting of the pandemic that impact the safety of their patients, their institutions, and themselves. The difficulty inherent in these decisions is compounded by potentially serious ramifications to the welfare of patients and health-care staff, amid a scarcity of data on which to base informed choices. This paper explores the risks of COVID-19 incurred while striving to uphold the standard of care in head and neck oncology. The ethical problems are assessed from the perspective of the patient with cancer, health-care provider, and other patients within the health-care system. While no single management algorithm for head and neck cancer can be universally implemented, a detailed examination of these issues is necessary to formulate ethically sound treatment strategies.
KW - cancer
KW - ethics
KW - head and neck
KW - oncology
U2 - 10.1002/hed.26272
DO - 10.1002/hed.26272
JO - Head and Neck
JF - Head and Neck

redpajama_set_name: RedPajamaCommonCrawl


text:
Cheap flights from Pittsburgh to Lihue
Travel > North America > United States > Pittsburgh to Lihue flights
Check our current prices for flights from Pittsburgh to Lihue. Please note that we also give you historical search data for this city connection. These are all airfares that people found in the past, in order to find more current flight information from Pittsburgh to Lihue, you will need to run a search below.
From $1218 / RT details
Book your flight now with Cheapoair.com and save!
Cheap Lihue airfares from $1218/RT are provided by Cheapoair.com. Outbound flight is leaving on 03/12/2023, 11:24 am from Pittsburgh Intl (PIT) airport and arrives at Lihue (LIH) at 09:05 pm. The flight time is 9 hours and 41 minutes. The Returning flight departes on 03/24/2023, 10:05 pm (other return dates are also available). Date posted: 26 Jan 2023
Price evolution for flights From Pittsburgh To Lihue
Recent Deals on Flights from Pittsburgh to Lihue:Roundtrip / Oneway
$1218 Alaska Airlines
Pittsburgh, PA (PIT) Lihue, HI (LIH) 03/12/2023 11:24 am
Lihue, HI (LIH) Pittsburgh, PA (PIT) 03/24/2023 10:05 pm
$354 Alaska Airlines
Knoxville To Dublin Multiple Airlines airfares from Knoxville in May
Manchester, NH To Rome Qatar Airways airfares from Manchester, NH in October
Fort Myers To Denver Sun Country Airlines airfares from Fort Myers in March
Orlando To Canton Spirit Airlines airfares from Orlando in June
Oakland To Bangkok Multiple Airlines airfares from Oakland in February
Houston To Columbus Spirit Airlines airfares from Houston in May
Pittsburgh To San Juan Spirit Airlines airfares from Pittsburgh in April
South Bend To Rome Multiple Airlines airfares from South Bend in February
Phoenix To Madison Sun Country Airlines airfares from Phoenix in February
Specify your search details. Browse the cheapest flights from Pittsburgh to Lihue, Lihue hotel rooms and Pittsburgh to Lihue vacation packages from the most popular providers, airline consolidators and travel search engines.
Know what to do when flying to Lihue?
Lihue Travel Guide Lihue is a census-designated place (CDP) as well as the seat of county government of the Kauai County in the Hawaiian island of Kauai. A huge disparity marks the present and past Lihue - in earlier times, Lihue (meaning [...]
Lihue Sightseeing The city of Lihue hasn't started to attract huge number of tourists yet and that is why various Lihue Sights aren't yet very famous in the neighboring regions either. But there are still some points worth visiting. This Grand Canyon [...]
Lihue Nightlife Lihue Nightlife won't offer much as it is quite small and traditional. Though the city has some bars and nightclubs they do not offer much in terms of entertainment. What you can do is enjoy your nightlife in various other restaurants [...]


text:
trending Market Intelligence /marketintelligence/en/news-insights/trending/dxz2pjxwy7ustetcgdq6fq2 content esgSubNav
October retail market: Sears files for bankruptcy; US retail sales edge up
16 Oct, 2018 | 06:42
Author Chris HudginsTayyeba Irum
Retail bankruptcies rose in late September and early October, ending a brief lull in filings, according to a new analysis by S&P Global Market Intelligence.
In one of the most anticipated filings of 2018, department store operator Sears Holdings Corp. declared bankruptcy Oct. 15, bringing the total number of bankruptcies to five in that period.
As the number of bankruptcies rose significantly, retail employment in September fell, continuing a trend that has taken hold as the industry continues to consolidate.
One bright spot continues to be retail sales, which have risen over the past few months and again posted an uptick in September, according to the U.S Census Bureau's report released Oct. 15.
Five retailers declared bankruptcy in the late September to early October period, up from zero bankruptcies in the prior period analyzed by S&P Global Market Intelligence. The filings bring the number of retail bankruptcies in 2018 to 27.
S&P Global Market Intelligence's bankruptcy count includes companies with a primary industry classification of retailing, household and personal products, or consumer durables and apparel, and a secondary classification of retailing.
Sears filed for bankruptcy protection early Oct. 15. According to the Chapter 11 filing, the retailer reported estimated assets in the range of $1 billion to $10 billion and estimated liabilities of between $10 billion and $50 billion. The company also said its controlling shareholder, Edward Lampert, has stepped down as CEO but will remain chairman of the company.
Sears secured a debtor-in-possession financing commitment of $300 million from its senior secured asset-based revolving lenders and is negotiating an additional $300 million in subordinated debtor-in-possession financing with Lampert's hedge fund, ESL Investments Inc., to help it stock its shelves for the holiday shopping period.
Steinhoff International Holdings NV-owned Mattress Firm Holding Corp. announced its Chapter 11 filing Oct. 5. The company plans to restructure with the help of $525 million in senior secured credit facilities and $250 million in debtor-in-possession financing.
ED MAP Inc., an educational resource management solutions company, filed for bankruptcy Sept. 17, while ATD Corp., a distributor of branded replacement tires, custom wheels and accessories, filed for bankruptcy in October. Apparel retailer Herb Philipson's Army and Navy Stores Inc. filed for bankruptcy Oct. 8.
Retail sales nudged up 0.1% on a seasonally adjusted basis to $509.04 billion in September from August, according to the monthly report released Oct. 15 by the U.S. Census Bureau.
"Overall improving economic fundamentals, coupled with increased credit availability, lower unemployment and wage growth, will translate into higher consumer spending for the remainder of the year," Moody's Vice President Manoj Chadha said in an Oct. 15 research note.
Sales at nonstore retailers, a category that includes transactions through catalogs, vending machines and door-to-door sales, rose 1.1% month over month to $58.06 billion.
Furniture and home furniture stores also posted a 1.1% increase, with sales totaling $10.28 billion for the month, while electronics and appliance stores reported a 0.9% rise to $8.46 billion.
Food services and drinking places saw the sharpest decline in September at 1.8% to $60.58 billion. Sales at gasoline stations declined 0.8% to $43.64 billion.
The Census Bureau said it could not isolate the effect of Hurricane Florence on sales but it did receive indications from companies that the storm "had both positive and negative effects on their sales data while others indicated they were not impacted at all."
Similar to retail sales, consumer prices increased 0.1% in September, according to a monthly report released Oct. 11 by the U.S. Bureau of Labor Statistics. Prices rose 2.3% year over year.
Energy prices decreased by 0.5% in September from August, while food prices remained unchanged. Core prices for all items excluding food and energy jumped 0.1% during the month.
Employment in the retail sector fell by 20,000 jobs in September, down to 15.9 million on a seasonally adjusted basis, according to a monthly report released Oct. 5.
Miscellaneous store retailers saw the sharpest decline in jobs during September. Employment in that category decreased by 5,400 jobs, or 0.65%, to 825,300 jobs.
Building material and garden supply stores and general merchandise stores also saw employment declines during the month. Employment at building material and garden supply retailers dropped 0.34% to 1.3 million. Employment at general merchandise stores declined 0.13% to 3.1 million.
Meanwhile, gasoline stations added 2,800 jobs, while furniture and home furnishings stores added 1,500 jobs.
Clothing and clothing accessories stores lost 3,900 jobs in September, a month-over-month decline of 0.29%.
U.S. retailers are rushing to hire workers ahead of the 2018 holiday shopping season. Apparel retailer The Gap Inc. plans to hire 65,000 temporary workers across its Gap, Banana Republic, Athleta and Old Navy stores for the holiday season, while Target Corp. plans to hire 120,000 seasonal workers.
Department store operator Macy's Inc. said it intends to employ 80,000 seasonal workers for the holiday shopping season.
General merchandise store operator Dollar Tree Inc. also plans to hire 25,000 workers.
An October analysis of one-year probability of default scores identified 15 U.S. department stores and apparel companies with scores ranging from 9.9% to 1.7% and corresponding implied credit scores of "ccc+" to "bb-."
Destination Maternity Corp., which previously held the No. 2 spot on the list, rose to No. 1 with a probability of default of 9.9%, replacing Sears at the top spot after the company filed for bankruptcy.
Delta Apparel Inc., an apparel design, marketing, manufacturing and sourcing company, appeared on the list for the first time. The company took the last spot on the list with a one-year probability of default of 1.7%.
S&P Global's Fundamental Probability of Default Model provides a fundamentals-based view of credit risk for corporations by assessing both business risk — including country risk, industry risk, macroeconomic risk, company competitiveness and company management — as well as financial risk, such as liquidity, profitability, efficiency, debt service capacity and leverage. For a more thorough review of the model, see the PD Model Fundamentals - Public Corporates whitepaper.
Chris HudginsTayyeba Irum


text:
Protecting our Local Environments
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on the planet | The Gate / Castell-y-rhingyll Dyfed
Are you considering how humans have impacted our planet, including the destruction of valuable rainforests as well as other habitats around The Gate / Castell-y-rhingyll that happen to be the exclusive home of certain species? In that case, you need to learn more about habitat restoration. This is actually the process whereby folks as if you try to help by planting new plants and taking other actions which will transform the land and permit species to thrive there yet again.
There are habitats everywhere on this planet, though the ones in very industrialized places are will no longer natural habitat that this animals and others were once able to thrive in. While you can't go about tearing down every one of the buildings as well as other things which were produced by folks, there are still a lot of areas in the world which are ready to accept restoration, including those undeveloped areas that happen to be nearby the cities around the globe.
The entire process of habitat restoration will vary greatly and is dependent upon what has happened and what needs to happen. As an example, if only a compact section of a wooded area was chopped down before some kind of protective measures were placed into place, then you will have less to complete than in the event the area has become a barren wasteland before anyone has attempted to begin restoring the habitat near Dyfed.
You should also realize that habitat restoration does not happen overnight, as well as over the course of several weeks or months. While that can be done amazing are employed in a short time by replanting native species, the time it will require to the area to return to normal is going to be considerable. Even during areas who have not been completely devastated, the procedure is time consuming and can be extremely expensive at the same time.
Among the important considerations for habitat restoration is picking out the proper plants to put in the ground. In the event you don't have a very good guideline with this, you can find yourself with a level bigger problem than you may have at this time. You must start with knowing which type of plants are suitable for the area. The particular area should be thought about as well, since some species possess a limited growing area.
You also have to study which plants should go where. For instance, if you possess the want to use plants that rely on the shade of larger trees, you don't would like to place them close to saplings that are not able to offer that valuable defense against the sun. Should you don't supply the shade necessary so they can thrive, you can find yourself killing the plants and limiting those you possess for your restoration project.
With regards to the earth, restoring natural habitats is really a worthwhile adventure that you could be proud of taking part in. If you are contributing financially or digging in the earth yourself, you ought to seek to assistance with this cause in any way you could!
[ssplaces location="The Gate / Castell-y-rhingyll Dyfed" keyword="Environmental" limit="5″]
Categories: Dyfed
« Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Weston Hampshire
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth »
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on the planet | Wreath Somerset
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Stratfield Mortimer Berkshire
Habitat Restoration Is Important to Protecting the Plants, Animals, Insects and Microscopic Wildlife on the planet | Senghenydd Gwent
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Port Talbot West Glamorgan
Habitat Restoration Is Essential to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Pentirvin Shropshire
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Oldberrow Warwickshire
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Mossy Lea Lancashire
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife on the planet | Morice Town Devon
Habitat Restoration Is Essential to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Mile Oak Staffordshire
Habitat Restoration Is Important to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Mackside Roxburgh, Ettrick and Lauderdale
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on the planet | Lyne of Skene Aberdeenshire
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife worldwide | Lyme Regis Dorset
Habitat Restoration Is Important to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Longfordlane Derbyshire
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife worldwide | Lea Shropshire
Habitat Restoration Is Essential to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Knotting Bedfordshire
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Harworth Nottinghamshire
Habitat Restoration Is Important to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Grove Green Kent
Habitat Restoration Is Critical to Protecting the Plants, Animals, Insects and Microscopic Wildlife in the World | Greenock Renfrewshire
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Gayton Norfolk
Habitat Restoration Is Vital to Protecting the Plants, Animals, Insects and Microscopic Wildlife on earth | Fuller's Moor Cheshire
Habitat Restoration Is Important to Protecting the Plants, Animals, Insects and Microscopic Wildlife worldwide | Etsell Shropshire
Aquamog
Aquatic Weed
aquaticweed.org
Aquatic Weed Harvester
Aquatic Weed Removal
Bulrush Removal
Cattail Removal
Channel Clearing
DK Environmental
Duckweed Control
Grass Carp
Hydrilla
hydrilla.org
Hydrilla Control
Milfoil Control
Milfoil Weevil
Pond Weed
Pond Weed Control
Pond Weed Removal
pondweedremoval.net
© HabitatRestoration.com


text:
What is API monetization?
Published April 23, 2019 •%t-minute read
API monetization is the process by which businesses create revenue from their application programming interfaces (APIs). APIs are the cornerstone of what is widely seen as the next iteration of business development, where having well-developed APIs establishes and maintains relationships in a digital economy. APIs are the wholesale version of a web presence, allowing others to access and integrate your data and resources into their public or private sites and applications.
Hopefully by the time you have put an API management plan in place, you already have a healthy business model as well, which should provide a framework for your monetization goals. API monetization isn't just about how you are going to generate revenue via your API, it is also about how you will keep your API in operation and performing for consumers.
Not all APIs are created equal and reasons for deploying an API can vary widely. Here are some of the common patterns for API monetization that have emerged.
A popular way to provide access to an API is by offering a free tier so that anyone can sign up, start using an API, and understand the value it delivers. This allows consumers to test the API and see if it will meet their needs before spending money. While free is a good option for many API monetization strategies, it works well in conjunction with other strategies. If implementing a free tier of the API alone, without a strategy to sell services to those with greater demands, your organization can face problems.
Consumer pays
After providing free access, the next approach to API monetization is to establish a price that consumers will pay for the services or resources the API provides. We are seeing 3 common approaches to APIs charging consumers:
Tiered. Some API providers set up multiple tiers of paid access, such as bronze, gold, or platinum. Each tier has its own set of services and allowances for access to API resources with pricing stepping up in cost for each tier.
Pay-as-you go. Another option is a utility-based model, where API consumers pay for what they use. Depending on the amount of bandwidth, storage, and other hard costs incurred around API consumption, providers charge based upon their cost, plus a logical profit.
Unit-based. Finally, other API providers define each API resource in terms of units and assign a unit price. API consumers pay for the number of units they anticipate using, with the option to buy more when necessary
Some API providers mix and match different combinations of tiered, pay-as-you-go, and unit-based API pricing to recover operational costs as well as generate revenue.
Consumer gets paid
In some cases, an API will drive other revenue streams for companies and can actually share revenue with API consumers. This approach acts as an incentive model for API consumers, encouraging integration and quality implementation of the resources that drive revenue for an API provider. 3 distinct models for sharing API revenue with consumers have emerged:
Ad revenue share.  Some API providers offer an advertising network as part of their platforms. API consumers embed advertising in their sites and apps, providing revenue for API providers. In turn, the API provider returns a portion of the revenue from advertising.
Affiliate. Some approaches to monetization of websites have been applied to API ecosystems. Cost per acquisition (CPA), cost per click (CPC), and one-time or recurring revenue-sharing models are commonly used.
Credits to bill. A smaller group of API providers employ a paid model for consumers. Based upon advertising revenue share or affiliate revenue, the provider will credit the API consumer's bill—reducing a developer's overhead for integration and potentially reducing the API provider's expenditure.
Indirect monetization
Indirect monetization of an API isn't always about generating revenue from API access, advertising, or other revenue. There are indirect ways that an API can deliver value.
Marketing vehicle. APIs can serve as a marketing vehicle for a company and its online presence. Through sensible branding strategies, developers can become third-party marketing agents, working on behalf of a core company and its brand.
Brand awareness.  As a new tool in an overall marketing and branding strategy, an API can provide a type of brand exposure via third-party websites and applications, thereby extending the reach of a brand using third-party API consumers as the engine.
Content acquisition. Not all APIs are about delivering content, data, and other resources to consumers. APIs often allow for writing, updating, accessing, and deleting content. Content acquisition via API can be a great way to build value within a company and its platform.
SaaS. Software-as-a-Service (SaaS) has become a common approach to selling software online to consumers and businesses. Oftentimes an API will complement the core software and its offering, providing value to SaaS users. API access is often included as part of a core SaaS platform, but also can be delivered as an option for premium SaaS users.
Traffic generation. APIs can also be used to drive traffic to an existing website or application. Designing an API to use hyperlinks directed at central websites or apps—and encouraging consumers to build their own websites and apps that are integrated with the API—provides a great opportunity for increasing traffic.
Many companies start by focusing on launching and evolving their API strategy and gaining essential experience before fully executing on their API monetization strategy, relying completely on indirect value from an API.
While it is better to have a monetization strategy in place early, many are finding success by prioritizing the API first and monetization second. With APIs being deployed in various capacities—within a company, privately between partners, or in the public—a wide mix of monetization strategies can be used.
Some API resources lend themselves better to a pay-as-you-go model, while some markets demand that data be freely accessible without the need to register or be charged for access. There is no one-size-fits-all approach to API monetization.
One way to think about an API is as an external research and development lab within a company. A lab that accepts ideas and integrations from partners then incubates these ideas, applications, and business relationships. Companies are using APIs to allow the introduction of outside ideas and talent in hopes of inciting innovation.
Some API providers will hand-select the best integrations and invest in individuals and companies, sometimes resulting in acquisitions of companies and technology.
Just like there is no one-size-fits-all approach to API monetization, there are few constants in pricing or access. Successful API providers are constantly adjusting, tweaking, and experimenting, trying to find the most competitive approach possible. APIs are about business development and finding new ways to monetize your new and existing resources.
Roadmap
API providers and API consumers are constantly building trust and establishing relationships with one another. One key facet of this trust, and the foundation for the relationship, is sharing a common roadmap. API providers need to actively involve API consumers with where the API resources are going, so that consumers can prepare for these changes, adjust to them, and provide feedback that may influence the roadmap. Nothing will upset API consumers faster than keeping them in the dark about what to expect from the APIs and surprising them with changes to or failures in their applications.
APIs start with deploying an API area to hang and manage a handful of APIs, where they can be accessed and put to use by consumers. But the goal is take an API area and evolve it into an active community of API consumers, in hopes of transforming it into a self-service, self-managing ecosystem of passionate partners and consumers.
Sustainable API ecosystems are symbiotic. They're not just about API providers generating value, they're also about API users getting the resources they need to be successful and engaging in new approaches to business development.
An active API will attract new users. The users who get the value they are looking for—and the support they need—will ultimately spread the word. A viable API ecosystem is equal parts technology, business, and politics. A balance needs to be struck that doesn't just deliver value for API providers and consumers, but also for end users of web or mobile apps that are integrated with API resources.
API opportunities
Beyond these trends in API usage, there are several opportunities emerging for both businesses and developers to take advantage of. The simplistic, web-based approach of providing access to resources is moving into emerging areas, like:
3D printing. With the help of web APIs, 3D printing is moving beyond hobby and art. And it has serious potential for redefining the global manufacturing landscape. There are several platforms focusing on providing APIs for 3D printing.
Automobiles. Major automakers, like Ford and GM, are turning vehicles into API platforms, creating opportunities for businesses and developers to provide new products and services in-vehicle.
Home. Devices play a central role in our daily lives. We carry smart devices from home to work, and everywhere else. APIs have made their way beyond our computers and integrate directly with our homes. The next generation of home automation technology is being developed, ranging from thermostats for heating and air conditioning to lighting and home security. While much home automation technology is still without APIs, many providers are introducing developer ecosystems and are using APIs to stimulate innovation around home technology integration.
Buildings. Many buildings already have automated heating, air, electrical, water, and other systems. Building equipment manufacturers are quickly seeing the importance of allowing API access to their hardware and software. Imagine if were able to teach us to reduce energy consumption, diagnose problems in real time, and self-correct when necessary or call a service provider when repairs or tuning are required.
Quantified self. Devices that allow the wearer to understand more about themselves are ubiquitous. Sports and fitness-realted personal activity measurement devices are common among quantified self devices. They can be used for everything from lifestyle tracking to healthcare.
These 5 areas represent just a few of the opportunities available with APIs. APIs aren't just about applications on the internet, they're connecting our physical worlds to cloud computing and the data streams we rely on.
Learn more about Red Hat and API management
What is an API?
API stands for application programming interface—a set of definitions and protocols to build and integrate application software.
What does an API gateway do?
An API gateway is an application programming interface (API) management tool that sits between a client and a collection of backend services.
Why Red Hat for APIs?
Our API solutions focus on reusability, IT agility, and a management interface that helps you measure, monitor, and scale.
More about APIs
An infrastructure platform that lets you share, distribute, control, and monetize your application programming interfaces (APIs).
What is API design?
What is API management?
Why choose Red Hat for API management?
REST vs. SOAP
Open APIs in Financial Services for Dummies
The API owner's manual
Open banking platforms: Connect APIs, apps, and systems of record
Service mesh or API management?
ANALYST MATERIAL
SD Times: What to look for in an API management solution


Finally, today is the last day to Crossway's entire Reclaiming the Christian Intellectual Tradition Series for $2.99 per volume: Arts and Music, Christian Worldview, Ethics and Moral Reasoning, The Great Tradition of Christian Thinking, History, The Liberal Arts, Literature,The Natural Sciences, Philosophy,Political Thought, Psychology.
Spurgeon had much to be proud of. Crowds hung on his every word. Biographers lauded his popularity. Kings and queens sought his company. Spurgeon was a red-carpet celebrity.
Yet his Achilles' heel was not influence. God had answered his youthful prayer "that prosperity and fame may not injure me" (Letter to his father, Angus Library, Oxford). Spurgeon was not seduced by the fame and fortune afforded by a royal London lifestyle.
Brandon Smith also wrote a really helpful article on this theme at For the Church. Both his and Marty's are well worth your time.
When Paul says "make it your ambition" he indicates that this is the good, right, and honorable way for them to live their lives—and for us to live our lives. Over against all the other things we could aspire to, we are first to aspire to these, for these are matters of first importance. He highlights three godly ambitions for the Christian.
My friend Nick Batzig writes a really helpful article laying out the differing views on what Genesis 3:16 could mean.
For nearly ten minutes, I spun in my desk chair playing out the familiar scene line by line:I'll open with this probing question, then I'll bring up the sin and point to this Scripture, and after I've listened for a while I'll really dig in hard this time because this is just unacceptable! Why does this member keep slipping back into the mud? I mean really, I've got better things to do than to deal with this problem for the hundredth time.
I was thinking about this paradigm for sports the other day, and I wandered down a similar path about ministry. It seems to be a trend to talk about certain Sunday gatherings as "big days." Giving people the benefit of the doubt, I think I know what they mean. They are saying that this Sunday is big because people are getting baptized or because we have an announcement about church planting or we are going to have a special guest. All of these are good things that should properly be anticipated and celebrated. However, I have a couple concerns with casual elevation of certain Sundays over others.


We bought an apartment building to offer next step housing for homeless families.
When we bought this latest addition to our property portfolio it was a total disaster, but we've never been shy about ambitious renovation projects. After many hours of work, many dumpsters filled and many dollars spent, we've opened the doors for families to move in.
Budget estimates for the 8 unit building are approximately $1,100,000. As of March 2019 fundraising is complete on the apartments!


HONOLULU - A three-year-old girl who was left brain dead following a procedure at a dentist in Hawaii has died, reports CBS affiliate KGMB in Honolulu.
Finley Boyle died Friday evening at Hospice Hawaii. The family's attorney, Richard Fried, said her parents, Ashley and Evan Boyle, and other relatives were present.
The child was diagnosed with 10 cavities and in need of four root canals in her first dental exam.
Finley returned Dec. 3 for the procedure. She stopped breathing after receiving high doses of Demerol, hydroxyzine, chloral hydrate, and nitrous oxide, according to a lawsuit filed by her parents against Dr, Lilly Geyer at Island Dentistry for Children, the Honolulu Star-Advertiser reported.
"In this case, it's debatable whether any of that was necessary," Fried said. "There were so many places here where the errors could have been rectified, right up until the end, and Finley would be alive."
Island Dentistry's Web site said that it was now closed permanently.
Fried said there was no evidence that all precautions were taken.
Dental records obtained by Fried show three notations on the child's vital signs that morning. According to guidelines by the American Academy of Pediatric Dentistry, vital signs should be monitored and documented at least every five minutes for patients undergoing sedation.
Boyle said she became aware of the problem when she saw emergency responders arrive. The staff also summoned a pediatrician down the hall, according to Boyle.
Geyer was issued a license to practice dentistry in the state in July 2005. As of last month, there were no records of complaints against her or her practice on file with the Hawaii Department of Commerce and Consumer Affairs.
Boyle said her child would be healthy today if simple precautions had been taken.


text:
'Grim Sleeper' Cops Trying to Taint Jury Pool With Photos, Attorney Charges
photographs include members and friends of the Franklin family
LAUREN EFFRON AND BARBARA GARCIA
Police Seek 'Grim Sleeper' VictimsFive women have tentatively been indentified in photos discovered.
Dec. 18, 2010— -- The Los Angeles Police Department has tentatively indentified five of the dozens of women found in photos discovered on the "Grim Sleeper" serial killer's property.
Deputy Chief of Police and Chief of Detectives David R. Doan said that "five people have identified five specific names" from photos posted on the L.A.P.D.'s website. All claims came through their tip hotline.
He said that "three or four of the five at this point" have come forward and said "it was me in the picture."
"We have not confirmed that and we're going to personally interview everyone," Doan said.
All of the photos were found on the property of the suspected "Grim Sleeper" serial killer, Lonnie David Franklin Jr., and police say they hope people will recognize the faces and contact investigators.
Police are investigating all claims called in and entering them into their computer database. Doan said they are now tracking down the people who made the calls, saying that they were turning most of their attention to people calling in to report that someone in one of the photos is a missing person.
"[It's a] hotter lead...if the person has not been seen for a couple of years," Doan said. "They say 'it's me' is not as hot as someone reported missing."
Doan said that all of the 180 images will remain on the L.A.P.D. website for now.
"We'll take them down if we're satisfied that the individual has been possibly identified," he said.
Los Angeles Police homicide detective Dennis Kilcoyne said various area police websites have received over 8 million hits since the photos were made public on Thursday, and the department has recieved hundreds of phone calls.
The photos show women ranging from teenagers to others who look as if they're in their 60s. Some are smiling, others appear to be unconscious.
Click here to view all of the "Grim Sleeper's" victims' photos.
"These people are not suspects," Los Angeles Police Chief Charlie Beck said of the photos on Thursday. "We don't even know if they are victims. ... We certainly do not believe that we are so lucky or so good that we know all of the victims. We need the public's help."
Beck also cautioned the public that some of the photos are decades old, and that the women "will have changed, aged."
Many of the photos of these women show them with either their breasts exposed or fully naked.
Detective Kilcoyne, who headed the team that tracked down Franklin, would not comment on the nature of the photographed women's "lifestyle or situation." He did acknowledge that the L.A. Police Department was showing only the women's faces, which was "indicative of the content in the photos."
"Our best wish is that we get a phone call from each and every one of the them and that everyone is OK," he said.
Detectives also encouraged any of the women who are still alive to come forward and explain how they came to be photographed.
Franklin, a 57-year-old mechanic, was charged with 9 counts of murder and one count of attempted murder in July in the "Grim Sleeper" case. He is accused of murdering 9 young women between 1985 and 2007 in South Los Angeles.
When detectives searched Franklin's home and surrounding property, they found more than 1,000 photos and hundreds of hours of home video footage in his procession.
"It's a long period of time that he's been taking pictures," Kilcoyne said.
Authorities working on the case said they had been trying to identify the women in the images for months.
Franklin pleaded not guilty to the charges on Aug. 23, 2010, during a court appearance. He remains in custody.
Franklin's attorney, Louisa Pensanti, cricicized the release of the photos, saying it created several problems.
In a statement to ABC News, Pensanti said among the problems "is that the photographs were not part of the discovery that I have been provided with so far from the District Attorney's Office. The photographs include members and friends of the Franklin family, all now subject to the intense scrutiny of the public as well as the police."
Los Angeles police offered Franklin's wife the opportunity to view the photos at police headquarters in order to identify friends or family members, but she refused, a high-ranking official tells ABC News.
Pensanti also criticized investigqtors for comments made at a press conference, which she said were "a deliberate tainting of public opinion and the jury pool. Sadly, the public officials who have the duty to uphold the Constitution have forgotten the basics in their desire for sensationalism and are jeopardizing Lonnie Franklin's chance for a fair trial."
Determining the identity of the "Grim Sleeper," who had eluded police for more than two decades, was helped by a DNA sample taken from the suspect's son.
ABC News' Neal Karlinsky reported on a technique called familial DNA led police to Franklin in July.
Police said the DNA technique could prove more revolutionary than fingerprinting in solving crimes.
"This is a landmark case. This will change the way policing is done in the United States," Beck said at the news conference in July.
The technique may also be controversial, and likely faces legal challenges.
"This arrest provides proof positive that familial DNA searches must be a part of law enforcement's crime-fighting arsenal. Although the adoption of this new state policy was unprecedented and controversial, in certain cases, it is the only way to bring a dangerous killer to justice," said Attorney General Jerry Brown in a statement.
The familial DNA program was started by Brown in April 2008 as a way to fight violent crimes when there is "serious risk to public safety," according to the attorney general's office. California is the first state to use familial searches.
The high-profile case had languished unsolved, and had haunted the files of the L.A.P.D. cold-case unit for years.
According to the attorney general's office, the suspect's son was arrested and convicted on a felony weapons charge and swabbed for DNA last year. When his DNA was entered into the database of convicted felons, detectives were alerted to a partial match to evidence found at the "Grim Sleeper" crime scenes.
Police began investigating Franklin's son's relatives, and found a match in Lonnie Franklin. Police said he had never been a suspect until now.
The data bank, which contains more than 1.5 million samples, is the third largest criminal database in the world. Only data from convicted felons is collected, according to Brown, and a number of safeguards are taken before the Department of Justice releases the information to police.
Kilcoyne, who headed the investigation, said it was the second time a query was run for familial connections in the "Grim Sleeper" case. From the DNA matches, a tight circle of law enforcement officers zeroed in on Franklin based on the suspect's residence, location of the victims, his race and age.
Familial DNA database searches have come under fire from privacy and civil liberty advocates, who argue, among other things, that they put more minorities, who are disproportionally represented in the database, in an at-risk group.
The Supreme Court has upheld the constitutionality of familial DNA sample collection and searches. Brown said the office of the attorney general will be in court again next week defending the technique, and raised the possibility of more legal challenges.
The killings of 9 young black women and one man, beginning in 1985, have all been blamed on the "Grim Sleeper." Franklin has not been charged in the shooting death of 36-year-old Thomas Steele, but police said they believe his death is connected to the other killings.
Neighbors Shocked by Franklin's Arrest
The cluster of killings stopped in 1988, but 14 years later police said they linked new murders to the same man. The nickname "Grim Sleeper" came from the long lull between killings. The most recent murder happened in January 2007.
Los Angeles Mayor Antonio Villaraigosa praised law enforcement officials for their "exhaustive detective work" in the past 25 years that led to nabbing the suspect. More than two dozen investigators worked to find the "Grim Sleeper."
"I'm proud to announce that this terror has finally come to an end," Villaraigosa said at a news conference.
Relatives of the victims who were in attendance said they were elated and thankful that the police finally brought the alleged killer to justice.
Police closed off the block on 81st Street in South Los Angeles where Franklin lived Wednesday and the arrest was made.
Residents said they were shocked. Neighbor Donna Harris said she has known Franklin, a retired mechanic, for nearly 20 years, and that he was supposed to fix her car that morning.
"Everybody on the block, we all knew if anything was happening with anybody's cars, he was always there for us. Especially the ladies," Harris said. "Even if we weren't at home, instead of calling Triple-A, he would help."
Franklin was reportedly a mechanic for a Los Angeles Police Department station near the center of the murder spree in the 1980s.
Though Harris counted Franklin as a friend, she said the news was frightening.
"It frightens me to know that somebody like that was that close," Harris said. "I don't want to believe it's true, [but] if he did what he's been accused of, God judged him for that."
Franklin has a criminal history dating back to 1989, according to public records. His four previous convictions include charges of a misdemeanor battery and assault, as well as two charges for stolen property -- one of which he served jail time for.
With these latest charges, he could face the death penalty or life in prison without possibility of parole.
The Long Search for a Los Angeles Serial Killer
A handful of detectives, headed by Kilcoyne, have been working full-time on the case for years, determined to find the "Grim Sleeper."
All the slayings have been connected to the same 25-caliber handgun, and matched to the same DNA, usually saliva taken from the victims' breasts.
"The commonality is that they're all from the same general area of the city in south Los Angeles," Kilcoyne said. "I don't think I would label them all as prostitutes per se, but they certainly have troubled lifestyles. They're broken people and easy targets."
In February, the L.A.P.D. offered a $500,000 reward -- the city's biggest ever -- advertised on billboards near where the victims were found. Investigators also released a 20-year-old 911 call in which a witness says he saw a van pull up in a dark alley and dump a body, which was identified as Barbara Ware.
Listen to the 911 call here.
The caller tells the dispatcher several details, everything from the license plate number of the van -- which was a dead-end lead -- to the way the body was discarded. But he refused to tell the 911 operator his name, saying he didn't see the killer.
Reporter Discovers Serial Killer, Alerts Community
Police say they wouldn't have known there was a serial killer on the loose if he hadn't starting killing again.
"We became aware of it right around April of 2007," LAPD Detective Bill Fallon told "Nightline" in March 2009. "And we realized there was a serial killer because of DNA hits we started getting. So when we get those hits, we're like, 'Whoa.' That's when we started digging it."
But the police didn't notify the community until Christine Pelisek, a reporter from LA Weekly, began investigating.
"I was the one who told some of the family members that their daughters were victims of a serial killer," Pelisek said. "I mean, they didn't even know. The public safety committee, they had no idea. I mean, the police commission, I spoke to the police commission [to whom the police chief reports]. They didn't even know. So there were a lot of people very upset that the police didn't let the community know."
Fallon says investigators didn't want to alert the killer that they were searching for him.
"We wanted to get a a step ahead of the killer himself," he said. "I don't want you to know I'm coming for you until I find out who you are, where you are and what you are doing."
Dec 18, 1:07 PM


text:
ROLAND-GARROS 22 May - 11 June 2023
RG Spirit
Visit & Tickets
US Open - Day 3: Serena turns back the clock, Medvedev marches on
Thursday 1 September 2022 - Alex Sharp
Unsurprisingly Serena Williams was the headline act with blockbuster battles happening across the grounds at the 2022 US Open.
©Corinne Dubreuil / FFT
New York is a city that never sleeps and it feels that way at the 2022 US Open. There's almost too much elite tennis to concentrate on!
The big names, the historic moments, the shocks, it's all being served up at Flushing Meadows.
Serena "fun" factor delivers another delight
The second stop on the Serena Williams farewell tour in New York yielded another record night-session attendance.
29,959 fans surged to the Billie Jean King NTC to catch a glimpse of the Hall of Famer, even if it was outside on big screens. The atmosphere was palpable.
Another celebrity rich audience sat on the edge of their seats, frequently jumping from them to cheer on the 23-time major winner, as they witnessed a typical Williams thriller.
The 40-year-old didn't play like someone ready to wave goodbye, the six-time US Open champion played like a title contender in a 7-6(4), 2-6, 6-2 triumph over world No.2 Anett Kontaveit.
"It's no rush here. I'm loving this crowd. Oh, my goodness, it's really fantastic. There's still a little left in me. We'll see, we'll see," teased Williams.
Make no mistake, Kontaveit, a player who relishes hard court tennis, was striking at a No.2 seed level. Serena, well, was Serena, despite competing in just her sixth singles match in 14 months. Find the highlights, sit back and enjoy.
The American icon wasn't surprised by her game, joking in the on-court interview with a mischievous smile.
"I'm just Serena, you know, so... I'm a pretty good player," said Williams, taking on Ajla Tomljanovic next. "This is what I do best. I love rising to the challenge."
Expectations and pressure free, it's time to relish the occasion.
"Honestly, I'm just looking at it as a bonus. I don't have anything to prove. I don't have anything to win. I have absolutely nothing to lose," stated Serena. "I never get to play like this since '98 really. Literally, I've had an X on my back since '99. It's kind of fun."
Prior to the Serena show, Coco Gauff dazzled once again to topple Elena-Gabriela Ruse 6-2, 7-6(4). It was the serve which caught the eye as the teenager booked an enticing third round versus fellow American Madison Keys.
"I did see the serve clock afterwards. I did see it said 128mph. I looked at it and I was like, 'Whoa,'" said the 12th seed.
"I kind of looked at her after. I hit a couple good serves that game, like in the 120s. She was laughing at her box. I was like, I don't know what's going on either."
Heavyweights land hits to claim the W
World No. 1 Daniil Medvedev cruised into the last 32 once again with a straight sets passage past France's Arthur Rinderknech.
The top seed moves on to face Chinese history-maker Yibing Wu, who moved into further unchartered territory with a five-set victory over Nuno Borges.
"In my opinion Rafa (Nadal) is big, let's call it like this. I don't want to say favourite, big favourite. He's definitely big figure in this tournament," mused Medvedev with title talk already on the press agenda.
"Then for sure there are many other good guys. I'm happy to see my name sometimes in the odds or something like this because that means that I play some good tennis. Being amongst the favourites just brings me more motivation to try to do well."
2012 champion Andy Murray used all his guile and ever-improving physical conditioning to reel in American debutant Emilio Nava 5-7. 6-3, 6-1, 6-0. The three-time major winner's credentials for a deep run will be sternly examined in the third round by 13th seed Matteo Berrettini.
"I think obviously Andy now is in way better shape than he used to be, especially last year," said the Italian.
"He's a legend of the sport. But feeling confident. I always like to play here, especially in big stages, big matches like the one I'm about to play.
"When you play Andy Murray, you're playing Andy Murray. You have to play your best tennis. I think it's going to be a tough one, but I'm ready."
Murray was joined by fellow Brit Jack Draper, who wielded his mammoth left-handed strokes to dominate sixth seed Felix Auger-Aliassime 6-4, 6-4, 6-4. The 20-year-old's reward is a clash with Karen Khachanov next.
Nick Kyrgios took the telling points to head past Benjamin Bonzi in four sets to advance to a potentially explosive encounter with the gregarious American youngster J.J. Wolf. France's Corentin Moutet is taking his lucky loser opportunity, with an impressive four set scoreboard with 2021 quarter-finalist Botic van de Zandschulp.
Caro keeps on flying
How about this for a third round encounter? 2019 champion Bianca Andreescu clicked into a high gear to fend off 15th seed Beatriz Haddad Maia 6-2, 6-4. The Canadian advances to meet recent Cincinnati champion Caroline Garcia, who needed exactly an hour to brush aside Anna Kalinskaya 6-3, 6-1.
"I actually like playing these tougher opponents because I think I'm more on my 'A' game when I play higher-ranked players, which is a good tendency but also a bad tendency because I want to be like that with whoever I play," declared Andreescu.
"And I also like to have tough draws because I feel like the victory is much sweeter in the end. Like, let's say I win the tournament and I have a tougher draw... I really like that."
Tunisian trailblazer Ons Jabeur was tested and more by American prodigy Elizabeth Mandlik, before her versatility chalked up a 7-5, 6-2 win. However, China's Wang Xiyu overhauled No.3 seed Maria Sakkari 3-6, 7-5, 7-5 and in-form Liudmila Samsonova edged 2021 finalist Leylah Fernandez 6-3, 7-6(3) for a 12th consecutive match win.
Fabulous Day 4 feast
The action keeps on rolling in and Thursday is a brilliant Order of Play Stateside.
World No.1 Iga Swiatek opens Arthur Ashe Stadium play in an intriguing contest with 2017 champion Sloane Stephens.
Carlos Alcaraz will hope to bring another mixture of hot shots to town for a clash with Argentina's Federico Coria.
The night session is headlined by the Williams sisters in doubles, which serves as a world class starter, before a mouthwatering main between Rafael Nadal and Fabio Fognini.
Night session, New York. Who remembers 2015? Fognini reeled in Nadal from two sets down to cause a seismic shock on Arthur Ashe Stadium too. Will the 22-time Grand Slam champion fall to Fognini's unpredictable powers again?
Elsewhere, Garbine Muguruza versus Czech rising star Linda Fruhvirtova could develop into a real treat. Also, there is a powerhouse battle between top-seed slayer Kaia Kanepi and No.6 seed Aryna Sabalenka.
12/14 WTA 2022 rewind: Swiatek stands alone, Serena's evolution
10/31 Rolex Paris Masters: Medvedev and FAA arrive in top gear
09/03 US Open - Day 5: Sky-high Garcia, Medvedev and Kyrgios reunite
09/03 US Open 2022: Inspired Tomljanovic ends Serena's last dance
09/03 infoGame. Set. Serena: a career like no other
08/30 US Open - Day 1: Serena show shines on, Halep and Tsitsipas dismissed
08/10 infoSerena Williams announces "evolution away from tennis"
06/29 Wimbledon 2022 Day 2: Tan stuns Serena
06/22 Serena, Andy and Stan: The old guard are back!
US Open - Day 2: Job done for Nadal, Cornet halts Raducanu reign
There was an early test for Rafael Nadal, whilst Alize Cornet continued to cause major shocks in Grand Slam play this season.
US Open - Day 1: Serena show shines on, Halep and Tsitsipas dismissed
Another instalment of the Serena show was the highlight of a thrilling opening day at US Open 2022.
© Paul Zimmer/FFT
Anything can happen in New York after US Open draw
The final Grand Slam of the 2022 season has served up some intriguing contests out in New York.
Discover the Roland-Garros Official app
See all partners


text:
@class VEAudioComposition;

@interface VEAudioComponent : NSObject {
    VEAudioComposition *composition;

    AVAssetReader *reader;
    AVAssetReaderTrackOutput *readerOutput;

    double presentTime;
    double duration;
}

@property (nonatomic, strong) VEAudioComposition *composition;

@property double presentTime;
@property double duration;

- (id)initWithURL:(NSURL *)url;
- (id)initWithPath:(NSString *)path;

- (void)beginExport;
- (CMSampleBufferRef)nextSampleBuffer;

@end

redpajama_set_name: RedPajamaGithub


text:
"""
    sonde.Sonde
    ~~~~~~~~~~~

    This module implements the main Sonde object.

"""
from __future__ import absolute_import

import datetime
import os
import traceback
import warnings

import numpy as np
import quantities as pq
import pytz
import seawater

from sonde import quantities as sq
from sonde import util
from sonde.timezones import UTCStaticOffset

#XXX: put this into a proper config file
#: The default timezone to use when reading files
#default_timezone = cst #i.e utc-6
default_utc_static_offset = -6
default_static_timezone = UTCStaticOffset(default_utc_static_offset)
default_timezone = pytz.timezone('US/Central')

#: A dict that contains all the parameters that could potentially be
#: read from a data file, along with their standard units. This list
#: is exhaustive and will be fully populated whether or not data is or
#: even available in a particular format. See the `parameters`
#: attribute for parameters that are available for a particular file.
#: where possible we follow netcdf CF standard for parameter name and unit
#: (http://cf-pcmdi.llnl.gov/) in other cases we follow the general CF naming
#: guidelines
master_parameter_list = {
    'air_pressure': ('Atmospheric Pressure', pq.pascal),
    'air_temperature': ('Air Temperature', pq.degC),
    'eastward_water_velocity': ('Eastward Water Velocity', sq.mps),
    'instrument_battery_voltage': ('Battery Voltage', pq.volt),
    'northward_water_velocity': ('Northward Water Velocity', sq.mps),
    'seawater_salinity': ('Salinity', sq.psu),
    'water_depth_non_vented': (
        'Depth is the vertical distance below the water surface. '
        '(No Atm Pressure Correction)', sq.mH2O),
    'water_depth_vented': (
        'Depth is the vertical distance below the water surface. '
        '(w/ Atm Pressure Correction)', sq.mH2O),
    'water_dissolved_oxygen_concentration': (
        'Dissolved Oxygen Concentration', sq.mgl),
    'water_dissolved_oxygen_percent_saturation': (
        'Dissolved Oxygen Saturation Concentration', pq.percent),
    'water_electrical_conductivity': (
        'Electrical Conductivity(Not Normalized)', sq.mScm),
    'water_ph': ('pH Level', pq.dimensionless),
    'water_ph_mv': ('pH Sensor milivolts', sq.mvolt),
    'water_pressure': ('Water Pressure', pq.psi),
    'water_specific_conductance': ('Specific Conductance(Normalized @25degC)',
                                   sq.mScm),
    'water_surface_elevation': ('Water Surface Elevation', pq.m),
    'water_temperature': ('Water Temperature', pq.degC),
    'water_total_dissolved_salts': ('Total Dissolved Salts', sq.mgl),
    'water_turbidity': ('Turbidity', sq.ntu),
    'upward_water_velocity': ('Upward Water Velocity', sq.mps),
    'water_x_velocity': ('Water Velocity in x direction', sq.mps),
    'water_y_velocity': ('Water in y direction', sq.mps),
    'chlorophyll_a': ('Chlorophyll-a', sq.ugl),
    }

def open_sonde(data_file, file_format=None, *args, **kwargs):
    """
    Wrapper for Sonde(), just here to make a nicer API
    """
    return Sonde(data_file, file_format=file_format, *args, **kwargs)

def Sonde(data_file, file_format=None, *args, **kwargs):
    """
    Read `data_file` and create a sonde dataset instance for
    it. `data_file` must be either a file path string or a file-like
    object. `file_format` should be a string containing the format
    that the file is in. if `file_format` not provided function will
    try to autodetect format.

    Currently supported file formats are:
      - `ysi`: a YSI binary file
      - `hydrolab`: a Hydrolab txt file
      - `greenspan`: a Greenspan txt/csv/xls file
      - `eureka` : a Eureka Manta xls/csv file
      - `macroctd` : a Macroctd csv file
      - `hydrotech` : a Hydrotech csv file
      - `solinst` : a solinst lev file

    """

    if not file_format:
        file_format = autodetect(data_file)

        if file_format == False:
            raise Exception("File Format Autodetection Failed. Try "
                            "specifying the file_format.")

    if 'ysi' in file_format.lower():
        from sonde.formats.ysi import YSIDataset
        return YSIDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'hydrolab':
        from sonde.formats.hydrolab import HydrolabDataset
        return HydrolabDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'greenspan':
        from sonde.formats.greenspan import GreenspanDataset
        return GreenspanDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'eureka':
        from sonde.formats.eureka import EurekaDataset
        return EurekaDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'macroctd':
        from sonde.formats.macroctd import MacroctdDataset
        return MacroctdDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'hydrotech':
        from sonde.formats.hydrotech import HydrotechDataset
        return HydrotechDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'solinst':
        from sonde.formats.solinst import SolinstDataset
        return SolinstDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'generic':
        from sonde.formats.generic import GenericDataset
        return GenericDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'midgewater':
        from sonde.formats.midgewater import MidgewaterDataset
        return MidgewaterDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'espey':
        from sonde.formats.espey import EspeyDataset
        return EspeyDataset(data_file, *args, **kwargs)

    if file_format.lower() == 'lcra':
        from sonde.formats.lcra import LcraDataset
        return LcraDataset(data_file, *args, **kwargs)
    else:
        raise NotImplementedError("file format '%s' is not supported" % \
                                   (file_format,))

def autodetect(data_file, filename=None):
    """
    returns file_format string if successfully able to detect file
    format, returns False otherwise.

    data_file can be either a filename string or a file-like object.
    If it is a file-like object you can pass a file_name string if the
    file-like object doesn't have a name or filename attribute
    containing the filename.
    """

    if not filename:
        if type(data_file) == str:
            filename = data_file
        elif hasattr(data_file, 'name'):
            filename = data_file.name
        elif hasattr(data_file, 'filename'):
            filename = data_file.filename

    file_ext = filename.split('.')[-1].lower()

    if file_ext and file_ext == 'xls':
        temp_csv_path, xls_read_mode = util.xls_to_csv(data_file)
        fid = open(temp_csv_path, 'rb')
        lines = [fid.readline() for i in range(3)]
        fid.close()
        os.remove(temp_csv_path)

    else:
        if type(data_file) == str:
            fid = open(data_file, 'r')
        else:
            fid = data_file

        file_initial_location = fid.tell()
        fid.seek(0)
        lines = [fid.readline() for i in range(3)]
        fid.seek(file_initial_location)

    if lines[0].lower().find('greenspan') != -1:
        return 'greenspan'
    if lines[0].lower().find('macroctd') != -1:
        return 'macroctd'
    if lines[0].lower().find('minisonde4a') != -1:
        return 'hydrotech'
    if lines[0].lower().find('data file for datalogger.') != -1:
        return 'solinst'
    if lines[0].find('Serial_number:')!= -1 and lines[2].find('Project ID:')!= -1:
        return 'solinst'
    if lines[0].lower().find('log file name') != -1:
        return 'hydrolab'
    if lines[0].lower().find('pysonde csv format') != -1:
        return 'generic'
        # possible binary junk in first line of hydrotech file
    if lines[1].lower().find('log file name') != -1:
        return 'hydrotech'
    if lines[0].lower().find('the following data have been') != -1:
        return 'lcra'

    # ascii files for ysi in brazos riv.
    if lines[0].find('espey') != -1:
        return 'espey'

    #check for ysi:
    # binary
    if lines[0][0] == 'A':
        return 'ysi_binary'
    # txt file
    if lines[0].find('=') != -1:
        return 'ysi_text'
    if lines[0].find('##YSI ASCII Datafile=') != -1:
        return 'ysi_ascii'
    # cdf file
    if file_ext and file_ext == 'cdf':
        return 'ysi_cdf'
    if lines[0].find("Date") > -1 and lines[1].find("M/D/Y") > -1:
        return 'ysi_csv'

    #eureka try and detect degree symbol
    if lines[1].find('\xb0') > -1 or lines[2].find('Manta') > -1 or \
           lines[0].find('Start time : ') > -1:
        return 'eureka'

    # files from various intruments processed by an old script.
    if lines[0].lower().find('request date') != -1:
        return 'midgewater'
    else:
        return False

def find_tz(dt):
    """
    give a naive datetime.datetime object finds local timezone i.e
    includes dst effects
    """
    utc_offset = default_utc_static_offset + \
                 int(default_timezone.dst(dt).seconds / 3600)
    return UTCStaticOffset(utc_offset)

def merge(file_list, tz_list=None):
    """
    Merges all files in file_list
    tz_list specifies timezone of each file.
    options cst=utc-6, cdt=utc-5, auto=determine based on dataset.setup_time
    If tz_list == None then cst is assumed i.e UTC-6
       tz_list == auto then cst/cdt is determined from dataset.setup_date
       tz_list == ['utc-6','utc-5', etc]
    returns a Sonde object
    """
    from sonde.formats.merge import MergeDataset

    if tz_list is None:
        tz_list = [default_static_timezone for fn in file_list]
    elif tz_list == 'auto':
        tz_list = ['auto' for fn in file_list]
    #else:
    #     tz_list = [UTCStaticOffset(int(tz.lower().strip('utc')))
    #                for tz in tz_list]

    metadata = dict()
    data = dict()

    metadata['dates'] = np.empty(0, dtype=datetime.datetime)
    metadata['data_file_name'] = np.empty(0, dtype='|S100')
    metadata['instrument_serial_number'] = np.empty(0, dtype='|S15')
    metadata['instrument_manufacturer'] = np.empty(0, dtype='|S15')

    for param, unit in master_parameter_list.items():
        data[param] = np.empty(0, dtype='<f8') * unit[-1]

    for file_name, tz in zip(file_list, tz_list):
        try:
            if tz == 'auto':
                tmp = Sonde(file_name)
                # tz = UTCStaticOffset(utc_offset)
                tz = find_tz(tmp.setup_time)
            elif isinstance(tz, str):
                tz = UTCStaticOffset(int(tz.lower().strip('utc')))
            dataset = Sonde(file_name, tzinfo=tz)
        except:
            warnings.warn('merged failed for file %s with error: %s' % (file_name, traceback.print_exc()), Warning)
            continue

        fn_list = np.zeros(len(dataset.dates), dtype='|S100')
        sn_list = np.zeros(len(dataset.dates), dtype='|S15')
        m_list = np.zeros(len(dataset.dates), dtype='|S15')

        fn_list[:] = os.path.split(file_name)[-1]
        sn_list[:] = dataset.serial_number
        m_list[:] = dataset.manufacturer

        metadata['dates'] = np.hstack((metadata['dates'], dataset.dates))
        metadata['data_file_name'] = np.hstack(
            (metadata['data_file_name'], fn_list))
        metadata['instrument_serial_number'] = np.hstack(
            (metadata['instrument_serial_number'], sn_list))
        metadata['instrument_manufacturer'] = np.hstack(
            (metadata['instrument_manufacturer'], m_list))

        no_data = np.zeros(len(dataset.dates))
        no_data[:] = np.nan
        for param in master_parameter_list.keys():
            if param in dataset.data.keys():
                tmp_data = dataset.data[param]
            else:
                tmp_data = no_data

            data[param] = np.hstack((data[param], tmp_data))
        print 'merged: %s' % file_name

    for param, unit in master_parameter_list.items():
        if np.all(np.isnan(data[param])):
            del data[param]
        else:
            data[param] = data[param] * unit[-1]

    return MergeDataset(metadata, data)

class BaseSondeDataset(object):
    """
    The base class that all sonde format objects should inherit. This
    class contains all the attributes and methods that are common to
    all data formats; it is not intended to be instantiated directly.
    """
    #: A dict that maps parameter codes to long descriptions and their
    #: standard units
    parameters = {}

    def __init__(self, data_file=None):
        if type(data_file) == str:
            self.file_name = data_file
        elif type(data_file) == file:
            self.file_name = data_file.name
        self.data = {}
        self.dates = []
        self.format_parameters = {}
        self.manufacturer = ''
        self.serial_number = ''
        self._read_data()
        self.rescale_all()

        if 'water_specific_conductance' in self.data or \
               'water_electrical_conductivity' in self.data:
            self._calculate_salinity()

        #if 'site_name' in self.format_parameters.keys():
        #    site_name = self.format_parameters['site_name']
        #    @todo tz check

        if default_static_timezone and self.dates[0].tzinfo != None:
            self.convert_timezones(default_static_timezone)

        if not hasattr(self, 'setup_time'):
            self.setup_time = self.dates[0]

        if not hasattr(self, 'start_time'):
            self.start_time = self.dates[0]

        if not hasattr(self, 'stop_time'):
            self.stop_time = self.dates[-1]

        if not hasattr(self, 'serial_number'):
            self.serial_number = ''

        if not hasattr(self, 'site_name'):
            self.site_name = ''

    def apply_mask(self, mask, parameters=None):
        """
        remove data and headers where mask=False
        if parameters = None remove all data
        else apply to list of parameters by setting
        parameter values to np.nan based on mask
        """
        if parameters is None:
            self.dates = self.dates[mask]
            for key in self.data.keys():
                self.data[key] = self.data[key][mask]

            self.manufacturer = self.manufacturer[mask]
            self.data_file = self.data_file[mask]
            self.serial_number = self.serial_number[mask]
        else:
            for parameter in parameters:
                self.data[parameter][~mask] = np.nan

    def write(self, file_name, file_format='netcdf4', fill_value='-999.99',
              metadata={}, disclaimer='', float_fmt='%5.2f'):
        """
        fill_value must be a float
        """
        data = self.data.copy()
        #convert to column file_format
        if isinstance(self.data_file, str):
            fn_list = np.zeros(len(self.dates), dtype='|S100')
            fn_list[:] = self.data_file
        else:
            fn_list = self.data_file

        if isinstance(self.serial_number, str):
            sn_list = np.zeros(len(self.dates), dtype='|S100')
            sn_list[:] = self.serial_number
        else:
            sn_list = self.serial_number

        if isinstance(self.manufacturer, str):
            m_list = np.zeros(len(self.dates), dtype='|S100')
            m_list[:] = self.manufacturer
        else:
            m_list = self.manufacturer

        metadata['original_data_file'] = fn_list
        metadata['instrument_serial_number'] = sn_list
        metadata['instrument_manufacturer'] = m_list
        metadata['fill_value'] = fill_value

        if file_format.lower() == 'netcdf4':
            self._write_netcdf4(file_name, metadata, self.dates, data,
                                disclaimer)
        elif file_format.lower() == 'csv':
            self._write_csv(file_name, metadata, self.dates, data,
                            disclaimer, float_fmt)
        else:
            warnings.warn('Unknown output file_format: %s' % file_format,
                          Warning)
            raise

    def _write_csv(self, file_name, metadata, dates, data, disclaimer,
                   float_fmt):
        """
        write output in csv format
        """

        version = '# file_format: pysonde csv format version 1.0\n'
        header = [version]
        #prepend parameter list and units with single #
        param_header = '# datetime, '
        unit_header = '# yyyy/mm/dd HH:MM:SS, '
        dtype_fmts = ['|S19']
        fmt = '%s, '
        for param in np.sort(data.keys()):
            param_header += param + ', '
            try:
                unit_header += data[param].dimensionality.keys()[0].symbol + \
                               ', '
            except:
                unit_header += 'nd, '
            fill_value = float(metadata['fill_value']) * data[param].units
            data[param][np.isnan(data[param])] = fill_value
            dtype_fmts.append('f8')
            fmt += float_fmt + ', '

        #prepend disclaimer and metadata with ##
        for line in disclaimer.splitlines():
            header.append('# disclaimer: ' + line + '\n')

        #for key,val in metadata.items():
        #    if not isinstance(val, np.ndarray):
        #        header.append('# ' + str(key) + ': ' + str(val) + '\n')
        #    else:
        #        param_header += key + ', '
        #        unit_header += 'n/a, '
        #        dtype_fmts.append(val.dtype)
        #        fmt += '%s, '
        for key in np.sort(metadata.keys()):
            if not isinstance(metadata[key], np.ndarray):
                header.append('# %s: %s\n' % (str(key), str(metadata[key])))

            else:
                param_header += key + ', '
                unit_header += 'n/a, '
                dtype_fmts.append(metadata[key].dtype)
                fmt += '%s, '

        #remove trailing commas
        param_header = param_header[:-2] + '\n'
        unit_header = unit_header[:-2] + '\n'
        fmt = fmt[:-2]

        header.append('# timezone: ' + str(self.default_tzinfo) + '\n')
        header.append(param_header)
        header.append(unit_header)

        dtype = np.dtype({
            'names': param_header.replace(' ', '').strip('#\n').split(','),
            'formats': dtype_fmts})

        write_data = np.zeros(dates.size, dtype=dtype)
        write_data['datetime'] = np.array(
            [datetime.datetime.strftime(dt, '%Y/%m/%d %H:%M:%S')
             for dt in dates])

        for key, val in metadata.items():
            if isinstance(val, np.ndarray):
                write_data[key] = val

        for param in data.keys():
            write_data[param] = data[param]

        #start writing file
        fid = open(file_name, 'w')
        fid.writelines(header)
        np.savetxt(fid, write_data, fmt=fmt)
        fid.close()

    def get_standard_unit(self, param_code):
        """
        Return the standard unit for given parameter `param_code`
        """
        return self.parameters[param_code][1]

    def set_standard_unit(self, param_code, param_unit):
        """
        Set the standard param_unit for a given parameter `param_code`
        to `param_unit`. This method automatically rescales the data
        to the standard unit.
        """
        if param_code in self.parameters:
            param_description = self.parameters[param_code][0]
        else:
            param_description = master_parameter_list[param_code][0]

        self.parameters[param_code] = (param_description, param_unit)

        if param_code in self.data:
            self.rescale_parameter(param_code)

    def rescale_all(self):
        """
        Cycle through the parameter list and convert all data values
        to their standard units.
        """
        for param_code in self.parameters.keys():
            self.rescale_parameter(param_code)

    def rescale_parameter(self, param_code):
        """
        Convert the data for a parameter to its standard unit.
        """
        std_unit = self.get_standard_unit(param_code)
        current_unit = self.data[param_code].units

        # return if dimensionless parameter
        if not len(std_unit.dimensionality.keys()):
            return

        # XXX: Todo: Fix upstream (see comment in _temperature_offset)
        std_symbol = std_unit.dimensionality.keys()[0].symbol
        current_symbol = current_unit.dimensionality.keys()[0].symbol

        #if current_unit != std_unit:
        if current_symbol != std_symbol:
            self.data[param_code] = self.data[param_code].rescale(std_unit)

            # Add temperature offset depending on the temperature scales
            if isinstance(std_unit, pq.UnitTemperature):
                self.data[param_code] += self._temperature_offset(
                    current_unit, std_unit)

    def _temperature_offset(self, from_unit, to_unit):
        """
        Return the offset in degrees of `to_unit` that should be
        applied when converting from quantities units `from_unit` to
        `to_unit`. The quantities package purposely avoids converting
        absolute temperature scales to avoid ambiguity.
        """

        # This looks is a bit hacky because it is. In the quantities
        # package, comparing the units for celcius and kelvin
        # evaluates to true because it only considers relative
        # temperatures. We need to compare the symbol string. We
        # should talk to the quantities maintainers and see if we can
        # come up with a cleaner way to do this.
        from_symbol = from_unit.dimensionality.keys()[0].symbol
        to_symbol = to_unit.dimensionality.keys()[0].symbol

        if from_symbol == to_symbol:
            return np.array([0]) * to_unit

        elif from_symbol == 'degC' and to_symbol == 'degF':
            return 32 * pq.degF

        elif from_symbol == 'degC' and to_symbol == 'K':
            return 273.15 * pq.degK

        elif from_symbol == 'degF' and to_symbol == 'degC':
            return -1 * (32 * (5.0 / 9)) * pq.degC

        elif from_symbol == 'degF' and to_symbol == 'K':
            return 459.67 * (5.0 / 9) * pq.degK

        elif from_symbol == 'K' and to_symbol == 'degC':
            return -273.15 * pq.degC

        elif from_symbol == 'K' and to_symbol == 'degF':
            return -459.67 * pq.degF

        else:
            raise NotImplementedError(
                "conversion from %s to %s not supported" %
                (from_symbol, to_symbol))

    def _calculate_salinity(self):
        """
        Calculate salinity if salinity parameter is missing but
        conductivity is present.
        """
        params = self.parameters.keys()
        if 'seawater_salinity' in params:
            return
        else:
            if 'water_specific_conductance' in params:
                T = 25.0
                cond = self.data['water_specific_conductance'].rescale(
                    sq.mScm).magnitude
            elif 'water_electrical_conductivity' in params:
                current_unit = self.data['water_temperature'].units
                temp_celsius = self.data['water_temperature'].rescale(pq.degC)
                temp_celsius += self._temperature_offset(current_unit, pq.degC)
                T = temp_celsius.magnitude
                cond = self.data['water_electrical_conductivity'].rescale(
                    sq.mScm).magnitude
            else:
                return

            if 'water_depth_non_vented' in params:
                P = self.data['water_depth_non_vented'].rescale(
                    sq.dbar).magnitude + (pq.atm).rescale(sq.dbar).magnitude
            elif 'water_depth_vented' in params:
                P = self.data['water_depth_vented'].rescale(sq.dbar).magnitude
            else:
                P = (pq.atm).rescale(sq.dbar).magnitude

            R = cond / 42.914
            sal = seawater.salt(R, T, P)

            self.set_standard_unit('seawater_salinity', sq.psu)
            self.data['seawater_salinity'] = sal * sq.psu

    def convert_timezones(self, to_tzinfo):
        """
        Convert all dates to some timezone. The argument `to_tzinfo`
        must be an instance of datetime.tzinfo, either from the
        datetime library itself or the pytz library.
        """

        # If to_tzinfo is a pytz timezone, then use the normalize
        # method so pytz can do normalize DST transition data
        if isinstance(to_tzinfo, pytz.tzinfo.BaseTzInfo):
            self.dates = np.array(
                [to_tzinfo.normalize(date.astimezone(to_tzinfo))
                 for date in self.dates])

        # If to_tzinfo is a regular tz_info instance, then just call
        # astimezone
        else:
            self.dates = np.array([date.astimezone(to_tzinfo)
                                   for date in self.dates])

    def _read_data(self):
        """
        Read data from a file. This method should be implemented by
        each format module.
        """
        return [np.array([]), np.array([])]


Venture capital is always wanting to go up market.
People have an idol they want to be like and try to follow what the idols did. But when you do, you find out you're not very successful and you're not very happy. You try to copy these models, and it doesn't yield successful results.
I don't have my finger on the pulse of corruption in China, but I think most people on the ground would say that as China was emerging from communism, it was a very regulated society, and therefore, it was very corrupt. But as they have deregulated the economy, there just aren't as many opportunities for people to be corrupt.
Management is the opportunity to help people become better people. Practiced that way, it's a magnificent profession.
Disruption is a process, not an event, and innovations can only be disruptive relative to something else.
Management is getting people together to figure out how to transform inputs into outputs. In the process of figuring out the process of how people work together, you've got to figure out who's got what responsibilities, and how do they work together.
The first two lessons, which we learned early in our efforts to be good member missionaries, have made sharing the Gospel much easier: We simply can't predict who will or won't be interested in the Gospel, and building a friendship is not a prerequisite to inviting people to learn about the Gospel.
The concept of disruption is about competitive response; it is not a theory of growth. It's adjacent to growth. But it's not about growth.
No idea for a new growth business ever comes fully shaped. When it emerges, it's half-baked, and it then goes through a process of becoming fully shaped.
'Disruption' is, at its core, a really powerful idea. Everyone hijacks the idea to do whatever they want now. It's the same way people hijacked the word 'paradigm' to justify lame things they're trying to sell to mankind.
When a company identifies how to integrate the processes needed to give the consumer a sense of job completion, it can blow away the competition. A product is easy to copy, but experiences are very hard to replicate.
The breakthrough innovations come when the tension is greatest and the resources are most limited. That's when people are actually a lot more open to rethinking the fundamental way they do business.
An innovation will get traction only if it helps people get something that they're already doing in their lives done better.
The reason why it is so difficult for existing firms to capitalize on disruptive innovations is that their processes and their business model that make them good at the existing business actually make them bad at competing for the disruption.